diff --git a/.gitignore b/.gitignore
index 77c2ea2d819fa17b120547f321769e3dc4d66a25..c47e1b7744bcabe1c8f1b361199005c7ec1d8e9b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,3 +42,12 @@ print.prt
 */tsts/*/input/*
 */tsts/*/truth/*
 */tsts/*/output/*
+*/build/
+*/install/
+
+
+
+
+
+
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..70035ab9a956394822950817e5ea49a78d9e8e51
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,76 @@
+# Contributing to ISIS3
+# Under Construction
+
+#### Table of Contents
+[I have a question or a problem!](#i-have-a-question-or-a-problem)
+
+[How can I contribute?](#how-can-i-contribute)
+  * [Suggesting enhancements](#redmine-issues)
+  * [Working on an existing issue or enhancement](#working-on-an-existing-issue-or-enhancement)
+  * [Working on a new issue or enhancement](#working-on-a-new-issue)
+
+[Code Base Contribution Guidelines](#code-base-contribution-guidelines)
+
+[What can I expect from the ISIS3 development team](#What-can-I-expect-from-the-ISIS3-development-team)
+  * [Response time](#Response-time)
+  * [Feedback](#feedback)
+
+[Development Process Checklists](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developer-Checklists)
+
+[References](#references)
+
+## I have a question or a problem!
+If you have a question about or a problem with ISIS3, please see the [Redmine Issues](#redmine-issues) section.
+
+If you have a question or a problem with contributing to our software please contact mshepherd@usgs.gov
+
+## How can I contribute?
+
+### Redmine Issues
+Redmine is our ticket tracking tool. If you have a question about, a problem with, or a suggestion for ISIS3, please read our [Guidelines for reporting Redmine issues](https://isis.astrogeology.usgs.gov/fixit/projects/isis/wiki/Guidelines_for_Reporting_Issues). Once you have read that please [submit](https://isis.astrogeology.usgs.gov/fixit/projects/isis/issues/new) a Redmine issue.
+
+### Working on an issue or enhancement
+1. Find a issue or enhancement that you want to work on. Check Redmine [issues](https://isis.astrogeology.usgs.gov/fixit/projects/isis/issues) to see if there has been a ticket reported about it. If one does not exist that addresses what you want to work on, make a ticket.
+2. Assign the Redmine issue to yourself. If you don't have the permission to do this, please make a note on the issue indicating that you would like to work on it. 
+3. Propose a solution on the redmine issue. 
+4. Work with an ISIS3 developer, the issue reporter, and any other interested parties to get feedback on your solution. This may be an iterative process.
+5. Add an [impact statement](https://isis.astrogeology.usgs.gov/fixit/projects/isis/wiki/Impact_Statement) to the redmine issue. If you don't have the permission to do this, please make a note on the issue with the impact statement.
+6. Make the changes on your fork of the ISIS3 main GitHub repo. Follow the [Code Base Contribution Guidelines](#code-base-contribution-guidelines).
+7. Follow the Developer's Checklist to ensure your changes are ready for review.
+8. Make a pull request. Include the redmine issue number in the title of the pull request. Use the "Fixes #0000" format.
+9. Work with your code reviewer, tester, and reporter to improve your changes. Your pull request will not be merged in until all parties approve the changes.
+10. Check in your test data. If you are an outside contributer, work with your code reviewer to ensure your tests and test data get checked in.
+
+### Working on a new issue or enhancement
+1. Please create a [Redmine issue](#redmine-issues).
+2. Indicate in the comments of your issue that you would like to work on the issue or enhancement.
+3. Follow the [Working on an existing issue or enhancement](#working-on-an-existing-issue-or-enhancement) steps.
+ 
+## Code Base Contribution Guidelines
+The following is a set of guidelines for contributing to ISIS3. 
+* Personal style changes will not be accepted.
+* Changes to bring code closer to our [Coding Standards and Style Guide](https://isis.astrogeology.usgs.gov/documents/CodingStandards/CodingStandards.html) are encouraged.
+* Please be professional, even in comments.
+* Variable names must be meaningful.
+* All modified code is required to pass our [Coding Standards and Style Guide](https://isis.astrogeology.usgs.gov/documents/CodingStandards/CodingStandards.html).
+* You must write or update tests to exercise any modified code.
+* You must provide test data for any new or modified tests.
+* You must have a Redmine issue assigned to you before submitting a pull request.
+* You must complete the Developer Checklist before submitting your pull request.
+* When submitting a pull request, you must include the Redmine issue number in the title of the pull request. Use the "Fixes #0000" format (#0000 being the Redmine ticket number).
+
+## What can I expect from the ISIS3 development team?
+### Response Time
+Our response time will depend on availability and scheduling.
+### Feedback
+Our feedback will address any discrepancies related to the contribution guidelines, our coding standards and style guide, and our code review checklist.
+
+## References
+  * [ISIS3 API Reference](https://isis.astrogeology.usgs.gov/Object/Developer/index.html)
+  * [Tutorials](https://isis.astrogeology.usgs.gov/fixit/projects/isis/wiki/ISIS_Online_Workshops)
+  * [Application Documentation](https://isis.astrogeology.usgs.gov/Application/index.html)
+  * [Coding Standards and Style Guide](https://isis.astrogeology.usgs.gov/documents/CodingStandards/CodingStandards.html)
+  * [Documentation](https://isis.astrogeology.usgs.gov/documents/CodingStandards/CodingStandards.html#documentation)
+  * [Redmine Issue Lifecycle](https://isis.astrogeology.usgs.gov/fixit/projects/isis/wiki/Life_Cycle_of_an_ISIS_Issue)
+  
+
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000000000000000000000000000000000000..dbd8245a00167dd3754b3cd4146b1ab49ab009cc
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,76 @@
+pipeline { 
+    agent none 
+    environment {
+        ISISROOT="${workspace}" + "/build/"
+        ISIS3TESTDATA="/usgs/cpkgs/isis3/testData/"
+        ISIS3DATA="/usgs/cpkgs/isis3/data/"
+    }
+    stages {
+        stage('Fedora25') {
+            agent {
+                docker {
+                    label 'cmake'
+                    image 'chrisryancombs/docker_isis'
+                    args  '''\
+                            -v /usgs/cpkgs/isis3/data:/usgs/cpkgs/isis3/data \
+                            -v /usgs/cpkgs/isis3/testData:/usgs/cpkgs/isis3/testData\
+                            -v /usgs/cpkgs/isis3/isis3mgr_scripts:/usgs/cpkgs/isis3/isis3mgr_scripts
+                          '''  
+                }
+            }
+            steps { 
+                sh """
+                    conda env create -n isis3 -f environment.yml
+                    source activate isis3
+                    mkdir -p ./install ./build && cd build
+                    source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh .
+                    cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis
+                    set +e
+                    ninja -j8 && ninja install
+                    source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh .
+                    ctest -V -R _unit_ --timeout 500
+                    ctest -V -R _app_ --timeout 500
+                    ctest -V -R _module_ --timeout 500
+                    """
+            }
+        }
+        stage('CentOS7') {
+            agent {
+                docker {
+                    label 'cmake_cool'
+                    image 'chrisryancombs/docker_isis_centos'
+                    args  '''\
+                            -v /usgs/cpkgs/isis3/data:/usgs/cpkgs/isis3/data \
+                            -v /usgs/cpkgs/isis3/testData:/usgs/cpkgs/isis3/testData\
+                            -v /usgs/cpkgs/isis3/isis3mgr_scripts:/usgs/cpkgs/isis3/isis3mgr_scripts
+                          '''  
+                }
+            }
+            steps {
+                sh """
+                    conda env create -n isis3 -f environment.yml
+                    source activate isis3
+                    cd build
+                    set +e
+                    source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh .
+                    ctest -V -R _unit_ --timeout 500
+                    ctest -V -R _app_ --timeout 500
+                    ctest -V -R _module_ --timeout 500
+                """
+            }
+        }
+    }
+//    post {
+//        success {
+//            sh 'pwd && ls'
+//            archiveArtifacts artifacts: "build/objects/*.o"
+//        }
+//        always {
+//            mail to: 'ccombs@usgs.gov',
+//                    subject: "Build Finished: ${currentBuild.fullDisplayName}",
+//                    body: "Link: ${env.BUILD_URL}"
+//            sh "rm -rf build/* && rm -rf install/*"
+//            cleanWs()
+//        }
+//    }
+} 
diff --git a/README.md b/README.md
index 6c1a4a93bf15232bd6d91e36949d91fd94ad1276..29d650272517c5836ef07dfba9a3c2344ca58475 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,5 @@
 # ISIS3
+
+[![Join the chat at https://gitter.im/USGS-Astrogeology/isis3_cmake](https://badges.gitter.im/USGS-Astrogeology/isis3_cmake.svg)](https://gitter.im/USGS-Astrogeology/isis3_cmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
 Integrated Software for Imagers and Spectrometers ISIS3 public release site
diff --git a/configure.py b/configure.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a3c84d735029595149855b4528648a990ba8748
--- /dev/null
+++ b/configure.py
@@ -0,0 +1,88 @@
+import os
+import sys
+import sipconfig
+import sipdistutils
+import PyQt5
+import subprocess
+import argparse
+
+from os.path import splitext
+from os.path import dirname
+from glob import glob
+from distutils.spawn import find_executable
+
+from PyQt5.QtCore import PYQT_CONFIGURATION
+from plio.utils.utils import find_in_dict
+from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict
+from sipconfig import ModuleMakefile
+
+def main (module):
+    # The name of the SIP build file generated by SIP and used by the build
+    # system.
+    sipy_sip_dir = "sipfiles/"
+    module = sipy_sip_dir+module + '.sip'
+    build_file = "bundle"+".sbf"
+    target = module+".so"
+
+    # Get the extra SIP flags needed by the imported qt module.  Note that
+    # this normally only includes those flags (-x and -t) that relate to SIP's
+    # versioning system.
+    qt_sip_flags = qtconfigdict["sip_flags"]
+
+    # sip_bin = current_env_path + "/bin/sip"
+    sip_bin = find_executable('sip')
+    pyqt_sip_dir = dirname(dirname(sip_bin)) + "/share/sip/PyQt5"
+
+    # Get the PyQt configuration information.
+    config = sipconfig.Configuration()
+
+    # Run SIP to generate the code.  Note that we tell SIP where to find the qt
+    # module's specification files using the -I flag.
+
+    errcode = os.system(" ".join([sip_bin, "-e","-c", ".", "-b", build_file, "-I",
+        pyqt_sip_dir, qt_sip_flags, module]))
+
+    if errcode != 0:
+        print('sip exited with non zero error code: {}'.format(errcode))
+
+    # We are going to install the SIP specification file for this module and
+    # its configuration module.
+    installs = []
+    installs.append([module, os.path.join(pyqt_sip_dir, "isis3")])
+
+    isis_root = os.getenv("ISISROOT")
+    if not isis_root:
+        raise("Please set ISIS")
+
+    extra_libs = ["$(ALLLIBS)", "-Wl,-rpath,"+isis_root+"/lib", "-Wl,-rpath,"+isis_root+"/3rdParty/lib"]
+
+    makefile = ModuleMakefile(configuration=config, build_file=build_file, installs=installs)
+    makefile.extra_cxxflags = ["$(ALLINCDIRS)", "-Wstrict-aliasing=0", "-Wno-unused-variable"]
+    makefile.extra_lflags =  ["$(ALLLIBDIRS)"]
+    makefile.extra_include_dirs = [x[0] for x in os.walk('incs/')]
+    makefile.extra_lib_dirs = [isis_root + '/3rdParty/lib', isis_root + 'lib']
+    makefile.generate()
+
+    # add import line for isismake.os
+    isis_makefile = "include " + isis_root + "/make/isismake.os"
+
+    with open("Makefile", 'r+') as f:
+        content = f.read()
+        content = content.replace("LIBS =", "LIBS = " + ' '.join(extra_libs))
+        f.seek(0, 0)
+        f.write(isis_makefile + '\n\n' + content)
+
+if __name__ == "__main__":
+    clean = ['cpp', 'c', 'h', 'hpp', 'o', 'sbf']
+
+    # If clean is passed in, clear up all the files genreated by the scripts
+    if len(sys.argv) > 1 and sys.argv[1] == 'clean':
+        files = []
+        for filetype in clean:
+            files.extend(glob('*.{}'.format(filetype)))
+
+        for f in files:
+            os.remove(f)
+        exit()
+
+    main('master')
diff --git a/environment.yml b/environment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c96c1247c61961f5177826fdefc71c22abd29a76
--- /dev/null
+++ b/environment.yml
@@ -0,0 +1,70 @@
+channels:
+  - usgs-astrogeology
+  - conda-forge
+  - probcomp
+  - defaults
+
+dependencies:
+  - armadillo==8.200.0
+  - blas==1.1=openblas
+  - bullet==2.86.1=0
+  - bz2file==0.98
+  - bzip2==1.0.6=1
+  - cmake==3.9.1=0
+  - cspice==66=h470a237_3
+  - curl==7.60.0=0
+  - doxygen==1.8.14=0
+  - eigen==3.3.3=0
+  - embree==2.14.0=0
+  - geos==3.5.1
+  - geotiff==1.4.2=1
+  - gmm==5.0
+  - gmp==6.1.2=0
+  - gsl==2.2.1=blas_openblas_3
+  - hdf5==1.8.18=2
+  - icu==58.2=0
+  - jama==125
+  - jpeg==9b=2
+  - kakadu==1
+  - krb5==1.14.2=0
+  - libpng>=1.6.34
+  - libprotobuf==3.5.2
+  - libtiff==4.0.9=0
+  - libxml2==2.9.7=0
+  - make
+  - mesalib==17.2.0=0
+  - mysql==5.7.20
+  - mysql-connector-c==6.1.6=0
+  - nanoflann==1.2.2
+  - ninja==1.7.2=0
+  - conda-forge/label/gcc7::nn
+  # - numpy==1.13.3=py36_blas_openblas_200
+  - openblas==0.2.19=2
+  - opencv
+  - openssl==1.0.2n=0
+  - patchelf==0.9
+  - pcl==1.8.1
+  - pip==9.0.1
+  - protobuf==3.5.2
+  # - pyqt==5.6.0
+  - python==3.6
+  - qhull==7.2.0=0
+  - qt=5.9.6
+  - qwt=6.1.3
+  - setuptools=38.5.1
+  - sip==4.18
+  - sqlite==3.13.0=1
+  - suitesparse==4.5.4=blas_openblas_200
+  - superlu==5.2.1=blas_openblas_201
+  - tnt==126=0
+  - wheel==0.30.0
+  - x264==20131218
+  - xalan-c==1.11
+  - xerces-c==3.1.4=0
+  - xorg-kbproto==1.0.7=1
+  - xorg-libice
+  - xorg-libsm
+  - xorg-libx11==1.6.4=6
+  - xorg-libxi
+  - zlib==1.2.11=0
+
diff --git a/environment_gcc4.yml b/environment_gcc4.yml
new file mode 100644
index 0000000000000000000000000000000000000000..658ab336d367df47c51c22c35d7e7c2befe47c93
--- /dev/null
+++ b/environment_gcc4.yml
@@ -0,0 +1,71 @@
+channels:
+  - jessemapel
+  - usgs-astrogeology
+  - conda-forge
+  - probcomp
+  - defaults
+
+dependencies:
+  - armadillo==8.200.0
+  - blas==1.1=openblas
+  - bullet==2.86.1=0
+  - bz2file==0.98
+  - bzip2==1.0.6=1
+  - cmake==3.9.1=0
+  - cspice==66=h470a237_3
+  - curl==7.60.0=0
+  - doxygen==1.8.14=0
+  - eigen==3.3.3=0
+  - embree==2.14.0=0
+  - geos==3.5.1
+  - geotiff==1.4.2=1
+  - gmm==5.0
+  - gmp==6.1.2=0
+  - gsl==2.2.1=blas_openblas_3
+  - hdf5==1.8.18=2
+  - icu==58.2=0
+  - jama==125
+  - jpeg==9b=2
+  - kakadu==1
+  - krb5==1.14.2=0
+  - libpng>=1.6.34
+  - libprotobuf==3.5.2
+  - libtiff==4.0.9=0
+  - libxml2==2.9.7=0
+  - make
+  - mesalib==17.2.0=0
+  - mysql==5.7.20
+  - mysql-connector-c==6.1.6=0
+  - nanoflann==1.2.2
+  - ninja==1.7.2=0
+  - nn==1.86.0=2
+  # - numpy==1.13.3=py36_blas_openblas_200
+  - openblas==0.2.19=2
+  - opencv
+  - openssl==1.0.2n=0
+  - patchelf==0.9
+  - pcl==1.8.1
+  - pip==9.0.1
+  - protobuf==3.5.2
+  # - pyqt==5.6.0
+  - python==3.6
+  - qhull==7.2.0=0
+  - qt=5.9.6
+  - qwt=6.1.3
+  - setuptools=38.5.1
+  - sip==4.18
+  - sqlite==3.13.0=1
+  - suitesparse==4.5.4=blas_openblas_200
+  - superlu==5.2.1=blas_openblas_201
+  - tnt==126=0
+  - wheel==0.30.0
+  - x264==20131218
+  - xalan-c==1.11
+  - xerces-c==3.1.4=0
+  - xorg-kbproto==1.0.7=1
+  - xorg-libice
+  - xorg-libsm
+  - xorg-libx11==1.6.4=6
+  - xorg-libxi
+  - zlib==1.2.11=0
+
diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bb510329611d0bf5b7e5e0d27875192019b8d706
--- /dev/null
+++ b/isis/CMakeLists.txt
@@ -0,0 +1,461 @@
+#===============================================================================
+#      The main build file for building ISIS using CMake.
+#===============================================================================
+# CMake initialization
+
+# Specify the required version of CMake.  If your machine does not
+#  have this, it should be easy to build from https://cmake.org/download/
+cmake_minimum_required(VERSION 3.4)
+
+# Point cmake to our other CMake files.
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+
+set(CMAKE_FIND_FRAMEWORK LAST)
+
+include(AddIsisModule)
+include(Utilities)
+include(TestSetup)
+include(InstallThirdParty)
+
+#===============================================================================
+#===============================================================================
+# Project information
+
+project (USGS_ISIS)
+
+# Short and long name of this package
+set(PACKAGE            "ISIS")
+set(PACKAGE_NAME       "USGS ISIS")
+
+# Version number
+set(VERSION            "3.5.00.0")
+set(PACKAGE_VERSION    ${VERSION})
+
+# Full name and version number
+set(PACKAGE_STRING     "${PACKAGE_NAME} ${VERSION}")
+
+# Other release information
+set(VERSION_DATE              "2017-04-24")
+set(THIRD_PARTY_LIBS_VERSION  "v007")
+set(RELEASE_STAGE             "alpha") # (alpha, beta, stable)
+
+# Define to the address where bug reports for this package should be sent.
+set(PACKAGE_BUGREPORT  "https://isis.astrogeology.usgs.gov/fixit")
+
+# Main website associated with the software package
+set(PACKAGE_URL        "https://isis.astrogeology.usgs.gov/")
+
+# Retrieve a string describing the OS this is built on.
+get_os_version(osVersionString)
+message("Detected Operating System: ${osVersionString}")
+
+#===============================================================================
+#===============================================================================
+# Configuration options
+
+# All libraries are build as shared.  The main library is also built
+#  as a static library using some specialized code in Utilities.cmake.
+set(BUILD_SHARED_LIBS ON)
+
+# make sure to leave rpaths untouched on install
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+# Specify user options that can be passed in with the initial CMake command.
+option(isis3Data       "Directory containing Isis3Data"                 OFF )
+option(isis3TestData   "Directory containing Isis3TestData"             OFF )
+option(testOutputDir   "Directory to store app test output folders"     OFF )
+option(buildCore       "Build the core ISIS modules"                    ON  )
+option(buildMissions   "Build the mission specific modules"             ON  )
+option(buildStaticCore "Build libisis3 static as well as dynamic"       OFF )
+option(buildTests      "Set up unit, application, and module tests."    ON  )
+option(JP2KFLAG        "Whether or not to build using JPEG2000 support" OFF )
+option(pybindings      "Turn on to build Python bindings"               OFF )
+
+# if cmake install prefix is not set, and conda env is activated, use the
+# conda env as the install directory
+if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local")
+ set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX})
+endif()
+
+# Prioritize passed in variables over env vars, probably a better way to do this
+if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data)
+ set(isis3Data $ENV{ISIS3DATA})
+endif()
+if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData)
+ set(isis3TestData $ENV{ISIS3TESTDATA})
+endif()
+
+if(EXISTS ${isis3Data})
+ set(ENV{ISIS3DATA} "${isis3Data}")
+else()
+ message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.")
+ set(isis3Data OFF)
+endif()
+
+if(EXISTS ${isis3TestData})
+ set(ENV{ISIS3TESTDATA} "${isis3TestData}")
+else()
+ message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.")
+ set(isis3TestData OFF)
+endif()
+
+if(${testOutputDir} STREQUAL "OFF")
+ message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir")
+ set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir")
+ execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir)
+else()
+ # User specified a test output folder, make sure it exists.
+ message("Writing test data folders to = ${testOutputDir}")
+ execute_process(COMMAND mkdir -p ${testOutputDir})
+endif()
+
+# inject ISISROOT
+add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" )
+add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" )
+
+message("CONFIGURATION")
+message("\tBUILD STATIC CORE: ${buildStaticCore}")
+message("\tBUILD TESTS: ${buildTests}")
+message("\tBUILD CORE: ${buildCore}")
+message("\tBUILD MISSIONS: ${buildMissions}")
+message("\tJP2K SUPPORT: ${JP2KFLAG}")
+message("\tPYTHON BINDINGS: ${pybindings}")
+message("\tISIS3DATA: ${isis3Data}")
+message("\tISISTESTDATA: ${isis3TestData}")
+message("\tTEST OUTPUT DIR: ${testOutputDir}")
+message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}")
+
+#===============================================================================
+#===============================================================================
+
+# Set up the ctest tool which is used to run all of the tests.
+enable_testing()
+include(CTest)
+
+# Set up Anaconda prefix in the case with a non-default conda env is activated
+if(EXISTS $ENV{CONDA_PREFIX})
+  message("CONDA PREFIX: $ENV{CONDA_PREFIX}")
+  list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX}
+                                   $ENV{CONDA_PREFIX}/lib/cmake/Qt5)
+endif()
+
+# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K
+# needs to be either 1 or 0 for C style true false
+if(JP2KFLAG)
+ set(JP2KFLAG 1)
+endif()
+
+# Set up the ctest tool which is used to run all of the tests.
+enable_testing()
+include(CTest)
+
+# Specify flags used
+# on linux, add the conda prefix to handle possible issues with rpaths at link time
+# sometimes third parties do not set their rpaths correctly
+set(thirdPartyCppFlags -Wall
+                       -fPIC
+                       -std=c++11
+                       -DISIS_LITTLE_ENDIAN=1
+                       -Wno-unused-parameter
+                       -Wno-overloaded-virtual
+                       -Wno-strict-aliasing
+		       -Wno-strict-overflow
+                       -DGMM_USES_SUPERLU
+                       -DENABLEJP2K=${JP2KFLAG}
+                     )
+
+ # Append CPP flags set in the third party lib file to the string set in this file.
+ string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}")
+ set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" )
+
+
+# Flag to fix numeric literals problem with boost on linux
+# Add gold linker (and therefore, phtread) to speed up linux (spec. Ubuntu18.04) builds
+if(NOT APPLE)
+  set(thirdPartyCppFlags ${thirdPartyCppFlags} -fuse-ld=gold
+	                                       -pthread
+					       -fext-numeric-literals
+                                               -Wl,-rpath,$ENV{CONDA_PREFIX}/lib)
+endif()
+
+ # Append CPP flags set in the third party lib file to the string set in this file.
+ string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}")
+ set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" )
+
+
+# Paths to required executables
+find_program(XALAN Xalan REQUIRED)
+find_program(LATEX latex)
+find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED)
+find_program(UIC uic REQUIRED)
+find_program(MOC moc REQUIRED)
+find_program(RCC rcc REQUIRED)
+find_program(PROTOC protoc REQUIRED)
+
+find_package(Qt5 COMPONENTS
+                Core
+                Concurrent
+                Gui
+                Multimedia
+                MultimediaWidgets
+                Network
+                OpenGL # Needed to install mesa-common-dev for this!
+                PrintSupport
+                Qml
+                Quick
+                Script
+                ScriptTools
+                Sql
+                Svg
+                Test
+                WebChannel
+                Widgets
+                Xml
+                XmlPatterns
+                # Search this path explicitly for MacOS OpenGL Framework
+                PATHS /System/Library/Frameworks/ REQUIRED)
+
+# Some of these will have non-traditional installs with version numbers in the paths in v007
+# For these, we pass in a version number, and use it in the path suffix
+# This only applies to v007, and outside of the building, we should only expect standard installs
+# The v007-specific installs are listed beside their find_package calls below:
+find_package(Boost     1.59.0  REQUIRED)
+find_package(Bullet    2.86    REQUIRED)
+find_package(Cholmod   4.4.5   REQUIRED)
+find_package(CSPICE    65      REQUIRED)
+find_package(Eigen             REQUIRED)
+find_package(Embree    2.15.0  REQUIRED)
+find_package(GeoTIFF   2       REQUIRED)
+find_package(GMM       5.0     REQUIRED)
+find_package(GSL       19      REQUIRED)
+find_package(HDF5      1.8.15  REQUIRED)
+find_package(Jama      125     REQUIRED)
+find_package(NN                REQUIRED)
+find_package(OpenCV    3.1.0   REQUIRED)
+find_package(PCL       1.8     REQUIRED)
+find_package(Protobuf  2.6.1   REQUIRED)
+find_package(Qwt       6       REQUIRED)
+find_package(SuperLU   4.3     REQUIRED)
+find_package(TIFF      4.0.5   REQUIRED)
+find_package(TNT       126     REQUIRED)
+find_package(XercesC   3.1.2   REQUIRED)
+find_package(X11       6       REQUIRED)
+find_package(nanoflann         REQUIRED)
+find_package(PNG               REQUIRED)
+find_package(Kakadu)
+find_package(Geos    3.5.0     REQUIRED)
+find_package(Armadillo         REQUIRED)
+
+if(pybindings)
+ find_package(Python REQUIRED)
+ find_package(Sip    REQUIRED)
+endif()
+
+# Iterate through all variables and extract the libraries and include directories
+get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES
+
+set(ALLLIBDIRS "")
+set(ALLLIBS "")
+set(ALLINCDIRS "")
+
+# Get all include dir variables
+foreach (_variableName ${_variableNames})
+#message("VAR=${_variableName}")
+   if (_variableName MATCHES ".+_INCLUDE_DIR$")
+     list(APPEND ALLINCDIRS "${${_variableName}}")
+   elseif (_variableName MATCHES ".+_INCLUDE_PATH$")
+     list(APPEND ALLINCDIRS "${${_variableName}}")
+   endif(_variableName MATCHES ".+_INCLUDE_DIR$")
+endforeach()
+
+# get all Library variables
+foreach (_variableName ${_variableNames})
+   get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY)
+   if (_variableName MATCHES "^CMAKE+")
+   elseif (_variableName MATCHES ".+_LIB$")
+     list(APPEND ALLLIBDIRS "${LIBDIR}")
+     list(APPEND ALLLIBS "${${_variableName}}")
+   elseif (_variableName MATCHES ".+_LIBRARY$")
+     list(APPEND ALLLIBDIRS "${LIBDIR}")
+     list(APPEND ALLLIBS "${${_variableName}}")
+   elseif (_variableName MATCHES ".+_LIBRARIES$")
+     list(APPEND ALLLIBDIRS "${LIBDIR}")
+     list(APPEND ALLLIBS "${${_variableName}}")
+   endif()
+endforeach()
+
+# Sometimes we add the same lib more than once (especially with LIBDIRS)
+list(REMOVE_DUPLICATES ALLLIBDIRS)
+list(REMOVE_DUPLICATES ALLLIBS)
+list(REMOVE_DUPLICATES ALLINCDIRS)
+
+#===============================================================================
+#===============================================================================
+
+# Set python bindings configuration and set target for generating C++ files
+if(pybindings)
+  message("Configuring Python Bindings")
+
+  if (NOT DEFINED PYINSTALL_DIR)
+    set(PYINSTALL_DIR ${PYTHON_SITE_PACKAGES_DIR})
+  endif()
+  message(STATUS "PYTHON BINDINGS INSTALL DIR: ${PYINSTALL_DIR}")
+
+ # We need to get the locations for sip files, modules, etc.
+ set(ISIS_SIP_DIR "${CMAKE_SOURCE_DIR}/sipfiles")
+ set(ISIS_SIP_MODULE "${CMAKE_SOURCE_DIR}/sipfiles/master.sip")
+ set(SIP_BUILD_FILE "isispy.sbf")
+ set(ISIS_SIP_CODE_DIR ${CMAKE_BINARY_DIR}/sipsrc)
+
+ # Create the output directory for the new .CPP files
+ execute_process(COMMAND mkdir -p "${ISIS_SIP_CODE_DIR}")
+
+ # get list of output files exepected from sip
+
+ # get the PYQT configuration based flags from Python
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
+                 "from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict;print(qtconfigdict['sip_flags'])"
+                 OUTPUT_VARIABLE PYQT_SIP_FLAGS)
+
+ # CMAKE doesn't handle spaces from python well when piping that into the
+ # command because of white space and a trailing new line,
+ # so we turn it into a list
+ message(STATUS "Getting SIP config...")
+ message(STATUS "Attempting 'python -c \"from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict; print(qtconfigdict['sip_flags'])\"'")
+
+ if (${PYQT_SIP_FLAGS} STREQUAL "")
+    message(FATAL_ERROR "print(qtconfigdict['sip_flags']) returned empty string, is sip installed? Python binding can be disabled with pybindings=OFF")
+ endif()
+ string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS)
+ string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS})
+
+ message(STATUS "FLAGS: ${PYQT_SIP_FLAGS}")
+ message(STATUS "Generating C++ code from sip files")
+ message(STATUS "SIP BUILD FILE: ${SIP_BUILD_FILE}")
+ message(STATUS "SIP MODULE: ${ISIS_SIP_MODULE}")
+ message(STATUS "SIP GENERATED CODE DIR: ${ISIS_SIP_CODE_DIR}")
+
+ execute_process(COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE})
+
+ # add target so users can run the command after initial configuration
+ add_custom_target(sipfiles
+                  COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE}
+                  COMMENT "Generating C++ code from sip files")
+
+ file(GLOB SIP_GENERATED_SOURCE_FILES ${ISIS_SIP_CODE_DIR}/*.cpp)
+ add_library(isispy MODULE ${SIP_GENERATED_SOURCE_FILES})
+ target_link_libraries(isispy ${ALLLIBS})
+ target_link_libraries(isispy isis3)
+ set_target_properties(isispy PROPERTIES LINK_DEPENDS isis3 INSTALL_RPATH ${CMAKE_INSTALL_PREFIX})
+ add_dependencies(isispy sipfiles)
+
+ install(TARGETS isispy DESTINATION ${PYINSTALL_DIR})
+endif()
+
+
+#===============================================================================
+#===============================================================================
+
+# Start setting up the build
+# Add extension to find fortran until .so symlink can be added to /usr/lib64
+list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5)
+
+# Allow everything to include the 3rd party libraries
+include_directories(SYSTEM ${ALLINCDIRS})
+link_directories(${ALLLIBDIRS})
+
+include_directories(${CMAKE_BINARY_DIR}/inc)
+set(CORE_LIB_NAME isis3)
+
+# Specify relative library include paths which will be set up on
+#  the installed files.
+if(APPLE)
+  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};@loader_path/../lib;@loader_path/../3rdParty/lib")
+else()
+  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};$ORIGIN/../lib;$ORIGIN/../3rdParty/lib")
+endif()
+
+# We will set up some links with these files at the end of the install process so
+#  make sure they are cleared at the start of the install process.
+install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.6.0${SO})")
+install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.6${SO})")
+install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.${SO})")
+EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/TestPreferences ${CMAKE_BINARY_DIR}/)
+install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)")
+install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)")
+
+# Delete any existing plugin files in the build folder so they
+#  don't get filled with duplicate entries.
+file(GLOB existingPlugins "${CMAKE_BINARY_DIR}/plugins/*.plugin")
+if(existingPlugins)
+  file(REMOVE ${existingPlugins})
+endif()
+
+# Add a config file to the install bin directory so that QT can find the plugin libraries.
+file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../3rdParty/plugins/\n")
+install(FILES "${CMAKE_BINARY_DIR}/qt.conf" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/xml)
+
+#Create the inc directory
+execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/inc)
+
+# Create an xml folder in the source directory that we will need later
+set(sourceXmlFolder ${CMAKE_BINARY_DIR}/bin/xml)
+execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/xml)
+
+# Set up install of the templates folder.
+install(DIRECTORY ${CMAKE_SOURCE_DIR}/templates DESTINATION .)
+
+# Set up install of the make folder.
+install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX})
+
+# Have CMake process all of the source code and tests.
+add_subdirectory(src objects)
+
+if(APPLE)
+ set(SO ".dylib")
+else()
+ set(SO ".so")
+endif()
+
+# Set up documentation build target.
+# - This script is called by running "ninja docs".
+# - This long call passes all desired variables to the script.
+add_custom_target(docs COMMAND ${CMAKE_COMMAND}
+                  -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
+                  -DDOXYGEN=${DOXYGEN}  -DXALAN=${XALAN}
+                  -DLATEX=${LATEX}
+                  -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
+                  -P ${CMAKE_MODULE_PATH}/BuildDocs.cmake)
+
+# Add custom build target to copy modified header files to the build/incs directory.
+# ALL is specified so that the target is added to the default build target, i.e. the copy command
+# will be executed when running "ninja install"
+# On a clean build, all files will be copied over.
+add_custom_target(incs ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
+  ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp ${CMAKE_BINARY_DIR}/inc)
+add_dependencies(isis3 incs)
+
+# Add a custom build target to clean out everything that gets added to the source
+#  directory during the build process.
+# - Only a few things are added in order to make the tests work properly so
+#   this is very straightforward.
+add_custom_target(clean_source COMMAND rm -rf "${CMAKE_BINARY_DIR}/*" "${CMAKE_INSTALL_PREFIX}/*")
+
+# Set up a few top level files for installation.
+EXECUTE_PROCESS(COMMAND cp -f  ${CMAKE_SOURCE_DIR}/IsisPreferences   ${CMAKE_BINARY_DIR})
+EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/scripts           ${CMAKE_BINARY_DIR})
+EXECUTE_PROCESS(COMMAND cp -f  ${CMAKE_SOURCE_DIR}/license.txt       ${CMAKE_BINARY_DIR})
+EXECUTE_PROCESS(COMMAND cp -f  ${CMAKE_SOURCE_DIR}/version           ${CMAKE_BINARY_DIR})
+EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/make              ${CMAKE_BINARY_DIR})
+
+# Copy the files on make install as well
+install(FILES     ${CMAKE_SOURCE_DIR}/IsisPreferences DESTINATION  ${CMAKE_INSTALL_PREFIX})
+install(FILES     ${CMAKE_SOURCE_DIR}/license.txt     DESTINATION  ${CMAKE_INSTALL_PREFIX})
+install(FILES     ${CMAKE_SOURCE_DIR}/version         DESTINATION  ${CMAKE_INSTALL_PREFIX})
+install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts         DESTINATION  ${CMAKE_INSTALL_PREFIX})
+
+# Trigger all post-install behavior.
+# - The only way to run commands post-install in CMake is to add a subdirectory at
+#   the end of this file containing a CMakeLists.txt file which includes all of
+#   the desired post-install commands inside.
+add_subdirectory(cmake)
diff --git a/isis/TestPreferences b/isis/TestPreferences
new file mode 100644
index 0000000000000000000000000000000000000000..8c0ef67098a0923f7bf7065b0394377225cb5fb1
--- /dev/null
+++ b/isis/TestPreferences
@@ -0,0 +1,216 @@
+#######################################################
+# This file allows the user to customize their Isis
+# configuration.  See the Isis Preference Dictionary
+# on our website isis.astrogeology.usgs.gov for a
+# full description of each group.
+########################################################
+
+########################################################
+# Customize elements of the user interface
+#
+# ProgressBarPercent = 1 | 2 | 5 | 10
+# ProgressBar = On | Off
+# GuiStyle = windows | motif | cde | motifplus | 
+#            platinum | sgi | kde | aqua
+# GuiHelpBrowser = { your preferred browser, may need path }
+# GuiFontName = helvetica | times | charter | any legal font
+# GuiFontSize = 10 | 12 | 14 | any font point size
+# HistoryPath = { your preferred loaction for the application
+#                 .par files }
+# HistoryRecording = On | Off
+# HistoryLength    = (your preferred count of history entries
+#                      to remember)
+########################################################
+
+Group=UserInterface
+  ProgressBarPercent = 10
+  ProgressBar        = Off
+  GuiHelpBrowser     = firefox
+  GuiFontName        = helvetica
+  GuiFontSize        = 10
+  GuiWidth           = 460
+  GuiHeight          = 600
+  HistoryPath        = $HOME/.Isis/history
+  HistoryRecording   = Off
+  HistoryLength      = 10
+EndGroup
+
+########################################################
+# Customize how errors are reported
+#
+# FileLine = On | Off
+# Format = Standard | Pvl
+# StackTrace = On | Off
+########################################################
+
+Group = ErrorFacility
+  FileLine = Off
+  Format = Standard
+  StackTrace = Off
+EndGroup
+
+########################################################
+# Specify which ray-tracing engine to use for shape
+# models.
+# 
+# Leave the ShapeModel Group commented-out to continue
+# using the ISIS3 default. 
+#
+# RayTraceEngine = Bullet | Embree
+# OnError = Continue | Fail
+# Tolerance = { numerical value that will be set as the
+#           tolerance for the Bullet or Embree shape
+#           model } 
+# 
+########################################################
+
+#Group = ShapeModel
+#  RayTraceEngine = Embree
+#  OnError = Continue
+#  CubeSupported = False
+#  Tolerance = DBL_MAX
+#EndGroup
+
+########################################################
+# Customize how session logging is handled
+#
+# TerminalOutput = On | Off
+#    On - in command-line mode - user input parameters,
+#                           results, and accounting are
+#                           reported to the terminal.
+#                           Errors are reported in Pvl
+#                           also to the terminal.
+#       -  in interactive mode - same as command-line
+#                           mode, but output is directed
+#                           to the gui.  In the case of
+#                           an error, nothing is reported
+#                           to the gui except a pop-up
+#                           window displaying the error.
+#    Off - in command-line mode - only the results are
+#                           reported to the terminal, or
+#                           in the case of an error, 
+#                           the error is reported in Pvl
+#                           to the terminal.
+#        - in interactive mode - same as command-line mode,
+#                           but the error is reported in
+#                           a pop-up window in the gui.
+# FileOutput = On | Off
+# FileName = print.prt | /mydirectory/myfile.prt
+# FileAccess = Append | Overwrite
+########################################################
+
+Group = SessionLog
+  TerminalOutput = Off
+  FileOutput     = On
+  FileName       = print.prt
+  FileAccess     = Append
+EndGroup
+
+########################################################
+# Customize how cubes are created
+#
+# Overwrite = Error | Allow
+# Format = Attached | Detached
+# History = On | Off
+# MaximumSize = max # of gigabytes
+########################################################
+
+Group = CubeCustomization
+  Overwrite  = Allow
+  Format     = Attached
+  History    = On
+  MaximumSize = 12 
+EndGroup
+
+########################################################
+# Customize how other files are created
+#
+# Overwrite = Error | Allow
+#
+# If Error, then overwrites of any non-cube
+# file will be disallowed and an error will be thrown
+########################################################
+
+Group = FileCustomization
+  Overwrite  = Allow
+EndGroup
+
+########################################################
+# Customize how Isis uses your computer's resources.
+#
+# CubeWriteThread = Always | Optimized | Never
+#   Always - Override Isis program defaults and always
+#     use a separate thread for writing out cubes. This
+#     will probably improve performance for some
+#     programs, will probably negatively impact programs
+#     that read/write the same file. This option should
+#     be used with caution.
+#   Optimized - Let the Isis program decide based on
+#     it's own internal knowledge.
+#   Never - Revert to the original method of writing
+#     cubes always.
+#
+# GlobalThreads = Optimized | N
+#   Optimized - The number of global (active processing)
+#     threads used will match the current system's number
+#     of CPU cores.
+#   N -
+#     Global (processing threads) encapsulate most of Isis'
+#     CPU-intensive operations. This should be a
+#     positive whole number greater than 0. This number
+#     does not cull the number of other thread-types in
+#     Isis, for example the cube write thread, but it
+#     should fairly accurately reflect overall potential
+#     CPU usage in Isis.
+########################################################
+Group = Performance
+  CubeWriteThread = Optimized
+  GlobalThreads = 2
+EndGroup
+
+########################################################
+# Customize the location of mission specific data
+# files (calibration and spice kernels).  Usually this
+# should be left to the Isis administrator
+########################################################
+
+Group = DataDirectory
+  Apollo15     = $ISIS3DATA/apollo15
+  Apollo16     = $ISIS3DATA/apollo16
+  Apollo17     = $ISIS3DATA/apollo17
+  Base         = $ISIS3DATA/base
+  Cassini      = $ISIS3DATA/cassini
+  Chan1        = $ISIS3DATA/chan1
+  Chandrayaan1 = $ISIS3DATA/chandrayaan1
+  Clementine1  = $ISIS3DATA/clementine1
+  Control      = $ISIS3DATA/control
+  Dawn         = $ISIS3DATA/dawn
+  Galileo      = $ISIS3DATA/galileo
+  Hayabusa     = $ISIS3DATA/hayabusa
+  Hayabusa2    = $ISIS3DATA/hayabusa2
+  Juno         = $ISIS3DATA/juno
+  Kaguya       = $ISIS3DATA/kaguya
+  Lo           = $ISIS3DATA/lo
+  Lro          = $ISIS3DATA/lro
+  Mariner10    = $ISIS3DATA/mariner10
+  Mer          = $ISIS3DATA/mer
+  Mex          = $ISIS3DATA/mex
+  Messenger    = $ISIS3DATA/messenger
+  Mgs          = $ISIS3DATA/mgs
+  Mro          = $ISIS3DATA/mro
+  Near         = $ISIS3DATA/near
+  NewHorizons  = $ISIS3DATA/newhorizons
+  Odyssey      = $ISIS3DATA/odyssey
+  OsirisRex    = $ISIS3DATA/../datalocal/osirisrex
+  Rolo         = $ISIS3DATA/rolo
+  Rosetta      = $ISIS3DATA/rosetta
+  Smart1       = $ISIS3DATA/smart1
+  Tgo          = $ISIS3DATA/tgo
+  Viking1      = $ISIS3DATA/viking1
+  Viking2      = $ISIS3DATA/viking2
+  Voyager1     = $ISIS3DATA/voyager1
+  Voyager2     = $ISIS3DATA/voyager2
+  Temporary    = .
+EndGroup
+
+End
diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f4a87169d2ef54cc69ac0624b98919caac206a32
--- /dev/null
+++ b/isis/cmake/AddIsisModule.cmake
@@ -0,0 +1,292 @@
+#===============================================================================
+#        Functions to add ISIS modules to the CMake build
+#===============================================================================
+
+include(CodeGeneration)
+
+# Incorporate an application folder
+function(add_isis_app folder libDependencies)
+
+  # The internal build name will be different than the output name
+  # - This deals with problems compiling same-named targets on case-insensitive machines.
+  get_filename_component(appName ${folder}  NAME)
+  set(internalAppName ${appName}_app)
+
+  # Get the source and header files
+  file(GLOB headers "${folder}/*.h" "${folder}/*.hpp")
+  file(GLOB sources "${folder}/*.c" "${folder}/*.cpp")
+  file(GLOB xmlFiles "${folder}/*.xml")
+
+  # All the XML files need to be copied to the install directory
+  # - They also need be put in the source folder for the app tests
+  install(FILES ${xmlFiles} DESTINATION "${CMAKE_INSTALL_PREFIX}/bin/xml")
+  if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin/xml)
+      execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/bin/xml)
+  endif()
+
+  foreach(xml ${xmlFiles})
+    get_filename_component(folder ${xml} DIRECTORY)
+    get_filename_component(name ${folder} NAME)
+    if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin/xml/${name}.xml)
+      execute_process(COMMAND ln -s "${xml}" "${name}.xml"
+                      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin/xml)
+    endif()
+  endforeach()
+
+  # Generate required QT files
+  generate_moc_files(mocFiles ${folder})
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+
+  # Set up the executable
+  add_executable(${internalAppName} ${headers} ${sources} ${mocFiles})
+  set_target_properties(${internalAppName} PROPERTIES LINKER_LANGUAGE CXX)
+
+  # Have the app install with the real name, not the internal name.
+  target_link_libraries(${internalAppName} ${libDependencies})
+
+  set_target_properties(${internalAppName} PROPERTIES OUTPUT_NAME ${appName})
+  install(TARGETS ${internalAppName} DESTINATION bin)
+
+  if(${buildTests})
+    # Set up the app tests
+    # - There may be multiple test folders in the /tsts directory, each
+    #   with its own Makefile describing the test.
+    set(testFolder ${folder}/tsts)
+    file(GLOB tests "${testFolder}/*")
+    foreach(f ${tests})
+      add_makefile_test_folder(${f} ${appName}_app)
+    endforeach()
+  endif()
+endfunction(add_isis_app)
+
+
+# Set up the lone unit test in an obj folder
+function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs)
+
+  # Get the object name (last folder part)
+  get_filename_component(folder ${testFile} DIRECTORY)
+  get_filename_component(filename ${folder} NAME)
+
+  # See if there are any plugin libraries that match the name
+  # - If there are, we need to link to them!
+  set(matchedLibs)
+  foreach (f ${pluginLibs})
+    if(${f} STREQUAL ${filename})
+      set(matchedLibs ${f})
+    endif()
+  endforeach()
+
+  # Generate a name for the executable
+  set(executableName "${moduleName}_unit_test_${filename}")
+
+  # Create the executable and link it to the module library
+  add_executable( ${executableName} ${testFile})
+  set(depLibs "${reqLibs};${matchedLibs}")
+  target_link_libraries(${executableName} ${moduleName} ${depLibs})
+
+  # Call function to add the test
+  add_unit_test_target(${executableName} ${truthFile} ${moduleName})
+
+endfunction(make_obj_unit_test)
+
+
+# Incorporate a single obj folder
+function(add_isis_obj folder reqLibs)
+
+  get_filename_component(folderName ${folder} NAME)
+
+  # Look inside this folder for include files
+
+  # Find the source and header files
+  file(GLOB headers "${folder}/*.h" "${folder}/*.hpp")
+  file(GLOB sources "${folder}/*.c" "${folder}/*.cpp")
+  file(GLOB truths  "${folder}/*.truth")
+  file(GLOB plugins "${folder}/*.plugin")
+
+  # Generate protobuf, ui, and moc files if needed.
+  generate_protobuf_files(protoFiles ${folder})
+  generate_ui_files(uiFiles ${folder})
+  generate_moc_files(mocFiles ${folder})
+
+  # Don't include the unit test in the main source list
+  set(unitTest ${folder}/unitTest.cpp)
+  list(REMOVE_ITEM sources "${unitTest}")
+
+  # Add the unit test file for this folder if it exists.
+  if(EXISTS "${unitTest}")
+    set(thisTestFiles ${unitTest})
+  else()
+    set(thisTestFiles)
+  endif()
+
+  set(thisSourceFiles ${headers} ${sources} ${protoFiles} ${uiFiles} ${mocFiles})
+  set(thisTruthFiles  ${truths} )
+
+  # If there are multiple truth files, select based on the OS.
+  list(LENGTH thisTestFiles numTest)
+  list(LENGTH thisTruthFiles numTruth)
+  if(NOT (${numTest} EQUAL ${numTruth}) )
+
+    # Look for a truth file that contains the OS string
+    set(matchedTruth "NONE")
+    foreach(truthFile ${thisTruthFiles})
+
+      # If the truth file contains the OS string, use it.
+      string(FIND ${truthFile} ${osVersionString} position)
+      if(NOT ${position} EQUAL -1)
+        set(matchedTruth ${truthFile})
+        break()
+      endif()
+
+    endforeach()
+
+    # If no OS matched, use the default truth file.
+    if(${matchedTruth} STREQUAL "NONE")
+      set(matchedTruth "${folder}/${folderName}.truth")
+    endif()
+    set(thisTruthFiles ${matchedTruth})
+  endif()
+
+  # Always pass the test and truth files to the caller
+  set(newTestFiles   ${thisTestFiles}   PARENT_SCOPE)
+  set(newTruthFiles  ${thisTruthFiles}  PARENT_SCOPE)
+
+  list(LENGTH plugins numPlugins)
+  if(${numPlugins} EQUAL 0)
+    # No plugins, pass the source files back to the caller to add to the larger library.
+    set(newSourceFiles ${thisSourceFiles} PARENT_SCOPE)
+  else()
+    # Folder with a plugin means that this is a separate library!
+    # Add it here and then we are done with the source files.
+
+    set(newSourceFiles ${thisSourceFiles} PARENT_SCOPE)
+    if(NOT (${numPlugins} EQUAL 1))
+      message( FATAL_ERROR "Error: Multiple plugins found in folder!" )
+    endif()
+
+    get_filename_component(libName    ${folder}  NAME)
+    get_filename_component(pluginName ${plugins} NAME)
+    message("Adding plugin library: ${libName}")
+
+    add_library_wrapper(${libName} "${thisSourceFiles}" "${reqLibs}")
+
+    # Append the plugin file to a single file in the build directory
+    # where the .so files will be created.  During installation copy these
+    # plugin files to the installation library folder.
+    set(pluginPath ${CMAKE_BINARY_DIR}/lib/${pluginName})
+    cat(${plugins} ${pluginPath})
+    install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/)
+    # Record this library name for the caller
+    set(newPluginLib ${libName}  PARENT_SCOPE)
+  endif()
+
+
+endfunction(add_isis_obj)
+
+
+
+
+# Adds an entire module folder.
+# - This includes the "base" folder and all the mission specific folders.
+# - Each call of this function generates one library.
+function(add_isis_module name)
+
+  # First argument is the module name.
+  # Arguments after the first are the folders to look in.
+  set(topFolders ${ARGN})
+
+  message("Adding ISIS module with folders: ${topFolders}")
+
+  set(objFolders)
+  set(appFolders)
+  set(tstFolders)
+  foreach(f ${topFolders})
+
+    # Folders: apps, lib, tests
+    set(objsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/objs")
+    set(appsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/apps")
+    set(tstsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/tsts")
+
+    # Start with the objs folder
+    get_subdirectory_list(${objsDir} thisObjFolders)
+    get_subdirectory_list(${appsDir} thisAppFolders)
+    get_subdirectory_list(${tstsDir} thisTstFolders)
+
+    set(objFolders ${objFolders} ${thisObjFolders})
+    set(appFolders ${appFolders} ${thisAppFolders})
+    set(tstFolders ${tstFolders} ${thisTstFolders})
+
+  endforeach()
+
+  # Now that we have the library info, call function to add it to the build!
+  # - Base module depends on 3rd party libs, other libs also depend on base.
+  # - Only the base module gets both a static and shared library.
+  if(${name} STREQUAL ${CORE_LIB_NAME})
+    set(reqLibs ${ALLLIBS})
+    set(alsoStatic ON)
+  else()
+    set(reqLibs "${CORE_LIB_NAME};${ALLLIBS}")
+    set(alsoStatic OFF)
+  endif()
+
+  set(sourceFiles)
+  set(unitTestFiles)
+  set(truthFiles)
+  set(pluginLibs)
+  foreach(f ${objFolders})
+    set(newSourceFiles)
+    set(newTestFiles)
+    set(newTruthFiles)
+    set(newPluginLib)
+    add_isis_obj(${f} "${reqLibs}") # Library add function
+    set(sourceFiles   ${sourceFiles}   ${newSourceFiles})
+    set(unitTestFiles ${unitTestFiles} ${newTestFiles})
+    set(truthFiles    ${truthFiles}    ${newTruthFiles})
+    set(pluginLibs    ${pluginLibs}    ${newPluginLib})
+
+  endforeach(f)
+
+  # Some modules don't generate a library
+  list(LENGTH sourceFiles temp)
+  if (NOT ${temp} EQUAL 0)
+    message("Adding library: ${name}")
+    add_library_wrapper(${name} "${sourceFiles}" "${reqLibs}" ${alsoStatic})
+
+    # Have the plugin libraries depend on the module library
+    foreach(plug ${pluginLibs})
+      target_link_libraries(${plug} ${name})
+    endforeach()
+
+    # For everything beyond the module library, require the module library.
+    set(reqLibs "${reqLibs};${name}")
+
+    if(${buildTests})
+      set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/unitTest)
+
+      # Now that the library is added, add all the unit tests for it.
+      list(LENGTH unitTestFiles temp)
+      math(EXPR numTests "${temp} - 1")
+      foreach(val RANGE ${numTests})
+        list(GET unitTestFiles ${val} testFile )
+        list(GET truthFiles    ${val} truthFile)
+
+        make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}")
+      endforeach()
+    endif()
+
+  endif()
+
+  # Process the apps (core library always required)
+  foreach(f ${appFolders})
+    add_isis_app(${f} "${reqLibs}")
+  endforeach()
+
+  if(${buildTests})
+    # Process the tests
+    # - The test suite in qisis/SquishTests are not properly located or handled by this code!
+    foreach(f ${tstFolders})
+      add_makefile_test_folder(${f} ${name}_module)
+    endforeach()
+  endif()
+
+endfunction(add_isis_module)
diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..64f5dc58f139110c583c22960be26a7ce1ccfd2b
--- /dev/null
+++ b/isis/cmake/BuildDocs.cmake
@@ -0,0 +1,519 @@
+#==============================================================================
+# File for building the ISIS documentation.
+# - This is one of the most complicated parts of the build system!
+#   It makes heavy use of the Xalan XML tool and also requires Latex and Doxygen.
+# - This file is called as a stand-alone script when "make docs" is executed.
+#==============================================================================
+
+
+cmake_minimum_required(VERSION 3.3)
+
+list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
+list(APPEND CMAKE_PREFIX_PATH "${PROJECT_SOURCE_DIR}/cmake")
+include(Utilities)
+
+# Set up Xalan's command-line option names.
+set(XALAN_VALIDATE_OPTION "-v")
+set(XALAN_OUTFILE_OPTION  "-o")
+set(XALAN_PARAM_OPTION    "-p")
+set(XALAN_INFILE_OPTION   ""  )
+set(XALAN_XSL_OPTION      ""  )
+
+# TODO: How should this be set?
+set(MODE "")
+
+
+#------------------------------------------------------------------------
+
+
+# Populate application doc files into "isis/doc/Application/presentation"
+function(copy_app_docs_info)
+
+  # Go through all application folders, copy .xml and assets
+  get_subdirectory_list("${PROJECT_SOURCE_DIR}/src" moduleFolders)
+  foreach(f ${moduleFolders})
+    get_filename_component(moduleName ${f} NAME_WE)
+
+    # Only need to process app folders, not obj folders.
+    if ((${moduleName} STREQUAL "docsys") OR (NOT EXISTS "${f}/apps"))
+      continue() # Skip this folder
+    endif()
+
+    file(MAKE_DIRECTORY ${appDataFolder}/${moduleName})
+
+    get_subdirectory_list(${f}/apps appFolders)
+    foreach(appF ${appFolders})
+      # Each app gets its own folder in the build directory
+      get_filename_component(appName ${appF} NAME_WE)
+      set(thisDataFolder ${appDataFolder}/${moduleName}/${appName})
+      file(MAKE_DIRECTORY ${thisDataFolder})
+
+      # Copy the .xml file and the asset folder if it exists.
+      copy_file(${appF}/${appName}.xml ${thisDataFolder}/${appName}.xml)
+      if(EXISTS ${appF}/assets)
+        copy_folder(${appF}/assets ${thisDataFolder})
+      endif()
+    endforeach() # End loop through apps
+
+  endforeach() # End loop through modules
+
+endfunction(copy_app_docs_info)
+
+
+
+
+
+# Build the top level of the documents directory
+function(build_upper_level)
+
+  # Copy existing folders to the install directory
+  copy_folder(${docBuildFolder}/assets ${docInstallFolder})
+  copy_folder(${docBuildFolder}/w3c    ${docInstallFolder})
+
+  # Make new (empty) output folders
+  set(newFolders UserDocs AboutIsis General Guides Installation TechnicalInfo)
+  foreach(f ${newFolders})
+    file(MAKE_DIRECTORY "${docInstallFolder}/${f}")
+  endforeach()
+
+  # These folders are populated inside "build_documents_folder"
+
+  # Create index.html file
+  execute_process(COMMAND ${XALAN} ${XALAN_VALIDATE_OPTION} ${XALAN_PARAM_OPTION} menuPath \"\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/index.html ${XALAN_INFILE_OPTION} ${docBuildFolder}/build/homepage.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/main.xsl)
+
+ # This folder just gets copied as-is
+ execute_process(COMMAND cp -r ${PROJECT_SOURCE_DIR}/src/docsys/Schemas  ${docInstallFolder}/Schemas)
+
+endfunction(build_upper_level)
+
+
+
+
+
+# Build src/docsys/documents folder.
+function(build_documents_folder)
+
+  message("Building documents folder...")
+  message("    Building table of contents XML...")
+
+  # Create RealeaseNotes.xml, ApiChanges.xml and ParameterChanges.xml if need-be
+  if(EXISTS "${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml")
+    execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"ReleaseNotes\" ${XALAN_INFILE_OPTION} ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/ReleaseNotes.xsl OUTPUT_FILE ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotes.xml)
+    execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"ParameterChanges\" ${XALAN_INFILE_OPTION} ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/ParameterChanges.xsl OUTPUT_FILE ${docBuildFolder}/documents/ParameterChanges/ParameterChanges.xml)
+    execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"ApiChanges\" ${XALAN_INFILE_OPTION} ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/ApiChanges.xsl OUTPUT_FILE ${docBuildFolder}/documents/ApiChanges/ApiChanges.xml)
+  else()
+    # Confirm that empty directories are not going to be traversed in loops coming up
+    message("    ReleaseNotesList.xml does not exist. Removing ReleaseNotes/ ParameterChanges/ and ApiChanges/ directories...")
+    execute_process(COMMAND rm -rf ${docBuildFolder}/documents/ReleaseNotes ${docBuildFolder}/documents/ParameterChanges ${docBuildFolder}/documents/ApiChanges)
+  endif()
+
+  # Get list of folders of interest
+  get_subdirectory_list(${docBuildFolder}/documents docFolders)
+
+  # Build doctoc.xml, the documents table of contents file.
+  set(doctocPath ${docBuildFolder}/build/doctoc.xml)
+  file(REMOVE ${doctocPath})
+  cat(${docBuildFolder}/build/doctoc_header.xml ${doctocPath})
+  foreach(f ${docFolders})
+    
+    # Each folder in documents gets a section added to doctoc
+    get_filename_component(docName ${f} NAME_WE)
+    
+    execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"${docName}\"  ${XALAN_INFILE_OPTION} ${f}/${docName}.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/IsisDocumentTOCbuild.xsl OUTPUT_VARIABLE result)
+    file(APPEND ${doctocPath} ${result})
+
+  endforeach()
+  cat(${docBuildFolder}/build/doctoc_footer.xml ${doctocPath})
+
+  # Write out a modified .xsl file with the correct location of the Xalan executable.
+  set(modDocBuildXslFile ${docBuildFolder}/build/IsisInlineDocumentBuild_mod.xsl)
+  file(READ ${PROJECT_SOURCE_DIR}/scripts/IsisInlineDocumentBuild_mod.xsl xslContents)
+  string(REPLACE XALAN_BIN_LOCATION ${XALAN} xslContents "${xslContents}")
+  file(WRITE ${modDocBuildXslFile} "${xslContents}")
+
+  # Build individual documents folders
+  message("    Building individual documents...")
+  file(MAKE_DIRECTORY ${docInstallFolder}/documents)
+  foreach(f ${docFolders})
+
+    message("Building documents folder: ${f}")
+
+    # Handle paths for this folder
+    get_filename_component(docName ${f} NAME_WE)
+    set(thisOutputFolder ${docInstallFolder}/documents/${docName})
+    file(MAKE_DIRECTORY ${thisOutputFolder})
+
+    # Use Xalan to generate an intermediate makefile, then execute that makefile
+    #  to generate the output documentation files.
+
+    set(xalanCommand ${XALAN} ${XALAN_PARAM_OPTION} menuPath "../../" ${XALAN_PARAM_OPTION} dirParam "'${docName}'" ${XALAN_OUTFILE_OPTION} ${f}/Makefile_temp ${XALAN_INFILE_OPTION} ${docName}.xml  ${XALAN_XSL_OPTION} ${modDocBuildXslFile})
+    execute_process(COMMAND ${xalanCommand} WORKING_DIRECTORY ${f})
+
+    execute_process(COMMAND make -f Makefile_temp docs WORKING_DIRECTORY ${f})
+    execute_process(COMMAND rm -f ${f}/Makefile_temp) # Clean up
+
+    # Copy all generated html files and any assets to the install folder
+    file(GLOB htmlFiles ${f}/*.html)
+    file(COPY ${htmlFiles} DESTINATION ${thisOutputFolder})
+    if(EXISTS "${f}/assets")
+      copy_folder(${f}/assets ${thisOutputFolder}/assets)
+    endif()
+    if(EXISTS "${f}/images")
+      copy_folder(${f}/images ${thisOutputFolder}/images)
+    endif()
+
+  endforeach()
+
+  message("    Building table of contents files...")
+  # These go in top level folders in /doc/
+
+  # ABOUT ISIS TOC
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/AboutIsis/index.html   ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/AboutIsis.xsl)
+
+  # GENERAL TOC
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/General/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/General.xsl)
+
+  # GUIDES TOC
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/Guides/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/Guides.xsl)
+
+  # INSTALLATION TOC
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/Installation/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/Installation.xsl)
+
+  # TECHNICAL INFO TOC
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/TechnicalInfo/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/TechnicalInfo.xsl)
+
+  # USER DOCS TOC
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/UserDocs/index.html    ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/UserDocs.xsl)
+
+endfunction(build_documents_folder)
+
+
+
+
+
+# Supporting files should already be in /src/docsys/Application
+function(build_application_docs)
+
+  # Is there any reason not to just generate all these files from their original
+  #  locations instead of copying them to a temporary build directory?
+
+  set(appFolder            "${docBuildFolder}/Application")
+  set(printerStyleFolder   "${appFolder}/presentation/PrinterFriendly/styles")
+  set(tabbedStyleFolder    "${appFolder}/presentation/Tabbed/styles")
+
+  set(installAppFolder     "${docInstallFolder}/Application")
+  set(installPrinterFolder "${installAppFolder}/presentation/PrinterFriendly")
+  set(installTabbedFolder  "${installAppFolder}/presentation/Tabbed")
+
+  # Make output directories and copy the styles
+  file(MAKE_DIRECTORY "${installPrinterFolder}")
+  file(MAKE_DIRECTORY "${installTabbedFolder}")
+  file(MAKE_DIRECTORY "${installPrinterFolder}/styles")
+  file(MAKE_DIRECTORY "${installTabbedFolder}/styles")
+  copy_wildcard("${printerStyleFolder}/*.css" ${installPrinterFolder}/styles/)
+  copy_wildcard("${tabbedStyleFolder}/*.css"  ${installTabbedFolder}/styles/ )
+
+  # Loop through module folders
+  get_subdirectory_list(${appDataFolder} moduleFolders)
+  foreach(mod ${moduleFolders})
+    get_filename_component(moduleName ${mod} NAME)
+
+    # Loop through application folders
+    get_subdirectory_list(${mod} appDataFolders)
+    foreach(f ${appDataFolders})
+      get_filename_component(appName ${f} NAME)
+
+      # Get printer-friendly and tabbed output folders
+      set(pfAppFolder ${installPrinterFolder}/${appName})
+      set(tbAppFolder ${installTabbedFolder}/${appName})
+      file(MAKE_DIRECTORY "${pfAppFolder}")
+      file(MAKE_DIRECTORY "${tbAppFolder}")
+
+      if(EXISTS ${f}/assets)
+        copy_folder(${f}/assets ${pfAppFolder})
+        copy_folder(${f}/assets ${tbAppFolder})
+      endif()
+
+      execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../../../../\" ${XALAN_OUTFILE_OPTION} ${pfAppFolder}/${appName}.html ${XALAN_INFILE_OPTION} ${f}/${appName}.xml ${XALAN_XSL_OPTION} ${printerStyleFolder}/IsisApplicationDocStyle.xsl)
+      execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../../../../\" ${XALAN_OUTFILE_OPTION} ${tbAppFolder}/${appName}.html ${XALAN_INFILE_OPTION} ${f}/${appName}.xml ${XALAN_XSL_OPTION} ${tabbedStyleFolder}/IsisApplicationDocStyle.xsl)
+
+    endforeach() # End loop through app folders
+
+  endforeach() # End loop through module folders
+
+  # Make the table of contents that goes in the /bin/xml folder
+
+  # Set up the file
+  set(appTocPath "${CMAKE_INSTALL_PREFIX}/bin/xml/applicationTOC.xml")
+  file(REMOVE ${appTocPath})
+  cat(${docBuildFolder}/Application/build/toc_header.xml ${appTocPath})
+  get_subdirectory_list(${appDataFolder} moduleFolders)
+
+  # Loop through module folders
+  foreach(mod ${moduleFolders})
+    get_filename_component(moduleName ${mod} NAME_WE)
+
+    # Loop through application folders
+    get_subdirectory_list(${mod} appDataFolders)
+    foreach(f ${appDataFolders})
+
+      get_filename_component(docName ${f} NAME_WE)
+
+      # Use Xalan to generate a piece of the TOC and append it to the file
+      execute_process(COMMAND ${XALAN} ${XALAN_INFILE_OPTION} ${f}/${docName}.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/Application/build/IsisApplicationTOCbuild.xsl  OUTPUT_VARIABLE result)
+      file(APPEND ${appTocPath} ${result})
+    endforeach()
+  endforeach()
+
+  # Append the footer to complete the TOC file!
+  cat(${docBuildFolder}/Application/build/toc_footer.xml ${appTocPath})
+
+endfunction(build_application_docs)
+
+
+
+
+
+# Use the application TOC file to build some other TOCs
+function(add_extra_tocs)
+
+  set(TOCDIR      "${docInstallFolder}/Application")
+  set(buildFolder "${docBuildFolder}/Application/build")
+  set(tocXml      "${CMAKE_INSTALL_PREFIX}/bin/xml/applicationTOC.xml")
+
+  # Build alpha.html
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${TOCDIR}/alpha.html ${XALAN_INFILE_OPTION} ${tocXml} ${XALAN_XSL_OPTION} ${buildFolder}/TOCindex_alpha.xsl)
+
+  # Build index.html
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${TOCDIR}/index.html ${XALAN_INFILE_OPTION} ${tocXml} ${XALAN_XSL_OPTION} ${buildFolder}/TOCindex_category.xsl)
+
+  # Build oldvnew.html
+  execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${TOCDIR}/oldvnew.html ${XALAN_INFILE_OPTION} ${tocXml} ${XALAN_XSL_OPTION} ${buildFolder}/TOCindex_oldvnew.xsl)
+
+  # Build applicationCategories.xml
+  execute_process(COMMAND ${XALAN} ${XALAN_OUTFILE_OPTION} ${CMAKE_INSTALL_PREFIX}/bin/xml/applicationCategories.xml ${XALAN_INFILE_OPTION} ${docBuildFolder}/Schemas/Application/application.xsd ${XALAN_XSL_OPTION} ${buildFolder}/IsisApplicationCategoriesbuild.xsl)
+
+endfunction(add_extra_tocs)
+
+
+
+
+
+# Set up three Doxygen configuration files
+function(build_object_conf)
+
+  message("Building apps configuration...")
+
+  # Make a list of each object folder with an assets folder
+  get_subdirectory_list(moduleFolders ${PROJECT_SOURCE_DIR})
+  set(OBJECTASSETS)
+  foreach(mod ${moduleFolders})
+    get_subdirectory_list(objFolders ${mod}/objs)
+    foreach(obj ${objFolders})
+      if(EXISTS ${obj}/assets)
+        set(OBJECTASSETS ${OBJECTASSETS} ${obj}/assets)
+      endif()
+    endforeach() # End obj loop
+  endforeach() # End module loop
+
+  set(objConfDir ${docBuildFolder}/src/docsys/Object/build)
+  file(MAKE_DIRECTORY ${objConfDir}/apps)
+
+  # The three conf files start from an input base file and append more options
+  set(appsConf       ${objConfDir}/apps_tag_temp.conf  )
+  set(programmerConf ${objConfDir}/Programmer_temp.conf)
+  set(developerConf  ${objConfDir}/Developer_temp.conf )
+  set(docInstallDir  ${docInstallFolder}/Object )
+
+  # Copy settings files from the source folder to the build folder
+  copy_wildcard("${PROJECT_SOURCE_DIR}/src/docsys/Object/build/*" ${objConfDir})
+
+  # Append to the app conf file
+  # apps_tag.conf doesnt exist?
+  cat(${objConfDir}/apps_tag.conf ${appsConf})
+  file(APPEND ${appsConf} "LATEX_CMD_NAME   = ${LATEX}\n")
+  file(APPEND ${appsConf} "OUTPUT_DIRECTORY = ${docInstallDir}\n")
+  file(APPEND ${appsConf} "STRIP_FROM_PATH  = ${PROJECT_SOURCE_DIR}/\n")
+  file(APPEND ${appsConf} "INPUT            = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n")
+  file(APPEND ${appsConf} "HTML_HEADER      = ${objConfDir}/IsisObjectHeader.html\n")
+  file(APPEND ${appsConf} "HTML_FOOTER      = ${objConfDir}/IsisObjectFooter.html\n")
+  file(APPEND ${appsConf} "PROJECT_LOGO     = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n")
+  file(APPEND ${appsConf} "HTML_OUTPUT      = apps\n")
+
+  if(NOT ${DOT_PATH} STREQUAL "")
+    file(APPEND ${appsConf} "DOT_PATH  = /opt/local/bin\n")
+  endif()
+
+  # Append to the programmer conf file
+  cat(${objConfDir}/Programmer.conf ${programmerConf})
+  file(APPEND ${programmerConf} "OUTPUT_DIRECTORY = ${docInstallDir}\n")
+  file(APPEND ${programmerConf} "FILE_PATTERNS    = *objs*.h")
+  file(APPEND ${programmerConf} " *objs*.cpp")
+  file(APPEND ${programmerConf} " *build/isisDoxyDefs.doxydef\n")
+  file(APPEND ${programmerConf} "STRIP_FROM_PATH  = ${PROJECT_SOURCE_DIR}/\n")
+  file(APPEND ${programmerConf} "INPUT            = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n")
+  file(APPEND ${programmerConf} "HTML_HEADER      = ${objConfDir}/IsisObjectHeader.html\n")
+  file(APPEND ${programmerConf} "HTML_FOOTER      = ${objConfDir}/IsisObjectFooter.html\n")
+  file(APPEND ${programmerConf} "PROJECT_LOGO     = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n")
+  file(APPEND ${programmerConf} "HTML_OUTPUT      = Programmer\n")
+  file(APPEND ${programmerConf} "IMAGE_PATH       = \n")
+
+  string(FIND "${MODE}" "LOUD" pos)
+  if (NOT ${pos} STREQUAL "-1")
+    file(APPEND ${programmerConf} "QUIET                  = NO\n")
+    file(APPEND ${programmerConf} "WARNINGS               = YES\n")
+    file(APPEND ${programmerConf} "WARN_IF_UNDOCUMENTED   = NO\n")
+    file(APPEND ${programmerConf} "WARN_IF_DOC_ERROR      = YES\n")
+    file(APPEND ${programmerConf} "WARN_NO_PARAMDOC       = YES\n")
+  else()
+    file(APPEND ${programmerConf} "QUIET                  = YES\n")
+    file(APPEND ${programmerConf} "WARN_IF_UNDOCUMENTED   = NO\n")
+    file(APPEND ${programmerConf} "WARN_IF_DOC_ERROR      = YES\n")
+    file(APPEND ${programmerConf} "WARN_NO_PARAMDOC       = YES\n")
+  endif()
+
+  if (NOT ${DOT_PATH} STREQUAL "")
+    file(APPEND ${programmerConf} "DOT_PATH  = /opt/local/bin\n")
+  endif()
+
+  foreach(dirname ${OBJECTASSETS})
+    file(APPEND ${programmerConf} "${dirname} \\\n")
+  endforeach()
+
+  # Append to the developer conf file
+  cat(${objConfDir}/Developer.conf ${developerConf})
+  file(APPEND ${developerConf} "LATEX_CMD_NAME   = ${LATEX}\n")
+  file(APPEND ${developerConf} "OUTPUT_DIRECTORY = ${docInstallDir}\n")
+  file(APPEND ${developerConf} "STRIP_FROM_PATH  = ${CMAKE_INSTALL_PREFIX}/\n")
+  file(APPEND ${developerConf} "INPUT            = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n")
+  file(APPEND ${developerConf} "HTML_HEADER      = ${objConfDir}/IsisObjectHeader.html\n")
+  file(APPEND ${developerConf} "HTML_FOOTER      = ${objConfDir}/IsisObjectFooter.html\n")
+  file(APPEND ${developerConf} "PROJECT_LOGO     = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n")
+  file(APPEND ${developerConf} "HTML_OUTPUT      = Developer\n")
+  file(APPEND ${developerConf} "IMAGE_PATH       = \n")
+  string(FIND "${MODE}" "LOUD" pos)
+  if (NOT ${pos} STREQUAL "-1")
+    file(APPEND ${developerConf} "QUIET                  = NO\n")
+    file(APPEND ${developerConf} "WARNINGS               = YES\n")
+    file(APPEND ${developerConf} "WARN_IF_UNDOCUMENTED   = NO\n")
+    file(APPEND ${developerConf} "WARN_IF_DOC_ERROR      = YES\n")
+    file(APPEND ${developerConf} "WARN_NO_PARAMDOC       = YES\n")
+  else()
+    file(APPEND ${developerConf} "QUIET                  = YES\n")
+    file(APPEND ${developerConf} "WARNINGS               = NO\n")
+    file(APPEND ${developerConf} "WARN_IF_UNDOCUMENTED   = NO\n")
+    file(APPEND ${developerConf} "WARN_IF_DOC_ERROR      = NO\n")
+    file(APPEND ${developerConf} "WARN_NO_PARAMDOC       = NO\n")
+  endif()
+
+  foreach(dirname ${OBJECTASSETS})
+    file(APPEND ${developerConf} "${dirname} \\\n")
+  endforeach()
+
+endfunction(build_object_conf)
+
+
+
+
+# Build doxygen output for ISIS code
+function(build_object_docs)
+
+  # Create app, developer, and programmer Doxygen configuration files.
+  build_object_conf()
+
+  # TODO: Do prog_tester conf here as well?
+
+  set(objConfDir  ${docBuildFolder}/src/docsys/Object/build)
+
+  message("Copying object assets...")
+  file(MAKE_DIRECTORY "${docInstallFolder}/Object")
+  execute_process(COMMAND cp -r ${docBuildFolder}/Object/assets ${docInstallFolder}/Object/)
+
+
+  message("Creating Object Documentation")
+  file(MAKE_DIRECTORY ${docInstallFolder}/Object/apps)
+  file(MAKE_DIRECTORY ${docInstallFolder}/Object/Developer)
+  file(MAKE_DIRECTORY ${docInstallFolder}/Object/Programmer)
+  file(MAKE_DIRECTORY ${docInstallFolder}/documents/DocStyle/assets)
+  copy_wildcard("${docBuildFolder}/Object/*.html" ${docInstallFolder}/Object/)
+  #copy_file(${objBuildDir}/isisDoxyDefs.doxydef ${docInstallFolder}/documents/DocStyle/assets/isisDoxyDefs.doxydef)
+
+
+  message("Building Apps documentation..")
+  execute_process(COMMAND ${DOXYGEN} "${objConfDir}/apps_tag_temp.conf"
+                  WORKING_DIRECTORY ${docBuildFolder}/src/docsys/Object/)
+  message("Finished building Apps documentation.")
+
+  message("Building Programmer documentation...")
+  execute_process(COMMAND ${DOXYGEN} "${objConfDir}/Programmer_temp.conf"
+                  WORKING_DIRECTORY ${docBuildFolder}/src/docsys/Object/)
+  message("Finished building Programmer documentation.")
+
+  message("Building Developer documentation...")
+  execute_process(COMMAND ${DOXYGEN} "${objConfDir}/Developer_temp.conf"
+                  WORKING_DIRECTORY ${docBuildFolder}/src/docsys/Object/)
+  message("Finished building Developer documentation.")
+
+endfunction(build_object_docs)
+
+
+
+
+
+# Build all the documentation
+function(build_docs)
+
+  message("Building Isis Documentation...")
+
+  # Set up output directory and a temporary directory for building
+  set(docBuildFolder   ${CMAKE_BINARY_DIR}/docBuild)
+  set(appDataFolder    ${docBuildFolder}/Application/data)
+  set(docInstallFolder ${CMAKE_BINARY_DIR}/docs) # Final output documentation
+
+  # Clean up existing files
+  execute_process(COMMAND rm -rf ${docBuildFolder})
+  execute_process(COMMAND rm -rf ${docInstallFolder})
+
+  message("XALAN = ${XALAN}")
+  message("DOXYGEN = ${DOXYGEN}")
+  message("LATEX = ${LATEX}")
+
+  # Copy everything from src/docsys to docBuildFolder
+  execute_process(COMMAND cp -r ${PROJECT_SOURCE_DIR}/src/docsys ${docBuildFolder})
+
+  file(MAKE_DIRECTORY "${docBuildFolder}/Application")
+  file(MAKE_DIRECTORY "${docBuildFolder}/Application/data")
+  file(MAKE_DIRECTORY "${docInstallFolder}")
+
+  message("Copying application information...")
+  copy_app_docs_info()
+
+  message("Building upper level directories...")
+  build_upper_level()
+
+  build_documents_folder()
+
+  message("Building application docs...")
+  build_application_docs()
+
+  message("Building additional TOCs...")
+  add_extra_tocs()
+
+  # This step requires Latex and Doxygen
+  message("Building object documentation")
+  build_object_docs()
+
+  # copy the built docs in the build directory over to the install directory on install
+  execute_process(COMMAND cp -rf ${docInstallFolder} ${CMAKE_INSTALL_PREFIX})
+
+  message("Finished building object documentation!")
+
+
+endfunction(build_docs)
+
+
+
+
+# This file gets called as a script, so call this function to run
+#  all the code in the file.
+build_docs()
diff --git a/isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake b/isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..67565806264baf0177c6b7b6561fa722e33cf643
--- /dev/null
+++ b/isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -0,0 +1,16 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.9
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/scratch/isiscmake/isis")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/scratch/isiscmake/isis")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
diff --git a/isis/cmake/CMakeFiles/progress.marks b/isis/cmake/CMakeFiles/progress.marks
new file mode 100644
index 0000000000000000000000000000000000000000..573541ac9702dd3969c9bc859d2b91ec1f7e6e56
--- /dev/null
+++ b/isis/cmake/CMakeFiles/progress.marks
@@ -0,0 +1 @@
+0
diff --git a/isis/cmake/CMakeLists.txt b/isis/cmake/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..85bfcdc541d056a33eb5a493608b399b900e795c
--- /dev/null
+++ b/isis/cmake/CMakeLists.txt
@@ -0,0 +1,21 @@
+# This file contains everything that should be exectuted AFTER the installation
+# step has completed.
+
+message("Setting up post-install behavior...")
+
+# Set up format version numbers for the main shared library on install
+install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_BINARY_DIR}/lib/libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})")
+install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})")
+install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3${SO})")
+install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis${SO})")
+
+# On OSX, need to correct all the paths encoded in each of the distributed library files so
+#  that they properly find the distruted files using relative paths.
+if (APPLE)
+  # Also need to get the plugin folders
+  get_subdirectory_list(${CMAKE_SOURCE_DIR}/3rdParty/plugins pluginFolders)
+  foreach(f ${pluginFolders})
+    get_filename_component(name ${f} NAME)
+    install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/plugins/${name} resetRpath)")
+  endforeach()
+endif()
diff --git a/isis/cmake/CTestTestfile.cmake b/isis/cmake/CTestTestfile.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d19043d1b2c790da1feda3153854760881a4e0f1
--- /dev/null
+++ b/isis/cmake/CTestTestfile.cmake
@@ -0,0 +1,6 @@
+# CMake generated Testfile for 
+# Source directory: /scratch/isiscmake/isis/cmake
+# Build directory: /scratch/isiscmake/isis/cmake
+# 
+# This file includes the relevant testing commands required for 
+# testing this directory and lists subdirectories to be tested as well.
diff --git a/isis/cmake/CodeGeneration.cmake b/isis/cmake/CodeGeneration.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9f48041afcb693e5217fa516c90f1553f6e5e157
--- /dev/null
+++ b/isis/cmake/CodeGeneration.cmake
@@ -0,0 +1,138 @@
+#==================================================================
+# Contains functions for generating code files
+#==================================================================
+
+# TODO: Can we consolidate the following three functions?
+
+
+# Generate ui_*.h files from *.ui files using QT tool uic.
+# - ${UIC} must point to the uic tool
+function( generate_ui_files uiGenOut folder)
+
+  # Finds all .ui files in the current dir
+  file(GLOB uiInput "${folder}/*.ui")
+
+  # If no .ui files in this folder we are finished.
+  list(LENGTH uiInput numFiles)
+  if (${numFiles} EQUAL 0)
+    set(${uiGenOut} "" PARENT_SCOPE)
+    return()
+  endif()
+
+  # Set where generated files go to and add that directory to the include path
+  get_code_gen_dir(${folder} uiGenDir)
+
+  # For each input ui file
+  foreach(uiFile ${uiInput})
+    # Get the name of the file without extension
+    get_filename_component(uiName ${uiFile} NAME_WE)
+
+    # Add the generated file to UI_GEN variable
+    set(outUiFile "${uiGenDir}/ui_${uiName}.h")
+    set(uiGen      ${uiGen} ${outUiFile})
+
+    # Add the custom command that will generate this file
+    # - The generated files will be put in the CMake build directory,
+    #   not the source tree
+    add_custom_command(OUTPUT   ${outUiFile}
+                       COMMAND  ${UIC}  ${uiFile} -o ${outUiFile} && cp ${outUiFile} ${CMAKE_BINARY_DIR}/inc
+                       DEPENDS  ${uiFile}
+                       WORKING_DIRECTORY ${folder}
+                       COMMENT "Generating UI headers...")
+  endforeach()
+
+
+  set(${uiGenOut} ${uiGen} PARENT_SCOPE) # Set up output variable
+
+endfunction()
+
+
+
+
+# Generate moc_*.cpp files from *.h files using Q_OBJECT using the moc tool.
+# - ${MOC} must point to the moc tool
+function( generate_moc_files mocGenOut folder)
+
+  # Finds all .h files in the current dir including the text Q_OBJECT
+  file(GLOB candidateFiles "${folder}/*.h")
+  set(mocInput)
+  foreach(f ${candidateFiles})
+    execute_process(COMMAND grep Q_OBJECT ${f}
+                    OUTPUT_VARIABLE result
+                    RESULT_VARIABLE code)
+    if("${code}" STREQUAL "0")
+      set(mocInput ${mocInput} ${f})
+    endif()
+  endforeach()
+
+  # If no Q_OBJECT files in this folder we are finished.
+  list(LENGTH mocInput numFiles)
+  if (${numFiles} EQUAL 0)
+    set(${mocGenOut} "" PARENT_SCOPE)
+    return()
+  endif()
+
+  # Set where generated files go to and add that directory to the include path
+  get_code_gen_dir(${folder} mocGenDir)
+
+  # For each input moc file
+  foreach(mocFile ${mocInput})
+    # Get the name of the file without extension
+    get_filename_component(mocName ${mocFile} NAME_WE)
+
+    # Add the generated file to mocGen variable
+    set(outMocFile "${mocGenDir}/moc_${mocName}.cpp")
+    set(mocGen       ${mocGen} ${outMocFile})
+
+    # Add the custom command that will generate this file
+    # - The generated files will be put in the CMake build directory,
+    #   not the source tree
+    add_custom_command(OUTPUT   ${outMocFile}
+                       COMMAND  ${MOC}  ${mocFile} -o ${outMocFile}
+                       DEPENDS  ${mocFile}
+                       WORKING_DIRECTORY ${folder}
+                       COMMENT "Generating MOC files...")
+  endforeach()
+  set(${mocGenOut} ${mocGen} PARENT_SCOPE) # Set up output variable
+endfunction()
+
+# Generate ProtoBuf output files for an obj folder.
+# - ${PROTOC} must point to the protobuf tool
+function(generate_protobuf_files protoGenOut folder)
+
+  # Finds all .proto files in the current dir
+  file(GLOB protoInput "${folder}/*.proto")
+
+  # If no .proto files in this folder we are finished.
+  list(LENGTH protoInput numFiles)
+  if (${numFiles} EQUAL 0)
+    set(${protoGenOut} "" PARENT_SCOPE)
+    return()
+  endif()
+
+  # Set where generated files go to and add that directory to the include path
+  get_code_gen_dir(${folder} protoGenDir)
+
+  # For each input protobuf file
+  foreach(protoFile ${protoInput})
+    # Get the name of the file without extension
+    get_filename_component(protoName ${protoFile} NAME_WE)
+
+    # Add the two generated files to PROTO_GEN variable
+    set(protoGen ${protoGen}
+        ${protoGenDir}/${protoName}.pb.h
+        ${protoGenDir}/${protoName}.pb.cc)
+
+    set(PROTO_HEADERS ${PROTO_HEADERS} ${protoGenDir}/${protoName}.pb.h)
+  endforeach()
+
+  # Add the custom command that will generate all the files
+  # - The generated files will be put in the CMake build directory, not the source tree.
+  add_custom_command(OUTPUT   ${protoGen}
+                     COMMAND  ${PROTOC} --proto_path ${folder} --cpp_out ${protoGenDir} ${protoInput} && cp ${PROTO_HEADERS} ${CMAKE_BINARY_DIR}/inc
+                     DEPENDS  ${protoInput}
+                     WORKING_DIRECTORY ${folder}
+                     COMMENT "Generating Protocol Buffers...")
+
+  set(${protoGenOut} ${protoGen} PARENT_SCOPE) # Set up output variable
+endfunction()
diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..b8c4db1228bf72c749414c8df9cd81be91f09c96
--- /dev/null
+++ b/isis/cmake/FindBoost.cmake
@@ -0,0 +1,138 @@
+# CMake module for find_package(Boost)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   BOOST_INCLUDE_DIR
+
+find_path(BOOST_INCLUDE_DIR
+  NAME flyweight.hpp
+  PATH_SUFFIXES "boost/boost${Boost_FIND_VERSION}/boost/" "boost"
+)
+
+get_filename_component(BOOST_ROOT_INCLUDE_DIR "${BOOST_INCLUDE_DIR}" DIRECTORY)
+
+find_library(BOOST_ATOMIC_MT_LIBRARY
+  NAMES boost_atomic-mt boost_atomic
+)
+
+find_library(BOOST_LOG_MT_LIBRARY
+  NAMES boost_log-mt boost_log
+)
+
+find_library(BOOST_REGEX_MT_LIBRARY
+  NAMES boost_regex-mt boost_regex
+)
+
+find_library(BOOST_LOG_SETUP_MT_LIBRARY
+  NAMES boost_log_setup-mt boost_log_setup
+)
+
+find_library(BOOST_SERIALIZATION_MT_LIBRARY
+  NAMES boost_serialization-mt boost_serialization
+)
+
+find_library(BOOST_CHRONO_MT_LIBRARY
+  NAMES boost_chrono-mt boost_chrono
+)
+
+find_library(BOOST_MATH_C99_MT_LIBRARY
+  NAMES boost_math_c99-mt boost_math_c99
+)
+
+find_library(BOOST_SIGNALS_MT_LIBRARY
+  NAMES boost_signals-mt boost_signals
+)
+
+find_library(BOOST_CONTAINER_MT_LIBRARY
+  NAMES boost_container-mt boost_container
+)
+
+find_library(BOOST_MATH_C99F_MT_LIBRARY
+  NAMES boost_math_c99f-mt boost_math_c99f
+)
+
+find_library(BOOST_CONTEXT_MT_LIBRARY
+  NAMES boost_context-mt boost_context
+)
+
+find_library(BOOST_MATH_C99L_MT_LIBRARY
+  NAMES boost_math_c99l-mt boost_math_c99l
+)
+
+find_library(BOOST_SYSTEM_MT_LIBRARY
+  NAMES boost_system-mt boost_system
+)
+
+find_library(BOOST_COROUTINE_MT_LIBRARY
+  NAMES boost_coroutine-mt boost_coroutine
+)
+
+find_library(BOOST_MATH_TR1_MT_LIBRARY
+  NAMES boost_math_tr1-mt boost_math_tr1
+)
+
+find_library(BOOST_MATH_TR1F_MT_LIBRARY
+  NAMES boost_math_tr1f-mt boost_math_tr1f
+)
+
+find_library(BOOST_MATH_TR1L_MT_LIBRARY
+  NAMES boost_math_tr1l-mt boost_math_tr1l
+)
+
+find_library(BOOST_TEST_EXEC_MONITOR_MT_LIBRARY
+  NAMES boost_test_exec_monitor-mt boost_test_exec_monitor
+)
+
+find_library(BOOST_DATE_TIME_MT_LIBRARY
+  NAMES boost_date_time-mt boost_date_time
+)
+
+find_library(BOOST_THREAD_MT_LIBRARY
+  NAMES boost_thread-mt boost_thread
+)
+
+find_library(BOOST_EXCEPTION_MT_LIBRARY
+  NAMES boost_exception-mt boost_exception
+)
+
+find_library(BOOST_TIMER_MT_LIBRARY
+  NAMES boost_timer-mt boost_timer
+)
+
+find_library(BOOST_FILESYSTEM_MT_LIBRARY
+  NAMES boost_filesystem-mt boost_filesystem
+)
+
+find_library(BOOST_PRG_EXEC_MONITOR_MT_LIBRARY
+  NAMES boost_prg_exec_monitor-mt boost_prg_exec_monitor
+)
+
+find_library(BOOST_PROGRAM_OPTIONS_MT_LIBRARY
+  NAMES boost_program_options-mt boost_program_options
+)
+
+find_library(BOOST_UNIT_TEST_FRAMEWORK_MT_LIBRARY
+  NAMES boost_unit_test_framework-mt boost_unit_test_framework
+)
+
+find_library(BOOST_IOSTREAMS_MT_LIBRARY
+  NAMES boost_iostreams-mt boost_iostreams
+)
+
+#message("BOOST_IOSTREAMS_MT_LIBRARY = ${BOOST_IOSTREAMS_MT_LIBRARY}")
+#tjw:  Not sure if needed...commenting out because library is missing
+#find_library(BOOST_PYTHON_MT_LIBRARY
+#  NAMES boost_python-mt boost_python
+#)
+
+find_library(BOOST_WAVE_MT_LIBRARY
+  NAMES boost_wave-mt boost_wave
+)
+
+find_library(BOOST_RANDOM_MT_LIBRARY
+  NAMES boost_random-mt boost_random
+)
+
+find_library(BOOST_WSERIALIZATION_MT_LIBRARY
+  NAMES boost_wserialization-mt boost_wserialization
+)
diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..efec236cd67a92bbdf65c0d92c5bfd674f8d6df5
--- /dev/null
+++ b/isis/cmake/FindBullet.cmake
@@ -0,0 +1,35 @@
+# CMake module for find_package(Bullet)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   BULLET_INCLUDE_DIR
+#   BULLET_LIBRARY
+
+find_path(BULLET_INCLUDE_DIR
+  NAME btBulletCollisionCommon.h
+  PATH_SUFFIXES bullet
+)
+
+find_library(BULLET_OPENCL_LIBRARY NAMES Bullet3OpenCL_clew)
+find_library(BULLET_SOFTBODY_LIBRARY NAMES BulletSoftBody)
+find_library(BULLET_INVERSEDYNAMICS_LIBRARY NAMES BulletInverseDynamics)
+find_library(BULLET_COMMON_LIBRARY NAMES Bullet3Common)
+find_library(BULLET_DYNAMICS_LIBRARY NAMES BulletDynamics)
+find_library(BULLET3_COLLISION_LIBRARY NAMES BulletCollision)
+find_library(BULLET3_3GEOMETRY_LIBRARY NAMES Bullet3Geometry)
+find_library(BULLET3_3DYNAMICS_LIBRARY NAMES Bullet3Dynamics)
+find_library(BULLET3_3COLLISION_LIBRARY NAMES Bullet3Collision)
+find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath)
+
+get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} )
+message(STATUS "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} )
+message(STATUS "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY})
+message(STATUS "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} )
+message(STATUS "BULLET DYNAMICS: " ${BULLET3_DYNAMICS_LIBRARY} )
+message(STATUS "BULLET COLLISION: " ${BULLET3_COLLISION_LIBRARY} )
+message(STATUS "BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} )
+message(STATUS "BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} )
+message(STATUS "BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} )
+message(STATUS "BULLET3 LINEARMATH: "  ${BULLET3_LINEARMATH_LIBRARY} )
diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..3df2e1ff87011639449528ca1c3dd69db6e550a2
--- /dev/null
+++ b/isis/cmake/FindCSPICE.cmake
@@ -0,0 +1,18 @@
+# CMake module for find_package(CSPICE)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   CSPICE_INCLUDE_DIR
+#   CSPICE_LIBRARY
+
+find_path(CSPICE_INCLUDE_DIR
+  NAME SpiceUsr.h
+  PATH_SUFFIXES naif cspice
+)
+
+find_library(CSPICE_LIBRARY
+  NAMES cspice
+)
+
+message(STATUS "CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} )
+message(STATUS "CSPICE LIB: "  ${CSPICE_LIBRARY} )
diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..61bf96609c9a05745d2069b8e83801e55384be19
--- /dev/null
+++ b/isis/cmake/FindCholmod.cmake
@@ -0,0 +1,39 @@
+# CMake module for find_package(Cholmod)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   CHOLMOD_INCLUDE_DIR
+#   CHOLMOD_LIBLIST
+
+find_path(CHOLMOD_INCLUDE_DIR
+  NAME cholmod.h
+  PATH_SUFFIXES "SuiteSparse/SuiteSparse${Cholmod_FIND_VERSION}/SuiteSparse/" "SuiteSparse"
+)
+
+find_library(CHOLMOD_LIBRARY      NAMES cholmod)
+find_library(CCOLAMD_LIBRARY      NAMES ccolamd)
+find_library(COLAMD_LIBRARY       NAMES colamd)
+find_library(CAMD_LIBRARY         NAMES camd)
+find_library(AMD_LIBRARY          NAMES amd)
+find_library(SUITESPARSE_LIBRARY  NAMES suitesparseconfig)
+find_library(BLAS_LIBRARY NAMES blas)
+
+# OSX does not link against lapack
+if(NOT APPLE)
+  find_library(LAPACK_LIBRARY       NAMES lapack)
+endif()
+
+# Dependencies for lapack
+get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "CHOLMOD INCLUDE: "  ${CHOLMOD_INCLUDE_DIR} )
+message(STATUS "CHOLMOD LIB: "  ${CHOLMOD_LIBRARY} )
+message(STATUS "CCOLMOD LIB: "  ${CCOLAMD_LIBRARY} )
+message(STATUS "CAMD LIB: "  ${CAMD_LIBRARY} )
+message(STATUS "AMD LIB: "  ${AMD_LIBRARY} )
+message(STATUS "SUITESPARSE LIB: "  ${SUITESPARSE_LIBRARY} )
+message(STATUS "BLAS LIB: "  ${BLAS_LIBRARY} )
+
+if(NOT APPLE)
+  message(STATUS "LAPACK LIB: " ${LAPACK_LIBRARY})
+endif()
diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..154a23cd591e21f1299cc89abddeed052019539b
--- /dev/null
+++ b/isis/cmake/FindEigen.cmake
@@ -0,0 +1,17 @@
+# CMake module for find_package(PCL)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   PCL_INCLUDE_DIR
+
+#find_path(EIGEN_INCLUDE_DIR
+#  NAME Core
+#  PATH_SUFFIXES eigen/Eigen eigen3/Eigen
+#)
+
+find_path(EIGEN_ROOT_INCLUDE_DIR
+  NAME Eigen
+  PATH_SUFFIXES eigen eigen3
+)
+
+message(STATUS "EIGEN INCLUDE DIR: "  ${EIGEN_ROOT_INCLUDE_DIR} )
diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d7af1d78d6ebb668679ad8ea3c7a71157cb3f123
--- /dev/null
+++ b/isis/cmake/FindEmbree.cmake
@@ -0,0 +1,20 @@
+# CMake module for find_package(Embree)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   EMBREE_INCLUDE_DIR
+#   EMBREE_LIBRARY
+
+find_path(EMBREE_INCLUDE_DIR
+  NAME rtcore.h
+  PATH_SUFFIXES embree2
+)
+
+find_library(EMBREE_LIBRARY
+  NAMES embree
+)
+
+get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR})
+message(STATUS "EMBREE LIB: " ${EMBREE_LIBRARY})
diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..3787fa9534a6dbd9869e52383136848bc550e02d
--- /dev/null
+++ b/isis/cmake/FindGMM.cmake
@@ -0,0 +1,14 @@
+# CMake module for find_package(GMM)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   GMM_INCLUDE_DIR
+
+find_path(GMM_INCLUDE_DIR
+  NAMES gmm.h
+  PATH_SUFFIXES "/gmm/gmm-${GMM_FIND_VERSION}/gmm/" "gmm"
+)
+
+get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}")
diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..105dad800e6f5bc253e3415c87b1745dba62c7d0
--- /dev/null
+++ b/isis/cmake/FindGSL.cmake
@@ -0,0 +1,25 @@
+# CMake module for find_package(GSL)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   GSL_INCLUDE_DIR
+#   GSL_LIBLIST
+
+find_path(GSL_INCLUDE_DIR
+  NAMES gsl_math.h
+  PATH_SUFFIXES gsl
+)
+
+find_library(GSL_LIBRARY
+  NAMES gsl
+)
+
+find_library(GSL_CBLAS_LIBRARY
+  NAMES gslcblas
+)
+
+get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}")
+message(STATUS "GSL LIB: ${GSL_LIBRARY}")
+message(STATUS "GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}")
diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9bfbb68cacc9605611855886a1b450aee255ae30
--- /dev/null
+++ b/isis/cmake/FindGeoTIFF.cmake
@@ -0,0 +1,20 @@
+# CMake module for find_package(GeoTIFF)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   GEOTIFF_INCLUDE_DIR
+#   GEOTIFF_LIBRARY
+
+find_path(GEOTIFF_INCLUDE_DIR
+  NAMES geotiff.h
+  PATH_SUFFIXES geotiff
+)
+
+find_library(GEOTIFF_LIBRARY
+  NAMES geotiff
+)
+
+get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}")
+message(STATUS "GEOTIFF LIB: ${GEOTIFF_LIBRARY}")
diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..dc2df58ec29cada16fbdce15762998d30a5ce64c
--- /dev/null
+++ b/isis/cmake/FindGeos.cmake
@@ -0,0 +1,24 @@
+# CMake module for find_package(Geos)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   GEOS_INCLUDE_DIR
+#   GEOS_LIBRARY
+
+find_path(GEOS_INCLUDE_DIR
+  NAME geos.h
+  PATH_SUFFIXES "geos/geos${Geos_FIND_VERSION}" "geos"
+)
+
+find_library(GEOS_LIBRARY
+  NAMES geos
+)
+find_library(GEOS_C_LIBRARY
+  NAMES geos_c
+)
+
+message(STATUS "GEOS INCLUDE DIR: "  ${GEOS_INCLUDE_DIR} )
+message(STATUS "GEOS LIB: "  ${GEOS_LIBRARY} )
+message(STATUS "GEOS C LIB: "  ${GEOS_C_LIBRARY} )
+
+get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY)
diff --git a/isis/cmake/FindHDF5.cmake b/isis/cmake/FindHDF5.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..1ebf7edcd332b3dd4d3d2d959711fcb3c3962627
--- /dev/null
+++ b/isis/cmake/FindHDF5.cmake
@@ -0,0 +1,24 @@
+# CMake module for find_package(HDF5)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   HDF5_INCLUDE_DIR
+#   HDF5_LIBRARY
+
+find_path(HDF5_INCLUDE_DIR
+  NAME hdf5.h
+  PATH_SUFFIXES hdf5
+)
+
+find_library(HDF5_LIBRARY         NAMES hdf5)
+find_library(HDF5_CPP_LIBRARY     NAMES hdf5_cpp)
+find_library(HDF5_HL_LIBRARY      NAMES hdf5_hl)
+find_library(HDF5_HLCPP_LIBRARY   NAMES hdf5_hl_cpp)
+
+get_filename_component(HDF5_ROOT_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}")
+message(STATUS "HDF5 LIB: ${HDF5_LIBRARY}")
+message(STATUS "HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}")
+message(STATUS "HDF5 HL LIB: ${HDF5_HL_LIBRARY}")
+message(STATUS "HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}")
diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..c547d3b27d8f6778fef5d2a65aea10c2e4c4ac06
--- /dev/null
+++ b/isis/cmake/FindJama.cmake
@@ -0,0 +1,14 @@
+# CMake module for find_package(Jama)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   JAMA_INCLUDE_DIR
+
+find_path(JAMA_INCLUDE_DIR
+    NAMES jama_cholesky.h
+    PATH_SUFFIXES "jama/jama${Jama_FIND_VERSION}/jama" "/jama"
+)
+
+get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}")
diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..cb2842751228902515b9bba04c748dc79a081858
--- /dev/null
+++ b/isis/cmake/FindKakadu.cmake
@@ -0,0 +1,30 @@
+# CMake module for find_package(Kakadu)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   KAKADU_INCLUDE_DIR
+#   KAKADU_A_LIBRARY
+#   KAKADU_V_LIBRARY
+
+if(JP2KFLAG)
+  find_path(KAKADU_INCLUDE_DIR
+    NAME kdu_kernels.h
+    PATHS /usgs/apps/kakadu/v7_9_1-01762L/managed/all_includes/
+  )
+
+  find_library(KAKADU_A_LIBRARY
+    NAMES kdu_a79R
+  )
+
+  find_library(KAKADU_V_LIBRARY
+    NAMES kdu_v79R
+  )
+
+  get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY)
+
+  message(STATUS "KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}")
+  message(STATUS "KAKADU A LIB: ${KAKADU_A_LIBRARY}")
+  message(STATUS "KAKADU V LIB: ${KAKADU_V_LIBRARY}")
+else()
+  message(STATUS "KAKADU DISABLED")
+endif()
diff --git a/isis/cmake/FindLibPython.py b/isis/cmake/FindLibPython.py
new file mode 100644
index 0000000000000000000000000000000000000000..38ae93fd3b3c8ad5fa58ade18a1615c4105b8a3f
--- /dev/null
+++ b/isis/cmake/FindLibPython.py
@@ -0,0 +1,10 @@
+# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS
+
+import sys
+import distutils.sysconfig
+
+print("exec_prefix:%s" % sys.exec_prefix)
+print("short_version:%s" % sys.version[:3])
+print("long_version:%s" % sys.version.split()[0])
+print("py_inc_dir:%s" % distutils.sysconfig.get_python_inc())
+print("site_packages_dir:%s" % distutils.sysconfig.get_python_lib(plat_specific=1))
diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..fa2b59627865e2bb9974ed9dae25b1c4de97c135
--- /dev/null
+++ b/isis/cmake/FindNN.cmake
@@ -0,0 +1,19 @@
+# CMake module for find_package(TNT)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   TNT_INCLUDE_DIR
+
+find_path(NN_INCLUDE_DIR
+    NAMES nn.h
+    PATH_SUFFIXES nn
+)
+
+find_library(NN_LIBRARY
+  NAMES nn
+)
+
+get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "NN INCLUDE DIR: ${NN_INCLUDE_DIR}")
+message(STATUS "NN LIB: ${NN_LIBRARY}")
diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0450572ef0795f270da6eaac9e1ac84ee5e94e3a
--- /dev/null
+++ b/isis/cmake/FindOpenCV.cmake
@@ -0,0 +1,44 @@
+# CMake module for find_package(OpenCV)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   OPENCV_INCLUDE_DIR
+#   OPENCV_LIBLSIT
+
+find_path(OPENCV_INCLUDE_DIR
+    NAMES cv.h
+    PATH_SUFFIXES opencv
+)
+
+find_library(OPENCV_CORE_LIBRARY              NAMES opencv_core)
+find_library(OPENCV_VIDEOSTAB_LIBRARY         NAMES opencv_videostab)
+find_library(OPENCV_VIDEO_LIBRARY             NAMES opencv_video)
+find_library(OPENCV_SUPERRES_LIBRARY          NAMES opencv_superres)
+find_library(OPENCV_STITCHING_LIBRARY         NAMES opencv_stitching)
+find_library(OPENCV_PHOTO_LIBRARY             NAMES opencv_photo)
+find_library(OPENCV_OBJDETECT_LIBRARY         NAMES opencv_objdetect)
+find_library(OPENCV_ML_LIBRARY                NAMES opencv_ml)
+find_library(OPENCV_IMGCODECS_LIBRARY         NAMES opencv_imgcodecs)
+find_library(OPENCV_IMGPROC_LIBRARY           NAMES opencv_imgproc)
+find_library(OPENCV_CALIB3D_LIBRARY           NAMES opencv_calib3d)
+find_library(OPENCV_FEATURES2D_LIBRARY        NAMES opencv_features2d)
+find_library(OPENCV_XFEATURES2D_LIBRARY       NAMES opencv_xfeatures2d)
+find_library(OPENCV_HIGHGUI_LIBRARY           NAMES opencv_highgui)
+find_library(OPENCV_FLANN_LIBRARY             NAMES opencv_flann)
+
+get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}")
+message(STATUS "OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}")
+message(STATUS "OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}")
+message(STATUS "OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}")
+message(STATUS "OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}")
+message(STATUS "OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}")
+message(STATUS "OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}")
+message(STATUS "OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}")
+message(STATUS "OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}")
+message(STATUS "OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}")
+message(STATUS "OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}")
+message(STATUS "OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}")
+message(STATUS "OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}")
+message(STATUS "OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}")
diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..902b5b6b1cfeb377f774a2d5ee96bc043f37a833
--- /dev/null
+++ b/isis/cmake/FindPCL.cmake
@@ -0,0 +1,27 @@
+# CMake module for find_package(PCL)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   PCL_INCLUDE_DIR
+#   PCL_LIBRARY
+
+find_path(PCL_ROOT_INCLUDE_DIR
+  NAME pcl
+  PATH_SUFFIXES "pcl-${PCL_FIND_VERSION}"
+)
+
+find_path(PCL_INCLUDE_DIR
+  NAME pcl_base.h
+  PATH_SUFFIXES "pcl-${PCL_FIND_VERSION}/pcl"
+)
+
+find_library(PCL_COMMON_LIBRARY NAMES pcl_common)
+find_library(PCL_OCTREE_LIBRARY NAMES pcl_octree)
+find_library(PCL_IO_LIBRARY     NAMES pcl_io)
+
+get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}")
+message(STATUS "PCL COMMON LIB: ${PCL_COMMON_LIBRARY}")
+message(STATUS "PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}")
+message(STATUS "PCL IO LIB: ${PCL_IO_LIBRARY}")
diff --git a/isis/cmake/FindPNG.cmake b/isis/cmake/FindPNG.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..6c2439f113c82f0228781a974ae02850f4111553
--- /dev/null
+++ b/isis/cmake/FindPNG.cmake
@@ -0,0 +1,17 @@
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   PNG_INCLUDE_DIR
+#   PNG_LIBRARY
+
+find_path(PNG_INCLUDE_DIR
+    NAMES png.h
+    PATH_SUFFIXES png
+)
+
+find_library(PNG_LIBRARY
+  NAMES png
+)
+
+message(STATUS "PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}")
+message(STATUS "PNG LIB: ${PNG_LIBRARY}")
diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..74db9e434262e517759a454d4dcc1e4ec1ca616b
--- /dev/null
+++ b/isis/cmake/FindProtobuf.cmake
@@ -0,0 +1,11 @@
+find_path(PROTOBUF_INCLUDE_DIR
+  NAMES google/
+  PATH_SUFFIXES "google-protobuf/protobuf${Protobuf_FIND_VERSION}/"
+)
+
+find_library(PROTOBUF_LIBRARY NAMES protobuf)
+
+get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}")
+message(STATUS "PROTOBUF LIB: ${PROTOBUF_LIBRARY}")
diff --git a/isis/cmake/FindPython.cmake b/isis/cmake/FindPython.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..5f5a64a98ddfd2a640dd3581cbcd917fddb5cf6d
--- /dev/null
+++ b/isis/cmake/FindPython.cmake
@@ -0,0 +1,108 @@
+# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS
+#
+# PYTHON_EXECUTABLE - The path and filename of the Python interpreter.
+#
+# PYTHON_SHORT_VERSION - The version of the Python interpreter found,
+#     excluding the patch version number. (e.g. 2.5 and not 2.5.1))
+#
+# PYTHON_LONG_VERSION - The version of the Python interpreter found as a human
+#     readable string.
+#
+# PYTHON_SITE_PACKAGES_DIR - Location of the Python site-packages directory.
+#
+# PYTHON_INCLUDE_PATH - Directory holding the python.h include file.
+#
+# PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library.
+
+INCLUDE(CMakeFindFrameworks)
+
+if(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}")
+  # Already in cache, be silent
+  set(PYTHONLIBRARY_FOUND TRUE)
+else(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}")
+
+  FIND_PACKAGE(PythonInterp 3)
+
+  if(PYTHONINTERP_FOUND)
+    FIND_FILE(_find_lib_python_py FindLibPython.py PATHS ${CMAKE_MODULE_PATH})
+
+    EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE}  ${_find_lib_python_py} OUTPUT_VARIABLE python_config)
+    if(python_config)
+      STRING(REGEX REPLACE ".*exec_prefix:([^\n]+).*$" "\\1" PYTHON_PREFIX ${python_config})
+      STRING(REGEX REPLACE ".*\nshort_version:([^\n]+).*$" "\\1" PYTHON_SHORT_VERSION ${python_config})
+      STRING(REGEX REPLACE ".*\nlong_version:([^\n]+).*$" "\\1" PYTHON_LONG_VERSION ${python_config})
+      STRING(REGEX REPLACE ".*\npy_inc_dir:([^\n]+).*$" "\\1" PYTHON_INCLUDE_PATH ${python_config})
+      if(NOT PYTHON_SITE_PACKAGES_DIR)
+        if(NOT PYTHON_LIBS_WITH_KDE_LIBS)
+          STRING(REGEX REPLACE ".*\nsite_packages_dir:([^\n]+).*$" "\\1" PYTHON_SITE_PACKAGES_DIR ${python_config})
+        else(NOT PYTHON_LIBS_WITH_KDE_LIBS)
+          set(PYTHON_SITE_PACKAGES_DIR ${KDE4_LIB_INSTALL_DIR}/python${PYTHON_SHORT_VERSION}/site-packages)
+        endif(NOT PYTHON_LIBS_WITH_KDE_LIBS)
+      endif(NOT PYTHON_SITE_PACKAGES_DIR)
+      STRING(REGEX REPLACE "([0-9]+).([0-9]+)" "\\1\\2" PYTHON_SHORT_VERSION_NO_DOT ${PYTHON_SHORT_VERSION})
+      set(PYTHON_LIBRARY_NAMES python${PYTHON_SHORT_VERSION} python${PYTHON_SHORT_VERSION_NO_DOT} python${PYTHON_SHORT_VERSION}m python${PYTHON_SHORT_VERSION_NO_DOT}m)
+      if(WIN32)
+          STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR})
+          FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs)
+      endif(WIN32)
+      FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES})
+      set(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH} CACHE FILEPATH "Directory holding the python.h include file" FORCE)
+      set(PYTHONLIBRARY_FOUND TRUE)
+    endif(python_config)
+
+    # adapted from cmake's builtin FindPythonLibs
+    if(APPLE)
+        # If a framework has been detected in the include path, make sure
+        # framework's versioned library (not any .dylib) is used for linking
+        # NOTE: don't rely upon Python.framework/Versions/Current, since that may be 2.7
+        if("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework")
+          set(PYTHON_LIBRARY "")
+          set(PYTHON_DEBUG_LIBRARY "")
+          # get clean path to just framework
+          STRING(REGEX REPLACE "^(.*/Python\\.framework).*$" "\\1" _py_fw "${PYTHON_INCLUDE_PATH}")
+          if("${_py_fw}" MATCHES "Cellar/python")
+            # Appears to be a Homebrew Python install; do specific fix ups
+            # get Homebrew prefix (may not be /usr/local)
+            STRING(REGEX REPLACE "^(.+)/Cellar.*$" "\\1" _hb_prefix "${_py_fw}")
+            # prefer the Homebrew prefix framework over only versioned Python keg
+            set(_py_fw "${_hb_prefix}/Frameworks/Python.framework")
+            # prefer the symlinked-to Homebrew site-packages over only versioned Python keg
+            set(PYTHON_SITE_PACKAGES_DIR "${_hb_prefix}/lib/python${PYTHON_SHORT_VERSION}/site-packages")
+          endif("${_py_fw}" MATCHES "Cellar/python")
+          # prefer the Headers subdirectory for includes
+          if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers")
+            set(PYTHON_INCLUDE_PATH "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers" CACHE FILEPATH "Directory holding the python.h include file" FORCE)
+          endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers")
+        endif("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework")
+        if(NOT PYTHON_LIBRARY)
+          # ensure the versioned framework's library is defined, instead of relying upon -F search paths
+          if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python")
+            set(PYTHON_LIBRARY "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python" CACHE FILEPATH "Python framework library" FORCE)
+          endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python")
+        endif(NOT PYTHON_LIBRARY)
+        if(PYTHON_LIBRARY)
+          set(PYTHONLIBRARY_FOUND TRUE)
+        endif(PYTHON_LIBRARY)
+    endif(APPLE)
+  endif(PYTHONINTERP_FOUND)
+
+  if(PYTHONLIBRARY_FOUND)
+    if(APPLE)
+      # keep reference to system or custom python site-packages
+      # useful during app-bundling operations
+      set(PYTHON_SITE_PACKAGES_SYS ${PYTHON_SITE_PACKAGES_DIR})
+    endif(APPLE)
+    set(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
+    if(NOT PYTHONLIBRARY_FIND_QUIETLY)
+      message(STATUS "Found Python executable: ${PYTHON_EXECUTABLE}")
+      message(STATUS "Found Python version: ${PYTHON_LONG_VERSION}")
+      message(STATUS "Found Python library: ${PYTHON_LIBRARY}")
+      message(STATUS "Found Python site-packages: ${PYTHON_SITE_PACKAGES_DIR}")
+    endif(NOT PYTHONLIBRARY_FIND_QUIETLY)
+  else(PYTHONLIBRARY_FOUND)
+    if(PYTHONLIBRARY_FIND_REQUIRED)
+      message(FATAL_ERROR "Could not find Python")
+    endif(PYTHONLIBRARY_FIND_REQUIRED)
+  endif(PYTHONLIBRARY_FOUND)
+
+endif (EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}")
diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..8262a57b6928bf83be08969138cf2e30b1be13e4
--- /dev/null
+++ b/isis/cmake/FindQwt.cmake
@@ -0,0 +1,20 @@
+# CMake module for find_package(Qwt)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   QWT_INCLUDE_DIR
+#   QWT_LIBRARY
+
+FIND_PATH(QWT_INCLUDE_DIR
+  NAMES qwt.h
+  PATH_SUFFIXES "qwt-qt5" "qwt" "qwt6" "qwt${Qwt_FIND_VERSION}"
+)
+
+find_library(QWT_LIBRARY
+  NAMES qwt
+)
+
+get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}")
+message(STATUS "QWT LIB: ${QWT_LIBRARY}")
diff --git a/isis/cmake/FindSip.cmake b/isis/cmake/FindSip.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..8ede37c8d7bc7d514e664f475be47d1ce9129b3c
--- /dev/null
+++ b/isis/cmake/FindSip.cmake
@@ -0,0 +1,44 @@
+# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS
+#
+# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number
+#     suitable for comparison as a string.
+#
+# SIP_VERSION_STR - The version of SIP found as a human readable string.
+#
+# SIP_BINARY_PATH - Path and filename of the SIP command line executable.
+#
+# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file.
+#
+# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed
+#     into.
+
+IF(SIP_VERSION)
+  # Already in cache, be silent
+  SET(SIP_FOUND TRUE)
+ELSE(SIP_VERSION)
+
+  FIND_FILE(_find_sip_py FindSip.py PATHS ${CMAKE_MODULE_PATH})
+
+  EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config)
+  IF(sip_config)
+    STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config})
+    STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_mod_dir:([^\n]+).*$" "\\1" SIP_MOD_DIR ${sip_config})
+    SET(SIP_FOUND TRUE)
+  ENDIF(sip_config)
+
+  IF(SIP_FOUND)
+    IF(NOT SIP_FIND_QUIETLY)
+      MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}")
+    ENDIF(NOT SIP_FIND_QUIETLY)
+  ELSE(SIP_FOUND)
+    IF(SIP_FIND_REQUIRED)
+      MESSAGE(FATAL_ERROR "Could not find SIP")
+    ENDIF(SIP_FIND_REQUIRED)
+  ENDIF(SIP_FOUND)
+
+ENDIF(SIP_VERSION)
diff --git a/isis/cmake/FindSip.py b/isis/cmake/FindSip.py
new file mode 100644
index 0000000000000000000000000000000000000000..8cbb00fa5caa49ba7b30156ad3a2278d158060b7
--- /dev/null
+++ b/isis/cmake/FindSip.py
@@ -0,0 +1,13 @@
+# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS
+
+
+import sipconfig
+
+sipcfg = sipconfig.Configuration()
+print("sip_version:%06.0x" % sipcfg.sip_version)
+print("sip_version_num:%d" % sipcfg.sip_version)
+print("sip_version_str:%s" % sipcfg.sip_version_str)
+print("sip_bin:%s" % sipcfg.sip_bin)
+print("default_sip_dir:%s" % sipcfg.default_sip_dir)
+print("sip_inc_dir:%s" % sipcfg.sip_inc_dir)
+print("sip_mod_dir:%s" % sipcfg.sip_mod_dir)
diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..2c588bd138b2a0e87fe2a680ad41a1046ae9121c
--- /dev/null
+++ b/isis/cmake/FindSuperLU.cmake
@@ -0,0 +1,21 @@
+# CMake module for find_package(SuperLU)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   SUPERLU_INCLUDE_DIR
+#   SUPERLU_LIBRARY
+
+find_path(SUPERLU_INCLUDE_DIR
+  NAME supermatrix.h
+  PATH_SUFFIXES "superlu/superlu${SuperLU_FIND_VERSION}/superlu/" "superlu"
+)
+
+find_library(SUPERLU_LIBRARY
+  NAMES "superlu_${SuperLU_FIND_VERSION}" "superlu"
+)
+
+get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY)
+
+
+message(STATUS "SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}")
+message(STATUS "SUPERLU LIB: ${SUPERLU_LIBRARY}")
diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f483f587789ef811e2183f39ba7c4f69492018de
--- /dev/null
+++ b/isis/cmake/FindTIFF.cmake
@@ -0,0 +1,9 @@
+find_path(TIFF_INCLUDE_DIR
+  NAMES tiff.h
+  PATH_SUFFIXES "tiff/tiff-${TIFF_FIND_VERSION}"
+)
+
+find_library(TIFF_LIBRARY NAMES tiff)
+
+message(STATUS "TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}")
+message(STATUS "TIFF LIB: ${TIFF_LIBRARY}")
diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0bbfb154c0b590ea8cf5a4c1d212cdd3b8717a2c
--- /dev/null
+++ b/isis/cmake/FindTNT.cmake
@@ -0,0 +1,14 @@
+# CMake module for find_package(TNT)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   TNT_INCLUDE_DIR
+
+find_path(TNT_INCLUDE_DIR
+    NAMES tnt.h
+    PATH_SUFFIXES "tnt/tnt${TNT_FIND_VERSION}/tnt" "tnt/"
+)
+
+get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" )
diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..fe25ac13150d49500487b695465118a7861e00e2
--- /dev/null
+++ b/isis/cmake/FindX11.cmake
@@ -0,0 +1,11 @@
+# CMake module for find_package(X11)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   X11_LIBRARY
+
+find_library(X11_LIBRARY
+  NAMES X11
+)
+
+message(STATUS "X11 LIB: "  ${X11_LIBRARY} ) 
diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..335dca4fdab6cbe2be448d9c10139b9f9be9c2b7
--- /dev/null
+++ b/isis/cmake/FindXercesC.cmake
@@ -0,0 +1,10 @@
+find_path(XERCESC_INCLUDE_DIR
+  NAMES xercesc/
+  PATH_SUFFIXES "xercesc/xercesc-${XercesC_FIND_VERSION}/"
+)
+# message("XERCESC_INCLUDE_DIR = ${XERCESC_INCLUDE_DIR}")
+
+find_library(XercesC_LIBRARY NAMES xerces-c)
+
+message(STATUS "XERCES LIB: "  ${XercesC_LIBRARY} )
+message(STATUS "XERCES INCLUDE DIR: "  ${XERCESC_INCLUDE_DIR} )
diff --git a/isis/cmake/Findnanoflann.cmake b/isis/cmake/Findnanoflann.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..3c05e57013bca3b9b926844e4850f1e423846b73
--- /dev/null
+++ b/isis/cmake/Findnanoflann.cmake
@@ -0,0 +1,15 @@
+# CMake module for find_package(GSL)
+# Finds include directory and all applicable libraries
+#
+# Sets the following:
+#   GSL_INCLUDE_DIR
+#   GSL_LIBLIST
+
+find_path(NANOFLANN_INCLUDE_DIR
+  NAMES nanoflann.hpp
+  PATH_SUFFIXES nanoflann/
+)
+
+get_filename_component(NANOFLANN_ROOT_INCLUDE_DIR "${NANOFLANN_INCLUDE_DIR}" DIRECTORY)
+
+message(STATUS "NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}")
diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..209b3610a631b4630f08b2cdfc41dc5d442c1063
--- /dev/null
+++ b/isis/cmake/InstallThirdParty.cmake
@@ -0,0 +1,75 @@
+#===========================================================================
+# Code for installing the third part libraries to the output folder.
+#===========================================================================
+
+# Library portion of the installation
+function(install_third_party_libs)
+
+  # Where all the library files will go
+  set(installLibFolder "${CMAKE_INSTALL_PREFIX}/3rdParty/lib")
+  execute_process(COMMAND mkdir -p ${installLibFolder})
+
+  # Loop through all the library files in our list
+  foreach(library ${ALLLIBS})
+    if (EXISTS ${library})
+      #get path to library in libararypath
+      get_filename_component(librarypath ${library} PATH)
+
+      # Copy file to output directory
+      file(RELATIVE_PATH relPath "${thirdPartyDir}/lib" ${library})
+
+      # Check if the file is a symlink
+      #execute_process(COMMAND readlink ${library} OUTPUT_VARIABLE link)
+      message(STATUS "${library}")
+      execute_process(COMMAND cp -L ${library} ${installLibFolder})
+    endif()
+  endforeach()
+endfunction()
+
+# Plugin portion of the installation
+function(install_third_party_plugins)
+
+  # Where all the plugin files will go
+  set(installPluginFolder "${CMAKE_INSTALL_PREFIX}/3rdParty/plugins")
+
+  # Copy all of the plugin files
+   foreach(plugin ${THIRDPARTYPLUGINS})
+    file(RELATIVE_PATH relPath "${PLUGIN_DIR}" ${plugin})
+    get_filename_component(relPath ${relPath} DIRECTORY) # Strip filename
+    install(PROGRAMS ${plugin} DESTINATION ${installPluginFolder}/${relPath})
+  endforeach()
+
+endfunction()
+
+# License portion of the installation
+function(install_third_party_license)
+  # Specify top level directories
+  if(APPLE)
+    set(LIC_DIR "/opt/usgs/v007/3rdParty/license")
+  else()
+    set(LIC_DIR "/usgs/pkgs/local/v007/license")
+  endif()
+  if(NOT EXISTS ${CMAKE_INSTALL_PREFIX}/3rdParty)
+    install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/3rdParty/)")
+  endif()
+  install(CODE "execute_process(COMMAND cp -r ${LIC_DIR} ${CMAKE_INSTALL_PREFIX}/3rdParty/license)")
+endfunction()
+
+
+# Install all third party libraries and plugins
+function(install_third_party)
+
+  # The files are available pre-build but are not copied until make-install is called.
+  message("Setting up 3rd party lib installation...")
+  install_third_party_libs()
+
+  message("Setting up 3rd party plugin installation...")
+  install_third_party_plugins()
+
+  message("Obtaining licenses...")
+  install_third_party_license()
+
+  # Finish miscellaneous file installation
+  file(WRITE "${CMAKE_INSTALL_PREFIX}/3rdParty/lib/README" "This directory contains O/S and hardware specific shared libraries needed\nto execute ISIS applications")
+
+endfunction()
diff --git a/isis/cmake/MacPlistMacros.cmake b/isis/cmake/MacPlistMacros.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..b12387277131a6a243f405a80e4706d63c12633b
--- /dev/null
+++ b/isis/cmake/MacPlistMacros.cmake
@@ -0,0 +1,12 @@
+# Mac Plist Macros
+
+FUNCTION (GET_VERSION_PLIST PLISTFILE OUTVAR)
+	SET (PVERSION "")
+	IF (EXISTS ${PLISTFILE})
+		FILE (READ "${PLISTFILE}" info_plist)
+		STRING (REGEX REPLACE "\n" "" info_plist "${info_plist}")
+		STRING (REGEX MATCH "<key>CFBundleShortVersionString</key>[ \t]*<string>([0-9\\.]*)</string>" PLISTVERSION "${info_plist}")
+		STRING (REGEX REPLACE "<key>CFBundleShortVersionString</key>[ \t]*<string>([0-9\\.]*)</string>" "\\1" PVERSION "${PLISTVERSION}")
+	ENDIF (EXISTS ${PLISTFILE})
+	SET (${OUTVAR} ${PVERSION} PARENT_SCOPE)
+ENDFUNCTION (GET_VERSION_PLIST)
diff --git a/isis/cmake/Makefile b/isis/cmake/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..0e95c7b314bbe8bcfba1cc032ca73d84e4d9103d
--- /dev/null
+++ b/isis/cmake/Makefile
@@ -0,0 +1,196 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.9
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /scratch/isiscmake/isis
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /scratch/isiscmake/isis
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local/fast
+
+# Special rule for the target test
+test:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
+	/usr/bin/ctest --force-new-ctest-process $(ARGS)
+.PHONY : test
+
+# Special rule for the target test
+test/fast: test
+
+.PHONY : test/fast
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+
+.PHONY : edit_cache/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+
+.PHONY : rebuild_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/usr/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/usr/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+
+.PHONY : list_install_components/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /scratch/isiscmake/isis && $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles /scratch/isiscmake/isis/cmake/CMakeFiles/progress.marks
+	cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /scratch/isiscmake/isis && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... install/strip"
+	@echo "... install/local"
+	@echo "... test"
+	@echo "... edit_cache"
+	@echo "... rebuild_cache"
+	@echo "... install"
+	@echo "... list_install_components"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /scratch/isiscmake/isis && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..242a9dc1ca6c464cb6721fe256a43dec47624479
--- /dev/null
+++ b/isis/cmake/RunMakeFileTest.cmake
@@ -0,0 +1,80 @@
+#============================================================================
+# Script to read in a MakeFile based test and run it without relying on any
+# of the old Makefile infrastructure.
+#============================================================================
+
+cmake_minimum_required(VERSION 3.3)
+list(APPEND CMAKE_MODULE_PATH "${CODE_ROOT}/cmake")
+list(APPEND CMAKE_PREFIX_PATH "${CODE_ROOT}/cmake")
+include(Utilities)
+
+
+# Function to run the test and check the results
+function(run_app_makefile_test makefile inputFolder outputFolder truthFolder binFolder)
+
+  # Build the test name
+  get_filename_component(sourceFolder ${makefile}     DIRECTORY)
+#   get_filename_component(testName     ${sourceFolder} NAME)
+#   get_filename_component(folder       ${sourceFolder} DIRECTORY)
+#   get_filename_component(folder       ${folder}       DIRECTORY)
+#   get_filename_component(appName      ${folder}       NAME)
+  set(appName ${appName}_${testName})
+
+  # Check if there are copies of the input/truth folders in the source folder,
+  #  if so use those instead of the original location.
+  if(EXISTS ${sourceFolder}/input)
+    set(inputFolder ${sourceFolder}/input)
+  endif()
+  if(EXISTS ${sourceFolder}/truth)
+    set(truthFolder ${sourceFolder}/truth)
+  endif()
+
+#   # Read in the MakeFile
+#   if(NOT EXISTS ${makefile})
+#     message(FATAL_ERROR "App test MakeFile ${makefile} was not found!")
+#   endif()
+#   file(READ ${makefile} makefileContents)
+#   # Replace include line with a short list of definitions
+#   set(newDefinitions "INPUT=${inputFolder}\nOUTPUT=${outputFolder}\nRM=rm -f\nCP=cp\nLS=ls\nMV=mv\nSED=sed\nTAIL=tail\nECHO=echo\nCAT=cat\nLS=ls")
+#   string(REPLACE "include ${CODE_ROOT}/make/isismake.tsts" "${newDefinitions}" newFileContents "${makefileContents}")
+#
+#   # Set required environment variables
+#   set(ENV{PATH} "${binFolder}:$ENV{PATH}")
+#
+#   # Select the log file
+#   set(logFile "${binFolder}/${appName}.output")
+#   message("logFile = ${logFile}")
+#
+#   # Execute the Makefile we just generated
+#   set(code "")
+#   execute_process(COMMAND rm -rf ${outputFolder})
+#   execute_process(COMMAND rm -f ${logFile})
+  message("SOURCE FOLDER ${sourceFolder}")
+  execute_process(COMMAND make test WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result)
+  message("result: ${result}")
+  if (result MATCHES "OK")
+      set(failed "OFF")
+  else()
+       set(failed "ON")
+  endif()
+
+
+  # If any file failed, the test is a failure.
+  if(${failed})
+    message("TRUTH: ${TRUTH}")
+    message(FATAL_ERROR "Test failed. Result:\n ${result}")
+  endif()
+
+endfunction()
+
+
+
+
+#===================================================================================
+# This is the main script that gets run during the test.
+# - Just redirect to the main function call.
+
+# Needed for IsisPreferences and other test data to be found
+set(ENV{ISIS3DATA} "${DATA_ROOT}")
+
+run_app_makefile_test(${MAKEFILE} ${INPUT_DIR} ${OUTPUT_DIR} ${TRUTH_DIR} ${BIN_DIR})
diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..c64d10584496fbbff918378172346a4cf8a31977
--- /dev/null
+++ b/isis/cmake/RunUnitTest.cmake
@@ -0,0 +1,77 @@
+#=========================================================================
+# Script to run a basic unit test and compare the result to a truth file.
+# - This replaces the ISIS UnitTester script.
+#=========================================================================
+
+# Multiple ISIS files need to find things relative to ISISROOT
+#  and ISIS3DATA so make sure those are set.
+set(ENV{ISIS3DATA} "${DATA_ROOT}")
+
+message(STATUS "ISISROOT = $ENV{ISISROOT}")
+message(STATUS "ISIS3DATA = $ENV{ISIS3DATA}")
+
+# Set up a file for program output
+set(outputFile "${TEST_PROG}.output")
+message("outputFile = ${outputFile}")
+file(REMOVE ${outputFile}) # Make sure no old file exists
+
+# The test programs need to be run from their source folders
+#  so that they can find input data files.
+get_filename_component(truthFolder ${TRUTH_FILE} DIRECTORY)
+
+# Test programs also need to be run with the EXACT name "unitTest",
+#  otherwise a GUI will pop up and ruin the test.
+get_filename_component(binFolder ${TEST_PROG} DIRECTORY)
+get_filename_component(binName   ${TEST_PROG} NAME)
+set(tempDir  ${binFolder}/${binName}_temp)
+execute_process(COMMAND rm -rf ${tempDir})
+execute_process(COMMAND mkdir -p ${tempDir})
+execute_process(COMMAND ln -s ${TEST_PROG} ${truthFolder}/unitTest)
+
+# Run the unit test executable and pipe the output to a text file.
+execute_process(COMMAND  ./unitTest
+                WORKING_DIRECTORY ${truthFolder}
+                OUTPUT_FILE ${outputFile}
+                ERROR_FILE ${outputFile}
+                OUTPUT_VARIABLE result
+                RESULT_VARIABLE code)
+if(result)
+    message("Test failed: ${result}, ${code}")
+endif()
+
+# If an exclusion file is present, use it to filter out selected lines.
+# - Do this by comparing filtered versions of the two files, then
+#   running the diff on those two temporary files.
+set(comp1 ${outputFile})
+set(comp2 ${TRUTH_FILE})
+set(exclusionPath ${truthFolder}/unitTest.exclude)
+if(EXISTS ${exclusionPath})
+  set(comp1 ${tempDir}/output_exclude.txt)
+  set(comp2 ${tempDir}/truth_exclude.txt)
+  # This throws out all lines containing a word from the exclusion file.
+  execute_process(COMMAND cat ${outputFile} COMMAND grep -v -f ${exclusionPath}
+                  OUTPUT_FILE "${comp1}")
+  execute_process(COMMAND cat ${TRUTH_FILE} COMMAND grep -v -f ${exclusionPath}
+                  OUTPUT_FILE "${comp2}")
+
+endif()
+
+# Verify that the files are exactly the same
+execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files
+    ${comp1} ${comp2}
+    RESULT_VARIABLE DIFFERENT)
+
+if(DIFFERENT)
+    message("------------------ DIFFERENCES ------------------ ")
+    execute_process(COMMAND diff ${comp1} ${comp2} OUTPUT_VARIABLE compdiff)
+    message("${compdiff}")
+    message("------------------------------------------------- ")
+    message(FATAL_ERROR "Test failed - files differ")        
+    # On error the result file is left around to aid in debugging.
+else()
+  file(REMOVE ${outputFile}) # On success, clean out the result file.
+  execute_process(COMMAND rm -rf ${tempdir})
+endif()
+
+# Clean up our temporary folder
+execute_process(COMMAND rm -f ${truthFolder}/unitTest)
diff --git a/isis/cmake/TestSetup.cmake b/isis/cmake/TestSetup.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..c3c3e202b1c8d568eb8220c989cca8e3dd38484e
--- /dev/null
+++ b/isis/cmake/TestSetup.cmake
@@ -0,0 +1,83 @@
+#============================================================
+# This file contains functions to help set tests.
+#============================================================
+
+
+# Generate a test from a folder containing a Makefile and specific sub folders.
+# - These are used for application and module tests.
+function(add_makefile_test_folder folder prefix_name)
+
+    # For convenience, quietly ignore Makefiles that get passed in instead of folders.
+    get_filename_component(subName ${folder} NAME)
+    if("${subName}" STREQUAL "Makefile")
+      return()
+    endif()
+
+    # Figure out the input, output, and truth paths
+    file(RELATIVE_PATH relPath ${CMAKE_SOURCE_DIR} ${folder})
+    set(dataDir   $ENV{ISIS3TESTDATA}/isis/${relPath})
+    set(inputDir  ${dataDir}/input)
+    set(truthDir  ${dataDir}/truth)
+    set(makeFile  ${folder}/Makefile)
+
+    # TODO: Improve variable name (from top level file)
+    # The output folder may be in a different directory
+
+    set(outputDir ${testOutputDir}/${relPath}/output)
+
+    # Define the name CTest will use to refer to this test.
+    set(testName  ${prefix_name}_test_${subName})
+
+    ## Some tests don't need an input folder but the others must exist
+    #if(NOT EXISTS ${makeFile})
+    #  message(FATAL_ERROR "Required file does not exist: ${makeFile}")
+    #endif()
+    #if(NOT EXISTS ${truthDir})
+    #  message(FATAL_ERROR "Required data folder does not exist: ${truthDir}")
+    #endif()
+
+    # Call lower level function to finish adding the test.
+    add_makefile_test_target(${testName} ${makeFile} ${inputDir} ${outputDir} ${truthDir})
+endfunction()
+
+
+# Add a Makefile based test to the CMake test list.
+macro(add_makefile_test_target testName makeFile inputDir outputDir truthDir)
+
+  set(thisFolder "${PROJECT_SOURCE_DIR}/cmake")
+  # Set up a cmake script which will execute the command in the makefile
+  #  and then check the results against the truth folder.
+  add_test(NAME ${testName}
+           COMMAND ${CMAKE_COMMAND}
+           -DMAKEFILE=${makeFile}
+           -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
+           -DCODE_ROOT=${PROJECT_SOURCE_DIR}
+           -DDATA_ROOT=$ENV{ISIS3DATA}
+           -DINPUT_DIR=${inputDir}
+           -DOUTPUT_DIR=${outputDir}
+           -DTRUTH_DIR=${truthDir}
+           -DBIN_DIR=${CMAKE_BINARY_DIR}/bin
+           -P ${thisFolder}/RunMakeFileTest.cmake)
+  set_tests_properties(${testName} PROPERTIES LABELS "app")
+
+endmacro()
+
+
+# Add a class based unit test with an executable and a truth file.
+macro(add_unit_test_target testFile truthFile labels)
+
+  set(thisFolder "${PROJECT_SOURCE_DIR}/cmake")
+  set(fullTestPath "${CMAKE_BINARY_DIR}/unitTest/${testFile}") # The binary that the script will execute
+
+  # Set up a cmake script which will run the executable
+  #  and then check the results against the truth file.
+  set(testName ${testFile})
+  add_test(NAME ${testName}
+           COMMAND ${CMAKE_COMMAND}
+           -DTEST_PROG=${fullTestPath}
+           -DTRUTH_FILE=${truthFile}
+           -DDATA_ROOT=$ENV{ISIS3DATA}
+           -DCODE_ROOT=${PROJECT_SOURCE_DIR}
+           -P ${thisFolder}/RunUnitTest.cmake)
+  set_tests_properties(${testName} PROPERTIES LABELS "unit;${labels}")
+endmacro()
diff --git a/isis/cmake/Utilities.cmake b/isis/cmake/Utilities.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..513668a6304e22833bea29f62831fd6c6741767d
--- /dev/null
+++ b/isis/cmake/Utilities.cmake
@@ -0,0 +1,315 @@
+#==================================================================================
+# This file contains small utility functions
+#==================================================================================
+
+# Copy one file
+function(copy_file src dest)
+  configure_file(${src} ${dest} COPYONLY)
+endfunction()
+
+# Copy one folder
+function(copy_folder src dest)
+  execute_process(COMMAND cp -r ${src} ${dest})
+endfunction()
+
+# Copy all files matching a wildcard to the output folder.
+function(copy_wildcard wildcard outputFolder)
+  file(GLOB files ${wildcard})
+  file(COPY ${files} DESTINATION ${outputFolder})
+endfunction()
+
+# Copy all input files to the output folder
+function(copy_files_to_folder files folder)
+  foreach(f ${files})
+    get_filename_component(filename ${f} NAME)
+    set(outputPath "${folder}/${filename}")
+    configure_file(${f} ${outputPath} COPYONLY)
+  endforeach()
+endfunction()
+
+# Quit if the file does not exist
+function(verify_file_exists path)
+  if(NOT EXISTS ${path})
+    message( FATAL_ERROR "Required file ${path} does not exist!" )
+  endif()
+endfunction()
+
+# Set result to ON if the file contains "s", OFF otherwise.
+function(file_contains path s result)
+  file(READ ${path} contents)
+  string(FIND "${contents}" "${s}" position)
+  set(${result} ON PARENT_SCOPE)
+  if(${position} EQUAL -1)
+    set(${result} OFF PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+# Set result to a list of all the subdirectories in the given directory.
+function(get_subdirectory_list curdir result)
+  file(GLOB children RELATIVE ${curdir} ${curdir}/*)
+  set(dirlist "")
+  foreach(child ${children})
+    # Skip files and hidden folders.
+    string(SUBSTRING ${child} 0 1 firstChar)
+    if( (IS_DIRECTORY ${curdir}/${child}) AND (NOT ${firstChar} STREQUAL ".") )
+      list(APPEND dirlist ${curdir}/${child})
+    endif()
+  endforeach()
+  set(${result} ${dirlist} PARENT_SCOPE)
+endfunction()
+
+# Append the contents of IN_FILE to the end of OUT_FILE
+function(cat inFile outFile)
+
+  # If the output file does not exist, init with an empty file.
+  if(NOT EXISTS "${outFile}")
+    file(WRITE ${outFile} "")
+  endif()
+
+  # Perform the file concatenation.
+  if(EXISTS "${inFile}")
+    file(READ ${inFile} contents)
+    file(APPEND ${outFile} "${contents}")
+  endif()
+endfunction()
+
+# Get the correct location to generate code for items in a given input folder
+# - Generated code includes uic, moc, and protobuf files.
+function(get_code_gen_dir inputFolder codeGenFolder)
+  file(RELATIVE_PATH relPath ${PROJECT_SOURCE_DIR} ${inputFolder})
+  string(REPLACE "src" "objects" relPath ${relPath})
+  set(${codeGenFolder} "${PROJECT_BINARY_DIR}/${relPath}" PARENT_SCOPE)
+  file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/${relPath}")
+
+  # Also add this folder to the include path
+  # include_directories("${PROJECT_BINARY_DIR}/${relPath}")
+endfunction()
+
+# Determine the text string used to describe this OS version
+function(get_os_version text)
+
+  if(UNIX AND NOT APPLE)
+
+    # Fetch OS information
+    execute_process(COMMAND cat "/etc/os-release"
+                    RESULT_VARIABLE code
+                    OUTPUT_VARIABLE result
+                    ERROR_VARIABLE result)
+    if ("${code}" STREQUAL "0")
+      # Extract OS name and version from generic Linux system
+      string(REGEX MATCH "NAME=[A-Za-z\"]+" name "${result}")
+      string(REGEX MATCH "VERSION_ID=[0-9\\.\"]+" version "${result}")
+      string(SUBSTRING ${name} 5 -1 name)
+      string(SUBSTRING ${version} 11 -1 version)
+      string(REPLACE "\"" "" name ${name})
+      string(REPLACE "\"" "" version ${version})
+      string(REPLACE "." "_" version ${version})
+    else()
+      # Try the Red Hat specific command.
+      execute_process(COMMAND cat "/etc/redhat-release"
+                      RESULT_VARIABLE code
+                      OUTPUT_VARIABLE result
+                      ERROR_VARIABLE result)
+      if ("${code}" STREQUAL "0")
+        # Extract OS name and version from Red Hat Linux system
+        string(REGEX MATCH "[0-9\\.]+" version "${result}")
+        set(name RedHatEnterprise) # This part is easy
+      else()
+        # TODO: Test!
+        # Try another command
+        execute_process(COMMAND cat "/etc/lsb-release"
+                        RESULT_VARIABLE code
+                        OUTPUT_VARIABLE result
+                        ERROR_VARIABLE result)
+
+        message("code = ${code}")
+        message("result = ${result}")
+
+        if ("${code}" STREQUAL "0")
+          # Extract OS name and version
+          string(REGEX MATCH "Description:[ A-Za-z0-9\\.]+" version "${result}") # Get the line
+          string(REPLACE "release"      "" version ${version}) # Strip unwanted text
+          string(REPLACE " "            "" version ${version})
+          string(REPLACE "Description:" "" version ${version})
+          set(name "") # Included in version
+        else()
+          # TODO: Test!
+          # Try the debian specific command
+          execute_process(COMMAND cat "/etc/debian_version"
+                          RESULT_VARIABLE code
+                          OUTPUT_VARIABLE result
+                          ERROR_VARIABLE result)
+
+          message("code = ${code}")
+          message("result = ${result}")
+          if ("${code}" STREQUAL "0")
+            set(version "${result}")
+            set(name Debian)
+          else()
+
+            message( FATAL_ERROR "Did not recognize UNIX operating system!" )
+
+          endif()
+        endif()
+      endif()
+    endif()
+
+    #message("name = ${name}")
+    #message("version = ${version}")
+
+    set(prefix "Linux_x86_64_")
+
+  # Build the final output string
+  elseif(APPLE)
+
+    # Fetch OS information
+    execute_process(COMMAND sw_vers
+                    OUTPUT_VARIABLE result
+                    ERROR_VARIABLE result)
+
+    # Format the string
+    string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" version "${result}")
+    string(REGEX MATCH "^[0-9]+.[0-9]+" version "${version}")
+    string(REPLACE "." "_" version ${version})
+
+    set(name   "MacOSX")
+    set(prefix "Darwin_x86_64_")
+
+  else()
+    message( FATAL_ERROR "Did not recognize a supported operating system!" )
+  endif()
+
+  # Final string assembly
+  set(${text} ${prefix}${name}${version} PARENT_SCOPE)
+endfunction()
+
+
+# Delete the first N lines of a file
+function(apply_skiplines path number)
+
+  if(${number} EQUAL 0)
+    return()
+  endif()
+
+  # The first line counts as line 1 for the tail command
+  MATH(EXPR number "${number}+1")
+
+  set(temp ${path}_temp)
+  file(RENAME ${path} ${temp})
+  message("tail -n +${number} ${temp} OUTPUT_FILE ${path}")
+  execute_process(COMMAND tail -n +${number} ${temp} OUTPUT_FILE ${path})
+  #file(REMOVE ${temp})
+endfunction()
+
+# Strip all lines beginning with one of the words
+function(apply_ignorelines path words)
+
+  set(temp ${path}_temp)
+  file(RENAME ${path} ${temp})
+
+  #Set up special grep command to remove these lines
+  message("words = ${words}")
+  string(REPLACE " " "|" fullS "${words}")
+
+  message("COMMAND grep -vEw ${fullS} ${temp}")
+  execute_process(COMMAND grep -vEw ${fullS} ${temp} OUTPUT_FILE ${path})
+
+  #file(REMOVE ${temp})
+endfunction()
+
+
+#------------------------------------------------------------
+
+# Wrapper function to add a library and its components
+function(add_library_wrapper name sourceFiles libDependencies)
+
+  # The only optional argument is "alsoStatic", which indicates that
+  #  the library should be build both shared and static.
+  set(alsoStatic ${ARGN})
+
+  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+
+  # Add library, set dependencies, and add to installation list.
+  add_library(${name} SHARED ${sourceFiles})
+  set_target_properties(${name} PROPERTIES LINKER_LANGUAGE CXX)
+  target_link_libraries(${name} ${libDependencies})
+  install(TARGETS ${name} DESTINATION lib)
+
+  # buildStaticCore is a command line option specified in the top CMakeLists.txt file.
+  if(alsoStatic AND ${buildStaticCore})
+    # The static version needs a different name, but in the end the file
+    # needs to have the same name as the shared lib.
+    set(staticName "${name}_static")
+    message("Adding static library ${staticName}")
+
+    add_library("${staticName}" STATIC ${sourceFiles})
+    set_target_properties(${staticName} PROPERTIES LINKER_LANGUAGE CXX)
+    target_link_libraries(${staticName} ${libDependencies})
+
+    # Use a copy -> install combo to get the file to the correct place.
+    add_custom_command(TARGET ${staticName} POST_BUILD
+                       COMMAND mv ${CMAKE_BINARY_DIR}/src/lib${staticName}.a
+                                  ${CMAKE_BINARY_DIR}/src/lib${name}.a)
+
+    install(CODE "EXECUTE_PROCESS(COMMAND cp ${CMAKE_BINARY_DIR}/lib/lib${name}.a
+                                             ${CMAKE_INSTALL_PREFIX}/lib/lib${name}.a)")
+  endif()
+
+endfunction()
+
+function(get_version libFile returnVar)
+  set(${returnVar} "")
+  set(FOUND_VERSION "")
+  # Get the File name
+  get_filename_component(VERSION_FILE ${libFile} NAME_WE)
+  # message("VERSION_FILE = ${VERSION_FILE}")
+  # Get the path to the dylib file as the so with version info is in the same area
+  string(REGEX MATCH "^/(([a-z or A-Z or 0-9])*/)*" PATH_TO_VERSION ${libFile})
+  # message("PATH_TO_VERSION= ${PATH_TO_VERSION}")
+  # Glob for the dylib file with the version number
+  # message("CURRENT PREFIX = ${PATH_TO_VERSION}${VERSION_FILE}")
+  file(GLOB FOUND_FILES
+        "${PATH_TO_VERSION}${VERSION_FILE}-[0-9].[0-9].[0-9]*"
+        "${PATH_TO_VERSION}${VERSION_FILE}-[0-9].[0-9]*"
+        "${PATH_TO_VERSION}${VERSION_FILE}-3.1.so"
+        "${PATH_TO_VERSION}${VERSION_FILE}.[0-9].[0-9].[0-9]*"
+        "${PATH_TO_VERSION}${VERSION_FILE}_[0-9].[0-9].[0-9]*"
+        "${PATH_TO_VERSION}${VERSION_FILE}.so.[0-9]*.[0-9]*.[0-9]*"
+        "${PATH_TO_VERSION}${VERSION_FILE}.so.[0-9]*.[0-9]*"
+        "${PATH_TO_VERSION}${VERSION_FILE}.[0-9].dylib"
+        "${PATH_TO_VERSION}${VERSION_FILE}.[0-9]*.[0-9]*.dylib"
+      )
+  # message("FOUND_FILES = ${FOUND_FILES}")
+  foreach(f ${FOUND_FILES})
+    # Ideally glob found a single file and grep for the version number found
+    get_filename_component(VERSION_FILE ${f} NAME)
+
+    string(REGEX MATCH "[\\.,-][0-9]+\\.[0-9]+\\.[0-9]+" CURR_VERSION ${VERSION_FILE})
+
+    if(NOT CURR_VERSION)
+      string(REGEX MATCH "[\\.,-][0-9]+\\.[0-9]+" CURR_VERSION ${VERSION_FILE})
+    endif(NOT CURR_VERSION)
+
+
+    if(NOT CURR_VERSION)
+      string(REGEX MATCH "[\\.,-][0-9]+\\." CURR_VERSION ${VERSION_FILE})
+      string(SUBSTRING ${CURR_VERSION} 0 2 CURR_VERSION)
+    endif(NOT CURR_VERSION)
+
+    string(SUBSTRING ${CURR_VERSION} 1 -1 CURR_VERSION)
+
+    if(FOUND_VERSION)
+      # message("VERSION = ${CURR_VERSION}")
+      # message("FOUND_VERSION = ${FOUND_VERSION}")
+      if(${FOUND_VERSION} VERSION_LESS ${CURR_VERSION})
+        set(FOUND_VERSION ${CURR_VERSION})
+      endif()
+    else(FOUND_VERSION)
+      set(FOUND_VERSION ${CURR_VERSION})
+    endif(FOUND_VERSION)
+
+  endforeach()
+  set(${returnVar} ${FOUND_VERSION} PARENT_SCOPE)
+endfunction()
diff --git a/isis/cmake/cmake_install.cmake b/isis/cmake/cmake_install.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..c66bc846889856012f5050787464fd818f5ef576
--- /dev/null
+++ b/isis/cmake/cmake_install.cmake
@@ -0,0 +1,50 @@
+# Install script for directory: /scratch/isiscmake/isis/cmake
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set(CMAKE_INSTALL_PREFIX "/scratch/isiscmake/isis/build")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  if(BUILD_TYPE)
+    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  else()
+    set(CMAKE_INSTALL_CONFIG_NAME "")
+  endif()
+  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+  if(COMPONENT)
+    message(STATUS "Install component: \"${COMPONENT}\"")
+    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  else()
+    set(CMAKE_INSTALL_COMPONENT)
+  endif()
+endif()
+
+# Install shared libraries without execute permission?
+if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  set(CMAKE_INSTALL_SO_NO_EXE "0")
+endif()
+
+if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
+  EXECUTE_PROCESS(COMMAND cp -f /scratch/isiscmake/isis/lib/libisis3.so /scratch/isiscmake/isis/build/lib/libisis3.5.0.so)
+endif()
+
+if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
+  EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0.so /scratch/isiscmake/isis/build/lib/libisis3.5.so)
+endif()
+
+if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
+  EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.so /scratch/isiscmake/isis/build/lib/libisis3.so)
+endif()
+
+if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
+  EXECUTE_PROCESS(COMMAND ln -sf libisis3.so /scratch/isiscmake/isis/build/lib/libisis.so)
+endif()
+
diff --git a/isis/make/config.darwin-MacOSX10_11 b/isis/make/config.darwin-MacOSX10_11
index 2b600ac626ea5eac65da848fbe326f8212c42dcc..ecd72e9532edda40449fc3792a9217c7ad746bfb 100644
--- a/isis/make/config.darwin-MacOSX10_11
+++ b/isis/make/config.darwin-MacOSX10_11
@@ -39,6 +39,7 @@ endif
 ISISCPPFLAGS += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE
 ISISCPPFLAGS += -fPIC
 ISISCPPFLAGS += -DGMM_USES_SUPERLU
+ISISCPPFLAGS += -std=c++11
 
 #ifeq ($(findstring DEBUG, $(MODE)),DEBUG)
   ISISCPPFLAGS  += -g
@@ -373,14 +374,10 @@ NNLIB = -lnn
 #---------------------------------------------------------------------------
 # Setup for Bullet Physics library
 #---------------------------------------------------------------------------
-#BULLETLIB     = -lBullet2FileLoader -lBullet3Collision -lBullet3Common          \
-#                -lBullet3Dynamics   -lBullet3Geometry  -lBullet3OpenCL_clew     \
-#                -lBulletCollision   -lBulletDynamics   -lBulletInverseDynamics  \
-#                -lBulletSoftBody    -lLinearMath
 BULLETLIB     = -lBullet3OpenCL_clew     -lBullet3Common    -lBullet3Geometry   \
                 -lBulletSoftBody         -lBulletDynamics   -lBullet3Dynamics   \
                 -lBulletInverseDynamics  -lBulletCollision  -lBullet3Collision  \
-                -lLinearMath 
+                -lLinearMath
 BULLETINCDIR  = -I$(ISIS3LOCAL)/include/bullet
 BULLETLIBDIR  = -L$(ISIS3LOCAL)/lib
 
@@ -394,7 +391,7 @@ ifeq (,$(findstring $(PCLPYFRAMES)/Python.framework,$(wildcard $(PCLPYFRAMES)/Py
 endif
 
 #---------------------------------------------------------------------------
-# Set up for PCL libraries 
+# Set up for PCL libraries
 #---------------------------------------------------------------------------
 PCLINCDIR = -I$(ISIS3LOCAL)/include/pcl-1.8
 PCLLIBDIR = -L$(ISIS3LOCAL)/lib
@@ -404,7 +401,7 @@ VTKLIB    = -lvtksys-7.0.1
 EMBREELIB = -lembree
 
 #---------------------------------------------------------------------------
-# Set up for Eigen (link to include files only, no library) 
+# Set up for Eigen (link to include files only, no library)
 #---------------------------------------------------------------------------
 EIGENINCDIR = -I$(ISIS3OPT)/include/eigen3
 
diff --git a/isis/make/config.darwin-MacOSX10_13 b/isis/make/config.darwin-MacOSX10_13
new file mode 100644
index 0000000000000000000000000000000000000000..a2134dfcd3098e92c6fcc08ff9ea088c8a25b2bc
--- /dev/null
+++ b/isis/make/config.darwin-MacOSX10_13
@@ -0,0 +1,602 @@
+# $Id: config.darwin,v 1.47 2010/04/07 00:07:52 kbecker Exp $
+#--------------------------------------------------------------------------
+# Compiler options
+#---------------------------------------------------------------------------
+#  Build architecture now automatically determined at build time via isis.conf
+# include $(ISISROOT)/make/isis.conf
+
+MAC_ARCH=-arch x86_64
+MAC_XARCH=-Xarch_x86_64
+MAC_OS_MIN=-mmacosx-version-min=10.11
+MAC_ARCH_FLAGS = $(MAC_ARCH) $(MAC_XARCH) $(MAC_OS_MIN)
+
+QTDEFINES= -DQT_GUI_LIB -DQT_CORE_LIB DQT_NO_DEBUG
+
+ISIS_MACOSX_TARGET=10.11
+
+ISIS_CFLAGS= -pipe -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -Wall -W -Wno-unused-parameter -fPIC $(MAC_ARCH_FLAGS) $(QTDEFINES)
+
+ISIS_CPPFLAGS= -pipe -stdlib=libc++ -std=c++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -Wall -W -Wno-unused-parameter -fPIC $(MAC_ARCH_FLAGS) $(QTDEFINES)
+
+ISIS_LFLAGS=-headerpad_max_install_names -stdlib=libc++ -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk $(MAC_ARCH_FLAGS)
+
+ISIS_INC_PATH=  -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/AGL.framework/Headers
+
+# flags to be used only when compiling protobuf generated source files
+ISIS_PROTOBUF_FLAGS= -w
+
+#  Basically is GNU g++/gcc
+CXX = g++
+CC  = gcc
+
+ifeq ($(HOST_PROC), powerpc)
+  # Powerpc support
+  ISISCPPFLAGS += -DISIS_LITTLE_ENDIAN=0
+else
+  # Assumes Intel Mac
+  ISISCPPFLAGS += -DISIS_LITTLE_ENDIAN=1
+endif
+ISISCPPFLAGS += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE
+ISISCPPFLAGS += -fPIC
+ISISCPPFLAGS += -DGMM_USES_SUPERLU
+ISISCPPFLAGS += -std=c++11
+
+#ifeq ($(findstring DEBUG, $(MODE)),DEBUG)
+  ISISCPPFLAGS  += -g
+  ISISCPPFLAGS  += -O0
+#else
+  ISISCPPFLAGS  += -O2
+#endif
+ISISCFLAGS = $(ISIS_CFLAGS)
+
+#---------------------------------------------------------------------------
+# Linker options.  Runtime paths for Mac is rooted to $ISISROOT
+#---------------------------------------------------------------------------
+#ISISLDFLAGS = -headerpad_max_install_names $(MAC_ARCH_FLAGS) -bind_at_load -Wl,-w
+#ISISLDFLAGS += $(ISIS_LFLAGS) -bind_at_load -Wl,-w
+ISISLDFLAGS += $(ISIS_LFLAGS) -Wl,-w
+ISISLDRPATH = -Wl,-rpath,@loader_path/..  -Wl,-rpath,$(ISISROOT)
+ISISSYSLIBS = -lz -lm -framework ApplicationServices
+ISISSTATIC  =
+ISISDYNAMIC =
+
+#---------------------------------------------------------------------------
+# Shared library options
+#---------------------------------------------------------------------------
+#RANLIB          = /usr/bin/ranlib
+RANLIB          = /usr/bin/true
+SHAREDLIBEXT    = dylib
+DYLIBVERSION    = -compatibility_version $(ISISMAJOR).$(ISISMINOR) \
+                  -current_version $(ISISLIBVERSION)
+DYLIBFLAGS      = $(MAC_ARCH_FLAGS)  -dynamiclib -flat_namespace \
+	   	   -single_module -undefined suppress
+ISISSHAREDFLAGS = $(MAC_ARCH_FLAGS) -bundle -flat_namespace -dynamic \
+		  -undefined suppress
+ISISSHAREDON    =
+ISISSHAREDOFF   =
+ISISARFLAGS     =
+
+#---------------------------------------------------------------------------
+#  Set ISIS Dev Kit (IDK) paths.  This setting of ISISLOCALVERSION here will
+#  override this macro set in isismake.os (KJB 2013-12-12)
+#---------------------------------------------------------------------------
+#ISISLOCALVERSION := v006
+IDK_ROOT         ?= /opt/usgs/$(ISISLOCALVERSION)
+ISIS3OPT         ?= $(IDK_ROOT)/ports
+ISIS3EXEC        ?= $(ISIS3OPT)/libexec
+ISIS3LOCAL       ?= $(IDK_ROOT)/3rdparty
+ISIS3PROP        ?= $(IDK_ROOT)/proprietary
+
+#  Set up paths to needed for doxygen
+DOXYGEN     = $(ISIS3OPT)/bin/doxygen
+DOT_PATH    = $(ISIS3OPT)/bin
+GREP        = /usr/local/bin/grep
+
+# Set up path for OS specific locations of 3rd party licenses
+THIRDPARTYLICPATH := /opt/usgs/$(ISISLOCALVERSION)/3rdParty/license/
+
+#---------------------------------------------------------------------------
+# Set up for cwd
+#---------------------------------------------------------------------------
+CWDINCDIR =
+CWDLIBDIR =
+CWDLIB    =
+
+#---------------------------------------------------------------------------
+# Set up for Qt
+#---------------------------------------------------------------------------
+QTDIR        = $(ISIS3EXEC)/qt5
+
+QTFRAMEWORKDIR   = $(QTDIR)/lib
+
+QTINCDIR  = -I$(QTDIR)/mkspecs/macx-clang
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtCore.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtConcurrent.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtDBus.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtGui.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtMultimedia.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtMultimediaWidgets.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtNetwork.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtNfc.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtOpenGL.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtPositioning.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtPrintSupport.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtQml.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtQuick.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtQuickParticles.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtQuickTest.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtQuickWidgets.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtScript.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtScriptTools.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtSensors.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtSerialPort.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtSql.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtSvg.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtTest.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtWebChannel.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtWebEngine.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtWebKit.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtWebKitWidgets.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtWebSockets.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtWidgets.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtXml.framework/Headers
+QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtXmlPatterns.framework/Headers
+#QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtAssistant.framework/Headers
+#QTINCDIR += -isystem $(QTFRAMEWORKDIR)/QtUiPlugin.framework/Headers
+
+QTINCDIR += -iframework $(QTFRAMEWORKDIR)
+
+# turn -isystem to -I and -framework to -F for QT MOC includes
+QTINCDIR_MOC = $(subst -iframework ,-F,$(subst -isystem ,-I,$(QTINCDIR)))
+
+QTLIBDIR  = -L$(QTFRAMEWORKDIR) -F$(QTFRAMEWORKDIR)
+
+QTFRAMEWORKS        = -framework QtXmlPatterns -framework QtXml -framework QtNetwork \
+                      -framework QtSql -framework QtGui -framework QtCore -framework QtSvg \
+                      -framework QtTest -framework QtWebKit -framework QtOpenGL \
+                      -framework QtConcurrent -framework QtDBus \
+                      -framework QtMultimedia -framework QtMultimediaWidgets \
+                      -framework QtNfc -framework QtPositioning -framework QtPrintSupport \
+                      -framework QtQml -framework QtQuick -framework QtQuickParticles \
+                      -framework QtQuickTest -framework QtQuickWidgets -framework QtScript \
+                      -framework QtScriptTools -framework QtSensors -framework QtSerialPort \
+                      -framework QtWebKitWidgets -framework QtWebSockets -framework QtWidgets \
+                      -framework QtTest -framework QtWebChannel -framework QtWebEngine
+
+QTCOMMONFRAMEWORKS  =  -framework DiskArbitration -framework IOKit
+QTLIB               = $(QTFRAMEWORKS) $(QTCOMMONFRAMEWORKS)
+
+QTOPENGL     = -framework OpenGL -framework AGL
+
+UIC          = $(QTDIR)/bin/uic
+RCC          = $(QTDIR)/bin/rcc
+RCCDEFINES   =
+MOC          = $(QTDIR)/bin/moc
+MOCDEFINES   += $(QTDARWINFLAGS)
+MOCDEFINES   += $(QTINCDIR_MOC) # Moc may not need QT includes
+MOCDEFINES   += -D__APPLE__ -D__GNUC__
+
+#---------------------------------------------------------------------------
+# Set up for Qwt
+#---------------------------------------------------------------------------
+QWTDIR      = $(ISIS3OPT)
+QWTFRAMES   = $(QWTDIR)/Library/Frameworks
+ifeq (,$(findstring $(QWTFRAMES)/qwt.framework,$(wildcard $(QWTFRAMES)/qwt.framework )))
+  QWTFRAMES  = $(ISIS3OPT)/lib
+endif
+
+QWTINCDIR = -I$(QWTFRAMES)/qwt.framework/Headers
+QWTLIBDIR = -L$(QWTFRAMES) -F$(QWTFRAMES)
+QWTLIB    = -framework qwt
+
+#---------------------------------------------------------------------------
+# Set up for Xerces
+#---------------------------------------------------------------------------
+XERCESINCDIR = -I$(ISIS3OPT)/include/xercesc
+XERCESLIBDIR = -L$(ISIS3OPT)/lib
+XERCESLIB    = -lxerces-c
+
+XALAN        = $(ISIS3OPT)/bin/Xalan
+
+#---------------------------------------------------------------------------
+# Set up for GeoTiff
+#---------------------------------------------------------------------------
+GEOTIFFINCDIR = -I$(ISIS3OPT)/include
+GEOTIFFLIBDIR = -L$(ISIS3OPT)/lib
+GEOTIFFLIB    = -lgeotiff
+
+#---------------------------------------------------------------------------
+# Set up for proj (Needed on Macs for geotiff)
+#---------------------------------------------------------------------------
+PROJINCDIR = -I$(ISIS3OPT)/include
+PROJLIBDIR = -L$(ISIS3OPT)/lib
+PROJLIB    = -lproj
+
+#---------------------------------------------------------------------------
+# Set up for Tiff
+#---------------------------------------------------------------------------
+TIFFINCDIR = -I$(ISIS3OPT)/include
+TIFFLIBDIR = -L$(ISIS3OPT)/lib
+TIFFLIB    = -ltiff
+
+#---------------------------------------------------------------------------
+# Set up for naif cspice libraries. Update for N0066 Release (KJB 2017-06-28)
+#---------------------------------------------------------------------------
+NAIFINCDIR = -I$(ISIS3LOCAL)/include/naif/
+NAIFLIBDIR = -L$(ISIS3LOCAL)/lib
+NAIFLIB    = -lcspice
+
+#---------------------------------------------------------------------------
+# Set up for TNT
+#---------------------------------------------------------------------------
+TNTINCDIR = -I$(ISIS3LOCAL)/include/tnt
+TNTLIBDIR =
+TNTLIB    =
+
+#---------------------------------------------------------------------------
+# Set up for JAMA
+#---------------------------------------------------------------------------
+JAMAINCDIR = -I$(ISIS3LOCAL)/include/jama
+JAMALIBDIR =
+JAMALIB    =
+
+#---------------------------------------------------------------------------
+# Set up for GEOS
+#---------------------------------------------------------------------------
+GEOSINCDIR = -isystem $(ISIS3OPT)/include/geos
+GEOSLIBDIR = -L$(ISIS3OPT)/lib
+GEOSLIB    = -lgeos -lgeos_c
+
+#---------------------------------------------------------------------------
+# Set up for the GNU Scientific Library (GSL).  Note that this setup
+# suppports include patterns such as <gsl/gsl_errno.h>.  With this
+# format, any other include spec that points to the general include
+# directory, such as GEOS, will suffice.  Therefore, an explicit
+# include directive is ommitted but provided as an empty reference
+# in cases where it may be located elsewhere.  This also goes for the
+# library reference.
+#---------------------------------------------------------------------------
+GSLINCDIR =  -I$(ISIS3OPT)/include/gsl
+GSLLIBDIR =  -L$(ISIS3OPT)/lib
+GSLLIB    = -lgsl -lgslcblas
+
+#---------------------------------------------------------------------------
+# Set up for GMM
+#---------------------------------------------------------------------------
+GMMINCDIR = -isystem $(ISIS3LOCAL)/include
+GMMLIBDIR =
+GMMLIB    =
+
+#---------------------------------------------------------------------------
+# Set up for SuperLU
+#---------------------------------------------------------------------------
+SUPERLUINCDIR = -I$(ISIS3LOCAL)/include/superlu
+SUPERLULIBDIR = -L$(ISIS3LOCAL)/lib
+ifeq ($(HOST_PROC), powerpc)
+#  Powerpc support
+  SUPERLULIB    = -lsuperlu_3.0 -framework vecLib
+else
+#  Assumes Intel Mac
+  SUPERLULIB    = -lsuperlu -lblas
+endif
+
+#---------------------------------------------------------------------------
+# Set up for Google Protocol Buffers (ProtoBuf)
+#---------------------------------------------------------------------------
+PROTOBUFINCDIR = -isystem $(ISIS3OPT)/include/google
+PROTOBUFLIBDIR = -L$(ISIS3OPT)/lib
+PROTOBUFLIB    = -lprotobuf
+PROTOC         = $(ISIS3OPT)/bin/protoc
+
+#---------------------------------------------------------------------------
+# Set up for kakadu
+# The Kakadu library is proprietary. The source files cannot be distributed
+# with ISIS3. If you need to rebuild ISIS3 on your system, then you will
+# need to modify the lines below that pertain to the location of the
+# header files and library on your system. The compilation flag, ENABLEJP2K,
+# should be set to true if you are building with the Kakadu library and
+# you want to use the JPEG2000 specific code in the ISIS3 system. Otherwise,
+# set the ENABLEJP2K flag to false.
+#
+#  Added abililty to automatically detect the existance of the Kakadu include
+#  directory.  One can set the environment variable JP2KFLAG with a 1 or 0
+#  depending upon need.  Developers can define appropriate enviroment variables
+#  for the complete JP2K environment.  Just redefine them based upon the usage
+#  below (i.e., be sure to add -I, -L and -l to the variables for KAKADUINCDIR,
+#  KAKADULIBDIR and KAKADULIB, respectively).
+#---------------------------------------------------------------------------
+KAKADUINCDIR := "-isystem$(ISIS3PROP)/include/kakadu/v7_9_1-01762L"
+KAKADULIBDIR := -L$(ISIS3PROP)/lib
+KAKADULIB    := -lkdu_a79R -lkdu_v79R
+#  Strip -I from Kakadu include directory macro and check for existance
+JP2KFLAG ?= $(shell if [ -d $(subst -isystem,,$(KAKADUINCDIR)) ]; then echo "1"; else echo "0"; fi;)
+ISISCPPFLAGS += -DENABLEJP2K=$(JP2KFLAG)
+
+#---------------------------------------------------------------------------
+# Set up for Boost Library
+#---------------------------------------------------------------------------
+BOOSTINCDIR = "-isystem $(ISIS3OPT)/include"
+BOOSTLIBDIR = -L$(ISIS3OPT)/lib
+BOOSTLIB    = -lboost_date_time-mt -lboost_filesystem-mt -lboost_graph-mt \
+              -lboost_math_c99f-mt -lboost_math_c99l-mt -lboost_math_c99-mt \
+              -lboost_math_tr1f-mt -lboost_math_tr1l-mt -lboost_math_tr1-mt \
+              -lboost_prg_exec_monitor-mt -lboost_program_options-mt \
+              -lboost_regex-mt -lboost_serialization-mt -lboost_signals-mt \
+              -lboost_system-mt -lboost_thread-mt -lboost_unit_test_framework-mt \
+              -lboost_wave-mt -lboost_wserialization-mt -lboost_timer-mt \
+              -lboost_chrono-mt
+
+#---------------------------------------------------------------------------
+# Set up for Cholmod Libraries
+#---------------------------------------------------------------------------
+CHOLMODINCDIR = -I$(ISIS3LOCAL)/include/SuiteSparse
+CHOLMODLIBDIR = -L$(ISIS3LOCAL)/lib
+CHOLMODLIB   = -lcholmod -lamd -lcolamd -lcamd -framework Accelerate
+
+#---------------------------------------------------------------------------
+# Set up for HDF5 libraries
+#---------------------------------------------------------------------------
+#HDF5INCDIR = -I$(ISIS3OPT)/include
+HDF5LIBDIR = -L$(ISIS3OPT)/lib
+HDF5LIB    = -lhdf5 -lhdf5_hl -lhdf5_cpp -lhdf5_hl_cpp
+
+#---------------------------------------------------------------------------
+# Set up for OpenCV libraries
+#
+# Add the following line to your app's Makefile (see the NN notes)
+# ALLLIBS += $(OPENCVLIBS)
+#---------------------------------------------------------------------------
+#OPENCVINCDIR =  -I$(ISIS3OPT)/include
+#OPENCVLIBDIR =  -L$(ISIS3OPT)/lib   # Redundant
+OPENCVLIBS   = -lopencv_calib3d -lopencv_core \
+	       -lopencv_features2d -lopencv_xfeatures2d \
+               -lopencv_flann -lopencv_highgui \
+	        -lopencv_imgproc -lopencv_imgcodecs \
+               -lopencv_ml -lopencv_objdetect \
+               -lopencv_photo -lopencv_stitching -lopencv_superres \
+               -lopencv_video -lopencv_videostab
+
+#---------------------------------------------------------------------------
+# Set up for Natural Neighbor Library (NN)
+#
+# * Note that NNINCDIR is not added to ALLINCDIRS in isismake.os
+# * and NNLIB is not added to ALLLIBDIRS in isismake.os
+#
+# For now, if you want to use this library, modify your app's Makefile.
+# Add an empty line after the last line in the Makefile, then add
+# ALLLIBS += $(NNLIB)
+# on a new line.
+#---------------------------------------------------------------------------
+NNINCDIR = -I$(ISIS3LOCAL)/include/nn
+#NNLIBDIR = -L$(ISIS3LOCAL)/lib
+NNLIB = -lnn
+
+#---------------------------------------------------------------------------
+# Setup for Bullet Physics library
+#---------------------------------------------------------------------------
+BULLETLIB     = -lBullet3OpenCL_clew     -lBullet3Common    -lBullet3Geometry   \
+                -lBulletSoftBody         -lBulletDynamics   -lBullet3Dynamics   \
+                -lBulletInverseDynamics  -lBulletCollision  -lBullet3Collision  \
+                -lLinearMath
+BULLETINCDIR  = -I$(ISIS3LOCAL)/include/bullet
+BULLETLIBDIR  = -L$(ISIS3LOCAL)/lib
+
+#---------------------------------------------------------------------------
+# Set up for PCL Python framework
+#---------------------------------------------------------------------------
+PCLPYDIR      = $(ISIS3OPT)
+PCLPYFRAMES   = $(PCLPYDIR)/Library/Frameworks
+ifeq (,$(findstring $(PCLPYFRAMES)/Python.framework,$(wildcard $(PCLPYFRAMES)/Python.framework )))
+  PCLPYFRAMES  = $(ISIS3OPT)/lib
+endif
+
+#---------------------------------------------------------------------------
+# Set up for PCL libraries
+#---------------------------------------------------------------------------
+PCLINCDIR = -I$(ISIS3LOCAL)/include/pcl-1.8
+PCLLIBDIR = -L$(ISIS3LOCAL)/lib
+PCLLIB    = -lpcl_common -lpcl_octree -lpcl_io                                \
+            -framework Python -lintl
+VTKLIB    = -lvtksys-7.0.1
+EMBREELIB = -lembree
+
+#---------------------------------------------------------------------------
+# Set up for Eigen (link to include files only, no library)
+#---------------------------------------------------------------------------
+EIGENINCDIR = -I$(ISIS3OPT)/include/eigen3
+
+#---------------------------------------------------------------------------
+# Final generic setup for includes at the top level
+#---------------------------------------------------------------------------
+DEFAULTINCDIR =  -I$(ISIS3LOCAL)/include
+
+#---------------------------------------------------------------------------
+#  Define the third party distribution libraries (patterns)
+#---------------------------------------------------------------------------
+
+# Qt Libraries
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtXmlPatterns.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtXml.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtNetwork.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtSql.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtGui.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtCore.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtSvg.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtTest.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWebEngine.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWebEngineCore.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWebKit.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtOpenGL.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtConcurrent.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtDBus.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtMultimedia.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtMultimediaWidgets.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtNfc.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtPositioning.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtPrintSupport.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtQml.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtQuick.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtQuickParticles.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtQuickTest.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtQuickWidgets.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtScript.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtScriptTools.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtSensors.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtSerialPort.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWebKitWidgets.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWebSockets.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWidgets.framework"
+THIRDPARTYLIBS    += "$(QTFRAMEWORKDIR)/QtWebChannel.framework"
+THIRDPARTYLIBS    += "$(QWTFRAMES)/qwt.framework"
+
+#  Qt dependencies
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libpcre16*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgthread-*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libpcre.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libharfbuzz*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgraphite2.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libleveldb*.dylib*"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libsnappy.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libwebp*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libdbus*.dylib"
+
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libcspice*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libsuperlu*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libprotobuf*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libiconv*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libxerces-c*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgeotiff*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtiff*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/liblzma*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgsl*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libz*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libssl*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libcrypto*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libpng*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtiff.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libjpeg.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libmng.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/liblcms2.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgeos*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libsqlite3.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/postgresql*/libpq.*dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/mysql56/mysql/libmysqlclient*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libiodbc*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3PROP)/lib/libkdu_a79R.dylib"
+THIRDPARTYLIBS    += "$(ISIS3PROP)/lib/libkdu_v79R.dylib"
+
+
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libamd*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libcamd*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libcholmod*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libsuitesparseconfig*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libccolamd*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libcolamd*.dylib"
+#THIRDPARTYLIBS    += "/System/Library/Frameworks/Accelerate.framework"
+
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libhdf5*.dylib"
+
+# Add all the OpenCV libraries and its dependancies
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libopencv_*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtbb*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libjasper*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libImath*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libIlmImf*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libIex*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libHalf*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libIlmThread*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libavcodec*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libavformat*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libavutil*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libswscale*.dylib"
+
+# Secondary requirements to all OpenCV dependancies (Yuck!)
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libSDL-1*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libnettle*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libhogweed*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgmp*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libxvidcore*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libx264*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libvorbisenc*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libvorbis*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libogg*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtheoraenc*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtheoradec*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libspeex*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libschroedinger-1*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libopus*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libopenjpeg*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libmp3lame*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libmodplug*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libfreetype*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libbluray*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libass*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libgnutls*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libbz2*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libXrandr*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libXext*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libXrender*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libX11*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libxcb*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libXau*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libXdmcp*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/liborc-0*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libxml2*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libfribidi*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libfontconfig*.dylib"
+#THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libenca*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libexpat*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libintl*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libglib-*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libp11-kit*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libffi*.dylib"
+
+# OpenCV3 dependencies
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libavresample*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libxcb-shm*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libsoxr*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libopenjp2*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libOpenNI*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libswresample*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libidn*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtasn1*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libusb*.dylib"
+
+# libxerces-c depends on these libraries
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libicui18n*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libicuuc*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libicudata*.dylib"
+
+# libgeotiff depends on these libraries
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libproj*.dylib"
+
+# Bullet Libraries
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libLinearMath*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBullet2FileLoader*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBullet3Collision*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBullet3Common*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBullet3Dynamics*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBullet3Geometry*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBullet3OpenCL_clew*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBulletCollision*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBulletDynamics*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBulletInverseDynamics*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libBulletSoftBody*.dylib"
+
+# Add the Point Cloud Libraries and PCL dependencies
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libpcl_*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libflann*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libqhull*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libvtk*.dylib"
+THIRDPARTYLIBS    += "$(PCLPYFRAMES)/Python.framework"
+
+# Add the Embree library
+THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libembree*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libtbb*.dylib"
+
+# Add the Boost libraries
+#THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libboost_system-mt*.dylib"
+THIRDPARTYLIBS    += "$(ISIS3OPT)/lib/libboost*.dylib"
+
+#  Plugins
+THIRDPARTYPLUGINS +=  "$(QTDIR)/plugins/"
diff --git a/isis/make/config.linux-x86_32 b/isis/make/config.linux-x86_32
index 4546d52eff783cc76614d8d21c7e98292d22d88b..9f6edeb255ac067eb738af73c36a2d3b037235ca 100644
--- a/isis/make/config.linux-x86_32
+++ b/isis/make/config.linux-x86_32
@@ -77,6 +77,7 @@ endif
 #---------------------------------------------------------------------------
 QTINCDIR = -I$(ISIS3LOCAL)/include/qt/qt4.6.2
 QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt4.6.2/Qt
+QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt4.6.2/QtChrats
 QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt4.6.2/QtCore
 QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt4.6.2/QtAssistant
 QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt4.6.2/QtGui
diff --git a/isis/make/config.linux-x86_64 b/isis/make/config.linux-x86_64
index 57e96f2cb275d1f6c855d76415e2dca6cf0c532d..f9d039a5236c59684e61524ccbcb988b429b251e 100644
--- a/isis/make/config.linux-x86_64
+++ b/isis/make/config.linux-x86_64
@@ -115,7 +115,6 @@ QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt5.7.1/QtXml
 QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt5.7.1/QtXmlPatterns
 QTLIBDIR = -L$(ISIS3LOCAL)/lib
 QTLIB    = -lQt5Core -lQt5Concurrent -lQt5XmlPatterns -lQt5Xml -lQt5Network -lQt5Sql -lQt5Gui -lQt5PrintSupport -lQt5Positioning -lQt5Qml -lQt5Quick -lQt5Sensors -lQt5Svg -lQt5Test -lQt5OpenGL -lQt5Widgets -lQt5Multimedia -lQt5MultimediaWidgets -lQt5WebChannel -lQt5WebEngine -lQt5WebEngineWidgets -lQt5DBus
-
 UIC      = $(ISIS3LOCAL)/bin/uic
 MOC      = $(ISIS3LOCAL)/bin/moc
 RCC      = $(ISIS3LOCAL)/bin/rcc
@@ -300,14 +299,14 @@ FLANNINCDIR = -I$(ISIS3LOCAL)/include/flann
 QHULLINCDIR = -I$(ISIS3LOCAL)/include/qhull
 
 #---------------------------------------------------------------------------
-# Set up for Embree libraries 
+# Set up for Embree libraries
 #---------------------------------------------------------------------------
 EMBREEINCDIR = -I$(ISIS3LOCAL)/include/embree2
 EMBREELIBDIR = -L$(ISIS3LOCAL)/lib
 EMBREELIB    = -lembree
 
 #---------------------------------------------------------------------------
-# Set up for OpenCV libraries 
+# Set up for OpenCV libraries
 #
 # Add the following line to your app's Makefile (see the NN notes)
 # ALLLIBS += $(OPENCVLIBS)
@@ -344,11 +343,11 @@ NNLIB = -lnn
 #BULLETLIB     = -lBullet3Collision  -lBullet3Common          \
 #                -lBullet3Dynamics   -lBullet3Geometry  -lBullet3OpenCL_clew     \
 #                -lBulletCollision   -lBulletDynamics   -lBulletInverseDynamics  \
-#                -lBulletSoftBody    -lLinearMath 
+#                -lBulletSoftBody    -lLinearMath
 BULLETLIB     = -lBullet3OpenCL_clew     -lBullet3Common    -lBullet3Geometry   \
                 -lBulletSoftBody         -lBulletDynamics   -lBullet3Dynamics   \
                 -lBulletInverseDynamics  -lBulletCollision  -lBullet3Collision  \
-                -lLinearMath 
+                -lLinearMath
 BULLETINCDIR  = -I$(ISIS3LOCAL)/include/bullet
 BULLETLIBDIR  = -L$(ISIS3LOCAL)/lib
 
@@ -526,5 +525,8 @@ THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libtbb*.so*"
 # Add the Boost libraries
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libboost*.so*"
 
+# Add srtp deps (Qt5WebEngine deps) -- see #5365
+THIRDPARTYLIBS    += "$(ISIS3SYSLIB)/libsrtp*.so*"
+
 #  Plugins
 THIRDPARTYPLUGINS += "$(ISIS3LOCAL)/plugins/"
diff --git a/isis/make/config.linux-x86_64_Debian8 b/isis/make/config.linux-x86_64_Debian8
index ba893d58d02c7a8505f4c28e290e9685178dc912..376ef9c0cdcdcd7b74186c6bf456f6b51490e9d9 100644
--- a/isis/make/config.linux-x86_64_Debian8
+++ b/isis/make/config.linux-x86_64_Debian8
@@ -115,7 +115,6 @@ QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt5.7.1/QtXml
 QTINCDIR += -I$(ISIS3LOCAL)/include/qt/qt5.7.1/QtXmlPatterns
 QTLIBDIR = -L$(ISIS3LOCAL)/lib
 QTLIB    = -lQt5Core -lQt5Concurrent -lQt5XmlPatterns -lQt5Xml -lQt5Network -lQt5Sql -lQt5Gui -lQt5PrintSupport -lQt5Positioning -lQt5Qml -lQt5Quick -lQt5Sensors -lQt5Svg -lQt5Test -lQt5OpenGL -lQt5Widgets -lQt5Multimedia -lQt5MultimediaWidgets -lQt5WebChannel -lQt5WebEngine -lQt5WebEngineWidgets -lQt5DBus
-
 UIC      = $(ISIS3LOCAL)/bin/uic
 MOC      = $(ISIS3LOCAL)/bin/moc
 RCC      = $(ISIS3LOCAL)/bin/rcc
@@ -298,7 +297,7 @@ FLANNINCDIR = -I$(ISIS3LOCAL)/include/flann
 QHULLINCDIR = -I$(ISIS3LOCAL)/include/qhull
 
 #---------------------------------------------------------------------------
-# Set up for Embree libraries 
+# Set up for Embree libraries
 #---------------------------------------------------------------------------
 EMBREEINCDIR = -I$(ISIS3LOCAL)/include/embree2
 EMBREELIBDIR = -L$(ISIS3LOCAL)/lib
@@ -346,7 +345,7 @@ NNLIB = -lnn
 BULLETLIB     = -lBullet3OpenCL_clew     -lBullet3Common    -lBullet3Geometry   \
                 -lBulletSoftBody         -lBulletDynamics   -lBullet3Dynamics   \
                 -lBulletInverseDynamics  -lBulletCollision  -lBullet3Collision  \
-                -lLinearMath 
+                -lLinearMath
 BULLETINCDIR  = -I$(ISIS3LOCAL)/include/bullet
 
 #---------------------------------------------------------------------------
@@ -359,6 +358,7 @@ DEFAULTINCDIR =  -I$(ISIS3LOCAL)/include
 #---------------------------------------------------------------------------
 
 # Qt Libraries
+
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5.7.*[^g]"
diff --git a/isis/make/config.linux-x86_64_Fedora21 b/isis/make/config.linux-x86_64_Fedora21
index 558089c7f155485a6b3d993916735fd6e9131f96..b2bbbcf5091bd424abf577facead3b517465f977 100644
--- a/isis/make/config.linux-x86_64_Fedora21
+++ b/isis/make/config.linux-x86_64_Fedora21
@@ -301,14 +301,14 @@ FLANNINCDIR = -I$(ISIS3LOCAL)/include/flann
 #QHULLINCDIR = -I$(ISIS3LOCAL)/include/qhull
 
 #---------------------------------------------------------------------------
-# Set up for Embree libraries 
+# Set up for Embree libraries
 #---------------------------------------------------------------------------
 EMBREEINCDIR = -I$(ISIS3LOCAL)/include/embree2
 EMBREELIBDIR = -L$(ISIS3LOCAL)/lib
 EMBREELIB    = -lembree
 
 #---------------------------------------------------------------------------
-# Set up for OpenCV libraries 
+# Set up for OpenCV libraries
 #
 # Add the following line to your app's Makefile (see the NN notes)
 # ALLLIBS += $(OPENCVLIBS)
@@ -345,11 +345,11 @@ NNLIB = -lnn
 BULLETLIB     = -lBullet3Collision  -lBullet3Common          \
                 -lBullet3Dynamics   -lBullet3Geometry  -lBullet3OpenCL_clew     \
                 -lBulletCollision   -lBulletDynamics   -lBulletInverseDynamics  \
-                -lBulletSoftBody    -lLinearMath 
+                -lBulletSoftBody    -lLinearMath
 #BULLETLIB     = -lBullet3OpenCL_clew     -lBullet3Common    -lBullet3Geometry   \
 #                -lBulletSoftBody         -lBulletDynamics   -lBullet3Dynamics   \
 #                -lBulletInverseDynamics  -lBulletCollision  -lBullet3Collision  \
-#                -lLinearMath 
+#                -lLinearMath
 BULLETINCDIR  = -I$(ISIS3LOCAL)/include/bullet
 BULLETLIBDIR  = -L$(ISIS3LOCAL)/lib
 
@@ -368,6 +368,7 @@ DEFAULTINCDIR =  -I$(ISIS3LOCAL)/include
 #---------------------------------------------------------------------------
 
 # Qt Libraries
+
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5.7.*[^g]"
diff --git a/isis/make/config.linux-x86_64_Fedora25 b/isis/make/config.linux-x86_64_Fedora25
index fc5d1f12b1490859ff9e728dcf198a710b46a7f0..54e80fe6c089d46b35d4481d991342bfc388116d 100644
--- a/isis/make/config.linux-x86_64_Fedora25
+++ b/isis/make/config.linux-x86_64_Fedora25
@@ -301,14 +301,14 @@ FLANNINCDIR = -I$(ISIS3LOCAL)/include/flann
 #QHULLINCDIR = -I$(ISIS3LOCAL)/include/qhull
 
 #---------------------------------------------------------------------------
-# Set up for Embree libraries 
+# Set up for Embree libraries
 #---------------------------------------------------------------------------
 EMBREEINCDIR = -I$(ISIS3LOCAL)/include/embree2
 EMBREELIBDIR = -L$(ISIS3LOCAL)/lib
 EMBREELIB    = -lembree
 
 #---------------------------------------------------------------------------
-# Set up for OpenCV libraries 
+# Set up for OpenCV libraries
 #
 # Add the following line to your app's Makefile (see the NN notes)
 # ALLLIBS += $(OPENCVLIBS)
@@ -345,11 +345,11 @@ NNLIB = -lnn
 BULLETLIB     = -lBullet3Collision  -lBullet3Common          \
                 -lBullet3Dynamics   -lBullet3Geometry  -lBullet3OpenCL_clew     \
                 -lBulletCollision   -lBulletDynamics   -lBulletInverseDynamics  \
-                -lBulletSoftBody    -lLinearMath 
+                -lBulletSoftBody    -lLinearMath
 #BULLETLIB     = -lBullet3OpenCL_clew     -lBullet3Common    -lBullet3Geometry   \
 #                -lBulletSoftBody         -lBulletDynamics   -lBullet3Dynamics   \
 #                -lBulletInverseDynamics  -lBulletCollision  -lBullet3Collision  \
-#                -lLinearMath 
+#                -lLinearMath
 BULLETINCDIR  = -I$(ISIS3LOCAL)/include/bullet
 BULLETLIBDIR  = -L$(ISIS3LOCAL)/lib
 
@@ -368,6 +368,7 @@ DEFAULTINCDIR =  -I$(ISIS3LOCAL)/include
 #---------------------------------------------------------------------------
 
 # Qt Libraries
+
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5.7.*[^g]"
@@ -479,7 +480,6 @@ THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libsuperlu*.so"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libsuitesparseconfig.so"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/liblapack.so"
 THIRDPARTYLIBS    += "$(ISIS3SYSLIB)/libblas*.so*"
-THIRDPARTYLIBS    += "$(ISIS3ALTSYSLIB)/libgfortran.so*"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libxerces-c*.so*"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libgeotiff*.so*"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libtiff*.so*"
@@ -533,5 +533,9 @@ THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libtbb*.so*"
 # Add the Boost libraries
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libboost*.so*"
 
+# Add and patch the gfortran's rpath to $ORIGIN (so it can find its quadmath dependency) -- #4610
+PATCHLIBS         += "$(ISIS3ALTSYSLIB)/libgfortran.so*"
+THIRDPARTYLIBS    += "$(ISIS3SYSLIB)/libquadmath*.so*"
+
 #  Plugins
 THIRDPARTYPLUGINS += "$(ISIS3LOCAL)/plugins/"
diff --git a/isis/make/config.linux-x86_64_Ubuntu14_04 b/isis/make/config.linux-x86_64_Ubuntu14_04
index c2a0d1e46d1f9d976977c0a6e0b5f061f3ed0c64..5cd34f75518182576ffdc29d81e9943d564d6b8f 100644
--- a/isis/make/config.linux-x86_64_Ubuntu14_04
+++ b/isis/make/config.linux-x86_64_Ubuntu14_04
@@ -298,7 +298,7 @@ FLANNINCDIR = -I$(ISIS3LOCAL)/include/flann
 QHULLINCDIR = -I$(ISIS3LOCAL)/include/qhull
 
 #---------------------------------------------------------------------------
-# Set up for Embree libraries 
+# Set up for Embree libraries
 #---------------------------------------------------------------------------
 EMBREEINCDIR = -I$(ISIS3LOCAL)/include/embree2
 EMBREELIBDIR = -L$(ISIS3LOCAL)/lib
@@ -355,6 +355,7 @@ DEFAULTINCDIR =  -I$(ISIS3LOCAL)/include
 #---------------------------------------------------------------------------
 
 # Qt Libraries
+
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5"
 THIRDPARTYLIBS    += "$(ISIS3LOCAL)/lib/libQt5Concurrent.so.5.7.*[^g]"
diff --git a/isis/make/isismake.tsts b/isis/make/isismake.tsts
index 76155b0af953014618cbb2f5ac3cfa93733f0fb9..fd840c31c8ae1352fee3bae23715309fa0f120c4 100644
--- a/isis/make/isismake.tsts
+++ b/isis/make/isismake.tsts
@@ -83,7 +83,7 @@ endif
 # Make sure all apps use the correct preferences file when testing, unless
 # they have set NOPREFERENCES. This is valid for non-Isis apps.
 ifeq ($(origin NOPREFERENCES), undefined)
-  APPNAME += -preference=$(ISISROOT)/src/base/objs/Preference/TestPreferences
+  APPNAME += -preference=$(ISISROOT)/TestPreferences
 endif
 
 # set the output variable to the output directory
@@ -105,7 +105,7 @@ FILECOUNTMISMATCH =echo Failed ... Number of files in truth and output folder do
 NOTALLMATCH =echo Failed ... Not all files in truth and output folders match
 
 # Set test arguments for use in category tests
-TSTARGS = -preference=$(ISISROOT)/src/base/objs/Preference/TestPreferences
+TSTARGS = -preference=$(ISISROOT)/TestPreferences
 
 DIRPATTERN=2774
 FILEPATTERN=2664
@@ -113,7 +113,7 @@ DIRLISTPATTERN="drwxrwsr--"
 
 #----------------------------------------------------------------------------
 # Target = help
-# Dependencies = 
+# Dependencies =
 #
 # Displays a list of targets and their descriptions.
 #----------------------------------------------------------------------------
@@ -190,19 +190,19 @@ test: FORCE clean
 	if [ "$(findstring $(TESTNOCLEAN), $(MODE))" != "$(TESTNOCLEAN)" ];        \
 	then                                                                       \
 	  $(MAKE) ccsafeclean;                                                     \
-	fi;                                                                        
-                                                                               
+	fi;
+
 #-------------------------------------------------------------------------     ---
-# Target = compare                                                             
-# Dependencies = All files in the truth and output directories                 
-#                                                                              
-# Iterates over the list of files in the truth directory and                   
-# compares the files against the files in the output directory.                
-# If successful (indicated by presence of casesucceeded.txt),                  
-# prints success message. If not, prints all errors that were                  
-# encountered (found in errors.txt).                                           
+# Target = compare
+# Dependencies = All files in the truth and output directories
+#
+# Iterates over the list of files in the truth directory and
+# compares the files against the files in the output directory.
+# If successful (indicated by presence of casesucceeded.txt),
+# prints success message. If not, prints all errors that were
+# encountered (found in errors.txt).
 #-------------------------------------------------------------------------     ---
-compare: FORCE                                                                 
+compare: FORCE
 	if [ -d "$(OUTPUT)" ]; then                                                \
 	  if [ -d "$(TRUTH)" ]; then                                               \
 	    TRUTHDIR=`$(LS) $(TRUTH)`;                                             \
@@ -249,7 +249,7 @@ compare: FORCE
 # Target = comparefiles
 # Dependencies = All files in the truth and output directories
 #
-# Iterates over the list of files in the truth directory and 
+# Iterates over the list of files in the truth directory and
 # compares the files against the files in the output
 # directory.  If there are any files that are not recognized
 # then an unknown file message is printed. If and only if all
@@ -260,7 +260,7 @@ compare: FORCE
 #
 # Some parts of this target are not very straightforward. For comparing cubes,
 # users may specify make variables within their tests to indicate tolerance or
-# to ignore special pixels when running cubediff 
+# to ignore special pixels when running cubediff
 # (i.e. test_cube.cub.TOLERANCE=0.0000001). The problem here is that within
 # this target, we have the current filename that is being compared stored in a
 # bash variable. We know that the *make* tolerance variable, if it exists, will
@@ -279,7 +279,7 @@ compare: FORCE
 #
 # The workaround is to use make's special variable that is a space-separated
 # list of currently defined make variable *names* (NOT values). This variable
-# is .VARIABLES. The names of each of the currently defined make .TOLERANCE 
+# is .VARIABLES. The names of each of the currently defined make .TOLERANCE
 # variables are extracted from this list, and their values are looked up as
 # well. A new bash variable is used to hold these name/values pairs for each of
 # the tolerances (the name and value is separated by a semicolon). The list of
@@ -292,11 +292,11 @@ compare: FORCE
 # This is only a workaround. The real solution would be to completely get rid
 # of make variable tolerances from all tests and force the use of .DIFF files
 # (like pvldiff uses). However, around 138 tests are currently using make
-# variables to do this, so it would be a considerable undertaking. 
-#  
-#  
+# variables to do this, so it would be a considerable undertaking.
+#
+#
 # 2012-06-26 - Jeannie Backer - Sent stderr of pvldiff and cnetdiff to error
-#                  files instead of /dev/null.  If errors exist, test fails and  
+#                  files instead of /dev/null.  If errors exist, test fails and
 #                  error messages are reported to stdout.  This was already
 #                  being handled for cubediff.
 #----------------------------------------------------------------------------
@@ -502,7 +502,7 @@ comparefiles: FORCE
 
 #----------------------------------------------------------------------------
 # Target = truthdata
-# Dependencies = 
+# Dependencies =
 #
 # Copies the contents of the output directory to the truth
 # directory.  If the truth directory doesn't exist it is created.
@@ -514,10 +514,10 @@ truthdata: FORCE
 
 #----------------------------------------------------------------------------
 # Target = ostruthdata
-# Dependencies = 
+# Dependencies =
 #
 # Copies the contents of the output directory to the truth
-# directory.  If the truth directory corresponding to the 
+# directory.  If the truth directory corresponding to the
 # OS the test is being run on doesn't exist it is created.
 #----------------------------------------------------------------------------
 ostruthdata: FORCE
@@ -536,12 +536,12 @@ ostruthdata: FORCE
 # Target = output
 # Dependencies = FORCE commands modifyFiles
 #
-# Masks target command with a better name to just run the 
-# commands.  If the output directory doesn't exist it is 
+# Masks target command with a better name to just run the
+# commands.  If the output directory doesn't exist it is
 # created.  The force target is needed because the directory
 # output causes make to check the directory output if there
 # is no dependency.  Runs the commands and then
-# modifies the output files based on the variables set 
+# modifies the output files based on the variables set
 # in the test.
 #----------------------------------------------------------------------------
 output: FORCE clean
@@ -550,14 +550,14 @@ output: FORCE clean
 	$(MAKE) modifyFiles;
 
 #----------------------------------------------------------------------------
-# This target is needed to make the output target work. When used as a 
+# This target is needed to make the output target work. When used as a
 # dependency to a target, it forces make to always execute that target.
 #----------------------------------------------------------------------------
 FORCE:
 
 #----------------------------------------------------------------------------
 # Target = clean
-# Dependencies = 
+# Dependencies =
 #
 # Deletes the output directory and all temporary files.
 #----------------------------------------------------------------------------
@@ -567,7 +567,7 @@ clean: FORCE
 
 #----------------------------------------------------------------------------
 # Target = ccsafeclean
-# Dependencies = 
+# Dependencies =
 #
 # Deletes the output directory and all temporary files except the code
 #   coverage files.
@@ -580,11 +580,11 @@ ccsafeclean: FORCE
 # Target = modifyFiles
 # Dependencies = modText modBin
 #
-# Performs the modifications to the files in the output 
-# directory.  Iterates over the output files and modifies 
+# Performs the modifications to the files in the output
+# directory.  Iterates over the output files and modifies
 # the file based on variables such as .SKIPLINES
 # Utilizes the modText and modBin targets to carryout
-# the modifactions. 
+# the modifactions.
 #----------------------------------------------------------------------------
 modifyFiles: FORCE
 	files="$(notdir $(wildcard $(OUTPUT)/*.txt) )"; \
@@ -602,7 +602,7 @@ modifyFiles: FORCE
 
 #----------------------------------------------------------------------------
 # Target = modText
-# Dependencies = 
+# Dependencies =
 #
 # Handles the modifactions of text files in the output
 # directory.  Looks at variables .SKIPLINES and .IGNORELINES.
@@ -637,12 +637,12 @@ modText: FORCE
 
 #----------------------------------------------------------------------------
 # Target = modBin
-# Dependencies = 
+# Dependencies =
 #
 # Handles the modifactions of bin files in the output
 # directory.  Looks at variables .BINSKIP and .BINCOUNT.
 # The variable FILE must be set to the name of the file in
-# the output directory to be modified. 
+# the output directory to be modified.
 #----------------------------------------------------------------------------
 modBin: FORCE
 	if [ "$(FILE)" != "" ]; \
@@ -665,7 +665,7 @@ modBin: FORCE
 # Target = checkin
 # Dependencies = copyInTruth
 #
-# Copies data from the test into the test data area. 
+# Copies data from the test into the test data area.
 # ISIS3TESTDATA needs to be set to know where to copy
 # data for this test to.  Data in the input and all of the truth
 # directories are copied to the test data area.
@@ -720,12 +720,12 @@ checkin: FORCE
 
 #----------------------------------------------------------------------------
 # Target = copyInTruth
-# Dependencies = 
+# Dependencies =
 #
-# Copies all of the truth directories to the value in the 
+# Copies all of the truth directories to the value in the
 # variable DEST.  Iterates over all of the directories in the
 # test that have truth in it.  Creates the directory in DEST
-# and then copies all of the files in the truth directory to 
+# and then copies all of the files in the truth directory to
 # directory in DEST.
 #----------------------------------------------------------------------------
 copyInTruth: FORCE
@@ -744,11 +744,11 @@ copyInTruth: FORCE
 # Target = checkout
 # Dependencies = dirs copyOutTruth
 #
-# Copies data from the test data area into the test. 
+# Copies data from the test data area into the test.
 # ISIS3TESTDATA needs to be set to know where to get the
 # test data from.  Uses the TESTDATA_PATH to get the data
-# for this test.  Copies the files from the input directory in the 
-# TESTDATA_PATH to the input directory of the test.  Then 
+# for this test.  Copies the files from the input directory in the
+# TESTDATA_PATH to the input directory of the test.  Then
 # copies all of the truth directories and their contents to the test.
 # If the input or truth directories exist in the local test a warning
 # is printed and no copying takes place.
@@ -773,7 +773,7 @@ checkout: FORCE
 	    if [ "$$inputdir" != "" ]; \
 	    then \
 	      $(MAKE) dirs; \
-	      $(RSYNC) -rt --delete $(TESTDATA_PATH)/input/ input; \
+	      $(RSYNC) -rt --copy-links --delete $(TESTDATA_PATH)/input/ input; \
 	    fi; \
 	  fi; \
 	  $(MAKE) copyOutTruth DEST=$(TESTDATA_PATH); \
@@ -781,10 +781,10 @@ checkout: FORCE
 
 #----------------------------------------------------------------------------
 # Target = copyOutTruth
-# Dependencies = 
+# Dependencies =
 #
-# Copies all of the truth directories from the value in the 
-# variable DEST.  Iterates over all of the directories in 
+# Copies all of the truth directories from the value in the
+# variable DEST.  Iterates over all of the directories in
 # DEST that have truth in it.  Creates the directory in test
 # and then copies all of the files from the DEST directory
 # to the one in the test.
@@ -795,7 +795,7 @@ copyOutTruth: FORCE
 	  files=`$(LS) $(DEST)/$$i`; \
 	  if [ "$$files" != "" ]; \
 	  then \
-	    $(RSYNC) -rt --delete $(DEST)/$$i/ $$i; \
+	    $(RSYNC) -rt --copy-links --delete $(DEST)/$$i/ $$i; \
 	  fi; \
 	done;
 
@@ -850,7 +850,7 @@ release: FORCE clean
 
 #----------------------------------------------------------------------------
 # Target = dirs
-# Dependencies =  
+# Dependencies =
 #
 # Creates the necessary directories for the test.
 #----------------------------------------------------------------------------
@@ -859,14 +859,14 @@ dirs: FORCE
 
 #----------------------------------------------------------------------------
 # Target=changePerms
-# Dependencies =  
+# Dependencies =
 #
 # Changes the directory permissions starting at DEST_PATH
 # and preceding up the directory path till a directory is found
-# that matches the DIRLISTPATTERN variable.  Both the 
+# that matches the DIRLISTPATTERN variable.  Both the
 # LOOKUP and DEST_PATH variables need to be set in order
-# to work properly.  LOOKUP is the first directory to start checking 
-# folder permissions on, and DEST_PATH is the full directory 
+# to work properly.  LOOKUP is the first directory to start checking
+# folder permissions on, and DEST_PATH is the full directory
 # path above the LOOKUP directory.
 #----------------------------------------------------------------------------
 changePerms: FORCE
diff --git a/isis/scripts/IsisInlineDocumentBuild_mod.xsl b/isis/scripts/IsisInlineDocumentBuild_mod.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..bcf90f1f5a9588f2551e47b6dc70d84c6d2d9479
--- /dev/null
+++ b/isis/scripts/IsisInlineDocumentBuild_mod.xsl
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+<!-- 
+
+This stylesheet will be used to generate a Makefile for turning documentation inlined in the Documentation XML file
+into an HTML page
+
+Author
+Deborah Lee Soltesz
+12/04/2002
+
+-->
+
+<xsl:param name="dirParam"/>
+
+<xsl:output indent="no" omit-xml-declaration="yes">
+  <xsl:template match="/">
+     <xsl:apply-templates select="documentation" />
+  </xsl:template>
+</xsl:output>
+
+<!-- the following template contains very little whitespace to
+     avoid adding spaces at the beginnings of the Makefile macro 
+     lines:  trying to make this template more "readable" will
+     likely break the system -->
+
+<xsl:template name="document" match="documentation">
+
+# Set up Xalan's command-line option names.
+XALAN := XALAN_BIN_LOCATION
+XALAN_VALIDATE_OPTION := -v
+XALAN_OUTFILE_OPTION := -o
+XALAN_PARAM_OPTION := -p
+XALAN_INFILE_OPTION :=
+XALAN_XSL_OPTION :=
+
+docs:
+<xsl:text>	</xsl:text>echo "          Constructing [<xsl:value-of select="$dirParam"/>]"
+<xsl:for-each select="files/file"><xsl:if test="body"><xsl:choose>
+<xsl:when test="@primary = 'true'"><xsl:text>	</xsl:text>$(XALAN)  $(XALAN_PARAM_OPTION) menuPath "'../../'" $(XALAN_PARAM_OPTION) filenameParam "'<xsl:value-of select="normalize-space(source/filename)"/>'" $(XALAN_OUTFILE_OPTION) <xsl:value-of select="normalize-space(source/filename)"/><xsl:text> $(XALAN_INFILE_OPTION) </xsl:text><xsl:value-of select="$dirParam"/>.xml $(XALAN_XSL_OPTION) ../../build/IsisPrimaryPageBuild.xsl</xsl:when>
+<xsl:otherwise><xsl:text>	</xsl:text>$(XALAN) $(XALAN_PARAM_OPTION) menuPath "'../../'" $(XALAN_PARAM_OPTION) filenameParam "'<xsl:value-of select="normalize-space(source/filename)"/>'" $(XALAN_OUTFILE_OPTION) <xsl:value-of select="normalize-space(source/filename)"/><xsl:text> $(XALAN_INFILE_OPTION) </xsl:text><xsl:value-of select="$dirParam"/>.xml  $(XALAN_XSL_OPTION) ../../build/IsisSubPageBuild.xsl</xsl:otherwise>
+</xsl:choose>
+<xsl:text>&#xa;</xsl:text>
+</xsl:if>
+</xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/isis/scripts/fetchRequiredData.py b/isis/scripts/fetchRequiredData.py
new file mode 100644
index 0000000000000000000000000000000000000000..38e6c608b0faa464842888442fcb643fe4b389e2
--- /dev/null
+++ b/isis/scripts/fetchRequiredData.py
@@ -0,0 +1,645 @@
+
+import sys, os
+
+def main():
+    
+    # Hardcoded list of downloadable files needed to run tests
+    fileList = '''
+cassini/testData/CM_1540484927_1_001.ir.cub
+mer/testData/mer.img
+mer/testData/mer.lab
+galileo/testData/1213r.img
+messenger/kernels/ck/msgr20111020.bc
+cassini/calibration/vims/RC19/solar-spectrum/
+base/templates/labels/
+galileo/calibration/conversionFactors_v001.sav
+galileo/calibration/conversionFactors_v002.sav
+galileo/calibration/weightTables_v001.sav
+messenger/kernels/ck/msgr20111019.bc
+lro/kernels/ck/lrolc_2009181_2009213_v02.bc
+clementine1/calibration/nir/nirmodeflats/strip015_set4_061_065_33_a_n.cub
+clementine1/calibration/uvvis/lub_comp_flat_long.cub
+clementine1/calibration/uvvis/uvvisTemperature.tbl
+newhorizons/calibration/target-wavelengths-expanded.csv
+odyssey/testData/I50695002EDR.proj.reduced.cub
+galileo/calibration/shutter/calibration.so02F.cub
+messenger/testData/EW0089570936I.IMG
+lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub
+mer/calibration/REFPIXVAR_105.cub
+mer/calibration/REFPIXVAR_110.cub
+lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub
+messenger/kernels/ck/msgr20111018.bc
+lro/kernels/ck/lrolc_2009181_2009213_v02.bc
+base/dems/ulcn2005_lpo_0004.cub
+clementine1/calibration/nir/clemnircal.def
+calibration/uvvis/uvvisTemperature.tbl
+odyssey/testData/I56969027EDR.proj.reduced.cub
+galileo/calibration/gain/redf.cal04.cub
+galileo/calibration/gain/clrf.cal04.cub
+mro/testData/ctx_pmoi_i_00003.bottom.cub
+messenger/testData/EW0031592574E.IMG
+lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub
+cassini/calibration/darkcurrent/
+apollo15/templates/apolloPanFiducialFinder.pvl
+base/dems/ulcn2005_lpo_0004.cub
+clementine1/translations/
+lro/translations/
+viking1/translations/
+mgs/translations/
+mariner10/translations/
+mariner10/calibration/mariner_10_CLE_A_coef.cub
+mariner10/calibration/mariner_10_ORA_A_coef.cub
+mariner10/calibration/mariner_10_CLE_B_coef.cub
+mariner10/calibration/mariner_10_ORA_B_coef.cub
+mariner10/calibration/mariner_10_UV_B_coef.cub
+clementine1/calibration/hires/lhd_flat.cub
+clementine1/calibration/nir/nir.addflats.dat
+clementine1/calibration/uvvis/lua_comp_flat_long.cub
+clementine1/calibration/uvvis/lue_uncomp_flat_long.cub
+messenger/translations/
+messenger/templates/
+lo/templates/
+chandrayaan1/bandBin/
+chandrayaan1/translations/
+chandrayaan1/kernels/
+mer/translations/
+mro/templates/
+mro/calibration/
+mgs/calibration/
+mer/calibration/
+newhorizons/translations/
+rolo/translations/
+mex/translations/
+kaguya/translations/
+hayabusa/translations/
+galileo/translations/
+dawn/translations/
+rosetta/translations/
+clementine1/kernels/
+viking1/kernels/
+viking2/kernels/
+apollo15/kernels/
+cassini/calibration/darkcurrent/
+hayabusa/kernels/
+mariner10/kernels/
+odyssey/calibration/
+odyssey/testData/I51718010EDR.crop.proj.reduced.cub
+cassini/testData/vims2.cub
+galileo/calibration/gll_gain.sav
+lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub
+base/dems/ulcn2005_lpo_0004.cub
+lro/kernels/ck/lrolc_2009181_2009213_v02.bc
+messenger/kernels/ck/msgr20080110.bc
+mro/kernels/spk/mro_psp7.bsp
+messenger/kernels/ck/msgr20111017.bc
+mer/translations/merInstrument.trn
+mer/translations/merInstrument.trn
+odyssey/testData/I25685003EDR.crop.proj.reduced.cub
+odyssey/testData/I25685003EDR.crop.proj.reduced.cub
+odyssey/testData/I25685003EDR.crop.proj.reduced.cub
+cassini/testData/vims2.cub+100
+base/translations/
+mro/testData/ctx_pmoi_i_00003.bottom.cub
+mrg_Global_512ppd_radius-demprep.cub
+cassini/translations/
+chandrayaan1/translations/m3Instrument.trn
+Clementine1/calibration/hires/lhd_flat.cub
+clementine1/calibration/nir/nirorbitflats/nir_orbflat_284_a.cub
+clementine1/calibration/uvvis/dark_5_15_96.cub
+dawn/translations/dawnfcArchive.trn
+dawn/translations/dawnvirArchive.trn
+galileo/translations/galileoNIMSInstrument.trn
+galileo/calibration/darkcurrent/2f8.dc04.cub
+galileo/calibration/darkcurrent/4f8.dc04.cub
+hayabusa/translations/amicaArchive.trn
+hayabusa/translations/nirsArchive.trn
+kaguya/translations/kaguyamiInstrument.trn
+kaguya/translations/tcmapInstrument.trn
+kaguya/translations/mimapBandBin.trn
+base/translations/pdsExportImageImage.typ
+lro/translations/lronacArchive.trn
+lro/translations/lronacPdsLabelExport.trn
+lro/translations/lrowacArchive.trn
+lro/translations/lrowacPdsLabelExport.trn
+lro/translations/mrflev1Archive.trn
+lro/translations/mrflev2Archive.trn
+base/translations/pdsExportImageImage.typ
+mariner10/calibration/mariner_10_blem_A.cub
+mariner10/calibration/mariner_10_blem_B.cub
+mer/translations/merInstrument.trn
+messenger/translations/mdisBandBin.trn
+base/translations/pdsExportImageImage.typ
+messenger/translations/mdisBandBin.trn
+mex/translations/hrscBandBin.trn
+mex/translations/hrscBandBin.trn
+base/translations/pdsExportImageImage.typ
+mro/calibration/psf/PSF_IR.cub
+newhorizons/translations/leisaArchive_fit.trn
+newhorizons/translations/lorriBandBin_fit.trn
+rolo/translations/roloInstrument.trn
+rosetta/translations/osirisBandBin.trn
+viking2/reseaus/nominal.pvl
+apollo15/kernels/pck/moon_assoc_me.tf
+base/dems/ulcn2005_lpo_0004.cub
+cassini/kernels/pck/cpck21Apr2005.tpc
+lro/kernels/ck/lrolc_2009181_2009213_v02.bc
+odyssey/kernels/sclk/ORB1_SCLKSCET.00200.tsc
+odyssey/kernels/sclk/ORB1_SCLKSCET.00203.tsc
+apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub
+hayabusa/dawn/DEM/vesta512.bds
+messenger/kernels/ck/msgr20080109.bc
+messenger/kernels/ck/msgr20111016.bc
+apollo15/templates/apolloPanFiducialFinder.pvl
+base/dems/ulcn2005_lpo_0004.cub
+mer/translations/merInstrument.trn
+mer/translations/merInstrument.trn
+odyssey/testData/I25685003EDR.crop.proj.reduced.cub
+cassini/testData/vims2.cub+100
+base/translations/pdsExportImageImage.typ
+mro/testData/ctx_pmoi_i_00003.bottom.cub
+cassini/translations/narrowAngle.def
+cassini/translations/wideAngle.def
+chandrayaan1/translations/m3Instrument.trn
+Clementine1/calibration/hires/lhd_flat.cub
+clementine1/calibration/nir/nirorbitflats/nir_orbflat_284_a.cub
+clementine1/calibration/uvvis/dark_5_15_96.cub
+hayabusa/dawn/DEM/vesta512.bds
+dawn/translations/dawnfcArchive.trn
+dawn/translations/dawnvirArchive.trn
+galileo/translations/galileoNIMSInstrument.trn
+galileo/calibration/darkcurrent/2f8.dc04.cub
+galileo/calibration/darkcurrent/4f8.dc04.cub
+hayabusa/translations/amicaArchive.trn
+hayabusa/translations/nirsArchive.trn
+kaguya/translations/kaguyamiInstrument.trn
+kaguya/translations/tcmapInstrument.trn
+kaguya/translations/mimapBandBin.trn
+base/translations/pdsExportImageImage.typ
+cassini/translations/narrowAngle.def
+lro/translations/lronacArchive.trn
+lro/translations/lronacPdsLabelExport.trn
+lro/translations/lrowacArchive.trn
+lro/translations/lrowacPdsLabelExport.trn
+lro/translations/mrflev1Archive.trn
+lro/translations/mrflev2Archive.trn
+base/translations/pdsExportImageImage.typ
+mariner10/calibration/mariner_10_blem_A.cub
+mariner10/calibration/mariner_10_blem_B.cub
+mer/translations/merInstrument.trn
+messenger/translations/mdisBandBin.trn
+base/translations/pdsExportImageImage.typ
+messenger/translations/mdisBandBin.trn
+mex/translations/hrscBandBin.trn
+base/translations/pdsExportImageImage.typ
+mro/calibration/psf/PSF_IR.cub
+newhorizons/translations/leisaArchive_fit.trn
+newhorizons/translations/lorriBandBin_fit.trn
+rolo/translations/roloInstrument.trn
+rosetta/translations/osirisBandBin.trn
+rosetta/translations/osirisBandBin.trn
+viking2/reseaus/nominal.pvl
+apollo15/calibration/METRIC_flatfield.cub
+apollo15/calibration/ApolloPanFiducialMark.cub
+base/dems/ulcn2005_lpo_0004.cub
+mer/translations/merStructure.trn
+newhorizons/calibration/target-wavelengths-expanded.csv.
+odyssey/testData/I10047011EDR.proj.reduced.cub
+viking1/reseaus/vo1.visb.template.cub
+cassini/testData/vims1.cub
+base/translations/pdsExportRootGen.typ
+mro/testData/ctx_pmoi_i_00003.bottom.cub
+Apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub
+base/templates/maps/polarstereographic.map
+base/templates/maps/simplecylindrical.map
+cassini/translations/cassiniIss.trn
+cassini/translations/vimsPds.trn
+chandrayaan1/translations/m3Archive.trn
+clementine1/translations/clementine.trn
+Clementine1/calibration/hires/lhd_flat.cub
+clementine1/calibration/nir/newnir_flat_a.cub
+clementine1/calibration/uvvis/uvvis.def
+base/templates/cnet_validmeasure/validmeasure.def
+base/templates/cnetref/cnetref_nooperator.def
+base/templates/cnetref/cnetref_operator.def
+base/templates/cnetref/cnetref_nooperator.def
+base/templates/cnetstats/cnetstats.def
+hayabusa/dawn/DEM/vesta512.bds
+dawn/translations/dawnfcBandBin.trn
+dawn/translations/dawnvirBandBin.trn
+dawn/translations/dawnvirBandBin.trn
+galileo/translations/galileoNIMSArchive.trn
+galileo/translations/galileoSsi.trn
+galileo/calibration/gll_dc.sav
+hayabusa/translations/amicaBandBin.trn
+hayabusa/translations/nirsInstrument.trn
+kaguya/translations/kaguyamiArchive.trn
+kaguya/translations/tcmapBandBin.trn
+base/translations/pdsExportRootGen.typ
+cassini/translations/cissua2isis.trn
+lro/translations/lronacInstrument.trn
+lro/translations/pdsExportRootGen.typ
+lro/translations/lrowacInstrument.trn
+lro/translations/pdsExportRootGen.typ
+lro/translations/mrflev1BandBin.trn
+lro/translations/mrflev2BandBin.trn
+lro/translations/mrfExportRoot.typ
+mariner10/reseaus/mar10VenusNominal.pvl
+mariner10/translations/mariner10isis2.trn
+mariner10/calibration/mariner_10_A_dc.cub
+mariner10/calibration/mariner_10_B_dc.cub
+mariner10/reseaus/mar10b.template.cub
+mer/translations/merStructure.trn
+messenger/translations/mdisInstrument.trn
+messenger/translations/mdisInstrument.trn
+base/translations/pdsExportRootGen.typ
+messenger/testData/EW0031509051D.cub
+messenger/testData/EN0089576657M.IMG
+messenger/translations/mdisInstrument.trn
+mex/translations/hrscInstrument.trn
+mro/calibration/ctxFlat_0001.cub
+mro/calibration/HiRISE_Gain_Drift_Correction_Bin2.0001.csv
+mro/calibration/HiRISE_Gain_Drift_Correction_Bin4.0001.csv
+mro/calibration/HiccdstitchOffsets.def
+base/translations/pdsExportRootGen.typ
+mro/calibration/hijitreg.p1745.s3070.def
+output/PSP_007556_2010_RED4.balance.cropped.cub
+mro/calibration/psf/PSF_BG.cub
+near/translations/nearImportPdsLabel.trn
+newhorizons/translations/leisaInstrument_fit.trn
+newhorizons/translations/lorriInstrument_fit.trn
+newhorizons/translations/mvicInstrument_fit.trn
+rolo/translations/roloMapping.trn
+rosetta/translations/osirisArchive.trn
+viking1/reseaus/nominal.pvl
+iking2/reseaus/nominal.pvl
+voyager1/calibration/voylin.pvl
+apollo15/kernels/pck/moon_080317.tf
+viking1/kernels/sclk/vo1_fsc.tsc
+base/dems/ulcn2005_lpo_0004.cub
+cassini/kernels/fk/cas_v40.tf
+lro/kernels/ck/lrolc_2009181_2009213_v02.bc
+lro/kernels/spk/fdf29r_2009182_2009213_v01.bsp
+odyssey/kernels/fk/m01_v29.tf
+cassini/kernels/sclk/cas00110.tsc
+hayabusa/dawn/DEM/vesta512.bds
+odyssey/kernels/sclk/ORB1_SCLKSCET.00174.tsc
+galileo/kernels/sclk/mk00062b.tsc
+messenger/kernels/ck/msgr20111015.bc
+lro/kernels/spk/fdf29r_2012275_2012306_v01.bsp
+apollo15/kernels/tspk/de421.bsp
+viking1/kernels/sclk/vo1_fict.tsc
+base/dems/ulcn2005_lpo_0004.cub
+viking1/kernels/ck/vo1_sedr_ck2.bc
+cassini/kernels/ck/05047_05052ra.bc
+mro/kernels/ck/mro_sc_psp_061114_061120.bc
+lro/kernels/tspk/de421.bsp
+odyssey/kernels/ck/m01_sc_map7.bc
+odyssey/kernels/ck/m01_sc_map5_rec_nadir.bc
+odyssey/kernels/sclk/ORB1_SCLKSCET.00160.tsc
+cassini/kernels/iak/vimsAddendum02.ti
+viking1/kernels/sclk/vo1_fict.tsc
+Apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub
+cassini/kernels/sclk/cas00106.tsc
+clementine1/kernels/fk/clem_v10.tf
+clementine1/kernels/iak/nirAddendum002.ti
+hayabusa/dawn/DEM/vesta512.bds
+odyssey/kernels/sclk/ORB1_SCLKSCET.00174.tsc
+galileo/kernels/sclk/mk00062b.tsc
+messenger/kernels/ck/msgr20111014.bc
+apollo15/kernels/tspk/moon_pa_de421_1900-2050.bpc
+viking1/kernels/iak/vikingAddendum003.ti
+base/dems/ulcn2005_lpo_0004.cub
+viking1/kernels/spk/vik1_ext.bsp
+cassini/kernels/spk/050414RB_SCPSE_05034_05060.bsp
+mro/kernels/spk/mro_psp1.bsp
+lro/kernels/tspk/moon_pa_de421_1900-2050.bpc
+odyssey/kernels/spk/m01_map7.bsp
+odyssey/kernels/spk/m01_map5.bsp
+odyssey/kernels/iak/themisAddendum003.ti
+cassini/kernels/pck/cpck19Sep2007.tpc
+mgs/kernels/iak/mocAddendum003.ti
+viking1/kernels/fk/vo1_v10.tf
+Apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub
+cassini/kernels/pck/cpck01Dec2006.tpc
+base/dems/Ceres_Dawn_FC_HAMO_DTM_DLR_Global_60ppd_Oct2016_prep.cub
+cassini/kernels/pck/cpck01Dec2006.tpc
+mgs/kernels/sclk/MGS_SCLKSCET.00060.tsc
+hayabusa/dawn/DEM/vesta512.bds
+odyssey/kernels/iak/themisAddendum003.ti
+galileo/kernels/iak/ssiAddendum004.ti
+mro/kernels/spk/mro_psp22.bsp
+messenger/kernels/ck/msgr20111013.bc
+mro/kernels/spk/mro_psp22.bsp
+base/templates/autoreg/findrx.def
+viking2/reseaus/vo2.visb.template.cub
+viking2/calibration/vik2evenMask.cub
+voyager1/kernels/
+voyager1/calibration/NA1CLR.CAL.cub
+voyager1/calibration/NA1OFF.CAL.cub
+voyager1/calibration/voycal.pvl
+voyager1/reseaus/vg1naMasterReseaus.pvl
+voyager2/translations/
+voyager2/kernels/
+voyager2/reseaus/nominal.pvl
+base/templates/maps/sinusoidal.map
+base/applications/noprojInstruments001.pvl
+base/applications/noprojInstruments002.pvl
+base/applications/noprojInstruments003.pvl
+messenger/kernels/ck/1018221575_197834_mdis_pivot_pvtres.bc
+messenger/kernels/ck/1018290560_1175_mdis_atthist.bc
+messenger/kernels/ck/msgr20120630.bc
+messenger/kernels/ck/msgr20120629.bc
+messenger/kernels/ck/msgr20120628.bc
+messenger/kernels/ck/msgr20120627.bc
+messenger/kernels/ck/msgr20120626.bc
+messenger/kernels/ck/msgr20120625.bc
+messenger/kernels/ck/msgr20120624.bc
+messenger/kernels/ck/msgr20120623.bc
+messenger/kernels/ck/msgr20120622.bc
+messenger/kernels/ck/msgr20120621.bc
+messenger/kernels/pck/kernels.0001.db
+messenger/kernels/pck/kernels.0002.db
+messenger/kernels/pck/kernels.0003.db
+messenger/kernels/pck/kernels.0004.db
+messenger/kernels/tspk/
+messenger/testData/EW0131770376G.equi.cub
+mgs/calibration
+mro/kernels/fk/
+mro/kernels/ik/
+mro/kernels/sclk/
+base/kernels/lsk/
+base/kernels/pck/
+base/kernels/spk/de118.bsp
+base/kernels/spk/de245.bsp
+base/kernels/spk/de405.bsp
+base/testData/kernels/de405.bsp
+base/kernels/spk/kernels.0001.db
+base/kernels/spk/kernels.0002.db
+base/testData/kernels/moc.bsp
+base/testData/kernels/naif0007.tls
+base/testData/kernels/moc.bc
+base/testData/kernels/pck00006.tpc
+base/testData/kernels/mocSpiceUnitTest.ti
+base/testData/kernels/mocAddendum.ti
+base/testData/kernels/MGS_SCLKSCET.00045.tsc
+base/testData/kernels/moc13.ti
+base/kernels/pck/pck00009.tpc
+base/kernels/lsk/naif0009.tls
+base/kernels/spk/de405.bsp
+base/kernels/lsk/naif0009.tls
+base/kernels/pck/pck00009.tpc
+base/dems/kernels.0003.db
+base/dems/kernels.0004.db
+base/dems/kernels.0005.db
+mgs/testData/ab102401.cub
+base/templates/labels/CubeFormatTemplate.pft
+mariner10/testData/0027399_clean_equi.cub
+mgs/testData/ab102401.lev2.cub
+odyssey/testData/I00824006RDR.lev2.cub
+base/testData/blobTruth.cub
+base/testData/isisTruth.cub
+base/testData/isisTruth2.cub
+base/testData/xmlTestLabel.xml
+base/testData/f319b18_ideal.cub
+base/translations/MissionName2DataDir.trn
+base/translations/MissionName2DataDir.trn
+messenger/testData/EW0211286081G.lev1.cub
+messenger/testData/EW0131770376G.equi.cub
+base/translations/NaifErrors.trn
+mariner10/testData/0027399_clean_equi.cub
+dawn/testData/FC21B0001010_09049002212F5D.cub
+base/testData/LRONAC_M139722912RE_cropped.cub
+base/dems/molaMarsPlanetaryRadius0004.cub
+base/dems/molaMarsPlanetaryRadius0005.cub
+viking2/testData/f348b26.cub
+viking2/kernels/sclk/vo2_fict.tsc
+viking2/kernels/iak/vikingAddendum003.ti
+clementine1/testData/lna1391h.cub
+base/testData/ab102401_ideal.cub
+lo/testData/3133_h1.cub
+mgs/kernels/ik/moc20.ti
+mgs/kernels/iak/mocAddendum004.ti
+mgs/kernels/sclk/MGS_SCLKSCET.00061.tsc
+viking2/kernels/sclk/vo2_fsc.tsc
+hayabusa/kernels/dsk/hay_a_amica_5_itokawashape_v1_0_512q.bds
+hayabusa/kernels/pck/itokawa_gaskell_n3.tpc
+hayabusa/kernels/tspk/de403s.bsp
+hayabusa/kernels/tspk/sb_25143_140.bsp
+hayabusa/kernels/spk/hay_jaxa_050916_051119_v1n.bsp
+hayabusa/kernels/spk/hay_osbj_050911_051118_v1n.bsp
+hayabusa/kernels/ck/hayabusa_itokawarendezvous_v02n.bc
+hayabusa/kernels/fk/hayabusa_hp.tf
+hayabusa/kernels/fk/itokawa_fixed.tf
+hayabusa/kernels/ik/amica31.ti
+hayabusa/kernels/iak/amicaAddendum001.ti
+hayabusa/kernels/sclk/hayabusa.tsc
+base/kernels/spk/de405.bsp
+mgs/kernels/spk/mgs_ab1.bsp
+mgs/testData/ab102402.lev2.cub
+odyssey/testData/I02609002RDR.lev2.cub
+mgs/kernels/ck/mgs_sc_ab1.bc
+viking2/kernels/spk/vo2_rcon.bsp
+apollo15/testData/AS15-M-0533.cropped.cub
+apollo15/testData/TL.cub
+cassini/testData/W1294561261_1.c2i.nospice.cub
+cassini/testData/N1525100863_2.cub
+cassini/testData/W1525116136_1.cub
+odyssey/testData/I01523019RDR.lev2.cub
+odyssey/testData/I01523019RDR.lev2.cub
+messenger/testData/EW0131770381F.equi.cub
+mariner10/testData/0166613_clean_equi.cub
+lo/testData/3133_h1.cropped.cub
+lo/testData/3083_med_tohi.cub
+mgs/testData/fha00491.lev1.cub
+mro/testData/frt0001cfd8_07_if124s_trr3_b24.cub
+mro/testData/ctx_pmoi_i_00003.bottom.cub
+mro/testData/PSP_001446_1790_BG12_0.cub
+mro/testData/P12_005911_3396_MA_00N009W.cropped.cub
+mro/kernels/ck/mro_crm_psp_080101_080131.bc
+mro/kernels/ck/mro_sc_psp_080108_080114.bc
+mro/kernels/spk/mro_psp6.bsp
+mro/kernels/ck/mro_sc_psp_080304_080310.bc
+mro/kernels/iak/hiriseAddendum006.ti
+cassini/testData/N1355543510_1.c2i.nospice.cub
+base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub
+cassini/testData/CM_1515951157_1.ir.cub
+clementine1/testData/lub5992r.292.lev1.phot.cub
+messenger/testData/EW0213634118G.lev1.cub
+galileo/testData/1213r.cub
+lo/testData/3083_med_raw.cub
+base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub
+lo/testData/4008_med_res.cropped.cub
+mro/testData/ctx_pmoi_i_00003.top.cub
+base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub
+lro/kernels/pck/moon_080317.tf
+viking2/kernels/ck/vo2_sedr_ck2.bc
+base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub
+mariner10/kernels/iak/mariner10Addendum002.ti
+base/kernels/fk/lunarMeanEarth001.tf
+viking2/kernels/fk/vo2_v10.tf
+lro/kernels/pck/moon_assoc_me.tf
+mro/kernels/iak/mroctxAddendum004.ti
+cassini/testData/N1536363784_1.c2i.spice.cub
+apollo16/testData/AS16-M-0533.reduced.cub
+lo/testData/4164H_Full_mirror.cub
+lo/testData/5072_med_res.cropped.cub
+cassini/testData/N1313633704_1.c2i.nospice.cub
+clementine1/kernels/iak/uvvisAddendum003.ti
+clementine1/kernels/ck/clem_5sc.bck
+apollo15/kernels/iak/apolloPanAddendum001.ti
+mariner10/kernels/sclk/mariner10.0001.tsc
+hayabusa/testData/st_2530292409_v.cub
+lo/testData/5006_high_res_1.cropped.cub
+cassini/testData/CM_1514390782_1.ir.cub
+clementine1/kernels/sclk/dspse002.tsc
+cassini/kernels/pck/cpck14Feb2006.tpc
+apollo15/testData/BL.cub
+mro/testData/G02_019106_1390_XN_41S257W.cub
+apollo17/testData/AS17-M-0543.reduced.cub
+cassini/kernels/iak/vimsAddendum03.ti
+base/dems/ulcn2005_lpo_0004.cub
+base/dems/molaMarsPlanetaryRadius0001.cub
+apollo15/testData/M.cub
+mro/apps/hiequal/tsts/default/input/RED0.cub
+cassini/kernels/sclk/cas00130.tsc
+cassini/kernels/sclk/cas00112.tsc
+cassini/testData/CM_1514390782_1.vis.cub
+cassini/testData/CM_1515945709_1.ir.cub
+cassini/kernels/pck/cpck21Mar2006.tpc
+cassini/testData/CM_1515945709_1.vis.cub
+cassini/testData/C1465336166_1.ir.cub
+apollo15/testData/TR.cub
+apollo15/testData/BR.cub
+mgs/testData/ab102401.cub
+base/templates/labels/MappingGroupKeywords.pft
+odyssey/testData/I00824006RDR.lev2.cub
+odyssey/testData/I56632006EDR.lev2.cub
+odyssey/testData/I02609002RDR.lev2.cub
+odyssey/testData/I01523019RDR.lev2.cub
+viking2/reseaus/vik2bMasterReseaus.pvl
+mgs/testData/m0402852.cub
+mariner10/reseaus/mar10aMasterReseaus.pvl
+lo/testData/3133_h1.cub
+base/translations/NaifErrors.trn
+base/testData/blobTruth.cub
+base/testData/isisTruthNoSpacecraftName.cub
+base/testData/isisTruthNoInstrumentId.cub
+lo/testData/5106_h1.cropped.cub
+lo/testData/5106_h2.cropped.cub
+mgs/calibration/MGSC_1246_wago.tab
+mgs/calibration/MGSC_1290_wago.tab
+mgs/calibration/MGSC_1428_wago.tab
+mgs/calibration/MGSC_1546_wago.tab
+mgs/calibration/MGSC_1578_wago.tab
+clementine1/kernels/ck/clem_ulcn2005_type2_1sc.bc
+clementine1/kernels/fk/clem_v11.tf
+clementine1/kernels/sclk/dspse002.tsc
+clementine1/kernels/spk/SPKMERGE_940219_940504_CLEMV001b.bsp
+clementine1/kernels/iak/uvvisAddendum003.ti
+base/templates/maps/equirectangular.map
+newhorizons/calibration/NHSmileDefinitionNew.cub
+messenger/kernels/tspk/de423s.bsp
+messenger/kernels/tspk/kernels.0001.db
+messenger/kernels/tspk/kernels.0002.db
+messenger/kernels/tspk/kernels.0003.db
+messenger/kernels/spk/msgr_20040803_20150328_od332sc_0.bsp
+messenger/kernels/spk/msgr_20040803_20150430_od431sc_2.bsp
+messenger/kernels/sclk/messenger_1930.tsc
+base/translations/pdsProjectionLineSampToXY.def
+dawn/kernels/fk/
+dawn/kernels/iak/
+dawn/kernels/ik/
+dawn/kernels/pck/
+dawn/kernels/sclk/
+dawn/kernels/tspk/
+mro/kernels/fk/
+mro/kernels/iak/
+mro/kernels/ik/
+mro/kernels/sclk/
+cassini/kernels/spk/050105RB_SCPSE_04247_04336.bsp
+newhorizons/kernels/fk/
+newhorizons/kernels/iak/
+newhorizons/kernels/ik/
+newhorizons/kernels/pck/
+newhorizons/kernels/sclk/
+newhorizons/kernels/spk/
+lro/kernels/ck/lrolc_2009243_2009274_v01.bc
+mro/kernels/spk/mro_psp8.bsp
+newhorizons/kernels/tspk/de413.bsp
+lro/kernels/ck/moc42r_2009243_2009274_v08.bc
+mro/kernels/ck/mro_sc_psp_080923_080929.bc
+newhorizons/kernels/tspk/jup260.bsp
+near/kernels/fk/
+newhorizons/kernels/ck/merged_nhpc_2007_v006.bc
+'''
+
+    dbList = '''
+newhorizons/kernels/ck/
+near/kernels/ck/
+dawn/kernels/ck/
+dawn/kernels/pck/
+mro/kernels/
+messenger/kernels/
+messenger/kernels/spk/
+apollo15/kernels/
+base/translations/
+lo/translations/
+mgs/translations/
+odyssey/translations/
+odyssey/kernels/ck/
+odyssey/kernels/ik/
+odyssey/kernels/iak/
+odyssey/kernels/sclk/
+odyssey/kernels/fk/
+odyssey/kernels/spk/
+mro/translations/
+voyager1/kernels/
+mgs/kernels/
+cassini/kernels/
+cassini/calibration/
+lro/calibration/
+lro/kernels/
+messenger/calibration/
+newhorizons/kernels/
+base/dems/
+base/translations/
+'''
+
+    fileList = fileList.split()
+    dbList   = dbList.split()
+
+    # TODO: Input argument
+    installDir = '/home/smcmich1/release_isis/isis3data/'
+    #installDir = '/Users/smcmich1/release_isis/isis3data/'
+
+    cmd    = 'rsync -azv --delete --partial '
+    remote = 'isisdist.astrogeology.usgs.gov::isis3data/data/'
+
+    for f in fileList:
+
+        # Set up commands
+        target = installDir + f
+        
+        print target
+        
+        # Don't refetch existing files
+        if os.path.exists(target) and (not os.path.isdir(target)):
+            continue
+        
+        # Fetch the file
+        fullCmd = cmd + remote + f +' '+ target
+        print fullCmd
+        os.system('mkdir -p ' + os.path.dirname(target))
+        os.system(fullCmd)
+
+    # This is for folders where we want just the small files
+    for f in dbList:
+        fullCmd = (cmd + remote + f+' --max-size=3m ' + installDir+f)
+        print fullCmd
+        os.system('mkdir -p '+ installDir +f)
+        os.system(fullCmd)
+
+
+
+if __name__ == '__main__':
+    sys.exit( main() )
diff --git a/isis/scripts/isis3Startup.sh b/isis/scripts/isis3Startup.sh
index de0dfcac526bde1be8ee6a78f93d00dbe827351a..d9728383d52d8c9e1d84269efde4b705156cc6a7 100755
--- a/isis/scripts/isis3Startup.sh
+++ b/isis/scripts/isis3Startup.sh
@@ -37,7 +37,3 @@ else
   PATH="$ISISROOT/bin"
 fi
 export PATH
-
-# Create QT_PLUGIN_PATH env variable
-QT_PLUGIN_PATH="$ISISROOT/3rdParty/plugins"
-export QT_PLUGIN_PATH
diff --git a/isis/scripts/isis3VarInit.py b/isis/scripts/isis3VarInit.py
new file mode 100755
index 0000000000000000000000000000000000000000..ec6431691f0b80d29875696ce03e4e4b15c02402
--- /dev/null
+++ b/isis/scripts/isis3VarInit.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+import argparse
+import os
+import sys
+#Author:  Tyler Wilson
+#Date  :  2018-10-05
+#Description:  This script sets ISISROOT/ISIS3DATA/ISIS3TESTDATA for the user and is executed
+#within the conda environment created for the ISIS3 installation.
+#The data directory and test directory are optional command line arguments.  If the user chooses
+#not to set them, they will both be placed created on the same level as the $ISISROOT directory
+#within the conda environment.
+
+parser = argparse.ArgumentParser(description='Usage:  ./isis3VarInit --data_dir <data dir path> --test_dir <test dir path')
+   
+isisroot = '$CONDA_PREFIX'
+data_dir='$CONDA_PREFIX/data'
+testdata_dir='$CONDA_PREFIX/testData'
+
+parser.add_argument("--data-dir",default= data_dir,help="ISIS3 Mission Data Directory")
+parser.add_argument("--test-dir",default=testdata_dir,help="ISIS3 Mission Test Data Directory")
+
+args=parser.parse_args()
+if (data_dir != args.data_dir):
+    os.system("mkdir -p "+args.data_dir)
+    data_dir = args.data_dir
+else:    
+    os.system("mkdir -p "+data_dir)
+
+if (testdata_dir != args.test_dir):
+    os.system("mkdir -p "+args.test_dir)
+    testdata_dir=args.test_dir
+else:
+    os.system("mkdir -p "+testdata_dir)
+
+os.popen('mkdir -p '+isisroot+'/etc/conda/activate.d')
+os.popen('mkdir -p '+isisroot+'/etc/conda/deactivate.d')
+
+os.system("echo -n '' >"+isisroot+"/etc/conda/activate.d/env_vars.sh")
+os.popen("echo -n '' >"+isisroot+"/etc/conda/deactivate.d/env_vars.sh")
+os.popen('touch '+isisroot+'/etc/conda/activate.d/env_vars.sh')
+os.popen('touch '+isisroot+'/etc/conda/activate.d/env_vars.sh')
+
+os.popen("echo '#!/bin/sh' >> "+isisroot+ "/etc/conda/activate.d/env_vars.sh")
+os.popen("echo 'export ISISROOT="+isisroot+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh")
+os.popen("echo 'export ISIS3DATA="+data_dir+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh")
+os.popen("echo 'export ISIS3TESTDATA="+testdata_dir+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh")
+
+os.popen("echo '#!/bin/sh' >> "+isisroot+ "/etc/conda/deactivate.d/env_vars.sh")
+os.popen("echo 'unset ISISROOT' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh")
+os.popen("echo 'unset ISIS3DATA' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh")
+os.popen("echo 'unset ISIS3TESTDATA' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh")
+
diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py
new file mode 100755
index 0000000000000000000000000000000000000000..387be1f3ecb76eceff13f726bbaab37960457a6f
--- /dev/null
+++ b/isis/scripts/makeOutput.py
@@ -0,0 +1,90 @@
+'''
+Script to create truthData for tests.
+
+For output it expects the command in the form of:
+    python3 makeOutput.py test
+
+where test is the cmake name for the unit or app test
+
+To check in truth data the command should be in the form of:
+    python makeOutput.py -t test
+
+The -t option checks in truth data
+
+The unit tests are pretty trivial because the executable outputs the results of
+the unitTest to stdout and stderr so we just redirect the streams to the file
+named object.truth where object is the ISIS object being tested.
+
+The app tests output has to rely on the old make system because the app test
+infrastructure relies on the old make system. Otherwise all the logic for the old
+makesystem would need to be reimplemented here. Because we wish to replace the testing
+system with something that allows unit and app test to live in the same space the effort
+to recreate the logic is not worth the outcome.
+'''
+
+import argparse
+import sys
+import os
+
+try:
+    builddir = os.environ['ISISROOT']
+except KeyError:
+    print("The $ISISROOT environment variable is not set")
+
+parser = argparse.ArgumentParser()
+parser.add_argument('test', action='store', help='Provide the name of the Test to create output of')
+parser.add_argument('-t', action='store_true', default=False, dest='truth', help='Flag whether output is sent to truth data')
+userInput = parser.parse_args()
+testInput = userInput.test
+
+if "_unit_" in testInput:
+    unitTestName = testInput.split("_test_")[1]
+    truthFileName = unitTestName + ".truth"
+
+    # We need to run the unit test from the object's directory because 
+    # some tests have an xml file in the object's directory. If we ran the 
+    # unit test from /unitTest, these files would not be able to be opened.
+    with open(builddir + "/objects/CTestTestfile.cmake") as testFile:
+        for line in testFile:
+            if "/" + unitTestName + "/" in line:
+                unitTestSrcPath = line.split("\" \"")[2][13:].split(unitTestName + "/")[0] + unitTestName + "/"
+                if not os.path.exists(unitTestSrcPath + "unitTest"):              
+                    os.system("ln -s " + builddir + "/unitTest/" + testInput + " " + unitTestSrcPath + "unitTest")
+                os.system(unitTestSrcPath + "unitTest" + ">& " + builddir + "/testOutputDir/" + truthFileName)
+                print("Unit Test Output In " + builddir + "/testOutputDir/ As " + truthFileName)
+                break
+
+    if userInput.truth:
+        os.system("cp -f " + builddir + "/testOutputDir/" + truthFileName + " " + unitTestSrcPath + truthFileName)
+        print("Checked In Truth Data To " + unitTestSrcPath)
+
+else:
+    apptest = testInput
+    makefilePath = ""
+    with open(builddir + "/objects/CTestTestfile.cmake") as testFile:
+        for line in testFile:
+            if apptest in line:
+                makefilePath = line.split("\" \"")[1][11:]
+                break
+
+    makefilePath = makefilePath.split("/")
+    del makefilePath[-1]
+    makefilePath = "/".join(makefilePath)
+
+    # change dir to test dir and run make commands
+    os.chdir(makefilePath)
+    os.system("make checkout")
+    os.system("make output")
+    os.system("make truthdata")
+    os.system("rm -rf " + builddir + "/testOutputDir/truth")
+    os.system("cp -rf truth " + builddir + "/testOutputDir")
+    print("App Test Output In " + builddir + "/testOutputDir/truth")
+
+    # check if the user wants data checked in
+    if userInput.truth:
+        os.system("make checkin")
+        print("Checked In Truth Data")
+
+    # doing this instead of make release because make release
+    # can give feedback to the user that we would rather avoid
+    os.system("rm -rf input output truth print.prt")
diff --git a/isis/sipfiles/BundleAdjust.sip b/isis/sipfiles/BundleAdjust.sip
new file mode 100644
index 0000000000000000000000000000000000000000..3365780bffaf8064cb210379cd5485f3b3766d44
--- /dev/null
+++ b/isis/sipfiles/BundleAdjust.sip
@@ -0,0 +1,42 @@
+// SIP Wrapper to the ISIS3 bundle class
+%Include type_conversions.sip
+
+
+namespace Isis {
+  class BundleAdjust : public QObject {
+    %TypeHeaderCode
+    #include "BundleAdjust.h"
+    #include "IException.h"
+    %End
+
+  public:
+    // Stuff in the square brackets [] indicate the C++ interface while the sip
+    // function name indicates the C python function interface
+    BundleAdjust(PyObject* settings, const QString &cnetFile, const QString &cubeList, bool printSummary = true) throw(Isis::IException) [(QSharedPointer<Isis::BundleSettings>, QString, QString, bool)];
+    %MethodCode
+      int sipErr = 0;
+      QSharedPointer<Isis::BundleSettings> *wrappedSettings = new QSharedPointer<Isis::BundleSettings>();
+
+      Isis::BundleSettings *settings = (Isis::BundleSettings*) sipConvertToType(a0, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr);
+      wrappedSettings->reset(settings);
+      try {
+        sipCpp = new sipIsis_BundleAdjust(*wrappedSettings, *a1, *a2, a3);
+      }
+      catch (Isis::IException &error) {
+          PyErr_SetString(sipException_Isis_IException, error.what());
+          return NULL;
+      }
+    %End
+
+    Isis::BundleSolutionInfo* solveCholeskyBR();
+    %MethodCode
+      try {
+        return sipConvertFromType(sipCpp->solveCholeskyBR(), sipType_Isis_BundleSolutionInfo, NULL);
+      }
+      catch (Isis::IException &error) {
+          PyErr_SetString(sipException_Isis_IException, error.what());
+          return NULL;
+      }
+    %End
+   };
+};
diff --git a/isis/sipfiles/BundleControlPoint.sip b/isis/sipfiles/BundleControlPoint.sip
new file mode 100644
index 0000000000000000000000000000000000000000..934b00bc9426ee359e0df5212b041f4614dc29f3
--- /dev/null
+++ b/isis/sipfiles/BundleControlPoint.sip
@@ -0,0 +1,68 @@
+namespace Isis {
+  class BundleControlPoint {
+
+    %TypeHeaderCode
+    #include "BundleControlPoint.h"
+    #include <QSharedPointer>
+    %End
+
+    public:
+
+      SIP_PYTYPE measures() throw(Isis::IException);
+      %MethodCode
+        size_t size = sipCpp->size();
+
+        PyObject *l = PyList_New(size);
+        for (size_t i = 0; i < size; ++i) {
+          Isis::BundleMeasure* cppMeasure = sipCpp->at(i).data();
+
+          PyObject *pyMeasure = sipConvertFromType((void*)(cppMeasure), sipType_Isis_BundleMeasure, NULL);
+          PyList_SetItem(l, i, pyMeasure);
+        }
+
+        return l;
+
+      %End
+
+      // BundleControlPoint(ControlPoint *point); // default constructor
+      BundleControlPoint(const Isis::BundleControlPoint &src) throw(Isis::IException);
+      ~BundleControlPoint();
+
+      // copy
+      void copy(const Isis::BundleControlPoint &src) throw(Isis::IException);
+
+      // mutators
+      // QSharedPointer<Isis::BundleMeasure> addMeasure(ControlMeasure *controlMeasure);
+      void computeResiduals() throw(Isis::IException);
+      void setNumberOfRejectedMeasures(int numRejected) throw(Isis::IException);
+      void setRejected(bool reject) throw(Isis::IException);
+      void setWeights(const QSharedPointer<Isis::BundleSettings> settings, double metersToRadians) throw(Isis::IException);
+      void zeroNumberOfRejectedMeasures() throw(Isis::IException);
+
+      // accessors
+      bool isRejected() const throw(Isis::IException);
+      int numberOfMeasures() const throw(Isis::IException);
+      int numberOfRejectedMeasures() const throw(Isis::IException);
+      double residualRms() const throw(Isis::IException);
+      QString id() const throw(Isis::IException);
+      Isis::ControlPoint::PointType type() const throw(Isis::IException);
+
+      // string format methods
+      QString formatBundleOutputSummaryString(bool errorPropagation) const throw(Isis::IException);
+      QString formatBundleOutputDetailString(bool errorPropagation, double RTM, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/;
+      QString formatValue(double value, int fieldWidth, int precision) throw(Isis::IException);
+      QString formatAprioriSigmaString(int type, int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/;
+      QString formatLatitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException);
+      QString formatLongitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException);
+      QString formatRadiusAprioriSigmaString(int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/;
+      QString formatAdjustedSigmaString(int type, int fieldWidth, int precision,
+                                        bool errorPropagation) const throw(Isis::IException);
+      QString formatLatitudeAdjustedSigmaString(int fieldWidth, int precision,
+                                                bool errorPropagation) const throw(Isis::IException);
+      QString formatLongitudeAdjustedSigmaString(int fieldWidth, int precision,
+                                                 bool errorPropagation) const throw(Isis::IException);
+      QString formatRadiusAdjustedSigmaString(int fieldWidth, int precision,
+                                              bool errorPropagation) const throw(Isis::IException);
+
+  };
+};
diff --git a/isis/sipfiles/BundleImage.sip b/isis/sipfiles/BundleImage.sip
new file mode 100644
index 0000000000000000000000000000000000000000..bf8d975d4c0a4b5153298bcd2170bd53cba8449c
--- /dev/null
+++ b/isis/sipfiles/BundleImage.sip
@@ -0,0 +1,16 @@
+namespace Isis {
+  class BundleImage /NoDefaultCtors/ {
+  %TypeHeaderCode
+    #include "BundleImage.h"
+  %End
+  %InstanceCode
+    sipCpp = new Isis::BundleImage(NULL, "", "");
+  %End
+  public:
+
+
+    // QSharedPointer<BundleObservation> parentObservation();
+    QString serialNumber() throw(Isis::IException);
+    QString fileName() throw(Isis::IException);
+  };
+};
diff --git a/isis/sipfiles/BundleMeasure.sip b/isis/sipfiles/BundleMeasure.sip
new file mode 100644
index 0000000000000000000000000000000000000000..fd2a02942c43eeb0ffa8b4eed656df4059059041
--- /dev/null
+++ b/isis/sipfiles/BundleMeasure.sip
@@ -0,0 +1,30 @@
+%Include type_conversions.sip
+
+namespace Isis {
+  class BundleMeasure /NoDefaultCtors/ {
+    %TypeHeaderCode
+      #include "BundleMeasure.h"
+    %End
+
+    public:
+
+      bool isRejected() const throw(Isis::IException);
+      // Camera *camera() const;
+      // Isis::BundleControlPoint *parentControlPoint();
+      QSharedPointer<Isis::BundleImage> parentBundleImage() throw(Isis::IException);
+      // QSharedPointer<BundleObservation> parentBundleObservation();
+      // const QSharedPointer<BundleObservationSolveSettings> observationSolveSettings();
+
+      double sample() const throw(Isis::IException);
+      double sampleResidual() const throw(Isis::IException);
+      double line() const throw(Isis::IException);
+      double lineResidual() const throw(Isis::IException);
+      double residualMagnitude() const throw(Isis::IException);
+      QString cubeSerialNumber() const throw(Isis::IException);
+      double focalPlaneComputedX() const throw(Isis::IException);
+      double focalPlaneComputedY() const throw(Isis::IException);
+      double focalPlaneMeasuredX() const throw(Isis::IException);
+      double focalPlaneMeasuredY() const throw(Isis::IException);
+      int observationIndex() const throw(Isis::IException);
+  };
+};
diff --git a/isis/sipfiles/BundleObservationSolveSettings.sip b/isis/sipfiles/BundleObservationSolveSettings.sip
new file mode 100644
index 0000000000000000000000000000000000000000..89b28277c0d18004d5feb9c4c3f7542cb84cf7b6
--- /dev/null
+++ b/isis/sipfiles/BundleObservationSolveSettings.sip
@@ -0,0 +1,59 @@
+
+%Import QtCore/QtCoremod.sip
+%Import QtXml/QtXmlmod.sip
+
+namespace Isis{
+  class BundleObservationSolveSettings {
+    %TypeHeaderCode
+    #include "BundleObservationSolveSettings.h"
+    %End
+  public:
+
+    enum InstrumentPointingSolveOption {
+      NoPointingFactors          = 0, /**< Solve for none of the pointing factors.*/
+      AnglesOnly                 = 1, /**< Solve for pointing angles: right ascension, declination
+                                           and, optionally, twist.*/
+      AnglesVelocity             = 2, //!< Solve for pointing angles and their angular velocities.
+      AnglesVelocityAcceleration = 3, /**< Solve for pointing angles, their velocities and their
+                                           accelerations.*/
+      AllPointingCoefficients    = 4  /**< Solve for all coefficients in the polynomials fit to
+                                           the pointing angles.*/
+    };
+
+    //! Options for how to solve for instrument position
+    enum InstrumentPositionSolveOption {
+      NoPositionFactors            = 0, /**< Solve for none of the position factors.*/
+      PositionOnly                 = 1, /**< Solve for instrument positions only.*/
+      PositionVelocity             = 2, /**< Solve for instrument positions and velocities.*/
+      PositionVelocityAcceleration = 3, /**< Solve for instrument positions, velocities, and
+                                             accelerations.*/
+      AllPositionCoefficients      = 4  /**< Solve for all coefficients in the polynomials fit to
+                                             the instrument positions.*/
+    };
+
+    BundleObservationSolveSettings()  throw(Isis::IException);
+    InstrumentPositionSolveOption stringToInstrumentPositionSolveOption(QString option) throw(Isis::IException);
+    InstrumentPointingSolveOption stringToInstrumentPointingSolveOption(QString option) throw(Isis::IException);
+
+    void setInstrumentPositionSettings(InstrumentPositionSolveOption option,
+                                       int spkDegree = 2,
+                                       int spkSolveDegree = 2,
+                                       bool positionOverHermite = false,
+                                       double positionAprioriSigma = -1.0,
+                                       double velocityAprioriSigma = -1.0,
+                                       double accelerationAprioriSigma = -1.0)  throw(Isis::IException) /KeywordArgs="Optional"/;
+
+
+   void setInstrumentPointingSettings(InstrumentPointingSolveOption option,
+                                      bool solveTwist,
+                                      int ckDegree = 2,
+                                      int ckSolveDegree = 2,
+                                      bool solvePolynomialOverExisting = false,
+                                      double anglesAprioriSigma = -1.0,
+                                      double angularVelocityAprioriSigma = -1.0,
+                                      double angularAccelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/;
+
+
+
+  };
+};
diff --git a/isis/sipfiles/BundleResults.sip b/isis/sipfiles/BundleResults.sip
new file mode 100644
index 0000000000000000000000000000000000000000..777ae54aedd4579a6d2b6f4e3311083cf0a911ac
--- /dev/null
+++ b/isis/sipfiles/BundleResults.sip
@@ -0,0 +1,125 @@
+%Include Statistics.sip
+%Include type_conversions.sip
+
+
+namespace Isis {
+  class BundleResults : public QObject {
+    %TypeHeaderCode
+      #include "BundleResults.h"
+    %End
+
+    public:
+      BundleResults(const Isis::BundleResults &src);
+      void initialize();
+
+      void resizeSigmaStatisticsVectors(int numberImages);
+      // void setRmsImageResidualLists(QList<Isis::Statistics> rmsImageLineResiduals,
+      //                               QList<Isis::Statistics> rmsImageSampleResiduals,
+      //                               QList<Isis::Statistics> rmsImageResiduals);
+      // void setRmsImageResidualLists(QVector<Isis::Statistics> rmsImageLineResiduals,
+      //                               QVector<Isis::Statistics> rmsImageSampleResiduals,
+      //                               QVector<Isis::Statistics> rmsImageResiduals);
+      // void setSigmaLatitudeRange(Distance minLatDist, Distance maxLatDist,
+      //                            QString minLatPointId, QString maxLatPointId);
+      // void setSigmaLongitudeRange(Distance minLonDist, Distance maxLonDist,
+      //                             QString minLonPointId, QString maxLonPointId);
+      // void setSigmaRadiusRange(Distance minRadDist, Distance maxRadDist,
+      //                          QString minRadPointId, QString maxRadPointId);
+      void setRmsFromSigmaStatistics(double rmsFromSigmaLatStats,
+                                     double rmsFromSigmaLonStats,
+                                     double rmsFromSigmaRadStats);
+
+      void printMaximumLikelihoodTierInformation() throw(Isis::IException);
+      void incrementMaximumLikelihoodModelIndex() throw(Isis::IException);
+
+      void incrementFixedPoints() throw(Isis::IException);
+      int numberFixedPoints() const throw(Isis::IException);
+      void incrementHeldImages() throw(Isis::IException);
+      int numberHeldImages() const throw(Isis::IException);
+      void incrementIgnoredPoints() throw(Isis::IException);
+      int numberIgnoredPoints() const throw(Isis::IException); // currently unused ???
+      void setRejectionLimit(double rejectionLimit) throw(Isis::IException);
+      void setRmsXYResiduals(double rx, double ry, double rxy) throw(Isis::IException);
+
+      void setNumberRejectedObservations(int numberObservations) throw(Isis::IException);
+      void setNumberObservations(int numberObservations) throw(Isis::IException);
+      void setNumberImageParameters(int numberParameters) throw(Isis::IException); // ??? this is the same value an m_nRank
+      void resetNumberConstrainedPointParameters() throw(Isis::IException);
+      void incrementNumberConstrainedPointParameters(int incrementAmount) throw(Isis::IException);
+      void resetNumberConstrainedImageParameters() throw(Isis::IException);
+      void incrementNumberConstrainedImageParameters(int incrementAmount) throw(Isis::IException);
+      void resetNumberConstrainedTargetParameters() throw(Isis::IException);
+      void incrementNumberConstrainedTargetParameters(int incrementAmount) throw(Isis::IException);
+      void setNumberUnknownParameters(int numberParameters) throw(Isis::IException);
+      void computeDegreesOfFreedom() throw(Isis::IException);
+
+      void computeSigma0(double dvtpv, Isis::BundleSettings::ConvergenceCriteria criteria) throw(Isis::IException);
+      void setDegreesOfFreedom(double degreesOfFreedom) throw(Isis::IException);
+      void setSigma0(double sigma0) throw(Isis::IException);
+      void setElapsedTime(double time) throw(Isis::IException);
+      void setElapsedTimeErrorProp(double time) throw(Isis::IException);
+      void setRadiansToMeters(double rtm) throw(Isis::IException);
+      void setConverged(bool converged) throw(Isis::IException); // or initialze method
+      // void setBundleControlPoints(QVector<BundleControlPointQsp> controlPoints);
+      // void setOutputControlNet(QSharedPointer<Isis::ControlNet> outNet);
+      void setIterations(int iterations) throw(Isis::IException);
+      // void setObservations(BundleObservationVector observations) throw(Isis::IException);
+
+      QList<Isis::Statistics> rmsImageSampleResiduals() const throw(Isis::IException);
+      QList<Isis::Statistics> rmsImageLineResiduals() const throw(Isis::IException);
+      QList<Isis::Statistics> rmsImageResiduals() const throw(Isis::IException);
+      QVector<Isis::Statistics> rmsImageXSigmas() const throw(Isis::IException);       // currently unused ???
+      QVector<Isis::Statistics> rmsImageYSigmas() const throw(Isis::IException);       // currently unused ???
+      QVector<Isis::Statistics> rmsImageZSigmas() const throw(Isis::IException);       // currently unused ???
+      QVector<Isis::Statistics> rmsImageRASigmas() const throw(Isis::IException);      // currently unused ???
+      QVector<Isis::Statistics> rmsImageDECSigmas() const throw(Isis::IException);     // currently unused ???
+      QVector<Isis::Statistics> rmsImageTWISTSigmas() const throw(Isis::IException);   // currently unused ???
+
+      // Distance minSigmaLatitudeDistance() const throw(Isis::IException);
+      // Distance maxSigmaLatitudeDistance() const throw(Isis::IException);
+      // Distance minSigmaLongitudeDistance() const throw(Isis::IException);
+      // Distance maxSigmaLongitudeDistance() const throw(Isis::IException);
+      // Distance minSigmaRadiusDistance() const throw(Isis::IException);
+      // Distance maxSigmaRadiusDistance() const throw(Isis::IException);
+
+      QString maxSigmaLatitudePointId() const throw(Isis::IException);
+      QString minSigmaLatitudePointId() const throw(Isis::IException);
+      QString minSigmaLongitudePointId() const throw(Isis::IException);
+      QString maxSigmaLongitudePointId() const throw(Isis::IException);
+      QString minSigmaRadiusPointId() const throw(Isis::IException);
+      QString maxSigmaRadiusPointId() const throw(Isis::IException);
+      double sigmaLatitudeStatisticsRms() const throw(Isis::IException);
+      double sigmaLongitudeStatisticsRms() const throw(Isis::IException);
+      double sigmaRadiusStatisticsRms() const throw(Isis::IException);
+      double rmsRx() const throw(Isis::IException);  // currently unused ???
+      double rmsRy() const throw(Isis::IException);  // currently unused ???
+      double rmsRxy() const throw(Isis::IException); // currently unused ???
+      double rejectionLimit() const throw(Isis::IException);
+      double radiansToMeters() const throw(Isis::IException);
+      int numberRejectedObservations() const throw(Isis::IException);
+      int numberObservations() const throw(Isis::IException);
+
+      int numberImageParameters() const throw(Isis::IException); // ??? this is the same value an m_nRank
+      int numberConstrainedPointParameters() const throw(Isis::IException);
+      int numberConstrainedImageParameters() const throw(Isis::IException);
+      int numberConstrainedTargetParameters() const throw(Isis::IException);
+      int numberUnknownParameters() const throw(Isis::IException);
+      int degreesOfFreedom() const throw(Isis::IException);
+      double sigma0() const throw(Isis::IException);
+      double elapsedTime() const throw(Isis::IException);
+      double elapsedTimeErrorProp() const throw(Isis::IException);
+      bool converged() const throw(Isis::IException); // or initialze method
+
+      QVector<QSharedPointer<Isis::BundleControlPoint> > &bundleControlPoints();
+      QSharedPointer<Isis::ControlNet> outputControlNet() const throw(Isis::IException);
+
+      int iterations() const throw(Isis::IException);
+
+      int numberMaximumLikelihoodModels() const throw(Isis::IException);
+      int maximumLikelihoodModelIndex() const throw(Isis::IException);
+      double maximumLikelihoodMedianR2Residuals() const throw(Isis::IException);
+      double maximumLikelihoodModelQuantile(int modelIndex) const throw(Isis::IException);
+
+    };
+
+};
diff --git a/isis/sipfiles/BundleSettings.sip b/isis/sipfiles/BundleSettings.sip
new file mode 100644
index 0000000000000000000000000000000000000000..b6f9799ab4ee37c1413122dbb13b4cd5c1959683
--- /dev/null
+++ b/isis/sipfiles/BundleSettings.sip
@@ -0,0 +1,113 @@
+%Include BundleObservationSolveSettings.sip
+%Include MaximumLikelihoodWFunctions.sip
+
+%Include type_conversions.sip
+
+namespace Isis {
+
+  class BundleSettings  {
+    %TypeHeaderCode
+    #include "BundleSettings.h"
+    #include "BundleObservationSolveSettings.h"
+    #include <QList>
+    %End
+  public:
+
+    enum ConvergenceCriteria {
+      Sigma0,              /**< The value of sigma0 will be used to determine that the bundle
+                                adjustment has converged.*/
+      ParameterCorrections /**< All parameter corrections will be used to determine that the
+                                bundle adjustment has converged.*/
+    };
+
+    // enum MaximumLikelihoodModel {
+    //   NoMaximumLikelihoodEstimator,
+    //   Huber,
+    //   ModifiedHuber,
+    //   Welsch,
+    //   Chen
+    // };
+
+    BundleSettings() throw(Isis::IException);
+
+    void setValidateNetwork(bool) throw(Isis::IException);
+
+    void setSolveOptions(bool solveObservationMode = false,
+                         bool updateCubeLabel = false,
+                         bool errorPropagation = false,
+                         bool solveRadius = false,
+                         double globalLatitudeAprioriSigma = Isis::Null,
+                         double globalLongitudeAprioriSigma = Isis::Null,
+                         double globalRadiusAprioriSigma = Isis::Null)  throw(Isis::IException) /KeywordArgs="Optional"/;
+
+   void setOutlierRejection(bool outlierRejection,
+                            double multiplier = 1.0) throw(Isis::IException);
+
+   bool solveObservationMode() const throw(Isis::IException);
+   bool solveRadius() const throw(Isis::IException);
+   bool updateCubeLabel() const throw(Isis::IException);
+   bool errorPropagation() const throw(Isis::IException);
+   bool outlierRejection() const throw(Isis::IException);
+   double outlierRejectionMultiplier() const throw(Isis::IException);
+   double globalLatitudeAprioriSigma() const throw(Isis::IException);
+   double globalLongitudeAprioriSigma() const throw(Isis::IException);
+   double globalRadiusAprioriSigma() const throw(Isis::IException);
+
+   int numberSolveSettings() const throw(Isis::IException);
+   Isis::BundleObservationSolveSettings observationSolveSettings(QString instrumentId) const throw(Isis::IException);
+   Isis::BundleObservationSolveSettings observationSolveSettings(int n) const throw(Isis::IException);
+
+   void setObservationSolveOptions(QList<Isis::BundleObservationSolveSettings>);
+  //  %MethodCode
+  //    Py_ssize_t size = PyList_Size(a0);
+  //    QList<Isis::BundleObservationSolveSettings> *cppSettingsList = new QList<Isis::BundleObservationSolveSettings>();
+  //    int sipErr = 0;
+  //    for(int i = 0; i < size; i++) {
+  //      PyObject *pyStat = PyList_GET_ITEM(a0, i);
+  //      Isis::BundleObservationSolveSettings *settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pyStat, sipType_Isis_BundleObservationSolveSettings, NULL, SIP_NOT_NONE, NULL, &sipErr);
+  //      cppSettingsList->append(*settings);
+  //    }
+  //
+  //    sipCpp->setObservationSolveOptions(*cppSettingsList);
+  //  %End
+
+   SIP_PYLIST maximumLikelihoodEstimatorModels() const throw(Isis::IException);
+   %MethodCode // convert QList<QPair> to Python list if tuples
+     typedef Isis::MaximumLikelihoodWFunctions::Model Model;
+     size_t size = sipCpp->maximumLikelihoodEstimatorModels().size();
+     PyObject *l = PyList_New(size);
+     for (size_t i = 0; i < size; ++i) {
+       // get the two items from the QPair
+       Model *model = new Model(sipCpp->maximumLikelihoodEstimatorModels()[i].first);
+       double doubl = sipCpp->maximumLikelihoodEstimatorModels()[i].second;
+
+       // Convert the two items to PyObjects
+       PyObject *first = sipConvertFromType((void*)(model), sipType_Isis_MaximumLikelihoodWFunctions_Model, NULL);
+       PyObject *second = PyFloat_FromDouble(doubl);
+
+       // set the tuple items
+       PyObject *tuple = PyTuple_New(2);
+       PyTuple_SetItem(tuple, 0, first);
+       PyTuple_SetItem(tuple, 1, second);
+
+       // Add new tuple to list
+       PyList_SetItem(l, i, tuple);
+     }
+     return l;
+   %End
+
+
+   int numberTargetBodyParameters() const throw(Isis::IException);
+   bool solveTargetBody() const throw(Isis::IException);
+   bool solvePoleRA() const throw(Isis::IException);
+   bool solvePoleRAVelocity() const throw(Isis::IException);
+   bool solvePoleDec() const throw(Isis::IException);
+   bool solvePoleDecVelocity() const throw(Isis::IException);
+   bool solvePM() const throw(Isis::IException);
+   bool solvePMVelocity() const throw(Isis::IException);
+   bool solvePMAcceleration() const throw(Isis::IException);
+   bool solveTriaxialRadii() const throw(Isis::IException);
+   bool solveMeanRadius() const throw(Isis::IException);
+
+  };
+};
diff --git a/isis/sipfiles/BundleSolutionInfo.sip b/isis/sipfiles/BundleSolutionInfo.sip
new file mode 100644
index 0000000000000000000000000000000000000000..a43fba1bd763c1169b861bc4bccdda657682f149
--- /dev/null
+++ b/isis/sipfiles/BundleSolutionInfo.sip
@@ -0,0 +1,26 @@
+
+%Include type_conversions.sip
+
+namespace Isis{
+
+class BundleSolutionInfo : public QObject {
+  %TypeHeaderCode
+    #include "BundleSolutionInfo.h"
+  %End
+
+ public:
+   // do constructor since at the moment there doesn't seem to be a reason to contruct it directly in the python side
+   void setOutputStatistics(Isis::BundleResults statisticsResults) throw(Isis::IException);
+   void setRunTime(QString runTime) throw(Isis::IException);
+
+   QString id() const throw(Isis::IException);
+   QSharedPointer<Isis::BundleSettings> bundleSettings() throw(Isis::IException);
+   Isis::BundleResults bundleResults() throw(Isis::IException);
+   QString runTime() const throw(Isis::IException);
+
+   bool outputText() throw(Isis::IException);
+   bool outputPointsCSV() throw(Isis::IException);
+   bool outputResiduals() throw(Isis::IException);
+
+  }; // end namespace Isis
+};
diff --git a/isis/sipfiles/ControlNet.sip b/isis/sipfiles/ControlNet.sip
new file mode 100644
index 0000000000000000000000000000000000000000..73408334cfc579dcb622c8376853677b9ff805d2
--- /dev/null
+++ b/isis/sipfiles/ControlNet.sip
@@ -0,0 +1,31 @@
+namespace Isis {
+  class ControlNet : public QObject {
+    %TypeHeaderCode
+    #include "ControlNet.h"
+    %End
+    public:
+      ControlNet() throw(Isis::IException);
+      ControlNet(const Isis::ControlNet &other) throw(Isis::IException);
+
+      void clear() throw(Isis::IException);
+
+      void Write(const QString &filename, bool pvl = false) throw(Isis::IException);
+
+      double GetMaximumResidual() throw(Isis::IException);
+      QString GetNetworkId() const throw(Isis::IException);
+      int GetNumEditLockMeasures() throw(Isis::IException);
+      int GetNumEditLockPoints() throw(Isis::IException);
+      int GetNumIgnoredMeasures() throw(Isis::IException);
+      int GetNumberOfValidMeasuresInImage(const QString &serialNumber) throw(Isis::IException);
+      int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException);
+      void ClearJigsawRejected() throw(Isis::IException);
+      void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException);
+      void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException);
+      int GetNumMeasures() const throw(Isis::IException);
+      int GetNumPoints() const throw(Isis::IException);
+      int GetNumValidMeasures() throw(Isis::IException);
+      int GetNumValidPoints() throw(Isis::IException);
+      QString GetTarget() const throw(Isis::IException);
+      QString GetUserName() const throw(Isis::IException);
+    };
+};
diff --git a/isis/sipfiles/ControlPoint.sip b/isis/sipfiles/ControlPoint.sip
new file mode 100644
index 0000000000000000000000000000000000000000..8dd80250aa2d52a8f4348137ae41d44a05a76e34
--- /dev/null
+++ b/isis/sipfiles/ControlPoint.sip
@@ -0,0 +1,302 @@
+namespace Isis {
+
+  class ControlPoint : public QObject {
+    %TypeHeaderCode
+      #include "ControlPoint.h"
+    %End
+    public:
+      enum PointType {
+        Fixed = 0,
+        Constrained = 1,
+        Free = 2
+      };
+
+
+      enum Status {
+        Failure,
+        Success,
+        PointLocked
+      };
+
+      enum ConstraintStatus {
+        LatitudeConstrained = 0,
+        LongitudeConstrained = 1,
+        RadiusConstrained = 2,
+//      XConstrained = 3,
+//      YConstrained = 4,
+//      ZConstrained = 5;
+      };
+
+      // This stuff input to jigsaw
+      // How did apriori source get computed??
+      struct SurfacePointSource {
+        enum Source {
+          None,
+          User,
+          AverageOfMeasures,
+          Reference,
+          Basemap,
+          BundleSolution
+        };
+      };
+
+      struct RadiusSource {
+        enum Source {
+          None,
+          User,
+          AverageOfMeasures,
+          Ellipsoid,
+          DEM,
+          BundleSolution
+        };
+      };
+
+      ControlPoint() throw(Isis::IException);
+      ControlPoint(const QString &id) throw(Isis::IException);
+
+      // Isis::ControlNet *Parent() { return parentNetwork; }
+
+      // void Load(PvlObject &p) throw(Isis::IException);
+
+      // void Add(ControlMeasure *measure) throw(Isis::IException);
+      // int Delete(ControlMeasure *measure) throw(Isis::IException);
+      // int Delete(QString serialNumber) throw(Isis::IException);
+      // int Delete(int index) throw(Isis::IException);
+      // Status ResetApriori() throw(Isis::IException);
+
+      // const Isis::ControlMeasure *GetMeasure(QString serialNumber) const throw(Isis::IException);
+      // ControlMeasure *GetMeasure(QString serialNumber) throw(Isis::IException);
+
+      // const ControlMeasure *GetMeasure(int index) const throw(Isis::IException);
+      // ControlMeasure *GetMeasure(int index) throw(Isis::IException);
+
+      // const ControlMeasure *GetRefMeasure() const throw(Isis::IException);
+      // ControlMeasure *GetRefMeasure() throw(Isis::IException);
+
+      // Status SetChooserName(QString name) throw(Isis::IException);
+      // Status SetDateTime(QString newDateTime) throw(Isis::IException);
+      // Status SetEditLock(bool editLock) throw(Isis::IException);
+      // Status SetId(QString id) throw(Isis::IException);
+      // Status SetRefMeasure(ControlMeasure *cm) throw(Isis::IException);
+      // Status SetRefMeasure(int index) throw(Isis::IException);
+      // Status SetRefMeasure(QString sn) throw(Isis::IException);
+      // Status SetRejected(bool rejected) throw(Isis::IException);
+      // Status SetIgnored(bool newIgnoreStatus) throw(Isis::IException);
+      // Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint) throw(Isis::IException);
+      // Status SetType(PointType newType) throw(Isis::IException);
+      //
+      // Status SetAprioriRadiusSource(RadiusSource::Source source) throw(Isis::IException);
+      // Status SetAprioriRadiusSourceFile(QString sourceFile) throw(Isis::IException);
+      // Status SetAprioriSurfacePoint(SurfacePoint aprioriSP) throw(Isis::IException);
+      // Status SetAprioriSurfacePointSource(SurfacePointSource::Source source) throw(Isis::IException);
+      // Status SetAprioriSurfacePointSourceFile(QString sourceFile) throw(Isis::IException);
+
+      // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon,
+      //             const Distance &radius) throw(Isis::IException);
+
+      // Status ComputeApriori() throw(Isis::IException);
+      // Status ComputeResiduals() throw(Isis::IException);
+      // Status ComputeResiduals_Millimeters() throw(Isis::IException);
+      //
+      // SurfacePoint GetAdjustedSurfacePoint() const throw(Isis::IException);
+      // SurfacePoint GetBestSurfacePoint() const throw(Isis::IException);
+
+      QString GetChooserName() const throw(Isis::IException);
+      QString GetDateTime() const throw(Isis::IException);
+      bool IsEditLocked() const throw(Isis::IException);
+      bool IsRejected() const throw(Isis::IException);
+      QString GetId() const throw(Isis::IException);
+      bool IsIgnored() const throw(Isis::IException);
+      bool IsValid() const throw(Isis::IException);
+      bool IsInvalid() const throw(Isis::IException);
+      bool IsFixed() const throw(Isis::IException);
+
+      bool HasAprioriCoordinates() throw(Isis::IException);
+      bool IsConstrained() throw(Isis::IException);
+      bool IsLatitudeConstrained() throw(Isis::IException);
+      bool IsLongitudeConstrained() throw(Isis::IException);
+      bool IsRadiusConstrained() throw(Isis::IException);
+      int NumberOfConstrainedCoordinates() throw(Isis::IException);
+
+      static QString PointTypeToString(PointType type) throw(Isis::IException);
+      static PointType StringToPointType(QString pointTypeString) throw(Isis::IException);
+
+      QString GetPointTypeString() const throw(Isis::IException);
+      // PointType GetType() const throw(Isis::IException);
+
+      static QString RadiusSourceToString(RadiusSource::Source source) throw(Isis::IException);
+      static RadiusSource::Source StringToRadiusSource(QString str) throw(Isis::IException);
+      QString GetRadiusSourceString() const throw(Isis::IException);
+      static QString SurfacePointSourceToString(SurfacePointSource::Source source) throw(Isis::IException);
+      // static SurfacePointSource::Source StringToSurfacePointSource(QString str) throw(Isis::IException);
+      QString GetSurfacePointSourceString() const throw(Isis::IException);
+
+      // SurfacePoint GetAprioriSurfacePoint() const throw(Isis::IException);
+      // RadiusSource::Source GetAprioriRadiusSource() const throw(Isis::IException);
+      // QString GetAprioriRadiusSourceFile() const throw(Isis::IException);
+      // SurfacePointSource::Source GetAprioriSurfacePointSource() const throw(Isis::IException);
+      // QString GetAprioriSurfacePointSourceFile() const throw(Isis::IException);
+
+      int GetNumMeasures() const throw(Isis::IException);
+      int GetNumValidMeasures() const throw(Isis::IException);
+      int GetNumLockedMeasures() const throw(Isis::IException);
+      bool HasSerialNumber(QString serialNumber) const throw(Isis::IException);
+      // int IndexOf(ControlMeasure *, bool throws = true) const throw(Isis::IException);
+      int IndexOf(QString sn, bool throws = true) const throw(Isis::IException);
+      int IndexOfRefMeasure() const throw(Isis::IException);
+      bool IsReferenceExplicit() const throw(Isis::IException);
+      QString GetReferenceSN() const throw(Isis::IException);
+
+      // Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const throw(Isis::IException);
+      // Statistics GetStatistic(long dataType) const throw(Isis::IException);
+
+      // QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const throw(Isis::IException);
+      // QList< QString > getCubeSerialNumbers() const throw(Isis::IException);
+
+      // const ControlMeasure *operator[](QString serialNumber) const throw(Isis::IException);
+      // ControlMeasure *operator[](QString serialNumber) throw(Isis::IException);
+
+      // const ControlMeasure *operator[](int index) const throw(Isis::IException);
+      // ControlMeasure *operator[](int index) throw(Isis::IException);
+
+      // bool operator!=(const ControlPoint &pPoint) const throw(Isis::IException);
+      // bool operator==(const ControlPoint &pPoint) const throw(Isis::IException);
+      // const ControlPoint &operator=(const ControlPoint &pPoint) throw(Isis::IException);
+
+      // The next 7 methods are specifically to support BundleAdjust
+      void ZeroNumberOfRejectedMeasures() throw(Isis::IException);
+      void SetNumberOfRejectedMeasures(int numRejected) throw(Isis::IException);
+      int GetNumberOfRejectedMeasures() const throw(Isis::IException);
+      double GetSampleResidualRms() const throw(Isis::IException);
+      double GetLineResidualRms() const throw(Isis::IException);
+      double GetResidualRms() const throw(Isis::IException);
+      void ClearJigsawRejected() throw(Isis::IException);
+
+      // ControlPointFileEntryV0002 ToFileEntry() const throw(Isis::IException);
+
+    private:
+      // void SetExplicitReference(ControlMeasure *measure) throw(Isis::IException);
+      void ValidateMeasure(QString serialNumber) const throw(Isis::IException);
+      // void AddMeasure(ControlMeasure *measure) throw(Isis::IException);
+      void PointModified() throw(Isis::IException);
+
+
+    // private:
+    //   ControlNet *parentNetwork;
+    //
+    //   //!< List of Control Measures
+    //   QHash< QString, ControlMeasure * > * measures;
+    //
+    //   QStringList *cubeSerials;
+    //
+    //   ControlMeasure *referenceMeasure;
+    //
+    //   /**
+    //    * This is the control point ID. This is supposed to be a unique
+    //    *   identifier for control points. This often has a number in it, and
+    //    *   looks like "T0052" where the next one is "T0053" and so on.
+    //    */
+    //   QString id;
+    //
+    //   /**
+    //    * This is the user name of the person who last modified this control
+    //    *   point. Modifications are things like updating the surface point, but
+    //    *   not things like updating the last modified time. The calculations
+    //    *   relating to this control point have to actually change for this to
+    //    *   be updated. This is an empty string if we need to dynamically
+    //    *   get the username of the caller when asked for (or written to file).
+    //    */
+    //   QString chooserName;
+    //
+    //   /**
+    //    * This is the last modified date and time. This is updated automatically
+    //    *   and works virtually in the same way as chooserName.
+    //    */
+    //   QString dateTime;
+    //
+    //   /**
+    //    * What this control point is tying together.
+    //    * @see PointType
+    //    */
+    //   PointType type;
+    //
+    //   /**
+    //    * If we forced a build that we would normally have thrown an exception
+    //    *   for then this is set to true. Otherwise, and most of the time, this
+    //    *   is false.
+    //    */
+    //   bool invalid;
+    //
+    //   /**
+    //    * This stores the edit lock state.
+    //    * @see SetEditLock
+    //    */
+    //   bool editLock;
+    //
+    //   /**
+    //    * This stores the jigsaw rejected state.
+    //    * @see SetJigsawReject
+    //    */
+    //   bool jigsawRejected;
+    //
+    //   /**
+    //    * This stores the constraint status of the a priori SurfacePoint
+    //    *   @todo Eventually add x, y, and z
+    //    */
+    //   std::bitset<6> constraintStatus;
+    //
+    //   /**
+    //    * This indicates if a program has explicitely set the reference in this
+    //    *   point or the implicit reference is still the current reference. This
+    //    *   is useful for programs that want to choose the reference for all
+    //    *   points where this hasn't happened yet.
+    //    */
+    //   bool referenceExplicitlySet;
+    //
+    //   /**
+    //    * True if we should preserve but ignore the entire control point and its
+    //    *   measures.
+    //    */
+    //   bool ignore;
+    //
+    //   //! Where the apriori surface point originated from
+    //   SurfacePointSource::Source aprioriSurfacePointSource;
+    //
+    //   //! FileName where the apriori surface point originated from
+    //   QString aprioriSurfacePointSourceFile;
+    //
+    //   /**
+    //    * Where the apriori surface point's radius originated from, most commonly
+    //    *   used by jigsaw.
+    //    */
+    //   RadiusSource::Source aprioriRadiusSource;
+    //
+    //   /**
+    //    * The name of the file that derives the apriori surface point's radius
+    //    */
+    //   QString aprioriRadiusSourceFile;
+    //
+    //   /**
+    //    * The apriori surface point. This is the "known truth" or trustworthy
+    //    *   point that should not be modified unless done very explicitely. This
+    //    *   comes from places like hand picking where you really don't want the
+    //    *   surface point to vary far from this point, but some variation is
+    //    *   okay (1/10th of a pixel is fair for human accuracy for example). Very
+    //    *   often this point does not exist.
+    //    */
+    //   SurfacePoint aprioriSurfacePoint;
+    //
+    //   /**
+    //    * This is the calculated, or aposterori, surface point. This is what most
+    //    *   programs should be working with and updating.
+    //    */
+    //   SurfacePoint adjustedSurfacePoint;
+    //
+    //   /**
+    //    * This parameter is used and maintained by BundleAdjust for the jigsaw
+    //    * application.  It is stored here because ControlPoint contains the index
+    //    * of the measures.
+    //    */
+    //   int numberOfRejectedMeasures;
+  };
+};
diff --git a/isis/sipfiles/MaximumLikelihoodWFunctions.sip b/isis/sipfiles/MaximumLikelihoodWFunctions.sip
new file mode 100644
index 0000000000000000000000000000000000000000..cbc668d80d58796b89d7039716272285704aad0e
--- /dev/null
+++ b/isis/sipfiles/MaximumLikelihoodWFunctions.sip
@@ -0,0 +1,52 @@
+namespace Isis {
+
+  class MaximumLikelihoodWFunctions {
+    %TypeHeaderCode
+    #include "MaximumLikelihoodWFunctions.h"
+    %End
+
+  public:
+
+    enum Model {
+      Huber,
+      HuberModified,
+      Welsch,
+      Chen
+    };
+
+    static QString modelToString(Model model) throw(Isis::IException);
+    static Isis::MaximumLikelihoodWFunctions::Model stringToModel(QString modelName) throw(Isis::IException);
+
+    MaximumLikelihoodWFunctions() throw(Isis::IException);
+    MaximumLikelihoodWFunctions(Model modelSelection) throw(Isis::IException);
+    MaximumLikelihoodWFunctions(Model modelSelection, double tweakingConstant) throw(Isis::IException);
+    MaximumLikelihoodWFunctions(const Isis::MaximumLikelihoodWFunctions &other) throw(Isis::IException);
+
+    void setModel(Model modelSelection) throw(Isis::IException); // uses default tweaking constant
+    void setTweakingConstantDefault() throw(Isis::IException);
+
+    void setModel(Model modelSelection, double tweakingConstant) throw(Isis::IException);
+    void setTweakingConstant(double tweakingConstant) throw(Isis::IException);
+
+    Model model() const throw(Isis::IException);
+    double tweakingConstant() const throw(Isis::IException);
+
+    // the W functions provide an additional weighting factor W which is used
+    // to 're-weight' each observation dynamically during an adjustment, the
+    // scalar functions provide access to various flavors of this scalar (as
+    // a function of the residual divided by the residuals sigma)
+
+    double sqrtWeightScaler(double residualZScore) throw(Isis::IException); //it is often convient to use square roots of
+                                                    //weights when building normals, this function
+                                                    // provides the scaler for the square root of
+                                                    // the weight directly
+    double tweakingConstantQuantile() throw(Isis::IException); // returns which quantile of the residuals is recommended to
+                                       // use as the tweaking constant, this varies as a function of
+                                       // the model being employed
+
+    QString weightedResidualCutoff() throw(Isis::IException);
+
+    QDataStream &write(QDataStream &stream) const throw(Isis::IException);
+    QDataStream &read(QDataStream &stream) throw(Isis::IException);
+  };
+};
diff --git a/isis/sipfiles/Statistics.sip b/isis/sipfiles/Statistics.sip
new file mode 100644
index 0000000000000000000000000000000000000000..089b76a636977a614cae8812eacdf742b74263e7
--- /dev/null
+++ b/isis/sipfiles/Statistics.sip
@@ -0,0 +1,41 @@
+
+namespace Isis {
+  class Statistics : public QObject {
+    %TypeHeaderCode
+      #include "Statistics.h"
+    %End
+    public:
+      Statistics(const Isis::Statistics &other) throw(Isis::IException);
+
+      void Reset() throw(Isis::IException);
+
+      void AddData(const double *data, const unsigned int count) throw(Isis::IException);
+      void AddData(const double data) throw(Isis::IException);
+
+      void RemoveData(const double *data, const unsigned int count) throw(Isis::IException);
+      void RemoveData(const double data) throw(Isis::IException);
+
+      double ValidMinimum() const throw(Isis::IException);
+      double ValidMaximum() const throw(Isis::IException);
+      bool InRange(const double value) throw(Isis::IException);
+      bool AboveRange(const double value) throw(Isis::IException);
+      bool BelowRange(const double value) throw(Isis::IException);
+
+      double Average() const throw(Isis::IException);
+      double StandardDeviation() const throw(Isis::IException);
+      double Variance() const throw(Isis::IException);
+      double Sum() const throw(Isis::IException);
+      double SumSquare() const throw(Isis::IException);
+      double Rms() const throw(Isis::IException);
+
+      double Minimum() const throw(Isis::IException);
+      double Maximum() const throw(Isis::IException);
+      double ChebyshevMinimum(const double percent = 99.5) const throw(Isis::IException);
+      double ChebyshevMaximum(const double percent = 99.5) const throw(Isis::IException);
+      double BestMinimum(const double percent = 99.5) const throw(Isis::IException);
+      double BestMaximum(const double percent = 99.5) const throw(Isis::IException);
+      double ZScore(const double value) const throw(Isis::IException);
+
+      bool RemovedData() const throw(Isis::IException);
+    };
+};
diff --git a/isis/sipfiles/master.sip b/isis/sipfiles/master.sip
new file mode 100644
index 0000000000000000000000000000000000000000..2cdb950c9cb1b90d2b3d9339ffc009ad26cbee7c
--- /dev/null
+++ b/isis/sipfiles/master.sip
@@ -0,0 +1,75 @@
+%Module(name=libisispy,
+        version=0,
+        keyword_arguments="Optional")
+
+%ExportedHeaderCode
+  #include <glob.h>
+  #include <iostream>
+  #include <QLibrary>
+  #include <QString>
+  #include <QFileInfo>
+
+  using namespace std;
+
+  // Wraps glob to return a STD vector to avoid dealing with C style globbing
+  inline vector<QString> glob(const QString& pat){
+    glob_t glob_result;
+    glob(pat.toLatin1().data(),GLOB_TILDE,NULL,&glob_result);
+    vector<QString> ret;
+    for(unsigned int i=0;i<glob_result.gl_pathc;++i){
+        ret.push_back(QString(glob_result.gl_pathv[i]));
+    }
+    globfree(&glob_result);
+    return ret;
+  }
+
+  // Loads library files which match the given regex.
+  // All files matching regex are piped into QLibrary and Loaded.
+  //
+  // If verbose = true, it wil print every file followed by OK or FAILED
+  // which indicates a successful load. If unsuccessful, it also prints
+  // an error message for context.
+  inline void load_libs(const QString& pat, bool verbose=false) {
+    vector<QString> libs = glob(pat);
+    QLibrary lib_loader;
+
+    for (vector<QString>::const_iterator i = libs.begin(); i != libs.end(); ++i) {
+      // Strip extension
+      QFileInfo file(*i);
+      QString lib_dir = file.path() + "/" + file.completeBaseName();
+
+      lib_loader.setFileName(lib_dir);
+
+      // Load hint required for symbols to be accessible to other libraries loaded later
+      lib_loader.setLoadHints(QLibrary::ExportExternalSymbolsHint);
+
+      bool load_ok = lib_loader.load();
+
+      // if verbose is true, print out load info
+      if (verbose) {
+        if (load_ok) {
+          cout << "Loaded " + lib_dir.toStdString() + " : OK" << endl;
+        }
+        else if (!load_ok) {
+          cout << "Loaded " + lib_dir.toStdString() + " : FAILED" << endl
+               << lib_loader.errorString().toStdString() << endl;
+        }
+      }
+    }
+  }
+%End
+
+%Include type_conversions.sip
+
+%Include ControlPoint.sip
+%Include BundleMeasure.sip
+%Include BundleControlPoint.sip
+%Include BundleImage.sip
+%Include ControlNet.sip
+%Include Statistics.sip
+%Include BundleResults.sip
+%Include BundleSolutionInfo.sip
+%Include BundleObservationSolveSettings.sip
+%Include BundleSettings.sip
+%Include BundleAdjust.sip
+%Include MaximumLikelihoodWFunctions.sip
diff --git a/isis/sipfiles/type_conversions.sip b/isis/sipfiles/type_conversions.sip
new file mode 100644
index 0000000000000000000000000000000000000000..7a337c444f80e475d9510e0081d7551d46f24f74
--- /dev/null
+++ b/isis/sipfiles/type_conversions.sip
@@ -0,0 +1,292 @@
+
+%Import QtCore/QtCoremod.sip
+%Import QtXml/QtXmlmod.sip
+
+
+
+%Exception Isis::IException(SIP_Exception) /PyName=IException/
+{
+%TypeHeaderCode
+#include "IException.h"
+%End
+%RaiseCode
+    const char *detail = sipExceptionRef.what();
+
+    SIP_BLOCK_THREADS
+    PyErr_SetString(sipException_Isis_IException, detail);
+    SIP_UNBLOCK_THREADS
+%End
+};
+
+
+%MappedType QVector<QSharedPointer<Isis::BundleControlPoint> >
+{
+  %TypeHeaderCode
+    #include "BundleControlPoint.h"
+    #include <QList>
+  %End
+
+  %ConvertFromTypeCode
+    size_t size = sipCpp->size();
+    PyObject *l = PyList_New(size);
+    for (size_t i = 0; i < size; ++i) {
+
+      Isis::BundleControlPoint* cppCPoint = sipCpp->at(i).data();
+
+      PyObject *pyCPoint = sipConvertFromType((void*)(cppCPoint), sipType_Isis_BundleControlPoint, NULL);
+      PyList_SetItem(l, i, pyCPoint);
+    }
+
+    return l;
+  %End
+
+  %ConvertToTypeCode
+    Py_ssize_t size = PyList_Size(sipPy);
+    QVector<QSharedPointer<Isis::BundleControlPoint> > *cppPointList = new QVector<QSharedPointer<Isis::BundleControlPoint> > ();
+    int sipErr = 0;
+    for(int i = 0; i < size; i++) {
+      PyObject *pyCPoint = PyList_GET_ITEM(sipPy, i);
+      Isis::BundleControlPoint *cppCPoint = (Isis::BundleControlPoint*)sipConvertToType(pyCPoint, sipType_Isis_BundleControlPoint, NULL, SIP_NOT_NONE, NULL, &sipErr);
+      cppPointList->append(QSharedPointer<Isis::BundleControlPoint>(cppCPoint));
+    }
+
+    *sipCppPtr = cppPointList;
+    return sipGetState(sipTransferObj);
+  %End
+
+};
+
+%MappedType QList<Isis::Statistics>
+{
+  %TypeHeaderCode
+  #include "Statistics.h"
+  #include <QList>
+  %End
+
+  %ConvertFromTypeCode
+    size_t size = sipCpp->size();
+    PyObject *l = PyList_New(size);
+    for (size_t i = 0; i < size; ++i) {
+      Isis::Statistics* cppStats = new Isis::Statistics(sipCpp->at(i));
+      PyObject *pyStats = sipConvertFromType((void*)(cppStats), sipType_Isis_Statistics, NULL);
+      PyList_SetItem(l, i, pyStats);
+    }
+
+    return l;
+  %End
+
+  %ConvertToTypeCode
+    Py_ssize_t size = PyList_Size(sipPy);
+    QList<Isis::Statistics> *cppStatList = new QList<Isis::Statistics>();
+    int sipErr = 0;
+    for(int i = 0; i < size; i++) {
+      PyObject *pyStat = PyList_GET_ITEM(sipPy, i);
+      Isis::Statistics *stats = (Isis::Statistics*)sipConvertToType(pyStat, sipType_Isis_Statistics, NULL, SIP_NOT_NONE, NULL, &sipErr);
+      cppStatList->append(*stats);
+    }
+
+    *sipCppPtr = cppStatList;
+    return sipGetState(sipTransferObj);
+  %End
+};
+
+
+
+%MappedType QList<Isis::BundleObservationSolveSettings>
+{
+  %TypeHeaderCode
+  #include "BundleObservationSolveSettings.h"
+  #include <QList>
+  %End
+
+  %ConvertFromTypeCode
+    PyObject *l;
+
+    // Create the Python list of the correct length.
+    if ((l = PyList_New(sipCpp->size())) == NULL)
+        return NULL;
+
+    for (int i = 0; i < sipCpp->size(); ++i) {
+      Isis::BundleObservationSolveSettings *settings = new Isis::BundleObservationSolveSettings(sipCpp->at(i));
+
+      PyObject *pySettings = sipConvertFromType((void*)(settings), sipType_Isis_BundleObservationSolveSettings, NULL);
+      PyList_SetItem(l, i, pySettings);
+    }
+
+    return l;
+  %End
+
+
+  %ConvertToTypeCode
+    if (!sipIsErr) {
+        if (!PyList_Check(sipPy))
+            return 0;
+
+        for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+            if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i),
+                                     sipType_Isis_BundleObservationSolveSettings, SIP_NOT_NONE))
+                return 0;
+
+        return 1;
+    }
+
+    Py_ssize_t size = PyList_Size(sipPy);
+
+    QList<Isis::BundleObservationSolveSettings> *cppSettingsList = new QList<Isis::BundleObservationSolveSettings>();
+    int state;
+
+    for(Py_ssize_t i = 0; i < size; i++) {
+      PyObject *pySettings = PyList_GET_ITEM(sipPy, i);
+      Isis::BundleObservationSolveSettings *settings;
+
+      settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pySettings, sipType_Isis_BundleObservationSolveSettings, 0, SIP_NOT_NONE, &state, sipIsErr);
+
+      if (*sipIsErr) {
+          sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state);
+          delete cppSettingsList;
+          return 0;
+      }
+
+      cppSettingsList->append(*settings);
+      sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state);
+    }
+
+    *sipCppPtr = cppSettingsList;
+    return sipGetState(sipTransferObj);
+  %End
+};
+
+// convert Bundlesettings wrapped in a QSharedPointer in Isis
+%MappedType QSharedPointer<Isis::BundleImage>
+{
+  %TypeHeaderCode
+  #include "BundleImage.h"
+  #include <QSharedPointer>
+  %End
+
+  %ConvertFromTypeCode
+    Isis::BundleImage *cpp = sipCpp->data();
+    PyObject *py = sipConvertFromType(cpp, sipType_Isis_BundleImage, NULL);
+    return py;
+  %End
+
+  %ConvertToTypeCode
+    int sipErr = 0;
+    QSharedPointer<Isis::BundleImage>* cpp_qsp = new QSharedPointer<Isis::BundleImage>();
+    Isis::BundleImage *cpp = (Isis::BundleImage*)sipConvertToType(sipPy, sipType_Isis_BundleImage, NULL, SIP_NOT_NONE, NULL, &sipErr);
+    cpp_qsp->reset(cpp);
+    *sipCppPtr = cpp_qsp;
+
+    return sipGetState(sipTransferObj);
+  %End
+};
+
+
+// convert Bundlesettings wrapped in a QSharedPointer in Isis
+%MappedType QSharedPointer<Isis::BundleSettings>
+{
+  %TypeHeaderCode
+  #include "BundleSettings.h"
+  #include <QSharedPointer>
+  using namespace std;
+  %End
+
+  %ConvertFromTypeCode
+    Isis::BundleSettings *settings = sipCpp->data();
+    PyObject *pySettings = sipConvertFromType(settings, sipType_Isis_BundleSettings, NULL);
+    return pySettings;
+  %End
+
+  %ConvertToTypeCode
+    int sipErr = 0;
+    QSharedPointer<Isis::BundleSettings>* wrappedSettings = new QSharedPointer<Isis::BundleSettings>();
+
+    Isis::BundleSettings *settings = (BundleSettings*) sipConvertToType(sipPy, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr);
+    wrappedSettings->reset(settings);
+    *sipCppPtr = wrappedSettings;
+
+    return sipGetState(sipTransferObj);
+  %End
+};
+
+
+// convert Bundlesettings wrapped in a QSharedPointer in Isis
+%MappedType QSharedPointer<Isis::ControlNet>
+{
+  %TypeHeaderCode
+  #include "ControlNet.h"
+  #include <QSharedPointer>
+  using namespace std;
+  %End
+
+  %ConvertFromTypeCode
+    PyObject *pySettings = sipConvertFromType(sipCpp, sipType_Isis_ControlNet, NULL);
+    return pySettings;
+  %End
+
+  %ConvertToTypeCode
+    int sipErr = 0;
+    QSharedPointer<Isis::ControlNet> *qspControlNet = NULL;
+    if (!sipCanConvertToType(sipPy, sipType_Isis_ControlNet, SIP_NOT_NONE)) {
+        sipErr = 1;
+    }
+    else {
+        Isis::ControlNet *cppControlNet = (Isis::ControlNet*)sipConvertToType(sipPy, sipType_Isis_ControlNet, NULL, SIP_NOT_NONE, NULL, &sipErr);
+        qspControlNet->reset(cppControlNet);
+    }
+
+    *sipCppPtr = qspControlNet;
+    return sipGetState(sipTransferObj);
+  %End
+};
+
+
+
+// Convert a python str object to a std::string.
+%MappedType std::string
+{
+  %TypeHeaderCode
+  #include <string>
+  %End
+
+  %ConvertFromTypeCode
+      // convert an std::string to a Python (unicode) string
+      PyObject* newstring;
+      newstring = PyUnicode_DecodeUTF8(sipCpp->c_str(), sipCpp->length(), NULL);
+      if(newstring == NULL) {
+          PyErr_Clear();
+          newstring = PyBytes_FromString(sipCpp->c_str());
+      }
+      return newstring;
+  %End
+
+  %ConvertToTypeCode
+      // Allow a Python string (or a unicode string) whenever a string is
+      // expected.
+      // If argument is a Unicode string, just decode it to UTF-8
+      // If argument is a Python string, assume it's UTF-8
+      if (sipIsErr == NULL)
+          return (PyBytes_Check(sipPy) || PyUnicode_Check(sipPy));
+
+      if (sipPy == Py_None)
+      {
+          *sipCppPtr = new std::string;
+          return 1;
+      }
+
+      if (PyUnicode_Check(sipPy))
+      {
+          PyObject* s = PyUnicode_AsEncodedString(sipPy, "UTF-8", "");
+          *sipCppPtr = new std::string(PyBytes_AS_STRING(s));
+          Py_DECREF(s);
+          return 1;
+      }
+
+      if (PyBytes_Check(sipPy))
+      {
+          *sipCppPtr = new std::string(PyBytes_AS_STRING(sipPy));
+          return 1;
+      }
+      return 0;
+  %End
+};
diff --git a/isis/src/CMakeLists.txt b/isis/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2fe7b579c9e7514bf0c276766a057c24f880b85c
--- /dev/null
+++ b/isis/src/CMakeLists.txt
@@ -0,0 +1,17 @@
+#===============================================================================
+set(CORE_LIST base database control qisis system)
+
+get_subdirectory_list(${CMAKE_CURRENT_LIST_DIR} modules)
+
+# build core into isis library
+add_isis_module(${CORE_LIB_NAME} ${CORE_LIST})
+
+# remove duplicates so we dont build to the core targets twice
+foreach(core ${CORE_LIST})
+  list(REMOVE_ITEM modules "${CMAKE_CURRENT_LIST_DIR}/${core}")
+endforeach()
+
+foreach( mod ${modules} )
+  string(REPLACE "${CMAKE_CURRENT_LIST_DIR}/" "" strippedmod ${mod})
+  add_isis_module(${strippedmod} ${strippedmod})
+endforeach()
diff --git a/isis/src/Makefile b/isis/src/Makefile
index 150207051b52e2054a379fb956d9f806bc626228..1652458951a6de671316e9593bec4f5c25e6d352 100644
--- a/isis/src/Makefile
+++ b/isis/src/Makefile
@@ -7,7 +7,7 @@ else
 .NOTPARALLEL:
 endif
 
-PACKAGES = $(filter-out Makefile docsys CVS IsisObjectConvert.xsl, $(wildcard *))
+PACKAGES = $(filter-out Makefile CMakeLists.txt docsys CVS IsisObjectConvert.xsl, $(wildcard *))
 
 PACKAGESCLEAN := $(PACKAGES:%=%-clean)
 PACKAGESQUICKCLEAN := $(PACKAGES:%=%-quickclean)
@@ -21,7 +21,7 @@ PACKAGESCATTEST := $(filter-out qisis-catTest,   $(PACKAGES:%=%-catTest))
 
 # Allow parallel builds of applications
 applications: $(PACKAGESAPPS)
-	
+
 %-apps:
 	PACKAGE=`$(ECHO) $@ | $(SED) 's/-apps//'`; \
 	echo $(CURTIMESTAMP) "  Working on Package [$$PACKAGE]"; \
diff --git a/isis/src/base/apps/automos/automos.xml b/isis/src/base/apps/automos/automos.xml
index 395cd9141f11ddd1dc9ee202aad3e8632f6927af..bbf9c17508bc81130062f82d22709ba346a0fee7 100644
--- a/isis/src/base/apps/automos/automos.xml
+++ b/isis/src/base/apps/automos/automos.xml
@@ -49,7 +49,7 @@
         </p>
         <p>
           MATCHDEM = FALSE, the default does not check the SHAPEMODEL keyword of the input cube
-          files and does not propogate what DEM Shapemodel that was used when the input files were
+          files and does not propagate what DEM Shapemodel that was used when the input files were
           projected.
         </p>
       </p>
@@ -61,19 +61,43 @@
         options is explained in the tables and descriptions below.
       </p>
       <p>
-        The Track feature creates a band in the output mosaic file containing the index
-              values for every pixel in the output mosaic. The Track-band can only be used appropriately through
-        the  QVIEW-AdvancedTracking tool. As the user interactively pans across the displayed
-        mosaic band (Band1), for every mosaic pixel location QVIEW-AdvancedTracking will report
-        the source cube filename that was input to automos. The Track-band cannot be used outside
-        the QVIEW-AdvancedTracking tool. <b>The file (byte) size of the mosaic is increased due to
-                the track-band.</b>
+        The TRACK feature creates a separate tracking cube in addition to the mosaic cube, and
+        contains information for the source files of every pixel within the output mosaic.
+        This cube will have the same base-name as the mosaic cube but will end in 
+        "_tracking.cub". The tracking cube must always reside in the same directory as the
+        mosaic cube to be properly accessed; this means that if the mosaic cube is copied or
+        moved, then its associated tracking cube must be copied or moved to the same location.
+        <b>The tracking cube will always be of type unsigned integer. Depending on the
+        bit-type of the mosaic cube and/or the number of bands it contains, the tracking cube
+        may be as much as four times the size of the mosaic cube itself.</b>
       </p>
       <p>
-        The Track feature works with Priority options ONTOP (with HIGHSATURATION and
-        LOWSATURATION parameters) and BENEATH for single band input cubes.  It does NOT support
-        multiple band input cubes with these priority options. It does work for multiband cubes
-        when PRIORITY=BAND. Furthermore, this feature is NOT supported when PRIORITY=AVERAGE.
+        The tracking cube can be used appropriately through the QVIEW-AdvancedTracking
+        tool. As the user pans across the displayed mosaic, for every mosaic pixel location,
+        QVIEW-AdvancedTracking will interactively report the index, the filename and the
+        serial number of the input cube that was input to automos for that specific pixel
+        location. Since the tracking cube is of bit-type unsigned integer, the DN values of
+        0, 1 and 2 are reserved for NULL, LRS and LIS, respectively, so valid pixel DN values
+        will begin at an offset of 3. In other words, a pixel of DN value 3 in the tracking
+        cube means that this same pixel within the mosaic was taken from the first input
+        image. The tracking cube cannot be used outside of the QVIEW-AdvancedTracking tool
+        except as a visual representation of the source cubes for the different pixels. 
+      </p>
+      <p>
+        The TRACK feature works with Priority options ONTOP and BENEATH for single band input
+        cubes. It works for multiband cubes for PRIORITY=ONTOP only when the NULL,
+        HIGHSATURATION and LOWSATURATION options are set to true. It also works for multiband
+        cubes when PRIORITY=BAND. Furthermore, this feature is NOT supported when
+        PRIORITY=AVERAGE.
+      </p>
+      <p>
+        <b>Please Note: Prior to ISIS version 3.6.0, tracking for the various mosaicking apllications
+          was being handled with an internal tracking band. Tracking is now being handled by an
+          external tracking cube that contains the associated tracking information. This application
+          can no longer add to mosaics of the old format. In order to continue to use these
+          older mosaics with the updated mosaicking applications, you must first use the
+          <def>trackextract</def> utility application to extract the tracking band and the associated
+          tracking information into an external tracking cube.</b>
       </p>
       <p>
         <b>
@@ -90,8 +114,17 @@
               current input image will appear in the output mosaic (it replaces the output mosaic
               pixel).  Invalid input <def>Special Pixels</def>
               (<def>NULL</def>,<def>HRS</def>,<def>HIS</def>,<def>LRS</def>,<def>LIS</def>) will NOT
-              replace an existing Valid output mosaic pixel. Refer to parameters HIGHSATURATION,
-              LOWSATURATION, and NULL to override replacement of Valid output mosaic pixels.
+              replace an existing Valid output mosaic pixel unless the optional flags are set. Refer
+              to parameters HIGHSATURATION,LOWSATURATION, and NULL to override replacement of Valid
+              output mosaic pixels. 
+              <p>
+                <b>NOTE:</b> When using this priority with multi-band mosaics and with the TRACK
+                option set, all Special Pixel flags must be set as well. This is because the same
+                pixel within different bands of a single input image may hold both Valid and Special
+                Pixel values, and since our Tracking capabilities can only track one input image per
+                pixel (as it is a single band), it must accept the values for that particular pixel
+                from <b>every</b> band in the input image being placed on top.
+              </p>
             </td>
           </tr>
           <tr>
@@ -120,7 +153,7 @@
               Overlapping Valid pixel values from the current input image and output mosaic will be
               averaged for the new mosaic pixel values. A count-band is created with the output
               mosaic file.  The count-band keeps track of the number of images involved in the
-              averaging of the input dn values for each pixel in the mosaic. Invalid input pixel
+              averaging of the input DN values for each pixel in the mosaic. Invalid input pixel
               values will not be included in the average.  In the case where only one Valid pixel
               exists between the input image pixels or the current mosaic pixel, the Valid pixel is
               retained in the current output mosaic. Refer to parameters HIGHSATURATION,
@@ -474,6 +507,11 @@
       Added parameter checking to XML MAXLON and MAXLAT to check if they are greater than their
       minimum counterpart. Fixes #5148
     </change>
+    <change name="Summer Stapleton" date="2018-08-13">
+      Updated documentation to reflect new handling of tracking capabilities with an external
+      tracking cube as well as clarify why special pixel flags are required when priority=ontop for
+      multiband mosaics. References #2092
+    </change>
   </history>
 
   <groups>
@@ -489,7 +527,7 @@
           the same ProjectionName, PixelResolution (or MapScale), EquatorialRadius,
           PolarRadius, LatitudeType, LongitudeDirection and specific map projection keywords
           such as CenterLatitude and CenterLongitude.  This includes the output mosaic
-          if it already exists.  The latitude and longtiude extents of each input file may
+          if it already exists.  The latitude and longitude extents of each input file may
           vary.
         </description>
         <filter>
@@ -588,11 +626,11 @@
               If the Input and Mosaic pixel of the priority band, specified by NUMBER or KEYNAME
               and KEYVALUE, are valid, a less than or greater than comparison is done. Depending on
               the CRITERIA selected, the lower or higher of the two pixels is placed on top
-              (i.e., replaces the mosaic pixel).  This applies to all the corresponding Valid band
+              (i.e., replaces the mosaic pixel). This applies to all the corresponding Valid band
               pixels. Special pixels in the corresponding bands will not replace the output mosaic
               pixel unless the HIGHSATURATION, LOWSATURATION and NULL flags are set to TRUE.  Refer
-              to parameters HIGHSATURATION, LOWSATURATION, and NULL.   This means, if the results
-              of the priority band comparison says that the input pixel should be on top, but the
+              to parameters HIGHSATURATION, LOWSATURATION, and NULL. This means, if the results
+              of the priority band comparison shows that the input pixel should be on top, but the
               input pixel on any other band is NULL, without the NULL=TRUE, the output mosaic pixel
               will remain unchanged for that band.
             </description>
@@ -697,7 +735,7 @@
           The keyword values can be found on the labels of the input files under
           the "BandBin" Group. For instance, KEYNAME=NAME where the KEYVALUE
           can then be set to "Phase Angle", "Emission Angle", "Incidence Angle",
-          "Pixel Resolution".  Refer to the <b>phocube</b> application that will
+          "Pixel Resolution".  Refer to the <def>phocube</def> application that will
           create these 'Named' Bands.
           </description>
       </parameter>
@@ -722,7 +760,7 @@
           <brief>The lower DN value of the input priority band will replace the mosaic pixel
             </brief>
             <description>
-              If the dn value of a pixel in the priority band of the input cube
+              If the DN value of a pixel in the priority band of the input cube
               is lesser than the corresponding pixel in the mosaic priority band,
               then the output pixel of the mosaic will be replaced by the input
               cube pixel. This will apply to all bands at this pixel location.
@@ -732,7 +770,7 @@
            <brief>The greater DN value of the input priority band will replace the mosaic pixel
             </brief>
             <description>
-              If the dn value of a pixel in the priority band of the input cube
+              If the DN value of a pixel in the priority band of the input cube
               is greater than the corresponding pixel in the mosaic priority band,
               then the output pixel of the mosaic will be retained on NOT be
               replaced by the input cube pixel. This will apply to all bands at
@@ -824,7 +862,7 @@
         <type>double</type>
         <brief>Maximum Longitude</brief>
         <description>
-          The maximum longitude value bounary extent for the output mosaic.
+          The maximum longitude value boundary extent for the output mosaic.
         </description>
         <greaterThan>
             <item>MINLON</item>
@@ -841,27 +879,26 @@
           </brief>
           <description>
             <p>
-              The Track feature creates a band in the output mosaic file containing the index
-              values for every pixel in the output mosaic. The Track-band can only be used
-              appropriately through the  QVIEW-AdvancedTracking tool. As the user interactively
-              pans across the displayed mosaic band (Band1), for every mosaic pixel location
-              QVIEW-AdvancedTracking will report the source cube filename that was input to
-              automos. The Track-band cannot be used outside the QVIEW-AdvancedTracking tool.
-              TRACK must be set to TRUE at the time of mosaic creation only and cannot be turned
-              on after the mosaic is created. When a mosaic is created with TRACK=TRUE, all
-              subsequent runs will default to TRACK=TRUE. When a mosaic is created with
-              TRACK=FALSE, an error will be encountered if subsequent runs have TRACK=TRUE.
-              <b>The file (byte) size of the mosaic is increased due to
-                the track-band.</b>
-            </p>
-            <p>
-              A table, called InputImages, containing the names of the images used in the mosaic
-              will be added to the cube when TRACK=TRUE.
+              The Track feature creates a separate tracking cube containing the index values for
+              the source of every pixel in the output mosaic. The tracking cube can only be used
+              appropriately through the  QVIEW-AdvancedTracking tool. As the user pans across the
+              displayed mosaic, for every mosaic pixel location QVIEW-AdvancedTracking will
+              interactively report the filename, the serial number and the index of the input cube
+              that was input to automos for that specific pixel location. The tracking cube cannot
+              be used outside the QVIEW-AdvancedTracking tool except as a visual representation of
+              the source cubes for the different pixels. TRACK must be set to TRUE at the time of
+              mosaic creation only and cannot be turned on after the mosaic is created. When a
+              mosaic is created with TRACK=TRUE, all subsequent runs will default to TRACK=TRUE.
+              When a mosaic is created with TRACK=FALSE, an error will be encountered if subsequent
+              runs have TRACK=TRUE. <b>The tracking cube will always be of type unsigned integer.
+              Depending on the bit-type of the mosaic cube and/or the number of bands it contains,
+              the tracking cube may be as much as four times the size of the mosaic cube itself.</b>
             </p>
             <p>
               WARNING:
-              If Tracking is turned on in a mosaic, any subsequent applications that modify "dn"
-              values will corrupt the track-band, for instance the application <def>reduce</def>.
+              If Tracking is turned on in a mosaic, any subsequent applications that modify DN
+              values, such as the application<def>reduce</def>, will corrupt the DN values in the
+              tracking cube.
             </p>
           </description>
         </parameter>
@@ -887,8 +924,8 @@
           The default is FALSE.  If set to TRUE, this application will create a
           Mosaic Group in the keyword labels of the new output mosaic cube including
           a ShapeModel keyword.  The output mosaic is created with the first input
-          cube listed in the FROMLIST file, the ShapeModel keyword and it's value
-          will be propogated to the the Mosaic Group of the output mosaic cube file.
+          cube listed in the FROMLIST file, the ShapeModel keyword and its value
+          will be propagated to the Mosaic Group of the output mosaic cube file.
           Subsequently, the ShapeModel keyword value of the remaining input cubes will
           be checked against the ShapeModel value in the mosaic cube.   This application
           will fail if the ShapeModel keywords don't match.
@@ -950,7 +987,7 @@
           clarify what happens during the mosaic process.
         </p>
         <p>
-          The output mosaic shows the result of the second input image being mosaiced with the
+          The output mosaic shows the result of the second input image being mosaicked with the
           first input image. You can see in band one that none of the special pixels were retained
           because none of the special pixel flags were set. In other words, regardless of whether
           there was a valid comparison at that pixel of the priority band, all other bands will
@@ -959,7 +996,7 @@
         <p>
           In band two, you can still see where the special pixels were in the second input image.
           The second image would have been "on top" because in band two, the pixels are less than
-          those of the mosaic. However, the valid data in the mosaic was left alone because the
+          those of the mosaic. However, the valid data in the mosaic was disregarded because the
           special pixel flags were not set. You cannot see the special pixels from the first image
           because the valid pixels from the second image were kept instead.
         </p>
diff --git a/isis/src/base/apps/cam2cam/cam2cam.cpp b/isis/src/base/apps/cam2cam/cam2cam.cpp
index ce6be30660cc5062b805382a3648eece39a47279..5ad273102e3e79a43cee0f85cf611cd07ea837d4 100644
--- a/isis/src/base/apps/cam2cam/cam2cam.cpp
+++ b/isis/src/base/apps/cam2cam/cam2cam.cpp
@@ -1,6 +1,7 @@
 #include "Isis.h"
 #include "CameraFactory.h"
 #include "Camera.h"
+#include "Distance.h"
 #include "ProcessRubberSheet.h"
 #include "IException.h"
 #include "cam2cam.h"
@@ -118,7 +119,13 @@ bool cam2cam::Xform(double &inSample, double &inLine,
   // Get the universal lat/lon and see if it can be converted to input line/samp
   double lat = p_outcam->UniversalLatitude();
   double lon = p_outcam->UniversalLongitude();
-  if(!p_incam->SetUniversalGround(lat, lon)) return false;
+  Distance rad = p_outcam->LocalRadius();
+  if (rad.isValid()) {
+    if(!p_incam->SetUniversalGround(lat, lon, rad.meters())) return false;
+  }
+  else {
+    if(!p_incam->SetUniversalGround(lat, lon)) return false;
+  }
 
   // Make sure the point is inside the input image
   if(p_incam->Sample() < 0.5) return false;
diff --git a/isis/src/base/apps/cam2cam/cam2cam.xml b/isis/src/base/apps/cam2cam/cam2cam.xml
index 9700441f44b5f2bd92ee6fdc0079b55d882373f5..469b534622d2cb46028a7e55762504e411c4cdbb 100644
--- a/isis/src/base/apps/cam2cam/cam2cam.xml
+++ b/isis/src/base/apps/cam2cam/cam2cam.xml
@@ -6,7 +6,7 @@
   </brief>
 
   <description>
-      This program will convert a input camera cube to a different camera geometry.  For example, given overlapping MGS MOC and Odyssey Themis cubes, 
+      This program will convert a input camera cube to a different camera geometry.  For example, given overlapping MGS MOC and Odyssey Themis cubes,
       this program can convert the MOC image to have the same geometric camera characteristics as the Themis cube (or vice versa).  Another use is to align
       bands in a camera cube which has independent bands.  For example, a raw Themis cube (after thm2isis) will not have aligned pixels.  This program can
       be used to align the pixels without going to a map projection.  To prevent pixels from falling off the edge of the cube you can run pad on the cube prior to
@@ -37,14 +37,19 @@
        Fixed typo in documentation
      </change>
     <change name="Steven Lambright" date="2008-01-23">
-       Fixed an access on an invalid pointer that caused segmentation faults on 
+       Fixed an access on an invalid pointer that caused segmentation faults on
        cubes in which the camera is band-dependant.
      </change>
     <change name="Jeff Anderson" date="2008-02-12">
        Fixed problems with reference bands on band-dependent instruments
      </change>
     <change name="Steven Lambright" date="2008-05-12">
-          Removed references to CubeInfo 
+          Removed references to CubeInfo
+    </change>
+    <change name="Jesse Mapel" date="2018-05-17">
+          Changed transform to use the local radius computed by the output camera instead of
+          having the input camera re-compute it (sometimes incorrectly) from the latitude and
+          longitude. Fixes #5425.
     </change>
   </history>
 
@@ -104,13 +109,13 @@
         <internalDefault>middle</internalDefault>
         <brief>Reference Band</brief>
         <description>
-            This is the reference band to be used in the MATCH cube.  
-            That is, all bands in the FROM cube will be matched to 
+            This is the reference band to be used in the MATCH cube.
+            That is, all bands in the FROM cube will be matched to
             this band.  The default is to use the middle band; however,
             the user can enter any band number which is valid for the
             instrument, regardless of whether the band is in the cube
-            or not.  
-            This only applies to band dependent camera models such as 
+            or not.
+            This only applies to band dependent camera models such as
             Themis.
         </description>
         <minimum inclusive="yes">1</minimum>
@@ -152,4 +157,3 @@
     </group>
   </groups>
 </application>
-
diff --git a/isis/src/base/apps/cam2map/tsts/targCodeFromNaifKeywordsObj/Makefile b/isis/src/base/apps/cam2map/tsts/targCodeFromNaifKeywordsObj/Makefile
deleted file mode 100644
index 068d99b44ba1e240065544d1133817a762895a23..0000000000000000000000000000000000000000
--- a/isis/src/base/apps/cam2map/tsts/targCodeFromNaifKeywordsObj/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-APPNAME = cam2map
-
-cam2mapTruth.cub.TOLERANCE = .000001
-cam2mapCheckRange.cub.TOLERANCE = .000001
-
-include $(ISISROOT)/make/isismake.tsts
-
-commands:
-	$(APPNAME) from=$(INPUT)/test.cub \
-	           to=$(OUTPUT)/cam2mapTruth.cub \
-	           map=$(INPUT)/test.map \
-	           lonseam=continue \
-	           pixres=map \
-	           >& /dev/null;
-	catlab from=$(OUTPUT)/cam2mapTruth.cub \
-	       to=$(OUTPUT)/cubeLabel.pvl \
-	       >& /dev/null;
diff --git a/isis/src/base/apps/campt/campt.cpp b/isis/src/base/apps/campt/campt.cpp
index 0e306bbd70750e68b3c607c224461b8d1b7264ac..897b4742c26c8e4efd19f8eaa519ded26ab378eb 100644
--- a/isis/src/base/apps/campt/campt.cpp
+++ b/isis/src/base/apps/campt/campt.cpp
@@ -30,7 +30,7 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints);
 
 void IsisMain() {
   UserInterface &ui = Application::GetUserInterface();
-  
+
   // Setup our input cube
   CameraPointInfo campt;
 
@@ -40,15 +40,15 @@ void IsisMain() {
   else
       campt.SetCSVOutput(true);
 
-  campt.SetCube(ui.GetFileName("FROM") + "+" + ui.GetInputAttribute("FROM").toString());
+  campt.SetCube( ui.GetFileName("FROM") + "+" + ui.GetInputAttribute("FROM").toString() );
 
   // Grab the provided points (coordinates)
   QList< QPair<double, double> > points = getPoints(ui, ui.WasEntered("COORDLIST"));
-  
+
   // Get the camera point info for coordiante
 
   QList<PvlGroup*> camPoints = getCameraPointInfo(ui, points, campt);
-  
+
   writePoints(ui, camPoints);
 }
 
@@ -60,25 +60,25 @@ QList< QPair<double, double> > getPoints(const UserInterface &ui, bool usePointL
   double point2 = 0.0;
   QList< QPair<double, double> > points;
   QString pointType = ui.GetString("TYPE");
-  
+
   // Check if the provided coordinate list is valid, i.e. a Samp/Line or Lat/Long coordinate per row
   if (usePointList) {
-    
+
     CSVReader reader;
     reader.read(FileName(ui.GetFileName("COORDLIST")).expanded());
-    
+
     if (!reader.isTableValid(reader.getTable()) || reader.columns() != 2) {
       QString msg = "Coordinate file formatted incorrectly.\n"
                     "Each row must have two columns: a sample,line or a latitude,longitude pair.";
-      throw IException(IException::User, msg, _FILEINFO_); 
+      throw IException(IException::User, msg, _FILEINFO_);
     }
-    
+
     for (int row = 0; row < reader.rows(); row++) {
       point1 = toDouble(reader.getRow(row)[0]);
       point2 = toDouble(reader.getRow(row)[1]);
       points.append(QPair<double, double>(point1, point2));
     }
-    
+
   }
   // Grab the coordinate from the ui position parameters if no coordinate list is provided
   else {
@@ -94,12 +94,12 @@ QList< QPair<double, double> > getPoints(const UserInterface &ui, bool usePointL
     }
     points.append(QPair<double, double>(point1, point2));
   }
-  
+
   return points;
 }
 
 
-// Gets the camera information for each point (coordinate). 
+// Gets the camera information for each point (coordinate).
 // Passed in a list of coordinates, passed in by reference a CameraPointInfo object.
 // Returns a list of PvlGroup pointers - these groups contain the camera info for each coordinate.
 QList<PvlGroup*> getCameraPointInfo(const UserInterface &ui,
@@ -117,7 +117,7 @@ QList<PvlGroup*> getCameraPointInfo(const UserInterface &ui,
     type = ui.GetString("TYPE");
   }
   PvlGroup *camPoint = NULL;
- 
+
   // Depending on what type is selected, set values accordingly
   for (int i = 0; i < points.size(); i++) {
 
@@ -166,13 +166,18 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints) {
   bool append = ui.GetBoolean("APPEND");
   QString fileFormat = ui.GetString("FORMAT");
   PvlGroup *point = NULL;
-  
+
   for (int p = 0; p < camPoints.size(); p++) {
       bool fileExists = FileName(outFile).fileExists();
 
     prog.CheckStatus();
     point = camPoints[p];
-    
+
+    // Remove units on look direction vectors
+    point -> findKeyword("LookDirectionBodyFixed").setUnits("");
+    point -> findKeyword("LookDirectionJ2000").setUnits("");
+    point -> findKeyword("LookDirectionCamera").setUnits("");
+
     // write to output file
     if (ui.WasEntered("TO")) {
       // Write the pvl group out to the file
@@ -180,16 +185,15 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints) {
         Pvl temp;
         temp.setTerminator("");
         temp.addGroup((*point));
-  
+
        // we don't want to overwrite successive points in outfile
         if (append || p > 0) {
           temp.append(outFile);
         }
         else {
           temp.write(outFile);
-        }  
+        }
      }
-      
       // Create a flatfile from PVL data
       // The flatfile is comma delimited and can be imported into Excel
       else {
@@ -205,7 +209,7 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints) {
           os.open(outFile.toLatin1().data(), ios::out);
           writeHeader = true;
         }
-        
+
         if (writeHeader) {
           for (int i = 0; i < (*point).keywords(); i++) {
             if ((*point)[i].size() == 3) {
@@ -216,14 +220,14 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints) {
             else {
               os << (*point)[i].name();
             }
-            
+
             if (i < point->keywords() - 1) {
               os << ",";
             }
           }
           os << endl;
         }
-        
+
 
 
         for (int i = 0; i < (*point).keywords(); i++) {
@@ -235,7 +239,7 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints) {
           else {
             os << (QString)(*point)[i];
           }
-          
+
           if (i < (*point).keywords() - 1) {
             os << ",";
           }
@@ -243,15 +247,16 @@ void writePoints(const UserInterface &ui, QList<PvlGroup*> camPoints) {
         os << endl;
       }
     }
-    
+
     // No output file specified
     else {
-      // don't log data - 
+      // don't log data -
       if (ui.GetString("FORMAT") == "FLAT") {
         string msg = "Flat file must have a name.";
         throw IException(IException::User, msg, _FILEINFO_);
       }
     }
+
     // we still want to output the results
     Application::Log((*point));
     delete point;
diff --git a/isis/src/base/apps/campt/campt.xml b/isis/src/base/apps/campt/campt.xml
index ac0a0d7200163a42b6e553adda39569329d506b5..86e43926e3ba01991018e1b1de5d5c13401ce934 100644
--- a/isis/src/base/apps/campt/campt.xml
+++ b/isis/src/base/apps/campt/campt.xml
@@ -9,12 +9,12 @@ xsi:noNamespaceSchemaLocation=
 
   <description>
     <p>
-    Campt computes geometric and photometric information at a given pixel 
-    location or list of pixel locations in the input image <def link="Cube">cube</def>. 
-    The program computes spacecraft and instrument related information, and other types of 
-    coordinates as described later in this document. The user will have a choice of coordinates 
-    in which to output the information as well as a choice in the output format of the 
-    information acquired. 
+    Campt computes geometric and photometric information at a given pixel
+    location or list of pixel locations in the input image <def link="Cube">cube</def>.
+    The program computes spacecraft and instrument related information, and other types of
+    coordinates as described later in this document. The user will have a choice of coordinates
+    in which to output the information as well as a choice in the output format of the
+    information acquired.
     </p>
     <p>
     Note the input image cube has preliminary requirements:
@@ -26,42 +26,42 @@ xsi:noNamespaceSchemaLocation=
     </p>
     <p>
     The point of interest in the image can be entered as <def>Latitude</def>/<def>Longitude</def>
-    coordinates or <def>Sample</def>/<def>Line</def> coordinates. Keep in mind 
-    that the input <def>Latitude</def> and <def>Longitude</def> values entered 
-    will be interpreted as <def link="Universal Coordinate">Universal 
-    Coordinates</def> (ISIS default) regardless of the target body. In the 
+    coordinates or <def>Sample</def>/<def>Line</def> coordinates. Keep in mind
+    that the input <def>Latitude</def> and <def>Longitude</def> values entered
+    will be interpreted as <def link="Universal Coordinate">Universal
+    Coordinates</def> (ISIS default) regardless of the target body. In the
     output, all positions are in <def link="Body Fixed Coordinate">Body-Fixed</def>
-    Coordinates. Multiple points of interest may be specified by providing a comma-delimited 
-    flatfile of coordinates.    
+    Coordinates. Multiple points of interest may be specified by providing a comma-delimited
+    flatfile of coordinates.
     </p>
-    <p> 
+    <p>
     The following is a partial list of coordinates computed in the <i>campt</i> application:<br />
     <br />
-    <b>Geometric Information</b>: <def>Latitude</def>, <def>Longitude</def>, <def>Oblique Detector Resolution</def>, 
+    <b>Geometric Information</b>: <def>Latitude</def>, <def>Longitude</def>, <def>Oblique Detector Resolution</def>,
        <def>Line Resolution</def>, <def>Oblique Line Resolution</def> <br />
     <br />
-    <b>Photometric Information</b>: <def link="Phase Angle">Phase</def>, 
-    <def link="Emission Angle">Emission</def>, and <def link="Incidence 
+    <b>Photometric Information</b>: <def link="Phase Angle">Phase</def>,
+    <def link="Emission Angle">Emission</def>, and <def link="Incidence
     Angle">Incidence Angles</def>  <br />
     <br />
-    <b>In addition</b>, this application will return a list of other spacecraft, 
-    sun and instrument-related information including but not limited to  
-    <def>Spacecraft Position</def>, <def>Spacecraft Azimuth</def>, 
-    <def link="SubSpacecraft Longitude">Sub-Spacecraft Longitude</def>, 
-    <def>SubSolar Latitude</def>, <def>SubSolar Longitude</def>, and 
+    <b>In addition</b>, this application will return a list of other spacecraft,
+    sun and instrument-related information including but not limited to
+    <def>Spacecraft Position</def>, <def>Spacecraft Azimuth</def>,
+    <def link="SubSpacecraft Longitude">Sub-Spacecraft Longitude</def>,
+    <def>SubSolar Latitude</def>, <def>SubSolar Longitude</def>, and
     Time information (<def>Ephemeris Time</def>, <def>UTC</def>).
     </p>
-    <p> 
-    You may choose the format of the output file. The option list includes 
-    a choice of a <def>PVL</def> file or a flat file. A PVL file is a text 
-    file in label format, while the flat file is a comma-delimited text file 
-    that is easily imported into most databases and digital spreadsheets 
+    <p>
+    You may choose the format of the output file. The option list includes
+    a choice of a <def>PVL</def> file or a flat file. A PVL file is a text
+    file in label format, while the flat file is a comma-delimited text file
+    that is easily imported into most databases and digital spreadsheets
     such as Microsoft Excel. Below is an example of <i>campt</i> output in <def>PVL</def>
-    format. You can skim the left column of this PVL-formatted output file for 
-    a thorough listing of the types of coordinates, sun and instrument-related 
-    information computed when using <i>campt</i>. 
+    format. You can skim the left column of this PVL-formatted output file for
+    a thorough listing of the types of coordinates, sun and instrument-related
+    information computed when using <i>campt</i>.
     </p>
-    
+
     <pre>
 Group = GroundPoint
   Filename                   = /usgs/cpkgs/isis3/data/mgs/testData/ab102401.cub
@@ -115,10 +115,10 @@ Group = GroundPoint
   Error                      = NULL
 End_Group
     </pre>
-    
+
     <p>
     Note: The "Error" keyword will only appear when using a coordinate list. The value of
-    "Error" will be NULL unless an error occurs during the processing of a coordinate in the 
+    "Error" will be NULL unless an error occurs during the processing of a coordinate in the
     <a href="#FilesCOORDLIST">coordinate list</a>. Then, the value of this keyword will be the error
     message.
     </p>
@@ -151,19 +151,19 @@ End_Group
       Added additional output
     </change>
     <change name="Elizabeth Miller" date="2006-07-31">
-      Modified to use OffNadirAngle instead of SpacecraftRoll angle due to 
+      Modified to use OffNadirAngle instead of SpacecraftRoll angle due to
       changes made to the camera class
     </change>
     <change name="Sean Crosby" date="2007-04-12">
       Added RightAscension and Declination to PVL output.  Program now requires
-      user to specify a filename when using FLAT option.  Increased precision in 
+      user to specify a filename when using FLAT option.  Increased precision in
       flatfile output and updated appTest truthdata.
     </change>
     <change name="Steven Lambright" date="2008-04-21">
       Added default values for the lines and samples
     </change>
     <change name="Steven Lambright" date="2008-05-12">
-      Removed references to CubeInfo 
+      Removed references to CubeInfo
     </change>
     <change name="Steven Koechle" date="2008-08-19">
       Removed unnecessary duplicate cube creation
@@ -171,9 +171,9 @@ End_Group
     <change name="Janet Barrett" date="2008-11-15">
       Added SubSolarGroundAzimuth and SubSpacecraftGroundAzimuth
       to PVL output. The SubSolarGroundAzimuth is the clockwise
-      angle on the ground between a line drawn from the ground 
-      point to the North pole of the body and a line drawn from 
-      the ground point to the subsolar point. The 
+      angle on the ground between a line drawn from the ground
+      point to the North pole of the body and a line drawn from
+      the ground point to the subsolar point. The
       SubSpacecraftGroundAzimuth is defined similarly except it
       uses the subspacecraft point.
     </change>
@@ -193,8 +193,8 @@ End_Group
       Modified the documentation, fixes #1173
     </change>
     <change name="Lynn Weller" date="2013-02-25">
-      Removed links to applications imbedded in text and replaced with 
-      italicized application name.  Added application links to the 
+      Removed links to applications imbedded in text and replaced with
+      italicized application name.  Added application links to the
       "Related Objects and Documents" section of the documentation.
       Fixes mantis ticket #1525.
     </change>
@@ -205,18 +205,21 @@ End_Group
     <change name="Ian Humphrey" date="2015-03-03">
       Updated documentation. References #1449.
     </change>
-    <change name="Tyler Wilson" date="2016-08-17">      
+    <change name="Tyler Wilson" date="2016-08-17">
       Checked in new test data, and added support for changes made to the CameraPointInfo
       and Camera classes that incorporate new estimates for Pixel/Line/Sample/Detetctor resolution
       and now allow a developer to control the order in which fields are output in both PVL and
       CSV format.  References #476, #4100.
     </change>
-    <change name="Kaj Williams" date="2017-06-13">      
-      Resolved issue where the default value for the "allowoutside" parameter was supposed 
-      to be set to "true", but the default _behavior_ of campt was instead consistent with a 
-      setting of "false". In addition, corrected behavior where 
+    <change name="Kaj Williams" date="2017-06-13">
+      Resolved issue where the default value for the "allowoutside" parameter was supposed
+      to be set to "true", but the default _behavior_ of campt was instead consistent with a
+      setting of "false". In addition, corrected behavior where
       manually setting "allowoutside" to "false" was ignored. Ref # 2258.
     </change>
+    <change name="Kaitlyn Lee" date="2018-02-16">
+      Removed units on look direction vectors to make them unitless. Fixes #5125.
+    </change>
   </history>
 
   <oldName>
@@ -249,7 +252,7 @@ End_Group
           *.cub
         </filter>
       </parameter>
-      
+
       <parameter name = "USECOORDLIST">
         <type>boolean</type>
         <default><item>FALSE</item></default>
@@ -257,10 +260,10 @@ End_Group
           Enable coordinate list parameters in the GUI
         </brief>
         <description>
-          Selecting this parameter will enable the 'COORDLIST' and 'COORDTYPE' parameters in the 
-          GUI. 
+          Selecting this parameter will enable the 'COORDLIST' and 'COORDTYPE' parameters in the
+          GUI.
           <p>
-            Note that this parameter is optional when running <i>campt</i> on the 
+            Note that this parameter is optional when running <i>campt</i> on the
             command line.
           </p>
         </description>
@@ -276,7 +279,7 @@ End_Group
           <item>LONGITUDE</item>
         </exclusions>
       </parameter>
-            
+
       <parameter name="COORDLIST">
         <type>filename</type>
         <fileMode>input</fileMode>
@@ -286,7 +289,7 @@ End_Group
         <internalDefault>None</internalDefault>
         <description>
           An input comma-delimited flatfile of image coordinates or ground coordinates.
-          This allows the program to process multiple coordinates in a single run of <i>campt</i>, 
+          This allows the program to process multiple coordinates in a single run of <i>campt</i>,
           and output the results to the specified output file.
           <p>
             Expected order for image coordinates: sample, line<br/>
@@ -294,14 +297,14 @@ End_Group
           </p>
           <p>
             The "Error" keyword will only appear when using a coordinate list. The value of "Error"
-            will then be NULL unless an error occurs during the processing of a coordinate in the 
+            will then be NULL unless an error occurs during the processing of a coordinate in the
             coordinate list. Then, the value of this keyword will be the error message. This allows
             for <i>campt</i> to continue processing the remaining coordinates in the coordinate
             list.
-          </p> 
+          </p>
           <p>
-            For the input of Latitude and Longitude, campt expects 
-            <def>Planetocentric Latitude</def> (within -90 to 90 boundary) and 
+            For the input of Latitude and Longitude, campt expects
+            <def>Planetocentric Latitude</def> (within -90 to 90 boundary) and
             <def>Positive East Longitude</def> (with 0-360 boundary) to find the location in the
             input camera image.
           </p>
@@ -314,7 +317,7 @@ End_Group
           <item>LONGITUDE</item>
         </exclusions>
       </parameter>
-      
+
       <parameter name="COORDTYPE">
         <type>string</type>
         <brief>Coordinate type selection (Image or Ground) for 'COORDLIST'</brief>
@@ -343,29 +346,29 @@ End_Group
     <item>TYPE</item>
   </exclusions>
       </parameter>
-      
+
       <parameter name="TO">
         <type>filename</type>
         <fileMode>output</fileMode>
         <brief>Output text filename</brief>
         <internalDefault>None</internalDefault>
         <description>
-          A text file in label format (<def>PVL</def>) which will 
+          A text file in label format (<def>PVL</def>) which will
           contain the results of <i>campt</i>.  This file can
-          be used in conjunction with the <i>getkey</i> application 
-          in order to pass the results to another program when developing 
+          be used in conjunction with the <i>getkey</i> application
+          in order to pass the results to another program when developing
           scripts.
         </description>
       </parameter>
-      
+
       <parameter name="FORMAT">
         <type>string</type>
         <brief>
-          Output format (PVL or FLAT) 
+          Output format (PVL or FLAT)
         </brief>
         <description>
           Format type for output file.  PVL format is default.
-        </description>  
+        </description>
         <default><item>PVL</item></default>
         <list>
           <option value="PVL">
@@ -394,33 +397,33 @@ End_Group
           Option to append results to output file
         </brief>
         <description>
-          If this option is selected, the output from the application will be 
-          appended to the output file.  If it is not selected, any information 
+          If this option is selected, the output from the application will be
+          appended to the output file.  If it is not selected, any information
           in the 'TO' file will be overwritten.
         </description>
         <default><item>TRUE</item></default>
       </parameter>
-      
+
       <parameter name="ALLOWOUTSIDE">
         <type>boolean</type>
         <brief>
           Allow sample/line values outside the image to be reported
         </brief>
         <description>
-          The Allowoutside parameter influences how <i>campt</i> will report 
-          resulting latitude/longitude and sample/line coordinates that fall 
-          outside the input cube pixel boundaries.  
+          The Allowoutside parameter influences how <i>campt</i> will report
+          resulting latitude/longitude and sample/line coordinates that fall
+          outside the input cube pixel boundaries.
           <p>
-          The default is set to True, which allows <i>campt</i> to return 
+          The default is set to True, which allows <i>campt</i> to return
           the values that are outside the cube pixel boundaries. For example,
-          a given latitude/longitude might return a sample location of -1.0 
+          a given latitude/longitude might return a sample location of -1.0
           (a single whole pixel coordinate off the left side of the image).
           This is a feature of the ISIS camera models.
           </p>
           <p>
-          When set to False, if a returned coordinate is off the image, 
-          <i>campt</i> will fail.  This failure can be indicated and ignored 
-          within a batch script when only coordinates that fall within the 
+          When set to False, if a returned coordinate is off the image,
+          <i>campt</i> will fail.  This failure can be indicated and ignored
+          within a batch script when only coordinates that fall within the
           image cube pixel boundaries are desired.
           </p>
         </description>
@@ -448,7 +451,7 @@ End_Group
           <option value="GROUND">
             <brief>Interprets the coordinates as latitude/longitude</brief>
             <description>
-              This option interprets the coordinate as latitude/longitude and 
+              This option interprets the coordinate as latitude/longitude and
               will compute sample/line and Projection x/y.
             </description>
             <exclusions>
@@ -458,7 +461,7 @@ End_Group
           </option>
         </list>
         <description>
-          This parameter is used to select the type of coordinate entered, 
+          This parameter is used to select the type of coordinate entered,
           which will be used to determine the method to compute the geometric
           and photometric information.
         </description>
@@ -471,7 +474,7 @@ End_Group
         </brief>
         <internalDefault>Center sample</internalDefault>
         <description>
-            This is the <def>Sample</def> position used to compute information 
+            This is the <def>Sample</def> position used to compute information
             at a given pixel location in the input image cube.
         </description>
       </parameter>
@@ -484,7 +487,7 @@ End_Group
         </brief>
       <internalDefault>Center line</internalDefault>
         <description>
-            This is the <def>Line</def> position used to compute information 
+            This is the <def>Line</def> position used to compute information
             at a given pixel location in the input image cube.
         </description>
       </parameter>
@@ -495,7 +498,7 @@ End_Group
           Latitude (planetocentric) position
         </brief>
         <description>
-            This is the <def>Planetocentric Latitude</def> (within -90 to 90 
+            This is the <def>Planetocentric Latitude</def> (within -90 to 90
             boundary) used to find the location in the input camera image.
             <p>
               Refer to <def>Latitude Type</def>.
@@ -514,7 +517,7 @@ End_Group
             This is the <def>Positive East Longitude</def> (with 0-360 boundary)
             used to find the location in the input camera image.
             <p>
-              Refer to <def>Longitude Direction</def> and 
+              Refer to <def>Longitude Direction</def> and
               <def>Longitude Domain</def>.
             </p>
         </description>
diff --git a/isis/src/base/apps/csv2table/Makefile b/isis/src/base/apps/csv2table/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/base/apps/csv2table/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/base/apps/csv2table/csv2table.cpp b/isis/src/base/apps/csv2table/csv2table.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..439e274d9c3a6facbba616004ba9a02837424c9f
--- /dev/null
+++ b/isis/src/base/apps/csv2table/csv2table.cpp
@@ -0,0 +1,120 @@
+/**
+ * @file
+ * $Revision: 1.8 $
+ * $Date: 2010/04/08 15:28:20 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are public
+ *   domain. See individual third-party library and package descriptions for
+ *   intellectual property information,user agreements, and related information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or implied,
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
+ *   therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
+ *   the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include "Isis.h"
+
+#include <QString>
+
+#include "Cube.h"
+#include "CSVReader.h"
+#include "IException.h"
+#include "IString.h"
+#include "Pvl.h"
+#include "PvlObject.h"
+#include "Table.h"
+#include "TableField.h"
+#include "TableRecord.h"
+
+using namespace Isis;
+
+
+void IsisMain() {
+  UserInterface &ui = Application::GetUserInterface();
+
+  // Read the CSV file and get the header
+  QString csvFileName = ui.GetFileName("csv");
+  CSVReader reader;
+  try {
+    reader = CSVReader(csvFileName, true);
+  }
+  catch(IException &e) {
+    QString msg = "Failed to read CSV file [" + csvFileName + "].";
+    throw IException(e, IException::Io, msg, _FILEINFO_);
+  }
+  int numColumns = reader.columns();
+  int numRows = reader.rows();
+  if (numColumns < 1 || numRows < 1) {
+    QString msg = "CSV file does not have data.\nFile has [" + toString(numRows) +
+                  "] rows and [" + toString(numColumns) +"] columns.";
+    throw IException(IException::User, msg, _FILEINFO_);
+  }
+  CSVReader::CSVAxis header = reader.getHeader();
+
+  // Construct an empty table with the CSV header as field names
+  TableRecord tableRow;
+  for (int columnIndex = 0; columnIndex < numColumns; columnIndex++) {
+    TableField columnField(QString(header[columnIndex]), TableField::Double);
+    tableRow += columnField;
+  }
+  QString tableName = ui.GetString("tablename");
+  Table table(tableName, tableRow);
+
+  // Fill the table
+  for (int rowIndex = 0; rowIndex < numRows; rowIndex++) {
+    CSVReader::CSVAxis csvRow = reader.getRow(rowIndex);
+    for (int columnIndex = 0; columnIndex < numColumns; columnIndex++) {
+      tableRow[columnIndex] = toDouble(csvRow[columnIndex]);
+    }
+    table += tableRow;
+  }
+
+  // If a set of label keywords was passed add them to the table
+  if (ui.WasEntered("label")) {
+    QString labelPvlFilename = ui.GetFileName("label");
+    Pvl labelPvl;
+    try {
+      labelPvl.read(labelPvlFilename);
+    }
+    catch(IException &e) {
+      QString msg = "Failed to read PVL label file [" + labelPvlFilename + "].";
+      throw IException(e, IException::Io, msg, _FILEINFO_);
+    }
+
+    PvlObject &tableLabel = table.Label();
+    for (int keyIndex = 0; keyIndex < labelPvl.keywords(); keyIndex++) {
+      tableLabel.addKeyword(labelPvl[keyIndex]);
+    }
+  }
+
+  // Write the table to the cube
+  QString outCubeFileName(ui.GetFileName("to"));
+  Cube outCube;
+  try {
+    outCube.open(outCubeFileName, "rw");
+  }
+  catch(IException &e) {
+    QString msg = "Could not open output cube [" + outCubeFileName + "].";
+    throw IException(e, IException::Io, msg, _FILEINFO_);
+  }
+
+  try {
+    outCube.write(table);
+  }
+  catch(IException &e) {
+    QString msg = "Could not write output table [" + tableName +
+                  "] to output cube [" + outCubeFileName + "].";
+    throw IException(e, IException::Io, msg, _FILEINFO_);
+  }
+
+  outCube.close();
+
+}
diff --git a/isis/src/base/apps/csv2table/csv2table.xml b/isis/src/base/apps/csv2table/csv2table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a2bd1a7c0f1779d4ca0bc449b568d613ff383ac0
--- /dev/null
+++ b/isis/src/base/apps/csv2table/csv2table.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="csv2table" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+  <brief>
+    Convert a CSV file to a table and attach it to a cube
+  </brief>
+
+  <description>
+    This application converts a CSV file to a table and attaches it to a cube
+    The first row of the CSV will be used as the fieldnames for the table.
+    The contents of the CSV file will be converted to floating point numbers
+    before they are inserted into the table.
+  </description>
+
+  <category>
+    <categoryItem>Scripting</categoryItem>
+  </category>
+
+  <seeAlso>
+    <applications>
+      <item>tabledump</item>
+    </applications>
+  </seeAlso>
+
+  <history>
+    <change name="Jesse Mapel" date="2018-09-04">
+      Original version
+    </change>
+  </history>
+
+  <groups>
+    <group name = "Files">
+      <parameter name = "csv">
+        <type>filename</type>
+        <fileMode>input</fileMode>
+        <brief>Input CSV filename</brief>
+        <description>
+          Input CSV filename. The first row of this file will be used as the
+          table field names.
+        </description>
+        <filter>
+          *.csv
+        </filter>
+      </parameter>
+
+        <parameter name = "label">
+          <type>filename</type>
+          <fileMode>input</fileMode>
+          <brief>Input table label PVL filename</brief>
+          <description>
+            Input table label PVL filename. This is expected to be a flat PVL
+            file where all of the keywords and their values will be added to
+            the tabel label.
+          </description>
+          <internalDefault>None</internalDefault>
+          <filter>
+            *.pvl
+          </filter>
+        </parameter>
+
+      <parameter name = "to">
+        <type>cube</type>
+        <fileMode>output</fileMode>
+        <brief>Output cube filename</brief>
+        <description>
+          Output cube filename that the table will be attached to
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+    </group>
+
+    <group name = "Table">
+      <parameter name = "tablename">
+        <type>string</type>
+        <brief>The name of the table</brief>
+        <description>
+          A table will be created with this name on the output cube using the
+          data from the CSV file. If a table with this name already exists on
+          the cube it will be overwritten.
+        </description>
+      </parameter>
+    </group>
+
+  </groups>
+
+  <examples>
+    <example>
+      <brief>Write a simple table</brief>
+      <description>Write a simple csv file to a cube.</description>
+      <terminalInterface>
+        <commandLine> csv=test.csv tablename=TestTable to=isisTruth.cub
+        </commandLine>
+        <description>
+          In this example, csv2table will write a table called TestTable on
+          isisTruth.cub with the contents of test.csv.
+        </description>
+      </terminalInterface>
+    </example>
+  </examples>
+
+</application>
diff --git a/isis/src/base/apps/csv2table/tsts/Label/Makefile b/isis/src/base/apps/csv2table/tsts/Label/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..48d2f26e42e878485e2bf9c82cc5c2e16a9808e7
--- /dev/null
+++ b/isis/src/base/apps/csv2table/tsts/Label/Makefile
@@ -0,0 +1,14 @@
+APPNAME = csv2table
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	cp $(INPUT)/isisTruth.cub $(OUTPUT)/isisTruth.cub;
+	$(APPNAME) csv=$(INPUT)/test.csv \
+	label=$(INPUT)/label.pvl \
+	tablename="TestTable" \
+	to=$(OUTPUT)/isisTruth.cub > /dev/null;
+	catlab from=$(OUTPUT)/isisTruth.cub | \
+	sed -n '/Object = Table/,/End_Object/p' > \
+	$(OUTPUT)/table.pvl;
+	rm $(OUTPUT)/isisTruth.cub;
diff --git a/isis/src/base/apps/csv2table/tsts/Makefile b/isis/src/base/apps/csv2table/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/base/apps/csv2table/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/base/apps/csv2table/tsts/NewTable/Makefile b/isis/src/base/apps/csv2table/tsts/NewTable/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..183ba78dfbb2a7655a7922f6a76834cc9f207bbf
--- /dev/null
+++ b/isis/src/base/apps/csv2table/tsts/NewTable/Makefile
@@ -0,0 +1,13 @@
+APPNAME = csv2table
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	cp $(INPUT)/isisTruth.cub $(OUTPUT)/isisTruth.cub;
+	$(APPNAME) csv=$(INPUT)/test.csv \
+	tablename="TestTable" \
+	to=$(OUTPUT)/isisTruth.cub > /dev/null;
+	tabledump from=$(OUTPUT)/isisTruth.cub \
+	to=$(OUTPUT)/output.csv \
+	NAME="TestTable" > /dev/null;
+	rm $(OUTPUT)/isisTruth.cub;
diff --git a/isis/src/base/apps/csv2table/tsts/OverwriteTable/Makefile b/isis/src/base/apps/csv2table/tsts/OverwriteTable/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..183ba78dfbb2a7655a7922f6a76834cc9f207bbf
--- /dev/null
+++ b/isis/src/base/apps/csv2table/tsts/OverwriteTable/Makefile
@@ -0,0 +1,13 @@
+APPNAME = csv2table
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	cp $(INPUT)/isisTruth.cub $(OUTPUT)/isisTruth.cub;
+	$(APPNAME) csv=$(INPUT)/test.csv \
+	tablename="TestTable" \
+	to=$(OUTPUT)/isisTruth.cub > /dev/null;
+	tabledump from=$(OUTPUT)/isisTruth.cub \
+	to=$(OUTPUT)/output.csv \
+	NAME="TestTable" > /dev/null;
+	rm $(OUTPUT)/isisTruth.cub;
diff --git a/isis/src/base/apps/csv2table/tsts/errors/Makefile b/isis/src/base/apps/csv2table/tsts/errors/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..ab23c6904b4931eacf0058f1b90df3ad1f8ccbb6
--- /dev/null
+++ b/isis/src/base/apps/csv2table/tsts/errors/Makefile
@@ -0,0 +1,33 @@
+APPNAME = csv2table
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	cp $(INPUT)/isisTruth.cub $(OUTPUT)/isisTruth.cub;
+
+	if [ `$(APPNAME) csv=$(INPUT)/not_a_file.csv \
+	     tablename="TestTable" \
+	     to=$(OUTPUT)/isisTruth.cub 2> $(OUTPUT)/errors.txt` ]; \
+	then \
+	  true; \
+	fi;
+
+	if [ `$(APPNAME) csv=$(INPUT)/empty.csv \
+	      tablename="TestTable" \
+	      to=$(OUTPUT)/isisTruth.cub 2>> $(OUTPUT)/errors.txt` ]; \
+	then \
+	  true; \
+	fi;
+
+	if [ `$(APPNAME) csv=$(INPUT)/test.csv \
+	      label=$(INPUT)/not_a_file.pvl \
+	      tablename="TestTable" \
+	      to=$(OUTPUT)/isisTruth.cub 2>> $(OUTPUT)/errors.txt` ]; \
+	then \
+	  true; \
+	fi;
+
+	cat $(OUTPUT)/errors.txt | sed 's+\[.*input/+[+' \
+	    > $(OUTPUT)/clean_errors.txt;
+
+	rm $(OUTPUT)/isisTruth.cub $(OUTPUT)/errors.txt;
diff --git a/isis/src/base/apps/ddd2isis/ddd2isis.cpp b/isis/src/base/apps/ddd2isis/ddd2isis.cpp
index 2db7e354feeb2e57923dccac114418755af89893..efae0dc7aa3568117bdb73a438859d6330fb2681 100644
--- a/isis/src/base/apps/ddd2isis/ddd2isis.cpp
+++ b/isis/src/base/apps/ddd2isis/ddd2isis.cpp
@@ -4,26 +4,19 @@
 #include "SpecialPixel.h"
 #include "FileName.h"
 #include "Pvl.h"
+#include <QMap>
 
 using namespace std;
 using namespace Isis;
 
 void IsisMain() {
+
   UserInterface &ui = Application::GetUserInterface();
-  ProcessImport p;
   IString from = ui.GetFileName("FROM");
-  EndianSwapper swp("MSB");
-  int nsamples = 0, nlines = 0, nbands = 1, noffset = 0, bittype = 0, nbytes = 0;
-
-  union {
-    char readChars[4];
-    long readLong;
-    float readFloat;
-  } readBytes;
-
   ifstream fin;
+
   fin.open(from.c_str(), ios::in | ios::binary);
-  if(!fin.is_open()) {
+  if( !fin.is_open() ) {
     string msg = "Cannot open input file [" + from + "]";
     throw IException(IException::Io, msg, _FILEINFO_);
   }
@@ -41,86 +34,146 @@ void IsisMain() {
    *
    */
 
-  // Verify the magic number
+   // ifstream read() needs a char* to read values into, so the union
+   // is used to store read values
+   union {
+     char readChars[4];
+     long readLong;
+     float readFloat;
+   } readBytes;
+
+   // ddd files are LSB
+   EndianSwapper swp("MSB");
+
+  // Verify that the file is a ddd by reading in the first 4 bytes and
+  // comparing the magic numbers. The magic number for a ddd file is 1659.
   readBytes.readLong = 0;
   fin.seekg(0);
   fin.read(readBytes.readChars, 4);
+  if( fin.fail() || fin.eof() ) {
+    string msg = "Could not read the magic number in the input file [" + from + "]";
+    throw IException(IException::Io, msg, _FILEINFO_);
+  }
   readBytes.readFloat = swp.Float(readBytes.readChars);
 
-  if(readBytes.readLong != 0x67B) {
+  if(readBytes.readLong != 1659) {
     string msg = "Input file [" + from + "] does not appear to be in ddd format";
     throw IException(IException::Io, msg, _FILEINFO_);
   }
 
+  // Read bytes 4-7 to get number of lines
   fin.read(readBytes.readChars, 4);
+  if( fin.fail() || fin.eof() ) {
+    string msg = "Could not read the number of lines in the input file [" + from + "]";
+    throw IException(IException::Io, msg, _FILEINFO_);
+  }
   readBytes.readFloat = swp.Float(readBytes.readChars);
-  nlines = (int)readBytes.readLong;
+  int nLines = (int) readBytes.readLong;
 
+  // Read bytes 8-11 to get number of bytes
   fin.read(readBytes.readChars, 4);
+  if( fin.fail() || fin.eof() ) {
+    string msg = "Could not read the number of bytes in the input file [" + from + "]";
+    throw IException(IException::Io, msg, _FILEINFO_);
+  }
   readBytes.readFloat = swp.Float(readBytes.readChars);
-  nbytes = (int)readBytes.readLong;
+  int nBytes = (int) readBytes.readLong;
 
+  // Read bytes 12-15 to get the total number of bits out of all the bands
   fin.read(readBytes.readChars, 4);
-  readBytes.readFloat = swp.Float(readBytes.readChars);
-
-  if(fin.fail() || fin.eof()) {
-    string msg = "An error ocurred when reading the input file [" + from + "]";
+  if( fin.fail() || fin.eof() ) {
+    string msg = "Could not read the number of bits in the input file [" + from + "]";
     throw IException(IException::Io, msg, _FILEINFO_);
   }
-
-  bittype = readBytes.readLong;
-
-  fin.read(readBytes.readChars, 4);
   readBytes.readFloat = swp.Float(readBytes.readChars);
-
+  int totalBandBits = readBytes.readLong;
+
+  // Maps the bit type of the file to the number of bytes of that type
+  // Taken directly from a given python program that reads in ddd data
+  QMap<int, int> dataTypes;
+  dataTypes.insert(1450901768, 1);
+  dataTypes.insert(1450902032, 2);
+  dataTypes.insert(1450902288, 2);
+  dataTypes.insert(1450902560, 4);
+  dataTypes.insert(1450902816, 4);
+  dataTypes.insert(1450903072, 4);
+  dataTypes.insert(1450903360, 8);
+  dataTypes.insert(8, 1);
+  dataTypes.insert(16, 2);
+  dataTypes.insert(48, 2);
+
+  // Read bytes 16-19 to get the bit type
+  // Map the bit type to the number of bytes of that data type
   fin.read(readBytes.readChars, 4);
   readBytes.readFloat = swp.Float(readBytes.readChars);
-  noffset = (int)readBytes.readLong;
-  if (noffset < 1024) {
-    noffset = 1024;
+  int bitType = (int) readBytes.readLong;
+
+  int dataTypeBytes;
+  int nOffset;
+  // Check for new header format. Taken from the python program.
+  if ( (bitType & 0xfffff000) == 0x567b0000 ) {
+    dataTypeBytes = dataTypes.value(bitType);
+
+    // Read bytes 20-23 to get offset
+    // New header format may have different offsets
+    fin.read(readBytes.readChars, 4);
+    readBytes.readFloat = swp.Float(readBytes.readChars);
+    nOffset = (int) readBytes.readLong;
+    if (nOffset < 1024) {
+      nOffset = 1024;
+    }
+  }
+  else {
+    // Old header format does not have a bit type
+    // Old header format's offset is always 1024.
+     dataTypeBytes = dataTypes.value(totalBandBits);
+     nOffset = 1024;
   }
 
+  fin.close();
+
   PvlGroup results("FileInfo");
-  results += PvlKeyword("NumberOfLines", toString(nlines));
-  results += PvlKeyword("NumberOfBytesPerLine", toString(nbytes));
-  results += PvlKeyword("BitType", toString(bittype));
-  nsamples = nbytes / (bittype / 8);
-  results += PvlKeyword("NumberOfSamples", toString(nsamples));
-  nbands = nbytes / nsamples;
-  results += PvlKeyword("NumberOfBands", toString(nbands));
-  results += PvlKeyword("LabelBytes", toString(noffset));
+  results += PvlKeyword( "NumberOfLines", toString(nLines) );
+  results += PvlKeyword( "NumberOfBytesPerLine", toString(nBytes) );
+  results += PvlKeyword( "BitType", toString(bitType) );
+  int nSamples = nBytes / (totalBandBits / 8);
+  results += PvlKeyword( "NumberOfSamples", toString(nSamples) );
+  int nBands = (totalBandBits / 8) / dataTypeBytes;
+  results += PvlKeyword( "NumberOfBands", toString(nBands) );
+  results += PvlKeyword( "LabelBytes", toString(nOffset) );
   Application::Log(results);
 
-  fin.close();
-
-  if (ui.WasEntered("TO")) {
-    switch(bittype) {
-      case 8:
-        p.SetPixelType(Isis::UnsignedByte);
-        break;
-      case 16:
-        p.SetPixelType(Isis::UnsignedWord);
-        break;
-      case 32:
-        p.SetPixelType(Isis::Real);
-        break;
-      default:
-        IString msg = "Unsupported bit per pixel count [" + IString(bittype) + "]. ";
-        msg += "(Use the raw2isis and crop programs to import the file in case it is ";
-        msg += "line or sample interleaved.)";
-        throw IException(IException::Io, msg, _FILEINFO_);
-    }
+  ProcessImport p;
 
-    p.SetDimensions(nsamples, nlines, nbands);
-    p.SetFileHeaderBytes(noffset);
-    p.SetByteOrder(Isis::Msb);
-    p.SetInputFile(ui.GetFileName("FROM"));
-    p.SetOutputCube("TO");
+  int bitsPerBand = totalBandBits / nBands;
+  switch(bitsPerBand) {
+    case 8:
+      p.SetPixelType(Isis::UnsignedByte);
+      break;
+    case 16:
+      p.SetPixelType(Isis::UnsignedWord);
+      break;
+    case 32:
+      p.SetPixelType(Isis::Real);
+      break;
+    default:
+      IString msg = "Unsupported bit per pixel count [" + IString(bitsPerBand) + "] ";
+      msg += "from [" + from + "]";
+      throw IException(IException::Io, msg, _FILEINFO_);
+  }
 
-    p.StartProcess();
-    p.EndProcess();
+  // ddd files with more than one band are pixel interleaved
+  // Having one band is similar to BIP, but this is here for clarification
+  if (nBands > 1) {
+    p.SetOrganization(ProcessImport::BIP);
   }
 
-  return;
-}
+  p.SetDimensions(nSamples, nLines, nBands);
+  p.SetFileHeaderBytes(nOffset);
+  p.SetByteOrder(Isis::Msb);
+  p.SetInputFile( ui.GetFileName("FROM") );
+  p.SetOutputCube("TO");
 
+  p.StartProcess();
+  p.EndProcess();
+}
diff --git a/isis/src/base/apps/ddd2isis/ddd2isis.xml b/isis/src/base/apps/ddd2isis/ddd2isis.xml
index e35ea4decf63a2909a8f699198bd113543c33d30..19548a0aff53048f4a06974e0accc43b0cb2c968 100644
--- a/isis/src/base/apps/ddd2isis/ddd2isis.xml
+++ b/isis/src/base/apps/ddd2isis/ddd2isis.xml
@@ -7,7 +7,8 @@
   </brief>
 
   <description>
-    This program will import a ddd image into an Isis cube. The ddd format files are created by Malin Space Science Systems.
+    This program will import a ddd image into an Isis cube. The ddd format files
+    are created by Malin Space Science Systems.
   </description>
 
   <history>
@@ -30,6 +31,16 @@
       will need to be read in using a combination of the raw2isis and crop
       programs. Fixes #1713.
     </change>
+    <change name="Kaitlyn Lee" date="2018-03-01">
+      We were given a python program that reads in data from a ddd file
+      to use as an example. In the python program, the formula they used to
+      calculate the number of bands is different from the one we previously used.
+      The old formula did the number of total band bits / 8; the formula is now
+      (the number of total band bits / 8) / the number of bytes of the data type
+      of the file's bit type. Added the ability to process files with multiple
+      bands. Removed the internal default of the output parameter set to None so
+      that an output file is now requried. Fixes #703.
+    </change>
   </history>
 
   <category>
@@ -55,7 +66,6 @@
       <parameter name="TO">
          <type>cube</type>
          <fileMode>output</fileMode>
-         <internalDefault>None</internalDefault>
          <brief>
            Output Isis cube
          </brief>
diff --git a/isis/src/base/apps/ddd2isis/tsts/default/Makefile b/isis/src/base/apps/ddd2isis/tsts/default/Makefile
index a1ac8f27297b69f98b7d719b691b7fe4275918df..1272a0aca97f291f6610d723012c9419628a2a33 100644
--- a/isis/src/base/apps/ddd2isis/tsts/default/Makefile
+++ b/isis/src/base/apps/ddd2isis/tsts/default/Makefile
@@ -4,3 +4,5 @@ include $(ISISROOT)/make/isismake.tsts
 
 commands:
 	$(APPNAME) FROM=$(INPUT)/vis1flat.ddd TO=$(OUTPUT)/vis1flat.cub > /dev/null;
+	$(APPNAME) FROM=$(INPUT)/0023MD0000140000101507C00_DXXX_16b.ddd \
+		TO=$(OUTPUT)/0023MD0000140000101507C00_DXXX_16b.cub > /dev/null;
diff --git a/isis/src/base/apps/ddd2isis/tsts/errors/Makefile b/isis/src/base/apps/ddd2isis/tsts/errors/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4aa6202f90433c5ba1d0021e8d55518ffd45e6ab
--- /dev/null
+++ b/isis/src/base/apps/ddd2isis/tsts/errors/Makefile
@@ -0,0 +1,24 @@
+APPNAME = ddd2isis
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	# TEST: Throws an error when trying to open the file
+	if [ `$(APPNAME) \
+		FROM=$(INPUT)/vis1flat.ddd \
+		TO=$(OUTPUT)/vis1flat.cub \
+		2> $(OUTPUT)/temp.txt > /dev/null` ]; \
+		then true; \
+		fi;
+
+	# TEST: Throws an error when trying to read from a cub instead of ddd
+	if [ `$(APPNAME) \
+		FROM=$(INPUT)/vis1flat.cub \
+		TO=$(OUTPUT)/vis1flat.cub \
+		2>> $(OUTPUT)/temp.txt > /dev/null` ]; \
+		then true; \
+		fi;
+
+	# Removes input file path up until input
+	$(SED) 's+\[.*/input+[input+' $(OUTPUT)/temp.txt > $(OUTPUT)/errorTruth.txt;
+	$(RM) $(OUTPUT)/temp.txt
diff --git a/isis/src/base/apps/dsk2isis/dsk2isis.cpp b/isis/src/base/apps/dsk2isis/dsk2isis.cpp
index 5ffd77828ce0652865dd2d5b806bec277fb9c162..e897fa848829ca05ddf2035024caba0e2711fda6 100755
--- a/isis/src/base/apps/dsk2isis/dsk2isis.cpp
+++ b/isis/src/base/apps/dsk2isis/dsk2isis.cpp
@@ -113,6 +113,7 @@ void IsisMain() {
           // computation.
           NaifVertex observer(3);
           point.ToNaifArray(&observer[0]);
+
           NaifStatus::CheckErrors();
           vscl_c(1.5, &observer[0], &observer[0]);
           NaifStatus::CheckErrors();
diff --git a/isis/src/base/apps/dsk2isis/dsk2isis.xml b/isis/src/base/apps/dsk2isis/dsk2isis.xml
index 3378468635f2b3bca5bcfc85aaa26f7a94ed8bc3..003b304c6fcc6c8dcc88af620f922b7670027ff9 100755
--- a/isis/src/base/apps/dsk2isis/dsk2isis.xml
+++ b/isis/src/base/apps/dsk2isis/dsk2isis.xml
@@ -7,9 +7,9 @@
   </brief>
 
   <description>
-      This application will convert a NAIF DSK plate model to an ISIS cube.  
-      Users must  provide a valid map file to use for allocation of the ISIS 
-      cube.  The scale and type of projection determine the size of the output 
+      This application will convert a NAIF DSK plate model to an ISIS cube.
+      Users must  provide a valid map file to use for allocation of the ISIS
+      cube.  The scale and type of projection determine the size of the output
       cube.
   </description>
 
@@ -24,10 +24,13 @@
         Process data tiles instead of a pixel at a time; Test for
         valid output map coordinate at every map pixel. References #2035
     </change>
+    <change name="Kaitlyn Lee" date="2018-03-10">
+        Changed the category to Import and Export. Fixes #5188.
+    </change>
 </history>
 
   <category>
-    <categoryItem>Map Projection</categoryItem>
+    <categoryItem>Import and Export</categoryItem>
   </category>
 
   <groups>
@@ -37,9 +40,9 @@
         <fileMode>input</fileMode>
         <brief>Name of NAIF DSK DEM file</brief>
         <description>
-          This parameter provides the name of the NAIF DSK file to convert to 
-          ISIS format.  It is assumed to be in body fixed coordinates from which 
-          intersections for each output map grid point will be computed using 
+          This parameter provides the name of the NAIF DSK file to convert to
+          ISIS format.  It is assumed to be in body fixed coordinates from which
+          intersections for each output map grid point will be computed using
           NAIF's DSK toolkit.
         </description>
         <filter>
@@ -52,8 +55,8 @@
         <fileMode>input</fileMode>
         <brief>Name of file containing map description</brief>
         <description>
-            This paramter provides the name of a file containing a valid map 
-            projection defintion. One can use the ISIS maptemplate application 
+            This paramter provides the name of a file containing a valid map
+            projection defintion. One can use the ISIS maptemplate application
             to create a map template.
         </description>
         <filter>
@@ -69,8 +72,8 @@
           Output cube
         </brief>
         <description>
-          Name of the output ISIS file created by this application containing 
-          the rendering of the DSK DEM into and ISIS compatible DEM for use in 
+          Name of the output ISIS file created by this application containing
+          the rendering of the DSK DEM into and ISIS compatible DEM for use in
           the ISIS system.
         </description>
       </parameter>
@@ -82,8 +85,8 @@
             </brief>
             <description>
               <p>
-                This parameter provides two different methods to compute the 
-                output radius value for a given latitude, longitude map grid 
+                This parameter provides two different methods to compute the
+                output radius value for a given latitude, longitude map grid
                 point.
               </p>
             </description>
@@ -91,27 +94,27 @@
             <list>
                 <option value="RAY">
                     <brief>
-                        Ray intersection from image pixel location to DEM 
+                        Ray intersection from image pixel location to DEM
                     </brief>
                     <description>
-                        Calculates an intercept location on the (irregularly                     
-                        shaped) body from the observer point (i.e., image pixel 
-                        location) and look (or ray) direction 
+                        Calculates an intercept location on the (irregularly
+                        shaped) body from the observer point (i.e., image pixel
+                        location) and look (or ray) direction
                     </description>
                 </option>
                 <option value="GRID">
                     <brief>
-                        Calculate using surface point latitude, longitude grid 
-                        point  
+                        Calculate using surface point latitude, longitude grid
+                        point
                     </brief>
                     <description>
-                         The radius value of the DEM is determined at the 
-                         intercept point of the triaxial ellipsoid from the 
-                         center of the body. This method extends the surface (x, 
-                         y, z) body fixed coordinate of the ellisoid by 
-                         extending the vector by a factor of 1.5.  This creates 
-                         the obsever point.  The direction vector is then the 
-                         negation of the observer point.  From this, a DEM 
+                         The radius value of the DEM is determined at the
+                         intercept point of the triaxial ellipsoid from the
+                         center of the body. This method extends the surface (x,
+                         y, z) body fixed coordinate of the ellisoid by
+                         extending the vector by a factor of 1.5.  This creates
+                         the obsever point.  The direction vector is then the
+                         negation of the observer point.  From this, a DEM
                          surface intercept point is determined.
                     </description>
                 </option>
diff --git a/isis/src/base/apps/equalizer/equalizer.cpp b/isis/src/base/apps/equalizer/equalizer.cpp
index ab5e714d554a2497aaa93b270cd025f751a3742d..35ba79383aff6f5c2093589ee60d611b03da8c02 100644
--- a/isis/src/base/apps/equalizer/equalizer.cpp
+++ b/isis/src/base/apps/equalizer/equalizer.cpp
@@ -111,4 +111,4 @@ void IsisMain() {
     equalizer.applyCorrection(ui.WasEntered("TOLIST") ?
         ui.GetFileName("TOLIST") : "");
   }
-}
\ No newline at end of file
+}
diff --git a/isis/src/base/apps/equalizer/tsts/gain/Makefile b/isis/src/base/apps/equalizer/tsts/gain/Makefile
index 24de02e521d68a0d6ff059149173b9d7db2bfe8a..f55593948ffb1459a2484a1527343868e825ed59 100644
--- a/isis/src/base/apps/equalizer/tsts/gain/Makefile
+++ b/isis/src/base/apps/equalizer/tsts/gain/Makefile
@@ -1,3 +1,6 @@
+equalizerTruth4.cub.TOLERANCE = .00005
+equalizerTruth5.cub.TOLERANCE = .00007
+
 APPNAME = equalizer
 
 include $(ISISROOT)/make/isismake.tsts
@@ -10,7 +13,7 @@ commands:
 	  > /dev/null;
 	$(MV) I00824006RDR.lev2.equ.cub $(OUTPUT)/equalizerTruth1.cub;
 	$(MV) I01523019RDR.lev2.equ.cub $(OUTPUT)/equalizerTruth2.cub;
-	$(MV) I02609002RDR.lev2.equ.cub $(OUTPUT)/equalizerTruth3.cub; 
+	$(MV) I02609002RDR.lev2.equ.cub $(OUTPUT)/equalizerTruth3.cub;
 	$(LS) $(INPUT)/EN*.cub > $(OUTPUT)/files.lis;
 	$(LS) $(INPUT)/EN*top*.cub > $(OUTPUT)/hold.lis;
 	$(ECHO) "$(OUTPUT)/equalizerTruth4.cub" > $(OUTPUT)/tolist.lis
@@ -19,4 +22,3 @@ commands:
 	$(APPNAME) fromlist=$(OUTPUT)/files.lis holdlist=$(OUTPUT)/hold.lis \
 	  adjust=gain tolist=$(OUTPUT)/tolist.lis > /dev/null;
 	$(RM) $(OUTPUT)/files.lis $(OUTPUT)/hold.lis $(OUTPUT)/tolist.lis;
-
diff --git a/isis/src/base/apps/equalizer/tsts/nonOverlapRetryBoth/Makefile b/isis/src/base/apps/equalizer/tsts/nonOverlapRetryBoth/Makefile
index 4860d96539440fe2cf65e0a28c8fcb9b9b99666b..48ded0bc4ef09fb5ed766249ea4c30913ee2a108 100644
--- a/isis/src/base/apps/equalizer/tsts/nonOverlapRetryBoth/Makefile
+++ b/isis/src/base/apps/equalizer/tsts/nonOverlapRetryBoth/Makefile
@@ -1,12 +1,14 @@
 # This tests calculating statistics for input with non-overlapping files,
-# correcting the input list by REMOVING non-overlaps and recalculating to 
-# determine normalization gains and offsets for equalization, 
+# correcting the input list by REMOVING non-overlaps and recalculating to
+# determine normalization gains and offsets for equalization,
 # and then applying corrections.
 #
 # NOTE: An exception occurs when there are non-overlaps during calculation,
 # it is handled and the output is sent to nonOverlapError.txt
 APPNAME = equalizer
 
+I10047011EDR.proj.reduced.cub.TOLERANCE = .00001
+
 include $(ISISROOT)/make/isismake.tsts
 
 commands:
diff --git a/isis/src/base/apps/fits2isis/tsts/default/Makefile b/isis/src/base/apps/fits2isis/tsts/default/Makefile
index ff2bf1cd351ea223b647c5744531d0e48f9bdb3f..59bdaf73914c27244b6d53230288caff50c1d945 100644
--- a/isis/src/base/apps/fits2isis/tsts/default/Makefile
+++ b/isis/src/base/apps/fits2isis/tsts/default/Makefile
@@ -4,10 +4,6 @@ include $(ISISROOT)/make/isismake.tsts
 
 commands:
 	$(APPNAME) from=$(INPUT)/WFPC2u5780205r_c0fx.fits \
-	to=$(OUTPUT)/fitsTruth.cub \
-	> /dev/null;
-	raw2isis from=$(INPUT)/WFPC2u5780205r_c0fx.fits \
-	to=$(OUTPUT)/rawTruth.cub \
-	SAMPLES=200 LINES=200 BANDS=4 SKIP=23040 \
-	BITTYPE=REAL BYTEORDER=MSB \
-	> /dev/null;
+	  to=$(OUTPUT)/fitsTruth.cub > /dev/null;
+	catlab from=$(OUTPUT)/fitsTruth.cub \
+		to=$(OUTPUT)/fitsTruth.pvl > /dev/null;
diff --git a/isis/src/base/apps/fits2isis/tsts/organization/Makefile b/isis/src/base/apps/fits2isis/tsts/organization/Makefile
index 5ca2717b9c3ea29e2479d669731442d382359c8d..bae7569d0c710c10cf5c726981862d5650776234 100644
--- a/isis/src/base/apps/fits2isis/tsts/organization/Makefile
+++ b/isis/src/base/apps/fits2isis/tsts/organization/Makefile
@@ -4,8 +4,10 @@ include $(ISISROOT)/make/isismake.tsts
 
 commands:
 	$(APPNAME) from=$(INPUT)/lsb_0034933739_0x53c_sci_1.fit \
-	to=$(OUTPUT)/bilTruth.cub organization=bil imagenumber=1\
-	> /dev/null;
+		to=$(OUTPUT)/bilTruth.cub organization=bil imagenumber=1 > /dev/null;
+	catlab from=$(OUTPUT)/bilTruth.cub \
+		to=$(OUTPUT)/bilTruth.pvl > /dev/null;
 	$(APPNAME) from=$(INPUT)/lsb_0034933739_0x53c_sci_1.fit \
-	to=$(OUTPUT)/bsqTruth.cub organization=bsq imagenumber=1 \
-	> /dev/null;
+		to=$(OUTPUT)/bsqTruth.cub organization=bsq imagenumber=1 > /dev/null;
+	catlab from=$(OUTPUT)/bsqTruth.cub \
+		to=$(OUTPUT)/bsqTruth.pvl > /dev/null;
diff --git a/isis/src/base/apps/gauss/gauss.cpp b/isis/src/base/apps/gauss/gauss.cpp
index d0e50b03768537ca8595c0d22c204bca5ed3042a..3886d90214c82694f3d8f3f79165b840936b9122 100644
--- a/isis/src/base/apps/gauss/gauss.cpp
+++ b/isis/src/base/apps/gauss/gauss.cpp
@@ -46,7 +46,6 @@ void setFilter(int size, double stdDev) {
   //Iterate through the input kernel's data values to fill the coefs array
   const double PI = 3.141592653589793;
   int i = 0;
-  cout << exp((double)1.0) << endl;
   for(double y = -(size / 2) ; y <= (size / 2) ; y++) {
     for(double x = -(size / 2) ; x <= (size / 2) ; x++) {
       /*
diff --git a/isis/src/base/apps/gauss/gauss.xml b/isis/src/base/apps/gauss/gauss.xml
index 1c99acba96d873cb28903a8600d27482fc3eeaa7..1ec80dffa45a56730f563e0625050f35e302360b 100644
--- a/isis/src/base/apps/gauss/gauss.xml
+++ b/isis/src/base/apps/gauss/gauss.xml
@@ -7,36 +7,36 @@
   </brief>
 
   <description>
-    This program calculates weight based on the bell-shaped Gaussian 
+    This program calculates weight based on the bell-shaped Gaussian
     curve. The weight is then applied to an image kernel in such a way as to
     create a filter that will move a weighted average through the image. The
-     end result is a blurred image with reduced detail and noise. The Gaussian 
+     end result is a blurred image with reduced detail and noise. The Gaussian
      function that determines the weight for all of the values in the kernel is
      as follows
   <pre>
                                                   /   x^2+y^2   \
                                                - |  -----------  |
                 G(x,y) =           1              \ 2(STDDEV)^2 /
-      			    --------------- e^ 
-			    2(pi)(STDDEV)^2 
+      			    --------------- e^
+			    2(pi)(STDDEV)^2
   </pre>
   This formula creates a kernel that then runs through the image. The center of
   the kernel is at (0,0). This means that a 3x3 boxcar will be of the form
   <pre>
-        The kernel coordinates	          
+        The kernel coordinates
   (-2,-2) (-1,-2) (0,-2) (1,-2) (2,-2)
-  (-2,-1) (-1,-1) (0,-1) (1,-1)	(2,-1)	
-  (-2, 0) (-1, 0) (0, 0) (1, 0) (2, 0)       
+  (-2,-1) (-1,-1) (0,-1) (1,-1)	(2,-1)
+  (-2, 0) (-1, 0) (0, 0) (1, 0) (2, 0)
   (-2, 1) (-1, 1) (0, 1) (1, 1) (2, 1)
   (-2, 2) (-1, 2) (0, 2) (1, 2) (2, 2)
-  
+
           The kernel values (approx)
        1   4   7   4   1
        4   16  26  16  4
        7   26  41  26  7     x 1/273
        4   16  26  16  4
-       1   4   7   4   1 
-  </pre> 
+       1   4   7   4   1
+  </pre>
   </description>
 
   <seeAlso>
@@ -48,15 +48,15 @@
     <change name="Drew Davidson" date="2004-08-05">
       Original version
     </change>
-    
+
     <change name="Drew Davidson" date="2004-08-06">
       Added application test
     </change>
-    
+
     <change name="Drew Davidson" date="2004-08-16">
       Added examples
     </change>
-    
+
     <change name="Drew Davidson" date="2005-06-27">
       Fixed bug in boxcar size
     </change>
@@ -64,6 +64,9 @@
     <change name="Brendan George" date="2006-09-21">
         Documentation fixes
     </change>
+    <change name="Kaitlyn Lee" date="2018-02-15">
+        Removed the cout that was outputting e to the terminal. Fixes #5198.
+    </change>
   </history>
 
   <category>
@@ -99,14 +102,14 @@
         </description>
       </parameter>
     </group>
-    
+
     <group name="boxcar">
       <parameter name="SIZE">
         <type>integer</type>
         <default>
           <item>3</item>
         </default>
-	<odd/>	
+	<odd/>
         <brief>Size of one side of the boxcar</brief>
         <description>
           This is the user specified size of the boxcar that
@@ -116,7 +119,7 @@
         </description>
       </parameter>
     </group>
-    
+
     <group name="Standard Deviation">
       <parameter name="STDDEV">
         <type>double</type>
@@ -126,12 +129,12 @@
 	<minimum inclusive="false">0</minimum>
         <brief>Standard Deviation</brief>
         <description>
-	  At the most basic level, standard deviation can be thought of in this 
-	  context as the intensity of the blur being applied to the image. The 
+	  At the most basic level, standard deviation can be thought of in this
+	  context as the intensity of the blur being applied to the image. The
 	  higher this value, the more noise and detail will be removed.
-          At a deeper level, standard deviation is described as the average 
-	  distance from any single measurement of a set to the mean of that set. 
-	  
+          At a deeper level, standard deviation is described as the average
+	  distance from any single measurement of a set to the mean of that set.
+
         </description>
       </parameter>
     </group>
@@ -139,16 +142,16 @@
   <examples>
     <example>
         <brief>
-         Using a 3 x 3 boxcar 
+         Using a 3 x 3 boxcar
         </brief>
         <description>
-      This example shows the use of the default standard deviation (1.0) and the 
+      This example shows the use of the default standard deviation (1.0) and the
       default boxcar size (3). Since the boxcar must be square in this program,
       this means that a 3 x 3 boxcar will be used.
         </description>
         <terminalInterface>
           <commandLine>
-	    from= peaks.cub 
+	    from= peaks.cub
 	    to=gauss3x3.cub
 	    size=3
 	    STDDEV= 1.0
@@ -157,7 +160,7 @@
 	This example uses all of the default values specified by the program
 	</description>
       </terminalInterface>
-   
+
       <guiInterfaces>
         <guiInterface>
 	  <image width="440" height="625" src="assets/images/gauss3x3gui.jpg">
@@ -165,67 +168,67 @@
 	    Example GUI
 	    </brief>
 	    <description>
-	      Screenshot of the GUI with parameters set to perform Gaussian 
+	      Screenshot of the GUI with parameters set to perform Gaussian
 	      smoothing with a 3 x 3 boxcar.
 	    </description>
-	    <thumbnail width="220" height="312" caption="gauss gui" 
+	    <thumbnail width="220" height="312" caption="gauss gui"
 	     src="assets/thumbs/gauss3x3gui.jpg" />
 	  </image>
 	</guiInterface>
       </guiInterfaces>
- 
+
       <inputImages>
         <image width="500" height="500" src="assets/images/peaks.jpg">
 	  <brief>
 	    Input image before gauss.
 	  </brief>
 	  <description>
-	    This is the image as it was taken originally. 
+	    This is the image as it was taken originally.
 	  </description>
-	  <thumbnail caption= "The image before the filter" 
+	  <thumbnail caption= "The image before the filter"
 	   src="assets/thumbs/peaks.jpg" width="200" height="200"/>
 	  <parameterName>FROM</parameterName>
 	</image>
       </inputImages>
-      
+
       <outputImages>
         <image width="500" height="500" src="assets/images/gauss3x3.jpg">
 	  <brief>
 	  Output image after gauss
 	  </brief>
 	  <description>
-	    This is the image after the gauss filter. Edges of the image are 
+	    This is the image after the gauss filter. Edges of the image are
 	    now much softer. Detail and noise has been removed.
 	  </description>
-	  <thumbnail caption= "The image after the filter" 
+	  <thumbnail caption= "The image after the filter"
 	  src="assets/thumbs/gauss3x3.jpg" width="200" height="200"/>
 	  <parameterName>TO</parameterName>
 	</image>
       </outputImages>
     </example>
-    
+
     <example>
         <brief>
-         Using a 5 x 5 boxcar 
+         Using a 5 x 5 boxcar
         </brief>
         <description>
-      This example shows the use of a larger standard deviation (2.0) and the 
+      This example shows the use of a larger standard deviation (2.0) and the
       larger boxcar (5). As with the last example, the single value of 5 will
       be applied to both the line size and sample size of the boxcar.
         </description>
         <terminalInterface>
           <commandLine>
-	    from= peaks.cub 
+	    from= peaks.cub
 	    to=bigblur.cub
 	    size=5
 	    STDDEV= 2.0
 	  </commandLine>
 	<description>
-	This example will create a more dramatic blur, as everything is larger 
+	This example will create a more dramatic blur, as everything is larger
 	than in the first example
 	</description>
       </terminalInterface>
-   
+
       <guiInterfaces>
         <guiInterface>
 	  <image width="440" height="625" src="assets/images/gauss5x5gui.jpg">
@@ -233,40 +236,40 @@
 	    Example GUI
 	    </brief>
 	    <description>
-	      Screenshot of the GUI with parameters set to perform Gaussian 
+	      Screenshot of the GUI with parameters set to perform Gaussian
 	      smoothing with a 5 x 5 boxcar and 2.0 as the standard deviation.
 	    </description>
-	    <thumbnail width="220" height="312" caption="gauss gui" 
+	    <thumbnail width="220" height="312" caption="gauss gui"
 	     src="assets/thumbs/gauss5x5gui.jpg" />
 	  </image>
 	</guiInterface>
       </guiInterfaces>
- 
+
       <inputImages>
         <image width="500" height="500" src="assets/images/peaks.jpg">
 	  <brief>
 	    Input image before gauss.
 	  </brief>
 	  <description>
-	    This is the image as it was taken originally. 
+	    This is the image as it was taken originally.
 	  </description>
-	  <thumbnail caption= "The image before the filter" 
+	  <thumbnail caption= "The image before the filter"
 	   src="assets/thumbs/peaks.jpg" width="200" height="200"/>
 	  <parameterName>FROM</parameterName>
 	</image>
       </inputImages>
-      
+
       <outputImages>
         <image width="500" height="500" src="assets/images/gauss5x5.jpg">
 	  <brief>
 	  Output image after gauss
 	  </brief>
 	  <description>
-	    This is the image after the gauss filter. Edges of the image are 
+	    This is the image after the gauss filter. Edges of the image are
 	    now much softer. The blur is much more noticeable on account both of
 	    the larger boxcar and the larger standard deviation.
 	  </description>
-	  <thumbnail caption= "The image after the filter" 
+	  <thumbnail caption= "The image after the filter"
 	  src="assets/thumbs/gauss5x5.jpg" width="200" height="200"/>
 	  <parameterName>TO</parameterName>
 	</image>
diff --git a/isis/src/base/apps/getsn/getsn.cpp b/isis/src/base/apps/getsn/getsn.cpp
index 0af1554c38324d449edf5e13d87d608e93ba752d..3d1d30e1a33514f634cd620736b236921181ecd8 100644
--- a/isis/src/base/apps/getsn/getsn.cpp
+++ b/isis/src/base/apps/getsn/getsn.cpp
@@ -34,16 +34,12 @@ void IsisMain() {
   bool WriteObservation = ui.GetBoolean("OBSERVATION");
 
   QString format = ui.GetString("FORMAT");
-  bool pvl = true;
+  bool pvl;
   if (format == "PVL") {
     pvl = true;
   }
-  else if (format == "FLAT") {
-    pvl = false;
-  }
   else {
-    QString msg = "Invalid format QString [" + format + "]";
-    throw IException(IException::User, msg, _FILEINFO_);
+    pvl = false;
   }
 
   // Extract label from cube file
@@ -51,20 +47,20 @@ void IsisMain() {
 
   PvlGroup sn("Results");
 
-  if(WriteFile) sn += PvlKeyword("Filename", from);
-  if(WriteSN) sn += PvlKeyword("SerialNumber", SerialNumber::Compose(*label, ui.GetBoolean("DEFAULT")));
-  if(WriteObservation) sn += PvlKeyword("ObservationNumber", ObservationNumber::Compose(*label, ui.GetBoolean("DEFAULT")));
+  if (WriteFile) sn += PvlKeyword("Filename", from);
+  if (WriteSN) sn += PvlKeyword( "SerialNumber", SerialNumber::Compose( *label, ui.GetBoolean("DEFAULT") ) );
+  if (WriteObservation) sn += PvlKeyword( "ObservationNumber", ObservationNumber::Compose( *label, ui.GetBoolean("DEFAULT") ) );
 
-  if(ui.WasEntered("TO")) {
+  if ( ui.WasEntered("TO") ) {
     // PVL option
     if (pvl) {
       // Create a serial number and observation number for this cube & put it in a pvlgroup for output
       Pvl pvl;
       pvl.addGroup(sn);
-      if(ui.GetBoolean("APPEND"))
-        pvl.append(ui.GetFileName("TO"));
+      if ( ui.GetBoolean("APPEND") )
+        pvl.append( ui.GetFileName("TO") );
       else
-        pvl.write(ui.GetFileName("TO"));
+        pvl.write( ui.GetFileName("TO") );
     }
     // FLAT option
     else {
@@ -83,7 +79,7 @@ void IsisMain() {
     }
 
     // Construct a label with the results
-    if(ui.IsInteractive()) {
+    if ( ui.IsInteractive() ) {
       Application::GuiLog(sn);
     }
   }
diff --git a/isis/src/base/apps/getsn/getsn.xml b/isis/src/base/apps/getsn/getsn.xml
index 30251bdab9287fb57e32d372dc9331da1496cbcf..d7375ad626d86613d23d5adb5420eac7d788a4f9 100644
--- a/isis/src/base/apps/getsn/getsn.xml
+++ b/isis/src/base/apps/getsn/getsn.xml
@@ -27,9 +27,9 @@
     <change name="Christopher Austin" date="2008-01-08">
       Augmented observation number and added TO file with APPEND option
     </change>
-    <change name="Steven Koechle" date="2008-04-04"> 
-      Added booleans for which keywords to get. If TO parameter is not entered 
-      output will go to console. Added results group to SessionLog and GuiLog 
+    <change name="Steven Koechle" date="2008-04-04">
+      Added booleans for which keywords to get. If TO parameter is not entered
+      output will go to console. Added results group to SessionLog and GuiLog
       (if applicable)
     </change>
     <change name="Steven Lambright" date="2008-10-31">
@@ -42,6 +42,11 @@
       Added FORMAT option to choose between PVL and FLAT format. Effects output
       file only, default is still PVL.
     </change>
+    <change name="Kaitlyn Lee" date="2018-01-17">
+      Removed unreachable else clause that assumed more than two options are
+      allowed to be entered in for the parameter FORMAT. Added test to default case
+      to increase code coverage.
+    </change>
   </history>
 
   <groups>
@@ -70,7 +75,7 @@
             No Output file will be created
         </internalDefault>
         <description>
-          The text file in which the Result Pvl created is either appended or 
+          The text file in which the Result Pvl created is either appended or
           written to.
         </description>
         <filter>
@@ -82,8 +87,8 @@
         <default><item>TRUE</item></default>
         <brief>Appends results on output file</brief>
         <description>
-          Appends the created Results Pvl to the TO parameter output file.  If 
-          this is set to false, then it write the results to the output file 
+          Appends the created Results Pvl to the TO parameter output file.  If
+          this is set to false, then it write the results to the output file
           instead.
         </description>
       </parameter>
@@ -95,9 +100,9 @@
         <default><item>FALSE</item></default>
         <brief>Allows serial number to default to the file name</brief>
         <description>
-          Within the Result Pvl, if the serial number is not know, then Unknown 
-          is displayed in the keyword SerialNumber.  If this parameter is set to 
-          TRUE, then is displays the input cube's filename is displayed in the 
+          Within the Result Pvl, if the serial number is not know, then Unknown
+          is displayed in the keyword SerialNumber.  If this parameter is set to
+          TRUE, then is displays the input cube's filename is displayed in the
           keyword SerialNumber instead.
         </description>
       </parameter>
@@ -111,7 +116,7 @@
           Get the Filename
         </brief>
         <description>
-            If this boolean is not checked then the filename will not be part of 
+            If this boolean is not checked then the filename will not be part of
             the output.
         </description>
       </parameter>
@@ -122,7 +127,7 @@
           Get the Serial Number
         </brief>
         <description>
-            If this boolean is not checked then the Serial Number will not be 
+            If this boolean is not checked then the Serial Number will not be
             part of the output.
         </description>
       </parameter>
@@ -133,7 +138,7 @@
           Get the Observation Number
         </brief>
         <description>
-            If this boolean is not checked then the Observation Number will not 
+            If this boolean is not checked then the Observation Number will not
             be part of the output.
         </description>
       </parameter>
@@ -145,7 +150,7 @@
         <default><item>PVL</item></default>
         <brief>Output format</brief>
         <description>
-          Output format options, either PVL or FLAT may be used to display the 
+          Output format options, either PVL or FLAT may be used to display the
           selected outputs.
         </description>
         <list>
@@ -165,7 +170,7 @@
       </parameter>
     </group>
 
-   
+
   </groups>
 
 </application>
diff --git a/isis/src/base/apps/getsn/tsts/default/Makefile b/isis/src/base/apps/getsn/tsts/default/Makefile
index 2e1fec900297176c9654b7c3329c5aeaff40188d..531f669de44441dd197c3f5fc7e5b85e68881f57 100644
--- a/isis/src/base/apps/getsn/tsts/default/Makefile
+++ b/isis/src/base/apps/getsn/tsts/default/Makefile
@@ -4,8 +4,11 @@ include $(ISISROOT)/make/isismake.tsts
 
 commands:
 	$(APPNAME) FROM=$(INPUT)/peaks.cub \
-	TO=$(OUTPUT)/peaks.pvl FILE=TRUE OBSERVATION=TRUE \
-	APPEND=false;
+		TO=$(OUTPUT)/peaks.pvl FILE=FALSE OBSERVATION=TRUE SN=FALSE \
+			APPEND=false;
+	$(APPNAME) FROM=$(INPUT)/peaks.cub \
+		TO=$(OUTPUT)/peaks.pvl FILE=TRUE OBSERVATION=FALSE SN=TRUE \
+			APPEND=TRUE;
 	$(APPNAME) FROM=$(INPUT)/hirise.cub \
-	TO= $(OUTPUT)/hirise.pvl FILE=TRUE OBSERVATION=TRUE \
-	APPEND=false;
+		TO= $(OUTPUT)/hirise.pvl FILE=TRUE OBSERVATION=TRUE \
+			APPEND=false;
diff --git a/isis/src/base/apps/handmos/handmos.cpp b/isis/src/base/apps/handmos/handmos.cpp
index 83735718a74947e950bdb25d5725bb6187067721..0162f137b63537d7bd62b1a4fa98d48e900937b4 100644
--- a/isis/src/base/apps/handmos/handmos.cpp
+++ b/isis/src/base/apps/handmos/handmos.cpp
@@ -59,11 +59,7 @@ void IsisMain() {
     nl = ui.GetInteger("NLINES");
     nb = ui.GetInteger("NBANDS");
 
-    // Create the origin band if the Track Flag is set
-    if (bTrack) {
-      nb += 1;
-    }
-    else if (overlay == ProcessMosaic::AverageImageWithMosaic) {
+    if (overlay == ProcessMosaic::AverageImageWithMosaic) {
       nb *= 2;
     }
     p.SetCreateFlag(true);
diff --git a/isis/src/base/apps/handmos/handmos.xml b/isis/src/base/apps/handmos/handmos.xml
index 28665efabeac54d61fe0c2a2bd76bc85f5fff9f4..370e684746eef95b4dee566a634da5d575f9a4d7 100644
--- a/isis/src/base/apps/handmos/handmos.xml
+++ b/isis/src/base/apps/handmos/handmos.xml
@@ -24,7 +24,7 @@
       falls outside of the dimensions of the mosaic, it will be
       clipped. The line, sample, band dimensions of the output mosaic
       are required to be specified at the time of creation.  This
-      appication does not require a camera model, Instrument Group or
+      application does not require a camera model, Instrument Group or
       Mapping Group keywords as required by the other mosaic applications, <b>mapmos</b> and <b>automos</b>.
     </p>
     <p>
@@ -36,7 +36,7 @@
     </p>
     <p>
       MATCHDEM = FALSE, the default does not check the SHAPEMODEL keyword of the input cube
-      files and does not propogate what DEM Shapemodel that was used when the input files were
+      files and does not propagate what DEM Shapemodel that was used when the input files were
       projected.
     </p>
     <p>
@@ -47,19 +47,43 @@
       options is explained in the tables and descriptions below.
     </p>
     <p>
-      The Track feature creates a band in the output mosaic file containing the index
-      values for every pixel in the output mosaic.The Track-band can only be used appropriately through
-      the  QVIEW-AdvancedTracking tool. As the user interactively pans across the displayed
-      mosaic band (Band1), for every mosaic pixel location QVIEW-AdvancedTracking will report
-      the source cube filename that was input to automos. The Track-band cannot be used outside
-      the QVIEW-AdvancedTracking tool. <b>Hence the file (byte) size of the mosaic is increased due to
-      the track-band.</b>
+      The TRACK feature creates a separate tracking cube in addition to the mosaic cube, and
+      contains information for the source files of every pixel within the output mosaic.
+      This cube will have the same base-name as the mosaic cube, but will end in 
+      "_tracking.cub". The tracking cube must always reside in the same directory as the
+      mosaic cube to be properly accessed; this means that if the mosaic cube is copied or
+      moved, then its associated tracking cube must be copied or moved to the same location.
+      <b>The tracking cube will always be of type unsigned integer. Depending on the
+      bit-type of the mosaic cube and/or the number of bands it contains, the tracking cube
+      may be as much as four times the size of the mosaic cube itself.</b>
     </p>
     <p>
-      The Track feature works with Priority options ONTOP (with HIGHSATURATION and
-      LOWSATURATION parameters) and BENEATH for single band input cubes.  It does NOT support
-      multiple band input cubes with these priority options. It does work for multiband cubes
-      when PRIORITY=BAND. Furthermore, this feature is NOT supported when PRIORITY=AVERAGE.
+      The tracking cube can be used appropriately through the QVIEW-AdvancedTracking
+      tool. As the user pans across the displayed mosaic, for every mosaic pixel location,
+      QVIEW-AdvancedTracking will interactively report the index, the filename and the
+      serial number of the input cube that was input to handmos for that specific pixel
+      location. Since the tracking cube is of bit-type unsigned integer, the DN values of
+      0, 1 and 2 are reserved for NULL, LRS and LIS, respectively, so valid pixel DN values
+      will begin at an offset of 3. In other words, a pixel of DN value 3 in the tracking
+      cube means that this same pixel within the mosaic was taken from the first input
+      image. The tracking cube cannot be used outside of the QVIEW-AdvancedTracking tool
+      except as a visual representation of the source cubes for the different pixels. 
+    </p>
+    <p>
+      The TRACK feature works with Priority options ONTOP and BENEATH for single band input
+      cubes. It works for multiband cubes for PRIORITY=ONTOP only when the NULL,
+      HIGHSATURATION and LOWSATURATION options are set to true. It also works for multiband
+      cubes when PRIORITY=BAND. Furthermore, this feature is NOT supported when
+      PRIORITY=AVERAGE.
+    </p>
+    <p>
+      <b>Please Note: Prior to ISIS version 3.6.0, tracking for the various mosaicking apllications
+        was being handled with an internal tracking band. Tracking is now being handled by an
+        external tracking cube that contains the associated tracking information. This application
+        can no longer add to mosaics of the old format. In order to continue to use these
+        older mosaics with the updated mosaicking applications, you must first use the
+        <def>trackextract</def> utility application to extract the tracking band and the associated
+        tracking information into an external tracking cube.</b>
     </p>
     <p>
       <b>
@@ -76,8 +100,17 @@
             current input image will appear in the output mosaic (it replaces the output mosaic
             pixel).  Invalid input <def>Special Pixels</def>
             (<def>NULL</def>,<def>HRS</def>,<def>HIS</def>,<def>LRS</def>,<def>LIS</def>) will NOT
-            replace an existing Valid output mosaic pixel. Refer to parameters HIGHSATURATION,
-            LOWSATURATION, and NULL to override replacement of Valid output mosaic pixels.
+            replace an existing Valid output mosaic pixel unless the optional flags are set. Refer
+            to parameters HIGHSATURATION,LOWSATURATION, and NULL to override replacement of Valid
+            output mosaic pixels. 
+            <p>
+              <b>NOTE:</b> When using this priority with multi-band mosaics and with the TRACK
+              option set, all Special Pixel flags must be set as well. This is because the same
+              pixel within different bands of a single input image may hold both Valid and Special
+              Pixel values, and since our Tracking capabilities can only track one input image per
+              pixel (as it is a single band), it must accept the values for that particular pixel
+              from <b>every</b> band in the input image being placed on top.
+            </p>
           </td>
         </tr>
         <tr>
@@ -106,7 +139,7 @@
             Overlapping Valid pixel values from the current input image and output mosaic will be
             averaged for the new mosaic pixel values. A count-band is created with the output
             mosaic file.  The count-band keeps track of the number of images involved in the
-            averaging of the input dn values for each pixel in the mosaic. Invalid input pixel
+            averaging of the input DN values for each pixel in the mosaic. Invalid input pixel
             values will not be included in the average.  In the case where only one Valid pixel
             exists between the input image pixels or the current mosaic pixel, the Valid pixel is
             retained in the current output mosaic. Refer to parameters HIGHSATURATION,
@@ -436,6 +469,11 @@
       group in the cube labels which could impact processing scripts/pipelines. Fixes #1620.
       References #1623.
     </change>
+    <change name="Summer Stapleton" date="2018-08-13">
+      Updated code and documentation to reflect new handling of tracking capabilities with an 
+      external tracking cube as well as clarify why special pixel flags are required when 
+      priority=ontop for multiband mosaics. References #2092
+    </change>
   </history>
 
   <oldName>
@@ -536,7 +574,7 @@
             </brief>
             <description>
               If the input and mosaic pixel of the priority band, specified by NUMBER or KEYNAME
-              and KEYVALUE, are valid, a less than or greater than comparison is done. Depending on
+              and KEYVALUE are valid, a less than or greater than comparison is done. Depending on
               the CRITERIA selected, the lower or higher of the two pixels is placed on top.
               Special and NULL pixels are not placed on top unless their flags are set. So, if the
               comparison of the priority band says that the input pixel should be on top but the
@@ -588,7 +626,7 @@
           <option value="BANDNUMBER">
             <brief>Band Number </brief>
             <description>
-              You can enter the band number to use in the pixel comparison.
+              The band number to use in the pixel comparison.
             </description>
             <inclusions>
               <item>NUMBER</item> 
@@ -662,7 +700,7 @@
         <list>
           <option value="LESSER">
             <brief>
-                The lower DN value between the input and mosaic pixels will be placed on top.
+                The lower DN value between the input and mosaic pixels will be placed on top
             </brief>
             <description>
               The lower DN value between the input and mosaic pixels will be placed on top of
@@ -671,7 +709,7 @@
           </option>
           <option value="GREATER">
             <brief>
-              The larger DN value between the input and mosaic pixels will be placed on top.
+              The larger DN value between the input and mosaic pixels will be placed on top
             </brief>
             <description>
               The larger DN value between the input and mosaic pixels will be placed on top of
@@ -686,7 +724,7 @@
       <parameter name="INSAMPLE">
         <type>integer</type>
         <brief>This sample in the input cube will be placed
-          at OUTSAMPLE in the mosaic.
+          at OUTSAMPLE in the mosaic
           </brief>
         <description>  
           This is a sample in the input image. This sample in the input cube will be placed at
@@ -698,7 +736,7 @@
       <parameter name="INLINE">
         <type>integer</type>
         <brief>This line in the input cube will be placed
-          at OUTLINE in the mosaic.
+          at OUTLINE in the mosaic
           </brief>
         <description>  
           This is a line in the input image. This line in the input cube will be placed at
@@ -710,7 +748,7 @@
       <parameter name="INBAND">
         <type>integer</type>
         <brief>This band in the input cube will be placed
-          at OUTBAND in the mosaic.
+          at OUTBAND in the mosaic
           </brief>
         <description>  
           This is a band in the input image. This band in the input cube will be placed at
@@ -785,7 +823,7 @@
         <description>
           This option causes High Saturation values (both Instrument and 
           Representation) in the input image to be automatically copied to the 
-          mosaic regardless of the priority
+          mosaic regardless of the priority.
         </description>
       </parameter>
       <parameter name="LOWSATURATION">
@@ -795,7 +833,7 @@
         <description>
           This option causes Low Saturation values (both Instrument and 
           Representation) in the input image to be automatically copied to the 
-          mosaic regardless of the priority
+          mosaic regardless of the priority.
         </description>
       </parameter>
       <parameter name="NULL">
@@ -804,7 +842,7 @@
         <brief>Copy Input NULL values </brief>
         <description>
           This option causes NULL values  in the input image to be automatically 
-          copied to the mosaic regardless of the priority
+          copied to the mosaic regardless of the priority.
         </description>
       </parameter>
     </group>
@@ -822,7 +860,7 @@
           <option value="NO">
             <brief> The output mosaic already exists </brief>
             <description>
-              Choose this option if the output mosaic already exists
+              Choose this option if the output mosaic already exists.
             </description>
             <exclusions>
               <item>NSAMPLES</item>
@@ -836,7 +874,7 @@
           <option value="YES">
             <brief>Create the output mosaic </brief>
             <description>
-              The output mosaic does not exist and will be created
+              The output mosaic does not exist and will be created.
             </description>
             <inclusions>
               <item>NSAMPLES</item>
@@ -856,27 +894,26 @@
         </brief>
           <description>
             <p>
-              The Track feature creates a band in the output mosaic file containing the index
-              values for every pixel in the output mosaic. The Track-band can only be used
-              appropriately through the  QVIEW-AdvancedTracking tool. As the user interactively
-              pans across the displayed mosaic band (Band1), for every mosaic pixel location
-              QVIEW-AdvancedTracking will report the source cube filename that was input to
-              automos. The Track-band cannot be used outside the QVIEW-AdvancedTracking tool.
-              TRACK must be set to TRUE at the time of mosaic creation only and cannot be turned
-              on after the mosaic is created. When a mosaic is created with TRACK=TRUE, all
-              subsequent runs will default to TRACK=TRUE. When a mosaic is created with
-              TRACK=FALSE, an error will be encountered if subsequent runs have TRACK=TRUE.
-              <b>Hence the file (byte) size of the mosaic is increased due to
-              the track-band.</b>
-            </p>
-            <p>
-              A table, called InputImages, containing the names of the images used in the mosaic
-              will be added to the cube when TRACK=TRUE.
+              The Track feature creates a separate tracking cube containing the index values for
+              the source of every pixel in the output mosaic. The tracking cube can only be used
+              appropriately through the  QVIEW-AdvancedTracking tool. As the user pans across the
+              displayed mosaic, for every mosaic pixel location QVIEW-AdvancedTracking will
+              interactively report the filename, the serial number and the index of the input cube
+              that was input to handmos for that specific pixel location. The tracking cube cannot
+              be used outside the QVIEW-AdvancedTracking tool except as a visual representation of
+              the source cubes for the different pixels. TRACK must be set to TRUE at the time of
+              mosaic creation only and cannot be turned on after the mosaic is created. When a
+              mosaic is created with TRACK=TRUE, all subsequent runs will default to TRACK=TRUE.
+              When a mosaic is created with TRACK=FALSE, an error will be encountered if subsequent
+              runs have TRACK=TRUE. <b>The tracking cube will always be of type unsigned integer.
+              Depending on the bit-type of the mosaic cube and/or the number of bands it contains,
+              the tracking cube may be as much as four times the size of the mosaic cube itself.</b>
             </p>
             <p>
               WARNING:
-              If Tracking is turned on in a mosaic, any subsequent applications that modify "dn"
-              values will corrupt the track-band, for instance the application <def>reduce</def>.
+              If Tracking is turned on in a mosaic, any subsequent applications that modify DN
+              values, such as the application<def>reduce</def>, will corrupt the DN values in the
+              tracking cube.
             </p>
           </description>
       </parameter>
@@ -885,7 +922,7 @@
         <type>boolean</type>
         <default><item>TRUE</item></default>
         <brief>
-          Propagate the labels, tables, and BLOBs from the input cube.
+          Propagate the labels, tables, and BLOBs from the input cube
         </brief>
         <description>
           If selected the application will transfer the labels, tables,
diff --git a/isis/src/base/apps/isis2pds/isis2pds.cpp b/isis/src/base/apps/isis2pds/isis2pds.cpp
index 244f843bdb70845f7ddcbc88ccc3377ef36ae2c5..e7eefd7c18c6dd286d23a9a3dfef7748c498a94b 100644
--- a/isis/src/base/apps/isis2pds/isis2pds.cpp
+++ b/isis/src/base/apps/isis2pds/isis2pds.cpp
@@ -37,29 +37,31 @@ void IsisMain() {
     // Setup the input cube
     p.SetInputCube("FROM");
 
-    if(ui.GetString("STRETCH") == "LINEAR") {
-      if(ui.GetString("BITTYPE") != "32BIT")
+    if (ui.GetString("STRETCH") == "LINEAR") {
+      if (ui.GetString("BITTYPE") != "32BIT") {
         p.SetInputRange();
+      }
     }
-    if(ui.GetString("STRETCH") == "MANUAL")
+    if (ui.GetString("STRETCH") == "MANUAL") {
       p.SetInputRange(ui.GetDouble("MINIMUM"), ui.GetDouble("MAXIMUM"));
+    }
 
     double min = -DBL_MAX;
     double max = DBL_MAX;
 
-    if(ui.GetString("BITTYPE") == "8BIT") {
+    if (ui.GetString("BITTYPE") == "8BIT") {
       p.SetOutputType(Isis::UnsignedByte);
       min = 0.0;
       max = 255.0;
       setRangeAndPixels(ui, p, min, max, BOTH);
     }
-    else if(ui.GetString("BITTYPE") == "S16BIT") {
+    else if (ui.GetString("BITTYPE") == "S16BIT") {
       p.SetOutputType(Isis::SignedWord);
       min = -32768.0;
       max = 32767.0;
       setRangeAndPixels(ui, p, min, max, NEG);
     }
-    else if(ui.GetString("BITTYPE") == "U16BIT") {
+    else if (ui.GetString("BITTYPE") == "U16BIT") {
       p.SetOutputType(Isis::UnsignedWord);
       min = 0.0;
       max = 65535.0;
@@ -75,13 +77,16 @@ void IsisMain() {
       setRangeAndPixels(ui, p, min, max, NONE);
     }
 
-    if(ui.GetString("ENDIAN") == "MSB")
+    if (ui.GetString("ENDIAN") == "MSB") {
       p.SetOutputEndian(Isis::Msb);
-    else if(ui.GetString("ENDIAN") == "LSB")
+    }
+    else if (ui.GetString("ENDIAN") == "LSB") {
       p.SetOutputEndian(Isis::Lsb);
+    }
 
-    if(ui.GetString("LABTYPE") == "FIXED")
+    if (ui.GetString("LABTYPE") == "FIXED") {
       p.SetExportType(ProcessExportPds::Fixed);
+    }
 
     if (ui.GetBoolean("CHECKSUM")) {
       p.setCanGenerateChecksum(true);
@@ -122,36 +127,38 @@ void IsisMain() {
     PvlObject *label= icube->label();
     if (!label->hasObject("IsisCube")) {
       QString msg = "Input file [" + ui.GetFileName("FROM") +
-                  "] does not appear to be an ISIS3 cube.";
+                    "] does not appear to be an ISIS3 cube.";
       throw  IException(IException::User, msg, _FILEINFO_);
     }
     
     FileName outFile(ui.GetFileName("TO", "img"));
     QString outFileName(outFile.expanded());
     
-    if(ui.GetString("STRETCH") == "LINEAR") {
-      if(ui.GetString("BITTYPE") != "32BIT")
+    if (ui.GetString("STRETCH") == "LINEAR") {
+      if (ui.GetString("BITTYPE") != "32BIT") {
         process.SetInputRange();
+      }
     }
-    if(ui.GetString("STRETCH") == "MANUAL")
+    if (ui.GetString("STRETCH") == "MANUAL") {
       process.SetInputRange(ui.GetDouble("MINIMUM"), ui.GetDouble("MAXIMUM"));
+    }
 
     double min = -DBL_MAX;
     double max = DBL_MAX;
 
-    if(ui.GetString("BITTYPE") == "8BIT") {
+    if (ui.GetString("BITTYPE") == "8BIT") {
       process.SetOutputType(Isis::UnsignedByte);
       min = 0.0;
       max = 255.0;
       setRangeAndPixels(ui, process, min, max, BOTH);
     }
-    else if(ui.GetString("BITTYPE") == "S16BIT") {
+    else if (ui.GetString("BITTYPE") == "S16BIT") {
       process.SetOutputType(Isis::SignedWord);
       min = -32768.0;
       max = 32767.0;
       setRangeAndPixels(ui, process, min, max, NEG);
     }
-    else if(ui.GetString("BITTYPE") == "U16BIT") {
+    else if (ui.GetString("BITTYPE") == "U16BIT") {
       process.SetOutputType(Isis::UnsignedWord);
       min = 0.0;
       max = 65535.0;
@@ -167,10 +174,12 @@ void IsisMain() {
       setRangeAndPixels(ui, process, min, max, NONE);
     }
 
-    if(ui.GetString("ENDIAN") == "MSB")
+    if (ui.GetString("ENDIAN") == "MSB") {
       process.SetOutputEndian(Isis::Msb);
-    else if(ui.GetString("ENDIAN") == "LSB")
+    }
+    else if (ui.GetString("ENDIAN") == "LSB") {
       process.SetOutputEndian(Isis::Lsb);
+    }
 
     // Records what it did to the print.prt file
     PvlGroup results("DNs Used");
@@ -192,37 +201,37 @@ void IsisMain() {
 
 //Sets up special pixels and valid pixel ranges
 void setRangeAndPixels(UserInterface &ui, ProcessExport &p, double &min, double &max, Pixtype ptype) {
-  if(ptype == NEG) {
-    if(ui.GetBoolean("NULL")) {
+  if (ptype == NEG) {
+    if (ui.GetBoolean("NULL")) {
       p.SetOutputNull(min++);
     }
-    if(ui.GetBoolean("LRS")) {
+    if (ui.GetBoolean("LRS")) {
       p.SetOutputLrs(min++);
     }
-    if(ui.GetBoolean("LIS")) {
+    if (ui.GetBoolean("LIS")) {
       p.SetOutputLis(min++);
     }
-    if(ui.GetBoolean("HIS")) {
+    if (ui.GetBoolean("HIS")) {
       p.SetOutputHis(min++);
     }
-    if(ui.GetBoolean("HRS")) {
+    if (ui.GetBoolean("HRS")) {
       p.SetOutputHrs(min++);
     }
   }
-  else if(ptype == BOTH) {
-    if(ui.GetBoolean("NULL")) {
+  else if (ptype == BOTH) {
+    if (ui.GetBoolean("NULL")) {
       p.SetOutputNull(min++);
     }
-    if(ui.GetBoolean("LRS")) {
+    if (ui.GetBoolean("LRS")) {
       p.SetOutputLrs(min++);
     }
-    if(ui.GetBoolean("LIS")) {
+    if (ui.GetBoolean("LIS")) {
       p.SetOutputLis(min++);
     }
-    if(ui.GetBoolean("HRS")) {
+    if (ui.GetBoolean("HRS")) {
       p.SetOutputHrs(max--);
     }
-    if(ui.GetBoolean("HIS")) {
+    if (ui.GetBoolean("HIS")) {
       p.SetOutputHis(max--);
     }
   }
diff --git a/isis/src/base/apps/isis2pds/tsts/pds4/Makefile b/isis/src/base/apps/isis2pds/tsts/pds4/Makefile
index 1406cedd6494358d69f530ca95f62d9a6c6873db..fe27ed3196d2a30e2aa0dc2e05ed17931e24d070 100644
--- a/isis/src/base/apps/isis2pds/tsts/pds4/Makefile
+++ b/isis/src/base/apps/isis2pds/tsts/pds4/Makefile
@@ -7,8 +7,17 @@ commands:
 
 	# Remove parts of output that can occur in any order and convert to txt for comparison
 	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
-	       $(OUTPUT)/dawnEqui.xml > $(OUTPUT)/dawnEqui.txt;
+	       $(OUTPUT)/dawnEqui.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/dawnEqui.txt;
 
 	$(RM) $(OUTPUT)/dawnEqui.xml > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel1.txt > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel2.txt > /dev/null; 
 	$(RM) $(OUTPUT)/dawnEqui.img > /dev/null; 
 
diff --git a/isis/src/base/apps/isis2std/isis2std.xml b/isis/src/base/apps/isis2std/isis2std.xml
index 37a56648bb743fa9d30977cee36a9b5f3944ac42..4ffded9763175385f5baed6bd5e8a61d23f550e7 100644
--- a/isis/src/base/apps/isis2std/isis2std.xml
+++ b/isis/src/base/apps/isis2std/isis2std.xml
@@ -3,49 +3,49 @@
 <application name="isis2std" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
 
   <brief>
-    Exports a cube to a PNG, BMP, GIF, TIFF, JPEG, or JPEG 2000
+    Exports a cube to PNG, BMP, TIFF, JPEG, or JPEG 2000
   </brief>
 
   <description>
     <p>
       This program exports an ISIS cube to one of several popular standard image
-      formats.  The current supported formats are BMP,  GIF, JPEG, JP2, PNG, and TIFF.  
+      formats.  The current supported formats are BMP, JPEG, JP2, PNG, and TIFF.
     </p>
     <p>
-      This program uses TrollTech's version of the Qt Library to export BMP, 
-      GIF and JPEG formatted output images. For these format types, due to limitations of Qt, the
-      input file size must not exceed 2 gigabytes and the only valid output bit type is 8BIT. 
+      This program uses TrollTech's version of the Qt Library to export BMP
+      and JPEG formatted output images. For these format types, due to limitations of Qt, the
+      input file size must not exceed 2 gigabytes and the only valid output bit type is 8-bit.
     </p>
     <p>
-      The JPEG2000 (JP2) and TIFF formats do not depend on the Qt library.  These formats do not 
-      have the 2 GB limitation for input files and the output bit type may be 8BIT, U16BIT or S16BIT.
+      The JPEG2000 (JP2) and TIFF formats do not depend on the Qt library.  These formats do not
+      have the 2 GB limitation for input files and the output bit type may be 8-bit, U16-bit or S16-bit.
       For these formats, the writing routines output are streamed lines from the cube, and little
       of the image is held in memory at any one time, therefore increasing the processing speed to
-      convert the file.  It is recommended that large images are exported to JP2  or TIFF format. 
-      For some output image types, users may specify a value for the level of compression 
-      represented as a percentage using the QUALITY parameter. The default is no compression 
+      convert the file.  It is recommended that large images are exported to JP2  or TIFF format.
+      For some output image types, users may specify a value for the level of compression
+      represented as a percentage using the QUALITY parameter. The default is no compression
       (i.e. QUALITY = 100%). For the TIFF format a compression algorithm can be selected.
     </p>
     <p>
-      Each of the input cube parameters (FROM, ALPHA, RED, GREEN, and BLUE) requires a single band 
-      from an ISIS cube. If a cube contains multiple bands, the user must specify a single band of 
-      the input image. To do this, the user must append a plus sign and the band number to be used 
-      to the input file name. For example, inputFile.cub+4 indicates that the 4th band in the cube 
+      Each of the input cube parameters (FROM, ALPHA, RED, GREEN, and BLUE) requires a single band
+      from an ISIS cube. If a cube contains multiple bands, the user must specify a single band of
+      the input image. To do this, the user must append a plus sign and the band number to be used
+      to the input file name. For example, inputFile.cub+4 indicates that the 4th band in the cube
       will be used. No band needs to be specified if the cube only has a single band.
     </p>
     <p>
-      In addition, if the cube has Mapping labels, the program will produce a world file for use 
-      in Arc and/or other GIS packages.  The file will have an extension that uses the first and 
-      last letters for the image extention and a "w". For example, .tif produces a world file 
+      In addition, if the cube has Mapping labels, the program will produce a world file for use
+      in Arc and/or other GIS packages.  The file will have an extension that uses the first and
+      last letters for the image extension and a "w". For example, .tif produces a world file
       extension of .tfw.
     </p>
     <p>
       To ensure acceptable contrast in the output file, the user may select from three stretch
-      options: linear, piecewise-linear, or manual.  
+      options: linear, piecewise-linear, or manual.
     </p>
     <p>
-      Special pixels such as Low Saturation values and Nulls are set to black and High Saturation 
-      values are set to white. See the BITTYPE parameter documentation for more information about 
+      Special pixels such as Low Saturation values and Nulls are set to black and High Saturation
+      values are set to white. See the BITTYPE parameter documentation for more information about
       which output pixel values are assigned for particular input DNs of the various bit types.
     </p>
   </description>
@@ -77,11 +77,11 @@
       and low data in the input is written as a one
     </change>
     <change name="Steven Koechle" date="2007-08-22">
-      Added a check to see that raw image data will be less than 4GB.  
+      Added a check to see that raw image data will be less than 4GB.
       Throw exception if it is too big.
     </change>
     <change name="Steven Lambright" date="2008-05-12">
-      Removed references to CubeInfo 
+      Removed references to CubeInfo
     </change>
     <change name="Kris Becker" date="2008-10-17">
       Added QUALITY parameter to set compression levels
@@ -97,7 +97,7 @@
       Added support for JPEG2000 files.
     </change>
     <change name="Stuart Sides and Steven Lambright" date="2012-04-03">
-      Added minimum and maximum input stretch values and output file 
+      Added minimum and maximum input stretch values and output file
       name to the output log. fixes #761
     </change>
     <change name="Travis Addair" date="2012-04-03">
@@ -109,16 +109,19 @@
       completely now. References #579.
     </change>
     <change name="Jeannie Backer" date="2013-06-05">
-      Fixed bug where alpha channel was not being utilized for ARGB option. Fixed bug that mapped 
-      Nulls as the min value for TIFF and JP2 formats. Changed ImageExporter calls to new method 
-      names, where needed. Added test for ARGB parameter. Added xml example. Added appTests to 
-      improve coverage for isis2std program and the ImageExporter and its derived classes. 
+      Fixed bug where alpha channel was not being utilized for ARGB option. Fixed bug that mapped
+      Nulls as the min value for TIFF and JP2 formats. Changed ImageExporter calls to new method
+      names, where needed. Added test for ARGB parameter. Added xml example. Added appTests to
+      improve coverage for isis2std program and the ImageExporter and its derived classes.
       Fixes #1380.
     </change>
     <change name="Jeffrey Covington" date="2015-02-12">
       Changed default compression of TIFF format images to no compression. Added COMPRESSION parameter to
       choose the compression algorithm for TIFF format images. Fixes #1745
-      
+    </change>
+    <change name="Kaitlyn Lee" date="2018-02-08">
+      Removed the option to export as a GIF because Qt does not support GIF
+      exports. Fixes #1667.
     </change>
   </history>
   <category>
@@ -149,7 +152,7 @@
         </brief>
         <description>
           Use this parameter to select the filename and band to export. For
-          example, file.cub+5 will select band 5
+          example, file.cub+5 will select band 5.
         </description>
         <filter>
           *.cub
@@ -164,7 +167,7 @@
         </brief>
         <description>
           Use this parameter to select the filename and band to export. For
-          example, file.cub+5 will select band 5
+          example, file.cub+5 will select band 5.
         </description>
         <filter>
           *.cub
@@ -179,7 +182,7 @@
         </brief>
         <description>
           Use this parameter to select the filename and band to export. For
-          example, file.cub+5 will select band 5
+          example, file.cub+5 will select band 5.
         </description>
         <filter>
           *.cub
@@ -194,7 +197,7 @@
         </brief>
         <description>
           Use this parameter to select the filename and band to export. For
-          example, file.cub+5 will select band 5
+          example, file.cub+5 will select band 5.
         </description>
         <filter>
           *.cub
@@ -209,7 +212,7 @@
         </brief>
         <description>
           Use this parameter to select the filename and band to export. For
-          example, file.cub+5 will select band 5
+          example, file.cub+5 will select band 5.
         </description>
         <filter>
           *.cub
@@ -220,7 +223,7 @@
         <type>filename</type>
         <fileMode>output</fileMode>
         <brief>
-          Output file 
+          Output file
         </brief>
         <description>
           Use this parameter to specify the name of the output file.
@@ -232,7 +235,7 @@
         <default><item>GRAYSCALE</item></default>
         <brief>Image mode</brief>
         <description>
-          This parameter specifies the image mode. If GRAYSCALE, a single one-band cube is used.  
+          This parameter specifies the image mode. If GRAYSCALE, a single one-band cube is used.
           If RGB, three one-band cubes are used. If ARGB, four one-band cubes are used.
         </description>
         <list>
@@ -241,8 +244,8 @@
               Output has one channel (gray scaled).
             </brief>
             <description>
-              If this option is chosen, the output image will have a single channel and the user 
-              will be required to specify the parameter FROM.  
+              If this option is chosen, the output image will have a single channel and the user
+              will be required to specify the parameter FROM.
             </description>
             <exclusions>
               <item>ALPHA</item>
@@ -265,7 +268,7 @@
             </brief>
             <description>
               If this option is chosen, the output image will have three channels and the user will
-              be required to specify the parameters RED, GREEN, and BLUE. 
+              be required to specify the parameters RED, GREEN, and BLUE.
             </description>
             <exclusions>
               <item>FROM</item>
@@ -281,8 +284,8 @@
               Output has four channels (alpha, red, green, and blue).
               </brief>
             <description>
-              If this option is chosen, the output image will have four channels and the user will 
-              be required to specify the parameters ALPHA, RED, GREEN, and BLUE. 
+              If this option is chosen, the output image will have four channels and the user will
+              be required to specify the parameters ALPHA, RED, GREEN, and BLUE.
             </description>
             <exclusions>
               <item>FROM</item>
@@ -303,13 +306,13 @@
         <brief>Format of output image</brief>
         <description>
           This parameter is used to select the output format.  It can be one of
-          PNG, BMP, JPEG, TIF, GIF, or JP2.  Note that not all formats may be
+          PNG, BMP, JPEG, TIF, or JP2.  Note that not all formats may be
           available.  It will depend on your installation of the Qt libraries.
           <p>
-          In addition, if the cube has Mapping labels, the program will produce 
-          a world file for use in Arc and/or other GIS packages. The file will 
-          have an extension that uses the first and last letters for the image 
-          extention and a "w". For example, .tif produces a world file extension of .tfw.
+          In addition, if the cube has Mapping labels, the program will produce
+          a world file for use in Arc and/or other GIS packages. The file will
+          have an extension that uses the first and last letters for the image
+          extension and a "w". For example, .tif produces a world file extension of .tfw.
           </p>
         </description>
 
@@ -317,7 +320,7 @@
           <option value="PNG">
             <brief>Output image will be PNG</brief>
             <description>
-              The output image is in PNG (Portable Network Graphics) format. The default extension 
+              The output image is in PNG (Portable Network Graphics) format. The default extension
               for this format is "png."
             </description>
             <exclusions>
@@ -328,7 +331,7 @@
           <option value="BMP">
             <brief>Output image will be BMP</brief>
             <description>
-              The output image is in BMP (Bit Mapped Graphics) format. The default extension for 
+              The output image is in BMP (Bit Mapped Graphics) format. The default extension for
               this format is "bmp."
             </description>
             <exclusions>
@@ -336,17 +339,6 @@
               <item>COMPRESSION</item>
             </exclusions>
           </option>
-          <option value="GIF">
-            <brief>Output image will be GIF</brief>
-            <description>
-              The output image is in GIF (Graphics Interchange Format) format. The default 
-              extension for this format is "gif."
-            </description>
-            <exclusions>
-              <item>BITTYPE</item>
-              <item>COMPRESSION</item>
-            </exclusions>
-          </option>
           <option value="TIFF">
             <brief>Output image will be TIFF</brief>
             <description>
@@ -357,7 +349,7 @@
           <option value="JPEG">
             <brief>Output image will be JPEG</brief>
             <description>
-              The output image is in JPEG (Joint Photographic Experts Group) format. The default 
+              The output image is in JPEG (Joint Photographic Experts Group) format. The default
               extension for this format is "jpg."
             </description>
             <exclusions>
@@ -368,7 +360,7 @@
           <option value="JP2">
             <brief>Output image will be JPEG2000</brief>
             <description>
-              The output image is in JPEG2000 (Joint Photographic Experts Group 2000) format. The 
+              The output image is in JPEG2000 (Joint Photographic Experts Group 2000) format. The
               default extension for this format is "jp2."
             </description>
             <exclusions>
@@ -377,7 +369,7 @@
             </exclusions>
           </option>
         </list>
-      </parameter> 
+      </parameter>
       <parameter name="QUALITY">
         <type>integer</type>
         <brief>Specify output image quality</brief>
@@ -400,7 +392,7 @@
         <brief>Bit type of output file</brief>
         <description>
           This parameter allows the userPackBits is also known as Macintosh RLE. to set the bit type of the output image.
-          Some FORMAT values will only allow 8BIT outputs.
+          Some FORMAT values will only allow 8-bit outputs.
           16 bit signed (-32767=black, 32768=white)
         </description>
         <list>
@@ -413,14 +405,14 @@
           <option value="U16BIT">
             <brief> Output is 16 bit unsigned integer data </brief>
             <description>
-              Pixel values are within the 16-bit unsigned integer data range from 0 to 65535. This 
+              Pixel values are within the 16-bit unsigned integer data range from 0 to 65535. This
               option is not available for some output formats.
             </description>
           </option>
           <option value="S16BIT">
             <brief> Output is 16 bit signed integer data </brief>
             <description>
-              Pixel values are in 16-bit signed integer data range -32768 to 32767. This option is 
+              Pixel values are in 16-bit signed integer data range -32768 to 32767. This option is
               not available for some output formats.
             </description>
           </option>
@@ -449,7 +441,7 @@
             <description>
               Use PackBits compression on the output TIFF format image. PackBits is also known as Macintosh RLE.
               This compression algorithm should be supported by all TIFF readers that conform to the
-              Baseline TIFF specification. 
+              Baseline TIFF specification.
             </description>
           </option>
           <option value="LZW">
@@ -685,17 +677,17 @@
       </parameter>
     </group>
   </groups>
-  
+
   <examples>
     <example>
       <brief>
-        Example of red/green/blue output of isis2std program. 
+        Example of red/green/blue output of isis2std program.
       </brief>
       <description>
-        This example creates an output TIFF format file from 3 bands of an ISIS cube, designated 
-        red, green, and blue using a linear stretch and 8 bit output type. A histogram is created 
-        from the input values.  Using this histogram, we determine the minimum value to be any DN 
-        in the bottom 0.2% of the data. These DNs will be set to black in the output. Similarly, 
+        This example creates an output TIFF format file from 3 bands of an ISIS cube, designated
+        red, green, and blue using a linear stretch and 8-bit output type. A histogram is created
+        from the input values.  Using this histogram, we determine the minimum value to be any DN
+        in the bottom 0.2% of the data. These DNs will be set to black in the output. Similarly,
         the maximum value is any DN in the top 99.8% of the data and these DNs will be set to white.
       </description>
       <terminalInterface>
@@ -715,7 +707,7 @@
             <description>
               This image show the graphical user interface for this program.
             </description>
-            <thumbnail height="200" width="142" src="assets/thumbs/isis2stdGUI.jpg" caption="isis2std with RGB input and 8BIT output"/>
+            <thumbnail height="200" width="142" src="assets/thumbs/isis2stdGUI.jpg" caption="isis2std with RGB input and 8-bit output"/>
           </image>
         </guiInterface>
       </guiInterfaces>
@@ -768,7 +760,7 @@
             Output image.
           </brief>
           <description>
-            The 8 bit output image, in TIFF format, created using the input red, green, and blue channels.
+            The 8-bit output image, in TIFF format, created using the input red, green, and blue channels.
           </description>
           <thumbnail height="150" width="200" src="assets/thumbs/rgbTIFFoutput.jpg" caption="The color output image."/>
           <parameterName>TO</parameterName>
diff --git a/isis/src/base/apps/isisminer/StrategyFactory.cpp b/isis/src/base/apps/isisminer/StrategyFactory.cpp
index 6ea67e42f064c6838e112b28f29593f26f2995a5..3c172e0f9759644d78104d13cb6e11e661761096 100644
--- a/isis/src/base/apps/isisminer/StrategyFactory.cpp
+++ b/isis/src/base/apps/isisminer/StrategyFactory.cpp
@@ -1,26 +1,26 @@
-/**                                                                       
- * @file                                                                  
+/**
+ * @file
  * $Revision: 6513 $
  * $Date: 2016-01-14 16:04:44 -0700 (Thu, 14 Jan 2016) $
  * $Id: StrategyFactory.cpp 6513 2016-01-14 23:04:44Z kbecker@GS.DOI.NET $
- * 
- *   Unless noted otherwise, the portions of Isis written by the USGS are 
- *   public domain. See individual third-party library and package descriptions 
- *   for intellectual property information, user agreements, and related  
- *   information.                                                         
- *                                                                        
- *   Although Isis has been used by the USGS, no warranty, expressed or   
- *   implied, is made by the USGS as to the accuracy and functioning of such 
- *   software and related material nor shall the fact of distribution     
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
  *   constitute any such warranty, and no responsibility is assumed by the
- *   USGS in connection therewith.                                        
- *                                                                        
- *   For additional information, launch                                   
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html                
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
  *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
  *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.                                    
- */ 
+ *   http://www.usgs.gov/privacy.html.
+ */
 #include "StrategyFactory.h"
 
 // Qt library
@@ -66,17 +66,17 @@ using namespace std;
 namespace Isis {
 
   /**
-   * A static instance of the strategy factory class. It is initialized to NULL 
-   * and instantiated when the instance() method is called. 
+   * A static instance of the strategy factory class. It is initialized to NULL
+   * and instantiated when the instance() method is called.
    */
 StrategyFactory *StrategyFactory::m_strategymaker = 0;
-  
-  
-  /** 
-   * Private default constructor so that this class is only instatiated through 
-   * the instance() method. This ensures that only a singleton object is 
-   * constructed. 
-   */ 
+
+
+  /**
+   * Private default constructor so that this class is only instatiated through
+   * the instance() method. This ensures that only a singleton object is
+   * constructed.
+   */
   StrategyFactory::StrategyFactory() {
     //  This ensures this singleton is shut down when the application exists,
     //  so the GEOS system can be shut down cleanly.
@@ -84,38 +84,38 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
    m_numberMade = 0;
    return;
 }
-  
-  
-  /** 
+
+
+  /**
    * Destroys the StrategyFactory object.
-   */ 
-  StrategyFactory::~StrategyFactory() { 
+   */
+  StrategyFactory::~StrategyFactory() {
 }
-  
-  
-  /** 
-   * Gets the singleton instance of this class. If it has not been instantiated 
-   * yet, the default constructor is called. 
-   * 
+
+
+  /**
+   * Gets the singleton instance of this class. If it has not been instantiated
+   * yet, the default constructor is called.
+   *
    * @return StrategyFactory  A pointer to the StrategyFactory singleton object.
-   */ 
-  StrategyFactory *StrategyFactory::instance() { 
+   */
+  StrategyFactory *StrategyFactory::instance() {
   if (!m_strategymaker) {
     m_strategymaker = new StrategyFactory();
   }
   return (m_strategymaker);
 }
- 
- 
+
+
 /**
- * @brief Add a shared resource to global parameter list 
- *  
- * Users can add to an internal list of global resource keywords that will be 
- * provide to every Strategy created by this factory. This provides a consistent 
- * base of keyword substitutions when strategies apply() functions are called. 
- * 
+ * @brief Add a shared resource to global parameter list
+ *
+ * Users can add to an internal list of global resource keywords that will be
+ * provide to every Strategy created by this factory. This provides a consistent
+ * base of keyword substitutions when strategies apply() functions are called.
+ *
  * @author 2015-05-08 Kris Becker
- * 
+ *
  * @param global Shared global resource for parameter substitution
  */
   void StrategyFactory::addGlobal(SharedResource &global) {
@@ -124,13 +124,13 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
   }
 
 /**
- * @brief Return list of current global parameters 
- *  
- * The list returned by this method will be used to create new strategies 
- * providing a consistent approach to keyword parameter substitution. 
- * 
+ * @brief Return list of current global parameters
+ *
+ * The list returned by this method will be used to create new strategies
+ * providing a consistent approach to keyword parameter substitution.
+ *
  * @author 2015-05-08 Kris Becker
- * 
+ *
  * @return ResourceList List of global parameters
  */
   const ResourceList &StrategyFactory::getGlobals() const {
@@ -151,22 +151,22 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
     return (create(definition, getGlobals()));
   }
 
-  /** 
-   * Uses the given configuration file and global resource of keywords to build 
-   * a list of Strategy objects. The configuration file should be in PVL format 
-   * with an object named "IsisMiner" that contains the configuration for the 
-   * Strategy objects to be constructed. The IsisMiner PVL is pulled from the 
-   * file and buildRun(PvlObject, SharedResource) is called. 
+  /**
+   * Uses the given configuration file and global resource of keywords to build
+   * a list of Strategy objects. The configuration file should be in PVL format
+   * with an object named "IsisMiner" that contains the configuration for the
+   * Strategy objects to be constructed. The IsisMiner PVL is pulled from the
+   * file and buildRun(PvlObject, SharedResource) is called.
    *
-   * Below is an example of an IsisMiner PVL that, when passed into buildRun(), 
-   * will create a StrategyList of size 2: 
+   * Below is an example of an IsisMiner PVL that, when passed into buildRun(),
+   * will create a StrategyList of size 2:
    * @code
    *
    * Object = IsisMiner
-   * 
+   *
    *   Name = StrategyBuilder
    *   ParametersRequired = ( inputdir, outputdir )
-   * 
+   *
    *   Object = Strategy
    *     Name          = TestWithIdentity
    *     Type          = CnetReader
@@ -176,7 +176,7 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
    *     IdentityArgs  = (PointId)
    *     Description   = "Test the default functionality of CnetReader"
    *   EndObject
-   * 
+   *
    *   Object=Strategy
    *     Name          = WriteCsvTest1
    *     Type          = CsvWriter
@@ -184,7 +184,7 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
    *     CsvFileArgs   = "outputdir"
    *     Mode          = Create
    *     Header        = True
-   * 
+   *
    *     #  Write all input fields as read in as noop should match exactly
    *     Keywords      = (ChooserName, Created, DateTime, Description,
    *                      LastModified, Line, MeasureType,NetworkId, PointId,
@@ -197,45 +197,45 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
    *
    * @endcode
    *
-   * @param configFile  The name of the configuration file containing the 
+   * @param configFile  The name of the configuration file containing the
    *                    IsisMiner PvlObject with configuration information
    *                    needed to construct each of the Strategy objects.
    * @param globals   List of global keywords to use in argument substitutions
-   * 
-   * @return StrategyList  The list of Strategy objects created from the 
+   *
+   * @return StrategyList  The list of Strategy objects created from the
    *                       given configuration and resource.
-   * @throw IException::User  "Strategy config file does not contain 
+   * @throw IException::User  "Strategy config file does not contain
    *                           IsisMiner strategies object."
-   */ 
+   */
   StrategyList StrategyFactory::buildRun(const QString &configFile,
                                          const ResourceList &globals) const {
   Pvl pvl(configFile);
   if (!pvl.hasObject("IsisMiner") ) {
-    throw IException(IException::User, 
-                     "Strategy config file [" + configFile + 
+    throw IException(IException::User,
+                     "Strategy config file [" + configFile +
                      "] does not contain IsisMiner strategies object.",
                      _FILEINFO_);
   }
 
   return (buildRun(pvl.findObject("IsisMiner"), globals));
 }
-  
-  
-  /** 
-   * Uses the given PVL configuration object and global resource of keywords to 
-   * build a list of Strategy objects. For each Strategy object to be created, 
-   * the PVL configuration object must contain a PVL object named "Strategy." 
-   * This method is called by the buildRun(QString, SharedResource) method. 
+
+
+  /**
+   * Uses the given PVL configuration object and global resource of keywords to
+   * build a list of Strategy objects. For each Strategy object to be created,
+   * the PVL configuration object must contain a PVL object named "Strategy."
+   * This method is called by the buildRun(QString, SharedResource) method.
    *
    * @see buildRun(QString, SharedResource)
    *
-   * @param config   A PVL object containing the configuration needed for 
+   * @param config   A PVL object containing the configuration needed for
    *                 constructing each Strategy object.
    * @param globals   List of global keywords to use in argument substitutions
-   * 
-   * @return StrategyList  The list of Strategy objects created from the 
+   *
+   * @return StrategyList  The list of Strategy objects created from the
    *                       given configuration and resource.
-   */ 
+   */
   StrategyList StrategyFactory::buildRun(const PvlObject &config,
                                          const ResourceList &globals) const {
 
@@ -249,23 +249,23 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
     }
     return (slist);
   }
-  
-  
+
+
   /**
-   * Constructs a Strategy object from the given PVL definition object and 
-   * global resource of keywords. If the PVL does not contain a valid 
-   * configuration for a known Strategy, then an exception is thrown. Each time 
-   * this method is successfully invoked, the number of manufactured Strategy 
-   * objects increments. 
+   * Constructs a Strategy object from the given PVL definition object and
+   * global resource of keywords. If the PVL does not contain a valid
+   * configuration for a known Strategy, then an exception is thrown. Each time
+   * this method is successfully invoked, the number of manufactured Strategy
+   * objects increments.
    *
-   * @param definition  A PVL object containing the configuration needed to 
+   * @param definition  A PVL object containing the configuration needed to
    *                    construct the Strategy object.
    * @param globals   List of global keywords to use in argument substitutions
-   * 
-   * @return Strategy*  A pointer to the Strategy constructed from the 
+   *
+   * @return Strategy*  A pointer to the Strategy constructed from the
    *                    given definition and globals.
    * @throw IException::User  "Could not find a strategy for type."
-   */ 
+   */
   Strategy *StrategyFactory::create(const PvlObject &definition,
                                     const ResourceList &globals) const {
   Strategy *strategy = findStrategy(definition, globals);
@@ -273,41 +273,41 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
     QString sname("UNKNOWN"), stype("UNKNOWN");
     if ( definition.hasKeyword("Name") ) { sname = definition["Name"][0]; }
     if ( definition.hasKeyword("Type") ) { stype = definition["Type"][0]; }
-    QString mess = "Could not create a " + sname + 
+    QString mess = "Could not create a " + sname +
                    " strategy for type [" + stype + "].";
     throw IException(IException::User, mess, _FILEINFO_);
   }
     m_numberMade++;
   return (strategy);
 }
-  
-  
+
+
   /**
    * Gets the number of Strategy objects that have been manufactured.
    *
    * @return int  The number of Strategy objects constructed by this factory.
-   */ 
+   */
   int StrategyFactory::manufactured() const {
   return (m_numberMade);
 }
-  
+
 /**
- * @brief Check that required user parameters are provided in resource list 
- *  
- * This method will look for a keyword called RequiredParameter in the provided 
- * container.  If it exists, it will check the provided resource list (assumed 
- * to be globals) for existance. If any don't exist, an exception is thrown 
- * reporting the missing parameters. 
- * 
+ * @brief Check that required user parameters are provided in resource list
+ *
+ * This method will look for a keyword called RequiredParameter in the provided
+ * container.  If it exists, it will check the provided resource list (assumed
+ * to be globals) for existance. If any don't exist, an exception is thrown
+ * reporting the missing parameters.
+ *
  * @author 2015-06-04 Kris Becker
- * 
- * @param conf       PvlContainer to look for RequiredParameters keyword and 
+ *
+ * @param conf       PvlContainer to look for RequiredParameters keyword and
  *                   validate existance in parameters list.
- * @param parameters List of parameters resources to search for keywords that 
+ * @param parameters List of parameters resources to search for keywords that
  *                   must be provided by users.
  */
-  void StrategyFactory::validateUserParameters(const PvlContainer &conf, 
-                                               const ResourceList &parameters) 
+  void StrategyFactory::validateUserParameters(const PvlContainer &conf,
+                                               const ResourceList &parameters)
                                                const {
 
     if ( conf.hasKeyword("RequiredParameters") ) {
@@ -328,7 +328,7 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
 
       if ( !missing.isEmpty() ) {
         QString mess = "Users of this configuration must provide the "
-                       "following parameter(s) but they were not found: " + 
+                       "following parameter(s) but they were not found: " +
                         missing.join(", ");
         throw IException(IException::User, mess, _FILEINFO_);
       }
@@ -336,34 +336,34 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
     return;
   }
 
-  
-  /** 
-   * Attempts to construct a Strategy from the known Strategy classes using the 
-   * given information in the PVL definition object and the given global 
-   * resource of keywords. The Strategy type is pulled from the definition file 
-   * and compared to the known Strategy types. If found, this method attempts to 
-   * construct the corresponding Strategy object from the definition and 
-   * globals. 
+
+  /**
+   * Attempts to construct a Strategy from the known Strategy classes using the
+   * given information in the PVL definition object and the given global
+   * resource of keywords. The Strategy type is pulled from the definition file
+   * and compared to the known Strategy types. If found, this method attempts to
+   * construct the corresponding Strategy object from the definition and
+   * globals.
    *
-   * @param definition  A PVL object containing the configuration needed to 
+   * @param definition  A PVL object containing the configuration needed to
    *                    construct the Strategy object.
    * @param globals     A shared pointer to the global resource of keywords used
    *                    to construct the Strategy object.
-   * 
-   * @return Strategy*  A pointer to the Strategy constructed from the 
+   *
+   * @return Strategy*  A pointer to the Strategy constructed from the
    *                    given definition and globals.
-   */ 
-  Strategy *StrategyFactory::findStrategy(const PvlObject &definition, 
+   */
+  Strategy *StrategyFactory::findStrategy(const PvlObject &definition,
                                           const ResourceList &globals) const {
 
     QString stype;
     try {
-      stype = definition["Type"][0].toLower(); 
+      stype = definition["Type"][0].toLower();
     }
     catch (IException &ie) {
       QString sname("UNKNOWN");
       if ( definition.hasKeyword("Name") ) { sname = definition["Name"][0]; }
-      QString mess = "Strategy Type does not exist in configuration for " + 
+      QString mess = "Strategy Type does not exist in configuration for " +
                       sname + " strategy!";
       throw IException(ie, IException::User, mess, _FILEINFO_);
     }
@@ -444,54 +444,54 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
   }
 
 /**
- * @brief Create a strategy from an external plugin library 
- *  
- * This method will take the plugin group definition and load the strategy from 
- * an external library implemented as a plugin.  The definition has the basic 
- * qualifications: 
- *  
- * @code 
+ * @brief Create a strategy from an external plugin library
+ *
+ * This method will take the plugin group definition and load the strategy from
+ * an external library implemented as a plugin.  The definition has the basic
+ * qualifications:
+ *
+ * @code
  *  Group = Plugin
  *    StrategyPluginPath=("../../plugin/src/RunCommandStrategy","plugin/src/RunCommandStrategy",
  *      "/Users/kbecker/IsisDevelopment/MissionSWPush/DeveloperSubmissions/isis/src/base/apps/isisminer/plugin/src/RunCommandStrategy")
  *    Library = RunCommandStrategy
  *    Routine = RunCommandStrategyPlugin
  *  EndGroup
- * @endcode 
- *  
- * In the above definition, the StrategyPluginPath is added to the search path 
- * for finding shared plugin libraries specfified in the Library keyword. The 
- * Routine keyword contains the name of the routine implemented to construct and 
- * return a Stategy algorith. The Routine must be declared callable via an 
+ * @endcode
+ *
+ * In the above definition, the StrategyPluginPath is added to the search path
+ * for finding shared plugin libraries specfified in the Library keyword. The
+ * Routine keyword contains the name of the routine implemented to construct and
+ * return a Stategy algorith. The Routine must be declared callable via an
 *  extern reference.  Here is an example implementation found in
 *  RunCommandStrategy.cpp:
- *  
+ *
  * @code
  *  extern "C" Isis::Strategy *RunCommandStrategyPlugin(const Isis::PvlObject
  *                              &definition,const Isis::ResourceList &globals) {
  *    return new Isis::RunCommandStrategy(definition, globals);
  *  }
- * @endcode 
-* 
+ * @endcode
+*
 *  The Strategy algorithm can be implemented just like any other Strategy be
 *  inheriting the Strategy class. Note that when the library is loaded attempts
 *  are made to load all the symbols before the Routine is called to instantiate
 *  the Strategy.
- * 
+ *
  * @author 2015-05-08 Kris Becker
- * 
+ *
  * @param plugindef  PvlGroup container of plugin definition
- * @param definition PvlObject definition of strategy that is implemented in the 
+ * @param definition PvlObject definition of strategy that is implemented in the
  *                   plugin
  * @param globals    List of global keywords to use in argument substitutions
- * 
+ *
  * @return Strategy* Pointer to strategy invoked from the plugin
  */
- Strategy *StrategyFactory::loadStrategyPlugin(const PvlContainer &plugindef, 
+ Strategy *StrategyFactory::loadStrategyPlugin(const PvlContainer &plugindef,
                                                const PvlObject &definition,
                                                const ResourceList &globals) const {
 
-   PvlFlatMap pluginkeys(plugindef); 
+   PvlFlatMap pluginkeys(plugindef);
    Strategy *strategy(0);
    try {
      // Create a list of plugin paths starting with no path and local directory first
@@ -554,13 +554,13 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0;
 /**
     * @brief Exit termination routine
     *
-    * This (static) method ensure this object is destroyed when Qt exits.  
+    * This (static) method ensure this object is destroyed when Qt exits.
     *
     * Note that it is error to add this to the system _atexit() routine because
     * this object utilizes Qt classes.  At the time the atexit call stack is
-    * executed, Qt is long gone resulting in Very Bad Things.  Fortunately, Qt 
-    * has an exit stack function as well.  This method is added to the Qt exit 
-    * call stack. 
+    * executed, Qt is long gone resulting in Very Bad Things.  Fortunately, Qt
+    * has an exit stack function as well.  This method is added to the Qt exit
+    * call stack.
     */
   void StrategyFactory::dieAtExit() {
     delete  m_strategymaker;
diff --git a/isis/src/base/apps/mapmos/mapmos.xml b/isis/src/base/apps/mapmos/mapmos.xml
index d0832e15a4d15fa43faacd00e35a6870f681100e..6eea15e0f4be9e5fd725e3449193c94d3a401d02 100644
--- a/isis/src/base/apps/mapmos/mapmos.xml
+++ b/isis/src/base/apps/mapmos/mapmos.xml
@@ -32,12 +32,12 @@
       </p>
       <b>Note</b>: The latitude and longitude range of the individual input cubes may vary. 
       <p>
-      If a new mosaic is to be created, it must be intialized with an input cube and CREATE=YES. The
+      If a new mosaic is to be created, it must be initalized with an input cube and CREATE=YES. The
       default size of the output mosaic will be the SAME latitude and longitude extents of the input
-      file.  The size of the output mosaic can be entered by the user through the any or all four
-      boundary parameters: MINLAT, MAXLAT, MINLON, MAXLON.  The input cube also establishes the
-      number of bands and BandBin Group of the output mosaic.  If there are list of input cubes to
-      mosaic together refer to the similiar application called <b>automos</b>. 
+      file. The size of the output mosaic can be entered by the user through any or all four
+      boundary parameters: MINLAT, MAXLAT, MINLON, MAXLON. The input cube also establishes the
+      number of bands and BandBin Group of the output mosaic. If there is a list of input cubes to
+      mosaic together, refer to the similar application called <def>automos</def>. 
      </p>
        <p>
         <b>Integrity-check Parameters</b>:
@@ -47,7 +47,7 @@
         </p>
         <p>
           MATCHDEM = FALSE, the default does not check the SHAPEMODEL keyword of the input cube
-          files and does not propogate what DEM Shapemodel that was used when the input files were
+          files and does not propagate what DEM Shapemodel was used when the input files were
           projected.
         </p>
       </p>
@@ -59,19 +59,43 @@
         options is explained in the tables and descriptions below.
       </p>
       <p>
-        The Track feature creates a band in the output mosaic file containing the index
-            values for every pixel in the output mosaic. The Track-band can only be used appropriately through
-        the  QVIEW-AdvancedTracking tool. As the user interactively pans across the displayed
-        mosaic band (Band1), for every mosaic pixel location QVIEW-AdvancedTracking will report
-        the source cube filename that was input to automos. The Track-band cannot be used outside
-        the QVIEW-AdvancedTracking tool. <b>Hence the file (byte) size of the mosaic is increased due to
-                the track-band.</b>
+        The TRACK feature creates a separate tracking cube in addition to the mosaic cube and
+        contains information for the source files of every pixel within the output mosaic.
+        This cube will have the same base-name as the mosaic cube, but will end in 
+        "_tracking.cub". The tracking cube must always reside in the same directory as the
+        mosaic cube to be properly accessed; this means that if the mosaic cube is copied or
+        moved, then its associated tracking cube must be copied or moved to the same location.
+        <b>The tracking cube will always be of type unsigned integer. Depending on the
+        bit-type of the mosaic cube and/or the number of bands it contains, the tracking cube
+        may be as much as four times the size of the mosaic cube itself.</b>
       </p>
       <p>
-        The Track feature works with Priority options ONTOP (with HIGHSATURATION and
-        LOWSATURATION parameters) and BENEATH for single band input cubes.  It does NOT support
-        multiple band input cubes with these priority options. It does work for multiband cubes
-        when PRIORITY=BAND. Furthermore, this feature is NOT supported when PRIORITY=AVERAGE.
+        The tracking cube can be used appropriately through the QVIEW-AdvancedTracking
+        tool. As the user pans across the displayed mosaic, for every mosaic pixel location,
+        QVIEW-AdvancedTracking will interactively report the index, the filename and the
+        serial number of the input cube that was input to mapmos for that specific pixel
+        location. Since the tracking cube is of bit-type unsigned integer, the DN values of
+        0, 1 and 2 are reserved for NULL, LRS and LIS, respectively, so valid pixel DN values
+        will begin at an offset of 3. In other words, a pixel of DN value 3 in the tracking
+        cube means that this same pixel within the mosaic was taken from the first input
+        image. The tracking cube cannot be used outside of the QVIEW-AdvancedTracking tool
+        except as a visual representation of the source cubes for the different pixels. 
+      </p>
+      <p>
+        The TRACK feature works with Priority options ONTOP and BENEATH for single band input
+        cubes. It works for multiband cubes for PRIORITY=ONTOP only when the NULL,
+        HIGHSATURATION and LOWSATURATION options are set to true. It also works for multiband
+        cubes when PRIORITY=BAND. Furthermore, this feature is NOT supported when
+        PRIORITY=AVERAGE.
+      </p>
+      <p>
+        <b>Please Note: Prior to ISIS version 3.6.0, tracking for the various mosaicking apllications
+          was being handled with an internal tracking band. Tracking is now being handled by an
+          external tracking cube that contains the associated tracking information. This application
+          can no longer add to mosaics of the old format. In order to continue to use these
+          older mosaics with the updated mosaicking applications, you must first use the
+          <def>trackextract</def> utility application to extract the tracking band and the associated
+          tracking information into an external tracking cube.</b>
       </p>
       <p>
         <b>
@@ -88,8 +112,17 @@
               current input image will appear in the output mosaic (it replaces the output mosaic
               pixel).  Invalid input <def>Special Pixels</def>
               (<def>NULL</def>,<def>HRS</def>,<def>HIS</def>,<def>LRS</def>,<def>LIS</def>) will NOT
-              replace an existing Valid output mosaic pixel. Refer to parameters HIGHSATURATION,
-              LOWSATURATION, and NULL to override replacement of Valid output mosaic pixels.
+              replace an existing Valid output mosaic pixel unless the optional flags are set. Refer
+              to parameters HIGHSATURATION,LOWSATURATION, and NULL to override replacement of Valid
+              output mosaic pixels. 
+              <p>
+                <b>NOTE:</b> When using this priority with multi-band mosaics and with the TRACK
+                option set, all Special Pixel flags must be set as well. This is because the same
+                pixel within different bands of a single input image may hold both Valid and Special
+                Pixel values, and since our Tracking capabilities can only track one input image per
+                pixel (as it is a single band), it must accept the values for that particular pixel
+                from <b>every</b> band in the input image being placed on top.
+              </p>
             </td>
           </tr>
           <tr>
@@ -118,7 +151,7 @@
               Overlapping Valid pixel values from the current input image and output mosaic will be
               averaged for the new mosaic pixel values. A count-band is created with the output
               mosaic file.  The count-band keeps track of the number of images involved in the
-              averaging of the input dn values for each pixel in the mosaic. Invalid input pixel
+              averaging of the input DN values for each pixel in the mosaic. Invalid input pixel
               values will not be included in the average.  In the case where only one Valid pixel
               exists between the input image pixels or the current mosaic pixel, the Valid pixel is
               retained in the current output mosaic. Refer to parameters HIGHSATURATION,
@@ -451,6 +484,11 @@
     <change name="Kimberly Oyama and Tammy Becker" date="2014-04-05">
       Updated Documentation. Updated unit test for priority=band. Fixes #1620. References #1623. References #1550.
     </change>
+    <change name="Summer Stapleton" date="2018-08-13">
+      Updated documentation to reflect new handling of tracking capabilities with an external
+      tracking cube as well as clarify why special pixel flags are required when priority=ontop for
+      multiband mosaics. References #2092
+    </change>
   </history>
 
   <oldName>
@@ -483,7 +521,7 @@
           Mosaic cube
         </brief>
         <description>
-          The ouput mosaic cube which will have the input cube placed in it. If the selected cube does
+          The output mosaic cube which will have the input cube placed in it. If the selected cube does
           not already exist as a mosaic, the CREATE option must be selected and it will be created.
           In this case the latitude and longitude range parameters must be entered.
         </description>
@@ -591,7 +629,7 @@
           </item>
         </default>
         <brief>
-          Indicate the Band name or number to be used for comparison.
+          Indicate the Band name or number to be used for comparison
         </brief>
         <description>
           This option allows you to select the method to specify the band
@@ -681,7 +719,7 @@
         <list>
           <option value="LESSER">
             <brief>
-              The lower DN value between the input and mosaic pixels will be placed on top.
+              The lower DN value between the input and mosaic pixels will be placed on top
             </brief>
             <description>
               The lower DN value between the input and mosaic pixels will be placed on top of
@@ -690,7 +728,7 @@
           </option>
           <option value="GREATER">
            <brief>
-             The larger DN value between the input and mosaic pixels will be placed on top.
+             The larger DN value between the input and mosaic pixels will be placed on top
            </brief>
             <description>
               The larger DN value between the input and mosaic pixels will be placed on top of
@@ -728,27 +766,26 @@
         <brief>Track the source filename for each mosaic pixel</brief>
         <description>
           <p>
-            The Track feature creates a band in the output mosaic file containing the index
-            values for every pixel in the output mosaic. The Track-band can only be used
-            appropriately through the  QVIEW-AdvancedTracking tool. As the user interactively
-            pans across the displayed mosaic band (Band1), for every mosaic pixel location
-            QVIEW-AdvancedTracking will report the source cube filename that was input to
-            automos. The Track-band cannot be used outside the QVIEW-AdvancedTracking tool.
-            TRACK must be set to TRUE at the time of mosaic creation only and cannot be turned
-            on after the mosaic is created. When a mosaic is created with TRACK=TRUE, all
-            subsequent runs will default to TRACK=TRUE. When a mosaic is created with
-            TRACK=FALSE, an error will be encountered if subsequent runs have TRACK=TRUE. 
-            <b>Hence the file (byte) size of the mosaic is increased due to
-                the track-band.</b>
-          </p>
-          <p>
-            A table, called InputImages, containing the names of the images used in the mosaic
-            will be added to the cube when TRACK=TRUE.
+            The Track feature creates a separate tracking cube containing the index values for
+            the source of every pixel in the output mosaic. The tracking cube can only be used
+            appropriately through the  QVIEW-AdvancedTracking tool. As the user pans across the
+            displayed mosaic, for every mosaic pixel location QVIEW-AdvancedTracking will
+            interactively report the filename, the serial number and the index of the input cube
+            that was input to mapmos for that specific pixel location. The tracking cube cannot
+            be used outside the QVIEW-AdvancedTracking tool except as a visual representation of
+            the source cubes for the different pixels. TRACK must be set to TRUE at the time of
+            mosaic creation only and cannot be turned on after the mosaic is created. When a
+            mosaic is created with TRACK=TRUE, all subsequent runs will default to TRACK=TRUE.
+            When a mosaic is created with TRACK=FALSE, an error will be encountered if subsequent
+            runs have TRACK=TRUE. <b>The tracking cube will always be of type unsigned integer.
+            Depending on the bit-type of the mosaic cube and/or the number of bands it contains,
+            the tracking cube may be as much as four times the size of the mosaic cube itself.</b>
           </p>
           <p>
             WARNING:
-            If Tracking is turned on in a mosaic, any subsequent applications that modify "dn"
-            values will corrupt the track-band, for instance the application <def>reduce</def>.
+            If Tracking is turned on in a mosaic, any subsequent applications that modify DN
+            values, such as the application<def>reduce</def>, will corrupt the DN values in the
+            tracking cube.
           </p>
         </description>
       </parameter>
@@ -786,7 +823,7 @@
           Minimum Longitude
         </brief>
         <description>
-            This parameter specifies the minimum longitude of the mosaic
+            This parameter specifies the minimum longitude of the mosaic.
         </description>
         <internalDefault>Use Map Value</internalDefault>
       </parameter>
@@ -797,7 +834,7 @@
           Maximum Longitude
         </brief>
         <description>
-            This parameter specifies the maximum longitude of the mosaic
+            This parameter specifies the maximum longitude of the mosaic.
         </description>
         <greaterThan>
             <item>MINLON</item>
@@ -862,7 +899,7 @@
         </brief>
         <description>
           This option causes NULL values  in the input image to be automatically 
-          copied to the mosaic regardless of the priority
+          copied to the mosaic regardless of the priority.
         </description>
       </parameter>
     </group>
diff --git a/isis/src/base/apps/photomet/tsts/useDem/Makefile b/isis/src/base/apps/photomet/tsts/useDem/Makefile
index a28297715a0c1644e2f70375bc8338743e3a093c..9b7143423537f08b23170dbd638bb17e90bc797f 100644
--- a/isis/src/base/apps/photomet/tsts/useDem/Makefile
+++ b/isis/src/base/apps/photomet/tsts/useDem/Makefile
@@ -1,7 +1,7 @@
 APPNAME = photomet
 
-angleSourceDemUsedemFalse.cub.TOLERANCE = 0.0005
-angleSourceDemUsedemTrue.cub.TOLERANCE = 0.0005
+angleSourceDemUsedemFalse.cub.TOLERANCE = 0.001
+angleSourceDemUsedemTrue.cub.TOLERANCE = 0.001
 
 include $(ISISROOT)/make/isismake.tsts
 
@@ -50,4 +50,4 @@ commands:
 	incmat=80 \
 	thresh=30 \
 	albedo=1.0 > /dev/null;
-	
\ No newline at end of file
+	
diff --git a/isis/src/base/apps/reduce/tsts/outputLinesRoundOff/Makefile b/isis/src/base/apps/reduce/tsts/outputLinesRoundOff/Makefile
index 1a3a005a2efd906b23e82bc8248df2e8292ff6db..40f8ad6ef2326b92f319aeeddccde0314d2d3f90 100644
--- a/isis/src/base/apps/reduce/tsts/outputLinesRoundOff/Makefile
+++ b/isis/src/base/apps/reduce/tsts/outputLinesRoundOff/Makefile
@@ -8,7 +8,6 @@ APPNAME = reduce
 # user had entered.
 
 labels.txt.IGNORELINES = ByteOrder StartByte Bytes TileSamples TileLines
-results.pvl.SKIPLINES=2
 
 include $(ISISROOT)/make/isismake.tsts
 
diff --git a/isis/src/base/apps/ringsautomos/ringsautomos.xml b/isis/src/base/apps/ringsautomos/ringsautomos.xml
index c34beb8ef5732038d3f06d9a6afba9ce96d2ea41..40cf07e9b25dfe8913ba410dfcb85163d7cc0293 100644
--- a/isis/src/base/apps/ringsautomos/ringsautomos.xml
+++ b/isis/src/base/apps/ringsautomos/ringsautomos.xml
@@ -14,161 +14,413 @@
       padding-left: 5px; width:70px; align:left;
     }
    </style></head><body> <font size="2" face="Verdana">
-   <p>This program uses a text-based list of cubes, all in the same map projection and equivalent projection parameters (PixelResolution, 
-    CenterRingLongitude, etc), to generate a mosaic.  By default,
-    The program automatically determines the size of the mosaic by examining each cube.  The user also
-    has the option of entering their own rad/az range to use for the mosaic.
+   <p>This program uses a text-based list of cubes, all in the same map projection and equivalent
+    projection parameters (PixelResolution, CenterRingLongitude, etc), to generate a mosaic. By default,
+    The program automatically determines the size of the mosaic by examining each cube. The user also
+    has the option of entering their own ring radius and ring longitude range to use for the mosaic.
    </p>
-   <p>There are four different ways/priorities (input, mosaic, band, average) 
-    for how the input image has to be placed on the mosaic.</p>
-    
-   <p>Priority <b>Input</b> will place the input image on top of the mosaic.</p>
-   
-   <p>Priority <b>Mosaic</b> will place the input image beneath the mosaic.</p>
-   
-   <p>Priority <b>Band</b> will place the input image on the mosaic based on the "Lessser" or "Greater" criteria 
-   between user defined band in the input and the mosaic images.</p>
-   
-   <p>Priority <b>Average</b> will average the valid pixels in the input and mosaic images. For each mosaic band, a count band is maintained. The count band 
-   keeps track of the number of images involved in the averaging of the dn value for each pixel in the mosaic. Choosing this priority will cause the mosaic to have twice the number of 
-   bands of the input image, with a count band for each band. <b>Hence the file size of the mosaic is doubled due to the count band.</b>
+   <p>There are four different ways/priorities (ONTOP, BENEATH, BAND and AVERAGE) 
+    for how the input image can be placed on the mosaic. In case of special pixels and the
+    special pixel flags being enabled, the details for each priority is described in the tables
+    below.
    </p>
-   
-   <p>In case of special pixels and the special pixel flags being enabled, the details 
-   for each priority is described below.
+   <p>
+     The TRACK feature creates a separate tracking cube in addition to the mosaic cube, and
+     contains information for the source files of every pixel within the output mosaic.
+     The tracking cube will have the same base-name as the mosaic cube, but will end in 
+     "_tracking.cub", and must always reside in the same directory as the
+     mosaic cube to be properly accessed.
+     <b>The tracking cube will always be of type unsigned integer. Depending on the
+     bit-type of the mosaic cube and/or the number of bands it contains, the tracking cube
+     may be as much as four times the size of the mosaic cube itself.</b>
    </p>
-    <p> Tracking can be set at the time of Mosaic creation
-      only and cannot be turned on after the mosaic is created. But the tracking
-      will be turned off for multiband ONTOP and BENEATH priority even though it 
-      was turned on while creating the mosaic. Tracking for multiband input with
-      ONTOP priority is possible only if  all the Special Pixel Flags are set to 
-      True else the Tracking will be turned off. ONTOP priority basically places 
-      all the valid input pixels onto the mosaic unless the special pixel flags 
-      are turned on or if mosaic has a NULL pixel. In a multi band scenario, a 
-      pixel origin in particular line and sample will not be the same in all the 
-      different bands, which means we have to keep track of every pixel in every 
-      band. i.e. the size of the tracking bands will be the same as the number 
-      of bands in the mosaic.i.e the number of bands will be doubled. </p> 
-      <p><b>WARNING: </b>If Tracking is turned on in a mosaic, any subsequent
-                             applications that modify "dn" values will corrupt
-                             the Tracking band. It may be necessary to remove
-                             the Tracking band from the mosaic and then add it
-                             back after all the processing is complete. See
-                             "crop" and "cubeit".
-      </p>
-      <p>Priority BAND can track origin for multi band input image based on a 
-      specified band using LESSER or GREATER than criteria. Each pixel in the
-      specified band is compared to the corresponding pixel in the chosen band 
-      in the mosaic based on the chosen criteria. This comparison true or false 
-      is used for all the other bands whether the input pixel is copied onto the 
-      mosaic and hence the origin for that pixel is stored. Band can be chosen 
-      by choosing the TYPE, BANDNUMBER or KEYWORD. If BANDNUMBER is chosen then 
-      the band number can be entered in the NUMBER field. If KEYWORD is chosen 
-      then PVL key name and value from the BANDBIN group can be entered in the 
-      KEYNAME and KEYVALUE fields. </p> 
-     <p>For example,  for a multi band input  with BAND priority,  if the BAND 
-        chosen is Emission Angle band(EMA), if input pixels are (30,30,30) in 
-        EMA Band for some sample, line and the corresponding pixels in the EMA 
-        band in the mosaic has (75, 75, 75) and the criteria is GREATER than, 
-        then since input pixels are not GREATER than corresponding mosaic 
-        pixels, then the input pixels are not copied to the mosaic, so also the
-        corresponding pixels in all the other bands in the input. Hence the 
-        origin for those pixels remains unchanged. If LESSER than was the 
-        criteria, then all the corresponding pixels in all the input bands will 
-        be copied to the mosaic and the origin for those pixels is the current 
-        input image. 
+   <p>
+     The tracking cube can be used appropriately through the QVIEW-AdvancedTracking
+     tool. As the user pans across the displayed mosaic, for every mosaic pixel location,
+     QVIEW-AdvancedTracking will interactively report the index, the filename and the
+     serial number of the input cube that was input to ringsautomos for that specific pixel
+     location. Since the tracking cube is of bit-type unsigned integer, the DN values of
+     0, 1 and 2 are reserved for NULL, LRS and LIS, respectively, so valid pixel DN values
+     will begin at an offset of 3. In other words, a pixel of DN value 3 in the tracking
+     cube means that this same pixel within the mosaic was taken from the first input
+     image. The tracking cube cannot be used outside of the QVIEW-AdvancedTracking tool
+     except as a visual representation of the source cubes for the different pixels. 
+   </p>
+   <p>
+     The TRACK feature works differently depending on the Priority options and whether you are
+     using single- or multi-band cubes:
+   </p>
+   <p>
+     <ul>
+       <li>For single band cubes, you can specify PRIORITY as ONTOP and BENEATH.</li>
+       <li>For multiband cubes, you can use PRIORITY=BAND.</li>
+       <li>For multiband cubes, you can use PRIORITY=ONTOP only when the NULL, HIGHSATURATION and
+         LOWSATURATION options are set to true. </li>
+       <li>This feature is NOT supported for any single- or multi-band cubes when using 
+         PRIORITY=AVERAGE.</li>
+     </ul>
+   </p>
+   <p>
+     <b>Please Note: Prior to ISIS version 3.6.0, tracking for the various mosaicking apllications
+       was being handled with an internal tracking band. Tracking is now being handled by an
+       external tracking cube that contains the associated tracking information. This application
+       can no longer add to mosaics of the old format. In order to continue to use these
+       older mosaics with the updated mosaicking applications, you must first use the
+       <def>trackextract</def> utility application to extract the tracking band and the associated
+       tracking information into an external tracking cube.</b>
+   </p>
+   <p> 
+      Tracking can be set at the time of Mosaic creation
+      only and cannot be turned on after the mosaic is created. For multiband mosaics, if
+      PRIORITY=ONTOP and all the Special Pixel flags are not set to true, or if PRIORITY=BENEATH,
+      tracking will be turned off even if it was turned on while creating the mosaic. ONTOP
+      priority places all the valid input pixels onto the mosaic unless the special pixel flags 
+      are turned on or if the mosaic has a NULL pixel. In a multi band scenario, a 
+      pixel origin within a particular line and sample will not be the same in all the 
+      different bands.
+    </p> 
+    <p><b>WARNING: </b>If Tracking is turned on in a mosaic, any subsequent
+                           applications that modify DN values will corrupt
+                           the Tracking cube.
+    </p>
+    <p>
+      Priority BAND can track the origin for multiband input cubes. 
+      The input cube pixels will be placed in the output mosaic based on the "Lesser" or
+      "Greater" criteria of a priority band defined by the user. Band can be implemented with the
+      TYPE, BANDNUMBER or KEYWORD options.
+        <ul>
+          <li>If BANDNUMBER is chosen then the band number can be entered in the NUMBER field.</li>
+          <li>If KEYWORD is chosen then PVL key name and value from the BANDBIN group can be entered
+            in the KEYNAME and KEYVALUE fields. </li> 
+        </ul>
      </p>
-      <p>There are options like MATCHBANDIN, if set requires the specfied input 
-      bands to match the mosaic bands and the bands can be anywhere in the 
-      mosaic but must be contiguous for multi-band. If MATCHBANDIN is not set 
-      then any input image can be placed on the mosaic within it's boundaries.
+     <p>Multiband input example with BAND priority and example parameters:
+       <ul>
+         <li>BAND = Emission Angle band(EMA)</li>
+         <li>Input pixels = (30,30,30) in EMA Band for some sample and line</li>
+         <li>Corresponding pixels in the EMA band in the mosaic = (75, 75, 75)</li>
+         <li>Criteria = GREATER than</li>
+       </ul>
+       <p>
+         Expected Result:
+         <ul>Since input pixels are not GREATER than corresponding mosaic 
+          pixels, then the input pixels are not copied to the mosaic, so also the
+          corresponding pixels in all the other bands in the input. Hence the 
+          origin for those pixels remains unchanged. </ul>
+        </p>
+        <p>
+          Given this same example with CRITERIA=LESSER than:
+          <ul>All corresponding pixels in all the
+            input bands will be copied to the mosaic and the origin for those pixels is the current 
+            input cube. </ul>
+        </p>
       </p>
-      <p> Options HIGHSATURATION, LOWSATURATION and NULL if
-      set will cause the the input pixels with these values to be copied to the
-      mosaic for ONTOP and BAND priorities regardless of the CRITERIA for the
-      BAND priority. These options are not supported for BENEATH priority. </p>
-      <p>Currently Tracking can be viewed in the Advanced Tool Tracking  option 
+      <p>
+        MATCHBANDIN, if set, requires the specified input bands to match the mosaic bands and the
+        bands can be anywhere in the mosaic but must be contiguous for multi-band. If MATCHBANDIN
+        is not set then any input image can be placed on the mosaic within its boundaries.
+      </p>
+      <p>
+        HIGHSATURATION, LOWSATURATION and NULL options, if set, will cause the the input pixels
+        with these values to be copied to the mosaic for ONTOP and BAND priorities regardless of
+        the CRITERIA for the BAND priority. These options are not supported for BENEATH priority.
+      </p>
+      <p>Currently Tracking can be viewed in the Advanced Tool Tracking option 
         of the <b>qview</b> application. Following are the Tracking info:</p> 
-      <p><b>Index :</b> Zero based and is in the order in which  the image was 
+      <p><b>Index:</b> Zero based and is in the order in which the image was 
         placed on the mosaic. No origin is represented as -1.</p>
-         <p><b>FileName:</b> File name  of  input image </p>
-         <p> <b>Serial Number:</b>Serial Number of the input image </p>
-       <p>Following are the values for the origin band depending on the pixel type
-             <table border="1" cellspacing="0" cellpadding="2" width="500">
-             <tr><th>Pixel Type<br></br>(bits)</th><th>Default<br></br> (No  Origin)</th><th>Start Value</th><th>Max Value</th><th>Total Images<br></br> Supported</th></tr>
-               <tr><td class="td">32</td><td class="td">-16777216</td><td class="td">-16777215</td><td class="td">16777216</td><td class="td">33549932</td></tr>
-               <tr><td class="td">16</td><td class="td">-32768</td><td class="td">-32767</td><td class="td">32767 </td><td class="td">65535</td></tr>
-               <tr><td class="td">8</td><td class="td">0</td><td class="td">1</td><td class="td">255</td><td class="td">255</td></tr>
-             </table>
+      <p><b>FileName:</b> File name  of  input image </p>
+      <p> <b>Serial Number:</b> Serial Number of the input image </p>
+      <p>
+        <b>
+          The following table describes how the program will determine the pixel value in the output
+          mosaic for areas of image overlap.
+        </b>
+        <table border="1" >
+          <tr><th>PRIORITY</th><th>RESULT</th></tr>
+          <tr>
+            <td>ONTOP</td>
+            <td>
+              This is the default.  The current input image will be placed on top of the
+              output mosaic. Thus in any area of overlap, the Valid pixel values for the
+              current input image will appear in the output mosaic (it replaces the output mosaic
+              pixel).  Invalid input <def>Special Pixels</def>
+              (<def>NULL</def>,<def>HRS</def>,<def>HIS</def>,<def>LRS</def>,<def>LIS</def>) will NOT
+              replace an existing Valid output mosaic pixel unless the optional flags are set. Refer
+              to parameters HIGHSATURATION,LOWSATURATION, and NULL to override replacement of Valid
+              output mosaic pixels. 
+              <p>
+                <b>NOTE:</b> When using this priority with multi-band mosaics and with the TRACK
+                option set, all Special Pixel flags must be set as well. This is because the same
+                pixel within different bands of a single input image may hold both Valid and Special
+                Pixel values, and since our Tracking capabilities can only track one input image per
+                pixel (as it is a single band), it must accept the values for that particular pixel
+                from <b>every</b> band in the input image being placed on top.
+              </p>
+            </td>
+          </tr>
+          <tr>
+            <td>BENEATH</td>
+            <td>
+              The current input image will be placed beneath the output mosaic. Thus in
+              any area of overlap, the Valid pixel values for the current mosaic will remain in
+              the output mosaic. The Valid pixel values for the current input image will only
+              replace the NULL pixels values in the output mosaic.  The HRS,HIS,LRS and LIS  special
+              pixel values in the output mosaic will NOT be replaced by the Valid input pixel.
+              The parameters HIGHSATURATION, LOWSATURATION and NULL are not supported under this
+              priority.
+            </td>
+          </tr>
+          <tr>
+            <td>BAND</td>
+            <td>
+              The input image pixels will be placed in the output mosaic based on the "Lesser" or
+              "Greater" criteria of a priority band defined by the user.  Parameters that apply to
+              this priority feature are TYPE, NUMBER, KEYNAME, KEYVALUE, CRITERIA.
+            </td>
+          </tr>
+          <tr>
+            <td>AVERAGE</td>
+            <td>
+              Overlapping Valid pixel values from the current input image and output mosaic will be
+              averaged for the new mosaic pixel values. A count-band is created with the output
+              mosaic file. The count-band keeps track of the number of images involved in the
+              averaging of the input DN values for each pixel in the mosaic. Invalid input pixel
+              values will not be included in the average. In the case where only one Valid pixel
+              exists between the input image pixels or the current mosaic pixel, the Valid pixel is
+              retained in the current output mosaic. Refer to parameters HIGHSATURATION,
+              LOWSATURATION, and NULL to override replacement of valid output mosaic pixels.
+              <p>
+                Choosing this priority will cause the mosaic to have twice the number of bands of
+                the input image. <b>Hence the file (byte) size of the mosaic is increased due to
+                the count-bands.</b>
+              </p>
+              <p>
+                <b>NOTE</b>: If an existing mosaic does not already contain a count-band, an error
+                will be encountered.
+              </p>
+            </td>
+          </tr>
+        </table>
+      </p>   
+      <p>
+        Each of the following priority option tables indicates the resulting output pixel for a
+        particular input pixel, given the selected special pixel options  (parameters
+        HIGHSATURATION for HRS, HIS;  LOWSATURATION for LRS, LIS; and NULL) in each table row.
+
+        <!--
+          *******************************************************************************
+          The graphics below are commented out because they are no longer correct.
+          *******************************************************************************
+        -->
+        <!--
+        <table cellspacing="0" cellpadding="1" border="0">
+          <tr><th colspan="3" align="center"><u>  Priority OnTop</u></th></tr>
+          <tr height="15"><th colspan="3"></th></tr>
+          <tr><td class="td"><img src="assets/OnTop.jpg" alt="Priority OnTop" />  </td>
+              <td class="td"></td>
+              <td class="td">-->
+                <table cellspacing="0" cellpadding="1" border="1" width="1000">
+                  <tr><th colspan="6" align="center">PRIORITY=ONTOP</th></tr>
+                  <tr><th colspan="3" align="center">Options</th>
+                      <th colspan="3" align="center">Images</th></tr>
+                  <tr><th>High Saturation</th>
+                      <th>Low Saturation</th>
+                      <th>Null</th>
+                      <th>Input Pixel Value Type</th>
+                      <th>Current Mosaic Pixel Value Type</th>
+                      <th>Output Mosaic Pixel Value Source</th></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">High Saturation or Low Saturation or Valid</td>
+                      <td class="td2">Mosaic</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Null</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Input</td></tr>
+                </table>
+<!--              </td>
+          </tr>
+        </table>-->
+        <br></br><br></br><br></br>
+<!--
+        <table cellspacing="0" cellpadding="1" border="0">
+          <tr><th colspan="3" align="center"><u>Priority Beneath</u></th></tr>
+          <tr height="15"><th colspan="3"></th></tr>
+          <tr><td class="td"><img src="assets/Beneath.jpg" alt="Priority Beneath" />  </td>
+              <td class="td" width="30"></td>
+              <td class="td">-->
+                <table cellspacing="0" cellpadding="1" border="1">
+                  <tr><th colspan="3" align="center">PRIORITY=BENEATH</th></tr>
+                  <tr><th>Input Pixel Value Type</th>
+                      <th>Current Mosaic Pixel Value Type</th>
+                      <th>Output Mosaic Pixel Value Source</th>
+                  </tr>
+                  <tr><td class="td2">Special or Valid</td>
+                      <td class="td2">Null</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">Special or Valid</td>
+                      <td class="td2">High Saturation or Low Saturation or Valid</td>
+                      <td class="td2">Mosaic</td>
+                  </tr>
+                </table>
+              <!--</td>
+          </tr>
+        </table>-->
+
+        <br></br><br></br><br></br>
+<!--
+        <table cellspacing="0" cellpadding="1" border="0">
+          <tr><th colspan="3" align="center"><u> Priority Band</u></th></tr>
+          <tr height="15"><th colspan="3"></th></tr>
+          <tr><td class="td"><img src="assets/Band.jpg" alt="Priority Band" />  </td>
+              <td class="td"></td>
+              <td class="td">-->
+                <table cellspacing="0" cellpadding="0" border="1" width="1000">
+                  <tr><th colspan="6" align="center">PRIORITY=BAND</th></tr>
+                  <tr><th colspan="3" align="center">Options</th><th colspan="3" align="center">
+                    Images</th></tr>
+                  <tr><th>High Saturation</th><th>Low Saturation</th><th>Null</th>
+                      <th>Input Pixel Value Type</th><th>Current Mosaic Pixel Value Type</th>
+                      <th>Output Mosaic Pixel Value Source</th></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Criteria based</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">High Saturation or Low Saturation or Valid</td>
+                      <td class="td2">Mosaic</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Null</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Input</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Criteria based</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Input</td></tr>
+                </table>
+<!--              </td>
+          </tr>
+        </table>-->
+        <br></br><br></br><br></br>
+<!--
+        <table cellspacing="0" cellpadding="1" border="0">
+          <tr><th colspan="3" align="center"><u>Priority Average</u></th></tr>
+          <tr height="15"><th colspan="3"></th></tr>
+          <tr><td class="td"><img src="assets/Average.jpg" alt="Priority Average" /></td>
+              <td class="td"></td>
+              <td class="td">-->
+                <table cellspacing="0" cellpadding="0" border="1" width="1000">
+                  <tr><th colspan="7" align="center">PRIORITY=AVERAGE</th></tr>
+                  <tr><th colspan="3" align="center">Options</th><th colspan="4" align="center">
+                    Images</th></tr>
+                  <tr><th>High Saturation</th><th>Low Saturation</th><th>Null</th>
+                      <th>Input Pixel Value Type</th><th>Current Mosaic Pixel Value Type</th>
+                      <th>Output Mosaic Pixel Value Source</th>
+                      <th>Count Band Pixel Value (# of images used for average)</th></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Average</td>
+                      <td class="td2">increment count by 1</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Input</td>
+                      <td class="td2">count = 1</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Mosaic</td>
+                      <td class="td2">count = 0</td></tr>
+                  <tr><td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">False</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Mosaic</td>
+                      <td class="td2">count unchanged</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Special or Valid</td>
+                      <td class="td2">Input</td>
+                      <td class="td2">count = 0</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Average</td>
+                      <td class="td2">increment count by 1</td></tr>
+                  <tr><td class="td2">True or False</td>
+                      <td class="td2">True or False</td>
+                      <td class="td2">True</td>
+                      <td class="td2">Valid</td>
+                      <td class="td2">Special</td>
+                      <td class="td2">Input</td>
+                      <td class="td2">count = 1</td></tr>
+                </table>
+                <!--</td></tr>
+        </table>
+     -->
       </p>
-      <p> Following is the table for Special Pixel options, input, mosaic
-      pixels and the resulting output for different priorities.
-     <br><b>Tags: F(FALSE), T(TRUE), V(VALID), HS(HIGH SATURATION), LS(LOW SATURATION), 
-           S(SPECIAL PIXEL HS, LS, NULL), N(NULL), I(INPUT), M(MOSAIC),  HL(HS,LS)
-      </b></br>
-      </p> 
-     <li />
-     <table cellspacing="0" cellpadding="1" border="0"> 
-       <tr><th colspan="3" align="center"><u>Priority Beneath</u></th></tr>
-       <tr height="15"><th colspan="3"></th></tr>
-     <tr><td class="td"><img src="assets/Beneath.jpg" alt="Priority Beneath" />  </td><td class="td" width="30"></td>
-         <td class="td"><table cellspacing="0" cellpadding="1" border="1"> 
-         <tr><th colspan="3" align="center">BENEATH</th></tr>
-         <tr><th>Input</th><th>Mosaic</th> <th>Output </th></tr>
-         <tr><td class="td">S,V</td><td class="td">N</td><td class="td">I</td></tr>
-         <tr><td class="td">S,V</td><td class="td">HL,V</td><td class="td">M</td></tr>
-     </table></td></tr> </table><br></br><br></br><br></br>
-     <li />
-      <table cellspacing="0" cellpadding="1" border="0"> 
-        <tr><th colspan="3" align="center"><u>  Priority OnTop</u></th></tr>
-        <tr height="15"><th colspan="3"></th></tr>
-     <tr><td class="td"><img src="assets/OnTop.jpg" alt="Priority OnTop" />  </td><td class="td"></td>
-     <td class="td"><table cellspacing="0" cellpadding="1" border="1" width="350">
-          <tr><th colspan="6" align="center">ONTOP</th></tr>
-          <tr><th colspan="3" align="center">Options</th><th colspan="3" align="center">Images</th></tr>
-          <tr><th>HS</th><th>LS</th><th>NULL</th><th>Input</th><th>Mosaic</th><th>Output</th></tr>
-          <tr><td class="td"> F</td><td class="td"> F </td><td class="td">F</td><td class="td">V</td><td class="td">S,V</td><td class="td">I</td></tr>
-          <tr><td class="td"> F</td><td class="td"> F </td><td class="td">F</td><td class="td"> S </td><td class="td"> HL,V</td><td class="td">M </td></tr>  
-          <tr><td class="td"> F</td><td class="td"> F </td><td class="td">F</td><td class="td"> S,V </td><td class="td"> N </td><td class="td">I</td></tr>                    
-          <tr><td class="td"> T OR </td><td class="td"> T OR  </td><td class="td">T</td><td class="td">V </td><td class="td">S,V</td><td class="td">I </td></tr>           
-          <tr><td class="td"> T OR </td><td class="td"> T OR  </td><td class="td">T</td><td class="td">S</td><td class="td">S,V</td><td class="td">I (H,L,N)</td></tr>
-      </table></td></tr> </table>
-      <br></br><br></br><br></br>
-      <li />
-      <table cellspacing="0" cellpadding="1" border="0"> 
-        <tr><th colspan="3" align="center"><u> Priority Band</u></th></tr>
-        <tr height="15"><th colspan="3"></th></tr>
-     <tr><td class="td"><img src="assets/Band.jpg" alt="Priority Band" />  </td><td class="td"></td>
-     <td class="td"><table cellspacing="0" cellpadding="0" border="1" width="380">
-          <tr><th colspan="6" align="center"> BAND</th></tr>
-          <tr><th colspan="3" align="center">Options</th><th colspan="3" align="center">Images</th></tr>
-          <tr><th>HS</th><th>LS</th><th>NULL</th><th>Input</th><th>Mosaic</th><th>Output</th></tr>
-          <tr><td class="td"> F</td><td class="td">   F</td><td class="td">F </td><td class="td">V</td><td class="td">V</td><td class="td">Criteria based</td></tr>
-          <tr><td class="td">F</td><td class="td"> F </td><td class="td"> F</td><td class="td">V</td><td class="td">S </td><td class="td"> I </td></tr>
-          <tr><td class="td">F</td><td class="td"> F</td><td class="td"> F</td><td class="td"> S </td><td class="td">HL,V</td><td class="td">M</td></tr>
-          <tr><td class="td">F</td><td class="td"> F</td><td class="td"> F</td><td class="td">S,V</td><td class="td">N</td><td class="td">I</td></tr>
-          <tr><td class="td">T OR</td><td class="td"> T OR</td><td class="td"> T</td><td class="td">  S</td><td class="td"> S,V</td><td class="td"> I(H,L,N)</td></tr>
-          <tr><td class="td">T OR</td><td class="td"> T OR</td><td class="td">T </td><td class="td">V</td><td class="td">V</td><td class="td">Criteria based</td></tr>
-          <tr><td class="td">T OR</td><td class="td"> T OR</td><td class="td"> T </td><td class="td">V</td><td class="td"> S</td><td class="td">I</td></tr>
-       </table></td></tr> </table><br></br><br></br><br></br><li />
-        
-       <table cellspacing="0" cellpadding="1" border="0"> 
-        <tr><th colspan="3" align="center"><u> Priority Average</u></th></tr>
-        <tr height="15"><th colspan="3"></th></tr>
-        <tr><td class="td"><img src="assets/Average.jpg" alt="Priority Average" />  
-        </td><td class="td"></td>
-        <td class="td"><table cellspacing="0" cellpadding="0" border="1" width="400">
-          <tr><th colspan="7" align="center"> AVERAGE</th></tr>
-          <tr><th colspan="3" align="center">Options</th><th colspan="4" align="center">Images</th></tr>
-          <tr><th>HS</th><th>LS</th><th>NULL</th><th>Input</th><th>Mosaic</th><th>Output</th><th>Count</th></tr>
-        <tr><td class="td">F</td><td class="td"> F</td><td class="td"> F</td><td class="td">V</td><td class="td"> V</td><td class="td1">Average</td><td class="td1">count++</td></tr> 
-        <tr><td class="td">F</td><td class="td"> F</td><td class="td">F</td><td class="td">V</td><td class="td">S</td><td class="td">I</td><td class="td">1</td></tr>
-        <tr><td class="td">F</td><td class="td"> F</td><td class="td">F</td><td class="td">S</td><td class="td">S</td><td class="td">M</td><td class="td">0</td></tr> 
-        <tr><td class="td">F</td><td class="td"> F</td><td class="td">F</td><td class="td">S</td><td class="td">V</td><td class="td">M</td><td class="td1">count</td></tr>
-        <tr><td class="td1">T OR</td><td class="td1"> T OR</td><td class="td">T</td><td class="td">S</td><td class="td">S,V</td><td class="td">I</td><td class="td">0</td></tr>
-        <tr><td class="td1">T OR</td><td class="td1"> T OR</td><td class="td">T</td><td class="td">V</td><td class="td">V</td><td class="td1">Average</td><td class="td1">count++</td></tr>
-        <tr><td class="td1">T OR</td><td class="td1"> T OR</td><td class="td">T</td><td class="td">V</td><td class="td">S</td><td class="td">I</td><td class="td">1</td></tr>
-        </table></td></tr> </table><li />
    </font>
    </body></html>
   </description>
@@ -277,6 +529,12 @@
       Added appTests.  Test coverage appears low (52% scope, 54% line, 50% function), however these
       tests cover 100% in all three categories for the code that does not apply to the GUI helper methods. 
     </change>
+    <change name="Summer Stapleton" date="2018-08-13">
+      Updated documentation to reflect new handling of tracking capabilities with an external
+      tracking cube and to be more consistent with other mosaicking program documentation as well as
+      clarify why special pixel flags are required when priority=ontop for multiband mosaics.
+      References #2092
+    </change>
   </history>
 
   <groups>
@@ -342,8 +600,8 @@
           <option value="ONTOP">
             <brief> Input cube will be placed on top of the mosaic </brief>
             <description>
-              An input pixel will always be copied onto a NULL mosaic pixel . 
-              Valid input pixel will also be always copied onto the mosaic. 
+              An input pixel will always be copied onto a NULL mosaic pixel. 
+              Valid input pixel will also be copied onto the mosaic. 
               Special input pixel will be copied onto the mosaic only if the 
               special pixel flags are set.
             </description>
@@ -600,12 +858,30 @@
       <parameter name="TRACK">
           <type>boolean</type>
          <default><item>FALSE</item></default>
-          <brief>
-            Track the mosaic origin
-          </brief>
+          <brief>Track the source filename for each mosaic pixel</brief>
           <description>
-            If selected the application will track the mosaic origin. Once 
-            origin is tracked, the tracker cannot be turned off.
+            <p>
+              The Track feature creates a separate tracking cube containing the index values for
+              the source of every pixel in the output mosaic. The tracking cube can only be used
+              appropriately through the  QVIEW-AdvancedTracking tool. As the user pans across the
+              displayed mosaic, for every mosaic pixel location QVIEW-AdvancedTracking will
+              interactively report the filename, the serial number and the index of the input cube
+              that was input to ringsautomos for that specific pixel location. The tracking cube cannot
+              be used outside the QVIEW-AdvancedTracking tool except as a visual representation of
+              the source cubes for the different pixels. TRACK must be set to TRUE at the time of
+              mosaic creation only and cannot be turned on after the mosaic is created. When a
+              mosaic is created with TRACK=TRUE, all subsequent runs will default to TRACK=TRUE.
+              When a mosaic is created with TRACK=FALSE, an error will be encountered if subsequent
+              runs have TRACK=TRUE. <b>The tracking cube will always be of type unsigned integer.
+              Depending on the bit-type of the mosaic cube and/or the number of bands it contains,
+              the tracking cube may be as much as four times the size of the mosaic cube itself.</b>
+            </p>
+            <p>
+              WARNING:
+              If Tracking is turned on in a mosaic, any subsequent applications that modify DN
+              values, such as the application<def>reduce</def>, will corrupt the DN values in the
+              tracking cube.
+            </p>
           </description>
         </parameter>
       <parameter name="MATCHBANDBIN">
diff --git a/isis/src/base/apps/ringspt/tsts/imagePosition/Makefile b/isis/src/base/apps/ringspt/tsts/imagePosition/Makefile
index 153bc397bc3cffaff376d970c85f1cbcee4dffb9..b2ff7d7fc5661292a8e7611c5fd5d5cc85a708fb 100644
--- a/isis/src/base/apps/ringspt/tsts/imagePosition/Makefile
+++ b/isis/src/base/apps/ringspt/tsts/imagePosition/Makefile
@@ -26,10 +26,9 @@ APPNAME = ringspt
 include $(ISISROOT)/make/isismake.tsts
 
 commands:
-	$(APPNAME) from=$(INPUT)/W1591159850_1_cal.cub > $(OUTPUT)/redirectedOutput.txt;
-	echo -e "Group = Results" &> $(OUTPUT)/centersample_centerline_lev1.pvl;
-	$(CAT) $(OUTPUT)/redirectedOutput.txt | grep -v "Processed" | grep -v "ringspt" \
-	  >> $(OUTPUT)/centersample_centerline_lev1.pvl;
+	$(APPNAME) from=$(INPUT)/W1591159850_1_cal.cub \
+	to=$(OUTPUT)/centersample_centerline_lev1.pvl \
+	> /dev/null;
 	$(APPNAME) from=$(INPUT)/W1591159850_1_cal.cub \
 	  to=$(OUTPUT)/appendedOutput_tmp.txt \
 	  format=flat \
diff --git a/isis/src/base/apps/stats/tsts/default/Makefile b/isis/src/base/apps/stats/tsts/default/Makefile
index 70758d8ea42691cea42248eace760c59d49e14b7..9c0113770100ae7b3f7f32b893b593d9475928bc 100644
--- a/isis/src/base/apps/stats/tsts/default/Makefile
+++ b/isis/src/base/apps/stats/tsts/default/Makefile
@@ -16,6 +16,6 @@ commands:
 	           > /dev/null;
 	  
 	$(APPNAME) from=$(INPUT)/isisTruth.cub \
-	           | grep -v stats \
+		   | grep -v "stats:" \
 	           | grep -v Processed \
-	           >& $(OUTPUT)/output.pvl;
\ No newline at end of file
+	           >& $(OUTPUT)/output.pvl;
diff --git a/isis/src/base/apps/trackextract/Makefile b/isis/src/base/apps/trackextract/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/base/apps/trackextract/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/base/apps/trackextract/trackextract.cpp b/isis/src/base/apps/trackextract/trackextract.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b29593e3bafb35220676d70a3d9031d42e3d1bea
--- /dev/null
+++ b/isis/src/base/apps/trackextract/trackextract.cpp
@@ -0,0 +1,283 @@
+#include "Isis.h"
+
+#include <QString>
+
+#include "Application.h"
+#include "Cube.h"
+#include "CubeAttribute.h"
+#include "FileName.h"
+#include "ProcessByLine.h"
+#include "Pvl.h"
+#include "SpecialPixel.h"
+#include "TrackingTable.h"
+#include "UserInterface.h"
+
+using namespace std;
+using namespace Isis;
+
+// Taken from ProcessMosaic
+const int FLOAT_MIN = -16777215;
+
+void findTrackBand(QString inputName, QVector<QString> &copyBands, int &trackBand);
+void createMosaicCube(QString inputName, QString outputName, QVector<QString> bandsVector);
+void createTrackCube(QString inputName, QString ouputName, int trackBand);
+void copyPixels(Buffer &in, Buffer &out);
+
+
+/**
+ * Functor that copies DN's from the input cube to the tracking cube.
+ * Because each pixel is offsetted by the min value of the input cube's pixel type,
+ * we have to subtract the offset from each pixel. Then, we add the min
+ * of an unsigned int to each pixel for the new offset.
+ * The default value is set in ProcessMosaic for pixels who are not taken from a cube.
+ * If a pixel's value is the default value, we set it to Null.
+ *
+ * @author 2018-07-30 Kaitlyn Lee
+ * @internal
+ *   @history 2018-07-30 Kaitlyn Lee - Original Version.
+ *
+ */
+class CopyPixelsFunctor {
+  private:
+    int m_offset;
+    int m_defaultValue;
+
+  public:
+    /**
+     * Default Constructor
+     * @param offset       The minimum value of the input cube's pixel type
+     * @param defaultValue Value used for pixels that are not taken from a cube
+     */
+    CopyPixelsFunctor(int offset, int defaultValue) {
+      m_offset = offset;
+      m_defaultValue = defaultValue;
+    }
+
+    /**
+     * Copies DN's from the input cube to the tracking cube, subtracts the old offset, and adds
+     * the new offset to each pixel.
+     *
+     * @param in  Input cube
+     * @param out Mosaic cube
+     */
+    void operator()(Buffer &in, Buffer &out) const {
+      for (int i = 0; i < in.size(); i++) {
+        if (in[i] == (float) m_defaultValue) {
+          out[i] = Isis::Null;
+        }
+        else {
+          out[i] = ((int) in[i]) - m_offset + VALID_MINUI4;
+        }
+      }
+    }
+};
+
+
+void IsisMain() {
+  UserInterface &ui = Application::GetUserInterface();
+  QString inputName = ui.GetFileName("FROM");
+  QString outputName = ui.GetFileName("TO");
+  
+  // Confirm that the input mosaic is of pixel-type "Real" as trackextract does not work on other
+  // bit types due to corruption of these files
+  Cube inputCube = Cube(inputName);
+  PixelType pixelType = inputCube.pixelType();
+  if (pixelType != Real) {
+    QString msg = "The input mosaic [" + inputName + "] is of pixel type [" 
+    + PixelTypeName(pixelType) + "]. This application only works for mosaics of pixel type Real.";
+    throw IException(IException::User, msg, _FILEINFO_);
+  }
+  
+  QVector<QString> copyBands;
+  int trackBand;
+  findTrackBand(inputName, copyBands, trackBand);
+  createMosaicCube(inputName, outputName, copyBands);
+  createTrackCube(inputName, outputName, trackBand);
+}
+
+
+/**
+ * Finds the index of the tracking band in the BandBin group and stores the index
+ * in trackBand. The other bands' indices are stored in copyBands.
+ * We store the indices in QStrings because we use them as cube attributes when
+ * we process the mosaic and tracking cubes.
+ *
+ * @param inputName The name of the input cube with the tracking band
+ * @param copyBands Indices of the bands to copy over to the mosaic cube
+ * @param trackBand Index of the tracking band
+ */
+void findTrackBand(QString inputName, QVector<QString> &copyBands, int &trackBand) {
+  Cube inputCube = Cube(inputName);
+  if (inputCube.hasGroup("BandBin")) {
+    PvlGroup &bandBinGroup = inputCube.group("BandBin");
+    try {
+      PvlKeyword &currentKeyword = bandBinGroup[0];
+      trackBand = -1;
+      for (int i = 0; i < currentKeyword.size(); i++) {
+        if (currentKeyword[i] != "TRACKING") {
+          copyBands.append(QString::number(i + 1)); // Make it 1 based
+        }
+        else {
+          trackBand = i + 1;
+        }
+      }
+    }
+    catch (IException &e) {
+      QString msg = "The input cube [" + inputName + "] does not have any keywords";
+      msg += " in the BandBin group. Make sure TRACKING is a keyword in the BandBin group.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+  }
+  else {
+    QString msg = "The input cube [" + inputName + "] does not have a BandBin group.";
+    throw IException(IException::Programmer, msg, _FILEINFO_);
+  }
+  if (trackBand == -1) {
+    QString msg = "The input cube [" + inputName + "] does not have a tracking band.";
+    msg += " If you want to create a tracking cube, run a mosaic program.";
+    throw IException(IException::Programmer, msg, _FILEINFO_);
+  }
+}
+
+
+/**
+ * Creates the mosaic cube by copying the input cube without the tracking band.
+ * Then, removes the tracking table from the mosaic label and adds a group pointing
+ * to the tracking cube.
+ *
+ * @param inputName   The name of the input cube
+ * @param ouputName   The name of the output cube
+ * @param bandsVector The indices of the bands that are not the tracking band
+ */
+void createMosaicCube(QString inputName, QString outputName, QVector<QString> bandsVector) {
+  ProcessByLine p;
+
+  CubeAttributeInput inAtt = CubeAttributeInput();
+  inAtt.setBands(bandsVector.toStdVector());
+
+  p.SetInputCube(inputName, inAtt);
+  p.SetOutputCube("TO");
+  p.StartProcess(copyPixels);
+  p.EndProcess();
+
+  Cube mosaicCube;
+  try {
+    mosaicCube.open(outputName,"rw");
+  }
+  catch (IException &e) {
+    throw IException(IException::User,
+                     "Unable to open the file [" + outputName + "] as a cube.",
+                     _FILEINFO_);
+  }
+
+  if (!mosaicCube.deleteBlob("Table", "InputImages")) {
+    QString msg = "The input cube [" + inputName + "] does not have a tracking table.";
+    throw IException(IException::Programmer, msg, _FILEINFO_);
+  }
+
+  // Add Tracking Group to the mosaic cube
+  PvlGroup trackingGroup = PvlGroup("Tracking");
+  PvlKeyword trackingName = PvlKeyword("Filename");
+  FileName cubeName = FileName(outputName);
+  trackingName.setValue(cubeName.baseName() + "_tracking.cub"); //Strip off path and add _tracking
+  trackingGroup.addKeyword(trackingName);
+  mosaicCube.putGroup(trackingGroup);
+
+  mosaicCube.close();
+}
+
+
+/**
+ * Creates the tracking cube by copying the input cube with only the tracking band.
+ * Then, goes through each pixel and subtracts the input cube's pixel type's min value or sets
+ * the value to Null, deletes the old tracking table, and creates a new table with updated data.
+ *
+ * @param inputName    The name of the input cube
+ * @param ouputName    The name of the output cube
+ * @param trackingBand The index of the tracking band
+ */
+void createTrackCube(QString inputName, QString ouputName, int trackBand) {
+  ProcessByLine p;
+
+  CubeAttributeInput inAtt = CubeAttributeInput("+" + QString::number(trackBand));
+  p.SetInputCube(inputName, inAtt);
+
+  FileName cubeName = FileName(ouputName);
+  // Strip off any extensions and add _tracking
+  QString trackingName = cubeName.path() + "/" + cubeName.baseName() + "_tracking.cub";
+  Cube inputCube = Cube(inputName);
+  int numSample = inputCube.sampleCount();
+  int numLine = inputCube.lineCount();
+
+  CubeAttributeOutput outAtt;
+  outAtt.setPixelType(UnsignedInteger);
+  outAtt.setMinimum(VALID_MINUI4);
+  outAtt.setMaximum(VALID_MAXUI4);
+
+  p.SetOutputCube(trackingName, outAtt, numSample, numLine);
+
+  int offset = 0;
+  int defaultVal = 0;
+  switch (SizeOf(inputCube.pixelType())) {
+    case 1:
+      offset = VALID_MIN1;
+      defaultVal = NULL1;
+      break;
+
+    case 2:
+      offset = VALID_MIN2;
+      defaultVal = NULL2;
+      break;
+
+    case 4:
+      offset = FLOAT_MIN;
+      defaultVal = INULL4;
+      break;
+
+    default:
+      QString msg = "Invalid Pixel Type [" + QString(inputCube.pixelType()) + "]";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+  }
+  CopyPixelsFunctor copyTrackPixels(offset, defaultVal);
+
+  p.ProcessCube(copyTrackPixels);
+  p.EndProcess();
+
+  Cube trackCube;
+  try {
+    trackCube.open(trackingName,"rw");
+  }
+  catch (IException &e) {
+    throw IException(IException::User,
+                     "Unable to open the file [" + trackingName + "] as a cube.",
+                     _FILEINFO_);
+  }
+
+  // Create new tracking table with updated data and delete the old table
+  if (trackCube.hasTable("InputImages")) {
+    Table oldTable("InputImages");
+    trackCube.read(oldTable);
+    trackCube.deleteBlob("Table", "InputImages");
+
+    TrackingTable newTrackTable(oldTable);
+    Table newTable = newTrackTable.toTable();
+    trackCube.write(newTable);
+  }
+  else {
+    QString msg = "The tracking cube [" + trackingName + "] does not have a tracking table.";
+    throw IException(IException::Programmer, msg, _FILEINFO_);
+  }
+}
+
+
+/**
+ * Copies DN's from the input cube to the mosaic cube.
+ *
+ * @param in  Input cube
+ * @param out Mosaic cube
+ */
+void copyPixels(Buffer &in, Buffer &out) {
+  for (int i = 0; i < in.size(); i++) {
+    out[i] = in[i];
+  }
+}
diff --git a/isis/src/base/apps/trackextract/trackextract.xml b/isis/src/base/apps/trackextract/trackextract.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e88b85bc10214ab16462cd4ed7aeab9540a1174d
--- /dev/null
+++ b/isis/src/base/apps/trackextract/trackextract.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="trackextract" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+  <brief>
+    Removes the tracking band from a mosaic and places it into a new tracking cube.
+  </brief>
+
+  <description>
+    <p>
+      Updates a mosaic cube with tracking information that was created using older versions of ISIS
+      (prior to 3.6.0) to be up to date with ISIS version 3.6.0 and above. Removes the tracking
+      band and the InputImages table from the input mosaic cube and places them into a separate
+      tracking cube. A reference to the tracking cube is then added to the mosaic label. In the
+      copying process, if a pixel in the tracking band of the input mosaic is not associated with
+      any of the original input images, a NULL value is written to that pixel in the tracking cube.
+      The mosaic cube's bit type remains the same, but the tracking cube's bit type will always be
+      unsigned integer. 
+    </p>
+    <p>
+      <b>Please Note: This application only works for 32-bit ("Real") mosaics as both 8-bit and
+      16-bit mosaics created prior to ISIS version 3.6.0 are considered to be corrupted.</b>
+    </p>
+    
+  </description>
+
+  <category>
+    <categoryItem>Utility</categoryItem>
+  </category>
+
+  <history>
+    <change name="Kaitlyn Lee" date="2018-07-20">
+      Original version
+    </change>
+    <change name="Summer Stapleton" date="2018-09-06">
+      Updated code to throw user error if input mosaic is anything other than 32-bit ("Real") as
+      it has been decided that 8-bit and 16-bit mosaics are corrupted. Updated documentation for
+      this. Also fixed the NULL value being written to the tracking cube as LRS was originally
+      being written instead.
+    </change>
+    <change name="Kaitlyn Lee" date="2018-10-16">
+      Removed FLOAT_MAX because it was not being used in the code and was causing build warnings 
+      on MacOS 10.13. References #5520.
+    </change>
+  </history>
+
+  <groups>
+    <group name="Files">
+      <parameter name="FROM">
+        <type>cube</type>
+        <fileMode>input</fileMode>
+        <brief>
+          Input cube with tracking band
+        </brief>
+        <description>
+          The mosaic created prior to ISIS version 3.6.0 that contains the tracking band
+          and InputImages table to be extracted. <b>Please Note: This mosaic cube must be of
+          bit-type "Real" as both 8-bit and 16-bit mosaics created before ISIS version 3.6.0 are
+          considered to be corrupted.</b>
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+
+      <parameter name="TO">
+        <type>cube</type>
+        <fileMode>output</fileMode>
+        <brief>
+          Output mosaic and tracking cube
+        </brief>
+        <description>
+          The output mosaic cube name that will be up to date with isis version 3.6.0 and above. 
+          This cube will no longer have the tracking band or the InputImages table, but a tracking
+          cube will be created in the same location with this information. This tracking cube will
+          have the same base name as the mosaic, but will end in "_tracking.cub".
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+    </group>
+  </groups>
+</application>
diff --git a/isis/src/base/apps/trackextract/tsts/32bit/Makefile b/isis/src/base/apps/trackextract/tsts/32bit/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8544bfde8dfaa3960875c381a74b866a745ff425
--- /dev/null
+++ b/isis/src/base/apps/trackextract/tsts/32bit/Makefile
@@ -0,0 +1,11 @@
+# Verify that we can extract the tracking band from a 32 bit cube.
+#
+# history 2018-07-27 Kaitlyn Lee - Original version.
+
+APPNAME = trackextract
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/automosTruth1.cub \
+		to=$(OUTPUT)/mosaic > /dev/null;
diff --git a/isis/src/base/apps/trackextract/tsts/Makefile b/isis/src/base/apps/trackextract/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/base/apps/trackextract/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/base/apps/trackextract/tsts/bandInMiddle/Makefile b/isis/src/base/apps/trackextract/tsts/bandInMiddle/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7a6ae61c65db2f34432c156dc73ab3c4600ccb95
--- /dev/null
+++ b/isis/src/base/apps/trackextract/tsts/bandInMiddle/Makefile
@@ -0,0 +1,11 @@
+# Verify that we can extract the tracking band that is not the last band in the cube.
+#
+# history 2018-07-27 Kaitlyn Lee - Original version.
+
+APPNAME = trackextract
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/automosTruth1.cub \
+		to=$(OUTPUT)/mosaic > /dev/null;
diff --git a/isis/src/base/apps/trackextract/tsts/noTrackBand/Makefile b/isis/src/base/apps/trackextract/tsts/noTrackBand/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d38f49563b52a566dd6d3c20ff322a98a87f788c
--- /dev/null
+++ b/isis/src/base/apps/trackextract/tsts/noTrackBand/Makefile
@@ -0,0 +1,19 @@
+# Verify that a cube with no tracking band will cause an exception to be thrown.
+#
+# history 2018-07-27 Kaitlyn Lee - Original version.
+
+APPNAME = trackextract
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	# TEST: Throws an error when trying to open a cube without a tracking band
+	if [ `$(APPNAME) from=$(INPUT)/mosaic.cub \
+				to=$(OUTPUT)/outputMosaic \
+				2> $(OUTPUT)/temp.txt > /dev/null` ]; \
+				then true; \
+	fi;
+
+	# Removes input file path up until input
+	$(SED) 's+\[.*/input+[input+' $(OUTPUT)/temp.txt > $(OUTPUT)/errorTruth.txt;
+	$(RM) $(OUTPUT)/temp.txt
diff --git a/isis/src/base/objs/Affine/Affine.cpp b/isis/src/base/objs/Affine/Affine.cpp
index 92a56c8b9683553d278fa3d9eea7b33d63c8d1cd..117d4dc26f58153f46bc10c586c64bd70ee39041 100644
--- a/isis/src/base/objs/Affine/Affine.cpp
+++ b/isis/src/base/objs/Affine/Affine.cpp
@@ -23,6 +23,7 @@
 
 #include <vector>
 #include <iostream>
+#include <sstream>
 #include <string>
 
 #include <jama/jama_svd.h>
@@ -227,7 +228,7 @@ namespace Isis {
    * are returned in a 3-dimensional vector
    *
    * @param var The coefficient vector index (1 or 2)
-   * 
+   *
    * @return vector<double> Vector of coefficients
    */
   vector<double> Affine::Coefficients(int var) {
@@ -244,7 +245,7 @@ namespace Isis {
    * The coefficients are returned in a 3-dimensional vector
    *
    * @param var The inverse coefficient vector index
-   * 
+   *
    * @return vector<double> Vector of inverse coefficients
    */
   vector<double> Affine::InverseCoefficients(int var) {
diff --git a/isis/src/base/objs/Application/Application.cpp b/isis/src/base/objs/Application/Application.cpp
index 1e32f38704b48ee16bec4c6827898ffd2a6add48..20e7114cb865a530cac3936222fae7719e64ec33 100644
--- a/isis/src/base/objs/Application/Application.cpp
+++ b/isis/src/base/objs/Application/Application.cpp
@@ -102,13 +102,10 @@ namespace Isis {
     strncpy(env, "LANG=en_US", 1023);
     putenv(env);
 
-    // Verify ISISROOT was set
-    if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
-      QString message = "Please set ISISROOT before running any Isis "
-          "applications";
-      cerr << message << endl;
-      abort();
-    }
+    // add qt path to 3rdParty so no default is taken from enviroment
+    QString pluginPath = getenv("ISISROOT");
+    pluginPath.append("/3rdParty/lib/");
+    QCoreApplication::addLibraryPath(pluginPath);
 
     // Get the starting cpu time, direct I/Os, page faults, and swaps
     //p_startClock = clock();
diff --git a/isis/src/base/objs/Application/unitTest.exclude b/isis/src/base/objs/Application/unitTest.exclude
index 0fb6a5c297a0279fec903965a35d41c7fb643986..6fd1eec12363fab24486dff32d5681a5048d3f40 100644
--- a/isis/src/base/objs/Application/unitTest.exclude
+++ b/isis/src/base/objs/Application/unitTest.exclude
@@ -6,4 +6,5 @@ IsisVersion
 Connect
 Cpu
 Program =
+File
                       
diff --git a/isis/src/base/objs/AtmosModel/unitTest.cpp b/isis/src/base/objs/AtmosModel/unitTest.cpp
index 6b9687eb883444ee6e125a464ced0d25414d548f..b81c7f77c8ad0f923a0dfde8e983ef6b61f0fd9b 100644
--- a/isis/src/base/objs/AtmosModel/unitTest.cpp
+++ b/isis/src/base/objs/AtmosModel/unitTest.cpp
@@ -411,19 +411,19 @@ int main() {
   try {
     AtmosModel::Ei(0.0); // require x > 0
   }
-  catch(IException e) {
+  catch(IException &e) {
     e.print();
   }
   try {
     AtmosModel::En(1, 0.0); // require (n>=0 & x>0) or (n>1 & x>=0)
   }
-  catch(IException e) {
+  catch(IException &e) {
     e.print();
   }
   try {
     AtmosModel::En(0, -1.0); // require (n>=0 & x>0) or (n>1 & x>=0)
   }
-  catch(IException e) {
+  catch(IException &e) {
     e.print();
   }
 
diff --git a/isis/src/base/objs/Blobber/Blobber.cpp b/isis/src/base/objs/Blobber/Blobber.cpp
index fc9b7e208354ee025eba4152110ac0cc6a412d87..21f5f2cb8af5d9602e52b5d275b3587aa19c31bd 100644
--- a/isis/src/base/objs/Blobber/Blobber.cpp
+++ b/isis/src/base/objs/Blobber/Blobber.cpp
@@ -241,4 +241,18 @@ namespace Isis {
 
   }
 
+
+  double Blobber::int2ToDouble(unsigned int value) const {
+    if (value == NULLUI4) return NULL8;
+    else if (value == LOW_REPR_SATUI4) return LOW_REPR_SAT8;
+    else if (value == LOW_INSTR_SATUI4) return LOW_INSTR_SAT8;
+    else if (value == HIGH_INSTR_SATUI4) return HIGH_INSTR_SAT8;
+    else if (value == HIGH_REPR_SATUI4) return HIGH_REPR_SAT8;
+    else return value;
+
+  }
+
+
+
+
 }  //  end namespace Isis
diff --git a/isis/src/base/objs/Blobber/Blobber.h b/isis/src/base/objs/Blobber/Blobber.h
index abf1ddbb00cd5a750a9007722574eb0d1f75812f..12fa24ba49fb6611450d13af734ffb48bfb55a37 100644
--- a/isis/src/base/objs/Blobber/Blobber.h
+++ b/isis/src/base/objs/Blobber/Blobber.h
@@ -108,6 +108,8 @@ namespace Isis {
    *                           coding standards. Added padding to control
    *                           statements. References #1169.
    *   @history 2017-08-30 Summer Stapleton - Updated documentation. References #4807.
+   *   @history 2018-07-20 Tyler Wilson - Overloaded the int2Double function so it can handle
+   *                       special pixel types for 4-byte unsigned integers.  References #971.
    */
   class Blobber {
     public:
@@ -262,6 +264,7 @@ namespace Isis {
 //  Low/level I/O and conversion methods
       void loadDouble(Table &tbl);
       void loadInteger(Table &tbl);
+      double int2ToDouble(unsigned int value) const;
       double int2ToDouble(int value) const;
   };
 };
diff --git a/isis/src/base/objs/BulletShapeModel/BulletShapeModel.truth b/isis/src/base/objs/BulletShapeModel/BulletShapeModel.truth
index aa9146666775202fc29be2298aadeded77d7aec9..2d150d5c21be40226113601eecee392aa034e00d 100644
--- a/isis/src/base/objs/BulletShapeModel/BulletShapeModel.truth
+++ b/isis/src/base/objs/BulletShapeModel/BulletShapeModel.truth
@@ -1,6 +1,4 @@
 Unit test for BulletShapeModel
-  MaxTriangles:  134217728
-  MaxBodyParts:  16
 
 
 ----====        Construct default shape model        ====----
diff --git a/isis/src/base/objs/BulletShapeModel/unitTest.cpp b/isis/src/base/objs/BulletShapeModel/unitTest.cpp
index fd59c917e513438b729a9725b2f6e7a3f97310d5..16f5a15eccbfb805b3973355a99ca98050ccdd26 100644
--- a/isis/src/base/objs/BulletShapeModel/unitTest.cpp
+++ b/isis/src/base/objs/BulletShapeModel/unitTest.cpp
@@ -51,11 +51,14 @@ void testGroundPointToCamera(Latitude &lat,
                              std::vector<double> &observer,
                              BulletShapeModel &bulletModel);
 
-/** 
+/**
  * Unit test for Bullet Physics Ray Tracing library
- *  
+ *
  * @internal
  *   @history 2017-03-19 Kris Becker
+ *   @history 2018-08-07 Adam Goins - Removed qDebug() output of maxnumtriangles and maxnumparts
+ *                           because they are values grabbed from Bullet so we don't need to be
+ *                           testing them.
  *
  */
 int main(int argc, char *argv[]) {
@@ -66,8 +69,6 @@ int main(int argc, char *argv[]) {
     QString itokawaDskFile("$base/testData/hay_a_amica_5_itokawashape_v1_0_64q.bds");
 
     qDebug() << "Unit test for BulletShapeModel";
-    qDebug() << "  MaxTriangles: " << bt_MaxTriangles();
-    qDebug() << "  MaxBodyParts: " << bt_MaxBodyParts();
     qDebug() << "";
     qDebug() << "";
 
@@ -93,7 +94,7 @@ int main(int argc, char *argv[]) {
     itokawaModel.setTolerance(0.001);
     outputModelStatus(itokawaModel);
     qDebug() << "";
-    
+
     qDebug() << "----====     Test camera to ground intersections     ====----";
     qDebug() << "";
     qDebug() << "";
@@ -188,19 +189,19 @@ int main(int argc, char *argv[]) {
     testLon.setDegrees(328.573);
     testGroundPointToCamera(testLat, testLon, observer, itokawaModel);
     qDebug() << "";
-    
+
 
     testLat.setDegrees(-26.1383);
     testLon.setDegrees(356.964);
     testGroundPointToCamera(testLat, testLon, observer, itokawaModel);
     qDebug() << "";
-    
+
 
     testLat.setDegrees(12.8509);
     testLon.setDegrees(291.106);
     testGroundPointToCamera(testLat, testLon, observer, itokawaModel);
     qDebug() << "";
-    
+
 
     testLat.setDegrees(-18.6357);
     testLon.setDegrees(60);
diff --git a/isis/src/base/objs/CSVReader/CSVReader.cpp b/isis/src/base/objs/CSVReader/CSVReader.cpp
index b9fb0973fdeffe088a1a8ab93f2aa91818027243..89905723304f3ac3a613c057a92c5ee4724c3cea 100644
--- a/isis/src/base/objs/CSVReader/CSVReader.cpp
+++ b/isis/src/base/objs/CSVReader/CSVReader.cpp
@@ -156,7 +156,7 @@ namespace Isis {
   void CSVReader::read(const QString &csvfile) {
     ifstream ifile(csvfile.toLatin1().data(), ios::in);
     if(!ifile) {
-      QString mess = "Unable to open file " + csvfile;
+      QString mess = "Unable to open file [" + csvfile + "]";
       throw IException(IException::User, mess, _FILEINFO_);
     }
 
@@ -430,7 +430,7 @@ namespace Isis {
 
     if(!ifile.eof()) {
       ostringstream mess;
-      mess << "Error reading line " << (nlines + 1) << ends;
+      mess << "Error reading line [" << (nlines + 1) << "]" << ends;
       throw IException(IException::User, mess.str(), _FILEINFO_);
     }
 
diff --git a/isis/src/base/objs/CSVReader/CSVReader.h b/isis/src/base/objs/CSVReader/CSVReader.h
index a0792730ef4551e58205fbd4c161d311f070c6c3..592d3ca986ed322f1d089ce37cfe17a5e0c10afd 100644
--- a/isis/src/base/objs/CSVReader/CSVReader.h
+++ b/isis/src/base/objs/CSVReader/CSVReader.h
@@ -77,6 +77,9 @@ namespace Isis {
    *                           QString/StringTools merge
    *   @history 2008-06-18 Christopher Austin - Fixed documentation
    *   @history 2017-09-22 Cole Neubauer - Fixed documentation. References #4807
+   *   @history 2018-10-18 Kaitlyn Lee - Added "[]" around file names in exception 
+   *                           messages. References #5520.
+
    */
   template <typename TokenStore = QString>
   class CSVParser {
diff --git a/isis/src/base/objs/Calculator/Calculator.cpp b/isis/src/base/objs/Calculator/Calculator.cpp
index 77a1f153dcf2693256ca40f127833c3df8593854..569203a5b7e6878b2944ddb6ba7eaa1f8b9cf34c 100644
--- a/isis/src/base/objs/Calculator/Calculator.cpp
+++ b/isis/src/base/objs/Calculator/Calculator.cpp
@@ -22,6 +22,7 @@
 
 #include <cmath>
 
+#include <QRegExp>
 #include <QStack>
 #include <QVector>
 
@@ -51,7 +52,7 @@ namespace Isis {
 
   //! Destructor
   Calculator::~Calculator() {
-    if(p_valStack) {
+    if (p_valStack) {
       delete p_valStack;
       p_valStack = NULL;
     }
@@ -454,7 +455,7 @@ namespace Isis {
    */
   void Calculator::LeftShift() {
     QVector<double> y = Pop();
-    if(y.size() != 1) {
+    if (y.size() != 1) {
       IString msg = "When trying to do a left shift calculation, a non-scalar "
                     "shift value was encountered. Shifting requires scalars.";
       throw IException(IException::Unknown, msg, _FILEINFO_);
@@ -462,7 +463,7 @@ namespace Isis {
     else {
       QVector<double> x = Pop();
 
-      if((int)y[0] > (int)x.size()) {
+      if ((int)y[0] > (int)x.size()) {
         IString msg = "When trying to do a left shift calculation, a shift "
                       "value greater than the data size was encountered. "
                       "Shifting by this value would erase all of the data.";
@@ -473,8 +474,8 @@ namespace Isis {
         int shift = (int)y[0];
         result.resize(x.size());
 
-        for(int i = 0; i < result.size(); i++) {
-          if(i + shift < x.size() && i + shift >= 0)
+        for (int i = 0; i < result.size(); i++) {
+          if (i + shift < x.size() && i + shift >= 0)
             result[i] = x[i+shift];
           else
             result[i] = sqrt(-1.0); // create a NaN
@@ -493,7 +494,7 @@ namespace Isis {
    */
   void Calculator::RightShift() {
     QVector<double> y = Pop();
-    if(y.size() != 1) {
+    if (y.size() != 1) {
       IString msg = "When trying to do a right shift calculation, a non-scalar "
                     "shift value was encountered. Shifting requires scalars.";
       throw IException(IException::Unknown, msg, _FILEINFO_);
@@ -501,7 +502,7 @@ namespace Isis {
     else {
       QVector<double> x = Pop();
 
-      if((int)y[0] > (int)x.size()) {
+      if ((int)y[0] > (int)x.size()) {
         IString msg = "When trying to do a right shift calculation, a shift "
                       "value greater than the data size was encountered. "
                       "Shifting by this value would erase all of the data.";
@@ -512,8 +513,8 @@ namespace Isis {
         int shift = (int)y[0];
         result.resize(x.size());
 
-        for(int i = 0; i < (int)result.size(); i++) {
-          if(i - shift < (int)x.size() && i - shift >= 0) {
+        for (int i = 0; i < (int)result.size(); i++) {
+          if (i - shift < (int)x.size() && i - shift >= 0) {
             result[i] = x[i-shift];
           }
           else {
@@ -533,8 +534,8 @@ namespace Isis {
     QVector<double> result = Pop();
 
     double minVal = result[0];
-    for(int i = 0; i < result.size(); i++) {
-      if(!IsSpecial(result[i])) {
+    for (int i = 0; i < result.size(); i++) {
+      if (!IsSpecial(result[i])) {
         minVal = min(minVal, result[i]);
       }
     }
@@ -552,8 +553,8 @@ namespace Isis {
     QVector<double> result = Pop();
 
     double maxVal = result[0];
-    for(int i = 0; i < result.size(); i++) {
-      if(!IsSpecial(result[i])) {
+    for (int i = 0; i < result.size(); i++) {
+      if (!IsSpecial(result[i])) {
         maxVal = max(maxVal, result[i]);
       }
     }
@@ -919,26 +920,26 @@ namespace Isis {
   void Calculator::Push(Buffer &buff) {
     QVector<double> b(buff.size());
 
-    for(int i = 0; i < buff.size(); i++) {
+    for (int i = 0; i < buff.size(); i++) {
       // Test for special pixels and map them to valid values
-      if(IsSpecial(buff[i])) {
-        if(Isis::IsNullPixel(buff[i])) {
+      if (IsSpecial(buff[i])) {
+        if (Isis::IsNullPixel(buff[i])) {
           //b[i] = NAN;
           b[i] = sqrt(-1.0);
         }
-        else if(Isis::IsHrsPixel(buff[i])) {
+        else if (Isis::IsHrsPixel(buff[i])) {
           //b[i] = INFINITY;
           b[i] = DBL_MAX * 2;
         }
-        else if(Isis::IsHisPixel(buff[i])) {
+        else if (Isis::IsHisPixel(buff[i])) {
           //b[i] = INFINITY;
           b[i] = DBL_MAX * 2;
         }
-        else if(Isis::IsLrsPixel(buff[i])) {
+        else if (Isis::IsLrsPixel(buff[i])) {
           //b[i] = -INFINITY;
           b[i] = -DBL_MAX * 2;
         }
-        else if(Isis::IsLisPixel(buff[i])) {
+        else if (Isis::IsLisPixel(buff[i])) {
           //b[i] = -INFINITY;
           b[i] = -DBL_MAX * 2;
         }
@@ -963,7 +964,7 @@ namespace Isis {
   QVector<double> Calculator::Pop(bool keepSpecials) {
     QVector<double> top;
 
-    if(p_valStack->empty()) {
+    if (p_valStack->empty()) {
       IString msg = "Math calculator stack is empty, cannot perform any "
                     "more operations.";
       throw IException(IException::Unknown, msg, _FILEINFO_);
@@ -971,17 +972,17 @@ namespace Isis {
 
     top = p_valStack->top();
 
-    if(keepSpecials) {
-      for(int i = 0; i < (int)top.size(); i++) {
-        if(std::isnan(top[i])) {
+    if (keepSpecials) {
+      for (int i = 0; i < (int)top.size(); i++) {
+        if (std::isnan(top[i])) {
           top[i] = Isis::Null;
         }
         // Test for +INFINITY
-        else if(top[i] > DBL_MAX) {
+        else if (top[i] > DBL_MAX) {
           top[i] = Isis::Hrs;
         }
         // Test for -INFINITY)
-        else if(top[i] < -DBL_MAX) {
+        else if (top[i] < -DBL_MAX) {
           top[i] = Isis::Lrs;
         }
         else {
@@ -1001,14 +1002,21 @@ namespace Isis {
    * Print the vector at the top of the stack
    */
   void Calculator::PrintTop() {
-    if(p_valStack->empty()) return;
+    if (p_valStack->empty()) return;
 
-    std::cout << "[ ";
+    QString temp;
+    temp += "[ ";
     QVector<double> top = p_valStack->top();
-    for(int i = 0; i < (int)top.size(); i++) {
-      std::cout << top[i] << " ";
+    for (int i = 0; i < (int)top.size(); i++) {
+      temp += QString::number(top[i]);
+      temp += " ";
     }
-    std::cout << "]" << std::endl;
+    temp += "]";
+    // On some operating systems, -nan was being outputted. 
+    // Because this method is only used as a cout in our tests, we do not 
+    // care about the difference between nan and -nan; they are the same in this case.
+    temp.replace(QRegExp("-nan"), "nan");
+    std::cout<<temp<<std::endl;
   }
 
 
@@ -1026,7 +1034,7 @@ namespace Isis {
    * Clear out the stack
    */
   void Calculator::Clear() {
-    while(!p_valStack->empty()) {
+    while (!p_valStack->empty()) {
       p_valStack->pop();
     }
   }
@@ -1047,7 +1055,7 @@ namespace Isis {
                                     double operation(double)) {
     results.resize(arg1End - arg1Start);
 
-    for(int pos = 0; pos < results.size(); pos++) {
+    for (int pos = 0; pos < results.size(); pos++) {
       results[pos] = operation(*arg1Start);
 
       arg1Start++;
@@ -1076,7 +1084,7 @@ namespace Isis {
                                     QVector<double>::iterator arg2Start,
                                     QVector<double>::iterator arg2End,
                                     double operation(double, double)) {
-    if(arg1End - arg1Start != 1 && arg2End - arg2Start != 1 &&
+    if (arg1End - arg1Start != 1 && arg2End - arg2Start != 1 &&
         arg1End - arg1Start != arg2End - arg2Start) {
       IString msg = "The stack based calculator cannot operate on vectors "
                     "of differing sizes.";
@@ -1086,11 +1094,11 @@ namespace Isis {
     int iSize = max(arg1End - arg1Start, arg2End - arg2Start);
     results.resize(iSize);
 
-    for(int pos = 0; pos < results.size(); pos++) {
+    for (int pos = 0; pos < results.size(); pos++) {
       results[pos] = operation(*arg1Start, *arg2Start);
 
-      if(arg1Start + 1 != arg1End) arg1Start++;
-      if(arg2Start + 1 != arg2End) arg2Start++;
+      if (arg1Start + 1 != arg1End) arg1Start++;
+      if (arg2Start + 1 != arg2End) arg2Start++;
     }
   }
 } // End of namespace Isis
diff --git a/isis/src/base/objs/Calculator/Calculator.h b/isis/src/base/objs/Calculator/Calculator.h
index e8f8cadcc97b1e365f150c42998258e0b1a5961d..9f2dc9be89db119743bb1908bcf79b122930acab 100644
--- a/isis/src/base/objs/Calculator/Calculator.h
+++ b/isis/src/base/objs/Calculator/Calculator.h
@@ -46,25 +46,26 @@ namespace Isis {
    *
    * @internal
    *  @history 2007-06-11 Jeff Anderson - Fixed bug in
-   *           Push(Buffer) method.  NAN was not computed
-   *           properly.
+   *                          Push(Buffer) method.  NAN was not computed
+   *                          properly.
    *  @history 2007-08-21 Steven Lambright - Moved the infix to postfix
-   *           conversion into its own class.
+   *                          conversion into its own class.
    *  @history 2008-01-28 Steven Lambright - Added more support for the
-   *           power operator
+   *                          power operator
    *  @history 2008-03-28 Steven Lambright - Condensed math methods to
-   *           just call PerformOperation(...). Converted valarray's to vectors
-   *           (in order to use iterators)
+   *                          just call PerformOperation(...). Converted 
+   *                          valarray's to vectors (in order to use iterators).
    *  @history 2008-06-18 Christopher Austin - Added as well as fixed
-   *           documentation
+   *                          documentation
    *  @history 2010-02-23 Steven Lambright - Added Minimum2, Maximum2 and all
-   *           min/max operations now ignore special pixels.
+   *                          min/max operations now ignore special pixels.
    *  @history 2010-04-08 Steven Lambright - Made min, max have proper
-   *           implementations and vectors are now QVectors.
+   *                          implementations and vectors are now QVectors.
    *  @history 2017-08-30 Summer Stapleton - Updated documentation. References #4807.
    *  @history 2017-08-30 Tyler Wilson and Ian Humphrey - provided std:: namespace for isnan
    *                          to fix ambiguity error when using c++11. References #4809.
-   *
+   *  @history 2018-09-27 Kaitlyn Lee - Fixed the cout in PrintTop() so that -nan is printed
+   *                          as nan. Updated code up to standards. References #5520.
    */
   class Calculator {
     public:
diff --git a/isis/src/base/objs/Calculator/Calculator_Linux_x86_64_CentOS7.truth b/isis/src/base/objs/Calculator/Calculator_Linux_x86_64_CentOS7.truth
index 2471f08a64038e8facd357023c9ea2935222c1e3..6ec806271cb47b2c752592c001e1d237635830d7 100644
--- a/isis/src/base/objs/Calculator/Calculator_Linux_x86_64_CentOS7.truth
+++ b/isis/src/base/objs/Calculator/Calculator_Linux_x86_64_CentOS7.truth
@@ -22,8 +22,8 @@ Square Root (sqrt[v1]): [ 1 1.41421 1.73205 ]
 Absolute value (-v1): [ 1 2 3 ]
 Log (log[v1]): [ 0 0.693147 1.09861 ]
 Log10 (log10[v1]): [ 0 0.30103 0.477121 ]
-LeftShift (v1<<scalar): [ 3 -nan -nan ]
-RightShift (v1>>scalar): [ -nan -nan 1 ]
+LeftShift (v1<<scalar): [ 3 nan nan ]
+RightShift (v1>>scalar): [ nan nan 1 ]
 Min (v1): [ 1 ]
 Max (v1): [ 3 ]
 GreaterThan (v1>v4): [ 0 0 1 ]
@@ -47,7 +47,7 @@ TangentH (v1): [ 0.761594 0.964028 0.995055 ]
 Modulus (v1%v4): [ 1 0 1 ]
 Bitwise And (v1,v4): [ 0 2 2 ]
 Bitwise Or (v1,v4): [ 3 2 3 ]
-Square Root(-1): [ -nan ]
+Square Root(-1): [ nan ]
 Log(of 0): [ -inf ]
 -------------------------------------------------------
 **ERROR** When trying to do a left shift calculation, a shift value greater than the data size was encountered. Shifting by this value would erase all of the data.
diff --git a/isis/src/base/objs/Camera/Camera.cpp b/isis/src/base/objs/Camera/Camera.cpp
index 22f021881eca1fef570b8aedf4701b8fc649f255..cb06ddc03f9369f27849f2c7cb29223b12d65f3f 100644
--- a/isis/src/base/objs/Camera/Camera.cpp
+++ b/isis/src/base/objs/Camera/Camera.cpp
@@ -68,6 +68,10 @@ namespace Isis {
    * @param cube The Pvl label from the cube is used to create the Camera object.
    */
   Camera::Camera(Cube &cube) : Sensor(cube) {
+    
+    m_instrumentId = cube.label()->findGroup("Instrument", 
+                        PvlObject::FindOptions::Traverse).findKeyword("InstrumentId")[0];
+    
     m_instrumentNameLong = "Unknown";
     m_instrumentNameShort = "Unknown";
     m_spacecraftNameLong = "Unknown";
@@ -2874,6 +2878,16 @@ namespace Isis {
   CameraSkyMap *Camera::SkyMap() {
     return p_skyMap;
   }
+  
+  
+  /**
+   * This method returns the InstrumentId as it appears in the cube.
+   *
+   * @return QString Returns m_instrumentId
+   */
+  QString Camera::instrumentId() {
+    return m_instrumentId;
+  }
 
 
   /**
diff --git a/isis/src/base/objs/Camera/Camera.h b/isis/src/base/objs/Camera/Camera.h
index b955731bb2aac6e88a6725ad70e61ad779cd9128..3b571c2b6ea91c36cc5794b264b36728e8159be8 100644
--- a/isis/src/base/objs/Camera/Camera.h
+++ b/isis/src/base/objs/Camera/Camera.h
@@ -241,6 +241,9 @@ namespace Isis {
    *   @history 2017-08-30 Summer Stapleton - Updated documentation. References #4807.
    *   @history 2017-01-11 Christopher Combs - Added bool deleteExisting to SetDistortionMap to 
    *                           prevent a segfault when the distortion map is incomplete. Fixes $5163.
+   *   @history 2018-07-12 Summer Stapleton - Added m_instrumentId and instrumentId() in order to 
+   *                           collect the InstrumentId from the original cube label for 
+   *                           comparisons related to image imports in ipce. References #5460.
    */
 
   class Camera : public Sensor {
@@ -328,6 +331,8 @@ namespace Isis {
       CameraDetectorMap *DetectorMap();
       CameraGroundMap *GroundMap();
       CameraSkyMap *SkyMap();
+      
+      QString instrumentId();
 
       QString instrumentNameLong() const;
       QString instrumentNameShort() const;
@@ -496,6 +501,8 @@ namespace Isis {
       // slant range changes.
       friend class RadarGroundMap;      //!< A friend class to calculate focal length
       friend class RadarSlantRangeMap;  //!< A friend class to calculate focal length
+      
+      QString m_instrumentId;        //!< The InstrumentId as it appears on the cube.
 
       QString m_instrumentNameLong;  //!< Full instrument name
       QString m_instrumentNameShort; //!< Shortened instrument name
diff --git a/isis/src/base/objs/Camera/Camera.truth b/isis/src/base/objs/Camera/Camera.truth
index 0e3fd12cf1e14d5fcd769cc487041ba2cf64dbb7..866518e2f7516bc360fc917d0be29c6465a34419 100644
--- a/isis/src/base/objs/Camera/Camera.truth
+++ b/isis/src/base/objs/Camera/Camera.truth
@@ -289,33 +289,33 @@ Pixel Ifov:
 -0.0115 , 0.0115
 Basic Mapping: 
 Group = Mapping
-  TargetName         = Moon
+  TargetName         = MOON
   EquatorialRadius   = 1737400.0 <meters>
   PolarRadius        = 1737400.0 <meters>
   LatitudeType       = Planetocentric
   LongitudeDirection = PositiveEast
   LongitudeDomain    = 360
-  MinimumLatitude    = 87.8
+  MinimumLatitude    = 87.83
   MaximumLatitude    = 90.0
   MinimumLongitude   = 0.0
   MaximumLongitude   = 360.0
-  PixelResolution    = 193.58
+  PixelResolution    = 194.06
   ProjectionName     = Sinusoidal
 End_Group
 End
 
 180 Domain Range: 
-Latitude Range: 87.8 to 90
+Latitude Range: 87.83 to 90
 Longitude Range: -180 to 180
 
 Test Forward/Reverse Camera Calculations At Center Of Image...
 Sample = 192
 Line = 144
 SetImage (sample, line): Yes
-Latitude = 89.18
-Longitude = 13.54
+Latitude = 89.23
+Longitude = 12.57
 Radius = 1.736e+06
-Point = 24.26 5.844 1736
+Point = 22.82 5.089 1736
 SetUniversalGround (cam2->UniversalLatitude(), cam2->UniversalLongitude()): 1
 Sample = 192
 Line = 144
diff --git a/isis/src/base/objs/CameraFactory/CameraFactory.cpp b/isis/src/base/objs/CameraFactory/CameraFactory.cpp
index 1c91f85c98a7fbdeb33376f707c1ec116aa87967..a40bf25881e27ace1f31986f3f2bac9618d20f01 100644
--- a/isis/src/base/objs/CameraFactory/CameraFactory.cpp
+++ b/isis/src/base/objs/CameraFactory/CameraFactory.cpp
@@ -34,7 +34,7 @@ namespace Isis {
 
   /**
    * Creates a Camera object using Pvl Specifications
-   * 
+   *
    * @param cube The original cube with the current version camera model
    *
    * @return Camera* The Camera object created
@@ -131,9 +131,9 @@ namespace Isis {
 
   /**
    * Looks up the current camera model version in the pvl labels.
-   * 
+   *
    * @param lab The pvl labels
-   * 
+   *
    * @returns The current camera model version
    */
   int CameraFactory::CameraVersion(Pvl &lab) {
diff --git a/isis/src/base/objs/CameraFactory/unitTest.cpp b/isis/src/base/objs/CameraFactory/unitTest.cpp
index 74da442484084b69f3a7ddff953008c393f76eb5..694e7cf658010b20e4f5079b8161e27766a5d644 100644
--- a/isis/src/base/objs/CameraFactory/unitTest.cpp
+++ b/isis/src/base/objs/CameraFactory/unitTest.cpp
@@ -14,13 +14,9 @@ void doit(Cube &cube);
 int main(int argc, char *argv[]) {
   Preference::Preferences(true);
 
-  // Get system's Camera.plugin file and add two new cameras of the same name to the bottom of 
+  // Get system's Camera.plugin file and add two new cameras of the same name to the bottom of
   // Camera.plugin with different version numbers
   Pvl pluginFile;
-  FileName systemFile("$ISISROOT/lib/Camera.plugin");
-  if (systemFile.fileExists()) {
-    pluginFile.read(systemFile.expanded());
-  }
   PvlGroup oldCamera = PvlGroup("BOGUS/BOGUS");
   PvlGroup newCamera = PvlGroup("BOGUS/BOGUS");
   oldCamera += PvlKeyword("Version", "1");
@@ -28,7 +24,7 @@ int main(int argc, char *argv[]) {
   pluginFile.addGroup(oldCamera);
   pluginFile.addGroup(newCamera);
   pluginFile.write("Camera.plugin");
-  
+
   cerr << "Unit test for CameraFactory" << endl;
   cerr << "Testing missing Instrument Group ..." << endl;
   Cube dummyCube("$base/testData/isisTruth.cub", "r");
@@ -89,7 +85,3 @@ void doit(Cube &cube) {
 
   cerr << endl;
 }
-
-
-
-
diff --git a/isis/src/base/objs/CameraPointInfo/CameraPointInfo.truth b/isis/src/base/objs/CameraPointInfo/CameraPointInfo.truth
index 2ff1dc289ef774e441d171c147a45efa6d900cf6..09a4c92a81b38fda2fd030801c61cb683e2b1b87 100644
--- a/isis/src/base/objs/CameraPointInfo/CameraPointInfo.truth
+++ b/isis/src/base/objs/CameraPointInfo/CameraPointInfo.truth
@@ -1,125 +1,126 @@
 Group = GroundPoint
   Sample                     = 1.0
   Line                       = 1.0
-  PixelValue                 = 0.014452569
-  RightAscension             = 261.12240102162 <DEGREE>
-  Declination                = 65.057158287883 <DEGREE>
-  PlanetocentricLatitude     = -84.741291512608 <DEGREE>
-  PlanetographicLatitude     = -84.741291512608 <DEGREE>
-  PositiveEast360Longitude   = 12.469820542285 <DEGREE>
-  PositiveEast180Longitude   = 12.469820542285 <DEGREE>
-  PositiveWest360Longitude   = 347.53017945771 <DEGREE>
-  PositiveWest180Longitude   = -12.469820542285 <DEGREE>
-  BodyFixedCoordinate        = (155.48143215269, 34.383491686879,
-                                -1730.0872983047) <km>
-  LocalRadius                = 1737400.0 <meters>
-  SampleResolution           = 187.48511798825 <meters/pixel>
-  LineResolution             = 187.48511798825 <meters/pixel>
-  ObliqueDetectorResolution  = 187.49354707291 <meters>
-  ObliquePixelResolution     = 187.49354707291 <meters/pix>
-  ObliqueLineResolution      = 187.49354707291 <meters>
-  ObliqueSampleResolution    = 187.49354707291 <meters>
+  PixelValue                 = 21
+  RightAscension             = 254.44877411829 <DEGREE>
+  Declination                = 67.288137235407 <DEGREE>
+  PlanetocentricLatitude     = -85.539935681585 <DEGREE>
+  PlanetographicLatitude     = -85.539935681585 <DEGREE>
+  PositiveEast360Longitude   = 27.089555271673 <DEGREE>
+  PositiveEast180Longitude   = 27.089555271673 <DEGREE>
+  PositiveWest360Longitude   = 332.91044472833 <DEGREE>
+  PositiveWest180Longitude   = -27.089555271672 <DEGREE>
+  BodyFixedCoordinate        = (120.6493939079, 61.711663528734,
+                                -1737.3762050934) <km>
+  LocalRadius                = 1742653.345818 <meters>
+  SampleResolution           = 186.88473742666 <meters/pixel>
+  LineResolution             = 186.88473742666 <meters/pixel>
+  ObliqueDetectorResolution  = 187.44583818806 <meters>
+  ObliquePixelResolution     = 187.44583818806 <meters/pix>
+  ObliqueLineResolution      = 187.44583818806 <meters>
+  ObliqueSampleResolution    = 187.44583818806 <meters>
 
   # Spacecraft Information
-  SpacecraftPosition         = (216.76438021037, 54.256829538645,
-                                -2462.1179579968) <km>
-  SpacecraftAzimuth          = 211.304 <DEGREE>
-  SlantDistance              = 734.86014724525 <km>
-  TargetCenterDistance       = 2472.2369302253 <km>
-  SubSpacecraftLatitude      = -84.814280390523 <DEGREE>
-  SubSpacecraftLongitude     = 14.052595361351 <DEGREE>
-  SpacecraftAltitude         = 734.83693022532 <km>
-  OffNadirAngle              = 0.382 <DEGREE>
-  SubSpacecraftGroundAzimuth = 117.656 <DEGREE>
+  SpacecraftPosition         = (216.77599432924, 54.260221515166,
+                                -2462.1104393388) <km>
+  SpacecraftAzimuth          = 38.331 <DEGREE>
+  SlantDistance              = 731.11938668312 <km>
+  TargetCenterDistance       = 2472.2305351357 <km>
+  SubSpacecraftLatitude      = -84.813985589411 <DEGREE>
+  SubSpacecraftLongitude     = 14.052715974499 <DEGREE>
+  SpacecraftAltitude         = 735.29826910549 <km>
+  OffNadirAngle              = 3.124 <DEGREE>
+  SubSpacecraftGroundAzimuth = 296.906 <DEGREE>
 
   # Sun Information
   SunPosition                = (142092302.24738, 46513072.418956,
                                 3175615.049146) <km>
-  SubSolarAzimuth            = 91.898 <DEGREE>
-  SolarDistance              = 0.99964723782732 <AU>
+  SubSolarAzimuth            = 92.425 <DEGREE>
+  SolarDistance              = 0.99964740327808 <AU>
   SubSolarLatitude           = 1.2167758823866 <DEGREE>
   SubSolarLongitude          = 18.125552305876 <DEGREE>
-  SubSolarGroundAzimuth      = 5.668 <DEGREE>
+  SubSolarGroundAzimuth      = 351.024 <DEGREE>
 
   # Illumination and Other
-  Phase                      = 86.187914936426 <DEGREE>
-  Incidence                  = 85.984352390204 <DEGREE>
-  Emission                   = 0.543 <DEGREE>
-  NorthAzimuth               = 87.646 <DEGREE>
+  Phase                      = 84.220811487257 <DEGREE>
+  Incidence                  = 86.811870068915 <DEGREE>
+  Emission                   = 4.434 <DEGREE>
+  NorthAzimuth               = 101.407 <DEGREE>
 
   # Time
   EphemerisTime              = -182103311.79772 <seconds>
   UTC                        = 1994-03-25T19:43:48.0166464
-  LocalSolarTime             = 11.622951215761 <hour>
+  LocalSolarTime             = 12.59760019772 <hour>
   SolarLongitude             = 129.01790468942 <DEGREE>
 
   # Look Direction Unit Vectors in Body Fixed, J2000, and Camera Coordinate Systems.
-  LookDirectionBodyFixed     = (-0.083394028492917, -0.027043700663677,
-                                0.99614962443708) <DEGREE>
-  LookDirectionJ2000         = (-0.065080625277796, -0.41666190298971,
-                                0.90672894009756) <DEGREE>
-  LookDirectionCamera        = (0.0, 0.0, 1.0) <DEGREE>
+  LookDirectionBodyFixed     = (-0.13147866432244, 0.010191826600814,
+                                0.99126660767854) <DEGREE>
+  LookDirectionJ2000         = (-0.10351254426163, -0.37196246815074,
+                                0.92245817003683) <DEGREE>
+  LookDirectionCamera        = (-0.0488021669, -0.0365697261,
+                                0.9981387697) <DEGREE>
 End_Group
 Group = GroundPoint
-  Sample                     = 0.90348451909767
-  Line                       = 1.1397670004594
-  PixelValue                 = 0.014452569
-  RightAscension             = 262.28734450187 <DEGREE>
-  Declination                = 65.692832609474 <DEGREE>
+  Sample                     = 155.47884244269
+  Line                       = 184.71817081965
+  PixelValue                 = 29
+  RightAscension             = 262.28855950942 <DEGREE>
+  Declination                = 65.693319737566 <DEGREE>
   PlanetocentricLatitude     = -84.5 <DEGREE>
   PlanetographicLatitude     = -84.5 <DEGREE>
   PositiveEast360Longitude   = 15.0 <DEGREE>
   PositiveEast180Longitude   = 15.0 <DEGREE>
   PositiveWest360Longitude   = 345.0 <DEGREE>
   PositiveWest180Longitude   = -15.0 <DEGREE>
-  BodyFixedCoordinate        = (160.84829688893, 43.09917125531,
-                                -1729.4013550431) <km>
-  LocalRadius                = 1737400.0 <meters>
-  SampleResolution           = 187.50339379912 <meters/pixel>
-  LineResolution             = 187.50339379912 <meters/pixel>
-  ObliqueDetectorResolution  = 187.53783505388 <meters>
-  ObliquePixelResolution     = 187.53783505388 <meters/pix>
-  ObliqueLineResolution      = 187.53783505388 <meters>
-  ObliqueSampleResolution    = 187.53783505388 <meters>
+  BodyFixedCoordinate        = (160.94807486378, 43.125906683093,
+                                -1730.4741433054) <km>
+  LocalRadius                = 1738477.7500095 <meters>
+  SampleResolution           = 187.58212566559 <meters/pixel>
+  LineResolution             = 187.58212566559 <meters/pixel>
+  ObliqueDetectorResolution  = 187.61662252249 <meters>
+  ObliquePixelResolution     = 187.61662252249 <meters/pix>
+  ObliqueLineResolution      = 187.61662252249 <meters>
+  ObliqueSampleResolution    = 187.61662252249 <meters>
 
   # Spacecraft Information
-  SpacecraftPosition         = (216.76438021037, 54.256829538645,
-                                -2462.1179579968) <km>
-  SpacecraftAzimuth          = 281.045 <DEGREE>
-  SlantDistance              = 734.93178063402 <km>
-  TargetCenterDistance       = 2472.2369302253 <km>
-  SubSpacecraftLatitude      = -84.814280390523 <DEGREE>
-  SubSpacecraftLongitude     = 14.052595361351 <DEGREE>
-  SpacecraftAltitude         = 734.83693022532 <km>
-  OffNadirAngle              = 0.772 <DEGREE>
-  SubSpacecraftGroundAzimuth = 195.208 <DEGREE>
+  SpacecraftPosition         = (216.77599432924, 54.260221515166,
+                                -2462.1104393388) <km>
+  SpacecraftAzimuth          = 284.604 <DEGREE>
+  SlantDistance              = 733.84767049682 <km>
+  TargetCenterDistance       = 2472.2305351357 <km>
+  SubSpacecraftLatitude      = -84.813985589411 <DEGREE>
+  SubSpacecraftLongitude     = 14.052715974499 <DEGREE>
+  SpacecraftAltitude         = 735.29826910549 <km>
+  OffNadirAngle              = 0.773 <DEGREE>
+  SubSpacecraftGroundAzimuth = 195.221 <DEGREE>
 
   # Sun Information
   SunPosition                = (142092302.24738, 46513072.418956,
                                 3175615.049146) <km>
-  SubSolarAzimuth            = 91.887 <DEGREE>
-  SolarDistance              = 0.99964718552167 <AU>
+  SubSolarAzimuth            = 92.516 <DEGREE>
+  SolarDistance              = 0.99964718498476 <AU>
   SubSolarLatitude           = 1.2167758823866 <DEGREE>
   SubSolarLongitude          = 18.125552305876 <DEGREE>
   SubSolarGroundAzimuth      = 3.134 <DEGREE>
 
   # Illumination and Other
-  Phase                      = 86.799461484504 <DEGREE>
-  Incidence                  = 85.725629389695 <DEGREE>
-  Emission                   = 1.098 <DEGREE>
-  NorthAzimuth               = 89.531 <DEGREE>
+  Phase                      = 86.800051779927 <DEGREE>
+  Incidence                  = 85.72563003251 <DEGREE>
+  Emission                   = 1.099 <DEGREE>
+  NorthAzimuth               = 89.382 <DEGREE>
 
   # Time
   EphemerisTime              = -182103311.79772 <seconds>
   UTC                        = 1994-03-25T19:43:48.0166464
-  LocalSolarTime             = 11.791629991401 <hour>
+  LocalSolarTime             = 11.791629846611 <hour>
   SolarLongitude             = 129.01790468942 <DEGREE>
 
   # Look Direction Unit Vectors in Body Fixed, J2000, and Camera Coordinate Systems.
-  LookDirectionBodyFixed     = (-0.07608335898211, -0.015181885902405,
-                                0.99698587393526) <DEGREE>
-  LookDirectionJ2000         = (-0.055242605204482, -0.4079045962425,
-                                0.91135179537568) <DEGREE>
-  LookDirectionCamera        = (-0.0094547053, 0.0102687345,
-                                0.9999025761) <DEGREE>
+  LookDirectionBodyFixed     = (-0.076075624316564, -0.015172515119546,
+                                0.99698660681566) <DEGREE>
+  LookDirectionJ2000         = (-0.055232924372436, -0.40789809729026,
+                                0.9113552909224) <DEGREE>
+  LookDirectionCamera        = (-0.0094616465, 0.0102787327,
+                                0.9999024077) <DEGREE>
 End_Group
diff --git a/isis/src/base/objs/CameraStatistics/CameraStatistics.truth b/isis/src/base/objs/CameraStatistics/CameraStatistics.truth
index 3d16a81c1db6fae6d3c6c19aeb35d3e18af1a1a4..dfb9632ece25860e2589a800fd70d845f09b66ef 100644
--- a/isis/src/base/objs/CameraStatistics/CameraStatistics.truth
+++ b/isis/src/base/objs/CameraStatistics/CameraStatistics.truth
@@ -1,6 +1,4 @@
 UnitTest for Camera Statistics
-Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 User Parameters:
   Linc = 1
diff --git a/isis/src/base/objs/Cube/Cube.cpp b/isis/src/base/objs/Cube/Cube.cpp
index 1079e499eed3a1edd4cd8680c830d519e12da281..956970854c86508b458eb633cfa4d12aaf7f55e4 100644
--- a/isis/src/base/objs/Cube/Cube.cpp
+++ b/isis/src/base/objs/Cube/Cube.cpp
@@ -27,6 +27,7 @@
 #include <unistd.h>
 
 #include <QDebug>
+#include <QDir>
 #include <QFile>
 #include <QFileInfo>
 #include <QMutex>
@@ -552,6 +553,7 @@ namespace Isis {
     // Figure out the name of the data file
     try {
       PvlObject &core = m_label->findObject("IsisCube").findObject("Core");
+      // Detached labels
       if (core.hasKeyword("^Core")) {
         FileName temp(core["^Core"][0]);
 
@@ -567,6 +569,7 @@ namespace Isis {
 
         m_dataFile = new QFile(realDataFileName().expanded());
       }
+      // External cube files (ecub), ecub contains all labels and SPICE blobs, history
       else if (core.hasKeyword("^DnFile")) {
         FileName dataFileName(core["^DnFile"][0]);
 
@@ -579,9 +582,10 @@ namespace Isis {
 
         m_attached = true;
         m_storesDnData = false;
-
+        *m_dataFileName = FileName(realDataFileName().expanded());
         m_dataFile = new QFile(realDataFileName().expanded());
       }
+      // Typical cube containing labels, SPICE, history and dn data
       else {
         m_dataFileName = new FileName(*m_labelFileName);
         m_attached = true;
@@ -1841,7 +1845,16 @@ namespace Isis {
     else if (!m_storesDnData) {
       ASSERT(m_dataFileName);
       FileName guess = *m_dataFileName;
-
+      QDir dir(guess.toString());
+
+      // If path is relative and there is a labelFileName, start in directory of the ecub, then
+      // cd to the directory containing the DnFile, since it is relative to the location of the ecub.
+      // We need to turn the relative path into an absolute path.
+      if (dir.isRelative() && m_labelFileName) {
+        QDir dir2(m_labelFileName->originalPath());
+        dir2.cd(guess.path());
+        guess = dir2.absolutePath() + "/" + guess.name();
+      }
       do {
         Pvl guessLabel(guess.expanded());
 
@@ -2080,7 +2093,7 @@ namespace Isis {
 
         FileName temp((*core)["^DnFile"][0]);
         if (!temp.expanded().startsWith("/")) {
-          temp = FileName(FileName(label.fileName()).path() + "/" + temp.original());
+          temp = realDataFileName();
         }
 
         label = Pvl(temp.toString());
diff --git a/isis/src/base/objs/Cube/Cube.h b/isis/src/base/objs/Cube/Cube.h
index 986836137fa26b32747d2b938a22d38289ecad47..7632d4d83e4175d818487a9190453cb00ef6c497 100644
--- a/isis/src/base/objs/Cube/Cube.h
+++ b/isis/src/base/objs/Cube/Cube.h
@@ -157,6 +157,11 @@ namespace Isis {
    *   @history 2017-06-08 Chris Combs - Made "Failed to create" error messages more descriptive.
    *                           Fixes #833.
    *   @history 2017-09-22 Cole Neubauer - Fixed documentation. References #4807
+   *   @history 2018-01-04 Tracie Sucharski - Allow relative paths that are not "." in the DnFile
+   *                           keyword for ecubs. Changes to ::open to set m_dataFileName for ecubs,
+   *                           and changed ::realDataFileName() to return the absolute path if it is
+   *                           relative. Changed ::realDataFileLabel to call realDataFileName to
+   *                           make sure we get absolute path.  Fixes #5276.
    *   @history 2018-01-18 Summer Stapleton - Updated error message in ::create() to address when
    *                           an IsisPreference file cannot be found. Fixes #5145.
    */
diff --git a/isis/src/base/objs/Cube/Cube.truth b/isis/src/base/objs/Cube/Cube.truth
index 5c1c40275726d1bffce9a2f046a6a4dcc3f21967..bdbf573f92c11a9541024cad811cc6559676e9ae 100644
--- a/isis/src/base/objs/Cube/Cube.truth
+++ b/isis/src/base/objs/Cube/Cube.truth
@@ -80,10 +80,6 @@ R/W    = 0
 Lbytes = 65536
 
 Testing histogram method, band 1 ... 
-Computing min/max for histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Average:        14900
 Standard Dev:   8602.66
 Mode:           149.148
@@ -91,10 +87,6 @@ Total Pixels:   30000
 Null Pixels:    0
 
 Testing histogram method, all bands ... 
-Computing min/max for histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Average:        29800
 Standard Dev:   17205.2
 Mode:           149.148
@@ -105,16 +97,12 @@ Null Pixels:    0
 **PROGRAMMER ERROR** Cannot create histogram object for an unopened cube.
 
 Testing statistics method, band 1 ... 
-Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Average:        14900
 Standard Dev:   8602.66
 Total Pixels:   30000
 Null Pixels:    0
 
 Testing statistics method, all bands ... 
-Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Average:        29800
 Standard Dev:   17205.2
 Total Pixels:   60000
@@ -356,31 +344,3 @@ End_Object
 End
 0 0 0 20 20 20 39 39 39 0 20 39 0 20 39 0 20 39 
 **PROGRAMMER ERROR** Cannot write to the cube [isisTruth_external2.ecub] because it is opened read-only.
-
-Test reading an ecub that points to detached lbl
-Object = IsisCube
-  Object = Core
-    ^DnFile = IsisCube_02.lbl
-  End_Object
-End_Object
-
-Object = Label
-  Bytes = 65536
-End_Object
-End
-0 0 0 1 1 1 2 2 2 N N N N N N N N N 
-**ERROR** The cube [isisTruth_external3.ecub] does not support storing DN data because it is using an external file for DNs.
-
-Test copying an ecub that points to detached lbl
-Object = IsisCube
-  Object = Core
-    ^DnFile = isisTruth_external3.ecub
-  End_Object
-End_Object
-
-Object = Label
-  Bytes = 65536
-End_Object
-End
-0 0 0 1 1 1 2 2 2 N N N N N N N N N 
-**ERROR** The cube [isisTruth_external3.copy.ecub] does not support storing DN data because it is using an external file for DNs.
diff --git a/isis/src/base/objs/Cube/CubeIoHandler.cpp b/isis/src/base/objs/Cube/CubeIoHandler.cpp
index 9da80aba9f461cec50a1b38969d6e738921e4982..bc671b478d5a33178e1d01165c7317d7d67ba4c9 100644
--- a/isis/src/base/objs/Cube/CubeIoHandler.cpp
+++ b/isis/src/base/objs/Cube/CubeIoHandler.cpp
@@ -1508,6 +1508,40 @@ namespace Isis {
               ((unsigned short *)buffersRawBuf)[bufferIndex] = raw;
             }
 
+            else if(m_pixelType == UnsignedInteger) {
+
+              unsigned int raw = ((unsigned int *)chunkBuf)[chunkIndex];
+              if(m_byteSwapper)
+                raw = m_byteSwapper->Uint32_t(&raw);
+
+              if(raw >= VALID_MINUI4) {
+                bufferVal = (double) raw * m_multiplier + m_base;
+              }
+              else if (raw > VALID_MAXUI4) {
+                if(raw == HIGH_INSTR_SATUI4)
+                  bufferVal = HIGH_INSTR_SAT8;
+                else if(raw == HIGH_REPR_SATUI4)
+                  bufferVal = HIGH_REPR_SAT8;
+                else
+                  bufferVal = LOW_REPR_SAT8;
+              }
+              else {
+                if(raw == NULLUI4)
+                  bufferVal = NULL8;
+                else if(raw == LOW_INSTR_SATUI4)
+                  bufferVal = LOW_INSTR_SAT8;
+                else if(raw == LOW_REPR_SATUI4)
+                  bufferVal = LOW_REPR_SAT8;
+                else
+                  bufferVal = LOW_REPR_SAT8;
+              }
+
+              ((unsigned int *)buffersRawBuf)[bufferIndex] = raw;
+
+
+
+            }
+
             else if(m_pixelType == UnsignedByte) {
               unsigned char raw = ((unsigned char *)chunkBuf)[chunkIndex];
 
@@ -1626,6 +1660,7 @@ namespace Isis {
               ((float *)chunkBuf)[chunkIndex] =
                   m_byteSwapper ? m_byteSwapper->Float(&raw) : raw;
             }
+
             else if(m_pixelType == SignedWord) {
               short raw;
 
@@ -1670,6 +1705,55 @@ namespace Isis {
               ((short *)chunkBuf)[chunkIndex] =
                   m_byteSwapper ? m_byteSwapper->ShortInt(&raw) : raw;
             }
+
+            else if(m_pixelType == UnsignedInteger) {
+
+              unsigned int raw;
+
+              if(bufferVal >= VALID_MINUI4) {
+                double filePixelValueDbl = (bufferVal - m_base) /
+                    m_multiplier;
+                if(filePixelValueDbl < VALID_MINUI4 - 0.5) {
+                  raw = LOW_REPR_SATUI4;
+                }
+                if(filePixelValueDbl > VALID_MAXUI4) {
+                  raw = HIGH_REPR_SATUI4;
+                }
+                else {
+                  unsigned int filePixelValue = (unsigned int)round(filePixelValueDbl);
+
+                  if(filePixelValue < VALID_MINUI4) {
+                    raw = LOW_REPR_SATUI4;
+                  }
+                  else if(filePixelValue > VALID_MAXUI4) {
+                    raw = HIGH_REPR_SATUI4;
+                  }
+                  else {
+                    raw = filePixelValue;
+                  }
+                }
+              }
+              else {
+                if(bufferVal == NULL8)
+                  raw = NULLUI4;
+                else if(bufferVal == LOW_INSTR_SAT8)
+                  raw = LOW_INSTR_SATUI4;
+                else if(bufferVal == LOW_REPR_SAT8)
+                  raw = LOW_REPR_SATUI4;
+                else if(bufferVal == HIGH_INSTR_SAT8)
+                  raw = HIGH_INSTR_SATUI4;
+                else if(bufferVal == HIGH_REPR_SAT8)
+                  raw = HIGH_REPR_SATUI4;
+                else
+                  raw = LOW_REPR_SATUI4;
+              }
+
+              ((unsigned int *)chunkBuf)[chunkIndex] =
+                  m_byteSwapper ? m_byteSwapper->Uint32_t(&raw) : raw;
+
+            }
+
+
             else if(m_pixelType == UnsignedWord) {
               unsigned short raw;
 
diff --git a/isis/src/base/objs/Cube/CubeIoHandler.h b/isis/src/base/objs/Cube/CubeIoHandler.h
index 7f57272979e7e19fa7af14e4e9f6b0d82155ee6c..42c025c6464fafef53575fc6cc8fb9ca21949f4b 100644
--- a/isis/src/base/objs/Cube/CubeIoHandler.h
+++ b/isis/src/base/objs/Cube/CubeIoHandler.h
@@ -116,6 +116,11 @@ namespace Isis {
    *                           implementation causing warnings in clang. Part of OS X 10.11 porting.
    *                           QPair forward declaration now properly claims it as a struct.
    *   @history 2017-09-22 Cole Neubauer - Fixed documentation. References #4807
+   *   @history 2018-07-20 Tyler Wilson - Added support for unsigned integer special pixel values.
+   *                            in functions writeIntoRaw(...) and writeIntoDouble(...)
+   *                            References #971.
+   *   @history 2018-08-13 Summer Stapleton - Fixed incoming buffer comparison values for 
+   *                            unsigned int type in writeIntoRaw(...). 
    */
   class CubeIoHandler {
     public:
diff --git a/isis/src/base/objs/Cube/unitTest.cpp b/isis/src/base/objs/Cube/unitTest.cpp
index b9e96b67b6e5196a83d23464267f0c487ed3e5d7..2cf7ac0a6dad15668ebe74293c1215612c0c171a 100644
--- a/isis/src/base/objs/Cube/unitTest.cpp
+++ b/isis/src/base/objs/Cube/unitTest.cpp
@@ -886,67 +886,67 @@ int main(int argc, char *argv[]) {
     }
   }
 
-  cerr << endl << "Test reading an ecub that points to detached lbl" << endl;
-  {
-    Cube externalData;
-    externalData.setExternalDnData("IsisCube_02.lbl");
-    externalData.create("isisTruth_external3.ecub");
-    cerr << *externalData.label() << endl;
-
-    Brick readBrick(3, 3, 2, externalData.pixelType());
-    readBrick.SetBasePosition(1, 1, 1);
-    externalData.read(readBrick);
-    for (int index = 0; index < readBrick.size(); index++) {
-      if (readBrick[index] == Null) {
-        cerr << "N ";
-      }
-      else {
-        cerr << readBrick[index] << " ";
-      }
-    }
-    cerr << endl;
-
-    try {
-      externalData.write(readBrick);
-    }
-    catch (IException &e) {
-      e.print();
-    }
-  }
-
-  cerr << endl << "Test copying an ecub that points to detached lbl" << endl;
-  {
-    Cube externalData;
-    externalData.open("isisTruth_external3.ecub");
-    Cube *copiedCube = externalData.copy("isisTruth_external3.copy.ecub",
-                                         CubeAttributeOutput("+External"));
-    cerr << *copiedCube->label() << endl;
-
-    Brick readBrick(3, 3, 2, copiedCube->pixelType());
-    readBrick.SetBasePosition(1, 1, 1);
-    copiedCube->read(readBrick);
-    for (int index = 0; index < readBrick.size(); index++) {
-      if (readBrick[index] == Null) {
-        cerr << "N ";
-      }
-      else {
-        cerr << readBrick[index] << " ";
-      }
-    }
-    cerr << endl;
-
-    try {
-      copiedCube->write(readBrick);
-    }
-    catch (IException &e) {
-      e.print();
-    }
-    // need to deallocate our copied cube
-    copiedCube->close();
-    delete copiedCube;
-    copiedCube = NULL;
-    
-  }
+//cerr << endl << "Test reading an ecub that points to detached lbl" << endl;
+//{
+//  Cube externalData;
+//  externalData.setExternalDnData("IsisCube_02.lbl");
+//  externalData.create("isisTruth_external3.ecub");
+//  cerr << *externalData.label() << endl;
+//
+//  Brick readBrick(3, 3, 2, externalData.pixelType());
+//  readBrick.SetBasePosition(1, 1, 1);
+//  externalData.read(readBrick);
+//  for (int index = 0; index < readBrick.size(); index++) {
+//    if (readBrick[index] == Null) {
+//      cerr << "N ";
+//    }
+//    else {
+//      cerr << readBrick[index] << " ";
+//    }
+//  }
+//  cerr << endl;
+//
+//  try {
+//    externalData.write(readBrick);
+//  }
+//  catch (IException &e) {
+//    e.print();
+//  }
+//}
+//
+//cerr << endl << "Test copying an ecub that points to detached lbl" << endl;
+//{
+//  Cube externalData;
+//  externalData.open("isisTruth_external3.ecub");
+//  Cube *copiedCube = externalData.copy("isisTruth_external3.copy.ecub",
+//                                       CubeAttributeOutput("+External"));
+//  cerr << *copiedCube->label() << endl;
+//
+//  Brick readBrick(3, 3, 2, copiedCube->pixelType());
+//  readBrick.SetBasePosition(1, 1, 1);
+//  copiedCube->read(readBrick);
+//  for (int index = 0; index < readBrick.size(); index++) {
+//    if (readBrick[index] == Null) {
+//      cerr << "N ";
+//    }
+//    else {
+//      cerr << readBrick[index] << " ";
+//    }
+//  }
+//  cerr << endl;
+//
+//  try {
+//    copiedCube->write(readBrick);
+//  }
+//  catch (IException &e) {
+//    e.print();
+//  }
+//  // need to deallocate our copied cube
+//  copiedCube->close();
+//  delete copiedCube;
+//  copiedCube = NULL;
+//
+//}
 
   remove("IsisCube_00.cub");
   remove("IsisCube_01.cub");
diff --git a/isis/src/base/objs/CubeAttribute/CubeAttribute.cpp b/isis/src/base/objs/CubeAttribute/CubeAttribute.cpp
index 536586b0aa28b0a833073c30b573c74fdb9c7333..1485e301c3013892863d813ace99b4f9868c0a13 100644
--- a/isis/src/base/objs/CubeAttribute/CubeAttribute.cpp
+++ b/isis/src/base/objs/CubeAttribute/CubeAttribute.cpp
@@ -75,14 +75,14 @@ namespace Isis {
 //     QString commaTok;
 //     while((commaTok = str.Token(",")).length() > 0) {
 //       // Is this token a range of bands
-//       if(commaTok.find('-') != string::npos) {
+//       if (commaTok.find('-') != string::npos) {
 //         QString dashTok;
 //         int start = commaTok.Token("-").ToInteger();
 //         int end = commaTok.Token("-").ToInteger();
 //         int direction;
 //         direction = (start <= end) ? 1 : -1;
 //         // Save the entire range of bands
-//         for(int band = start; band != end; band += direction) {
+//         for (int band = start; band != end; band += direction) {
 //           m_bands.push_back(Isis::QString(band));
 //         }
 //         m_bands.push_back(Isis::QString(end));
@@ -103,14 +103,14 @@ namespace Isis {
     QStringList strSplit = str.split(",", QString::SkipEmptyParts);
     foreach (QString commaTok, strSplit) {
       // Is this token a range of bands
-      if(commaTok.contains('-')) {
+      if (commaTok.contains('-')) {
         QString dashTok;
         int start = toInt(commaTok.mid(0, commaTok.indexOf("-")));
         int end =  toInt(commaTok.mid(commaTok.indexOf("-") + 1));
         int direction;
         direction = (start <= end) ? 1 : -1;
         // Save the entire range of bands
-        for(int band = start; band != end; band += direction) {
+        for (int band = start; band != end; band += direction) {
           result.push_back(Isis::toString(band));
         }
         result.push_back(Isis::toString(end));
@@ -131,7 +131,7 @@ namespace Isis {
 
 
   void CubeAttributeInput::setBands(const vector<QString> &bands) {
-    setAttributes(toString(bands));
+    setAttributes("+" + toString(bands));
   }
 
 
@@ -142,8 +142,8 @@ namespace Isis {
 
   QString CubeAttributeInput::toString(const vector<QString> &bands) {
     QString result;
-    for(unsigned int i = 0; i < bands.size(); i++) {
-      if(i > 0)
+    for (unsigned int i = 0; i < bands.size(); i++) {
+      if (i > 0)
         result += ",";
 
       result += bands[i];
@@ -212,12 +212,12 @@ namespace Isis {
 //     while((tok = str.Token("+")).length() > 0) {
 //
 //       // If there is a ":" in this token then it is assumed to be a min:max
-//       if(tok.find(":") != string::npos) {
+//       if (tok.find(":") != string::npos) {
 //
 //         // Pull out the minimum
 //         Isis::QString colonTok = tok;
 //         Isis::QString min = colonTok.Token(":");
-//         if(min.length() > 0) {
+//         if (min.length() > 0) {
 //           m_minimum = min.ToDouble();
 //         }
 //         else {
@@ -226,7 +226,7 @@ namespace Isis {
 //
 //         // Pull out the maximum
 //         Isis::QString max = colonTok.Token(":");
-//         if(max.length() > 0) {
+//         if (max.length() > 0) {
 //           m_maximum = max.ToDouble();
 //         }
 //         else {
@@ -236,44 +236,44 @@ namespace Isis {
 //       }
 //
 //       // Parse any pixel type attributes
-//       else if(tok == "8BIT" || tok == "8-BIT" || tok == "UNSIGNEDBYTE") {
+//       else if (tok == "8BIT" || tok == "8-BIT" || tok == "UNSIGNEDBYTE") {
 //         m_pixelType = Isis::UnsignedByte;
 //         m_pixelTypeDef = "SET";
 //       }
-//       else if(tok == "16BIT" || tok == "16-BIT" || tok == "SIGNEDWORD") {
+//       else if (tok == "16BIT" || tok == "16-BIT" || tok == "SIGNEDWORD") {
 //         m_pixelType = Isis::SignedWord;
 //         m_pixelTypeDef = "SET";
 //       }
-//       else if(tok == "32BIT" || tok == "32-BIT" || tok == "REAL") {
+//       else if (tok == "32BIT" || tok == "32-BIT" || tok == "REAL") {
 //         m_pixelType = Isis::Real;
 //         m_pixelTypeDef = "SET";
 //       }
-//       else if(tok == "PROPAGATE") {
+//       else if (tok == "PROPAGATE") {
 //         m_pixelType = Isis::None;
 //         m_pixelTypeDef = "PROPAGATE";
 //       }
 //
 //       // Parse any file formats
-//       else if(tok == "TILE") {
+//       else if (tok == "TILE") {
 //         m_format = Cube::Tile;
 //       }
-//       else if(tok == "BSQ" || tok == "BANDSEQUENTIAL") {
+//       else if (tok == "BSQ" || tok == "BANDSEQUENTIAL") {
 //         m_format = Cube::Bsq;
 //       }
 //
 //       // Parse any byte order
-//       else if(tok == "LSB") {
+//       else if (tok == "LSB") {
 //         m_order = Isis::Lsb;
 //       }
-//       else if(tok == "MSB") {
+//       else if (tok == "MSB") {
 //         m_order = Isis::Msb;
 //       }
 //
 //       // Parse any label type
-//       else if(tok == "ATTACHED") {
+//       else if (tok == "ATTACHED") {
 //         m_labelAttachment = Isis::AttachedLabel;
 //       }
-//       else if(tok == "DETACHED") {
+//       else if (tok == "DETACHED") {
 //         m_labelAttachment = Isis::DetachedLabel;
 //       }
 //     }
@@ -379,18 +379,24 @@ namespace Isis {
     if (!propagatePixelType()) {
       QString pixelTypeAtt = attributeList(&CubeAttributeOutput::isPixelType).last();
 
-      if(pixelTypeAtt == "8BIT" || pixelTypeAtt == "8-BIT" || pixelTypeAtt == "UNSIGNEDBYTE") {
+      if (pixelTypeAtt == "8BIT" || pixelTypeAtt == "8-BIT" || pixelTypeAtt == "UNSIGNEDBYTE") {
         result = UnsignedByte;
       }
-      else if(pixelTypeAtt == "16BIT" || pixelTypeAtt == "16-BIT" || pixelTypeAtt == "SIGNEDWORD") {
+      else if (pixelTypeAtt == "16BIT" || pixelTypeAtt == "16-BIT" || pixelTypeAtt == "SIGNEDWORD") {
         result = SignedWord;
       }
-      else if(pixelTypeAtt == "16UBIT" || pixelTypeAtt == "16-UBIT" || pixelTypeAtt == "UNSIGNEDWORD") {
+      else if (pixelTypeAtt == "16UBIT" || pixelTypeAtt == "16-UBIT" || pixelTypeAtt == "UNSIGNEDWORD") {
         result = UnsignedWord;
       }
-      else if(pixelTypeAtt == "32BIT" || pixelTypeAtt == "32-BIT" || pixelTypeAtt == "REAL") {
+      else if (pixelTypeAtt == "32BIT" || pixelTypeAtt == "32-BIT" || pixelTypeAtt == "REAL") {
         result = Real;
       }
+      else if (pixelTypeAtt == "32UINT" || pixelTypeAtt == "32-UINT" || pixelTypeAtt == "UNSIGNEDINTEGER") {
+        result = UnsignedInteger;
+      }
+      else if (pixelTypeAtt == "32INT" || pixelTypeAtt == "32-INT" || pixelTypeAtt == "SIGNEDINTEGER") {
+        result = SignedInteger;
+      }
     }
 
     return result;
@@ -440,9 +446,11 @@ namespace Isis {
 
 
   bool CubeAttributeOutput::isPixelType(QString attribute) const {
-    return QRegExp("(8-?BIT|16-?BIT|32-?BIT|UNSIGNEDBYTE|SIGNEDWORD|UNSIGNEDWORD|REAL)").exactMatch(attribute);
-  }
+    QString expressions = "(8-?BIT|16-?BIT|32-?BIT|UNSIGNEDBYTE|SIGNEDWORD|UNSIGNEDWORD|REAL";
+    expressions += "|32-?UINT|32-?INT|UNSIGNEDINTEGER|SIGNEDINTEGER)";
+    return QRegExp(expressions).exactMatch(attribute);
 
+  }
 
 
   bool CubeAttributeOutput::isRange(QString attribute) const {
diff --git a/isis/src/base/objs/CubeAttribute/CubeAttribute.h b/isis/src/base/objs/CubeAttribute/CubeAttribute.h
index d4eecbaea2794f2f958c123b6264b9a5be82a0e3..fed66b3b531690c1a4a1542a79bfe7f43038d034 100644
--- a/isis/src/base/objs/CubeAttribute/CubeAttribute.h
+++ b/isis/src/base/objs/CubeAttribute/CubeAttribute.h
@@ -391,6 +391,8 @@ namespace Isis {
    *                           CubeAttribute parent class now. Updated to match current
    *                           coding standards. Added safety checks for
    *                           unrecognized attributes. References #961.
+   *   @history 2018-07-27 Kaitlyn Lee - Added "+" in setBands() because without it,
+   *                           setAttributes() was skipping the list of band indices.
    */
   class CubeAttributeInput : public CubeAttribute<CubeAttributeInput> {
 
@@ -481,6 +483,8 @@ namespace Isis {
    *                           CubeAttribute parent class now. Updated to match current
    *                           coding standards. Added the "+External+ attribute. Added safety
    *                           checks for unrecognized attributes. References #961.
+   *   @history 2018-07-27 Kaitlyn Lee - Added unsigned/signed integer handling.
+
    */
   class CubeAttributeOutput : public CubeAttribute<CubeAttributeOutput> {
 
diff --git a/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.cpp b/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.cpp
index 273a98178d190508edb8e9bfc05081b34c56eb95..ca78a550ed5cc83cee8ac067c5853fdcc15540ed 100644
--- a/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.cpp
+++ b/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.cpp
@@ -593,50 +593,6 @@ namespace Isis {
   }
 
 
-  /**
-   * Computes and returns emission angle, in degrees, given the observer
-   * position. The surface normal vector is calculated using an ellipsoid, not
-   * the local normal of the actual target shape.
-   *
-   * Emission Angle: The angle between the surface normal vector at the
-   * intersection point and the vector from the intersection point to the
-   * observer (usually the spacecraft). The emission angle varies from 0 degrees
-   * when the observer is viewing the sub-spacecraft point (nadir viewing) to 90
-   * degrees when the intercept is tangent to the surface of the target body.
-   * Thus, higher values of emission angle indicate more oblique viewing of the
-   * target.
-   *
-   * @param observerBodyFixedPosition  Three dimensional position of the observer,
-   *                                   in the coordinate system of the target body.
-   *
-   * @return The emission angle, in decimal degrees.
-   *
-   */
-  double EmbreeShapeModel::emissionAngle(const std::vector<double> &observerBodyFixedPosition) {
-
-    // If there is already a normal save it, because it's probably the local normal
-    std::vector<double> localNormal;
-    bool hadNormal = hasNormal();
-    if ( hadNormal ) {
-      localNormal = normal();
-    }
-
-    // Calculate the ellipsoid surface normal
-    calculateDefaultNormal();
-    
-    // Use ShapeModel to calculate the ellipsoid emission angle
-    double ellipsoidEmission = ShapeModel::emissionAngle(observerBodyFixedPosition);
-
-    // If there's a saved normal, reset it
-    if ( hadNormal ) {
-      setNormal(localNormal);
-    }
-
-    // Return the ellipsoid emission angle
-    return ellipsoidEmission;
-  }
-
-
   /**
    * Computes and returns incidence angle, in degrees, given the illuminator position.
    * The surface normal vector is calculated using an ellipsoid, not the local
diff --git a/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.h b/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.h
index 1d0d66320c14c3b6685724096b9006fa9cd9e7ab..e11f615b77ff036d862da99ded9c26900e4469e2 100644
--- a/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.h
+++ b/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.h
@@ -47,6 +47,8 @@ namespace Isis {
    *
    * @internal
    *   @history 2017-04-22 Jesse Mapel and Jeannie Backer - Original Version
+   *   @history 2018-05-01 Christopher Combs - Removed emissionAngle function to
+   *                fix issues with using ellipsoids to find normals. Fixes #5387.
    */
   class EmbreeShapeModel : public ShapeModel {
     public:
@@ -84,10 +86,8 @@ namespace Isis {
       virtual void calculateSurfaceNormal();
       QVector<double> ellipsoidNormal();
 
-      virtual double emissionAngle(const std::vector<double> &sB);
       virtual double incidenceAngle(const std::vector<double> &uB);
 
-
       virtual Distance localRadius(const Latitude &lat, const Longitude &lon);
 
       // Determine if the internal intercept is occluded from the observer/lookdir
diff --git a/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.truth b/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.truth
index 7e0e13a39547db1b3bc6782d776f8552d30bf14f..7a4c80113f4947e9a92cdbd74d084ed928958ca0 100644
--- a/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.truth
+++ b/isis/src/base/objs/EmbreeShapeModel/EmbreeShapeModel.truth
@@ -190,10 +190,3 @@ Incidence angle:  6.92945
 Testing errors
 
 
-ShapeModel with a bad file name
-[pcl::io::load] Don't know how to handle file with extension **USER ERROR** Cannot create a EmbreeShape from NotADSKFile.
-**I/O ERROR** Failed creating an EmbreeTargetShape from [NotADSKFile].
-**I/O ERROR** Failed loading target shape file [NotADSKFile].
-[pcl::io::load] Don't know how to handle file with extension **USER ERROR** Cannot create a EmbreeShape from NotADSKFile.
-**I/O ERROR** Failed creating an EmbreeTargetShape from [NotADSKFile].
-**I/O ERROR** Failed loading target shape file [NotADSKFile].
diff --git a/isis/src/base/objs/EmbreeShapeModel/unitTest.cpp b/isis/src/base/objs/EmbreeShapeModel/unitTest.cpp
index bd1a686b50cd6386a97c7b6a92ac7388448281d9..f294217f3e2fe0e100f322264d6a030d2488a5ce 100644
--- a/isis/src/base/objs/EmbreeShapeModel/unitTest.cpp
+++ b/isis/src/base/objs/EmbreeShapeModel/unitTest.cpp
@@ -304,20 +304,6 @@ int main(int argc, char *argv[]) {
     qDebug() << "Testing errors";
     qDebug() << endl;
 
-    qDebug() << "ShapeModel with a bad file name";
-    try {
-      testLabel.findGroup("Kernels").findKeyword("ShapeModel").setValue("NotADSKFile");
-      EmbreeShapeModel badModel(itokawaTarget, testLabel, manager);
-    }
-    catch (IException &e) {
-      e.print();
-    }
-    try {
-      EmbreeShapeModel badModel(itokawaTarget, "NotADSKFile", manager);
-    }
-    catch (IException &e) {
-      e.print();
-    }
   }
   catch (IException &e) {
     qDebug() << "";
diff --git a/isis/src/base/objs/EmbreeTargetShape/EmbreeTargetShape.truth b/isis/src/base/objs/EmbreeTargetShape/EmbreeTargetShape.truth
index 922bf13c0d2c9842c3a839e26fb2ebdb46ea46f9..43ff38374eeae88a55d5bb7ae3b497e85d04c69d 100644
--- a/isis/src/base/objs/EmbreeTargetShape/EmbreeTargetShape.truth
+++ b/isis/src/base/objs/EmbreeTargetShape/EmbreeTargetShape.truth
@@ -364,8 +364,6 @@ Testing error throws
 
 
 Invalid shapefile
-[pcl::io::load] Don't know how to handle file with extension **I/O ERROR** Failed creating an EmbreeTargetShape from [notafile].
-**I/O ERROR** Failed loading target shape file [notafile].
 **I/O ERROR** Failed creating an EmbreeTargetShape from [junkyshapefile.bds].
 **USER ERROR** NAIF DSK file [junkyshapefile.bds] does not exist.
 **I/O ERROR** Failed creating an EmbreeTargetShape from [junkydem.cub].
diff --git a/isis/src/base/objs/EmbreeTargetShape/unitTest.cpp b/isis/src/base/objs/EmbreeTargetShape/unitTest.cpp
index e4c671ba6620283c1a9e88c4250ce1533dba0d16..64c13fb4fb966e4aace3cb8f062fd85fc76f423e 100644
--- a/isis/src/base/objs/EmbreeTargetShape/unitTest.cpp
+++ b/isis/src/base/objs/EmbreeTargetShape/unitTest.cpp
@@ -256,12 +256,6 @@ int main(int argc, char *argv[]) {
     qDebug() << endl;
 
     qDebug() << "Invalid shapefile";
-    try {
-      EmbreeTargetShape invalidShapefile("notafile");
-    }
-    catch (IException &e) {
-      e.print();
-    }
     try {
       EmbreeTargetShape invalidShapefile("junkyshapefile.bds");
     }
diff --git a/isis/src/base/objs/Enlarge/Enlarge.truth b/isis/src/base/objs/Enlarge/Enlarge.truth
index 5e60fbc534a699b3907176567b539b9afe58bf86..a7d1c68caa922da22b109044420e58ad56c44318 100644
--- a/isis/src/base/objs/Enlarge/Enlarge.truth
+++ b/isis/src/base/objs/Enlarge/Enlarge.truth
@@ -1,6 +1,4 @@
 Testing Enlarge Class ... 
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Object = IsisCube
   Object = Core
     StartByte   = 65537
diff --git a/isis/src/base/objs/Environment/Environment.cpp b/isis/src/base/objs/Environment/Environment.cpp
index b0d5726d75a8ffb8cf9dd2a956df38b5454d23fa..c84d1557c41d1a3c5d1cf30c33f834943329c2b9 100644
--- a/isis/src/base/objs/Environment/Environment.cpp
+++ b/isis/src/base/objs/Environment/Environment.cpp
@@ -7,10 +7,6 @@
 #include <QStringList>
 #include <QCoreApplication>
 
-#ifndef __APPLE__
-#include <QtDBus>
-#endif
-
 #include "IException.h"
 #include "IString.h"
 #include "TextFile.h"
@@ -28,12 +24,7 @@
     if ( !core ) {
       std::cout << "****  Qt Plugin Path is not set because no instance of QCoreApplication ****\n";
     }
-    else {
-      Isis::IString thirdPartyPluginPath = root + "/3rdParty/plugins";
-      pluginPaths << thirdPartyPluginPath.ToQt();
-      core->setLibraryPaths(pluginPaths);
-    }
-   
+
     return;
   }
 
@@ -66,33 +57,6 @@ namespace Isis {
       QCoreApplication::setLibraryPaths(pluginPaths);
     }
 #endif
-
-#ifndef __APPLE__
-    // We need to force the correct QDBus library to be loaded... to do that, just
-    //   use a symbol in it's library. This only applies to linux and fixes #1228.
-
-    // Long explanation:
-    //   When we run GUI apps, the system (and Qt) work together to figure out
-    //   which runtime libraries are necessary on-the-fly. When QApplication is
-    //   instantiated, it goes into QtGui's style code. The styles ignore our plugin
-    //   path setting (above) on all OS's. So Qt GUI grabs a style from the OS's styles,
-    //   which is a shared library in the kde area. These styles require a version (any version)
-    //   of QtDBus loaded. If QtDBus is not yet loaded, then the style library will grab it.
-    //   However, on Ubuntu 12.04, the style library grabs the system (OS) QDBus library. QDBus
-    //   detects that you've already loaded Isis' QtCore, so the library versions mismatch, and
-    //   it crashes. The problem becomes more interesting because sometimes it picks up the system
-    //   QDBus, and sometimes it picks up Isis' QDBus, and I have no good reason why we pick up
-    //   one versus another; currently, installed apps pick up the system and locally built apps
-    //   pick up Isis' (even when the executables are made to be identical). The end result is no
-    //   installed GUI applications will run and our automated tests fail to catch it. This solution
-    //   bypasses the entire issue by forcing QDBus to be loaded long before any styles are loaded,
-    //   so the style plugins do not need to go and get their own QDBus library.
-    //
-    //   The root cause is that Ubuntu's run time loader is failing to respect
-    //   our executable's rpaths when loading a style library. However, when we link against the
-    //   QBus library directly, we get the right one.
-    QDBusArgument();
-#endif
   }
 
 
@@ -102,7 +66,7 @@ namespace Isis {
   QString Environment::userName() {
     return getEnvironmentValue("USER", "Unknown");
   }
-  
+
 
   /**
    * @returns the host name.  Returns 'Unknown' if it cannot find the host name.
@@ -110,8 +74,8 @@ namespace Isis {
   QString Environment::hostName() {
     return getEnvironmentValue("HOST", "Unknown");
   }
-  
-  
+
+
   /**
    * @param variable The environment variable to get
    * @param defaultValue The returned value for variable if variable doesn't
@@ -121,16 +85,16 @@ namespace Isis {
    */
   QString Environment::getEnvironmentValue(QString variable,
       QString defaultValue) {
-      
+
     QString value = defaultValue;
-    
+
     char *envValue = getenv(variable.toLatin1().data());
     if (envValue)
       value = envValue;
-      
+
     return value;
   }
-  
+
 
   /**
    * @returns the Isis version in the format isis?.?.?.?qualifier | date
diff --git a/isis/src/base/objs/Equalization/Equalization.truth b/isis/src/base/objs/Equalization/Equalization.truth
index 46fdb4417ac4ca6affea1493aefd213a25e85659..4bbd678720db4dbfb72d87a78048987cbc69b698 100644
--- a/isis/src/base/objs/Equalization/Equalization.truth
+++ b/isis/src/base/objs/Equalization/Equalization.truth
@@ -1,47 +1,5 @@
 Create object using fromlist file (non-overlapping)
      Calculate statistics for contrast and brightness using QRD method...
-Calculating Statistics for Band 1 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 1 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 2 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 2 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 3 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 3 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 4 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 4 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 5 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 5 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 6 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 6 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 7 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 7 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 8 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 8 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 9 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 9 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 10 of 10 in Cube 1 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 10 of 10 in Cube 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering Overlap Statisitcs for Cube 1 vs 2 of 2
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 **USER ERROR** There are input images that do not overlap with enough valid pixels. See application log or "NonOverlaps" keyword in output statistics file.
 Results:
 Group = General
@@ -60,72 +18,6 @@ End_Group
      Write results to file...
      Add hold list...
      Recalculating the statistics with all overlapping files now...
-Calculating Statistics for Band 1 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 1 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 1 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 2 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 2 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 2 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 3 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 3 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 3 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 4 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 4 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 4 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 5 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 5 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 5 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 6 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 6 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 6 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 7 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 7 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 7 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 8 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 8 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 8 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 9 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 9 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 9 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 10 of 10 in Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 10 of 10 in Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Band 10 of 10 in Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering Overlap Statisitcs for Cube 1 vs 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering Overlap Statisitcs for Cube 1 vs 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering Overlap Statisitcs for Cube 2 vs 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Results:
 Group = General
   TotalOverlaps   = 20
@@ -192,8 +84,7 @@ Group = General
                      5.97723994078917e-05)
 End_Group
      Write results to file...
-Working
-0% Processed
sample 45, line 45: 0.000351268332 => 0.000291894498
+sample 45, line 45: 0.000351268332 => 0.000291894498
 sample 46, line 46: 0.000345625071 => 0.000287365908
 sample 47, line 47: 0.000336533762 => 0.000280070338
 sample 48, line 48: 0.000333498669 => 0.000277634745
@@ -333,7 +224,7 @@ sample 30, line 358: 0.00040070148 => 0.000331563478
 sample 31, line 359: 0.000406345091 => 0.000336092348
 sample 32, line 360: 0.000420178461 => 0.000347193314
 sample 33, line 361: 0.000426772283 => 0.000352484707
-10% Processed
sample 49, line 377: 0.00033769873 => 0.000281510821
+sample 49, line 377: 0.00033769873 => 0.000281510821
 sample 50, line 378: 0.000327600748 => 0.000273526758
 sample 51, line 379: 0.000324426801 => 0.000271017247
 sample 52, line 380: 0.000320445484 => 0.000267869382
@@ -473,7 +364,7 @@ sample 35, line 691: 0.00041334136 => 0.00034131837
 sample 36, line 692: 0.000402227684 => 0.000332531239
 sample 37, line 693: 0.000390052301 => 0.000322904658
 sample 38, line 694: 0.000392548012 => 0.000324877916
-20% Processed
sample 71, line 727: 0.000364591979 => 0.000331182387
+sample 71, line 727: 0.000364591979 => 0.000331182387
 sample 72, line 728: 0.000391498295 => 0.000352335734
 sample 73, line 729: 0.000414402573 => 0.000370342738
 sample 74, line 730: 0.000416920288 => 0.000372322127
@@ -610,7 +501,7 @@ sample 15, line 1081: 0.000515304622 => 0.000449670432
 sample 16, line 1082: 0.000514662708 => 0.000449165769
 sample 17, line 1083: 0.000515415799 => 0.000449757838
 sample 18, line 1084: 0.000524252187 => 0.000456704876
-30% Processed
sample 47, line 1113: 0.000370426045 => 0.000350946707
+sample 47, line 1113: 0.000370426045 => 0.000350946707
 sample 48, line 1114: 0.000367466651 => 0.000348551073
 sample 49, line 1115: 0.000366733584 => 0.000347957654
 sample 50, line 1116: 0.000367128872 => 0.00034827764
@@ -751,7 +642,7 @@ sample 33, line 1427: 0.000470817497 => 0.000432213741
 sample 34, line 1428: 0.000463700708 => 0.00042645269
 sample 35, line 1429: 0.000477536552 => 0.000437652827
 sample 36, line 1430: 0.000489252736 => 0.000447137096
-40% Processed
sample 56, line 1450: 0.000379823323 => 0.000377499084
+sample 56, line 1450: 0.000379823323 => 0.000377499084
 sample 57, line 1451: 0.000391271838 => 0.000386961327
 sample 58, line 1452: 0.000391388312 => 0.000387057593
 sample 59, line 1453: 0.000399710669 => 0.000393936053
@@ -889,7 +780,7 @@ sample 38, line 1760: 0.000482738105 => 0.000462558555
 sample 39, line 1761: 0.000492680061 => 0.000470775621
 sample 3, line 1807: 0.000521840993 => 0.000494877246
 sample 4, line 1808: 0.00051620818 => 0.000490221703
-50% Processed
sample 45, line 1849: 0.000427162158 => 0.000415505885
+sample 45, line 1849: 0.000427162158 => 0.000415505885
 sample 46, line 1850: 0.000432214525 => 0.000419675878
 sample 47, line 1851: 0.000433110312 => 0.00042041522
 sample 48, line 1852: 0.000432708708 => 0.000420083754
@@ -1030,7 +921,7 @@ sample 31, line 2163: 0.000558387779 => 0.000523813528
 sample 32, line 2164: 0.000544507813 => 0.000512357637
 sample 33, line 2165: 0.000552644779 => 0.000519073517
 sample 34, line 2166: 0.000552042096 => 0.000518576091
-60% Processed
sample 49, line 2181: 0.000477178546 => 0.000451147503
+sample 49, line 2181: 0.000477178546 => 0.000451147503
 sample 50, line 2182: 0.000462104421 => 0.000438642692
 sample 51, line 2183: 0.000449487678 => 0.000428176413
 sample 52, line 2184: 0.000446294755 => 0.000425527709
@@ -1171,7 +1062,7 @@ sample 34, line 2494: 0.000561944791 => 0.00052146574
 sample 35, line 2495: 0.000563633454 => 0.000522866577
 sample 36, line 2496: 0.000531049154 => 0.000495836119
 sample 37, line 2497: 0.000541199115 => 0.000504256067
-70% Processed
sample 77, line 2537: 0.000477642519 => 0.000441955162
+sample 77, line 2537: 0.000477642519 => 0.000441955162
 sample 78, line 2538: 0.000489208673 => 0.000451656844
 sample 79, line 2539: 0.000499683723 => 0.000460443309
 sample 80, line 2540: 0.000490265375 => 0.000452543205
@@ -1310,7 +1201,7 @@ sample 22, line 2892: 0.000586473616 => 0.000533242613
 sample 23, line 2893: 0.000588622992 => 0.000535045508
 sample 24, line 2894: 0.000584587629 => 0.000531660649
 sample 25, line 2895: 0.000580064836 => 0.000527866933
-80% Processed
sample 47, line 2917: 0.000491997169 => 0.000446754828
+sample 47, line 2917: 0.000491997169 => 0.000446754828
 sample 48, line 2918: 0.000488422404 => 0.000443746687
 sample 49, line 2919: 0.000484033633 => 0.000440053567
 sample 50, line 2920: 0.000476966321 => 0.000434106472
@@ -1450,7 +1341,7 @@ sample 32, line 3230: 0.000538322318 => 0.000485737127
 sample 33, line 3231: 0.000550321187 => 0.000495834094
 sample 34, line 3232: 0.000552756828 => 0.000497883669
 sample 35, line 3233: 0.000551281322 => 0.000496642041
-90% Processed
sample 62, line 3260: 0.000178040762 => 0.000119303493
+sample 62, line 3260: 0.000178040762 => 0.000119303493
 sample 63, line 3261: 0.000174913512 => 0.00011574935
 sample 64, line 3262: 0.000171941196 => 0.000112371291
 sample 65, line 3263: 0.000178040529 => 0.000119303228
@@ -1589,9 +1480,7 @@ sample 7, line 3615: 0.000147414743 => 8.44967995e-05
 sample 8, line 3616: 0.000147356128 => 8.4430183e-05
 sample 9, line 3617: 0.000149079497 => 8.63888041e-05
 sample 10, line 3618: 0.000145431666 => 8.22430183e-05
-100% Processed
-Working
-0% Processed
sample 45, line 45: 0.000290619239 => 0.000290619239
+sample 45, line 45: 0.000290619239 => 0.000290619239
 sample 46, line 46: 0.00027536563 => 0.00027536563
 sample 47, line 47: 0.000284910842 => 0.000284910842
 sample 48, line 48: 0.000276024279 => 0.000276024279
@@ -1730,7 +1619,7 @@ sample 30, line 358: 0.000340305385 => 0.000340305385
 sample 31, line 359: 0.000336303987 => 0.000336303987
 sample 32, line 360: 0.000339195307 => 0.000339195307
 sample 33, line 361: 0.000346355722 => 0.000346355722
-10% Processed
sample 49, line 377: 0.000286205031 => 0.000286205031
+sample 49, line 377: 0.000286205031 => 0.000286205031
 sample 50, line 378: 0.000266631891 => 0.000266631891
 sample 51, line 379: 0.000266020565 => 0.000266020565
 sample 52, line 380: 0.00026580703 => 0.00026580703
@@ -1870,7 +1759,7 @@ sample 34, line 690: 0.000318394857 => 0.000318394857
 sample 35, line 691: 0.000323348853 => 0.000323348853
 sample 36, line 692: 0.000333178352 => 0.000333178352
 sample 37, line 693: 0.00032398061 => 0.00032398061
-20% Processed
sample 68, line 724: 0.000330440467 => 0.000330440467
+sample 68, line 724: 0.000330440467 => 0.000330440467
 sample 69, line 725: 0.000335332559 => 0.000335332559
 sample 70, line 726: 0.000323408312 => 0.000323408312
 sample 71, line 727: 0.000349924725 => 0.000349924725
@@ -2008,7 +1897,7 @@ sample 13, line 1079: 0.000384069222 => 0.000384069222
 sample 14, line 1080: 0.000367241882 => 0.000367241882
 sample 15, line 1081: 0.000411912159 => 0.000411912159
 sample 16, line 1082: 0.000410407927 => 0.000410407927
-30% Processed
sample 47, line 1113: 0.000347713154 => 0.000347713154
+sample 47, line 1113: 0.000347713154 => 0.000347713154
 sample 48, line 1114: 0.000348245259 => 0.000348245259
 sample 49, line 1115: 0.00034509541 => 0.00034509541
 sample 50, line 1116: 0.000345106935 => 0.000345106935
@@ -2148,7 +2037,7 @@ sample 32, line 1426: 0.000446760125 => 0.000446760125
 sample 33, line 1427: 0.000450601685 => 0.000450601685
 sample 34, line 1428: 0.000450713007 => 0.000450713007
 sample 35, line 1429: 0.000435958151 => 0.000435958151
-40% Processed
sample 52, line 1446: 0.000393217313 => 0.000393217313
+sample 52, line 1446: 0.000393217313 => 0.000393217313
 sample 53, line 1447: 0.000400495599 => 0.000400495599
 sample 54, line 1448: 0.000385479303 => 0.000385479303
 sample 55, line 1449: 0.000381387596 => 0.000381387596
@@ -2288,7 +2177,7 @@ sample 36, line 1758: 0.000474149303 => 0.000474149303
 sample 37, line 1759: 0.000462928263 => 0.000462928263
 sample 38, line 1760: 0.000460695795 => 0.000460695795
 sample 39, line 1761: 0.000479306938 => 0.000479306938
-50% Processed
sample 44, line 1848: 0.000415760267 => 0.000415760267
+sample 44, line 1848: 0.000415760267 => 0.000415760267
 sample 45, line 1849: 0.000413297588 => 0.000413297588
 sample 46, line 1850: 0.000424661819 => 0.000424661819
 sample 47, line 1851: 0.000417667266 => 0.000417667266
@@ -2430,7 +2319,7 @@ sample 30, line 2162: 0.000518572342 => 0.000518572342
 sample 31, line 2163: 0.000510143524 => 0.000510143524
 sample 32, line 2164: 0.00051402289 => 0.00051402289
 sample 33, line 2165: 0.000526306918 => 0.000526306918
-60% Processed
sample 48, line 2180: 0.00043400281 => 0.00043400281
+sample 48, line 2180: 0.00043400281 => 0.00043400281
 sample 49, line 2181: 0.000428732019 => 0.000428732019
 sample 50, line 2182: 0.000431211491 => 0.000431211491
 sample 51, line 2183: 0.000424356695 => 0.000424356695
@@ -2572,7 +2461,7 @@ sample 34, line 2494: 0.00052908744 => 0.00052908744
 sample 35, line 2495: 0.000526970718 => 0.000526970718
 sample 36, line 2496: 0.000524371339 => 0.000524371339
 sample 37, line 2497: 0.000529367593 => 0.000529367593
-70% Processed
sample 70, line 2530: 0.000459257484 => 0.000459257484
+sample 70, line 2530: 0.000459257484 => 0.000459257484
 sample 71, line 2531: 0.000443657947 => 0.000443657947
 sample 72, line 2532: 0.000463619974 => 0.000463619974
 sample 73, line 2533: 0.000467699603 => 0.000467699603
@@ -2709,7 +2598,7 @@ sample 14, line 2884: 0.00046759934 => 0.00046759934
 sample 15, line 2885: 0.000499485235 => 0.000499485235
 sample 16, line 2886: 0.000519024557 => 0.000519024557
 sample 17, line 2887: 0.000523890718 => 0.000523890718
-80% Processed
sample 46, line 2916: 0.000451731932 => 0.000451731932
+sample 46, line 2916: 0.000451731932 => 0.000451731932
 sample 47, line 2917: 0.000437886483 => 0.000437886483
 sample 48, line 2918: 0.00043894854 => 0.00043894854
 sample 49, line 2919: 0.000440035394 => 0.000440035394
@@ -2850,7 +2739,7 @@ sample 31, line 3229: 0.000537062588 => 0.000537062588
 sample 32, line 3230: 0.000507651654 => 0.000507651654
 sample 33, line 3231: 0.000500509748 => 0.000500509748
 sample 34, line 3232: 0.000507390243 => 0.000507390243
-90% Processed
sample 53, line 3251: 0.000119596916 => 0.000119596916
+sample 53, line 3251: 0.000119596916 => 0.000119596916
 sample 54, line 3252: 0.000119865741 => 0.000119865741
 sample 55, line 3253: 0.000120113065 => 0.000120113065
 sample 56, line 3254: 0.000123207792 => 0.000123207792
@@ -2989,9 +2878,7 @@ sample 36, line 3562: 9.42921615e-05 => 9.42921615e-05
 sample 37, line 3563: 9.58979726e-05 => 9.58979726e-05
 sample 38, line 3564: 9.71553745e-05 => 9.71553745e-05
 sample 1, line 3609: 9.45375868e-05 => 9.45375868e-05
-100% Processed
-Working
-0% Processed
sample 72, line 202: 0.000137360752 => 0.000292044568
+sample 72, line 202: 0.000137360752 => 0.000292044568
 sample 73, line 203: 0.000144011152 => 0.000304890585
 sample 74, line 204: 0.000142328878 => 0.000301641078
 sample 75, line 205: 0.000142455538 => 0.000301885736
@@ -3131,7 +3018,7 @@ sample 35, line 685: 0.00015074866 => 0.000317904861
 sample 36, line 686: 0.000147310901 => 0.000311264432
 sample 37, line 687: 0.000162874203 => 0.000341326752
 sample 38, line 688: 0.000145116661 => 0.000307026004
-10% Processed
sample 90, line 870: -0.000162264827 => -0.000289890937
+sample 90, line 870: -0.000162264827 => -0.000289890937
 sample 91, line 871: 0.000154499226 => 0.000322203754
 sample 92, line 872: 0.000132517889 => 0.000279728417
 sample 93, line 873: 0.000138418967 => 0.000291131285
@@ -3264,7 +3151,7 @@ sample 46, line 1346: 0.000214465443 => 0.000438078652
 sample 3, line 1433: 0.000166279438 => 0.000344967085
 sample 4, line 1434: 0.000139802374 => 0.000293804492
 sample 5, line 1435: 0.000162388387 => 0.000337448266
-20% Processed
sample 72, line 1632: 0.000200401861 => 0.000364343492
+sample 72, line 1632: 0.000200401861 => 0.000364343492
 sample 73, line 1633: 0.000208613841 => 0.000377811476
 sample 74, line 1634: 0.000200381561 => 0.000364310199
 sample 75, line 1635: 0.000195676577 => 0.000356593834
@@ -3405,7 +3292,7 @@ sample 35, line 2115: 0.000288772775 => 0.000509275406
 sample 36, line 2116: 0.000280453387 => 0.000495631269
 sample 37, line 2117: 0.000273423357 => 0.000484101732
 sample 38, line 2118: 0.000261742156 => 0.000464944085
-30% Processed
sample 91, line 2301: 0.000174095912 => 0.000304202423
+sample 91, line 2301: 0.000174095912 => 0.000304202423
 sample 92, line 2302: 0.000220791859 => 0.000373368734
 sample 93, line 2303: 0.000225614887 => 0.000380512632
 sample 94, line 2304: 0.000236821841 => 0.000397112438
@@ -3543,7 +3430,7 @@ sample 8, line 2868: 0.000274836464 => 0.000453419921
 sample 9, line 2869: 0.000245205883 => 0.000409530931
 sample 10, line 2870: 0.000265710492 => 0.000439902478
 sample 11, line 2871: 0.000269167707 => 0.000445023325
-40% Processed
sample 73, line 3063: 0.000258388493 => 0.000408786623
+sample 73, line 3063: 0.000258388493 => 0.000408786623
 sample 74, line 3064: 0.000270440272 => 0.000425303239
 sample 75, line 3065: 0.000248488912 => 0.000395219533
 sample 76, line 3066: 0.000262592512 => 0.00041454811
@@ -3684,7 +3571,7 @@ sample 35, line 3545: 0.000322109903 => 0.000496114977
 sample 36, line 3546: 0.000328466005 => 0.000504825831
 sample 37, line 3547: 0.000331821589 => 0.000509424563
 sample 38, line 3548: 0.000337171572 => 0.000516756559
-50% Processed
sample 92, line 3732: 0.000267140043 => 0.000417893225
+sample 92, line 3732: 0.000267140043 => 0.000417893225
 sample 93, line 3733: 0.000282346067 => 0.000438212114
 sample 94, line 3734: 0.000293925696 => 0.00045368527
 sample 95, line 3735: 0.000296468759 => 0.000457083412
@@ -3829,7 +3716,7 @@ sample 14, line 4304: 0.000322850712 => 0.000492336019
 sample 15, line 4305: 0.000317202939 => 0.000484789242
 sample 16, line 4306: 0.000328796712 => 0.000500281298
 sample 17, line 4307: 0.000352717791 => 0.000532245588
-60% Processed
sample 73, line 4493: 0.000296147424 => 0.000457581868
+sample 73, line 4493: 0.000296147424 => 0.000457581868
 sample 74, line 4494: 0.000304828165 => 0.000469113141
 sample 75, line 4495: 0.000298656756 => 0.000460915201
 sample 76, line 4496: 0.000295959588 => 0.000457332352
@@ -3970,7 +3857,7 @@ sample 36, line 4976: 0.000331538817 => 0.000504594882
 sample 37, line 4977: 0.00034080699 => 0.000516906485
 sample 38, line 4978: 0.000360763894 => 0.000543416721
 sample 39, line 4979: 0.000351163326 => 0.000530663574
-70% Processed
sample 93, line 5163: 0.00028516067 => 0.000441829557
+sample 93, line 5163: 0.00028516067 => 0.000441829557
 sample 94, line 5164: 0.00031779104 => 0.000485210296
 sample 95, line 5165: 0.000301257649 => 0.000463229831
 sample 96, line 5166: 0.000316989375 => 0.000484144516
@@ -4122,7 +4009,7 @@ sample 21, line 5741: 0.000337464764 => 0.000511365705
 sample 22, line 5742: 0.000340270723 => 0.000515096112
 sample 23, line 5743: 0.000264998438 => 0.000415024698
 sample 24, line 5744: 0.00029076956 => 0.000449286347
-80% Processed
sample 73, line 5923: 0.000308439223 => 0.000461542246
+sample 73, line 5923: 0.000308439223 => 0.000461542246
 sample 74, line 5924: 0.00031505138 => 0.000470178735
 sample 75, line 5925: 0.00030659046 => 0.000459127479
 sample 76, line 5926: 0.000285190239 => 0.000431175516
@@ -4264,7 +4151,7 @@ sample 36, line 6406: 0.00034337712 => 0.000507176484
 sample 37, line 6407: 0.000337612146 => 0.000499646546
 sample 38, line 6408: 0.000342766289 => 0.000506378645
 sample 39, line 6409: 0.000356714329 => 0.000524596919
-90% Processed
sample 94, line 6594: 5.85257258e-05 => 0.000119657271
+sample 94, line 6594: 5.85257258e-05 => 0.000119657271
 sample 95, line 6595: 6.04473789e-05 => 0.000123676508
 sample 96, line 6596: 6.2983956e-05 => 0.000128981891
 sample 97, line 6597: 6.35451361e-05 => 0.000130155628
@@ -4420,17 +4307,9 @@ sample 27, line 7177: 5.01022805e-05 => 0.0001020392
 sample 28, line 7178: 5.17278677e-05 => 0.0001054392
 sample 29, line 7179: 5.41724548e-05 => 0.00011055218
 sample 30, line 7180: 4.99482994e-05 => 0.000101717141
-100% Processed
      Apply corrections to temporary output cubes...
-Equalizing Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Equalizing Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Equalizing Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
      Import statistics from results file...
-Working
-0% Processed
sample 45, line 45: 0.000351268332 => 0.000291894498
+sample 45, line 45: 0.000351268332 => 0.000291894498
 sample 46, line 46: 0.000345625071 => 0.000287365908
 sample 47, line 47: 0.000336533762 => 0.000280070338
 sample 48, line 48: 0.000333498669 => 0.000277634745
@@ -4570,7 +4449,7 @@ sample 30, line 358: 0.00040070148 => 0.000331563478
 sample 31, line 359: 0.000406345091 => 0.000336092348
 sample 32, line 360: 0.000420178461 => 0.000347193314
 sample 33, line 361: 0.000426772283 => 0.000352484707
-10% Processed
sample 49, line 377: 0.00033769873 => 0.000281510821
+sample 49, line 377: 0.00033769873 => 0.000281510821
 sample 50, line 378: 0.000327600748 => 0.000273526758
 sample 51, line 379: 0.000324426801 => 0.000271017247
 sample 52, line 380: 0.000320445484 => 0.000267869382
@@ -4710,7 +4589,7 @@ sample 35, line 691: 0.00041334136 => 0.00034131837
 sample 36, line 692: 0.000402227684 => 0.000332531239
 sample 37, line 693: 0.000390052301 => 0.000322904658
 sample 38, line 694: 0.000392548012 => 0.000324877916
-20% Processed
sample 71, line 727: 0.000364591979 => 0.000331182387
+sample 71, line 727: 0.000364591979 => 0.000331182387
 sample 72, line 728: 0.000391498295 => 0.000352335734
 sample 73, line 729: 0.000414402573 => 0.000370342738
 sample 74, line 730: 0.000416920288 => 0.000372322127
@@ -4847,7 +4726,7 @@ sample 15, line 1081: 0.000515304622 => 0.000449670432
 sample 16, line 1082: 0.000514662708 => 0.000449165769
 sample 17, line 1083: 0.000515415799 => 0.000449757838
 sample 18, line 1084: 0.000524252187 => 0.000456704876
-30% Processed
sample 47, line 1113: 0.000370426045 => 0.000350946707
+sample 47, line 1113: 0.000370426045 => 0.000350946707
 sample 48, line 1114: 0.000367466651 => 0.000348551073
 sample 49, line 1115: 0.000366733584 => 0.000347957654
 sample 50, line 1116: 0.000367128872 => 0.00034827764
@@ -4988,7 +4867,7 @@ sample 33, line 1427: 0.000470817497 => 0.000432213741
 sample 34, line 1428: 0.000463700708 => 0.00042645269
 sample 35, line 1429: 0.000477536552 => 0.000437652827
 sample 36, line 1430: 0.000489252736 => 0.000447137096
-40% Processed
sample 56, line 1450: 0.000379823323 => 0.000377499084
+sample 56, line 1450: 0.000379823323 => 0.000377499084
 sample 57, line 1451: 0.000391271838 => 0.000386961327
 sample 58, line 1452: 0.000391388312 => 0.000387057593
 sample 59, line 1453: 0.000399710669 => 0.000393936053
@@ -5126,7 +5005,7 @@ sample 38, line 1760: 0.000482738105 => 0.000462558555
 sample 39, line 1761: 0.000492680061 => 0.000470775621
 sample 3, line 1807: 0.000521840993 => 0.000494877246
 sample 4, line 1808: 0.00051620818 => 0.000490221703
-50% Processed
sample 45, line 1849: 0.000427162158 => 0.000415505885
+sample 45, line 1849: 0.000427162158 => 0.000415505885
 sample 46, line 1850: 0.000432214525 => 0.000419675878
 sample 47, line 1851: 0.000433110312 => 0.00042041522
 sample 48, line 1852: 0.000432708708 => 0.000420083754
@@ -5267,7 +5146,7 @@ sample 31, line 2163: 0.000558387779 => 0.000523813528
 sample 32, line 2164: 0.000544507813 => 0.000512357637
 sample 33, line 2165: 0.000552644779 => 0.000519073517
 sample 34, line 2166: 0.000552042096 => 0.000518576091
-60% Processed
sample 49, line 2181: 0.000477178546 => 0.000451147503
+sample 49, line 2181: 0.000477178546 => 0.000451147503
 sample 50, line 2182: 0.000462104421 => 0.000438642692
 sample 51, line 2183: 0.000449487678 => 0.000428176413
 sample 52, line 2184: 0.000446294755 => 0.000425527709
@@ -5408,7 +5287,7 @@ sample 34, line 2494: 0.000561944791 => 0.00052146574
 sample 35, line 2495: 0.000563633454 => 0.000522866577
 sample 36, line 2496: 0.000531049154 => 0.000495836119
 sample 37, line 2497: 0.000541199115 => 0.000504256067
-70% Processed
sample 77, line 2537: 0.000477642519 => 0.000441955162
+sample 77, line 2537: 0.000477642519 => 0.000441955162
 sample 78, line 2538: 0.000489208673 => 0.000451656844
 sample 79, line 2539: 0.000499683723 => 0.000460443309
 sample 80, line 2540: 0.000490265375 => 0.000452543205
@@ -5547,7 +5426,7 @@ sample 22, line 2892: 0.000586473616 => 0.000533242613
 sample 23, line 2893: 0.000588622992 => 0.000535045508
 sample 24, line 2894: 0.000584587629 => 0.000531660649
 sample 25, line 2895: 0.000580064836 => 0.000527866933
-80% Processed
sample 47, line 2917: 0.000491997169 => 0.000446754828
+sample 47, line 2917: 0.000491997169 => 0.000446754828
 sample 48, line 2918: 0.000488422404 => 0.000443746687
 sample 49, line 2919: 0.000484033633 => 0.000440053567
 sample 50, line 2920: 0.000476966321 => 0.000434106472
@@ -5687,7 +5566,7 @@ sample 32, line 3230: 0.000538322318 => 0.000485737127
 sample 33, line 3231: 0.000550321187 => 0.000495834094
 sample 34, line 3232: 0.000552756828 => 0.000497883669
 sample 35, line 3233: 0.000551281322 => 0.000496642041
-90% Processed
sample 62, line 3260: 0.000178040762 => 0.000119303493
+sample 62, line 3260: 0.000178040762 => 0.000119303493
 sample 63, line 3261: 0.000174913512 => 0.00011574935
 sample 64, line 3262: 0.000171941196 => 0.000112371291
 sample 65, line 3263: 0.000178040529 => 0.000119303228
@@ -5826,9 +5705,7 @@ sample 7, line 3615: 0.000147414743 => 8.44967995e-05
 sample 8, line 3616: 0.000147356128 => 8.4430183e-05
 sample 9, line 3617: 0.000149079497 => 8.63888041e-05
 sample 10, line 3618: 0.000145431666 => 8.22430183e-05
-100% Processed
-Working
-0% Processed
sample 45, line 45: 0.000290619239 => 0.000290619239
+sample 45, line 45: 0.000290619239 => 0.000290619239
 sample 46, line 46: 0.00027536563 => 0.00027536563
 sample 47, line 47: 0.000284910842 => 0.000284910842
 sample 48, line 48: 0.000276024279 => 0.000276024279
@@ -5967,7 +5844,7 @@ sample 30, line 358: 0.000340305385 => 0.000340305385
 sample 31, line 359: 0.000336303987 => 0.000336303987
 sample 32, line 360: 0.000339195307 => 0.000339195307
 sample 33, line 361: 0.000346355722 => 0.000346355722
-10% Processed
sample 49, line 377: 0.000286205031 => 0.000286205031
+sample 49, line 377: 0.000286205031 => 0.000286205031
 sample 50, line 378: 0.000266631891 => 0.000266631891
 sample 51, line 379: 0.000266020565 => 0.000266020565
 sample 52, line 380: 0.00026580703 => 0.00026580703
@@ -6107,7 +5984,7 @@ sample 34, line 690: 0.000318394857 => 0.000318394857
 sample 35, line 691: 0.000323348853 => 0.000323348853
 sample 36, line 692: 0.000333178352 => 0.000333178352
 sample 37, line 693: 0.00032398061 => 0.00032398061
-20% Processed
sample 68, line 724: 0.000330440467 => 0.000330440467
+sample 68, line 724: 0.000330440467 => 0.000330440467
 sample 69, line 725: 0.000335332559 => 0.000335332559
 sample 70, line 726: 0.000323408312 => 0.000323408312
 sample 71, line 727: 0.000349924725 => 0.000349924725
@@ -6245,7 +6122,7 @@ sample 13, line 1079: 0.000384069222 => 0.000384069222
 sample 14, line 1080: 0.000367241882 => 0.000367241882
 sample 15, line 1081: 0.000411912159 => 0.000411912159
 sample 16, line 1082: 0.000410407927 => 0.000410407927
-30% Processed
sample 47, line 1113: 0.000347713154 => 0.000347713154
+sample 47, line 1113: 0.000347713154 => 0.000347713154
 sample 48, line 1114: 0.000348245259 => 0.000348245259
 sample 49, line 1115: 0.00034509541 => 0.00034509541
 sample 50, line 1116: 0.000345106935 => 0.000345106935
@@ -6385,7 +6262,7 @@ sample 32, line 1426: 0.000446760125 => 0.000446760125
 sample 33, line 1427: 0.000450601685 => 0.000450601685
 sample 34, line 1428: 0.000450713007 => 0.000450713007
 sample 35, line 1429: 0.000435958151 => 0.000435958151
-40% Processed
sample 52, line 1446: 0.000393217313 => 0.000393217313
+sample 52, line 1446: 0.000393217313 => 0.000393217313
 sample 53, line 1447: 0.000400495599 => 0.000400495599
 sample 54, line 1448: 0.000385479303 => 0.000385479303
 sample 55, line 1449: 0.000381387596 => 0.000381387596
@@ -6525,7 +6402,7 @@ sample 36, line 1758: 0.000474149303 => 0.000474149303
 sample 37, line 1759: 0.000462928263 => 0.000462928263
 sample 38, line 1760: 0.000460695795 => 0.000460695795
 sample 39, line 1761: 0.000479306938 => 0.000479306938
-50% Processed
sample 44, line 1848: 0.000415760267 => 0.000415760267
+sample 44, line 1848: 0.000415760267 => 0.000415760267
 sample 45, line 1849: 0.000413297588 => 0.000413297588
 sample 46, line 1850: 0.000424661819 => 0.000424661819
 sample 47, line 1851: 0.000417667266 => 0.000417667266
@@ -6667,7 +6544,7 @@ sample 30, line 2162: 0.000518572342 => 0.000518572342
 sample 31, line 2163: 0.000510143524 => 0.000510143524
 sample 32, line 2164: 0.00051402289 => 0.00051402289
 sample 33, line 2165: 0.000526306918 => 0.000526306918
-60% Processed
sample 48, line 2180: 0.00043400281 => 0.00043400281
+sample 48, line 2180: 0.00043400281 => 0.00043400281
 sample 49, line 2181: 0.000428732019 => 0.000428732019
 sample 50, line 2182: 0.000431211491 => 0.000431211491
 sample 51, line 2183: 0.000424356695 => 0.000424356695
@@ -6809,7 +6686,7 @@ sample 34, line 2494: 0.00052908744 => 0.00052908744
 sample 35, line 2495: 0.000526970718 => 0.000526970718
 sample 36, line 2496: 0.000524371339 => 0.000524371339
 sample 37, line 2497: 0.000529367593 => 0.000529367593
-70% Processed
sample 70, line 2530: 0.000459257484 => 0.000459257484
+sample 70, line 2530: 0.000459257484 => 0.000459257484
 sample 71, line 2531: 0.000443657947 => 0.000443657947
 sample 72, line 2532: 0.000463619974 => 0.000463619974
 sample 73, line 2533: 0.000467699603 => 0.000467699603
@@ -6946,7 +6823,7 @@ sample 14, line 2884: 0.00046759934 => 0.00046759934
 sample 15, line 2885: 0.000499485235 => 0.000499485235
 sample 16, line 2886: 0.000519024557 => 0.000519024557
 sample 17, line 2887: 0.000523890718 => 0.000523890718
-80% Processed
sample 46, line 2916: 0.000451731932 => 0.000451731932
+sample 46, line 2916: 0.000451731932 => 0.000451731932
 sample 47, line 2917: 0.000437886483 => 0.000437886483
 sample 48, line 2918: 0.00043894854 => 0.00043894854
 sample 49, line 2919: 0.000440035394 => 0.000440035394
@@ -7087,7 +6964,7 @@ sample 31, line 3229: 0.000537062588 => 0.000537062588
 sample 32, line 3230: 0.000507651654 => 0.000507651654
 sample 33, line 3231: 0.000500509748 => 0.000500509748
 sample 34, line 3232: 0.000507390243 => 0.000507390243
-90% Processed
sample 53, line 3251: 0.000119596916 => 0.000119596916
+sample 53, line 3251: 0.000119596916 => 0.000119596916
 sample 54, line 3252: 0.000119865741 => 0.000119865741
 sample 55, line 3253: 0.000120113065 => 0.000120113065
 sample 56, line 3254: 0.000123207792 => 0.000123207792
@@ -7226,9 +7103,7 @@ sample 36, line 3562: 9.42921615e-05 => 9.42921615e-05
 sample 37, line 3563: 9.58979726e-05 => 9.58979726e-05
 sample 38, line 3564: 9.71553745e-05 => 9.71553745e-05
 sample 1, line 3609: 9.45375868e-05 => 9.45375868e-05
-100% Processed
-Working
-0% Processed
sample 72, line 202: 0.000137360752 => 0.000292044568
+sample 72, line 202: 0.000137360752 => 0.000292044568
 sample 73, line 203: 0.000144011152 => 0.000304890585
 sample 74, line 204: 0.000142328878 => 0.000301641078
 sample 75, line 205: 0.000142455538 => 0.000301885736
@@ -7368,7 +7243,7 @@ sample 35, line 685: 0.00015074866 => 0.000317904861
 sample 36, line 686: 0.000147310901 => 0.000311264432
 sample 37, line 687: 0.000162874203 => 0.000341326752
 sample 38, line 688: 0.000145116661 => 0.000307026004
-10% Processed
sample 90, line 870: -0.000162264827 => -0.000289890937
+sample 90, line 870: -0.000162264827 => -0.000289890937
 sample 91, line 871: 0.000154499226 => 0.000322203754
 sample 92, line 872: 0.000132517889 => 0.000279728417
 sample 93, line 873: 0.000138418967 => 0.000291131285
@@ -7501,7 +7376,7 @@ sample 46, line 1346: 0.000214465443 => 0.000438078652
 sample 3, line 1433: 0.000166279438 => 0.000344967085
 sample 4, line 1434: 0.000139802374 => 0.000293804492
 sample 5, line 1435: 0.000162388387 => 0.000337448266
-20% Processed
sample 72, line 1632: 0.000200401861 => 0.000364343492
+sample 72, line 1632: 0.000200401861 => 0.000364343492
 sample 73, line 1633: 0.000208613841 => 0.000377811476
 sample 74, line 1634: 0.000200381561 => 0.000364310199
 sample 75, line 1635: 0.000195676577 => 0.000356593834
@@ -7642,7 +7517,7 @@ sample 35, line 2115: 0.000288772775 => 0.000509275406
 sample 36, line 2116: 0.000280453387 => 0.000495631269
 sample 37, line 2117: 0.000273423357 => 0.000484101732
 sample 38, line 2118: 0.000261742156 => 0.000464944085
-30% Processed
sample 91, line 2301: 0.000174095912 => 0.000304202423
+sample 91, line 2301: 0.000174095912 => 0.000304202423
 sample 92, line 2302: 0.000220791859 => 0.000373368734
 sample 93, line 2303: 0.000225614887 => 0.000380512632
 sample 94, line 2304: 0.000236821841 => 0.000397112438
@@ -7780,7 +7655,7 @@ sample 8, line 2868: 0.000274836464 => 0.000453419921
 sample 9, line 2869: 0.000245205883 => 0.000409530931
 sample 10, line 2870: 0.000265710492 => 0.000439902478
 sample 11, line 2871: 0.000269167707 => 0.000445023325
-40% Processed
sample 73, line 3063: 0.000258388493 => 0.000408786623
+sample 73, line 3063: 0.000258388493 => 0.000408786623
 sample 74, line 3064: 0.000270440272 => 0.000425303239
 sample 75, line 3065: 0.000248488912 => 0.000395219533
 sample 76, line 3066: 0.000262592512 => 0.00041454811
@@ -7921,7 +7796,7 @@ sample 35, line 3545: 0.000322109903 => 0.000496114977
 sample 36, line 3546: 0.000328466005 => 0.000504825831
 sample 37, line 3547: 0.000331821589 => 0.000509424563
 sample 38, line 3548: 0.000337171572 => 0.000516756559
-50% Processed
sample 92, line 3732: 0.000267140043 => 0.000417893225
+sample 92, line 3732: 0.000267140043 => 0.000417893225
 sample 93, line 3733: 0.000282346067 => 0.000438212114
 sample 94, line 3734: 0.000293925696 => 0.00045368527
 sample 95, line 3735: 0.000296468759 => 0.000457083412
@@ -8066,7 +7941,7 @@ sample 14, line 4304: 0.000322850712 => 0.000492336019
 sample 15, line 4305: 0.000317202939 => 0.000484789242
 sample 16, line 4306: 0.000328796712 => 0.000500281298
 sample 17, line 4307: 0.000352717791 => 0.000532245588
-60% Processed
sample 73, line 4493: 0.000296147424 => 0.000457581868
+sample 73, line 4493: 0.000296147424 => 0.000457581868
 sample 74, line 4494: 0.000304828165 => 0.000469113141
 sample 75, line 4495: 0.000298656756 => 0.000460915201
 sample 76, line 4496: 0.000295959588 => 0.000457332352
@@ -8207,7 +8082,7 @@ sample 36, line 4976: 0.000331538817 => 0.000504594882
 sample 37, line 4977: 0.00034080699 => 0.000516906485
 sample 38, line 4978: 0.000360763894 => 0.000543416721
 sample 39, line 4979: 0.000351163326 => 0.000530663574
-70% Processed
sample 93, line 5163: 0.00028516067 => 0.000441829557
+sample 93, line 5163: 0.00028516067 => 0.000441829557
 sample 94, line 5164: 0.00031779104 => 0.000485210296
 sample 95, line 5165: 0.000301257649 => 0.000463229831
 sample 96, line 5166: 0.000316989375 => 0.000484144516
@@ -8359,7 +8234,7 @@ sample 21, line 5741: 0.000337464764 => 0.000511365705
 sample 22, line 5742: 0.000340270723 => 0.000515096112
 sample 23, line 5743: 0.000264998438 => 0.000415024698
 sample 24, line 5744: 0.00029076956 => 0.000449286347
-80% Processed
sample 73, line 5923: 0.000308439223 => 0.000461542246
+sample 73, line 5923: 0.000308439223 => 0.000461542246
 sample 74, line 5924: 0.00031505138 => 0.000470178735
 sample 75, line 5925: 0.00030659046 => 0.000459127479
 sample 76, line 5926: 0.000285190239 => 0.000431175516
@@ -8501,7 +8376,7 @@ sample 36, line 6406: 0.00034337712 => 0.000507176484
 sample 37, line 6407: 0.000337612146 => 0.000499646546
 sample 38, line 6408: 0.000342766289 => 0.000506378645
 sample 39, line 6409: 0.000356714329 => 0.000524596919
-90% Processed
sample 94, line 6594: 5.85257258e-05 => 0.000119657271
+sample 94, line 6594: 5.85257258e-05 => 0.000119657271
 sample 95, line 6595: 6.04473789e-05 => 0.000123676508
 sample 96, line 6596: 6.2983956e-05 => 0.000128981891
 sample 97, line 6597: 6.35451361e-05 => 0.000130155628
@@ -8657,7 +8532,6 @@ sample 27, line 7177: 5.01022805e-05 => 0.0001020392
 sample 28, line 7178: 5.17278677e-05 => 0.0001054392
 sample 29, line 7179: 5.41724548e-05 => 0.00011055218
 sample 30, line 7180: 4.99482994e-05 => 0.000101717141
-100% Processed
 
 Testing addHolds exception (1)...
 **USER ERROR** The list of identifiers to be held must be less than or equal to the total number of identitifers.
diff --git a/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.cpp b/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.cpp
index 5de43f51ea9721ceec5abaf0bdcb943a0e1df139..27fe031fafd5cc137c9e7f52c7b68479476a013c 100644
--- a/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.cpp
+++ b/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.cpp
@@ -34,7 +34,7 @@ namespace Isis {
    *
    * @param pvl Valid Isis3 cube label.
    */
-  EquatorialCylindricalShape::EquatorialCylindricalShape(Target *target, Pvl &pvl) : 
+  EquatorialCylindricalShape::EquatorialCylindricalShape(Target *target, Pvl &pvl) :
       DemShape(target, pvl) {
     setName("EquatorialCylindricalShape");
 
@@ -63,11 +63,11 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Destructor for Isis3 Equatorial Cylindrical shape model
    */
   EquatorialCylindricalShape::~EquatorialCylindricalShape() {
-    
+
     delete m_minRadius;
     m_minRadius = NULL;
 
@@ -76,14 +76,14 @@ namespace Isis {
    }
 
 
-  /** 
+  /**
    * Finds the surface intersection point.
-   *  
-   * @param observerBodyFixedPosition  Three dimensional position of the observer, 
+   *
+   * @param observerBodyFixedPosition  Three dimensional position of the observer,
    *                                   in the coordinate system of the target body.
-   * @param observerLookVectorToTarget Three dimensional direction vector from 
+   * @param observerLookVectorToTarget Three dimensional direction vector from
    *                                   the observer to the target.
-   *  
+   *
    * @return @b bool Indicates whether this shape model found a valid surface intersection.
    */
   bool EquatorialCylindricalShape::intersectSurface(vector<double> observerBodyFixedPos,
@@ -91,7 +91,7 @@ namespace Isis {
 
     // try to intersect the surface using the DemShape method
     // if this is successful, return
-    // 
+    //
     // otherwise, (i.e. DemShape::intersectSurface() fails) we will attempt to
     // intersect using the following iterative method...
     if (!DemShape::intersectSurface(observerBodyFixedPos, observerLookVectorToTarget)) {
@@ -142,7 +142,7 @@ namespace Isis {
       // JWB - The commented code here is an alternate way of doing this...
       //       which method has less expensive computing???
       //       I believe the alternate one may be (no need for cosine after naif routines)
-      // 
+      //
       //
       // find the vector to the point found by orthogonally projecting the observer position vector
       // onto the line containing the look direction vector
@@ -190,7 +190,7 @@ namespace Isis {
         return hasIntersection();
       }
 
-      double d0 = observerdist * cospsi0 - radiusDiff; 
+      double d0 = observerdist * cospsi0 - radiusDiff;
       double dm = observerdist * cospsi0 + radiusDiff;
 
       // Set the properties at the first test observation point
@@ -216,7 +216,7 @@ namespace Isis {
       // Set dalpha to be half the grid spacing for nyquist sampling
       //double dalpha = (PI/180.0)/(2.0*p_demScale);
       double cmin = cos((90.0 - 1.0 / (2.0 * demScale())) * DEG2RAD);
-      double dalpha = MAX(cos(g1lat * DEG2RAD), cmin) / (2.0 * demScale() * DEG2RAD);
+      double dalpha = MAX(cos(g1lat * DEG2RAD), cmin) / (2.0 * demScale() * RAD2DEG);
 
       // Previous Sensor version used local version of this method with lat and lon doubles.  Steven said
       // it didn't make a significant difference in speed.
@@ -384,14 +384,14 @@ namespace Isis {
         // put in a test (above) for dd being smaller than the pixel
         // convergence tolerance.  If so the loop exits without an
         // intersection
-        dalpha = MAX(cos(g2lat * DEG2RAD), cmin) / (2.0 * demScale() * DEG2RAD);
+        dalpha = MAX(cos(g2lat * DEG2RAD), cmin) / (2.0 * demScale() * RAD2DEG);
       } // end while
 
       SpiceDouble intersectionPoint[3];
       SpiceBoolean found;
 
       NaifStatus::CheckErrors();
-      surfpt_c(&observerBodyFixedPos[0], &observerLookVectorToTarget[0], plen, plen, plen, 
+      surfpt_c(&observerBodyFixedPos[0], &observerLookVectorToTarget[0], plen, plen, plen,
                intersectionPoint, &found);
       NaifStatus::CheckErrors();
 
@@ -412,4 +412,3 @@ namespace Isis {
   }
   // Do nothing since the DEM intersection was already successful
 }
-
diff --git a/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.h b/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.h
index c4d6a23f40d3cd1f502dba1653c37eefed544f41..7f4520bd1e2e7d695bee83684d5542a7b3b8ad38 100644
--- a/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.h
+++ b/isis/src/base/objs/EquatorialCylindricalShape/EquatorialCylindricalShape.h
@@ -30,8 +30,8 @@ namespace Isis {
   /**
    * @brief Define shapes and provide utilities for shapes stored as Isis3 EquatorialCylindrical map
    *
-   * This class will define shapes of Isis3 target bodies with the shape defined by an 
-   * EquatorialCylindrical map, as well as provide utilities to retrieve radii and photometric 
+   * This class will define shapes of Isis3 target bodies with the shape defined by an
+   * EquatorialCylindrical map, as well as provide utilities to retrieve radii and photometric
    * information for the intersection point.
    *
    * @author 2010-07-30 Debbie A. Cook
@@ -47,6 +47,9 @@ namespace Isis {
    *                           intersection in intersectSurface() method to prevent early return
    *                           and attempt the iterative method even when the ellipsoid is not
    *                           intersected. Fixes #1438
+   *   @history 2018-01-05 Cole Neubauer - Fixed units conversion in intersectSurface so that the
+   *                           loop is stepping by radians per pixel, as recommended by Jeff
+   *                           Anderson (LROC team). Fixes #5245
    */
   class EquatorialCylindricalShape : public DemShape {
     public:
@@ -67,4 +70,3 @@ namespace Isis {
 };
 
 #endif
-
diff --git a/isis/src/base/objs/FileName/FileName.cpp b/isis/src/base/objs/FileName/FileName.cpp
index 136fa9726661881fdd3b6cd284b69b59754f20d7..807422b7486909e383727a1712f2acbb0ff81579 100644
--- a/isis/src/base/objs/FileName/FileName.cpp
+++ b/isis/src/base/objs/FileName/FileName.cpp
@@ -40,41 +40,99 @@ using namespace std;
 
 namespace Isis {
 
+  /**
+   * Constructs an empty FileName object.
+   */
   FileName::FileName() {
     m_d = new Data;
   }
 
-
+  /**
+   * Constructs a FileName object using a char pointer as a file name.
+   *
+   * @param file char pointer representing new filename
+   */
   FileName::FileName(const char *file) {
     m_d = new Data;
     m_d->setOriginal(file);
   }
 
-
+  /**
+   * Constructs a FileName object using a QString as a file name.
+   *
+   * @param file Qstring representing new filename
+   */
   FileName::FileName(const QString &file) {
     m_d = new Data;
     m_d->setOriginal(file);
   }
 
-
+  /**
+   * Constructs a copy of a FileName object using another FileName object.
+   *
+   * @param &other FileName object to copy.
+   */
   FileName::FileName(const FileName &other) : m_d(other.m_d) {
   }
 
-
+  /**
+   * Destroys the FileName object.
+   */
   FileName::~FileName() {
   }
 
-
+  /**
+   * Returns the path of the original file name. For *nix operating
+   * systems this includes everything up to but not including the
+   * last slash "/". For filenames created without any slashes
+   * the current working directory will be returned.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/home/me/img/picture.jpg"
+   *   originalPath() gives:
+   *    "/home/me/img"
+   * </pre>
+   *
+   * @return QString of the path portion of the original filename.
+   */
   QString FileName::originalPath() const {
     return QFileInfo(m_d->original(false)).path();
   }
 
-
+  /**
+   * Returns the path of the file name. For *nix operating
+   * systems this includes everything up to but not including the
+   * last slash "/". For filenames created without any slashes
+   * the current working directory will be returned.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/home/me/img/picture.jpg"
+   *   path() gives:
+   *    "/home/me/img"
+   * </pre>
+   *
+   * @return QString of the path portion of the filename.
+   */
   QString FileName::path() const {
     return QFileInfo(expanded()).path();
   }
 
-
+  /**
+   * Returns a QString of the attributes in a filename, attributes are expected to be of type
+   * CubeAttributeInput or CubeAttributeOutput. Filenames without any attributes return an
+   * empty QString.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/tmp/Peaks.cub+Bsq"
+   *   attributes() gives:
+   *    "Bsq"
+   * </pre>
+   *
+   * @return QString of the attributes specified in the filename.
+   */
   QString FileName::attributes() const {
     QString result;
     QString fileNameWithAttribs = QFileInfo(m_d->original(true)).fileName();
@@ -87,32 +145,98 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Returns the name of the file without the path and without extensions.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/tmp/Peaks.cub.gz"
+   *   baseName() gives:
+   *    "Peaks"
+   * </pre>
+   *
+   * @return QString containing every character excluding the path and all extensions.
+   */
   QString FileName::baseName() const {
     return QFileInfo(m_d->original(false)).completeBaseName();
   }
 
-
+  /**
+   * Returns the name of the file excluding the path and the attributes in the file name.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/tmp/Peaks.cub+Bsq"
+   *   name() gives:
+   *    "Peaks.cub"
+   * </pre>
+   *
+   * @return QString containing every character in the file name exluding the path and attributes
+   * of the file.
+   */
   QString FileName::name() const {
     return QFileInfo(m_d->original(false)).fileName();
   }
 
-
+  /**
+   * Returns the last extension of the file name.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/tmp/Peaks.cub.gz"
+   *   extension() gives:
+   *    "gz"
+   * </pre>
+   *
+   * @return QString containing every character in the file name after the last "." character.
+   */
   QString FileName::extension() const {
     return QFileInfo(m_d->original(false)).suffix();
   }
 
-
+  /**
+   * Returns a QString of the full file name including the file path, excluding the attributes.
+   * Any Isis Preferences or environment variables indicated by $, are changed to what they
+   * represent.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+   *   expanded() gives:
+   *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
+   * </pre>
+   *
+   * @return QString
+   */
   QString FileName::expanded() const {
     return m_d->expanded(false);
   }
 
-
+  /**
+   * Returns the full file name including the file path
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+   *   original() gives:
+   *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+   * </pre>
+   *
+   * @return QString containing every character in the file name and the path
+   */
   QString FileName::original() const {
     return m_d->original(true);
   }
 
-
+  /**
+   * Adds a new extension to the file name. If the current extension is the same as the
+   * new extension it will return an unchanged FileName object.
+   *
+   * @param newExtension The new file extension to be added at the end of the file name after all
+   * exisiting extensions.
+   *
+   * @return FileName object with added extension
+   */
   FileName FileName::addExtension(const QString &newExtension) const {
     FileName result = *this;
 
@@ -129,7 +253,11 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Removes all extensions in the file name
+   *
+   * @return FileName object with all extensions removed
+   */
   FileName FileName::removeExtension() const {
     QString attributesStr = attributes();
 
@@ -142,7 +270,13 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Sets all current file extensions to a new extension in the file name.
+   *
+   * @param newExtension The new file extension to replace any current file extensions with
+   *
+   * @return FileName object with all existing extensions replaced by the new extension
+   */
   FileName FileName::setExtension(const QString &newExtension) const {
     FileName result = *this;
 
@@ -153,24 +287,44 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Checks to see if a file name is versioned by date or numerically. Returns true if file is
+   * versioned by date or numerically; returns false otherwise.
+   *
+   * @return Boolean
+   */
   bool FileName::isVersioned() const {
     validateVersioningState();
 
     return isNumericallyVersioned() || isDateVersioned();
   }
 
-
+  /**
+   * Checks if the file name is versioned numerically. Returns true if the file is versioned
+   * numerically; returns false otherwise.
+   *
+   * @return Boolean
+   */
   bool FileName::isNumericallyVersioned() const {
     return FileName(expanded()).name().contains("?");
   }
 
-
+  /**
+   * Checks if the file name is versioned by date. Returns true if the file is versioned
+   * by date; returns false otherwise.
+   *
+   * @return Boolean
+   */
   bool FileName::isDateVersioned() const {
     return FileName(expanded()).name().contains(QRegExp("\\{.*\\}"));
   }
 
-
+  /**
+   * Searches the directory specified in the file name for the highest version of the file name.
+   * Returns a FileName object with the file name changed to reflect the highest version.
+   *
+   * @return FileName object
+   */
   FileName FileName::highestVersion() const {
     validateVersioningState();
 
@@ -197,7 +351,15 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Updates the file name to be the latest version. If the file is versioned by date the
+   * newest version will be the current date. If the file is versioned numerically, the newest
+   * version will be the current version plus one.
+   *
+   * @return FileName object with the new version file name.
+   *
+   * @throws Isis::IException::Unknown
+   */
   FileName FileName::newVersion() const {
     validateVersioningState();
 
@@ -238,7 +400,16 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Returns a FileName object of the same file name but versioned numerically by the
+   * number passed in as a parameter.
+   *
+   * @param versionNumber number to version the new FileName object
+   *
+   * @return FileName object with the new version file name.
+   *
+   * @throws Isis::IException::Unknown
+   */
   FileName FileName::version(long versionNumber) const {
     QString file = FileName(expanded()).name();
 
@@ -269,24 +440,56 @@ namespace Isis {
     return FileName(originalPath() + "/" + file);
   }
 
-
+  /**
+   * Returns a FileName object of the same file name but versioned by the
+   * date passed in as a parameter.
+   *
+   * @param versionDate QDate to version the new FileName object
+   *
+   * @return FileName object with the new version file name.
+   *
+   */
   FileName FileName::version(QDate versionDate) const {
     QString newName = versionDate.toString(fileNameQDatePattern());
 
     return FileName(originalPath() + "/" + newName);
   }
 
-
+  /**
+   * Returns true if the file exists; false otherwise.
+   * If the file is a symlink that points to a nonexistent file, false is returned.
+   *
+   * @return Boolean
+   */
   bool FileName::fileExists() const {
     return QFileInfo(expanded()).exists();
   }
 
-
+  /**
+   * Returns the path of the file's parent directory as a QDir object
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "/tmp/Peaks.cub+Bsq"
+   *   dir() gives:
+   *    "/tmp/"
+   * </pre>
+   *
+   * @return QDir
+   */
   QDir FileName::dir() const {
     return QFileInfo(expanded()).dir();
   }
 
-
+  /**
+   * Creates a temporary file and returns a FileName object created using the temporary file.
+   *
+   * @param templateFileName the file name used to create the temporary file.
+   *
+   * @return FileName object created using the temporary file
+   *
+   * @throws Isis::IException::Io
+   */
   FileName FileName::createTempFile(FileName templateFileName) {
     QString preppedFileName = QString("%1/%2XXXXXX.%3").arg(templateFileName.path())
         .arg(templateFileName.baseName()).arg(templateFileName.extension());
@@ -310,18 +513,45 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Returns a QString of the full file name including the file path, excluding the attributes
+   * with any Isis Preferences or environment variables indicated by $, changed to what they
+   * represent.
+   *
+   * <pre>
+   *   for a full file specification of:
+   *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+   *   toString() gives:
+   *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
+   * </pre>
+   *
+   * @return QString
+   */
   QString FileName::toString() const {
     return expanded();
   }
 
-
+  /**
+   * Clears the current contents of the FileName object and reinitializes it with
+   * the argument.
+   *
+   * @param rhs FileName to replace the current contents of the object.
+   *
+   * @return void
+   */
   FileName &FileName::operator=(const FileName &rhs) {
     m_d = rhs.m_d;
     return *this;
   }
 
-
+  /**
+   * Compares equality of two FileName objects. Returns true if the two objects are equal
+   * and false otherwise.
+   *
+   * @param rhs FileName to compare the current FileName object to.
+   *
+   * @return Boolean
+   */
   bool FileName::operator==(const FileName &rhs) {
     QString expandedOfThis = expanded();
     QString canonicalOfThis = QFileInfo(expandedOfThis).canonicalFilePath();
@@ -342,12 +572,24 @@ namespace Isis {
     return equal;
   }
 
-
+  /**
+   * Compares equality of two FileName objects. Returns false if the two objects are equal
+   * and true otherwise.
+   *
+   * @param rhs FileName to compare the current FileName object to.
+   *
+   * @return Boolean
+   */
   bool FileName::operator!=(const FileName &rhs) {
     return !(*this == rhs);
   }
 
-
+  /**
+   * This looks through the directory of the file and checks for the highest version date of
+   * the file that is versioned date.
+   *
+   * @return QDate
+   */
   QDate FileName::highestVersionDate() const {
     QString fileQDatePattern = fileNameQDatePattern();
 
@@ -405,7 +647,12 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * This looks through the directory of the file and checks for the highest version number of
+   * the file that is versioned numerically.
+   *
+   * @return long
+   */
   long FileName::highestVersionNum() const {
     QString file = FileName(expanded()).name();
     int result = 0;
@@ -441,7 +688,10 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * This verifies the class invariant when using versioning - that the FileName is in an acceptable
+   * state to find file version numbers.
+   */
   void FileName::validateVersioningState() const {
     QString file = QFileInfo(expanded()).fileName();
 
@@ -484,6 +734,12 @@ namespace Isis {
     }
   }
 
+  /**
+   * This changes the files format. Specifically quotes everything not in {} with single quotes
+   * and removes the {} from the file name.
+   *
+   * @return QString
+   */
   QString FileName::fileNameQDatePattern() const {
     // We need to quote everything not in {} with single quotes.
     QString file = FileName(expanded()).name();
@@ -508,7 +764,12 @@ namespace Isis {
     return file;
   }
 
-
+  /**
+   * This returns a QPair of the text (before, after) a version number in a file. Before being
+   * the text before the version number and after being the text after the version number.
+   *
+   * @return QPair
+   */
   QPair<QString, QString> FileName::splitNameAroundVersionNum() const {
     QString file = FileName(expanded()).name();
     QString before;
@@ -525,7 +786,9 @@ namespace Isis {
     return QPair<QString, QString>(before, after);
   }
 
-
+   /**
+    * Data constructor, creates a new Data object.
+    */
   FileName::Data::Data() {
     m_originalFileNameString = NULL;
     m_expandedFileNameString = NULL;
@@ -534,7 +797,11 @@ namespace Isis {
     m_expandedFileNameString = new QString;
   }
 
-
+  /**
+   * Data copy constructor, creates a copy of a Data object.
+   *
+   * @param &other Data object to copy
+   */
   FileName::Data::Data(const Data &other) : QSharedData(other) {
     m_originalFileNameString = NULL;
     m_expandedFileNameString = NULL;
@@ -543,7 +810,9 @@ namespace Isis {
     m_expandedFileNameString = new QString(*other.m_expandedFileNameString);
   }
 
-
+  /**
+   * Destroys the Data object.
+   */
   FileName::Data::~Data() {
     delete m_originalFileNameString;
     m_originalFileNameString = NULL;
@@ -552,7 +821,15 @@ namespace Isis {
     m_expandedFileNameString = NULL;
   }
 
-
+  /**
+   * Returns the original file name, stored in m_originalFileNameString. Boolean
+   * parameter includeAttributes determines if the returned file name has the variables
+   * included.
+   *
+   * @param includeAttributes boolean to represent whether the attricubtes should be included.
+   *
+   * @return Qstring
+   */
   QString FileName::Data::original(bool includeAttributes) const {
     QString result = *m_originalFileNameString;
 
@@ -567,7 +844,13 @@ namespace Isis {
     return result;
   }
 
-
+  /**
+   * Sets the original file name, stored in m_originalFileNameString. QString parameter
+   * is the new file name to store in m_originalFileNameString. The expanded verison is also
+   * set and stored in m_expandedFileNameString when this method is called.
+   *
+   * @param originalStr the new file name
+   */
   void FileName::Data::setOriginal(const QString &originalStr) {
     *m_originalFileNameString = originalStr;
 
@@ -633,7 +916,15 @@ namespace Isis {
     *m_expandedFileNameString = expandedStr;
   }
 
-
+  /**
+   * Returns the expanded file name, stored in m_expandedFileNameString. Boolean
+   *  parameter includeAttributes determines if the returned file name has the variables
+   * included.
+   *
+   * @param includeAttributes boolean to represent whether the attricubtes should be included.
+   *
+   * @return Qstring
+   */
   QString FileName::Data::expanded(bool includeAttributes) const {
     QString result = *m_expandedFileNameString;
 
diff --git a/isis/src/base/objs/FileName/FileName.h b/isis/src/base/objs/FileName/FileName.h
index abfcdfbf42e4860e4c3e243559c2079ad376eccd..efd86aa900989de56ae793d89395e55a42bf0390 100644
--- a/isis/src/base/objs/FileName/FileName.h
+++ b/isis/src/base/objs/FileName/FileName.h
@@ -108,121 +108,29 @@ namespace Isis {
    *                           ISIS coding standards and removed include for std::string.
    *   @history 2016-06-21 Kris Becker - Properly forward declare QPair as struct not class
    *   @history 2017-04-21 Cole Neubauer - Updated documentation for the class Fixes #4121
+   *   @history 2018-04-06 Kaitlyn Lee - Moved method documentation to cpp file and
+   *                           updated it for consistency. Fixes #5230.
+
    */
   class FileName {
     public:
-      //! Constructs an empty FileName object.
+      // Constructors
       FileName();
-      /**
-       * Constructs a FileName object using a char pointer as a file name.
-       * @param *fileName char pointer representing new filename
-       */
       FileName(const char *fileName);
-      /**
-       * Constructs a FileName object using a QString as a file name.
-       * @param &fileName Qstring representing new filename
-       */
       FileName(const QString &fileName);
-      //! Copy Constructor, creates a copy of a FileName object.
-      /**
-       * Constructs a copy of a FileName object using another FileName object.
-       * @param &other FileName object to copy.
-       */
+
+      // Copy Constructor, creates a copy of a FileName object.
       FileName(const FileName &other);
-      //! Destroys the FileName object.
-      ~FileName();
 
+      // Destroys the FileName Object
+      ~FileName();
 
-      /**
-       * Returns the path of the original file name. For *nix operating
-       * systems this includes everything up to but not including the
-       * last slash "/". For filenames created without any slashes
-       * the current working directory will be returned.
-       *
-       * @returns QString of the path portion of the original filename.
-       * <pre>
-       *   for a full file specification of:
-       *    "/home/me/img/picture.jpg"
-       *   originalPath() gives:
-       *    "/home/me/img"
-       * </pre>
-       */
+      // Methods
       QString originalPath() const;
-
-
-      /**
-       * Returns the path of the file name. For *nix operating
-       * systems this includes everything up to but not including the
-       * last slash "/". For filenames created without any slashes
-       * the current working directory will be returned.
-       *
-       * @returns QString of the path portion of the filename.
-       * <pre>
-       *   for a full file specification of:
-       *    "/home/me/img/picture.jpg"
-       *   path() gives:
-       *    "/home/me/img"
-       * </pre>
-       */
       QString path() const;
-
-
-      /**
-       * Returns a QString of the attributes in a filename, attributes are expected to be of type
-       * CubeAttributeInput or CubeAttributeOutput. Filenames without any attributes return an
-       * empty QString.
-       *
-       * @returns QString of the attributes specified in the filename.
-       * <pre>
-       *   for a full file specification of:
-       *    "/tmp/Peaks.cub+Bsq"
-       *   attributes() gives:
-       *    "Bsq"
-       * </pre>
-       */
       QString attributes() const;
-
-
-      /**
-       * Returns the name of the file without the path and without extensions.
-       *
-       * @returns QString containing every character excluding the path and all extensions.
-       * <pre>
-       *   for a full file specification of:
-       *    "/tmp/Peaks.cub.gz"
-       *   baseName() gives:
-       *    "Peaks"
-       * </pre>
-       */
       QString baseName() const;
-
-
-      /**
-       * Returns the name of the file excluding the path and the attributes in the file name.
-       *
-       * @returns QString containing every character in the file name exluding the path and attributes
-       * of the file.
-       * <pre>
-       *   for a full file specification of:
-       *    "/tmp/Peaks.cub+Bsq"
-       *   name() gives:
-       *    "Peaks.cub"
-       * </pre>
-       */
       QString name() const;
-
-
-      /**
-       * Returns the last extension of the file name.
-       *
-       * @returns QString containing every character in the file name after the last "." character.
-       * <pre>
-       *   for a full file specification of:
-       *    "/tmp/Peaks.cub.gz"
-       *   extension() gives:
-       *    "gz"
-       * </pre>
-       */
       QString extension() const;
 
 
@@ -234,7 +142,7 @@ namespace Isis {
        * @returns QString
        * <pre>
        *   for a full file specification of:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        *   expanded() gives:
        *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
        * </pre>
@@ -248,149 +156,28 @@ namespace Isis {
        * @returns QString containing every character in the file name and the path
        * <pre>
        *   for a full file specification of:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        *   original() gives:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        * </pre>
        */
       QString original() const;
 
-
-      /**
-       * Adds a new extension to the file name. If the current extension is the same as the
-       * new extension it will return an unchanged FileName object.
-       *
-       * @param &extension The new file extension to be added at the end of the file name after all
-       * exisiting extensions.
-       *
-       * @returns FileName object with added extension
-       */
       FileName addExtension(const QString &extension) const;
-
-
-      /**
-       * Removes all extensions in the file name
-       *
-       * @returns FileName object with all extensions removed
-       */
       FileName removeExtension() const;
-
-
-      /**
-       * Sets all current file extensions to a new extension in the file name.
-       *
-       * @param &extension The new file extension to replace any current file extensions with
-       *
-       * @returns FileName object with all existing extensions replaced by the new extension
-       */
       FileName setExtension(const QString &extension) const;
 
-
-      /**
-       * Checks to see if a file name is versioned by date or numerically. Returns true if file is
-       * versioned by date or numerically; returns false otherwise.
-       *
-       * @returns Boolean
-       */
       bool isVersioned() const;
-
-
-      /**
-       * Checks if the file name is versioned numerically. Returns true if the file is versioned
-       * numerically; returns false otherwise.
-       *
-       * @returns Boolean
-       */
       bool isNumericallyVersioned() const;
-
-
-      /**
-       * Checks if the file name is versioned by date. Returns true if the file is versioned
-       * by date; returns false otherwise.
-       *
-       * @returns Boolean
-       */
       bool isDateVersioned() const;
 
-
-      /**
-       * Searches the directory specified in the file name for the highest version of the file name.
-       * Returns a FileName object with the file name changed to reflect the highest version.
-       *
-       * @returns FileName object
-       */
       FileName highestVersion() const;
-
-
-      /**
-       * Updates the file name to be the latest version. If the file is versioned by date the
-       * newest version will be the current date. If the file is versioned numerically, the newest
-       * version will be the current version plus one.
-       *
-       * @returns FileName object with the new version file name.
-       *
-       * @throws Isis::IException::Unknown
-       */
       FileName newVersion() const;
-
-
-      /**
-       * Returns a FileName object of the same file name but versioned numerically by the
-       * number passed in as a parameter.
-       *
-       * @param versionNumber number to version the new FileName object
-       *
-       * @returns FileName object with the new version file name.
-       *
-       * @throws Isis::IException::Unknown
-       */
       FileName version(long versionNumber) const;
-
-
-      /**
-       * Returns a FileName object of the same file name but versioned by the
-       * date passed in as a parameter.
-       *
-       * @param versionDate QDate to version the new FileName object
-       *
-       * @returns FileName object with the new version file name.
-       *
-       */
       FileName version(QDate versionDate) const;
 
-
-      /**
-       * Returns true if the file exists; false otherwise.
-       * If the file is a symlink that points to a nonexistent file, false is returned.
-       *
-       * @returns Boolean
-       */
       bool fileExists() const;
-
-
-      /**
-       * Returns the path of the file's parent directory as a QDir object
-       *
-       * @returns QDir
-       * <pre>
-       *   for a full file specification of:
-       *    "/tmp/Peaks.cub+Bsq"
-       *   dir() gives:
-       *    "/tmp/"
-       * </pre>
-       */
       QDir dir() const;
-
-
-      /**
-       * Creates a temporary file and returns a FileName object created using the temporary file.
-       *
-       * @param templateFileName the file name used to create the temporary file.
-       *
-       * @returns FileName object created using the temporary file
-       *
-       * @throws Isis::IException::Io
-       */
       static FileName createTempFile(FileName templateFileName = "$TEMPORARY/temp");
 
 
@@ -402,90 +189,25 @@ namespace Isis {
        * @returns QString
        * <pre>
        *   for a full file specification of:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        *   toString() gives:
        *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
        * </pre>
        */
       QString toString() const;
-
-
-      /**
-       * Clears the current contents of the FileName object and reinitializes it with
-       * the argument.
-       *
-       * @returns void
-       *
-       * @param rhs FileName to replace the current contents of the object.
-       *
-       */
       FileName &operator=(const FileName &rhs);
-
-
-      /**
-       * Compares equality of two FileName objects. Returns true if the two objects are equal
-       * and false otherwise.
-       *
-       * @returns Boolean
-       *
-       * @param rhs FileName to compare the current FileName object to.
-       */
       bool operator==(const FileName &rhs);
-
-
-      /**
-       * Compares equality of two FileName objects. Returns false if the two objects are equal
-       * and true otherwise.
-       *
-       * @returns Boolean
-       *
-       * @param rhs FileName to compare the current FileName object to.
-       */
       bool operator!=(const FileName &rhs);
 
 
     private:
-      /**
-       * This looks through the directory of the file and checks for the highest version date of
-       * the file that is versioned date.
-       *
-       * @returns QDate
-       */
-      QDate highestVersionDate() const;
 
-
-      /**
-       * This looks through the directory of the file and checks for the highest version number of
-       * the file that is versioned numerically.
-       *
-       * @returns long
-       */
+      QDate highestVersionDate() const;
       long highestVersionNum() const;
-
-
-      /**
-       * This verifies the class invariant when using versioning - that the FileName is in an acceptable
-       *     state to find file version numbers.
-       */
       void validateVersioningState() const;
-
-     /**
-      * This changes the files format. Specifically quotes everything not in {} with single quotes
-      * and removes the {} from the file name.
-      *
-      * @returns QString
-      */
       QString fileNameQDatePattern() const;
-
-     /**
-      * This returns a QPair of the text (before, after) a version number in a file. Before being
-      * the text before the version number and after being the text after the version number.
-      *
-      * @returns QPair
-      */
       QPair<QString, QString> splitNameAroundVersionNum() const;
 
-
     private:
       /**
        * This is the reference-counted data for FileName
@@ -496,67 +218,33 @@ namespace Isis {
        */
       class Data : public QSharedData {
         public:
-          //! Data constructor, creates a new Data object.
-          Data();
 
+          // Constructors
+          Data();
 
-          /**
-           * Data copy constructor, creates a copy of a Data object.
-           * @param &other Data object to copy
-           */
+          // Copy Constructor, creates a copy of a Data object.
           Data(const Data &other);
 
-
-          //! Destroys the Data object.
+          // Destroys the Data Object
           ~Data();
 
-
-         /**
-          * Returns the original file name, stored in m_originalFileNameString. Boolean
-          * parameter includeAttributes determines if the returned file name has the variables
-          * included.
-          *
-          * @returns Qstring
-          *
-          * @param includeAttributes boolean to represent whether the attricubtes should be included.
-          */
+          // Methods
           QString original(bool includeAttributes) const;
-
-
-         /**
-          * Sets the original file name, stored in m_originalFileNameString. QString parameter
-          * is the new file name to store in m_originalFileNameString. The expanded verison is also
-          * set and stored in m_expandedFileNameString when this method is called.
-          *
-          * @param originalStr the new file name
-          */
           void setOriginal(const QString &originalStr);
-
-
-         /**
-          * Returns the expanded file name, stored in m_expandedFileNameString. Boolean
-          *  parameter includeAttributes determines if the returned file name has the variables
-          * included.
-          *
-          * @returns Qstring
-          *
-          * @param includeAttributes boolean to represent whether the attricubtes should be included.
-          */
           QString expanded(bool includeAttributes) const;
 
-
         private:
-          //! Holds the original file name.
+          // Holds the original file name.
           QString *m_originalFileNameString;
 
 
-          //! Holds the expanded file name.
+          // Holds the expanded file name.
           QString *m_expandedFileNameString;
       };
 
-      //! @see QSharedDataPointer
+      // @see QSharedDataPointer
       QSharedDataPointer<Data> m_d;
   };
 };
 
-#endif
+#endif
\ No newline at end of file
diff --git a/isis/src/base/objs/FileName/FileName.truth b/isis/src/base/objs/FileName/FileName.truth
index ba20af3a5cf94dd2d28fd4d6cbc11896e6c4932f..6eb84e46e73f1437d0ff76bd157b2c3890732b6d 100644
--- a/isis/src/base/objs/FileName/FileName.truth
+++ b/isis/src/base/objs/FileName/FileName.truth
@@ -583,186 +583,6 @@ Running Full Test on [/$TEMPORARY/unitTest.cpp]
 		Original path      /$TEMPORARY
 		Exists             0
 
-Running Safe Test on [$base/testData/isisTruth.cub]
-	Testing Basics [$base/testData/isisTruth.cub]
-		Name:              isisTruth.cub
-		Base Name:         isisTruth
-		Original path      $base/testData
-		Extension:         cub
-		Comparison (==):   1
-		Comparison (!=):   0
-		Exists             1
-
-	Testing Extension change [$base/testData/isisTruth.cub]
-		Before modification:      $base/testData/isisTruth.cub
-			Changed:                0
-			Unchanged:              1
-		Removed Extension:        $base/testData/isisTruth
-			Changed:                1
-			Unchanged:              0
-		Added Extension [tmp]:    $base/testData/isisTruth.tmp
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $base/testData/isisTruth.tmp.jpg
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $base/testData/isisTruth.tmp.jpg
-			Changed:                0
-			Unchanged:              1
-		Set Extension   [gif]:    $base/testData/isisTruth.tmp.gif
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $base/testData/isisTruth.tmp.gif.jpg
-			Changed:                1
-			Unchanged:              0
-		Removed Extension:        $base/testData/isisTruth.tmp.gif
-			Changed:                1
-			Unchanged:              0
-
-Running Safe Test on [${base}/testData/isisTruth.cub]
-	Testing Basics [${base}/testData/isisTruth.cub]
-		Name:              isisTruth.cub
-		Base Name:         isisTruth
-		Original path      ${base}/testData
-		Extension:         cub
-		Comparison (==):   1
-		Comparison (!=):   0
-		Exists             1
-
-	Testing Extension change [${base}/testData/isisTruth.cub]
-		Before modification:      ${base}/testData/isisTruth.cub
-			Changed:                0
-			Unchanged:              1
-		Removed Extension:        ${base}/testData/isisTruth
-			Changed:                1
-			Unchanged:              0
-		Added Extension [tmp]:    ${base}/testData/isisTruth.tmp
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    ${base}/testData/isisTruth.tmp.jpg
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    ${base}/testData/isisTruth.tmp.jpg
-			Changed:                0
-			Unchanged:              1
-		Set Extension   [gif]:    ${base}/testData/isisTruth.tmp.gif
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    ${base}/testData/isisTruth.tmp.gif.jpg
-			Changed:                1
-			Unchanged:              0
-		Removed Extension:        ${base}/testData/isisTruth.tmp.gif
-			Changed:                1
-			Unchanged:              0
-
-Running Safe Test on [$ISISROOT/src/Makefile]
-	Testing Basics [$ISISROOT/src/Makefile]
-		Name:              Makefile
-		Base Name:         Makefile
-		Original path      $ISISROOT/src
-		Extension:         
-		Comparison (==):   1
-		Comparison (!=):   0
-		Exists             1
-
-	Testing Extension change [$ISISROOT/src/Makefile]
-		Before modification:      $ISISROOT/src/Makefile
-			Changed:                0
-			Unchanged:              1
-		Removed Extension:        $ISISROOT/src/Makefile
-			Changed:                0
-			Unchanged:              1
-		Added Extension [tmp]:    $ISISROOT/src/Makefile.tmp
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $ISISROOT/src/Makefile.tmp.jpg
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $ISISROOT/src/Makefile.tmp.jpg
-			Changed:                0
-			Unchanged:              1
-		Set Extension   [gif]:    $ISISROOT/src/Makefile.tmp.gif
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $ISISROOT/src/Makefile.tmp.gif.jpg
-			Changed:                1
-			Unchanged:              0
-		Removed Extension:        $ISISROOT/src/Makefile.tmp.gif
-			Changed:                1
-			Unchanged:              0
-
-Running Safe Test on [$ISISROOT/src/Makefile.elifekaM]
-	Testing Basics [$ISISROOT/src/Makefile.elifekaM]
-		Name:              Makefile.elifekaM
-		Base Name:         Makefile
-		Original path      $ISISROOT/src
-		Extension:         elifekaM
-		Comparison (==):   1
-		Comparison (!=):   0
-		Exists             0
-
-	Testing Extension change [$ISISROOT/src/Makefile.elifekaM]
-		Before modification:      $ISISROOT/src/Makefile.elifekaM
-			Changed:                0
-			Unchanged:              1
-		Removed Extension:        $ISISROOT/src/Makefile
-			Changed:                1
-			Unchanged:              0
-		Added Extension [tmp]:    $ISISROOT/src/Makefile.tmp
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $ISISROOT/src/Makefile.tmp.jpg
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $ISISROOT/src/Makefile.tmp.jpg
-			Changed:                0
-			Unchanged:              1
-		Set Extension   [gif]:    $ISISROOT/src/Makefile.tmp.gif
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    $ISISROOT/src/Makefile.tmp.gif.jpg
-			Changed:                1
-			Unchanged:              0
-		Removed Extension:        $ISISROOT/src/Makefile.tmp.gif
-			Changed:                1
-			Unchanged:              0
-
-Running Safe Test on [/$TEMPORARY/unitTest.cpp]
-	Testing Basics [/$TEMPORARY/unitTest.cpp]
-		Name:              unitTest.cpp
-		Base Name:         unitTest
-		Original path      /$TEMPORARY
-		Extension:         cpp
-		Comparison (==):   1
-		Comparison (!=):   0
-		Exists             0
-
-	Testing Extension change [/$TEMPORARY/unitTest.cpp]
-		Before modification:      /$TEMPORARY/unitTest.cpp
-			Changed:                0
-			Unchanged:              1
-		Removed Extension:        /$TEMPORARY/unitTest
-			Changed:                1
-			Unchanged:              0
-		Added Extension [tmp]:    /$TEMPORARY/unitTest.tmp
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    /$TEMPORARY/unitTest.tmp.jpg
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    /$TEMPORARY/unitTest.tmp.jpg
-			Changed:                0
-			Unchanged:              1
-		Set Extension   [gif]:    /$TEMPORARY/unitTest.tmp.gif
-			Changed:                1
-			Unchanged:              0
-		Added Extension [jpg]:    /$TEMPORARY/unitTest.tmp.gif.jpg
-			Changed:                1
-			Unchanged:              0
-		Removed Extension:        /$TEMPORARY/unitTest.tmp.gif
-			Changed:                1
-			Unchanged:              0
-
 Testing temporary file name placement
 	Input name and extension : $TEMPORARY/tttt.tmp
 	Extension:               : tmp
diff --git a/isis/src/base/objs/FileName/unitTest.cpp b/isis/src/base/objs/FileName/unitTest.cpp
index 026748ccf6bffa5a4b7ef92bd116ed9d18968d56..3cf67d1439ea950136f37460611751b823469c9f 100644
--- a/isis/src/base/objs/FileName/unitTest.cpp
+++ b/isis/src/base/objs/FileName/unitTest.cpp
@@ -40,18 +40,6 @@ int main(int argc, char *argv[]) {
     TestExpanded("\t", fileToTest);
   }
 
-  // Variable expansion will change truth data on these
-  QStringList filesToTestSafely;
-  filesToTestSafely << "$base/testData/isisTruth.cub" << "${base}/testData/isisTruth.cub"
-                    << "$ISISROOT/src/Makefile" << "$ISISROOT/src/Makefile.elifekaM"
-                    << "/$TEMPORARY/unitTest.cpp";
-
-  foreach (QString fileToTest, filesToTestSafely) {
-    cout << "Running Safe Test on [" << qPrintable(fileToTest) << "]" << endl;
-    TestGenericAccessors("\t", fileToTest, false);
-    TestExtensionChanges("\t", fileToTest, false);
-  }
-
   // Test temp files thoroughly
   cout << "Testing temporary file name placement" << endl;
   QString tempFileNameTestStr = "$TEMPORARY/tttt.tmp";
@@ -286,7 +274,7 @@ void TestExtensionChanges(QString prefix, QString name, bool showExpandedValues)
   if (!showExpandedValues) {
     toStringMethod = &FileName::original;
   }
-  
+
   cout << prefix << "Testing Extension change [" << name << "]" << endl;
   cout << prefix << "\tBefore modification:      " << (test.*toStringMethod)() << endl;
   cout << prefix << "\t\tChanged:                " << (beforeLastChange != test) << endl;
diff --git a/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp b/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp
index 329908226fcfad4d0e25e394a799a14f0827918c..4866df64fd55ef784f31db524aea7acc2567f0e0 100644
--- a/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp
+++ b/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp
@@ -140,4 +140,3 @@ namespace Isis {
 extern "C" Isis::InterestOperator *ForstnerOperatorPlugin(Isis::Pvl &pvl) {
   return new Isis::ForstnerOperator(pvl);
 }
-
diff --git a/isis/src/base/objs/FunctionTools/unitTest.cpp b/isis/src/base/objs/FunctionTools/unitTest.cpp
index 8d25d919c59dfbeb585e78817ba3499c038db334..5b5f723a18a23ea90171de7a4d181c6681c10b7d 100644
--- a/isis/src/base/objs/FunctionTools/unitTest.cpp
+++ b/isis/src/base/objs/FunctionTools/unitTest.cpp
@@ -32,19 +32,19 @@ public std::unary_function <double, double> {
 int main() {
 
   QList<double> roots;
-  
+
   /******************Testing realLinearRoots**************************/
   cerr << "Testing realLinearRoots\n";
-  cerr << "Equation: 3*X - 2 = 0.0  One real root\n"; 
+  cerr << "Equation: 3*X - 2 = 0.0  One real root\n";
   roots = FunctionTools::realLinearRoots(3.0,-2.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
   else
     foreach (const double root, roots)
       cerr << root << "  ";
-    
+
   cerr << endl;
-  cerr << "Equation: 0*X - 2 = 0.0  No roots\n"; 
+  cerr << "Equation: 0*X - 2 = 0.0  No roots\n";
   roots = FunctionTools::realLinearRoots(0,2);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -66,7 +66,7 @@ int main() {
   /******************Testing realQuadraticRoots**************************/
   cerr << endl << endl;
   cerr << "Testing realQuadraticRoots\n";
-  cerr << "Equation: 1.0*X^2 + -1.0*X - 2.0 = 0.0  Two real root\n"; 
+  cerr << "Equation: 1.0*X^2 + -1.0*X - 2.0 = 0.0  Two real root\n";
   roots = FunctionTools::realQuadraticRoots(1.0,-1.0,-2.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -75,7 +75,7 @@ int main() {
       cerr << root << "  ";
 
   cerr << endl;
-  cerr << "Equation: 1.0*X^2 + -4.0*X + 4.0 = 0.0  one double root\n"; 
+  cerr << "Equation: 1.0*X^2 + -4.0*X + 4.0 = 0.0  one double root\n";
   roots = FunctionTools::realQuadraticRoots(1.0,-4.0,4.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -85,7 +85,7 @@ int main() {
 
 
   cerr << endl;
-  cerr << "Equation: 0.0*X^2 + -4.0*X + 4.0 = 0.0  linear equation, one real root\n"; 
+  cerr << "Equation: 0.0*X^2 + -4.0*X + 4.0 = 0.0  linear equation, one real root\n";
   roots = FunctionTools::realQuadraticRoots(0.0,-4.0,4.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -94,7 +94,7 @@ int main() {
       cerr << root << "  ";
 
   cerr << endl;
-  cerr << "Equation: 3.0*X^2 + 0.0*X - 12.0 = 0.0  zero linear coeff, two real roots\n"; 
+  cerr << "Equation: 3.0*X^2 + 0.0*X - 12.0 = 0.0  zero linear coeff, two real roots\n";
   roots = FunctionTools::realQuadraticRoots(3.0,0.0,-12.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -103,7 +103,7 @@ int main() {
       cerr << root << "  ";
 
   cerr << endl;
-  cerr << "Equation: 3.0*X^2 + 0.0*X + 0.0 = 0.0  zero linear and const coeff, one double root\n"; 
+  cerr << "Equation: 3.0*X^2 + 0.0*X + 0.0 = 0.0  zero linear and const coeff, one double root\n";
   roots = FunctionTools::realQuadraticRoots(3.0,0.0,0.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -112,7 +112,7 @@ int main() {
       cerr << root << "  ";
 
   cerr << endl;
-  cerr << "Equation: 3.0*X^2 + -3.0*X + 0.0 = 0.0  zero const coeff, two real roots\n"; 
+  cerr << "Equation: 3.0*X^2 + -3.0*X + 0.0 = 0.0  zero const coeff, two real roots\n";
   roots = FunctionTools::realQuadraticRoots(3.0,-3.0,0.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -125,7 +125,7 @@ int main() {
   cerr << endl << endl;
   cerr << "Testing realCubicRoots\n";
   cerr << "Equation: 1.0*x^3 - 3.0*X^2 + 0.0*X + 4.0 = 0.0"
-           "  zero linear coeff, two real roots (one double)\n"; 
+           "  zero linear coeff, two real roots (one double)\n";
   roots = FunctionTools::realCubicRoots(1.0,-3.0,0.0,4.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -136,7 +136,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: 1.0*x^3 - 4.0*X^2 + -7.0*X + 10.0 = 0.0"
-           "  three real roots\n"; 
+           "  three real roots\n";
   roots = FunctionTools::realCubicRoots(1.0,-4.0,-7.0,10.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -146,7 +146,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: 1.0*x^3 + 1.0*X^2 + -2.0*X - 30.0 = 0.0"
-           "  one real root\n"; 
+           "  one real root\n";
   roots = FunctionTools::realCubicRoots(1.0,1.0,-2.0,-30.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -156,7 +156,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: 1.0*x^3 + 0.0*X^2 + 0.0*X - 8.0 = 0.0"
-           "  zero quad and linear coeffs, one real root\n"; 
+           "  zero quad and linear coeffs, one real root\n";
   roots = FunctionTools::realCubicRoots(1.0,0.0,0.0,-8.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -167,7 +167,7 @@ int main() {
   //repeating some tests with non-one leading coefficients
   cerr << endl;
   cerr << "Equation: 2.0*x^3 - 8.0*X^2 + -14.0*X + 20.0 = 0.0"
-           "  three real roots\n"; 
+           "  three real roots\n";
   roots = FunctionTools::realCubicRoots(2.0,-8.0,-14.0,20.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -177,7 +177,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: -2.0*x^3 + -2.0*X^2 + 4.0*X + 60.0 = 0.0"
-           "  one real root\n"; 
+           "  one real root\n";
   roots = FunctionTools::realCubicRoots(-2.0,-2.0,4.0,60.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -187,7 +187,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: 3.0*x^3 + 0.0*X^2 + 0.0*X - 24.0 = 0.0"
-           "  zero quad and linear coeffs, one real root\n"; 
+           "  zero quad and linear coeffs, one real root\n";
   roots = FunctionTools::realCubicRoots(3.0,0.0,0.0,-24.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -197,7 +197,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: -3.0*x^3 + 0.0*X^2 + 0.0*X - 24.0 = 0.0"
-           "  zero quad and linear coeffs, one real root\n"; 
+           "  zero quad and linear coeffs, one real root\n";
   roots = FunctionTools::realCubicRoots(-3.0,0.0,0.0,24.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -210,7 +210,7 @@ int main() {
   //fall backs to less complicated polys
   cerr << endl;
   cerr << "Equation: 0.0*x^3 + 1.0*X^2 + 0.0*X - 4.0 = 0.0"
-           "  fall back to quadratic math, two real roots\n"; 
+           "  fall back to quadratic math, two real roots\n";
   roots = FunctionTools::realCubicRoots(0.0,1.0,0.0,-4.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -220,7 +220,7 @@ int main() {
 
   cerr << endl;
   cerr << "Equation: 0.0*x^3 + 0.0*X^2 + 1.0*X - 4.0 = 0.0"
-           "  fall back to linear math, one real root\n"; 
+           "  fall back to linear math, one real root\n";
   roots = FunctionTools::realCubicRoots(0.0,0.0,1.0,-4.0);
   cerr << "solutions: ";
   if (roots.size() == 0.0) cerr << "Empty Set";
@@ -245,7 +245,7 @@ int main() {
   try {
     FunctionTools::brentsRootFinder(func,point1,point2,1e-6,100,root);
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -261,10 +261,10 @@ int main() {
   try {
     FunctionTools::brentsRootFinder(errorFunc,point1,point2,1e-6,100,root);
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
-  
+
   cerr << endl;
 
   //actually finding a root now
@@ -279,7 +279,7 @@ int main() {
   try {
     FunctionTools::brentsRootFinder(func,point1,point2,1e-6,100,root);
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   cerr << "Root Found: " << root << endl;
diff --git a/isis/src/base/objs/GroundGrid/GroundGrid.truth b/isis/src/base/objs/GroundGrid/GroundGrid.truth
index 075afba61d82d3849dcab78b52359626950fc0f9..fc41589deb1e183551115ec4b7ab367df81e71ad 100644
--- a/isis/src/base/objs/GroundGrid/GroundGrid.truth
+++ b/isis/src/base/objs/GroundGrid/GroundGrid.truth
@@ -1,8 +1,6 @@
 Reading cube...
 Create universal ground map...
 Create grid...
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 
 Grid cutout: 
diff --git a/isis/src/base/objs/Gui/GuiOutputAttribute.cpp b/isis/src/base/objs/Gui/GuiOutputAttribute.cpp
index 9b914535ef030515bba0c5fa96b115e8814f3feb..06931322fae92cc376e1c0472b8b36098a8307c8 100644
--- a/isis/src/base/objs/Gui/GuiOutputAttribute.cpp
+++ b/isis/src/base/objs/Gui/GuiOutputAttribute.cpp
@@ -74,6 +74,10 @@ namespace Isis {
     p_signedWord->setToolTip("Signed 16-bit pixels");
     p_unsignedWord = new QRadioButton("Unsigned Word");
     p_unsignedWord->setToolTip("Unsigned 16-bit pixels");
+    p_signedInteger = new QRadioButton("&Signed Integer");
+    p_signedInteger->setToolTip("Signed 32-bit integer");
+    p_unsignedInteger = new QRadioButton("Unsigned Integer");
+    p_unsignedInteger->setToolTip("Unsigned 32-bit integer");
     p_real = new QRadioButton("&Real");
     p_real->setToolTip("Floating point 32-bit pixels");
 
@@ -82,6 +86,8 @@ namespace Isis {
     buttonGroup->addButton(p_unsignedByte);
     buttonGroup->addButton(p_signedWord);
     buttonGroup->addButton(p_unsignedWord);
+    buttonGroup->addButton(p_unsignedInteger);
+    buttonGroup->addButton(p_signedInteger);
     buttonGroup->addButton(p_real);
     buttonGroup->setExclusive(true);
 
@@ -97,6 +103,10 @@ namespace Isis {
     connect(p_signedWord, SIGNAL(toggled(bool)), p_maxEdit, SLOT(setEnabled(bool)));
     connect(p_unsignedWord, SIGNAL(toggled(bool)), p_minEdit, SLOT(setEnabled(bool)));
     connect(p_unsignedWord, SIGNAL(toggled(bool)), p_maxEdit, SLOT(setEnabled(bool)));
+    connect(p_unsignedInteger, SIGNAL(toggled(bool)), p_minEdit, SLOT(setEnabled(bool)));
+    connect(p_unsignedInteger, SIGNAL(toggled(bool)), p_maxEdit, SLOT(setEnabled(bool)));
+    connect(p_signedInteger, SIGNAL(toggled(bool)), p_minEdit, SLOT(setEnabled(bool)));
+    connect(p_signedInteger, SIGNAL(toggled(bool)), p_maxEdit, SLOT(setEnabled(bool)));
     connect(p_real, SIGNAL(toggled(bool)), p_minEdit, SLOT(setDisabled(bool)));
     connect(p_real, SIGNAL(toggled(bool)), p_maxEdit, SLOT(setDisabled(bool)));
     p_minEdit->setValidator(new QDoubleValidator(p_minEdit));
@@ -107,7 +117,9 @@ namespace Isis {
     gridLayout->addWidget(p_unsignedByte, 1, 0);
     gridLayout->addWidget(p_signedWord, 2, 0);
     gridLayout->addWidget(p_unsignedWord, 3, 0);
-    gridLayout->addWidget(p_real, 4, 0);
+    gridLayout->addWidget(p_signedInteger, 4, 0);
+    gridLayout->addWidget(p_unsignedInteger, 5, 0);
+    gridLayout->addWidget(p_real, 6, 0);
     gridLayout->addWidget(minLabel, 0, 1);
     gridLayout->addWidget(p_minEdit, 1, 1);
     gridLayout->addWidget(maxLabel, 2, 1);
@@ -213,8 +225,11 @@ namespace Isis {
     if(p_unsignedByte->isChecked()) att += "+UnsignedByte";
     if(p_signedWord->isChecked()) att += "+SignedWord";
     if(p_unsignedWord->isChecked()) att += "+UnsignedWord";
+    if(p_signedInteger->isChecked()) att += "+SignedInteger";
+    if(p_unsignedInteger->isChecked()) att += "+UnsignedInteger";
 
-    if(p_unsignedByte->isChecked() || p_signedWord->isChecked() || p_unsignedWord->isChecked()) {
+    if(p_unsignedByte->isChecked() || p_signedWord->isChecked() || p_unsignedWord->isChecked()
+        || p_signedInteger->isChecked() || p_unsignedInteger->isChecked()) {
       if((p_minEdit->text() != "") && (p_maxEdit->text() != "")) {
         att += "+";
         att += p_minEdit->text();
@@ -264,6 +279,12 @@ namespace Isis {
     else if(att.pixelType() == Isis::UnsignedWord) {
       p_unsignedWord->setChecked(true);
     }
+    else if(att.pixelType() == Isis::SignedInteger) {
+      p_signedInteger->setChecked(true);
+    }
+    else if(att.pixelType() == Isis::UnsignedInteger) {
+      p_unsignedInteger->setChecked(true);
+    }
     else {
       p_real->setChecked(true);
     }
@@ -280,4 +301,3 @@ namespace Isis {
     p_propagate->setEnabled(enabled);
   }
 }
-
diff --git a/isis/src/base/objs/Gui/GuiOutputAttribute.h b/isis/src/base/objs/Gui/GuiOutputAttribute.h
index 8b5c1461a9ec6801d5ceec075298e730fe6c2b56..968b3e03bd1ab60e7f66f7f4cc1ab8b671c65a80 100644
--- a/isis/src/base/objs/Gui/GuiOutputAttribute.h
+++ b/isis/src/base/objs/Gui/GuiOutputAttribute.h
@@ -41,6 +41,7 @@ namespace Isis {
    *                           the default so there were no symptoms of a bug. This has
    *                           been fixed. References #961.
    *   @history 2016-04-21 Makayla Shepherd - Added UnsignedWord handling.
+   *   @history 2018-07-27 Kaitlyn Lee - Added signed/unsigned integer handling.
    */
   class GuiOutputAttribute : public QDialog {
       Q_OBJECT
@@ -67,6 +68,8 @@ namespace Isis {
       QRadioButton *p_unsignedByte;
       QRadioButton *p_signedWord;
       QRadioButton *p_unsignedWord;
+      QRadioButton *p_signedInteger;
+      QRadioButton *p_unsignedInteger;
       QRadioButton *p_real;
       QLineEdit *p_minEdit;
       QLineEdit *p_maxEdit;
@@ -81,4 +84,3 @@ namespace Isis {
 };
 
 #endif
-
diff --git a/isis/src/base/objs/Histogram/Histogram.cpp b/isis/src/base/objs/Histogram/Histogram.cpp
index a040f61bd6a7aaace9c7be73fc790f5a0cda41c3..d8d60c2638b7de180e2625b463452a7894e93c3e 100644
--- a/isis/src/base/objs/Histogram/Histogram.cpp
+++ b/isis/src/base/objs/Histogram/Histogram.cpp
@@ -264,7 +264,7 @@ namespace Isis {
     }
 
     //set up the histogram ranges
-    
+
     SetValidRange(min, max);
     //SetBinRange(min, max);
   }
@@ -309,9 +309,13 @@ namespace Isis {
         nbins = 65536;
       }
     }
-    else if (cube.pixelType() == Real) {
-      // We can't account for all the possibilities of a double inside of any
-      //   data range, so don't guess min/max DN values.
+    // 32-bit data covers too big of a range of values to use
+    // the min and max possible values to set our value range.
+    // So, just set the number of bins and then later we will
+    // compute the min and max value in the actual cube.
+    else if (cube.pixelType() == UnsignedInteger ||
+             cube.pixelType() == SignedInteger ||
+             cube.pixelType() == Real) {
       if (nbins == 0) {
         nbins = 65536;
       }
diff --git a/isis/src/base/objs/Histogram/Histogram.h b/isis/src/base/objs/Histogram/Histogram.h
index 496474e0e310c45b4055e9ad119dacd3d34bb126..5f6c33ddb67701befb4382799a92c1f43a5320af 100644
--- a/isis/src/base/objs/Histogram/Histogram.h
+++ b/isis/src/base/objs/Histogram/Histogram.h
@@ -79,6 +79,8 @@ namespace Isis {
    *   @history 2017-09-08 Summer Stapleton - Included test for Isis::Null being returned from
    *                            accessor method call in Histogram::rangesFromNet(). Fixes #5123,
    *                            #1673.
+   *   @history 2018-07-27 Jesse Mapel - Added support for initializing a histogram from
+   *                           signed and unsigned word cubes. References #971.
    */
 
   class Histogram : public Statistics {
diff --git a/isis/src/base/objs/Histogram/Histogram.truth b/isis/src/base/objs/Histogram/Histogram.truth
index b23eb5192d6887a4c05443ee7504a7b19bd5e96b..f75baf0b3c8daef240be94f3abe9ac57d5616452 100644
--- a/isis/src/base/objs/Histogram/Histogram.truth
+++ b/isis/src/base/objs/Histogram/Histogram.truth
@@ -34,10 +34,6 @@ BinCount(20):      0
 
 End old unit test.
 data/base/testData/enceladus_sp-Jig.net
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Adding Control Points to Network...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
@@ -222,7 +218,7 @@ Sum Square:            0
 
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 Constructor3:   
-Histogram(icube,1)
+Histogram(icube,1) Real
 
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
@@ -309,6 +305,276 @@ Sum Square:            0
 
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Constructor3:   
+Histogram(icube,1) SignedWord
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
++++++++++++++++++++ Histogram Members +++++++++++++++++++
+
+Stats Range:            (-1.00049e+20,1e+20)
+Bin Range:              (-1.00049e+20,1e+20)
+Average:               -1.14471e+15
+Std Deviation:         3.10107e+19
+Variance:              9.61663e+38
+Median:                -1.52627e+15
+Mode:                  -1.52627e+15
+Skew:                  3.69133e-05
+Percent(0.5):          -1e+20
+Percent(99.5):         1e+20
+Minimum:               -1e+20
+Maximum:               1e+20
+# Bins:                65536
+BinWidth:              3.05255e+15
+MaxBinCount:           5292
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++++++++++++++++ Statistics Counters ++++++++++++++++++
+
+Total pixels:          15876
+Valid pixels:          7056
+Over Range pixels:     0
+Under Range pixels:    0
+Null pixels:           1764
+Lis pixels:            1764
+His pixels:            1764
+Lrs pixels:            1764
+Hrs pixels:            1764
+Out of range pixels:   0
+Minimum:               -1e+20
+Maximum:               1e+20
+Valid Minimum:         -1.00049e+20
+Valid Maximum:         1e+20
+Sum:                   -8.07705e+18
+Sum Square:            6.78453e+42
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Resetting bin range to (70,110)
+
++++++++++++++++++++ Histogram Members +++++++++++++++++++
+
+Stats Range:            (70,110)
+Bin Range:              (70,110)
+Average:               -1.79769e+308
+Std Deviation:         -1.79769e+308
+Variance:              -1.79769e+308
+Median:                -1.79769e+308
+Mode:                  -1.79769e+308
+Skew:                  -1.79769e+308
+Percent(0.5):          -1.79769e+308
+Percent(99.5):         -1.79769e+308
+Minimum:               -1.79769e+308
+Maximum:               -1.79769e+308
+# Bins:                65536
+BinWidth:              0.000610361
+MaxBinCount:           0
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++++++++++++++++ Statistics Counters ++++++++++++++++++
+
+Total pixels:          0
+Valid pixels:          0
+Over Range pixels:     0
+Under Range pixels:    0
+Null pixels:           0
+Lis pixels:            0
+His pixels:            0
+Lrs pixels:            0
+Hrs pixels:            0
+Out of range pixels:   0
+Minimum:               -1.79769e+308
+Maximum:               -1.79769e+308
+Valid Minimum:         70
+Valid Maximum:         110
+Sum:                   0
+Sum Square:            0
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Constructor3:   
+Histogram(icube,1) UnsignedWord
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
++++++++++++++++++++ Histogram Members +++++++++++++++++++
+
+Stats Range:            (-1.00009e+20,1.0004e+20)
+Bin Range:              (-1.00009e+20,1.0004e+20)
+Average:               3.33468e+19
+Std Deviation:         5.35272e+19
+Variance:              2.86516e+39
+Median:                1.52627e+15
+Mode:                  1.52627e+15
+Skew:                  1.86888
+Percent(0.5):          -1e+20
+Percent(99.5):         1.0004e+20
+Minimum:               -1e+20
+Maximum:               1.0004e+20
+# Bins:                65536
+BinWidth:              3.05255e+15
+MaxBinCount:           5292
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++++++++++++++++ Statistics Counters ++++++++++++++++++
+
+Total pixels:          15876
+Valid pixels:          10584
+Over Range pixels:     0
+Under Range pixels:    0
+Null pixels:           1764
+Lis pixels:            1764
+His pixels:            0
+Lrs pixels:            1764
+Hrs pixels:            0
+Out of range pixels:   0
+Minimum:               -1e+20
+Maximum:               1.0004e+20
+Valid Minimum:         -1.00009e+20
+Valid Maximum:         1.0004e+20
+Sum:                   3.52943e+23
+Sum Square:            4.20915e+43
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Resetting bin range to (70,110)
+
++++++++++++++++++++ Histogram Members +++++++++++++++++++
+
+Stats Range:            (70,110)
+Bin Range:              (70,110)
+Average:               -1.79769e+308
+Std Deviation:         -1.79769e+308
+Variance:              -1.79769e+308
+Median:                -1.79769e+308
+Mode:                  -1.79769e+308
+Skew:                  -1.79769e+308
+Percent(0.5):          -1.79769e+308
+Percent(99.5):         -1.79769e+308
+Minimum:               -1.79769e+308
+Maximum:               -1.79769e+308
+# Bins:                65536
+BinWidth:              0.000610361
+MaxBinCount:           0
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++++++++++++++++ Statistics Counters ++++++++++++++++++
+
+Total pixels:          0
+Valid pixels:          0
+Over Range pixels:     0
+Under Range pixels:    0
+Null pixels:           0
+Lis pixels:            0
+His pixels:            0
+Lrs pixels:            0
+Hrs pixels:            0
+Out of range pixels:   0
+Minimum:               -1.79769e+308
+Maximum:               -1.79769e+308
+Valid Minimum:         70
+Valid Maximum:         110
+Sum:                   0
+Sum Square:            0
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Constructor3:   
+Histogram(icube,1) UnsignedByte
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
++++++++++++++++++++ Histogram Members +++++++++++++++++++
+
+Stats Range:            (-1.00791e+20,1.00791e+20)
+Bin Range:              (-1.00791e+20,1.00791e+20)
+Average:               2.96443e+17
+Std Deviation:         3.10605e+19
+Variance:              9.64757e+38
+Median:                3.95257e+17
+Mode:                  3.95257e+17
+Skew:                  -0.00954403
+Percent(0.5):          -1e+20
+Percent(99.5):         1e+20
+Minimum:               -1e+20
+Maximum:               1e+20
+# Bins:                256
+BinWidth:              7.90514e+17
+MaxBinCount:           5292
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++++++++++++++++ Statistics Counters ++++++++++++++++++
+
+Total pixels:          15876
+Valid pixels:          7056
+Over Range pixels:     0
+Under Range pixels:    0
+Null pixels:           5292
+Lis pixels:            0
+His pixels:            0
+Lrs pixels:            0
+Hrs pixels:            3528
+Out of range pixels:   0
+Minimum:               -1e+20
+Maximum:               1e+20
+Valid Minimum:         -1.00791e+20
+Valid Maximum:         1.00791e+20
+Sum:                   2.0917e+21
+Sum Square:            6.80698e+42
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Resetting bin range to (70,110)
+
++++++++++++++++++++ Histogram Members +++++++++++++++++++
+
+Stats Range:            (70,110)
+Bin Range:              (70,110)
+Average:               -1.79769e+308
+Std Deviation:         -1.79769e+308
+Variance:              -1.79769e+308
+Median:                -1.79769e+308
+Mode:                  -1.79769e+308
+Skew:                  -1.79769e+308
+Percent(0.5):          -1.79769e+308
+Percent(99.5):         -1.79769e+308
+Minimum:               -1.79769e+308
+Maximum:               -1.79769e+308
+# Bins:                256
+BinWidth:              0.156863
+MaxBinCount:           0
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++++++++++++++++ Statistics Counters ++++++++++++++++++
+
+Total pixels:          0
+Valid pixels:          0
+Over Range pixels:     0
+Under Range pixels:    0
+Null pixels:           0
+Lis pixels:            0
+His pixels:            0
+Lrs pixels:            0
+Hrs pixels:            0
+Out of range pixels:   0
+Minimum:               -1.79769e+308
+Maximum:               -1.79769e+308
+Valid Minimum:         70
+Valid Maximum:         110
+Sum:                   0
+Sum Square:            0
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 Constructor4:   
diff --git a/isis/src/base/objs/Histogram/unitTest.cpp b/isis/src/base/objs/Histogram/unitTest.cpp
index 060e15e78ded4602fda16dbbc87e38ef7d92af3d..2e6eb400231d65a0b85fd13c265106cc0e432599 100644
--- a/isis/src/base/objs/Histogram/unitTest.cpp
+++ b/isis/src/base/objs/Histogram/unitTest.cpp
@@ -168,29 +168,29 @@ int main(int argc, char *argv[]) {
 
 
   try {
-      hist1 = new Isis::Histogram(net, &Isis::ControlMeasure::GetResidualMagnitude,20);
-      cout << endl;
-      cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
-      cout << endl;
-      cout << "Constructor1:   " << endl;
-      cout << "Histogram(net, &Isis::ControlMeasure::GetResidualMagnitude,numbins)" << endl;
-      cout << endl;
-      cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
-      histogramMembers(hist1);
-      statCounters(hist1);
-      cout << "Resetting bin range to (0.1469787,0.3299682)" << endl;
-      hist1 ->SetValidRange(0.1469787,0.3299682);
-      histogramMembers(hist1);
-      statCounters(hist1);
+    hist1 = new Isis::Histogram(net, &Isis::ControlMeasure::GetResidualMagnitude,20);
+    cout << endl;
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+    cout << endl;
+    cout << "Constructor1:   " << endl;
+    cout << "Histogram(net, &Isis::ControlMeasure::GetResidualMagnitude,numbins)" << endl;
+    cout << endl;
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+    histogramMembers(hist1);
+    statCounters(hist1);
+    cout << "Resetting bin range to (0.1469787,0.3299682)" << endl;
+    hist1 ->SetValidRange(0.1469787,0.3299682);
+    histogramMembers(hist1);
+    statCounters(hist1);
 
-      delete(hist1);
+    delete(hist1);
 
-      cout << endl;
+    cout << endl;
 
-    }
-    catch (Isis::IException &e) {
-      e.print();
-    }
+  }
+  catch (Isis::IException &e) {
+    e.print();
+  }
 
 
   try {
@@ -232,7 +232,7 @@ int main(int argc, char *argv[]) {
 
     cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
     cout << "Constructor3:   " << endl;
-    cout << "Histogram(icube,1)" << endl;
+    cout << "Histogram(icube,1) Real" << endl;
     cout << endl;
     cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
 
@@ -253,12 +253,136 @@ int main(int argc, char *argv[]) {
     delete(histcube);
     cout << endl;
 
-    } catch (Isis::IException &e) {
+  }
+  catch (Isis::IException &e) {
 
     e.print();
 
+  }
+
+
+  try {
+
+    Isis::FileName cubeFile("$base/testData/isisTruth_Signed16Bit.cub");
+    Isis::Cube icube;
+    icube.open(cubeFile.expanded());
+    Isis::Histogram *histcube;
+    histcube = new Isis::Histogram(icube, 1);
+
+    cout << endl;
+
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+    cout << "Constructor3:   " << endl;
+    cout << "Histogram(icube,1) SignedWord" << endl;
+    cout << endl;
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+
+    Isis::LineManager lm(icube);
+
+    for (int i=1; i <= icube.lineCount(); i++) {
+      lm.SetLine(i);
+      icube.read(lm);
+      histcube->AddData(lm.DoubleBuffer(),lm.size());
     }
 
+    histogramMembers(histcube);
+    statCounters(histcube);
+    cout << "Resetting bin range to (70,110)" << endl;
+    histcube ->SetValidRange(70,110);
+    histogramMembers(histcube);
+    statCounters(histcube);
+    delete(histcube);
+    cout << endl;
+
+  }
+  catch (Isis::IException &e) {
+
+    e.print();
+
+  }
+
+
+  try {
+
+    Isis::FileName cubeFile("$base/testData/isisTruth_Unsigned16Bit.cub");
+    Isis::Cube icube;
+    icube.open(cubeFile.expanded());
+    Isis::Histogram *histcube;
+    histcube = new Isis::Histogram(icube, 1);
+
+    cout << endl;
+
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+    cout << "Constructor3:   " << endl;
+    cout << "Histogram(icube,1) UnsignedWord" << endl;
+    cout << endl;
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+
+    Isis::LineManager lm(icube);
+
+    for (int i=1; i <= icube.lineCount(); i++) {
+      lm.SetLine(i);
+      icube.read(lm);
+      histcube->AddData(lm.DoubleBuffer(),lm.size());
+    }
+
+    histogramMembers(histcube);
+    statCounters(histcube);
+    cout << "Resetting bin range to (70,110)" << endl;
+    histcube ->SetValidRange(70,110);
+    histogramMembers(histcube);
+    statCounters(histcube);
+    delete(histcube);
+    cout << endl;
+
+  }
+  catch (Isis::IException &e) {
+
+    e.print();
+
+  }
+
+
+  try {
+
+    Isis::FileName cubeFile("$base/testData/isisTruth_8Bit.cub");
+    Isis::Cube icube;
+    icube.open(cubeFile.expanded());
+    Isis::Histogram *histcube;
+    histcube = new Isis::Histogram(icube, 1);
+
+    cout << endl;
+
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+    cout << "Constructor3:   " << endl;
+    cout << "Histogram(icube,1) UnsignedByte" << endl;
+    cout << endl;
+    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<endl;
+
+    Isis::LineManager lm(icube);
+
+    for (int i=1; i <= icube.lineCount(); i++) {
+      lm.SetLine(i);
+      icube.read(lm);
+      histcube->AddData(lm.DoubleBuffer(),lm.size());
+    }
+
+    histogramMembers(histcube);
+    statCounters(histcube);
+    cout << "Resetting bin range to (70,110)" << endl;
+    histcube ->SetValidRange(70,110);
+    histogramMembers(histcube);
+    statCounters(histcube);
+    delete(histcube);
+    cout << endl;
+
+  }
+  catch (Isis::IException &e) {
+
+    e.print();
+
+  }
+
   double low1  = -10;
   double high1 = 10;
   int nbins = 5;
diff --git a/isis/src/base/objs/IException/IException.h b/isis/src/base/objs/IException/IException.h
index a5c4672dac6d31e62ccd594044927fa2b1b0af59..561bd85d6dd785b1098c380b0d2778979065df03 100644
--- a/isis/src/base/objs/IException/IException.h
+++ b/isis/src/base/objs/IException/IException.h
@@ -27,6 +27,8 @@
 #include <exception>
 #include <string>
 
+#include "FileName.h"
+
 template <typename T> class QList;
 
 class QString;
@@ -35,7 +37,7 @@ class QString;
  * Macro for the filename and line number. This is typically used for the last
  *   arguments to constructing an IException.
  */
-#define _FILEINFO_ __FILE__,__LINE__
+#define _FILEINFO_ Isis::FileName(__FILE__).name().toStdString().c_str(),__LINE__
 
 namespace Isis {
   class Pvl;
@@ -94,7 +96,13 @@ namespace Isis {
    *                           should (and must) be an empty string. This is
    *                           fixed -- fixes #755.
    *   @history 2012-07-30 Jeff Anderson - Updated internal documentation
-   *                           to improve backward compatibility 
+   *                           to improve backward compatibility
+   *   @history 2018-08-06 Kaitlyn Lee - With the new cmake system, we run unit tests from
+   *                           build/untiTest, while in the old make system, we ran unit tests
+   *                           directly from the object's directory. This change caused the c macro
+   *                           __FILE__ to include the full path of unitTest.cpp when it expands.
+   *                           Consequently, we have to strip the path from __FILE__ and put only
+   *                           the name of the file into _FILEINFO_.
    */
   class IException : public std::exception {
     public:
@@ -109,7 +117,7 @@ namespace Isis {
        /*
        * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
        * If at all possible do not change the enumeration values for the
-       * error codes.  The reason why is it that will change the return 
+       * error codes.  The reason why is it that will change the return
        * status of error messages.  Ground data processing groups (e.g.,
        * HiRISE, LROC, Messenger) will sometime test on the error return
        * values in their scripts.  By keeping the enumerations the same
@@ -250,4 +258,3 @@ namespace Isis {
 };
 
 #endif
-
diff --git a/isis/src/base/objs/IException/unitTest.exclude b/isis/src/base/objs/IException/unitTest.exclude
new file mode 100644
index 0000000000000000000000000000000000000000..220f4aa98a71f6767d753148383fc4c941d4d071
--- /dev/null
+++ b/isis/src/base/objs/IException/unitTest.exclude
@@ -0,0 +1 @@
+File
diff --git a/isis/src/base/objs/IdealCamera/unitTest.cpp b/isis/src/base/objs/IdealCamera/unitTest.cpp
index d476c1be9c08bc7daf577096d415d3c83f2d78d6..e29d4b237a3435435fb3646394e204c1d12dc751 100644
--- a/isis/src/base/objs/IdealCamera/unitTest.cpp
+++ b/isis/src/base/objs/IdealCamera/unitTest.cpp
@@ -2,17 +2,17 @@
  * @file
  *
  *   Unless noted otherwise, the portions of Isis written by the USGS are public
- *   domain. See individual third-party library and package descriptions for 
+ *   domain. See individual third-party library and package descriptions for
  *   intellectual property information,user agreements, and related information.
  *
  *   Although Isis has been used by the USGS, no warranty, expressed or implied,
- *   is made by the USGS as to the accuracy and functioning of such software 
- *   and related material nor shall the fact of distribution constitute any such 
- *   warranty, and no responsibility is assumed by the USGS in connection 
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
  *   therewith.
  *
  *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see 
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
  *   the Privacy &amp; Disclaimers page on the Isis website,
  *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
  *   http://www.usgs.gov/privacy.html.
@@ -54,13 +54,13 @@ int main(void) {
       cam = CameraFactory::Create(cube);
       cout << "FileName: " << FileName(files[i]).name() << endl;
       cout << "CK Frame: " << cam->instrumentRotation()->Frame() << endl << endl;
-      
+
       // Test name methods
       cout << "Spacecraft Name Long: " << cam->spacecraftNameLong() << endl;
       cout << "Spacecraft Name Short: " << cam->spacecraftNameShort() << endl;
       cout << "Instrument Name Long: " << cam->instrumentNameLong() << endl;
       cout << "Instrument Name Short: " << cam->instrumentNameShort() << endl << endl;
-      
+
       cout.setf(std::ios::fixed);
       cout << setprecision(9);
 
@@ -105,13 +105,13 @@ int main(void) {
     // Test kernel ID messages
     cout << "Kernel ID error messages: " << endl;
     try{ cam->CkFrameId(); }
-    catch (IException e){ e.print(); }
+    catch (IException &e){ e.print(); }
     try{ cam->CkReferenceId(); }
-    catch (IException e){ e.print(); }
+    catch (IException &e){ e.print(); }
     try{ cam->SpkTargetId(); }
-    catch (IException e){ e.print(); }
+    catch (IException &e){ e.print(); }
     try{ cam->SpkReferenceId(); }
-    catch (IException e){ e.print(); }
+    catch (IException &e){ e.print(); }
     delete cam;
   }
   catch(IException &e) {
diff --git a/isis/src/base/objs/ImageImporter/ImageImporter.truth b/isis/src/base/objs/ImageImporter/ImageImporter.truth
index 1b0e1a1ef8b1375907fe4aa7bf4dfc71dc644220..87497c95cbee399ead9fe90bf0ae72bc5fe9190a 100644
--- a/isis/src/base/objs/ImageImporter/ImageImporter.truth
+++ b/isis/src/base/objs/ImageImporter/ImageImporter.truth
@@ -2,8 +2,6 @@ Testing ImageImporter...
 
 Creating Instance
 Importing
-Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Clean-up
 
 Done
diff --git a/isis/src/base/objs/ImageOverlapSet/ImageOverlapSet.truth b/isis/src/base/objs/ImageOverlapSet/ImageOverlapSet.truth
index 9d6addc10c66dcda14b5d6427f1a0e1c972e13e8..0b857437b911eaded9b5f988a2d62e65af81960d 100644
--- a/isis/src/base/objs/ImageOverlapSet/ImageOverlapSet.truth
+++ b/isis/src/base/objs/ImageOverlapSet/ImageOverlapSet.truth
@@ -1,6 +1,5 @@
 Test 1
-Calculating Image Overlaps
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
Well Known Text
+Well Known Text
   MULTIPOLYGON (((1.0000000000000000 9.0000000000000000, 3.0000000000000000 9.0000000000000000, 3.0000000000000000 7.0000000000000000, 5.0000000000000000 7.0000000000000000, 5.0000000000000000 4.0000000000000000, 1.0000000000000000 4.0000000000000000, 1.0000000000000000 9.0000000000000000)))
   Number of serial numbers: 1
   Serial numbers: 
diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.cpp b/isis/src/base/objs/ImportPdsTable/unitTest.cpp
index 6052ff633ff0b292c5977b060c5757053847d493..0e59535441494a459f784ce8a0baa8fb277f44f0 100644
--- a/isis/src/base/objs/ImportPdsTable/unitTest.cpp
+++ b/isis/src/base/objs/ImportPdsTable/unitTest.cpp
@@ -12,6 +12,7 @@
 #include "Preference.h"
 #include "Table.h"
 #include "TextFile.h"
+#include "FileName.h"
 
 using namespace std;
 using namespace Isis;
@@ -90,7 +91,9 @@ class ImportPdsTableTester : public ImportPdsTable {
  */
 int main(int argc, char *argv[]) {
   Isis::Preference::Preferences(true);
-  QString inputFile = "data/VIR_IR_1A_1_332974737_1_HK.LBL";
+  Isis::FileName data("data/");
+
+  QString inputFile = data.expanded() + "VIR_IR_1A_1_332974737_1_HK.LBL";
   if (--argc == 1) { inputFile = argv[1]; }
 
   cout << "\n\nTesting ImportPdsTable class using file " << inputFile << "\n";
@@ -156,7 +159,7 @@ int main(int argc, char *argv[]) {
   // The following tests were added when the class was expanded to import binary
   // PDS tables also...
 
-  QString pdsTableDir = "data/";
+  QString pdsTableDir = data.expanded();
   QString pdsLabelFile = "";
   QString pdsTableFile = "";
 
@@ -226,8 +229,8 @@ int main(int argc, char *argv[]) {
   cout << myTable.name() << "\n";
 
 
-  QString merLabelFile = "data/edrindex.lbl";
-  QString merTableFile = "data/edrindex.tab";
+  QString merLabelFile = data.expanded() + "edrindex.lbl";
+  QString merTableFile = data.expanded() + "edrindex.tab";
   cout << "\n\nTesting ImportPdsTable protected methods with file " << merLabelFile;
 
   cout << "\n\nConstructing new ImportPdsTable where the PDS table object name is ";
diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.exclude b/isis/src/base/objs/ImportPdsTable/unitTest.exclude
new file mode 100644
index 0000000000000000000000000000000000000000..23459b86f1f19d971c8088a53e527a8dee82565e
--- /dev/null
+++ b/isis/src/base/objs/ImportPdsTable/unitTest.exclude
@@ -0,0 +1 @@
+Testing ImportPdsTable class using file
diff --git a/isis/src/base/objs/InfixToPostfix/unitTest.cpp b/isis/src/base/objs/InfixToPostfix/unitTest.cpp
index f21ca4cccc6e6984e4764cdfeaedb944441ab39a..edbd0c0e427aae04b47287d06a661c8f0454b35f 100644
--- a/isis/src/base/objs/InfixToPostfix/unitTest.cpp
+++ b/isis/src/base/objs/InfixToPostfix/unitTest.cpp
@@ -54,7 +54,7 @@ int main(int argc, char *argv[]) {
       QString postfix = converter.convert(equations[equation]);
       cout << "   Postfix: '" << postfix << "'" << endl;
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
   }
diff --git a/isis/src/base/objs/Isis/Isis.h b/isis/src/base/objs/Isis/Isis.h
index df6889d3e23bc4f64fde2b2f67a5cfaf2bf9cce3..7fc07640fc044839768fc0c9a9db46baf6e74070 100644
--- a/isis/src/base/objs/Isis/Isis.h
+++ b/isis/src/base/objs/Isis/Isis.h
@@ -107,6 +107,14 @@ void InterruptSignal(int);
  * @return int
  */
 int main(int argc, char *argv[]) {
+  // Verify ISISROOT was set
+  // Note: as printing and logging IExceptions requires ISISROOT to be set (for preferences),
+  //       The case below cannot be handled with IExceptions
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
+
 #ifdef CWDEBUG
   startMonitoringMemory();
   signal(SIGSEGV, SegmentationFault);
@@ -120,10 +128,6 @@ int main(int argc, char *argv[]) {
   Isis::Application::p_applicationForceGuiApp = true;
 #endif
 
-  // Add the plugin directory so QT looks at the Isis plugin dir
-  Isis::FileName qtpluginpath("$ISISROOT/3rdParty/plugins");
-  QCoreApplication::addLibraryPath(qtpluginpath.expanded());
-
   Isis::Application *app = new Isis::Application(argc, argv);
   app->RegisterGuiHelpers(GuiHelpers());
   int status = app->Run(APPLICATION);
diff --git a/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp b/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp
index cd87b4ccdfb7b80754b2d9c191e5bf87310d1ca8..c6b1e1930ddcd0861b6625ec3596bf388ff04c32 100644
--- a/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp
+++ b/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp
@@ -31,8 +31,12 @@
 #include "JP2Error.h"
 
 using namespace std;
+
+#if ENABLEJP2K
 using namespace kdu_core;
 using namespace kdu_supp;
+#endif
+
 namespace Isis {
 
   /**
diff --git a/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp b/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp
index 993850ea8780db837d9b5edd7717576fd5b353d3..9d241ac7e2c68399cc26776802a2c9027e1a7925 100644
--- a/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp
+++ b/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp
@@ -31,8 +31,11 @@
 #include "JP2Error.h"
 
 using namespace std;
+
+#if ENABLEJP2K
 using namespace kdu_core;
 using namespace kdu_supp;
+#endif
 
 namespace Isis {
 
diff --git a/isis/src/base/objs/JP2Encoder/JP2Encoder.h b/isis/src/base/objs/JP2Encoder/JP2Encoder.h
index e142b44ec63df3c8e3f8e322983f67554db13f6c..83ac97c68305bae2b6c29c527dd4a970a2188cb1 100644
--- a/isis/src/base/objs/JP2Encoder/JP2Encoder.h
+++ b/isis/src/base/objs/JP2Encoder/JP2Encoder.h
@@ -30,6 +30,7 @@
 #include "jp2.h"
 #include "kdu_stripe_compressor.h"
 #endif
+
 #define MIN_STRIPE_HEIGHT 256
 #define MAX_STRIPE_HEIGHT 8192
 #define INCREMENTAL_FLUSH_BYTES                         (256 * 1024 * 1024)
diff --git a/isis/src/base/objs/JP2Importer/JP2Importer.truth b/isis/src/base/objs/JP2Importer/JP2Importer.truth
index b2c75e558a824e5def355d03fa05b1d071d82faa..8ae4c83692b68ea8e95977948520d83c72b0994b 100644
--- a/isis/src/base/objs/JP2Importer/JP2Importer.truth
+++ b/isis/src/base/objs/JP2Importer/JP2Importer.truth
@@ -2,8 +2,6 @@ Testing JP2Importer...
 
 Creating Instance
 Importing
-Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Clean-up
 
 Done
diff --git a/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.cpp b/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.cpp
index 515be4df6038d1b4f2a3c352cd6a948e63738145..d925633480b80b2e138ce5b0b57e18d7d5b740dd 100644
--- a/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.cpp
+++ b/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.cpp
@@ -105,18 +105,18 @@ namespace Isis {
    * Creates all parent PVL containers for an output keyword. If any parent
    * containers already exist then they will not be recreated.
    *
-   * @param nName The name of the output keyword. The OutputPosition keyword
-   *              in the translation group for nName will be used to determine
+   * @param translationGroupName The name of the output keyword. The OutputPosition keyword
+   *              in the translation group for translationGroupName will be used to determine
    *              which containers are made.
    * @param pvl The PVL file to create the containers in.
    *
-   * @return @b PvlContainer The immediate parent container for nName.
+   * @return @b PvlContainer The immediate parent container for translationGroupName.
    */
-  PvlContainer *LabelTranslationManager::CreateContainer(const QString nName,
+  PvlContainer *LabelTranslationManager::CreateContainer(const QString translationGroupName,
                                                          Pvl &pvl) {
 
     // Get the array of Objects/Groups from the OutputName keyword
-    PvlKeyword np = OutputPosition(nName);
+    PvlKeyword np = OutputPosition(translationGroupName);
 
     PvlObject *obj = &pvl;
 
diff --git a/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.h b/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.h
index 24ba8f52a27b86bf295ee13e6545ab59c287736c..fd1a580a2a5f2e7db9d7a9ffff90c10c6accf7d7 100644
--- a/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.h
+++ b/isis/src/base/objs/LabelTranslationManager/LabelTranslationManager.h
@@ -68,7 +68,7 @@ namespace Isis {
 
       // Attempt to translate the requested output name to output value
       // using the input name and value/default value
-      virtual QString Translate(QString nName, int findex = 0) = 0;
+      virtual QString Translate(QString translationGroupName, int findex = 0) = 0;
 
       // Translate all translation table groups which contain "Auto"
       virtual void Auto(Pvl &outputLabel);
@@ -76,8 +76,8 @@ namespace Isis {
       virtual QStringList parseSpecification(QString specification) const;
     protected:
 
-      virtual PvlKeyword DoTranslation(const QString nName);
-      virtual PvlContainer *CreateContainer(const QString nName, Pvl &pvl);
+      virtual PvlKeyword DoTranslation(const QString translationGroupName);
+      virtual PvlContainer *CreateContainer(const QString translationGroupName, Pvl &pvl);
   };
 };
 
diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.cpp b/isis/src/base/objs/LeastSquares/LeastSquares.cpp
index aafbbfb17ce18d108891a3a20e5e7da9b0a0aeff..9ef7b873df034ca778966a905b1e59c8c838656c 100644
--- a/isis/src/base/objs/LeastSquares/LeastSquares.cpp
+++ b/isis/src/base/objs/LeastSquares/LeastSquares.cpp
@@ -23,9 +23,7 @@
 #include "jama/jama_svd.h"
 #include "jama/jama_qr.h"
 
-#ifndef __sun__
-#include "gmm/gmm_superlu_interface.h"
-#endif
+#include <armadillo>
 
 #include "LeastSquares.h"
 #include "IException.h"
@@ -45,10 +43,10 @@ namespace Isis {
     p_solved = false;
     p_sparse = sparse;
     p_sigma0 = 0.;
+    
+    p_sparseRows = sparseRows;
+    p_sparseCols = sparseCols;
 
-#if defined(__sun__)
-    p_sparse = false;
-#endif
 
     if (p_sparse) {
 
@@ -59,10 +57,10 @@ namespace Isis {
         throw IException(IException::Programmer, msg, _FILEINFO_);
       }
 
-#ifndef __sun__
-      gmm::resize(p_sparseA, sparseRows, sparseCols);
-      gmm::resize(p_normals, sparseCols, sparseCols);
-      gmm::resize(p_ATb, sparseCols, 1);
+
+      p_sparseA.set_size(sparseRows, sparseCols);
+      p_normals.set_size(sparseCols, sparseCols);
+      p_ATb.resize(sparseCols, 1);
       p_xSparse.resize(sparseCols);
 
       if( p_jigsaw ) {
@@ -71,10 +69,7 @@ namespace Isis {
 
         p_parameterWeights.resize(sparseCols);
       }
-
-#endif
-      p_sparseRows = sparseRows;
-      p_sparseCols = sparseCols;
+      
     }
     p_currentFillRow = -1;
   }
@@ -132,9 +127,7 @@ namespace Isis {
     }
 
     if(p_sparse) {
-#ifndef __sun__
       FillSparseA(data);
-#endif
     }
     else {
       p_input.push_back(data);
@@ -157,21 +150,18 @@ namespace Isis {
    *          from p_weight to p_sqrtweight.
    *
    */
-#ifndef __sun__
   void LeastSquares::FillSparseA(const std::vector<double> &data) {
 
     p_basis->Expand(data);
 
     p_currentFillRow++;
 
-    //  ??? Speed this up using iterator instead of array indices???
     int ncolumns = (int)data.size();
 
     for(int c = 0;  c < ncolumns; c++) {
       p_sparseA(p_currentFillRow, c) = p_basis->Term(c) * p_sqrtWeight[p_currentFillRow];
     }
   }
-#endif
 
 
   /**
@@ -230,10 +220,6 @@ namespace Isis {
    */
   int LeastSquares::Solve(Isis::LeastSquares::SolveMethod method) {
 
-#if defined(__sun__)
-    if(method == SPARSE) method = QRD;
-#endif
-
     if((method == SPARSE  &&  p_sparseRows == 0)  ||
        (method != SPARSE  &&  Rows() == 0 )) {
       p_solved = false;
@@ -248,10 +234,8 @@ namespace Isis {
       SolveQRD();
     }
     else if(method == SPARSE) {
-#ifndef __sun__
       int column = SolveSparse();
       return column;
-#endif
     }
     return 0;
   }
@@ -451,38 +435,27 @@ namespace Isis {
    * @history  2009-04-08 Tracie Sucharski - Added return value which is a
    *                          column number of a column that contained all zeros.
    * @history 2009-12-21  Jeannie Walldren - Changed variable name
-   *          from p_weight to p_sqrtweight.
+   *                          from p_weight to p_sqrtweight.
    * @history 2010        Ken Edmundson
    * @history 2010-11-20  Debbie A. Cook Merged Ken Edmundson verion with system version
    * @history 2011-03-17  Ken Edmundson Corrected computation of residuals
    *
    */
-#ifndef __sun__
   int LeastSquares::SolveSparse() {
 
     // form "normal equations" matrix by multiplying ATA
-    gmm::mult(gmm::transposed(p_sparseA), p_sparseA, p_normals);
-
-    //  Test for any columns with all 0's
-    //  Return column number so caller can determine the appropriate error.
-    int numNonZeros;
-    for(int c = 0; c < p_sparseCols; c++) {
-      numNonZeros = gmm::nnz(gmm::sub_matrix(p_normals,
-                             gmm::sub_interval(0,p_sparseCols),
-                             gmm::sub_interval(c,1)));
-
-      if(numNonZeros == 0) return c + 1;
-    }
+    std::cout << p_sparseA.n_rows << ", " << p_sparseA.n_cols << std::endl;
+    p_normals = p_sparseA.t()*p_sparseA;
 
     // Create the right-hand-side column vector 'b'
-    gmm::dense_matrix<double> b(p_sparseRows, 1);
+    arma::mat b(p_sparseRows, 1);
 
     // multiply each element of 'b' by it's associated weight
     for ( int r = 0; r < p_sparseRows; r++ )
       b(r,0) = p_expected[r] * p_sqrtWeight[r];
 
     // form ATb
-    gmm::mult(gmm::transposed(p_sparseA), b, p_ATb);
+    p_ATb = p_sparseA.t()*b;
 
     // apply parameter weighting if Jigsaw (bundle adjustment)
     if ( p_jigsaw ) {
@@ -492,25 +465,20 @@ namespace Isis {
         if( weight <= 0.0 )
           continue;
 
-        p_normals[i][i] += weight;
-        p_ATb[i] -= p_epsilonsSparse[i]*weight;
+        p_normals(i, i) += weight;
+        p_ATb(i, 0) -= p_epsilonsSparse[i]*weight;
       }
     }
+    
+    bool status = spsolve(p_xSparse, p_normals, p_ATb, "superlu");
+    
+    if (status == false) {
+      QString msg = "Could not solve sparse least squares problem.";
+      throw IException(IException::Unknown, msg, _FILEINFO_);
+    }
 
-//    printf("printing rhs\n");
-//    for( int i = 0; i < m_nSparseCols; i++ )
-//      printf("%20.10e\n",m_ATb[i]);
-
-    // decompose normal equations matrix
-    p_SLU_Factor.build_with(p_normals);
-
-    // solve with decomposed normals and right hand side
-    // int perm = 0;  //  use natural ordering
-    int perm = 2;     //  confirm meaning and necessity of
-//  double recond;    //  variables perm and recond
-    p_SLU_Factor.solve(p_xSparse,gmm::mat_const_col(p_ATb,0), perm);
     // Set the coefficients in our basis equation
-    p_basis->SetCoefficients(p_xSparse);
+    p_basis->SetCoefficients(arma::conv_to< std::vector<double> >::from(p_xSparse));
 
     // if Jigsaw (bundle adjustment)
     // add corrections into epsilon vector (keeping track of total corrections)
@@ -519,30 +487,13 @@ namespace Isis {
         p_epsilonsSparse[i] += p_xSparse[i];
     }
 
-    // test print solution
-//    printf("printing solution vector and epsilons\n");
-//    for( int a = 0; a < p_sparseCols; a++ )
-//      printf("soln[%d]: %lf epsilon[%d]: %lf\n",a,p_xSparse[a],a,p_epsilonsSparse[a]);
-
-//    printf("printing design matrix A\n");
-//    for (int i = 0; i < p_sparseRows; i++ )
-//    {
-//      for (int j = 0; j < p_sparseCols; j++ )
-//      {
-//        if ( j == p_sparseCols-1 )
-//          printf("%20.20e \n",(double)(p_sparseA(i,j)));
-//        else
-//          printf("%20.20e ",(double)(p_sparseA(i,j)));
-//      }
-//    }
-
     // Compute the image coordinate residuals and sum into Sigma0
     // (note this is exactly what was being done before, but with less overhead - I think)
     // ultimately, we should not be using the A matrix but forming the normals
     // directly. Then we'll have to compute the residuals by back projection
 
     p_residuals.resize(p_sparseRows);
-    gmm::mult(p_sparseA, p_xSparse, p_residuals);
+    p_residuals = arma::conv_to< std::vector<double> >::from(p_sparseA*p_xSparse);
     p_sigma0 = 0.0;
 
     for ( int i = 0; i < p_sparseRows; i++ ) {
@@ -571,144 +522,31 @@ namespace Isis {
     p_degreesOfFreedom = p_sparseRows + p_constrainedParameters - p_sparseCols;
 
     if( p_degreesOfFreedom <= 0.0 ) {
-      printf("Observations: %d\nConstrained: %d\nParameters: %d\nDOF: %d\n",
-             p_sparseRows,p_constrainedParameters,p_sparseCols,p_degreesOfFreedom);
       p_sigma0 = 1.0;
     }
-    else
+    else {
       p_sigma0 = p_sigma0/(double)p_degreesOfFreedom;
+    }
 
     // check for p_sigma0 < 0
     p_sigma0 = sqrt(p_sigma0);
 
-    // kle testing - output residuals and some stats
-    printf("Sigma0 = %20.10lf\nNumber of Observations = %d\nNumber of Parameters = %d\nNumber of Constrained Parameters = %d\nDOF = %d\n",p_sigma0,p_sparseRows,p_sparseCols,p_constrainedParameters,p_degreesOfFreedom);
-//    printf("printing residuals\n");
-//    for( int k = 0; k < p_sparseRows; k++ )
-//    {
-//      printf("%lf %lf\n",p_residuals[k],p_residuals[k+1]);
-//      k++;
-//    }
-
     // All done
     p_solved = true;
     return 0;
   }
-#endif
-
-  /**
-   * @brief  Error propagation for sparse least-squares solution
-   *
-   * Computes the variance-covariance matrix of the parameters.
-   * This is the inverse of the normal equations matrix, scaled by
-   * the reference variance (also called variance of unit weight,
-   * etc).
-   *
-   * @internal
-   * @history  2009-11-19 Ken Edmundson, New method
-   *
-   * Notes:
-   *
-   * 1) The SLU_Factor (Super LU Factor) has already been
-   * factorised in each iteration but there is no gmm++ method to
-   * get the inverse of the sparse matrix implementation. so we
-   * have to get it ourselves. This is don by solving the
-   * factorized normals repeatedly with right-hand sides that are
-   * the columns of the identity matrix (which is how gmm - or
-   * anybody else would do it).
-   *
-   * 2) We should create our own matrix library, probably wrapping
-   * the gmm++ library (and perhaps other(s) that may have
-   * additional desired functionality). The inverse function
-   * should be part of the library, along with the capacity for
-   * triangular storage and other decomposition techniques -
-   * notably Cholesky.
-   *
-   * 3) The LU decomposition can be be performed even if the
-   * normal equations are singular. But, we should always be
-   * dealing with a positive-definite matrix (for the bundle
-   * adjustment). Cholesky is faster, more efficient, and requires
-   * a positive-definite matrix, so if it fails, it is an
-   * indication of a singular matrix - bottom line - we should be
-   * using Cholesky. Or a derivative of Cholesky, i.e., UTDU
-   * (LDLT).
-   *
-   * 4) As a consequence of 3), we should be checking for
-   * positive-definite state of the normals, perhaps via the
-   * matrix determinant, prior to solving. There is a check in
-   * place now that checks to see if a column of the design matrix
-   * (or basis?) is all zero. This is equivalent - if a set of
-   * vectors contains the zero vector, then the set is linearly
-   * dependent, and the matrix is not positive-definite. In
-   * Jigsaw, the most likely cause of the normals being
-   * non-positive-definite probably is failure to establish the
-   * datum (i.e. constraining a minimum of seven parameters -
-   * usually 3 coordinates of two points and 1 of a third).
-   */
-#ifndef __sun__
-  bool LeastSquares::SparseErrorPropagation ()
-  {
-    // clear memory
-    gmm::clear(p_ATb);
-    gmm::clear(p_xSparse);
-
-    // for each column of the inverse, solve with a right-hand side consisting
-    // of a column of the identity matrix, putting each resulting solution vectfor
-    // into the corresponding column of the inverse matrix
-    for ( int i = 0; i < p_sparseCols; i++ )
-    {
-      if( i > 0 )
-        p_ATb(i-1,0) = 0.0;
-
-      p_ATb(i,0) = 1.0;
-
-      // solve with decomposed normals and right hand side
-      p_SLU_Factor.solve(p_xSparse,gmm::mat_const_col(p_ATb,0));
-
-      // put solution vector x into current column of inverse matrix
-      gmm::copy(p_xSparse, gmm::mat_row(p_normals, i));
-    }
-
-    // scale inverse by Sigma0 squared to get variance-covariance matrix
-    // if simulated data, we don't scale (effectively scaling by 1.0)
-    //    printf("scaling by Sigma0\n");
-    gmm::scale(p_normals,(p_sigma0*p_sigma0));
-
-//    printf("covariance matrix\n");
-//    for (int i = 0; i < p_sparseCols; i++ )
-//    {
-//      for (int j = 0; j < p_sparseCols; j++ )
-//      {
-//        if ( j == p_sparseCols-1 )
-//          printf("%20.20e \n",(double)(p_sparseInverse(i,j)));
-//        else
-//          printf("%20.20e ",(double)(p_sparseInverse(i,j)));
-//      }
-//    }
-
-    // standard deviations from covariance matrix
-//    printf("parameter standard deviations\n");
-//  for (int i = 0; i < p_sparseCols; i++ )
-//    {
-//      printf("Sigma Parameter %d = %20.20e \n",i+1,sqrt((double)(p_sparseInverse(i,i))));
-//    }
-
-    return true;
-  }
-#endif
 
 
   void LeastSquares::Reset ()
   {
     if ( p_sparse ) {
-      gmm::clear(p_sparseA);
-      gmm::clear(p_ATb);
-      gmm::clear(p_normals);
+      p_sparseA.zeros();
+      p_ATb.zeros();
+      p_normals.zeros();
       p_currentFillRow = -1;
     }
     else {
       p_input.clear();
-      //      p_sigma0 = 0.;
     }
       p_sigma0 = 0.;
     p_residuals.clear();
diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.h b/isis/src/base/objs/LeastSquares/LeastSquares.h
index 9f149c61cd33f050b3942a93c37da22de33b6504..d3d3ccc5f986da38136d42a749dea3a91e924a76 100644
--- a/isis/src/base/objs/LeastSquares/LeastSquares.h
+++ b/isis/src/base/objs/LeastSquares/LeastSquares.h
@@ -26,11 +26,7 @@
 
 #include "tnt/tnt_array2d.h"
 
-
-#ifndef __sun__
-// used to ignore warnings generated by gmm.h when building on clang
-#include "gmm/gmm.h"
-#endif
+#include <armadillo>
 
 #include "BasisFunction.h"
 
@@ -112,6 +108,8 @@ namespace Isis {
    *                            to reset all solution methods
    *   @history  2010-11-22 Debbie A. Cook - Merged with Ken Edmundson version
    *   @history  2013-12-29 Jeannie Backer - Improved error messages. Fixes #962.
+   *   @history  2019-09-05 Makayla Shepherd & Jesse Mapel - Changed sparse solution to use
+   *                            Armadillo library's SuperLU interface instead of GMM.
    *
    */
   class LeastSquares {
@@ -152,36 +150,29 @@ namespace Isis {
       int GetDegreesOfFreedom() { return p_degreesOfFreedom; }
       void Reset ();
 
-#ifndef __sun__
       void ResetSparse() { Reset(); }
-      bool SparseErrorPropagation();
       std::vector<double> GetEpsilons () const { return p_epsilonsSparse; }
       void SetParameterWeights(const std::vector<double> weights) { p_parameterWeights = weights; }
       void SetNumberOfConstrainedParameters(int n) { p_constrainedParameters = n; }
-      const gmm::row_matrix<gmm::rsvector<double> >& GetCovarianceMatrix () const { return p_normals; }
-#endif
 
     private:
       void SolveSVD();
       void SolveQRD();
       void SolveCholesky () {}
 
-#ifndef __sun__
       int SolveSparse();
       void FillSparseA(const std::vector<double> &data);
       bool ApplyParameterWeights();
 
-      std::vector<double> p_xSparse;          /**<sparse solution vector*/
+      arma::mat p_xSparse;          /**<sparse solution matrix*/
       std::vector<double> p_epsilonsSparse;   /**<sparse vector of total parameter corrections*/
       std::vector<double> p_parameterWeights; /**<vector of parameter weights*/
 
-      gmm::row_matrix<gmm::rsvector<double> > p_sparseA; /**<design matrix 'A' */
-  private:
-      gmm::row_matrix<gmm::rsvector<double> > p_normals; /**<normal equations matrix 'N'*/
-  private:
-      gmm::dense_matrix<double> p_ATb;                   /**<right-hand side vector*/
-      gmm::SuperLU_factor<double> p_SLU_Factor;          /**<decomposed normal equations matrix*/
-#endif
+      arma::SpMat<double> p_sparseA; /**<design matrix 'A' */
+      arma::SpMat<double> p_normals; /**<normal equations matrix 'N'*/
+      arma::mat p_ATb;                   /**<right-hand side vector*/
+      arma::mat p_SLU_Factor;          /**<decomposed normal equations matrix*/
+
       bool p_jigsaw;
       bool p_sparse;
       bool p_solved;  /**<Boolean value indicating solution is complete*/
diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.truth b/isis/src/base/objs/LeastSquares/LeastSquares.truth
index 9cb4f7e9e66a11e499c2a8084716eb5e1987f71c..6caeb1d0239fa53f9af067a5ae38786f0020f9d0 100644
--- a/isis/src/base/objs/LeastSquares/LeastSquares.truth
+++ b/isis/src/base/objs/LeastSquares/LeastSquares.truth
@@ -29,5 +29,15 @@ Number of Knowns = 7
   tre = 1.88318		1.88318
   x =   1.65888		1.65888
   y =   1.43458		1.43458
+---
+*** TEST 4:  SAME 3 POINTS, SPARSE ***
+3, 2
+Number of Knowns = 3
+        SPARSE
+  one = 3.08
+  two = 0.94
+  tre = 1.9
+  x =   1.66
+  y =   1.42
 
 **ERROR** No solution available because no input data was provided.
diff --git a/isis/src/base/objs/LeastSquares/unitTest.cpp b/isis/src/base/objs/LeastSquares/unitTest.cpp
index 67454bef045be5be23f7c4957aa6081e4265c895..02e5e0633fbd74b1adb2451216b98706c5f06e3e 100644
--- a/isis/src/base/objs/LeastSquares/unitTest.cpp
+++ b/isis/src/base/objs/LeastSquares/unitTest.cpp
@@ -117,6 +117,27 @@ int main() {
     cerr << "  tre = " << evalSVD3 << "\t\t" << evalQRD3 << endl;
     cerr << "  x =   " << xcoefSVD << "\t\t" << xcoefQRD << endl;
     cerr << "  y =   " << ycoefSVD << "\t\t" << ycoefQRD << endl ;
+    cerr << "---" << endl;
+
+    cerr << "*** TEST 4:  SAME 3 POINTS, SPARSE ***" << endl;
+    Isis::LeastSquares sparse(b, true, 3, 2, false);
+    sparse.AddKnown(one, 3.0);
+    sparse.AddKnown(two, 1.0);
+    sparse.AddKnown(tre, 2.0);
+    int sparseKnowns = sparse.Knowns();;
+    sparse.Solve(Isis::LeastSquares::SPARSE);
+    double evalSPARSE1 = sparse.Evaluate(one);
+    double evalSPARSE2 = sparse.Evaluate(two);
+    double evalSPARSE3 = sparse.Evaluate(tre);
+    double xcoefSPARSE = b.Coefficient(0);
+    double ycoefSPARSE = b.Coefficient(1);
+    cerr << "Number of Knowns = " << sparseKnowns << endl;
+    cerr << "        SPARSE" << endl;
+    cerr << "  one = " << evalSPARSE1 << endl;
+    cerr << "  two = " << evalSPARSE2 << endl;
+    cerr << "  tre = " << evalSPARSE3 << endl;
+    cerr << "  x =   " << xcoefSPARSE << endl;
+    cerr << "  y =   " << ycoefSPARSE << endl ;
   }
   catch(Isis::IException &e) {
     e.print();
diff --git a/isis/src/base/objs/NumericalApproximation/unitTest.cpp b/isis/src/base/objs/NumericalApproximation/unitTest.cpp
index 150fd810a5b06d74222d2e89020c4ec01822484c..5ce37cf3df75d136916a0fb75a7ad7b3b302ea0c 100644
--- a/isis/src/base/objs/NumericalApproximation/unitTest.cpp
+++ b/isis/src/base/objs/NumericalApproximation/unitTest.cpp
@@ -102,7 +102,7 @@ int main(int argc, char *argv[]) {
     try {
       interp.SetInterpType(NumericalApproximation::InterpType(11));
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     cout << "\t************************************************" << endl;
@@ -131,7 +131,7 @@ int main(int argc, char *argv[]) {
       y.pop_back();
       NumericalApproximation uneven(x, y);
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     cout << "\t************************************************" << endl;
@@ -177,14 +177,14 @@ int main(int argc, char *argv[]) {
       interp2.AddData(0, .8);
       interp2.DomainMinimum();
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     interp2.Reset();
     try { // DATA SET IS LESS THAN MINPOINTS
       interp2.DomainMaximum();
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     interp2.AddData(x, y);
@@ -194,7 +194,7 @@ int main(int argc, char *argv[]) {
     try {
       interp4.Evaluate(.5);
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     interp4.SetCubicClampedEndptDeriv(fstderiv(x[0]), fstderiv(x[x.size()-1]));
@@ -202,14 +202,14 @@ int main(int argc, char *argv[]) {
       interp4.AddData(.9, f(.9));
       interp4.Evaluate(.5);
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try { // CubicClamped DATA SET IS NOT IN ASCENDING ORDER
       interp4.AddData(.5, f(.5));
       interp4.DomainMinimum();
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     // restore interp4 object
@@ -222,7 +222,7 @@ int main(int argc, char *argv[]) {
       interp5.SetInterpType(NumericalApproximation::CubicNatPeriodic);
       interp5.DomainMinimum();
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     interp5.Reset(NumericalApproximation::PolynomialNeville);
@@ -232,7 +232,7 @@ int main(int argc, char *argv[]) {
     try { //  DATA SET SIZE DOESN'T MATCH NUMBER OF DERIVATIVES ADDED
       interp6.AddCubicHermiteDeriv(fstderiv(3));
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     interp6.Reset();
@@ -311,35 +311,35 @@ int main(int argc, char *argv[]) {
     try {
       interp2.Evaluate(.9);
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     // Test outside domain Extrapolate throws exception for GSL
     try {
       interp2.Evaluate(.9, NumericalApproximation::Extrapolate);
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     // Test outside domain Extrapolate throws exception for CubicNeighborhood
     try {
       interp3.Evaluate(.9, NumericalApproximation::Extrapolate);
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     // interp2 IS NOT OF INTERP TYPE polynomial-Neville
     try {
       interp2.PolynomialNevilleErrorEstimate();
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try { // Evaluate() HAS NOT BEEN CALLED
       interp2.SetInterpType(NumericalApproximation::PolynomialNeville);
       interp2.PolynomialNevilleErrorEstimate();
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     // Test Reset() and restore the state of interp2
@@ -398,133 +398,133 @@ int main(int argc, char *argv[]) {
     try {
       interp2.GslFirstDerivative(1.0); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.GslFirstDerivative(0.2); // not GSL supported
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.BackwardFirstDifference(-1.0); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.BackwardFirstDifference(0.01, 2, .1); // steps outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.BackwardFirstDifference(0.1, 4, .01); // no 4pt formula
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.ForwardFirstDifference(-0.01); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.ForwardFirstDifference(0.75, 3, .1); // steps outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.ForwardFirstDifference(0.1, 4, .01); // no 4pt formula
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.CenterFirstDifference(.81); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.CenterFirstDifference(0.01, 5, .1); // steps outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.CenterFirstDifference(0.1, 4, .01); // no 4pt formula
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp1.GslSecondDerivative(1.0); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.GslSecondDerivative(0.8); // not GSL supported
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.BackwardSecondDifference(-1.0); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.BackwardSecondDifference(0.01, 3, .1); // steps outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.BackwardSecondDifference(0.1, 2, .01); // no 2pt formula
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.ForwardSecondDifference(-0.01); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.ForwardSecondDifference(0.75, 3, .1); // steps outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.ForwardSecondDifference(0.1, 2, .01); // no 2pt formula
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.CenterSecondDifference(.81); // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.CenterSecondDifference(0.01, 5, .1); // steps outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       interp3.CenterSecondDifference(0.1, 4, .01); // no 4pt formula
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     //interp2.AddData(x,y);
@@ -572,31 +572,31 @@ int main(int argc, char *argv[]) {
     try {
       cout << interp1.GslIntegral(1.1, 1.0) << endl; // invalid interval
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       cout << interp1.GslIntegral(1.0, 1.1) << endl; // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       cout << interp3.GslIntegral(0.0, 0.8) << endl; // not GSL supported
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       cout << interp1.TrapezoidalRule(.81, .70) << endl; // invalid interval
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     try {
       cout << interp1.TrapezoidalRule(-.1, .70) << endl; // outside domain
     }
-    catch(IException e) {
+    catch(IException &e) {
       e.print();
     }
     cout << "\t************************************************" << endl;
diff --git a/isis/src/base/objs/OverlapNormalization/OverlapNormalization.cpp b/isis/src/base/objs/OverlapNormalization/OverlapNormalization.cpp
index bf6c849ba91b9f31d9e6bbaa66a82ea5143b68c7..7aa798229f3fee2c0d6b57c76e533ab306670b30 100644
--- a/isis/src/base/objs/OverlapNormalization/OverlapNormalization.cpp
+++ b/isis/src/base/objs/OverlapNormalization/OverlapNormalization.cpp
@@ -176,7 +176,7 @@ namespace Isis {
                    "holds must be greater than the number of input images";
       throw IException(IException::User, msg, _FILEINFO_);
     }
-
+    
     if ( method == LeastSquares::SPARSE ) {
       m_offsetLsq = NULL;
       m_gainLsq = NULL;
@@ -267,7 +267,7 @@ namespace Isis {
           m_gainLsq->AddKnown(input, log(tanp), m_weights[overlap]);
         }
         else {
-          m_gainLsq->AddKnown(input, 0.0, 1e30); // Set gain to 1.0
+          m_gainLsq->AddKnown(input, 0.0, 1e10); // Set gain to 1.0
         }
       }
 
@@ -279,7 +279,7 @@ namespace Isis {
         input.resize(m_statsList.size());
         for (int i = 0; i < (int)input.size(); i++) input[i] = 0.0;
         input[hold] = 1.0;
-        m_gainLsq->AddKnown(input, 0.0, 1e30);
+        m_gainLsq->AddKnown(input, 0.0, 1e10);
       }
 
       // Solve the least squares and get the gain coefficients to apply to the
diff --git a/isis/src/base/objs/OverlapNormalization/OverlapNormalization.h b/isis/src/base/objs/OverlapNormalization/OverlapNormalization.h
index 43265ea13698559acf3e7dac51da0dd4fbccd9d8..9d8c307236483a99b3312c3e3d6f8b4c05ad78d2 100644
--- a/isis/src/base/objs/OverlapNormalization/OverlapNormalization.h
+++ b/isis/src/base/objs/OverlapNormalization/OverlapNormalization.h
@@ -70,6 +70,8 @@ namespace Isis {
    *                           message. Fixes #962,
    *   @history 2013-02-14 Steven Lambright - Added SolutionType GainsWithoutNormalization. Fixes
    *                           #911.
+   *   @history 2019-09-05 Makayla Shepherd & Jesse Mapel - Changed weight for hold images from
+   *                           1E30 to 1E10 to avoid poorly conditioned normal matrix.
    */
 
   class OverlapNormalization {
diff --git a/isis/src/base/objs/OverlapNormalization/OverlapNormalization.truth b/isis/src/base/objs/OverlapNormalization/OverlapNormalization.truth
index 892f0e548c046c9db6e415a1a504a914ebfac0e3..6c6f39cafec0a2a0da5418c254c3b302ef664d1f 100644
--- a/isis/src/base/objs/OverlapNormalization/OverlapNormalization.truth
+++ b/isis/src/base/objs/OverlapNormalization/OverlapNormalization.truth
@@ -1,18 +1,6 @@
 UnitTest for Overlap Normalization
-Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 statsList size: 3
 oNorm creation == SUCCESS
-Gathering Overlap Statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering Overlap Statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Gathering Overlap Statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 I00824006RDR.lev2.cub : Gathered Offset: -6.418653512314e-05
 I00824006RDR.lev2.cub : Gathered Gain: 0.8024773380228
 I01523019RDR.lev2.cub : Gathered Offset: 0
diff --git a/isis/src/base/objs/OverlapStatistics/OverlapStatistics.truth b/isis/src/base/objs/OverlapStatistics/OverlapStatistics.truth
index ff37a5a6eff314effde9b334dcf608ffbdf6306d..2e5a288abdf06c6632c44a6187aa18263a8d2e7c 100644
--- a/isis/src/base/objs/OverlapStatistics/OverlapStatistics.truth
+++ b/isis/src/base/objs/OverlapStatistics/OverlapStatistics.truth
@@ -1,6 +1,4 @@
 UnitTest for Overlap Statistics
-Gathering Overlap Statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 For Overlap of I00824006RDR.lev2.cub & I02609002RDR.lev2.cub...
 Has Overlap? = 0
 
diff --git a/isis/src/base/objs/Pipeline/Pipeline.truth b/isis/src/base/objs/Pipeline/Pipeline.truth
index ae902f7070517a551a255876f7f0064f7dc6da5d..b15f7378b1850d37be63e4ab5ddf8f89061027e7 100644
--- a/isis/src/base/objs/Pipeline/Pipeline.truth
+++ b/isis/src/base/objs/Pipeline/Pipeline.truth
@@ -457,10 +457,11 @@ noisefilter FROM="$ISIS3DATA/mro/testData/PSP_001446_1790_BG12_0.cub" TO="./out.
 lowpass FROM="$ISIS3DATA/mro/testData/PSP_001446_1790_BG12_0.cub" TO="./out.cub" SAMPLES="3" LINES="3"
 PIPELINE -------> unitTest6 <------- PIPELINE
 
-unittest: unitTest6
+**ERROR** Running Isis program [noisefilter] failed with return status [2].
 **USER ERROR** Parameter [SAMPLES] must be greater than or equal to [1].
 Continuing ......
-unittest: Running lowpass
+unittest: Working
+0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 *** Application level continue option ***
 PIPELINE -------> unitTest7 <------- PIPELINE
@@ -468,7 +469,8 @@ noisefilter FROM="$ISIS3DATA/mro/testData/PSP_001446_1790_BG12_0.cub" TO="./out.
 lowpass FROM="$ISIS3DATA/mro/testData/PSP_001446_1790_BG12_0.cub" TO="./out.cub" SAMPLES="3" LINES="3"
 PIPELINE -------> unitTest7 <------- PIPELINE
 
-unittest: unitTest7
+**ERROR** Running Isis program [noisefilter] failed with return status [2].
 **USER ERROR** Parameter [SAMPLES] must be greater than or equal to [1].
 Continuing ......
-unittest: Running lowpass
+unittest: Working
+0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
diff --git a/isis/src/base/objs/Pipeline/unitTest.cpp b/isis/src/base/objs/Pipeline/unitTest.cpp
index b582f73062f920264865e46bc4d724fad5daf5ea..92eb7cd457d1eeaa829d09306e6d9ac75af9a458 100644
--- a/isis/src/base/objs/Pipeline/unitTest.cpp
+++ b/isis/src/base/objs/Pipeline/unitTest.cpp
@@ -1,5 +1,6 @@
 #include "Isis.h"
 #include "Pipeline.h"
+#include "Preference.h"
 #include "SpecialPixel.h"
 #include "UserInterface.h"
 
@@ -14,6 +15,8 @@ void PipeListed();
 void PipeContinue();
 
 void IsisMain() {
+  Preference::Preferences(true);
+  
   UserInterface &ui = Application::GetUserInterface();
   ui.PutFileName("FROM",  "$ISIS3DATA/odyssey/testData/I00831002RDR.even.cub");
   ui.PutFileName("FROM2", "$ISIS3DATA/odyssey/testData/I00831002RDR.odd.cub");
@@ -22,9 +25,9 @@ void IsisMain() {
 
   ui.Clear("MAPPING");
   ui.PutBoolean("MAPPING", true);
-  std::cout << "Simple Pipe" << std::endl;
+  std::cerr << "Simple Pipe" << std::endl;
   PipeSimple();
-  std::cout << "Simple Pipe 2" << std::endl;
+  std::cerr << "Simple Pipe 2" << std::endl;
   ui.Clear("MAPPING");
   ui.PutBoolean("MAPPING", false);
   ui.PutString("BANDS", "2,4-5");
@@ -32,33 +35,33 @@ void IsisMain() {
 
   ui.Clear("MAPPING");
   ui.PutBoolean("MAPPING", true);
-  std::cout << "Non-Merging Branching Pipe" << std::endl;
+  std::cerr << "Non-Merging Branching Pipe" << std::endl;
   PipeBranched();
-  std::cout << "Standard Branching Pipe" << std::endl;
+  std::cerr << "Standard Branching Pipe" << std::endl;
   ui.Clear("MAPPING");
   ui.PutBoolean("MAPPING", false);
   PipeBranched();
 
-  std::cout << "Complicated Branching Pipe" << std::endl;
+  std::cerr << "Complicated Branching Pipe" << std::endl;
   PipeMultiBranched();
 
   ui.Clear("FROM");
   ui.Clear("TO");
   ui.PutFileName("FROM", "unitTest.lis");
-  std::cout << "Testing listing methods" << std::endl;
+  std::cerr << "Testing listing methods" << std::endl;
   PipeListed();
   
   ui.Clear("FROM");
   ui.Clear("TO");
   ui.PutAsString("FROM", "$ISIS3DATA/odyssey/testData/I00831002RDR.cub");
   ui.PutFileName("TO", "./out.cub");
-  std::cout << "*** Branching Pipe with a branch disabled ***" << std::endl;
+  std::cerr << "*** Branching Pipe with a branch disabled ***" << std::endl;
   PipeBranchDisabled();
   
   ui.Clear("TO");
   ui.PutFileName("TO",   "./out.cub");
-  std::cout << "\n*** Continue option ***" << endl;
-  cout << "input=" << ui.GetAsString("FROM") << endl;
+  std::cerr << "\n*** Continue option ***" << endl;
+  cerr << "input=" << ui.GetAsString("FROM") << endl;
   PipeContinue();
 }
 
@@ -76,7 +79,7 @@ void PipeBranched() {
   p.Application("thm2isis").AddBranch("even", PipelineApplication::ConstantStrings);
   p.Application("thm2isis").AddBranch("odd", PipelineApplication::ConstantStrings);
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("spiceinit");
   p.Application("spiceinit").SetInputParameter("FROM", false);
@@ -87,13 +90,13 @@ void PipeBranched() {
   p.Application("spiceinit").AddParameter("MODEL", "MODEL");
   p.Application("spiceinit").AddParameter("CKNADIR", "CKNADIR");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("thmvisflat");
   p.Application("thmvisflat").SetInputParameter("FROM", true);
   p.Application("thmvisflat").SetOutputParameter("TO", "flat");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("thmvistrim");
   p.Application("thmvistrim").SetInputParameter("FROM", true);
@@ -104,7 +107,7 @@ void PipeBranched() {
     p.Application("thmvistrim").Disable();
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("cam2map");
   p.Application("cam2map").SetInputParameter("FROM", true);
@@ -117,19 +120,19 @@ void PipeBranched() {
     p.Application("cam2map").AddConstParameter("even", "PIXRES", "MPP");
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.Application("cam2map").AddParameter("odd", "MAP", PipelineApplication::LastOutput);
   p.Application("cam2map").AddConstParameter("odd", "PIXRES", "MAP");
   p.Application("cam2map").AddConstParameter("odd", "DEFAULTRANGE", "MAP");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("automos");
   p.Application("automos").SetInputParameter("FROMLIST", PipelineApplication::LastAppOutputList, false);
   p.Application("automos").SetOutputParameter("TO", "mos");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   if(ui.GetBoolean("INGESTION")) {
     p.SetFirstApplication("thm2isis");
@@ -138,7 +141,7 @@ void PipeBranched() {
     p.SetFirstApplication("spiceinit");
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 
   if(ui.GetBoolean("MAPPING")) {
     p.SetLastApplication("automos");
@@ -147,7 +150,7 @@ void PipeBranched() {
     p.SetLastApplication("thmvistrim");
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 }
 
 void PipeSimple() {
@@ -163,7 +166,7 @@ void PipeSimple() {
   p.Application("thm2isis").SetInputParameter("FROM", false);
   p.Application("thm2isis").SetOutputParameter("TO", "lev1");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("spiceinit");
   p.Application("spiceinit").SetInputParameter("FROM", false);
@@ -174,7 +177,7 @@ void PipeSimple() {
   p.Application("spiceinit").AddParameter("MODEL", "MODEL");
   p.Application("spiceinit").AddParameter("CKNADIR", "CKNADIR");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("cam2map");
   p.Application("cam2map").SetInputParameter("FROM", true);
@@ -182,13 +185,13 @@ void PipeSimple() {
   p.Application("cam2map").AddParameter("MAP", "MAP");
   p.Application("cam2map").AddParameter("PIXRES", "RESOLUTION");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   if(ui.WasEntered("PIXRES")) {
     p.Application("cam2map").AddConstParameter("PIXRES", "MPP");
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 
   if(ui.GetBoolean("INGESTION")) {
     p.SetFirstApplication("thm2isis");
@@ -197,7 +200,7 @@ void PipeSimple() {
     p.SetFirstApplication("spiceinit");
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 
   if(ui.GetBoolean("MAPPING")) {
     p.SetLastApplication("cam2map");
@@ -206,7 +209,7 @@ void PipeSimple() {
     p.SetLastApplication("spiceinit");
   }
 
-  cout << p << endl;
+  cerr << p << endl;
 }
 
 void PipeMultiBranched() {
@@ -227,7 +230,7 @@ void PipeMultiBranched() {
   p.Application("fft").SetOutputParameter("FROM2.mag", "MAGNITUDE", "fft", "cub");
   p.Application("fft").SetOutputParameter("FROM2.phase", "PHASE", "fft", "cub");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("fx");
   p.Application("fx").SetInputParameter("FILELIST", PipelineApplication::LastAppOutputListNoMerge, false);
@@ -237,14 +240,14 @@ void PipeMultiBranched() {
   p.Application("fx").AddConstParameter("MODE", "list");
   p.Application("fx").AddConstParameter("FROM2.phase", "equation", "1+3");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("ifft");
   p.Application("ifft").SetInputParameter("MAGNITUDE", true);
   p.Application("ifft").AddParameter("PHASE", PipelineApplication::LastOutput);
   p.Application("ifft").SetOutputParameter("FROM.mag", "TO", "untranslated", "cub");
 
-  cout << p << endl;
+  cerr << p << endl;
 
   p.AddToPipeline("translate");
   p.Application("translate").SetInputParameter("FROM", true);
@@ -253,7 +256,7 @@ void PipeMultiBranched() {
   p.Application("translate").AddConstParameter("INTERP", "near");
   p.Application("translate").SetOutputParameter("FROM.mag", "TO", "final", "cub");
 
-  cout << p << endl;
+  cerr << p << endl;
 }
 
 void PipeListed() {
@@ -284,7 +287,7 @@ void PipeListed() {
   p.Application("noproj").SetOutputParameter("TO", "noproj");
   p.Application("noproj").SetOutputParameter("TO", "jitter");
 
-  std::cout << p << std::endl;
+  std::cerr << p << std::endl;
 }
 
 /**
@@ -310,7 +313,7 @@ void PipeBranchDisabled(void)
   p.Application("lowpass").EnableBranch("lpf", true);
   p.Application("lowpass").EnableBranch("hpf", false);
   
-  //std::cout << p;
+  //std::cerr << p;
     
   p.AddToPipeline("highpass");
   p.Application("highpass").SetInputParameter("FROM", false);
@@ -320,7 +323,7 @@ void PipeBranchDisabled(void)
   p.Application("highpass").EnableBranch("lpf", false);
   p.Application("highpass").EnableBranch("hpf", true);
   
-  //std::cout << p;
+  //std::cerr << p;
   
   p.AddToPipeline("fx");
   p.Application("fx").SetInputParameter("FROMLIST", PipelineApplication::LastAppOutputList, false);
@@ -328,7 +331,7 @@ void PipeBranchDisabled(void)
   p.Application("fx").AddConstParameter("MODE", "LIST");
   p.Application("fx").AddConstParameter("EQUATION", "f1+f2");
   
-  std::cout << p;
+  std::cerr << p;
 }
 
 void PipeContinue(void)
@@ -354,12 +357,12 @@ void PipeContinue(void)
   pc1.Application("lowpass").AddConstParameter ("SAMPLES", "3");
   pc1.Application("lowpass").AddConstParameter ("LINES", "3");
   
-  cout << pc1 << endl;
+  cerr << pc1 << endl;
   
   pc1.Run();
   
 
-  cout << "\n*** Application level continue option ***\n";
+  cerr << "\n*** Application level continue option ***\n";
   Pipeline pc2("unitTest7");
   
   pc2.SetInputFile(FileName("$ISIS3DATA/mro/testData/PSP_001446_1790_BG12_0.cub"));
@@ -380,7 +383,7 @@ void PipeContinue(void)
   pc2.Application("lpf1").AddConstParameter ("SAMPLES", "3");
   pc2.Application("lpf1").AddConstParameter ("LINES", "3");
   
-  cout << pc2 << endl;
+  cerr << pc2 << endl;
   
   pc2.Run();
   remove("./out.cub");
diff --git a/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h b/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h
index 7b9ff71cd75945b01f08df407cf62283ee0d5210..bdfac65aa40d8654736af9573f39f3c27a15f0e8 100644
--- a/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h
+++ b/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h
@@ -25,6 +25,7 @@
 
 #include <string>
 #include <vector>
+#include <cmath>
 
 #include "geos/geom/Point.h"
 #include "geos/geom/MultiPolygon.h"
@@ -66,13 +67,13 @@ namespace Isis {
       virtual ~PolygonSeeder();
 
       /**
-       * Pure virtual seed method. 
-       *  
-       * @param mp The MultiPolygon object from the geos::geom library. 
-       * @return @b std::vector<geos::geom::Point*> A vector of Point objects 
+       * Pure virtual seed method.
+       *
+       * @param mp The MultiPolygon object from the geos::geom library.
+       * @return @b std::vector<geos::geom::Point*> A vector of Point objects
        *                from the geos::geom library.
        */
-      virtual std::vector<geos::geom::Point *> 
+      virtual std::vector<geos::geom::Point *>
           Seed(const geos::geom::MultiPolygon *mp) = 0;
 
       double MinimumThickness();
@@ -90,20 +91,20 @@ namespace Isis {
                                 const geos::geom::Envelope *polyBoundBox);
 
     protected:
-      Pvl *invalidInput; /**< The Pvl passed in by the constructor minus what 
+      Pvl *invalidInput; /**< The Pvl passed in by the constructor minus what
                               was used.*/
 
     private:
       QString p_algorithmName; /**< The value for the 'Name' Keyword in the
                                         PolygonSeederAlgorithm group of the Pvl
                                         that is passed into the constructor.*/
-      double p_minimumThickness;   /**< The value for the 'MinimumThickness' 
-                                        Keyword in the PolygonSeederAlgorithm 
-                                        group of the Pvl that is passed into 
+      double p_minimumThickness;   /**< The value for the 'MinimumThickness'
+                                        Keyword in the PolygonSeederAlgorithm
+                                        group of the Pvl that is passed into
                                         the constructor*/
-      double p_minimumArea;        /**< The value for the 'MinimumArea' Keyword 
-                                        in the PolygonSeederAlgorithm group of 
-                                        the Pvl that is passed into the 
+      double p_minimumArea;        /**< The value for the 'MinimumArea' Keyword
+                                        in the PolygonSeederAlgorithm group of
+                                        the Pvl that is passed into the
                                         constructor*/
 
   };
diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp
index ba2c1200445c1e5f89cde58042fe0a213c74ac74..ee455a5b7a998fce2fad7c0e49c51eb77561918a 100644
--- a/isis/src/base/objs/Preference/Preference.cpp
+++ b/isis/src/base/objs/Preference/Preference.cpp
@@ -115,7 +115,7 @@ namespace Isis {
 
       // If its a unitTest then load with the unitTest preference file
       if(unitTest) {
-        p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences");
+        p_preference->Load("$ISISROOT/TestPreferences");
       }
       // Otherwise load the Isis system and personal preferences.
       else {
@@ -134,7 +134,7 @@ namespace Isis {
     else if(unitTest) {
       p_unitTest = unitTest;
       p_preference->clear();
-      p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences");
+      p_preference->Load("$ISISROOT/TestPreferences");
     }
 
     return *p_preference;
diff --git a/isis/src/base/objs/Process/Process.cpp b/isis/src/base/objs/Process/Process.cpp
index 446906f942a8a87c2b574708771f5b9bee7c8718..7c46b618ec71cf64d6b5a75246aa1958f6512907 100644
--- a/isis/src/base/objs/Process/Process.cpp
+++ b/isis/src/base/objs/Process/Process.cpp
@@ -382,7 +382,9 @@ namespace Isis {
         else if((cube->pixelType() != Isis::Real) &&
                 (cube->pixelType() != Isis::UnsignedByte) &&
                 (cube->pixelType() != Isis::UnsignedWord) &&
-                (cube->pixelType() != Isis::SignedWord)) {
+                (cube->pixelType() != Isis::SignedWord) &&
+                (cube->pixelType() != Isis::UnsignedInteger) &&
+                (cube->pixelType() != Isis::SignedInteger)) {
           QString msg = "Looks like your refactoring to add different pixel types";
           msg += " you'll need to make changes here";
           throw IException(IException::Programmer, msg, _FILEINFO_);
diff --git a/isis/src/base/objs/Process/Process.h b/isis/src/base/objs/Process/Process.h
index ae7f035c3ec484226c32d9ebd31ba8af75ee7cba..3aef3d93e6ba547fea0aab38303efd6a76990f19 100644
--- a/isis/src/base/objs/Process/Process.h
+++ b/isis/src/base/objs/Process/Process.h
@@ -143,8 +143,8 @@ namespace Isis {
    *                          being propagated.
    *  @history 2012-02-24 Steven Lambright - Added Finalize() method and
    *                          deprecated EndProcess()
-   *  @history 2015-01-15 Sasha Brownsberger - Added virtual keyword to several 
-   *                                           functions to ensure successful 
+   *  @history 2015-01-15 Sasha Brownsberger - Added virtual keyword to several
+   *                                           functions to ensure successful
    *                                           inheritance between Process and its
    *                                           child classes.  Fixes #2215.
    *  @history 2016-04-21 Makayla Shepherd - Added UnsignedWord pixel type handling.
@@ -153,6 +153,7 @@ namespace Isis {
    *                          PropagateTables(QString, QList<QString>). A default value of an
    *                          empty QList is provided to this parameter which will propagate all
    *                          tables. Updated unitTest to test this change. References #4433.
+   *  @history 2018-07-27 Kaitlyn Lee - Added unsigned/signed integer pixel type handling.
    */
   class Process {
     protected:
@@ -252,7 +253,7 @@ namespace Isis {
       void ClearCubes();
       void ClearInputCubes();
       void ClearOutputCubes();
- 
+
       void PropagateLabels(const bool prop);
       void PropagateLabels(const QString &cube);
       void PropagateTables(const bool prop);
diff --git a/isis/src/base/objs/ProcessByBoxcar/ProcessByBoxcar.truth b/isis/src/base/objs/ProcessByBoxcar/ProcessByBoxcar.truth
index d485f2b8cc2aba0f58f9352951501e849ae77f0f..e2426681a3d81d825e8dbd66fd298ec1be6f1e90 100644
--- a/isis/src/base/objs/ProcessByBoxcar/ProcessByBoxcar.truth
+++ b/isis/src/base/objs/ProcessByBoxcar/ProcessByBoxcar.truth
@@ -1,6 +1,5 @@
 Testing Isis::ProcessByBoxcar Class ... 
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Boxcar Samples:  3
 Boxcar Lines:    3
@@ -32,7 +31,7 @@ Top Left Sample:  0, Top Left Line:  22, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  23, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  24, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  25, Top Left Band:  1
-10% Processed
Top Left Sample:  0, Top Left Line:  26, Top Left Band:  1
+Top Left Sample:  0, Top Left Line:  26, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  27, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  28, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  29, Top Left Band:  1
@@ -57,7 +56,7 @@ Top Left Sample:  0, Top Left Line:  47, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  48, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  49, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  50, Top Left Band:  1
-20% Processed
Top Left Sample:  0, Top Left Line:  51, Top Left Band:  1
+Top Left Sample:  0, Top Left Line:  51, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  52, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  53, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  54, Top Left Band:  1
@@ -82,7 +81,7 @@ Top Left Sample:  0, Top Left Line:  72, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  73, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  74, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  75, Top Left Band:  1
-30% Processed
Top Left Sample:  0, Top Left Line:  76, Top Left Band:  1
+Top Left Sample:  0, Top Left Line:  76, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  77, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  78, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  79, Top Left Band:  1
@@ -107,7 +106,7 @@ Top Left Sample:  0, Top Left Line:  97, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  98, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  99, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  100, Top Left Band:  1
-40% Processed
Top Left Sample:  0, Top Left Line:  101, Top Left Band:  1
+Top Left Sample:  0, Top Left Line:  101, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  102, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  103, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  104, Top Left Band:  1
@@ -132,7 +131,7 @@ Top Left Sample:  0, Top Left Line:  122, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  123, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  124, Top Left Band:  1
 Top Left Sample:  0, Top Left Line:  125, Top Left Band:  1
-50% Processed
Top Left Sample:  0, Top Left Line:  0, Top Left Band:  2
+Top Left Sample:  0, Top Left Line:  0, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  1, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  2, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  3, Top Left Band:  2
@@ -158,7 +157,7 @@ Top Left Sample:  0, Top Left Line:  22, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  23, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  24, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  25, Top Left Band:  2
-60% Processed
Top Left Sample:  0, Top Left Line:  26, Top Left Band:  2
+Top Left Sample:  0, Top Left Line:  26, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  27, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  28, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  29, Top Left Band:  2
@@ -183,7 +182,7 @@ Top Left Sample:  0, Top Left Line:  47, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  48, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  49, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  50, Top Left Band:  2
-70% Processed
Top Left Sample:  0, Top Left Line:  51, Top Left Band:  2
+Top Left Sample:  0, Top Left Line:  51, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  52, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  53, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  54, Top Left Band:  2
@@ -208,7 +207,7 @@ Top Left Sample:  0, Top Left Line:  72, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  73, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  74, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  75, Top Left Band:  2
-80% Processed
Top Left Sample:  0, Top Left Line:  76, Top Left Band:  2
+Top Left Sample:  0, Top Left Line:  76, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  77, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  78, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  79, Top Left Band:  2
@@ -233,7 +232,7 @@ Top Left Sample:  0, Top Left Line:  97, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  98, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  99, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  100, Top Left Band:  2
-90% Processed
Top Left Sample:  0, Top Left Line:  101, Top Left Band:  2
+Top Left Sample:  0, Top Left Line:  101, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  102, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  103, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  104, Top Left Band:  2
@@ -258,7 +257,6 @@ Top Left Sample:  0, Top Left Line:  122, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  123, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  124, Top Left Band:  2
 Top Left Sample:  0, Top Left Line:  125, Top Left Band:  2
-100% Processed
 Testing for no inputs/outputs ...
 **PROGRAMMER ERROR** You must specify exactly one input cube.
 
diff --git a/isis/src/base/objs/ProcessByBrick/ProcessByBrick.truth b/isis/src/base/objs/ProcessByBrick/ProcessByBrick.truth
index f7268af69bd423a3d6a5c0ccd11741ea05467c11..70c0de7f051327d7545dece9b08076596126e193 100644
--- a/isis/src/base/objs/ProcessByBrick/ProcessByBrick.truth
+++ b/isis/src/base/objs/ProcessByBrick/ProcessByBrick.truth
@@ -7,8 +7,7 @@ Functor2 - ProcessCube One Thread
 5:**PROGRAMMER ERROR** The number of lines in the input and output cubes must match.
 6:**PROGRAMMER ERROR** The number of bands in the input and output cubes must match.
 7:**PROGRAMMER ERROR** You can only specify exactly one input or output cube.
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  200
 Buffer Lines:    10
@@ -103,7 +102,7 @@ Sample:  1  Line:  11  Band:  1
 Sample:  11  Line:  11  Band:  1
 Sample:  21  Line:  11  Band:  1
 Sample:  31  Line:  11  Band:  1
-10% Processed
Sample:  41  Line:  11  Band:  1
+Sample:  41  Line:  11  Band:  1
 Sample:  51  Line:  11  Band:  1
 Sample:  61  Line:  11  Band:  1
 Sample:  71  Line:  11  Band:  1
@@ -120,7 +119,7 @@ Sample:  41  Line:  21  Band:  1
 Sample:  51  Line:  21  Band:  1
 Sample:  61  Line:  21  Band:  1
 Sample:  71  Line:  21  Band:  1
-20% Processed
Sample:  81  Line:  21  Band:  1
+Sample:  81  Line:  21  Band:  1
 Sample:  91  Line:  21  Band:  1
 Sample:  101  Line:  21  Band:  1
 Sample:  111  Line:  21  Band:  1
@@ -137,7 +136,7 @@ Sample:  81  Line:  31  Band:  1
 Sample:  91  Line:  31  Band:  1
 Sample:  101  Line:  31  Band:  1
 Sample:  111  Line:  31  Band:  1
-30% Processed
Sample:  121  Line:  31  Band:  1
+Sample:  121  Line:  31  Band:  1
 Sample:  1  Line:  41  Band:  1
 Sample:  11  Line:  41  Band:  1
 Sample:  21  Line:  41  Band:  1
@@ -154,7 +153,7 @@ Sample:  121  Line:  41  Band:  1
 Sample:  1  Line:  51  Band:  1
 Sample:  11  Line:  51  Band:  1
 Sample:  21  Line:  51  Band:  1
-40% Processed
Sample:  31  Line:  51  Band:  1
+Sample:  31  Line:  51  Band:  1
 Sample:  41  Line:  51  Band:  1
 Sample:  51  Line:  51  Band:  1
 Sample:  61  Line:  51  Band:  1
@@ -171,7 +170,7 @@ Sample:  31  Line:  61  Band:  1
 Sample:  41  Line:  61  Band:  1
 Sample:  51  Line:  61  Band:  1
 Sample:  61  Line:  61  Band:  1
-50% Processed
Sample:  71  Line:  61  Band:  1
+Sample:  71  Line:  61  Band:  1
 Sample:  81  Line:  61  Band:  1
 Sample:  91  Line:  61  Band:  1
 Sample:  101  Line:  61  Band:  1
@@ -188,7 +187,7 @@ Sample:  71  Line:  71  Band:  1
 Sample:  81  Line:  71  Band:  1
 Sample:  91  Line:  71  Band:  1
 Sample:  101  Line:  71  Band:  1
-60% Processed
Sample:  111  Line:  71  Band:  1
+Sample:  111  Line:  71  Band:  1
 Sample:  121  Line:  71  Band:  1
 Sample:  1  Line:  81  Band:  1
 Sample:  11  Line:  81  Band:  1
@@ -205,7 +204,7 @@ Sample:  111  Line:  81  Band:  1
 Sample:  121  Line:  81  Band:  1
 Sample:  1  Line:  91  Band:  1
 Sample:  11  Line:  91  Band:  1
-70% Processed
Sample:  21  Line:  91  Band:  1
+Sample:  21  Line:  91  Band:  1
 Sample:  31  Line:  91  Band:  1
 Sample:  41  Line:  91  Band:  1
 Sample:  51  Line:  91  Band:  1
@@ -222,7 +221,7 @@ Sample:  21  Line:  101  Band:  1
 Sample:  31  Line:  101  Band:  1
 Sample:  41  Line:  101  Band:  1
 Sample:  51  Line:  101  Band:  1
-80% Processed
Sample:  61  Line:  101  Band:  1
+Sample:  61  Line:  101  Band:  1
 Sample:  71  Line:  101  Band:  1
 Sample:  81  Line:  101  Band:  1
 Sample:  91  Line:  101  Band:  1
@@ -239,7 +238,7 @@ Sample:  61  Line:  111  Band:  1
 Sample:  71  Line:  111  Band:  1
 Sample:  81  Line:  111  Band:  1
 Sample:  91  Line:  111  Band:  1
-90% Processed
Sample:  101  Line:  111  Band:  1
+Sample:  101  Line:  111  Band:  1
 Sample:  111  Line:  111  Band:  1
 Sample:  121  Line:  111  Band:  1
 Sample:  1  Line:  121  Band:  1
@@ -255,14 +254,12 @@ Sample:  91  Line:  121  Band:  1
 Sample:  101  Line:  121  Band:  1
 Sample:  111  Line:  121  Band:  1
 Sample:  121  Line:  121  Band:  1
-100% Processed
 
 Functor3 - ProcessCubes One Thread
 8:**PROGRAMMER ERROR** You have not specified any input or output cubes.
 9:**PROGRAMMER ERROR** All output cubes must have the same number of lines as the first input cube or output cube.
 10:**PROGRAMMER ERROR** All output cubes must have the same number of bands as the first input cube or output cube.
-unittest: Working
-0% Processed
Testing two input and output cubes ... 
+Testing two input and output cubes ... 
 Number of input cubes:   2
 Number of output cubes:  2
 
@@ -368,7 +365,7 @@ Sample:  71:71  Line:  71:71  Band:  1:1
 Sample:  81:81  Line:  71:71  Band:  1:1
 Sample:  91:91  Line:  71:71  Band:  1:1
 Sample:  101:101  Line:  71:71  Band:  1:1
-10% Processed
Sample:  111:111  Line:  71:71  Band:  1:1
+Sample:  111:111  Line:  71:71  Band:  1:1
 Sample:  121:121  Line:  71:71  Band:  1:1
 Sample:  1:1  Line:  81:81  Band:  1:1
 Sample:  11:11  Line:  81:81  Band:  1:1
@@ -469,7 +466,7 @@ Sample:  41:41  Line:  21:21  Band:  3:3
 Sample:  51:51  Line:  21:21  Band:  3:3
 Sample:  61:61  Line:  21:21  Band:  3:3
 Sample:  71:71  Line:  21:21  Band:  3:3
-20% Processed
Sample:  81:81  Line:  21:21  Band:  3:3
+Sample:  81:81  Line:  21:21  Band:  3:3
 Sample:  91:91  Line:  21:21  Band:  3:3
 Sample:  101:101  Line:  21:21  Band:  3:3
 Sample:  111:111  Line:  21:21  Band:  3:3
@@ -571,7 +568,7 @@ Sample:  21:21  Line:  101:101  Band:  3:3
 Sample:  31:31  Line:  101:101  Band:  3:3
 Sample:  41:41  Line:  101:101  Band:  3:3
 Sample:  51:51  Line:  101:101  Band:  3:3
-30% Processed
Sample:  61:61  Line:  101:101  Band:  3:3
+Sample:  61:61  Line:  101:101  Band:  3:3
 Sample:  71:71  Line:  101:101  Band:  3:3
 Sample:  81:81  Line:  101:101  Band:  3:3
 Sample:  91:91  Line:  101:101  Band:  3:3
@@ -672,7 +669,7 @@ Sample:  121:121  Line:  41:41  Band:  5:5
 Sample:  1:1  Line:  51:51  Band:  5:5
 Sample:  11:11  Line:  51:51  Band:  5:5
 Sample:  21:21  Line:  51:51  Band:  5:5
-40% Processed
Sample:  31:31  Line:  51:51  Band:  5:5
+Sample:  31:31  Line:  51:51  Band:  5:5
 Sample:  41:41  Line:  51:51  Band:  5:5
 Sample:  51:51  Line:  51:51  Band:  5:5
 Sample:  61:61  Line:  51:51  Band:  5:5
@@ -773,7 +770,7 @@ Sample:  91:91  Line:  121:121  Band:  5:5
 Sample:  101:101  Line:  121:121  Band:  5:5
 Sample:  111:111  Line:  121:121  Band:  5:5
 Sample:  121:121  Line:  121:121  Band:  5:5
-50% Processed
Sample:  1:1  Line:  1:1  Band:  7:7
+Sample:  1:1  Line:  1:1  Band:  7:7
 Sample:  11:11  Line:  1:1  Band:  7:7
 Sample:  21:21  Line:  1:1  Band:  7:7
 Sample:  31:31  Line:  1:1  Band:  7:7
@@ -875,7 +872,7 @@ Sample:  71:71  Line:  71:71  Band:  7:7
 Sample:  81:81  Line:  71:71  Band:  7:7
 Sample:  91:91  Line:  71:71  Band:  7:7
 Sample:  101:101  Line:  71:71  Band:  7:7
-60% Processed
Sample:  111:111  Line:  71:71  Band:  7:7
+Sample:  111:111  Line:  71:71  Band:  7:7
 Sample:  121:121  Line:  71:71  Band:  7:7
 Sample:  1:1  Line:  81:81  Band:  7:7
 Sample:  11:11  Line:  81:81  Band:  7:7
@@ -976,7 +973,7 @@ Sample:  41:41  Line:  21:21  Band:  9:9
 Sample:  51:51  Line:  21:21  Band:  9:9
 Sample:  61:61  Line:  21:21  Band:  9:9
 Sample:  71:71  Line:  21:21  Band:  9:9
-70% Processed
Sample:  81:81  Line:  21:21  Band:  9:9
+Sample:  81:81  Line:  21:21  Band:  9:9
 Sample:  91:91  Line:  21:21  Band:  9:9
 Sample:  101:101  Line:  21:21  Band:  9:9
 Sample:  111:111  Line:  21:21  Band:  9:9
@@ -1078,7 +1075,7 @@ Sample:  21:21  Line:  101:101  Band:  9:9
 Sample:  31:31  Line:  101:101  Band:  9:9
 Sample:  41:41  Line:  101:101  Band:  9:9
 Sample:  51:51  Line:  101:101  Band:  9:9
-80% Processed
Sample:  61:61  Line:  101:101  Band:  9:9
+Sample:  61:61  Line:  101:101  Band:  9:9
 Sample:  71:71  Line:  101:101  Band:  9:9
 Sample:  81:81  Line:  101:101  Band:  9:9
 Sample:  91:91  Line:  101:101  Band:  9:9
@@ -1179,7 +1176,7 @@ Sample:  121:121  Line:  41:41  Band:  11:11
 Sample:  1:1  Line:  51:51  Band:  11:11
 Sample:  11:11  Line:  51:51  Band:  11:11
 Sample:  21:21  Line:  51:51  Band:  11:11
-90% Processed
Sample:  31:31  Line:  51:51  Band:  11:11
+Sample:  31:31  Line:  51:51  Band:  11:11
 Sample:  41:41  Line:  51:51  Band:  11:11
 Sample:  51:51  Line:  51:51  Band:  11:11
 Sample:  61:61  Line:  51:51  Band:  11:11
@@ -1280,31 +1277,17 @@ Sample:  91:91  Line:  121:121  Band:  11:11
 Sample:  101:101  Line:  121:121  Band:  11:11
 Sample:  111:111  Line:  121:121  Band:  11:11
 Sample:  121:121  Line:  121:121  Band:  11:11
-100% Processed
 
 Functor4 - ProcessCube Threaded
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Averages: 798.5, 898.5
 
 Functor5 - ProcessCubeInPlace Threaded
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Averages: 1597, 1797
 
 End Testing Functors
 
 Testing StartProcess
-unittest: Working
-0% Processed
Sample:  1:1  Line:  1:1  Band:  1:1
+Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  11:11  Line:  1:1  Band:  1:1
 Sample:  21:21  Line:  1:1  Band:  1:1
 Sample:  31:31  Line:  1:1  Band:  1:1
@@ -1321,7 +1304,7 @@ Sample:  1:1  Line:  11:11  Band:  1:1
 Sample:  11:11  Line:  11:11  Band:  1:1
 Sample:  21:21  Line:  11:11  Band:  1:1
 Sample:  31:31  Line:  11:11  Band:  1:1
-10% Processed
Sample:  41:41  Line:  11:11  Band:  1:1
+Sample:  41:41  Line:  11:11  Band:  1:1
 Sample:  51:51  Line:  11:11  Band:  1:1
 Sample:  61:61  Line:  11:11  Band:  1:1
 Sample:  71:71  Line:  11:11  Band:  1:1
@@ -1338,7 +1321,7 @@ Sample:  41:41  Line:  21:21  Band:  1:1
 Sample:  51:51  Line:  21:21  Band:  1:1
 Sample:  61:61  Line:  21:21  Band:  1:1
 Sample:  71:71  Line:  21:21  Band:  1:1
-20% Processed
Sample:  81:81  Line:  21:21  Band:  1:1
+Sample:  81:81  Line:  21:21  Band:  1:1
 Sample:  91:91  Line:  21:21  Band:  1:1
 Sample:  101:101  Line:  21:21  Band:  1:1
 Sample:  111:111  Line:  21:21  Band:  1:1
@@ -1355,7 +1338,7 @@ Sample:  81:81  Line:  31:31  Band:  1:1
 Sample:  91:91  Line:  31:31  Band:  1:1
 Sample:  101:101  Line:  31:31  Band:  1:1
 Sample:  111:111  Line:  31:31  Band:  1:1
-30% Processed
Sample:  121:121  Line:  31:31  Band:  1:1
+Sample:  121:121  Line:  31:31  Band:  1:1
 Sample:  1:1  Line:  41:41  Band:  1:1
 Sample:  11:11  Line:  41:41  Band:  1:1
 Sample:  21:21  Line:  41:41  Band:  1:1
@@ -1372,7 +1355,7 @@ Sample:  121:121  Line:  41:41  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
 Sample:  11:11  Line:  51:51  Band:  1:1
 Sample:  21:21  Line:  51:51  Band:  1:1
-40% Processed
Sample:  31:31  Line:  51:51  Band:  1:1
+Sample:  31:31  Line:  51:51  Band:  1:1
 Sample:  41:41  Line:  51:51  Band:  1:1
 Sample:  51:51  Line:  51:51  Band:  1:1
 Sample:  61:61  Line:  51:51  Band:  1:1
@@ -1389,7 +1372,7 @@ Sample:  31:31  Line:  61:61  Band:  1:1
 Sample:  41:41  Line:  61:61  Band:  1:1
 Sample:  51:51  Line:  61:61  Band:  1:1
 Sample:  61:61  Line:  61:61  Band:  1:1
-50% Processed
Sample:  71:71  Line:  61:61  Band:  1:1
+Sample:  71:71  Line:  61:61  Band:  1:1
 Sample:  81:81  Line:  61:61  Band:  1:1
 Sample:  91:91  Line:  61:61  Band:  1:1
 Sample:  101:101  Line:  61:61  Band:  1:1
@@ -1406,7 +1389,7 @@ Sample:  71:71  Line:  71:71  Band:  1:1
 Sample:  81:81  Line:  71:71  Band:  1:1
 Sample:  91:91  Line:  71:71  Band:  1:1
 Sample:  101:101  Line:  71:71  Band:  1:1
-60% Processed
Sample:  111:111  Line:  71:71  Band:  1:1
+Sample:  111:111  Line:  71:71  Band:  1:1
 Sample:  121:121  Line:  71:71  Band:  1:1
 Sample:  1:1  Line:  81:81  Band:  1:1
 Sample:  11:11  Line:  81:81  Band:  1:1
@@ -1423,7 +1406,7 @@ Sample:  111:111  Line:  81:81  Band:  1:1
 Sample:  121:121  Line:  81:81  Band:  1:1
 Sample:  1:1  Line:  91:91  Band:  1:1
 Sample:  11:11  Line:  91:91  Band:  1:1
-70% Processed
Sample:  21:21  Line:  91:91  Band:  1:1
+Sample:  21:21  Line:  91:91  Band:  1:1
 Sample:  31:31  Line:  91:91  Band:  1:1
 Sample:  41:41  Line:  91:91  Band:  1:1
 Sample:  51:51  Line:  91:91  Band:  1:1
@@ -1440,7 +1423,7 @@ Sample:  21:21  Line:  101:101  Band:  1:1
 Sample:  31:31  Line:  101:101  Band:  1:1
 Sample:  41:41  Line:  101:101  Band:  1:1
 Sample:  51:51  Line:  101:101  Band:  1:1
-80% Processed
Sample:  61:61  Line:  101:101  Band:  1:1
+Sample:  61:61  Line:  101:101  Band:  1:1
 Sample:  71:71  Line:  101:101  Band:  1:1
 Sample:  81:81  Line:  101:101  Band:  1:1
 Sample:  91:91  Line:  101:101  Band:  1:1
@@ -1457,7 +1440,7 @@ Sample:  61:61  Line:  111:111  Band:  1:1
 Sample:  71:71  Line:  111:111  Band:  1:1
 Sample:  81:81  Line:  111:111  Band:  1:1
 Sample:  91:91  Line:  111:111  Band:  1:1
-90% Processed
Sample:  101:101  Line:  111:111  Band:  1:1
+Sample:  101:101  Line:  111:111  Band:  1:1
 Sample:  111:111  Line:  111:111  Band:  1:1
 Sample:  121:121  Line:  111:111  Band:  1:1
 Sample:  1:1  Line:  121:121  Band:  1:1
@@ -1473,4 +1456,3 @@ Sample:  91:91  Line:  121:121  Band:  1:1
 Sample:  101:101  Line:  121:121  Band:  1:1
 Sample:  111:111  Line:  121:121  Band:  1:1
 Sample:  121:121  Line:  121:121  Band:  1:1
-100% Processed
diff --git a/isis/src/base/objs/ProcessByLine/ProcessByLine.truth b/isis/src/base/objs/ProcessByLine/ProcessByLine.truth
index 239ee8996539f61e02b28e49f849ef09152ca113..383b201a937d3616e34a14a718c0734ce39890a7 100644
--- a/isis/src/base/objs/ProcessByLine/ProcessByLine.truth
+++ b/isis/src/base/objs/ProcessByLine/ProcessByLine.truth
@@ -1,6 +1,5 @@
 Testing Isis::ProcessByLine Class ... 
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  126
 Buffer Lines:    1
 Buffer Bands:    1
@@ -31,7 +30,7 @@ Sample:  1  Line:  23  Band:  1
 Sample:  1  Line:  24  Band:  1
 Sample:  1  Line:  25  Band:  1
 Sample:  1  Line:  26  Band:  1
-10% Processed
Sample:  1  Line:  27  Band:  1
+Sample:  1  Line:  27  Band:  1
 Sample:  1  Line:  28  Band:  1
 Sample:  1  Line:  29  Band:  1
 Sample:  1  Line:  30  Band:  1
@@ -56,7 +55,7 @@ Sample:  1  Line:  48  Band:  1
 Sample:  1  Line:  49  Band:  1
 Sample:  1  Line:  50  Band:  1
 Sample:  1  Line:  51  Band:  1
-20% Processed
Sample:  1  Line:  52  Band:  1
+Sample:  1  Line:  52  Band:  1
 Sample:  1  Line:  53  Band:  1
 Sample:  1  Line:  54  Band:  1
 Sample:  1  Line:  55  Band:  1
@@ -81,7 +80,7 @@ Sample:  1  Line:  73  Band:  1
 Sample:  1  Line:  74  Band:  1
 Sample:  1  Line:  75  Band:  1
 Sample:  1  Line:  76  Band:  1
-30% Processed
Sample:  1  Line:  77  Band:  1
+Sample:  1  Line:  77  Band:  1
 Sample:  1  Line:  78  Band:  1
 Sample:  1  Line:  79  Band:  1
 Sample:  1  Line:  80  Band:  1
@@ -106,7 +105,7 @@ Sample:  1  Line:  98  Band:  1
 Sample:  1  Line:  99  Band:  1
 Sample:  1  Line:  100  Band:  1
 Sample:  1  Line:  101  Band:  1
-40% Processed
Sample:  1  Line:  102  Band:  1
+Sample:  1  Line:  102  Band:  1
 Sample:  1  Line:  103  Band:  1
 Sample:  1  Line:  104  Band:  1
 Sample:  1  Line:  105  Band:  1
@@ -131,7 +130,7 @@ Sample:  1  Line:  123  Band:  1
 Sample:  1  Line:  124  Band:  1
 Sample:  1  Line:  125  Band:  1
 Sample:  1  Line:  126  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  1  Line:  2  Band:  2
 Sample:  1  Line:  3  Band:  2
 Sample:  1  Line:  4  Band:  2
@@ -157,7 +156,7 @@ Sample:  1  Line:  23  Band:  2
 Sample:  1  Line:  24  Band:  2
 Sample:  1  Line:  25  Band:  2
 Sample:  1  Line:  26  Band:  2
-60% Processed
Sample:  1  Line:  27  Band:  2
+Sample:  1  Line:  27  Band:  2
 Sample:  1  Line:  28  Band:  2
 Sample:  1  Line:  29  Band:  2
 Sample:  1  Line:  30  Band:  2
@@ -182,7 +181,7 @@ Sample:  1  Line:  48  Band:  2
 Sample:  1  Line:  49  Band:  2
 Sample:  1  Line:  50  Band:  2
 Sample:  1  Line:  51  Band:  2
-70% Processed
Sample:  1  Line:  52  Band:  2
+Sample:  1  Line:  52  Band:  2
 Sample:  1  Line:  53  Band:  2
 Sample:  1  Line:  54  Band:  2
 Sample:  1  Line:  55  Band:  2
@@ -207,7 +206,7 @@ Sample:  1  Line:  73  Band:  2
 Sample:  1  Line:  74  Band:  2
 Sample:  1  Line:  75  Band:  2
 Sample:  1  Line:  76  Band:  2
-80% Processed
Sample:  1  Line:  77  Band:  2
+Sample:  1  Line:  77  Band:  2
 Sample:  1  Line:  78  Band:  2
 Sample:  1  Line:  79  Band:  2
 Sample:  1  Line:  80  Band:  2
@@ -232,7 +231,7 @@ Sample:  1  Line:  98  Band:  2
 Sample:  1  Line:  99  Band:  2
 Sample:  1  Line:  100  Band:  2
 Sample:  1  Line:  101  Band:  2
-90% Processed
Sample:  1  Line:  102  Band:  2
+Sample:  1  Line:  102  Band:  2
 Sample:  1  Line:  103  Band:  2
 Sample:  1  Line:  104  Band:  2
 Sample:  1  Line:  105  Band:  2
@@ -257,9 +256,7 @@ Sample:  1  Line:  123  Band:  2
 Sample:  1  Line:  124  Band:  2
 Sample:  1  Line:  125  Band:  2
 Sample:  1  Line:  126  Band:  2
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one output cube ... 
 Buffer Samples:  10
 Buffer Lines:    1
@@ -271,63 +268,61 @@ Sample:  1  Line:  3  Band:  1
 Sample:  1  Line:  4  Band:  1
 Sample:  1  Line:  5  Band:  1
 Sample:  1  Line:  6  Band:  1
-10% Processed
Sample:  1  Line:  7  Band:  1
+Sample:  1  Line:  7  Band:  1
 Sample:  1  Line:  8  Band:  1
 Sample:  1  Line:  9  Band:  1
 Sample:  1  Line:  10  Band:  1
 Sample:  1  Line:  11  Band:  1
 Sample:  1  Line:  12  Band:  1
-20% Processed
Sample:  1  Line:  13  Band:  1
+Sample:  1  Line:  13  Band:  1
 Sample:  1  Line:  14  Band:  1
 Sample:  1  Line:  15  Band:  1
 Sample:  1  Line:  16  Band:  1
 Sample:  1  Line:  17  Band:  1
 Sample:  1  Line:  18  Band:  1
-30% Processed
Sample:  1  Line:  19  Band:  1
+Sample:  1  Line:  19  Band:  1
 Sample:  1  Line:  20  Band:  1
 Sample:  1  Line:  1  Band:  2
 Sample:  1  Line:  2  Band:  2
 Sample:  1  Line:  3  Band:  2
 Sample:  1  Line:  4  Band:  2
-40% Processed
Sample:  1  Line:  5  Band:  2
+Sample:  1  Line:  5  Band:  2
 Sample:  1  Line:  6  Band:  2
 Sample:  1  Line:  7  Band:  2
 Sample:  1  Line:  8  Band:  2
 Sample:  1  Line:  9  Band:  2
 Sample:  1  Line:  10  Band:  2
-50% Processed
Sample:  1  Line:  11  Band:  2
+Sample:  1  Line:  11  Band:  2
 Sample:  1  Line:  12  Band:  2
 Sample:  1  Line:  13  Band:  2
 Sample:  1  Line:  14  Band:  2
 Sample:  1  Line:  15  Band:  2
 Sample:  1  Line:  16  Band:  2
-60% Processed
Sample:  1  Line:  17  Band:  2
+Sample:  1  Line:  17  Band:  2
 Sample:  1  Line:  18  Band:  2
 Sample:  1  Line:  19  Band:  2
 Sample:  1  Line:  20  Band:  2
 Sample:  1  Line:  1  Band:  3
 Sample:  1  Line:  2  Band:  3
-70% Processed
Sample:  1  Line:  3  Band:  3
+Sample:  1  Line:  3  Band:  3
 Sample:  1  Line:  4  Band:  3
 Sample:  1  Line:  5  Band:  3
 Sample:  1  Line:  6  Band:  3
 Sample:  1  Line:  7  Band:  3
 Sample:  1  Line:  8  Band:  3
-80% Processed
Sample:  1  Line:  9  Band:  3
+Sample:  1  Line:  9  Band:  3
 Sample:  1  Line:  10  Band:  3
 Sample:  1  Line:  11  Band:  3
 Sample:  1  Line:  12  Band:  3
 Sample:  1  Line:  13  Band:  3
 Sample:  1  Line:  14  Band:  3
-90% Processed
Sample:  1  Line:  15  Band:  3
+Sample:  1  Line:  15  Band:  3
 Sample:  1  Line:  16  Band:  3
 Sample:  1  Line:  17  Band:  3
 Sample:  1  Line:  18  Band:  3
 Sample:  1  Line:  19  Band:  3
 Sample:  1  Line:  20  Band:  3
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  126
 Buffer Lines:    1
@@ -359,7 +354,7 @@ Sample:  1  Line:  23  Band:  1
 Sample:  1  Line:  24  Band:  1
 Sample:  1  Line:  25  Band:  1
 Sample:  1  Line:  26  Band:  1
-10% Processed
Sample:  1  Line:  27  Band:  1
+Sample:  1  Line:  27  Band:  1
 Sample:  1  Line:  28  Band:  1
 Sample:  1  Line:  29  Band:  1
 Sample:  1  Line:  30  Band:  1
@@ -384,7 +379,7 @@ Sample:  1  Line:  48  Band:  1
 Sample:  1  Line:  49  Band:  1
 Sample:  1  Line:  50  Band:  1
 Sample:  1  Line:  51  Band:  1
-20% Processed
Sample:  1  Line:  52  Band:  1
+Sample:  1  Line:  52  Band:  1
 Sample:  1  Line:  53  Band:  1
 Sample:  1  Line:  54  Band:  1
 Sample:  1  Line:  55  Band:  1
@@ -409,7 +404,7 @@ Sample:  1  Line:  73  Band:  1
 Sample:  1  Line:  74  Band:  1
 Sample:  1  Line:  75  Band:  1
 Sample:  1  Line:  76  Band:  1
-30% Processed
Sample:  1  Line:  77  Band:  1
+Sample:  1  Line:  77  Band:  1
 Sample:  1  Line:  78  Band:  1
 Sample:  1  Line:  79  Band:  1
 Sample:  1  Line:  80  Band:  1
@@ -434,7 +429,7 @@ Sample:  1  Line:  98  Band:  1
 Sample:  1  Line:  99  Band:  1
 Sample:  1  Line:  100  Band:  1
 Sample:  1  Line:  101  Band:  1
-40% Processed
Sample:  1  Line:  102  Band:  1
+Sample:  1  Line:  102  Band:  1
 Sample:  1  Line:  103  Band:  1
 Sample:  1  Line:  104  Band:  1
 Sample:  1  Line:  105  Band:  1
@@ -459,7 +454,7 @@ Sample:  1  Line:  123  Band:  1
 Sample:  1  Line:  124  Band:  1
 Sample:  1  Line:  125  Band:  1
 Sample:  1  Line:  126  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  1  Line:  2  Band:  2
 Sample:  1  Line:  3  Band:  2
 Sample:  1  Line:  4  Band:  2
@@ -485,7 +480,7 @@ Sample:  1  Line:  23  Band:  2
 Sample:  1  Line:  24  Band:  2
 Sample:  1  Line:  25  Band:  2
 Sample:  1  Line:  26  Band:  2
-60% Processed
Sample:  1  Line:  27  Band:  2
+Sample:  1  Line:  27  Band:  2
 Sample:  1  Line:  28  Band:  2
 Sample:  1  Line:  29  Band:  2
 Sample:  1  Line:  30  Band:  2
@@ -510,7 +505,7 @@ Sample:  1  Line:  48  Band:  2
 Sample:  1  Line:  49  Band:  2
 Sample:  1  Line:  50  Band:  2
 Sample:  1  Line:  51  Band:  2
-70% Processed
Sample:  1  Line:  52  Band:  2
+Sample:  1  Line:  52  Band:  2
 Sample:  1  Line:  53  Band:  2
 Sample:  1  Line:  54  Band:  2
 Sample:  1  Line:  55  Band:  2
@@ -535,7 +530,7 @@ Sample:  1  Line:  73  Band:  2
 Sample:  1  Line:  74  Band:  2
 Sample:  1  Line:  75  Band:  2
 Sample:  1  Line:  76  Band:  2
-80% Processed
Sample:  1  Line:  77  Band:  2
+Sample:  1  Line:  77  Band:  2
 Sample:  1  Line:  78  Band:  2
 Sample:  1  Line:  79  Band:  2
 Sample:  1  Line:  80  Band:  2
@@ -560,7 +555,7 @@ Sample:  1  Line:  98  Band:  2
 Sample:  1  Line:  99  Band:  2
 Sample:  1  Line:  100  Band:  2
 Sample:  1  Line:  101  Band:  2
-90% Processed
Sample:  1  Line:  102  Band:  2
+Sample:  1  Line:  102  Band:  2
 Sample:  1  Line:  103  Band:  2
 Sample:  1  Line:  104  Band:  2
 Sample:  1  Line:  105  Band:  2
@@ -585,9 +580,7 @@ Sample:  1  Line:  123  Band:  2
 Sample:  1  Line:  124  Band:  2
 Sample:  1  Line:  125  Band:  2
 Sample:  1  Line:  126  Band:  2
-100% Processed
-unittest: Working
-0% Processed
Testing two input and output cubes ... 
+Testing two input and output cubes ... 
 Number of input cubes:   2
 Number of output cubes:  2
 
@@ -617,7 +610,7 @@ Sample:  1:1  Line:  23:23  Band:  1:1
 Sample:  1:1  Line:  24:24  Band:  1:1
 Sample:  1:1  Line:  25:25  Band:  1:1
 Sample:  1:1  Line:  26:26  Band:  1:1
-10% Processed
Sample:  1:1  Line:  27:27  Band:  1:1
+Sample:  1:1  Line:  27:27  Band:  1:1
 Sample:  1:1  Line:  28:28  Band:  1:1
 Sample:  1:1  Line:  29:29  Band:  1:1
 Sample:  1:1  Line:  30:30  Band:  1:1
@@ -642,7 +635,7 @@ Sample:  1:1  Line:  48:48  Band:  1:1
 Sample:  1:1  Line:  49:49  Band:  1:1
 Sample:  1:1  Line:  50:50  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
-20% Processed
Sample:  1:1  Line:  52:52  Band:  1:1
+Sample:  1:1  Line:  52:52  Band:  1:1
 Sample:  1:1  Line:  53:53  Band:  1:1
 Sample:  1:1  Line:  54:54  Band:  1:1
 Sample:  1:1  Line:  55:55  Band:  1:1
@@ -667,7 +660,7 @@ Sample:  1:1  Line:  73:73  Band:  1:1
 Sample:  1:1  Line:  74:74  Band:  1:1
 Sample:  1:1  Line:  75:75  Band:  1:1
 Sample:  1:1  Line:  76:76  Band:  1:1
-30% Processed
Sample:  1:1  Line:  77:77  Band:  1:1
+Sample:  1:1  Line:  77:77  Band:  1:1
 Sample:  1:1  Line:  78:78  Band:  1:1
 Sample:  1:1  Line:  79:79  Band:  1:1
 Sample:  1:1  Line:  80:80  Band:  1:1
@@ -692,7 +685,7 @@ Sample:  1:1  Line:  98:98  Band:  1:1
 Sample:  1:1  Line:  99:99  Band:  1:1
 Sample:  1:1  Line:  100:100  Band:  1:1
 Sample:  1:1  Line:  101:101  Band:  1:1
-40% Processed
Sample:  1:1  Line:  102:102  Band:  1:1
+Sample:  1:1  Line:  102:102  Band:  1:1
 Sample:  1:1  Line:  103:103  Band:  1:1
 Sample:  1:1  Line:  104:104  Band:  1:1
 Sample:  1:1  Line:  105:105  Band:  1:1
@@ -717,7 +710,7 @@ Sample:  1:1  Line:  123:123  Band:  1:1
 Sample:  1:1  Line:  124:124  Band:  1:1
 Sample:  1:1  Line:  125:125  Band:  1:1
 Sample:  1:1  Line:  126:126  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:1
+Sample:  1:1  Line:  1:1  Band:  2:1
 Sample:  1:1  Line:  2:2  Band:  2:1
 Sample:  1:1  Line:  3:3  Band:  2:1
 Sample:  1:1  Line:  4:4  Band:  2:1
@@ -743,7 +736,7 @@ Sample:  1:1  Line:  23:23  Band:  2:1
 Sample:  1:1  Line:  24:24  Band:  2:1
 Sample:  1:1  Line:  25:25  Band:  2:1
 Sample:  1:1  Line:  26:26  Band:  2:1
-60% Processed
Sample:  1:1  Line:  27:27  Band:  2:1
+Sample:  1:1  Line:  27:27  Band:  2:1
 Sample:  1:1  Line:  28:28  Band:  2:1
 Sample:  1:1  Line:  29:29  Band:  2:1
 Sample:  1:1  Line:  30:30  Band:  2:1
@@ -768,7 +761,7 @@ Sample:  1:1  Line:  48:48  Band:  2:1
 Sample:  1:1  Line:  49:49  Band:  2:1
 Sample:  1:1  Line:  50:50  Band:  2:1
 Sample:  1:1  Line:  51:51  Band:  2:1
-70% Processed
Sample:  1:1  Line:  52:52  Band:  2:1
+Sample:  1:1  Line:  52:52  Band:  2:1
 Sample:  1:1  Line:  53:53  Band:  2:1
 Sample:  1:1  Line:  54:54  Band:  2:1
 Sample:  1:1  Line:  55:55  Band:  2:1
@@ -793,7 +786,7 @@ Sample:  1:1  Line:  73:73  Band:  2:1
 Sample:  1:1  Line:  74:74  Band:  2:1
 Sample:  1:1  Line:  75:75  Band:  2:1
 Sample:  1:1  Line:  76:76  Band:  2:1
-80% Processed
Sample:  1:1  Line:  77:77  Band:  2:1
+Sample:  1:1  Line:  77:77  Band:  2:1
 Sample:  1:1  Line:  78:78  Band:  2:1
 Sample:  1:1  Line:  79:79  Band:  2:1
 Sample:  1:1  Line:  80:80  Band:  2:1
@@ -818,7 +811,7 @@ Sample:  1:1  Line:  98:98  Band:  2:1
 Sample:  1:1  Line:  99:99  Band:  2:1
 Sample:  1:1  Line:  100:100  Band:  2:1
 Sample:  1:1  Line:  101:101  Band:  2:1
-90% Processed
Sample:  1:1  Line:  102:102  Band:  2:1
+Sample:  1:1  Line:  102:102  Band:  2:1
 Sample:  1:1  Line:  103:103  Band:  2:1
 Sample:  1:1  Line:  104:104  Band:  2:1
 Sample:  1:1  Line:  105:105  Band:  2:1
@@ -843,11 +836,9 @@ Sample:  1:1  Line:  123:123  Band:  2:1
 Sample:  1:1  Line:  124:124  Band:  2:1
 Sample:  1:1  Line:  125:125  Band:  2:1
 Sample:  1:1  Line:  126:126  Band:  2:1
-100% Processed
 Testing for Functors
 Functor1
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  126
 Buffer Lines:    1
 Buffer Bands:    1
@@ -878,7 +869,7 @@ Sample:  1  Line:  23  Band:  1
 Sample:  1  Line:  24  Band:  1
 Sample:  1  Line:  25  Band:  1
 Sample:  1  Line:  26  Band:  1
-10% Processed
Sample:  1  Line:  27  Band:  1
+Sample:  1  Line:  27  Band:  1
 Sample:  1  Line:  28  Band:  1
 Sample:  1  Line:  29  Band:  1
 Sample:  1  Line:  30  Band:  1
@@ -903,7 +894,7 @@ Sample:  1  Line:  48  Band:  1
 Sample:  1  Line:  49  Band:  1
 Sample:  1  Line:  50  Band:  1
 Sample:  1  Line:  51  Band:  1
-20% Processed
Sample:  1  Line:  52  Band:  1
+Sample:  1  Line:  52  Band:  1
 Sample:  1  Line:  53  Band:  1
 Sample:  1  Line:  54  Band:  1
 Sample:  1  Line:  55  Band:  1
@@ -928,7 +919,7 @@ Sample:  1  Line:  73  Band:  1
 Sample:  1  Line:  74  Band:  1
 Sample:  1  Line:  75  Band:  1
 Sample:  1  Line:  76  Band:  1
-30% Processed
Sample:  1  Line:  77  Band:  1
+Sample:  1  Line:  77  Band:  1
 Sample:  1  Line:  78  Band:  1
 Sample:  1  Line:  79  Band:  1
 Sample:  1  Line:  80  Band:  1
@@ -953,7 +944,7 @@ Sample:  1  Line:  98  Band:  1
 Sample:  1  Line:  99  Band:  1
 Sample:  1  Line:  100  Band:  1
 Sample:  1  Line:  101  Band:  1
-40% Processed
Sample:  1  Line:  102  Band:  1
+Sample:  1  Line:  102  Band:  1
 Sample:  1  Line:  103  Band:  1
 Sample:  1  Line:  104  Band:  1
 Sample:  1  Line:  105  Band:  1
@@ -978,7 +969,7 @@ Sample:  1  Line:  123  Band:  1
 Sample:  1  Line:  124  Band:  1
 Sample:  1  Line:  125  Band:  1
 Sample:  1  Line:  126  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  1  Line:  2  Band:  2
 Sample:  1  Line:  3  Band:  2
 Sample:  1  Line:  4  Band:  2
@@ -1004,7 +995,7 @@ Sample:  1  Line:  23  Band:  2
 Sample:  1  Line:  24  Band:  2
 Sample:  1  Line:  25  Band:  2
 Sample:  1  Line:  26  Band:  2
-60% Processed
Sample:  1  Line:  27  Band:  2
+Sample:  1  Line:  27  Band:  2
 Sample:  1  Line:  28  Band:  2
 Sample:  1  Line:  29  Band:  2
 Sample:  1  Line:  30  Band:  2
@@ -1029,7 +1020,7 @@ Sample:  1  Line:  48  Band:  2
 Sample:  1  Line:  49  Band:  2
 Sample:  1  Line:  50  Band:  2
 Sample:  1  Line:  51  Band:  2
-70% Processed
Sample:  1  Line:  52  Band:  2
+Sample:  1  Line:  52  Band:  2
 Sample:  1  Line:  53  Band:  2
 Sample:  1  Line:  54  Band:  2
 Sample:  1  Line:  55  Band:  2
@@ -1054,7 +1045,7 @@ Sample:  1  Line:  73  Band:  2
 Sample:  1  Line:  74  Band:  2
 Sample:  1  Line:  75  Band:  2
 Sample:  1  Line:  76  Band:  2
-80% Processed
Sample:  1  Line:  77  Band:  2
+Sample:  1  Line:  77  Band:  2
 Sample:  1  Line:  78  Band:  2
 Sample:  1  Line:  79  Band:  2
 Sample:  1  Line:  80  Band:  2
@@ -1079,7 +1070,7 @@ Sample:  1  Line:  98  Band:  2
 Sample:  1  Line:  99  Band:  2
 Sample:  1  Line:  100  Band:  2
 Sample:  1  Line:  101  Band:  2
-90% Processed
Sample:  1  Line:  102  Band:  2
+Sample:  1  Line:  102  Band:  2
 Sample:  1  Line:  103  Band:  2
 Sample:  1  Line:  104  Band:  2
 Sample:  1  Line:  105  Band:  2
@@ -1104,10 +1095,8 @@ Sample:  1  Line:  123  Band:  2
 Sample:  1  Line:  124  Band:  2
 Sample:  1  Line:  125  Band:  2
 Sample:  1  Line:  126  Band:  2
-100% Processed
 Functor2
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  126
 Buffer Lines:    1
@@ -1139,7 +1128,7 @@ Sample:  1  Line:  23  Band:  1
 Sample:  1  Line:  24  Band:  1
 Sample:  1  Line:  25  Band:  1
 Sample:  1  Line:  26  Band:  1
-10% Processed
Sample:  1  Line:  27  Band:  1
+Sample:  1  Line:  27  Band:  1
 Sample:  1  Line:  28  Band:  1
 Sample:  1  Line:  29  Band:  1
 Sample:  1  Line:  30  Band:  1
@@ -1164,7 +1153,7 @@ Sample:  1  Line:  48  Band:  1
 Sample:  1  Line:  49  Band:  1
 Sample:  1  Line:  50  Band:  1
 Sample:  1  Line:  51  Band:  1
-20% Processed
Sample:  1  Line:  52  Band:  1
+Sample:  1  Line:  52  Band:  1
 Sample:  1  Line:  53  Band:  1
 Sample:  1  Line:  54  Band:  1
 Sample:  1  Line:  55  Band:  1
@@ -1189,7 +1178,7 @@ Sample:  1  Line:  73  Band:  1
 Sample:  1  Line:  74  Band:  1
 Sample:  1  Line:  75  Band:  1
 Sample:  1  Line:  76  Band:  1
-30% Processed
Sample:  1  Line:  77  Band:  1
+Sample:  1  Line:  77  Band:  1
 Sample:  1  Line:  78  Band:  1
 Sample:  1  Line:  79  Band:  1
 Sample:  1  Line:  80  Band:  1
@@ -1214,7 +1203,7 @@ Sample:  1  Line:  98  Band:  1
 Sample:  1  Line:  99  Band:  1
 Sample:  1  Line:  100  Band:  1
 Sample:  1  Line:  101  Band:  1
-40% Processed
Sample:  1  Line:  102  Band:  1
+Sample:  1  Line:  102  Band:  1
 Sample:  1  Line:  103  Band:  1
 Sample:  1  Line:  104  Band:  1
 Sample:  1  Line:  105  Band:  1
@@ -1239,7 +1228,7 @@ Sample:  1  Line:  123  Band:  1
 Sample:  1  Line:  124  Band:  1
 Sample:  1  Line:  125  Band:  1
 Sample:  1  Line:  126  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  1  Line:  2  Band:  2
 Sample:  1  Line:  3  Band:  2
 Sample:  1  Line:  4  Band:  2
@@ -1265,7 +1254,7 @@ Sample:  1  Line:  23  Band:  2
 Sample:  1  Line:  24  Band:  2
 Sample:  1  Line:  25  Band:  2
 Sample:  1  Line:  26  Band:  2
-60% Processed
Sample:  1  Line:  27  Band:  2
+Sample:  1  Line:  27  Band:  2
 Sample:  1  Line:  28  Band:  2
 Sample:  1  Line:  29  Band:  2
 Sample:  1  Line:  30  Band:  2
@@ -1290,7 +1279,7 @@ Sample:  1  Line:  48  Band:  2
 Sample:  1  Line:  49  Band:  2
 Sample:  1  Line:  50  Band:  2
 Sample:  1  Line:  51  Band:  2
-70% Processed
Sample:  1  Line:  52  Band:  2
+Sample:  1  Line:  52  Band:  2
 Sample:  1  Line:  53  Band:  2
 Sample:  1  Line:  54  Band:  2
 Sample:  1  Line:  55  Band:  2
@@ -1315,7 +1304,7 @@ Sample:  1  Line:  73  Band:  2
 Sample:  1  Line:  74  Band:  2
 Sample:  1  Line:  75  Band:  2
 Sample:  1  Line:  76  Band:  2
-80% Processed
Sample:  1  Line:  77  Band:  2
+Sample:  1  Line:  77  Band:  2
 Sample:  1  Line:  78  Band:  2
 Sample:  1  Line:  79  Band:  2
 Sample:  1  Line:  80  Band:  2
@@ -1340,7 +1329,7 @@ Sample:  1  Line:  98  Band:  2
 Sample:  1  Line:  99  Band:  2
 Sample:  1  Line:  100  Band:  2
 Sample:  1  Line:  101  Band:  2
-90% Processed
Sample:  1  Line:  102  Band:  2
+Sample:  1  Line:  102  Band:  2
 Sample:  1  Line:  103  Band:  2
 Sample:  1  Line:  104  Band:  2
 Sample:  1  Line:  105  Band:  2
@@ -1365,10 +1354,8 @@ Sample:  1  Line:  123  Band:  2
 Sample:  1  Line:  124  Band:  2
 Sample:  1  Line:  125  Band:  2
 Sample:  1  Line:  126  Band:  2
-100% Processed
 Functor3
-unittest: Working
-0% Processed
Sample:  1:1  Line:  1:1  Band:  1:1
+Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  1:1  Line:  2:2  Band:  1:1
 Sample:  1:1  Line:  3:3  Band:  1:1
 Sample:  1:1  Line:  4:4  Band:  1:1
@@ -1394,7 +1381,7 @@ Sample:  1:1  Line:  23:23  Band:  1:1
 Sample:  1:1  Line:  24:24  Band:  1:1
 Sample:  1:1  Line:  25:25  Band:  1:1
 Sample:  1:1  Line:  26:26  Band:  1:1
-10% Processed
Sample:  1:1  Line:  27:27  Band:  1:1
+Sample:  1:1  Line:  27:27  Band:  1:1
 Sample:  1:1  Line:  28:28  Band:  1:1
 Sample:  1:1  Line:  29:29  Band:  1:1
 Sample:  1:1  Line:  30:30  Band:  1:1
@@ -1419,7 +1406,7 @@ Sample:  1:1  Line:  48:48  Band:  1:1
 Sample:  1:1  Line:  49:49  Band:  1:1
 Sample:  1:1  Line:  50:50  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
-20% Processed
Sample:  1:1  Line:  52:52  Band:  1:1
+Sample:  1:1  Line:  52:52  Band:  1:1
 Sample:  1:1  Line:  53:53  Band:  1:1
 Sample:  1:1  Line:  54:54  Band:  1:1
 Sample:  1:1  Line:  55:55  Band:  1:1
@@ -1444,7 +1431,7 @@ Sample:  1:1  Line:  73:73  Band:  1:1
 Sample:  1:1  Line:  74:74  Band:  1:1
 Sample:  1:1  Line:  75:75  Band:  1:1
 Sample:  1:1  Line:  76:76  Band:  1:1
-30% Processed
Sample:  1:1  Line:  77:77  Band:  1:1
+Sample:  1:1  Line:  77:77  Band:  1:1
 Sample:  1:1  Line:  78:78  Band:  1:1
 Sample:  1:1  Line:  79:79  Band:  1:1
 Sample:  1:1  Line:  80:80  Band:  1:1
@@ -1469,7 +1456,7 @@ Sample:  1:1  Line:  98:98  Band:  1:1
 Sample:  1:1  Line:  99:99  Band:  1:1
 Sample:  1:1  Line:  100:100  Band:  1:1
 Sample:  1:1  Line:  101:101  Band:  1:1
-40% Processed
Sample:  1:1  Line:  102:102  Band:  1:1
+Sample:  1:1  Line:  102:102  Band:  1:1
 Sample:  1:1  Line:  103:103  Band:  1:1
 Sample:  1:1  Line:  104:104  Band:  1:1
 Sample:  1:1  Line:  105:105  Band:  1:1
@@ -1494,7 +1481,7 @@ Sample:  1:1  Line:  123:123  Band:  1:1
 Sample:  1:1  Line:  124:124  Band:  1:1
 Sample:  1:1  Line:  125:125  Band:  1:1
 Sample:  1:1  Line:  126:126  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:1
+Sample:  1:1  Line:  1:1  Band:  2:1
 Sample:  1:1  Line:  2:2  Band:  2:1
 Sample:  1:1  Line:  3:3  Band:  2:1
 Sample:  1:1  Line:  4:4  Band:  2:1
@@ -1520,7 +1507,7 @@ Sample:  1:1  Line:  23:23  Band:  2:1
 Sample:  1:1  Line:  24:24  Band:  2:1
 Sample:  1:1  Line:  25:25  Band:  2:1
 Sample:  1:1  Line:  26:26  Band:  2:1
-60% Processed
Sample:  1:1  Line:  27:27  Band:  2:1
+Sample:  1:1  Line:  27:27  Band:  2:1
 Sample:  1:1  Line:  28:28  Band:  2:1
 Sample:  1:1  Line:  29:29  Band:  2:1
 Sample:  1:1  Line:  30:30  Band:  2:1
@@ -1545,7 +1532,7 @@ Sample:  1:1  Line:  48:48  Band:  2:1
 Sample:  1:1  Line:  49:49  Band:  2:1
 Sample:  1:1  Line:  50:50  Band:  2:1
 Sample:  1:1  Line:  51:51  Band:  2:1
-70% Processed
Sample:  1:1  Line:  52:52  Band:  2:1
+Sample:  1:1  Line:  52:52  Band:  2:1
 Sample:  1:1  Line:  53:53  Band:  2:1
 Sample:  1:1  Line:  54:54  Band:  2:1
 Sample:  1:1  Line:  55:55  Band:  2:1
@@ -1570,7 +1557,7 @@ Sample:  1:1  Line:  73:73  Band:  2:1
 Sample:  1:1  Line:  74:74  Band:  2:1
 Sample:  1:1  Line:  75:75  Band:  2:1
 Sample:  1:1  Line:  76:76  Band:  2:1
-80% Processed
Sample:  1:1  Line:  77:77  Band:  2:1
+Sample:  1:1  Line:  77:77  Band:  2:1
 Sample:  1:1  Line:  78:78  Band:  2:1
 Sample:  1:1  Line:  79:79  Band:  2:1
 Sample:  1:1  Line:  80:80  Band:  2:1
@@ -1595,7 +1582,7 @@ Sample:  1:1  Line:  98:98  Band:  2:1
 Sample:  1:1  Line:  99:99  Band:  2:1
 Sample:  1:1  Line:  100:100  Band:  2:1
 Sample:  1:1  Line:  101:101  Band:  2:1
-90% Processed
Sample:  1:1  Line:  102:102  Band:  2:1
+Sample:  1:1  Line:  102:102  Band:  2:1
 Sample:  1:1  Line:  103:103  Band:  2:1
 Sample:  1:1  Line:  104:104  Band:  2:1
 Sample:  1:1  Line:  105:105  Band:  2:1
@@ -1620,7 +1607,6 @@ Sample:  1:1  Line:  123:123  Band:  2:1
 Sample:  1:1  Line:  124:124  Band:  2:1
 Sample:  1:1  Line:  125:125  Band:  2:1
 Sample:  1:1  Line:  126:126  Band:  2:1
-100% Processed
 End Testing Functors
 Testing error for no input/output ...
 **PROGRAMMER ERROR** You haven't specified an input or output cube.
diff --git a/isis/src/base/objs/ProcessByQuickFilter/ProcessByQuickFilter.truth b/isis/src/base/objs/ProcessByQuickFilter/ProcessByQuickFilter.truth
index dcf6a3f933366abfb1b71b9b52d0e3eb35bbde11..e7fc75e361e8fad0f138e1261909905ceb0f356c 100644
--- a/isis/src/base/objs/ProcessByQuickFilter/ProcessByQuickFilter.truth
+++ b/isis/src/base/objs/ProcessByQuickFilter/ProcessByQuickFilter.truth
@@ -13,8 +13,7 @@ Testing Isis::ProcessByQuickFilter Class ...
 
 **USER ERROR** Boxcar width is too big for cube size.
 
-unittest: Working
-0% Processed
+
 Boxcar width:   5
 Boxcar height:  7
 Low:            -1.79769e+308
@@ -48,7 +47,7 @@ Working on line:  23
 Working on line:  24
 Working on line:  25
 Working on line:  26
-10% Processed
Working on line:  27
+Working on line:  27
 Working on line:  28
 Working on line:  29
 Working on line:  30
@@ -73,7 +72,7 @@ Working on line:  48
 Working on line:  49
 Working on line:  50
 Working on line:  51
-20% Processed
Working on line:  52
+Working on line:  52
 Working on line:  53
 Working on line:  54
 Working on line:  55
@@ -98,7 +97,7 @@ Working on line:  73
 Working on line:  74
 Working on line:  75
 Working on line:  76
-30% Processed
Working on line:  77
+Working on line:  77
 Working on line:  78
 Working on line:  79
 Working on line:  80
@@ -123,7 +122,7 @@ Working on line:  98
 Working on line:  99
 Working on line:  100
 Working on line:  101
-40% Processed
Working on line:  102
+Working on line:  102
 Working on line:  103
 Working on line:  104
 Working on line:  105
@@ -148,7 +147,7 @@ Working on line:  123
 Working on line:  124
 Working on line:  125
 Working on line:  126
-50% Processed
Working on line:  1
+Working on line:  1
 Working on line:  2
 Working on line:  3
 Working on line:  4
@@ -174,7 +173,7 @@ Working on line:  23
 Working on line:  24
 Working on line:  25
 Working on line:  26
-60% Processed
Working on line:  27
+Working on line:  27
 Working on line:  28
 Working on line:  29
 Working on line:  30
@@ -199,7 +198,7 @@ Working on line:  48
 Working on line:  49
 Working on line:  50
 Working on line:  51
-70% Processed
Working on line:  52
+Working on line:  52
 Working on line:  53
 Working on line:  54
 Working on line:  55
@@ -224,7 +223,7 @@ Working on line:  73
 Working on line:  74
 Working on line:  75
 Working on line:  76
-80% Processed
Working on line:  77
+Working on line:  77
 Working on line:  78
 Working on line:  79
 Working on line:  80
@@ -249,7 +248,7 @@ Working on line:  98
 Working on line:  99
 Working on line:  100
 Working on line:  101
-90% Processed
Working on line:  102
+Working on line:  102
 Working on line:  103
 Working on line:  104
 Working on line:  105
@@ -274,10 +273,8 @@ Working on line:  123
 Working on line:  124
 Working on line:  125
 Working on line:  126
-100% Processed
 
-unittest: Working
-0% Processed
+
 Boxcar width:   9
 Boxcar height:  9
 Low:            -1.79769e+308
@@ -311,7 +308,7 @@ Working on line:  23
 Working on line:  24
 Working on line:  25
 Working on line:  26
-10% Processed
Working on line:  27
+Working on line:  27
 Working on line:  28
 Working on line:  29
 Working on line:  30
@@ -336,7 +333,7 @@ Working on line:  48
 Working on line:  49
 Working on line:  50
 Working on line:  51
-20% Processed
Working on line:  52
+Working on line:  52
 Working on line:  53
 Working on line:  54
 Working on line:  55
@@ -361,7 +358,7 @@ Working on line:  73
 Working on line:  74
 Working on line:  75
 Working on line:  76
-30% Processed
Working on line:  77
+Working on line:  77
 Working on line:  78
 Working on line:  79
 Working on line:  80
@@ -386,7 +383,7 @@ Working on line:  98
 Working on line:  99
 Working on line:  100
 Working on line:  101
-40% Processed
Working on line:  102
+Working on line:  102
 Working on line:  103
 Working on line:  104
 Working on line:  105
@@ -411,7 +408,7 @@ Working on line:  123
 Working on line:  124
 Working on line:  125
 Working on line:  126
-50% Processed
Working on line:  1
+Working on line:  1
 Working on line:  2
 Working on line:  3
 Working on line:  4
@@ -437,7 +434,7 @@ Working on line:  23
 Working on line:  24
 Working on line:  25
 Working on line:  26
-60% Processed
Working on line:  27
+Working on line:  27
 Working on line:  28
 Working on line:  29
 Working on line:  30
@@ -462,7 +459,7 @@ Working on line:  48
 Working on line:  49
 Working on line:  50
 Working on line:  51
-70% Processed
Working on line:  52
+Working on line:  52
 Working on line:  53
 Working on line:  54
 Working on line:  55
@@ -487,7 +484,7 @@ Working on line:  73
 Working on line:  74
 Working on line:  75
 Working on line:  76
-80% Processed
Working on line:  77
+Working on line:  77
 Working on line:  78
 Working on line:  79
 Working on line:  80
@@ -512,7 +509,7 @@ Working on line:  98
 Working on line:  99
 Working on line:  100
 Working on line:  101
-90% Processed
Working on line:  102
+Working on line:  102
 Working on line:  103
 Working on line:  104
 Working on line:  105
@@ -537,4 +534,3 @@ Working on line:  123
 Working on line:  124
 Working on line:  125
 Working on line:  126
-100% Processed
diff --git a/isis/src/base/objs/ProcessBySample/ProcessBySample.truth b/isis/src/base/objs/ProcessBySample/ProcessBySample.truth
index 8b2af74db03a8295340dacf5d5a1a45d004182c9..94d3ec6a67484544f128016f4fae3b69b1259ccc 100644
--- a/isis/src/base/objs/ProcessBySample/ProcessBySample.truth
+++ b/isis/src/base/objs/ProcessBySample/ProcessBySample.truth
@@ -1,6 +1,5 @@
 Testing StartProcess routines that accept processing functions:
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  1
 Buffer Lines:    126
 Buffer Bands:    1
@@ -31,7 +30,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-10% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -56,7 +55,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-20% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -81,7 +80,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-30% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -106,7 +105,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-40% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -131,7 +130,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  2  Line:  1  Band:  2
 Sample:  3  Line:  1  Band:  2
 Sample:  4  Line:  1  Band:  2
@@ -157,7 +156,7 @@ Sample:  23  Line:  1  Band:  2
 Sample:  24  Line:  1  Band:  2
 Sample:  25  Line:  1  Band:  2
 Sample:  26  Line:  1  Band:  2
-60% Processed
Sample:  27  Line:  1  Band:  2
+Sample:  27  Line:  1  Band:  2
 Sample:  28  Line:  1  Band:  2
 Sample:  29  Line:  1  Band:  2
 Sample:  30  Line:  1  Band:  2
@@ -182,7 +181,7 @@ Sample:  48  Line:  1  Band:  2
 Sample:  49  Line:  1  Band:  2
 Sample:  50  Line:  1  Band:  2
 Sample:  51  Line:  1  Band:  2
-70% Processed
Sample:  52  Line:  1  Band:  2
+Sample:  52  Line:  1  Band:  2
 Sample:  53  Line:  1  Band:  2
 Sample:  54  Line:  1  Band:  2
 Sample:  55  Line:  1  Band:  2
@@ -207,7 +206,7 @@ Sample:  73  Line:  1  Band:  2
 Sample:  74  Line:  1  Band:  2
 Sample:  75  Line:  1  Band:  2
 Sample:  76  Line:  1  Band:  2
-80% Processed
Sample:  77  Line:  1  Band:  2
+Sample:  77  Line:  1  Band:  2
 Sample:  78  Line:  1  Band:  2
 Sample:  79  Line:  1  Band:  2
 Sample:  80  Line:  1  Band:  2
@@ -232,7 +231,7 @@ Sample:  98  Line:  1  Band:  2
 Sample:  99  Line:  1  Band:  2
 Sample:  100  Line:  1  Band:  2
 Sample:  101  Line:  1  Band:  2
-90% Processed
Sample:  102  Line:  1  Band:  2
+Sample:  102  Line:  1  Band:  2
 Sample:  103  Line:  1  Band:  2
 Sample:  104  Line:  1  Band:  2
 Sample:  105  Line:  1  Band:  2
@@ -257,9 +256,7 @@ Sample:  123  Line:  1  Band:  2
 Sample:  124  Line:  1  Band:  2
 Sample:  125  Line:  1  Band:  2
 Sample:  126  Line:  1  Band:  2
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one output cube ... 
 Buffer Samples:  1
 Buffer Lines:    20
@@ -268,36 +265,34 @@ Buffer Bands:    1
 Sample:  1  Line:  1  Band:  1
 Sample:  2  Line:  1  Band:  1
 Sample:  3  Line:  1  Band:  1
-10% Processed
Sample:  4  Line:  1  Band:  1
+Sample:  4  Line:  1  Band:  1
 Sample:  5  Line:  1  Band:  1
 Sample:  6  Line:  1  Band:  1
-20% Processed
Sample:  7  Line:  1  Band:  1
+Sample:  7  Line:  1  Band:  1
 Sample:  8  Line:  1  Band:  1
 Sample:  9  Line:  1  Band:  1
-30% Processed
Sample:  10  Line:  1  Band:  1
+Sample:  10  Line:  1  Band:  1
 Sample:  1  Line:  1  Band:  2
 Sample:  2  Line:  1  Band:  2
-40% Processed
Sample:  3  Line:  1  Band:  2
+Sample:  3  Line:  1  Band:  2
 Sample:  4  Line:  1  Band:  2
 Sample:  5  Line:  1  Band:  2
-50% Processed
Sample:  6  Line:  1  Band:  2
+Sample:  6  Line:  1  Band:  2
 Sample:  7  Line:  1  Band:  2
 Sample:  8  Line:  1  Band:  2
-60% Processed
Sample:  9  Line:  1  Band:  2
+Sample:  9  Line:  1  Band:  2
 Sample:  10  Line:  1  Band:  2
 Sample:  1  Line:  1  Band:  3
-70% Processed
Sample:  2  Line:  1  Band:  3
+Sample:  2  Line:  1  Band:  3
 Sample:  3  Line:  1  Band:  3
 Sample:  4  Line:  1  Band:  3
-80% Processed
Sample:  5  Line:  1  Band:  3
+Sample:  5  Line:  1  Band:  3
 Sample:  6  Line:  1  Band:  3
 Sample:  7  Line:  1  Band:  3
-90% Processed
Sample:  8  Line:  1  Band:  3
+Sample:  8  Line:  1  Band:  3
 Sample:  9  Line:  1  Band:  3
 Sample:  10  Line:  1  Band:  3
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  1
 Buffer Lines:    126
@@ -329,7 +324,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-10% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -354,7 +349,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-20% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -379,7 +374,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-30% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -404,7 +399,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-40% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -429,7 +424,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  2  Line:  1  Band:  2
 Sample:  3  Line:  1  Band:  2
 Sample:  4  Line:  1  Band:  2
@@ -455,7 +450,7 @@ Sample:  23  Line:  1  Band:  2
 Sample:  24  Line:  1  Band:  2
 Sample:  25  Line:  1  Band:  2
 Sample:  26  Line:  1  Band:  2
-60% Processed
Sample:  27  Line:  1  Band:  2
+Sample:  27  Line:  1  Band:  2
 Sample:  28  Line:  1  Band:  2
 Sample:  29  Line:  1  Band:  2
 Sample:  30  Line:  1  Band:  2
@@ -480,7 +475,7 @@ Sample:  48  Line:  1  Band:  2
 Sample:  49  Line:  1  Band:  2
 Sample:  50  Line:  1  Band:  2
 Sample:  51  Line:  1  Band:  2
-70% Processed
Sample:  52  Line:  1  Band:  2
+Sample:  52  Line:  1  Band:  2
 Sample:  53  Line:  1  Band:  2
 Sample:  54  Line:  1  Band:  2
 Sample:  55  Line:  1  Band:  2
@@ -505,7 +500,7 @@ Sample:  73  Line:  1  Band:  2
 Sample:  74  Line:  1  Band:  2
 Sample:  75  Line:  1  Band:  2
 Sample:  76  Line:  1  Band:  2
-80% Processed
Sample:  77  Line:  1  Band:  2
+Sample:  77  Line:  1  Band:  2
 Sample:  78  Line:  1  Band:  2
 Sample:  79  Line:  1  Band:  2
 Sample:  80  Line:  1  Band:  2
@@ -530,7 +525,7 @@ Sample:  98  Line:  1  Band:  2
 Sample:  99  Line:  1  Band:  2
 Sample:  100  Line:  1  Band:  2
 Sample:  101  Line:  1  Band:  2
-90% Processed
Sample:  102  Line:  1  Band:  2
+Sample:  102  Line:  1  Band:  2
 Sample:  103  Line:  1  Band:  2
 Sample:  104  Line:  1  Band:  2
 Sample:  105  Line:  1  Band:  2
@@ -555,9 +550,7 @@ Sample:  123  Line:  1  Band:  2
 Sample:  124  Line:  1  Band:  2
 Sample:  125  Line:  1  Band:  2
 Sample:  126  Line:  1  Band:  2
-100% Processed
-unittest: Working
-0% Processed
Testing two input and output cubes ... 
+Testing two input and output cubes ... 
 Number of input cubes:   2
 Number of output cubes:  2
 
@@ -587,7 +580,7 @@ Sample:  23:23  Line:  1:1  Band:  1:1
 Sample:  24:24  Line:  1:1  Band:  1:1
 Sample:  25:25  Line:  1:1  Band:  1:1
 Sample:  26:26  Line:  1:1  Band:  1:1
-10% Processed
Sample:  27:27  Line:  1:1  Band:  1:1
+Sample:  27:27  Line:  1:1  Band:  1:1
 Sample:  28:28  Line:  1:1  Band:  1:1
 Sample:  29:29  Line:  1:1  Band:  1:1
 Sample:  30:30  Line:  1:1  Band:  1:1
@@ -612,7 +605,7 @@ Sample:  48:48  Line:  1:1  Band:  1:1
 Sample:  49:49  Line:  1:1  Band:  1:1
 Sample:  50:50  Line:  1:1  Band:  1:1
 Sample:  51:51  Line:  1:1  Band:  1:1
-20% Processed
Sample:  52:52  Line:  1:1  Band:  1:1
+Sample:  52:52  Line:  1:1  Band:  1:1
 Sample:  53:53  Line:  1:1  Band:  1:1
 Sample:  54:54  Line:  1:1  Band:  1:1
 Sample:  55:55  Line:  1:1  Band:  1:1
@@ -637,7 +630,7 @@ Sample:  73:73  Line:  1:1  Band:  1:1
 Sample:  74:74  Line:  1:1  Band:  1:1
 Sample:  75:75  Line:  1:1  Band:  1:1
 Sample:  76:76  Line:  1:1  Band:  1:1
-30% Processed
Sample:  77:77  Line:  1:1  Band:  1:1
+Sample:  77:77  Line:  1:1  Band:  1:1
 Sample:  78:78  Line:  1:1  Band:  1:1
 Sample:  79:79  Line:  1:1  Band:  1:1
 Sample:  80:80  Line:  1:1  Band:  1:1
@@ -662,7 +655,7 @@ Sample:  98:98  Line:  1:1  Band:  1:1
 Sample:  99:99  Line:  1:1  Band:  1:1
 Sample:  100:100  Line:  1:1  Band:  1:1
 Sample:  101:101  Line:  1:1  Band:  1:1
-40% Processed
Sample:  102:102  Line:  1:1  Band:  1:1
+Sample:  102:102  Line:  1:1  Band:  1:1
 Sample:  103:103  Line:  1:1  Band:  1:1
 Sample:  104:104  Line:  1:1  Band:  1:1
 Sample:  105:105  Line:  1:1  Band:  1:1
@@ -687,7 +680,7 @@ Sample:  123:123  Line:  1:1  Band:  1:1
 Sample:  124:124  Line:  1:1  Band:  1:1
 Sample:  125:125  Line:  1:1  Band:  1:1
 Sample:  126:126  Line:  1:1  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:1
+Sample:  1:1  Line:  1:1  Band:  2:1
 Sample:  2:2  Line:  1:1  Band:  2:1
 Sample:  3:3  Line:  1:1  Band:  2:1
 Sample:  4:4  Line:  1:1  Band:  2:1
@@ -713,7 +706,7 @@ Sample:  23:23  Line:  1:1  Band:  2:1
 Sample:  24:24  Line:  1:1  Band:  2:1
 Sample:  25:25  Line:  1:1  Band:  2:1
 Sample:  26:26  Line:  1:1  Band:  2:1
-60% Processed
Sample:  27:27  Line:  1:1  Band:  2:1
+Sample:  27:27  Line:  1:1  Band:  2:1
 Sample:  28:28  Line:  1:1  Band:  2:1
 Sample:  29:29  Line:  1:1  Band:  2:1
 Sample:  30:30  Line:  1:1  Band:  2:1
@@ -738,7 +731,7 @@ Sample:  48:48  Line:  1:1  Band:  2:1
 Sample:  49:49  Line:  1:1  Band:  2:1
 Sample:  50:50  Line:  1:1  Band:  2:1
 Sample:  51:51  Line:  1:1  Band:  2:1
-70% Processed
Sample:  52:52  Line:  1:1  Band:  2:1
+Sample:  52:52  Line:  1:1  Band:  2:1
 Sample:  53:53  Line:  1:1  Band:  2:1
 Sample:  54:54  Line:  1:1  Band:  2:1
 Sample:  55:55  Line:  1:1  Band:  2:1
@@ -763,7 +756,7 @@ Sample:  73:73  Line:  1:1  Band:  2:1
 Sample:  74:74  Line:  1:1  Band:  2:1
 Sample:  75:75  Line:  1:1  Band:  2:1
 Sample:  76:76  Line:  1:1  Band:  2:1
-80% Processed
Sample:  77:77  Line:  1:1  Band:  2:1
+Sample:  77:77  Line:  1:1  Band:  2:1
 Sample:  78:78  Line:  1:1  Band:  2:1
 Sample:  79:79  Line:  1:1  Band:  2:1
 Sample:  80:80  Line:  1:1  Band:  2:1
@@ -788,7 +781,7 @@ Sample:  98:98  Line:  1:1  Band:  2:1
 Sample:  99:99  Line:  1:1  Band:  2:1
 Sample:  100:100  Line:  1:1  Band:  2:1
 Sample:  101:101  Line:  1:1  Band:  2:1
-90% Processed
Sample:  102:102  Line:  1:1  Band:  2:1
+Sample:  102:102  Line:  1:1  Band:  2:1
 Sample:  103:103  Line:  1:1  Band:  2:1
 Sample:  104:104  Line:  1:1  Band:  2:1
 Sample:  105:105  Line:  1:1  Band:  2:1
@@ -813,10 +806,8 @@ Sample:  123:123  Line:  1:1  Band:  2:1
 Sample:  124:124  Line:  1:1  Band:  2:1
 Sample:  125:125  Line:  1:1  Band:  2:1
 Sample:  126:126  Line:  1:1  Band:  2:1
-100% Processed
 Testing Process routines which accept functors:
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  1
 Buffer Lines:    126
 Buffer Bands:    1
@@ -847,7 +838,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-10% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -872,7 +863,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-20% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -897,7 +888,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-30% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -922,7 +913,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-40% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -947,7 +938,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  2  Line:  1  Band:  2
 Sample:  3  Line:  1  Band:  2
 Sample:  4  Line:  1  Band:  2
@@ -973,7 +964,7 @@ Sample:  23  Line:  1  Band:  2
 Sample:  24  Line:  1  Band:  2
 Sample:  25  Line:  1  Band:  2
 Sample:  26  Line:  1  Band:  2
-60% Processed
Sample:  27  Line:  1  Band:  2
+Sample:  27  Line:  1  Band:  2
 Sample:  28  Line:  1  Band:  2
 Sample:  29  Line:  1  Band:  2
 Sample:  30  Line:  1  Band:  2
@@ -998,7 +989,7 @@ Sample:  48  Line:  1  Band:  2
 Sample:  49  Line:  1  Band:  2
 Sample:  50  Line:  1  Band:  2
 Sample:  51  Line:  1  Band:  2
-70% Processed
Sample:  52  Line:  1  Band:  2
+Sample:  52  Line:  1  Band:  2
 Sample:  53  Line:  1  Band:  2
 Sample:  54  Line:  1  Band:  2
 Sample:  55  Line:  1  Band:  2
@@ -1023,7 +1014,7 @@ Sample:  73  Line:  1  Band:  2
 Sample:  74  Line:  1  Band:  2
 Sample:  75  Line:  1  Band:  2
 Sample:  76  Line:  1  Band:  2
-80% Processed
Sample:  77  Line:  1  Band:  2
+Sample:  77  Line:  1  Band:  2
 Sample:  78  Line:  1  Band:  2
 Sample:  79  Line:  1  Band:  2
 Sample:  80  Line:  1  Band:  2
@@ -1048,7 +1039,7 @@ Sample:  98  Line:  1  Band:  2
 Sample:  99  Line:  1  Band:  2
 Sample:  100  Line:  1  Band:  2
 Sample:  101  Line:  1  Band:  2
-90% Processed
Sample:  102  Line:  1  Band:  2
+Sample:  102  Line:  1  Band:  2
 Sample:  103  Line:  1  Band:  2
 Sample:  104  Line:  1  Band:  2
 Sample:  105  Line:  1  Band:  2
@@ -1073,9 +1064,7 @@ Sample:  123  Line:  1  Band:  2
 Sample:  124  Line:  1  Band:  2
 Sample:  125  Line:  1  Band:  2
 Sample:  126  Line:  1  Band:  2
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  1
 Buffer Lines:    126
@@ -1107,7 +1096,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-10% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -1132,7 +1121,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-20% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -1157,7 +1146,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-30% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -1182,7 +1171,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-40% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -1207,7 +1196,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  2  Line:  1  Band:  2
 Sample:  3  Line:  1  Band:  2
 Sample:  4  Line:  1  Band:  2
@@ -1233,7 +1222,7 @@ Sample:  23  Line:  1  Band:  2
 Sample:  24  Line:  1  Band:  2
 Sample:  25  Line:  1  Band:  2
 Sample:  26  Line:  1  Band:  2
-60% Processed
Sample:  27  Line:  1  Band:  2
+Sample:  27  Line:  1  Band:  2
 Sample:  28  Line:  1  Band:  2
 Sample:  29  Line:  1  Band:  2
 Sample:  30  Line:  1  Band:  2
@@ -1258,7 +1247,7 @@ Sample:  48  Line:  1  Band:  2
 Sample:  49  Line:  1  Band:  2
 Sample:  50  Line:  1  Band:  2
 Sample:  51  Line:  1  Band:  2
-70% Processed
Sample:  52  Line:  1  Band:  2
+Sample:  52  Line:  1  Band:  2
 Sample:  53  Line:  1  Band:  2
 Sample:  54  Line:  1  Band:  2
 Sample:  55  Line:  1  Band:  2
@@ -1283,7 +1272,7 @@ Sample:  73  Line:  1  Band:  2
 Sample:  74  Line:  1  Band:  2
 Sample:  75  Line:  1  Band:  2
 Sample:  76  Line:  1  Band:  2
-80% Processed
Sample:  77  Line:  1  Band:  2
+Sample:  77  Line:  1  Band:  2
 Sample:  78  Line:  1  Band:  2
 Sample:  79  Line:  1  Band:  2
 Sample:  80  Line:  1  Band:  2
@@ -1308,7 +1297,7 @@ Sample:  98  Line:  1  Band:  2
 Sample:  99  Line:  1  Band:  2
 Sample:  100  Line:  1  Band:  2
 Sample:  101  Line:  1  Band:  2
-90% Processed
Sample:  102  Line:  1  Band:  2
+Sample:  102  Line:  1  Band:  2
 Sample:  103  Line:  1  Band:  2
 Sample:  104  Line:  1  Band:  2
 Sample:  105  Line:  1  Band:  2
@@ -1333,9 +1322,7 @@ Sample:  123  Line:  1  Band:  2
 Sample:  124  Line:  1  Band:  2
 Sample:  125  Line:  1  Band:  2
 Sample:  126  Line:  1  Band:  2
-100% Processed
-unittest: Working
-0% Processed
Sample:  1:1  Line:  1:1  Band:  1:1
+Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  2:2  Line:  1:1  Band:  1:1
 Sample:  3:3  Line:  1:1  Band:  1:1
 Sample:  4:4  Line:  1:1  Band:  1:1
@@ -1361,7 +1348,7 @@ Sample:  23:23  Line:  1:1  Band:  1:1
 Sample:  24:24  Line:  1:1  Band:  1:1
 Sample:  25:25  Line:  1:1  Band:  1:1
 Sample:  26:26  Line:  1:1  Band:  1:1
-10% Processed
Sample:  27:27  Line:  1:1  Band:  1:1
+Sample:  27:27  Line:  1:1  Band:  1:1
 Sample:  28:28  Line:  1:1  Band:  1:1
 Sample:  29:29  Line:  1:1  Band:  1:1
 Sample:  30:30  Line:  1:1  Band:  1:1
@@ -1386,7 +1373,7 @@ Sample:  48:48  Line:  1:1  Band:  1:1
 Sample:  49:49  Line:  1:1  Band:  1:1
 Sample:  50:50  Line:  1:1  Band:  1:1
 Sample:  51:51  Line:  1:1  Band:  1:1
-20% Processed
Sample:  52:52  Line:  1:1  Band:  1:1
+Sample:  52:52  Line:  1:1  Band:  1:1
 Sample:  53:53  Line:  1:1  Band:  1:1
 Sample:  54:54  Line:  1:1  Band:  1:1
 Sample:  55:55  Line:  1:1  Band:  1:1
@@ -1411,7 +1398,7 @@ Sample:  73:73  Line:  1:1  Band:  1:1
 Sample:  74:74  Line:  1:1  Band:  1:1
 Sample:  75:75  Line:  1:1  Band:  1:1
 Sample:  76:76  Line:  1:1  Band:  1:1
-30% Processed
Sample:  77:77  Line:  1:1  Band:  1:1
+Sample:  77:77  Line:  1:1  Band:  1:1
 Sample:  78:78  Line:  1:1  Band:  1:1
 Sample:  79:79  Line:  1:1  Band:  1:1
 Sample:  80:80  Line:  1:1  Band:  1:1
@@ -1436,7 +1423,7 @@ Sample:  98:98  Line:  1:1  Band:  1:1
 Sample:  99:99  Line:  1:1  Band:  1:1
 Sample:  100:100  Line:  1:1  Band:  1:1
 Sample:  101:101  Line:  1:1  Band:  1:1
-40% Processed
Sample:  102:102  Line:  1:1  Band:  1:1
+Sample:  102:102  Line:  1:1  Band:  1:1
 Sample:  103:103  Line:  1:1  Band:  1:1
 Sample:  104:104  Line:  1:1  Band:  1:1
 Sample:  105:105  Line:  1:1  Band:  1:1
@@ -1461,7 +1448,7 @@ Sample:  123:123  Line:  1:1  Band:  1:1
 Sample:  124:124  Line:  1:1  Band:  1:1
 Sample:  125:125  Line:  1:1  Band:  1:1
 Sample:  126:126  Line:  1:1  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:1
+Sample:  1:1  Line:  1:1  Band:  2:1
 Sample:  2:2  Line:  1:1  Band:  2:1
 Sample:  3:3  Line:  1:1  Band:  2:1
 Sample:  4:4  Line:  1:1  Band:  2:1
@@ -1487,7 +1474,7 @@ Sample:  23:23  Line:  1:1  Band:  2:1
 Sample:  24:24  Line:  1:1  Band:  2:1
 Sample:  25:25  Line:  1:1  Band:  2:1
 Sample:  26:26  Line:  1:1  Band:  2:1
-60% Processed
Sample:  27:27  Line:  1:1  Band:  2:1
+Sample:  27:27  Line:  1:1  Band:  2:1
 Sample:  28:28  Line:  1:1  Band:  2:1
 Sample:  29:29  Line:  1:1  Band:  2:1
 Sample:  30:30  Line:  1:1  Band:  2:1
@@ -1512,7 +1499,7 @@ Sample:  48:48  Line:  1:1  Band:  2:1
 Sample:  49:49  Line:  1:1  Band:  2:1
 Sample:  50:50  Line:  1:1  Band:  2:1
 Sample:  51:51  Line:  1:1  Band:  2:1
-70% Processed
Sample:  52:52  Line:  1:1  Band:  2:1
+Sample:  52:52  Line:  1:1  Band:  2:1
 Sample:  53:53  Line:  1:1  Band:  2:1
 Sample:  54:54  Line:  1:1  Band:  2:1
 Sample:  55:55  Line:  1:1  Band:  2:1
@@ -1537,7 +1524,7 @@ Sample:  73:73  Line:  1:1  Band:  2:1
 Sample:  74:74  Line:  1:1  Band:  2:1
 Sample:  75:75  Line:  1:1  Band:  2:1
 Sample:  76:76  Line:  1:1  Band:  2:1
-80% Processed
Sample:  77:77  Line:  1:1  Band:  2:1
+Sample:  77:77  Line:  1:1  Band:  2:1
 Sample:  78:78  Line:  1:1  Band:  2:1
 Sample:  79:79  Line:  1:1  Band:  2:1
 Sample:  80:80  Line:  1:1  Band:  2:1
@@ -1562,7 +1549,7 @@ Sample:  98:98  Line:  1:1  Band:  2:1
 Sample:  99:99  Line:  1:1  Band:  2:1
 Sample:  100:100  Line:  1:1  Band:  2:1
 Sample:  101:101  Line:  1:1  Band:  2:1
-90% Processed
Sample:  102:102  Line:  1:1  Band:  2:1
+Sample:  102:102  Line:  1:1  Band:  2:1
 Sample:  103:103  Line:  1:1  Band:  2:1
 Sample:  104:104  Line:  1:1  Band:  2:1
 Sample:  105:105  Line:  1:1  Band:  2:1
@@ -1587,4 +1574,3 @@ Sample:  123:123  Line:  1:1  Band:  2:1
 Sample:  124:124  Line:  1:1  Band:  2:1
 Sample:  125:125  Line:  1:1  Band:  2:1
 Sample:  126:126  Line:  1:1  Band:  2:1
-100% Processed
diff --git a/isis/src/base/objs/ProcessBySpectra/ProcessBySpectra.truth b/isis/src/base/objs/ProcessBySpectra/ProcessBySpectra.truth
index 5b070b1620708cd169e5b0492efd31ff1fc257e5..96012702f909c1acab3cd374f0919e7126aaf3ea 100644
--- a/isis/src/base/objs/ProcessBySpectra/ProcessBySpectra.truth
+++ b/isis/src/base/objs/ProcessBySpectra/ProcessBySpectra.truth
@@ -1,6 +1,5 @@
 Testing Isis::ProcessBySpectra Class ... 
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  252
 Buffer Lines:    126
 Buffer Bands:    2
@@ -18,7 +17,7 @@ Sample:  10  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
 Sample:  12  Line:  1  Band:  1
 Sample:  13  Line:  1  Band:  1
-10% Processed
Sample:  14  Line:  1  Band:  1
+Sample:  14  Line:  1  Band:  1
 Sample:  15  Line:  1  Band:  1
 Sample:  16  Line:  1  Band:  1
 Sample:  17  Line:  1  Band:  1
@@ -31,7 +30,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-20% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -43,7 +42,7 @@ Sample:  35  Line:  1  Band:  1
 Sample:  36  Line:  1  Band:  1
 Sample:  37  Line:  1  Band:  1
 Sample:  38  Line:  1  Band:  1
-30% Processed
Sample:  39  Line:  1  Band:  1
+Sample:  39  Line:  1  Band:  1
 Sample:  40  Line:  1  Band:  1
 Sample:  41  Line:  1  Band:  1
 Sample:  42  Line:  1  Band:  1
@@ -56,7 +55,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-40% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -68,7 +67,7 @@ Sample:  60  Line:  1  Band:  1
 Sample:  61  Line:  1  Band:  1
 Sample:  62  Line:  1  Band:  1
 Sample:  63  Line:  1  Band:  1
-50% Processed
Sample:  64  Line:  1  Band:  1
+Sample:  64  Line:  1  Band:  1
 Sample:  65  Line:  1  Band:  1
 Sample:  66  Line:  1  Band:  1
 Sample:  67  Line:  1  Band:  1
@@ -81,7 +80,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-60% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -94,7 +93,7 @@ Sample:  86  Line:  1  Band:  1
 Sample:  87  Line:  1  Band:  1
 Sample:  88  Line:  1  Band:  1
 Sample:  89  Line:  1  Band:  1
-70% Processed
Sample:  90  Line:  1  Band:  1
+Sample:  90  Line:  1  Band:  1
 Sample:  91  Line:  1  Band:  1
 Sample:  92  Line:  1  Band:  1
 Sample:  93  Line:  1  Band:  1
@@ -106,7 +105,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-80% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -119,7 +118,7 @@ Sample:  111  Line:  1  Band:  1
 Sample:  112  Line:  1  Band:  1
 Sample:  113  Line:  1  Band:  1
 Sample:  114  Line:  1  Band:  1
-90% Processed
Sample:  115  Line:  1  Band:  1
+Sample:  115  Line:  1  Band:  1
 Sample:  116  Line:  1  Band:  1
 Sample:  117  Line:  1  Band:  1
 Sample:  118  Line:  1  Band:  1
@@ -131,9 +130,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-100% Processed
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  252
 Buffer Lines:    126
 Buffer Bands:    2
@@ -151,7 +148,7 @@ Sample:  10  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
 Sample:  12  Line:  1  Band:  1
 Sample:  13  Line:  1  Band:  1
-10% Processed
Sample:  14  Line:  1  Band:  1
+Sample:  14  Line:  1  Band:  1
 Sample:  15  Line:  1  Band:  1
 Sample:  16  Line:  1  Band:  1
 Sample:  17  Line:  1  Band:  1
@@ -164,7 +161,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-20% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -176,7 +173,7 @@ Sample:  35  Line:  1  Band:  1
 Sample:  36  Line:  1  Band:  1
 Sample:  37  Line:  1  Band:  1
 Sample:  38  Line:  1  Band:  1
-30% Processed
Sample:  39  Line:  1  Band:  1
+Sample:  39  Line:  1  Band:  1
 Sample:  40  Line:  1  Band:  1
 Sample:  41  Line:  1  Band:  1
 Sample:  42  Line:  1  Band:  1
@@ -189,7 +186,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-40% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -201,7 +198,7 @@ Sample:  60  Line:  1  Band:  1
 Sample:  61  Line:  1  Band:  1
 Sample:  62  Line:  1  Band:  1
 Sample:  63  Line:  1  Band:  1
-50% Processed
Sample:  64  Line:  1  Band:  1
+Sample:  64  Line:  1  Band:  1
 Sample:  65  Line:  1  Band:  1
 Sample:  66  Line:  1  Band:  1
 Sample:  67  Line:  1  Band:  1
@@ -214,7 +211,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-60% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -227,7 +224,7 @@ Sample:  86  Line:  1  Band:  1
 Sample:  87  Line:  1  Band:  1
 Sample:  88  Line:  1  Band:  1
 Sample:  89  Line:  1  Band:  1
-70% Processed
Sample:  90  Line:  1  Band:  1
+Sample:  90  Line:  1  Band:  1
 Sample:  91  Line:  1  Band:  1
 Sample:  92  Line:  1  Band:  1
 Sample:  93  Line:  1  Band:  1
@@ -239,7 +236,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-80% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -252,7 +249,7 @@ Sample:  111  Line:  1  Band:  1
 Sample:  112  Line:  1  Band:  1
 Sample:  113  Line:  1  Band:  1
 Sample:  114  Line:  1  Band:  1
-90% Processed
Sample:  115  Line:  1  Band:  1
+Sample:  115  Line:  1  Band:  1
 Sample:  116  Line:  1  Band:  1
 Sample:  117  Line:  1  Band:  1
 Sample:  118  Line:  1  Band:  1
@@ -264,9 +261,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  252
 Buffer Lines:    126
@@ -285,7 +280,7 @@ Sample:  10  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
 Sample:  12  Line:  1  Band:  1
 Sample:  13  Line:  1  Band:  1
-10% Processed
Sample:  14  Line:  1  Band:  1
+Sample:  14  Line:  1  Band:  1
 Sample:  15  Line:  1  Band:  1
 Sample:  16  Line:  1  Band:  1
 Sample:  17  Line:  1  Band:  1
@@ -298,7 +293,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-20% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -310,7 +305,7 @@ Sample:  35  Line:  1  Band:  1
 Sample:  36  Line:  1  Band:  1
 Sample:  37  Line:  1  Band:  1
 Sample:  38  Line:  1  Band:  1
-30% Processed
Sample:  39  Line:  1  Band:  1
+Sample:  39  Line:  1  Band:  1
 Sample:  40  Line:  1  Band:  1
 Sample:  41  Line:  1  Band:  1
 Sample:  42  Line:  1  Band:  1
@@ -323,7 +318,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-40% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -335,7 +330,7 @@ Sample:  60  Line:  1  Band:  1
 Sample:  61  Line:  1  Band:  1
 Sample:  62  Line:  1  Band:  1
 Sample:  63  Line:  1  Band:  1
-50% Processed
Sample:  64  Line:  1  Band:  1
+Sample:  64  Line:  1  Band:  1
 Sample:  65  Line:  1  Band:  1
 Sample:  66  Line:  1  Band:  1
 Sample:  67  Line:  1  Band:  1
@@ -348,7 +343,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-60% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -361,7 +356,7 @@ Sample:  86  Line:  1  Band:  1
 Sample:  87  Line:  1  Band:  1
 Sample:  88  Line:  1  Band:  1
 Sample:  89  Line:  1  Band:  1
-70% Processed
Sample:  90  Line:  1  Band:  1
+Sample:  90  Line:  1  Band:  1
 Sample:  91  Line:  1  Band:  1
 Sample:  92  Line:  1  Band:  1
 Sample:  93  Line:  1  Band:  1
@@ -373,7 +368,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-80% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -386,7 +381,7 @@ Sample:  111  Line:  1  Band:  1
 Sample:  112  Line:  1  Band:  1
 Sample:  113  Line:  1  Band:  1
 Sample:  114  Line:  1  Band:  1
-90% Processed
Sample:  115  Line:  1  Band:  1
+Sample:  115  Line:  1  Band:  1
 Sample:  116  Line:  1  Band:  1
 Sample:  117  Line:  1  Band:  1
 Sample:  118  Line:  1  Band:  1
@@ -398,9 +393,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-100% Processed
-unittest: Working
-0% Processed
Testing two input and output cubes ... 
+Testing two input and output cubes ... 
 Number of input cubes:   2
 Number of output cubes:  2
 
@@ -417,7 +410,7 @@ Sample:  10:10  Line:  1:1  Band:  1:1
 Sample:  11:11  Line:  1:1  Band:  1:1
 Sample:  12:12  Line:  1:1  Band:  1:1
 Sample:  13:13  Line:  1:1  Band:  1:1
-10% Processed
Sample:  14:14  Line:  1:1  Band:  1:1
+Sample:  14:14  Line:  1:1  Band:  1:1
 Sample:  15:15  Line:  1:1  Band:  1:1
 Sample:  16:16  Line:  1:1  Band:  1:1
 Sample:  17:17  Line:  1:1  Band:  1:1
@@ -430,7 +423,7 @@ Sample:  23:23  Line:  1:1  Band:  1:1
 Sample:  24:24  Line:  1:1  Band:  1:1
 Sample:  25:25  Line:  1:1  Band:  1:1
 Sample:  26:26  Line:  1:1  Band:  1:1
-20% Processed
Sample:  27:27  Line:  1:1  Band:  1:1
+Sample:  27:27  Line:  1:1  Band:  1:1
 Sample:  28:28  Line:  1:1  Band:  1:1
 Sample:  29:29  Line:  1:1  Band:  1:1
 Sample:  30:30  Line:  1:1  Band:  1:1
@@ -442,7 +435,7 @@ Sample:  35:35  Line:  1:1  Band:  1:1
 Sample:  36:36  Line:  1:1  Band:  1:1
 Sample:  37:37  Line:  1:1  Band:  1:1
 Sample:  38:38  Line:  1:1  Band:  1:1
-30% Processed
Sample:  39:39  Line:  1:1  Band:  1:1
+Sample:  39:39  Line:  1:1  Band:  1:1
 Sample:  40:40  Line:  1:1  Band:  1:1
 Sample:  41:41  Line:  1:1  Band:  1:1
 Sample:  42:42  Line:  1:1  Band:  1:1
@@ -455,7 +448,7 @@ Sample:  48:48  Line:  1:1  Band:  1:1
 Sample:  49:49  Line:  1:1  Band:  1:1
 Sample:  50:50  Line:  1:1  Band:  1:1
 Sample:  51:51  Line:  1:1  Band:  1:1
-40% Processed
Sample:  52:52  Line:  1:1  Band:  1:1
+Sample:  52:52  Line:  1:1  Band:  1:1
 Sample:  53:53  Line:  1:1  Band:  1:1
 Sample:  54:54  Line:  1:1  Band:  1:1
 Sample:  55:55  Line:  1:1  Band:  1:1
@@ -467,7 +460,7 @@ Sample:  60:60  Line:  1:1  Band:  1:1
 Sample:  61:61  Line:  1:1  Band:  1:1
 Sample:  62:62  Line:  1:1  Band:  1:1
 Sample:  63:63  Line:  1:1  Band:  1:1
-50% Processed
Sample:  64:64  Line:  1:1  Band:  1:1
+Sample:  64:64  Line:  1:1  Band:  1:1
 Sample:  65:65  Line:  1:1  Band:  1:1
 Sample:  66:66  Line:  1:1  Band:  1:1
 Sample:  67:67  Line:  1:1  Band:  1:1
@@ -480,7 +473,7 @@ Sample:  73:73  Line:  1:1  Band:  1:1
 Sample:  74:74  Line:  1:1  Band:  1:1
 Sample:  75:75  Line:  1:1  Band:  1:1
 Sample:  76:76  Line:  1:1  Band:  1:1
-60% Processed
Sample:  77:77  Line:  1:1  Band:  1:1
+Sample:  77:77  Line:  1:1  Band:  1:1
 Sample:  78:78  Line:  1:1  Band:  1:1
 Sample:  79:79  Line:  1:1  Band:  1:1
 Sample:  80:80  Line:  1:1  Band:  1:1
@@ -493,7 +486,7 @@ Sample:  86:86  Line:  1:1  Band:  1:1
 Sample:  87:87  Line:  1:1  Band:  1:1
 Sample:  88:88  Line:  1:1  Band:  1:1
 Sample:  89:89  Line:  1:1  Band:  1:1
-70% Processed
Sample:  90:90  Line:  1:1  Band:  1:1
+Sample:  90:90  Line:  1:1  Band:  1:1
 Sample:  91:91  Line:  1:1  Band:  1:1
 Sample:  92:92  Line:  1:1  Band:  1:1
 Sample:  93:93  Line:  1:1  Band:  1:1
@@ -505,7 +498,7 @@ Sample:  98:98  Line:  1:1  Band:  1:1
 Sample:  99:99  Line:  1:1  Band:  1:1
 Sample:  100:100  Line:  1:1  Band:  1:1
 Sample:  101:101  Line:  1:1  Band:  1:1
-80% Processed
Sample:  102:102  Line:  1:1  Band:  1:1
+Sample:  102:102  Line:  1:1  Band:  1:1
 Sample:  103:103  Line:  1:1  Band:  1:1
 Sample:  104:104  Line:  1:1  Band:  1:1
 Sample:  105:105  Line:  1:1  Band:  1:1
@@ -518,7 +511,7 @@ Sample:  111:111  Line:  1:1  Band:  1:1
 Sample:  112:112  Line:  1:1  Band:  1:1
 Sample:  113:113  Line:  1:1  Band:  1:1
 Sample:  114:114  Line:  1:1  Band:  1:1
-90% Processed
Sample:  115:115  Line:  1:1  Band:  1:1
+Sample:  115:115  Line:  1:1  Band:  1:1
 Sample:  116:116  Line:  1:1  Band:  1:1
 Sample:  117:117  Line:  1:1  Band:  1:1
 Sample:  118:118  Line:  1:1  Band:  1:1
@@ -530,9 +523,7 @@ Sample:  123:123  Line:  1:1  Band:  1:1
 Sample:  124:124  Line:  1:1  Band:  1:1
 Sample:  125:125  Line:  1:1  Band:  1:1
 Sample:  126:126  Line:  1:1  Band:  1:1
-100% Processed
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  2
 Buffer Lines:    1
 Buffer Bands:    2
@@ -2125,7 +2116,7 @@ Sample:  73  Line:  13  Band:  1
 Sample:  74  Line:  13  Band:  1
 Sample:  75  Line:  13  Band:  1
 Sample:  76  Line:  13  Band:  1
-10% Processed
Sample:  77  Line:  13  Band:  1
+Sample:  77  Line:  13  Band:  1
 Sample:  78  Line:  13  Band:  1
 Sample:  79  Line:  13  Band:  1
 Sample:  80  Line:  13  Band:  1
@@ -3713,7 +3704,7 @@ Sample:  23  Line:  26  Band:  1
 Sample:  24  Line:  26  Band:  1
 Sample:  25  Line:  26  Band:  1
 Sample:  26  Line:  26  Band:  1
-20% Processed
Sample:  27  Line:  26  Band:  1
+Sample:  27  Line:  26  Band:  1
 Sample:  28  Line:  26  Band:  1
 Sample:  29  Line:  26  Band:  1
 Sample:  30  Line:  26  Band:  1
@@ -5300,7 +5291,7 @@ Sample:  98  Line:  38  Band:  1
 Sample:  99  Line:  38  Band:  1
 Sample:  100  Line:  38  Band:  1
 Sample:  101  Line:  38  Band:  1
-30% Processed
Sample:  102  Line:  38  Band:  1
+Sample:  102  Line:  38  Band:  1
 Sample:  103  Line:  38  Band:  1
 Sample:  104  Line:  38  Band:  1
 Sample:  105  Line:  38  Band:  1
@@ -6888,7 +6879,7 @@ Sample:  48  Line:  51  Band:  1
 Sample:  49  Line:  51  Band:  1
 Sample:  50  Line:  51  Band:  1
 Sample:  51  Line:  51  Band:  1
-40% Processed
Sample:  52  Line:  51  Band:  1
+Sample:  52  Line:  51  Band:  1
 Sample:  53  Line:  51  Band:  1
 Sample:  54  Line:  51  Band:  1
 Sample:  55  Line:  51  Band:  1
@@ -8475,7 +8466,7 @@ Sample:  123  Line:  63  Band:  1
 Sample:  124  Line:  63  Band:  1
 Sample:  125  Line:  63  Band:  1
 Sample:  126  Line:  63  Band:  1
-50% Processed
Sample:  1  Line:  64  Band:  1
+Sample:  1  Line:  64  Band:  1
 Sample:  2  Line:  64  Band:  1
 Sample:  3  Line:  64  Band:  1
 Sample:  4  Line:  64  Band:  1
@@ -10063,7 +10054,7 @@ Sample:  73  Line:  76  Band:  1
 Sample:  74  Line:  76  Band:  1
 Sample:  75  Line:  76  Band:  1
 Sample:  76  Line:  76  Band:  1
-60% Processed
Sample:  77  Line:  76  Band:  1
+Sample:  77  Line:  76  Band:  1
 Sample:  78  Line:  76  Band:  1
 Sample:  79  Line:  76  Band:  1
 Sample:  80  Line:  76  Band:  1
@@ -11651,7 +11642,7 @@ Sample:  23  Line:  89  Band:  1
 Sample:  24  Line:  89  Band:  1
 Sample:  25  Line:  89  Band:  1
 Sample:  26  Line:  89  Band:  1
-70% Processed
Sample:  27  Line:  89  Band:  1
+Sample:  27  Line:  89  Band:  1
 Sample:  28  Line:  89  Band:  1
 Sample:  29  Line:  89  Band:  1
 Sample:  30  Line:  89  Band:  1
@@ -13238,7 +13229,7 @@ Sample:  98  Line:  101  Band:  1
 Sample:  99  Line:  101  Band:  1
 Sample:  100  Line:  101  Band:  1
 Sample:  101  Line:  101  Band:  1
-80% Processed
Sample:  102  Line:  101  Band:  1
+Sample:  102  Line:  101  Band:  1
 Sample:  103  Line:  101  Band:  1
 Sample:  104  Line:  101  Band:  1
 Sample:  105  Line:  101  Band:  1
@@ -14826,7 +14817,7 @@ Sample:  48  Line:  114  Band:  1
 Sample:  49  Line:  114  Band:  1
 Sample:  50  Line:  114  Band:  1
 Sample:  51  Line:  114  Band:  1
-90% Processed
Sample:  52  Line:  114  Band:  1
+Sample:  52  Line:  114  Band:  1
 Sample:  53  Line:  114  Band:  1
 Sample:  54  Line:  114  Band:  1
 Sample:  55  Line:  114  Band:  1
@@ -16413,9 +16404,7 @@ Sample:  123  Line:  126  Band:  1
 Sample:  124  Line:  126  Band:  1
 Sample:  125  Line:  126  Band:  1
 Sample:  126  Line:  126  Band:  1
-100% Processed
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  252
 Buffer Lines:    1
 Buffer Bands:    2
@@ -16433,7 +16422,7 @@ Sample:  1  Line:  10  Band:  1
 Sample:  1  Line:  11  Band:  1
 Sample:  1  Line:  12  Band:  1
 Sample:  1  Line:  13  Band:  1
-10% Processed
Sample:  1  Line:  14  Band:  1
+Sample:  1  Line:  14  Band:  1
 Sample:  1  Line:  15  Band:  1
 Sample:  1  Line:  16  Band:  1
 Sample:  1  Line:  17  Band:  1
@@ -16446,7 +16435,7 @@ Sample:  1  Line:  23  Band:  1
 Sample:  1  Line:  24  Band:  1
 Sample:  1  Line:  25  Band:  1
 Sample:  1  Line:  26  Band:  1
-20% Processed
Sample:  1  Line:  27  Band:  1
+Sample:  1  Line:  27  Band:  1
 Sample:  1  Line:  28  Band:  1
 Sample:  1  Line:  29  Band:  1
 Sample:  1  Line:  30  Band:  1
@@ -16458,7 +16447,7 @@ Sample:  1  Line:  35  Band:  1
 Sample:  1  Line:  36  Band:  1
 Sample:  1  Line:  37  Band:  1
 Sample:  1  Line:  38  Band:  1
-30% Processed
Sample:  1  Line:  39  Band:  1
+Sample:  1  Line:  39  Band:  1
 Sample:  1  Line:  40  Band:  1
 Sample:  1  Line:  41  Band:  1
 Sample:  1  Line:  42  Band:  1
@@ -16471,7 +16460,7 @@ Sample:  1  Line:  48  Band:  1
 Sample:  1  Line:  49  Band:  1
 Sample:  1  Line:  50  Band:  1
 Sample:  1  Line:  51  Band:  1
-40% Processed
Sample:  1  Line:  52  Band:  1
+Sample:  1  Line:  52  Band:  1
 Sample:  1  Line:  53  Band:  1
 Sample:  1  Line:  54  Band:  1
 Sample:  1  Line:  55  Band:  1
@@ -16483,7 +16472,7 @@ Sample:  1  Line:  60  Band:  1
 Sample:  1  Line:  61  Band:  1
 Sample:  1  Line:  62  Band:  1
 Sample:  1  Line:  63  Band:  1
-50% Processed
Sample:  1  Line:  64  Band:  1
+Sample:  1  Line:  64  Band:  1
 Sample:  1  Line:  65  Band:  1
 Sample:  1  Line:  66  Band:  1
 Sample:  1  Line:  67  Band:  1
@@ -16496,7 +16485,7 @@ Sample:  1  Line:  73  Band:  1
 Sample:  1  Line:  74  Band:  1
 Sample:  1  Line:  75  Band:  1
 Sample:  1  Line:  76  Band:  1
-60% Processed
Sample:  1  Line:  77  Band:  1
+Sample:  1  Line:  77  Band:  1
 Sample:  1  Line:  78  Band:  1
 Sample:  1  Line:  79  Band:  1
 Sample:  1  Line:  80  Band:  1
@@ -16509,7 +16498,7 @@ Sample:  1  Line:  86  Band:  1
 Sample:  1  Line:  87  Band:  1
 Sample:  1  Line:  88  Band:  1
 Sample:  1  Line:  89  Band:  1
-70% Processed
Sample:  1  Line:  90  Band:  1
+Sample:  1  Line:  90  Band:  1
 Sample:  1  Line:  91  Band:  1
 Sample:  1  Line:  92  Band:  1
 Sample:  1  Line:  93  Band:  1
@@ -16521,7 +16510,7 @@ Sample:  1  Line:  98  Band:  1
 Sample:  1  Line:  99  Band:  1
 Sample:  1  Line:  100  Band:  1
 Sample:  1  Line:  101  Band:  1
-80% Processed
Sample:  1  Line:  102  Band:  1
+Sample:  1  Line:  102  Band:  1
 Sample:  1  Line:  103  Band:  1
 Sample:  1  Line:  104  Band:  1
 Sample:  1  Line:  105  Band:  1
@@ -16534,7 +16523,7 @@ Sample:  1  Line:  111  Band:  1
 Sample:  1  Line:  112  Band:  1
 Sample:  1  Line:  113  Band:  1
 Sample:  1  Line:  114  Band:  1
-90% Processed
Sample:  1  Line:  115  Band:  1
+Sample:  1  Line:  115  Band:  1
 Sample:  1  Line:  116  Band:  1
 Sample:  1  Line:  117  Band:  1
 Sample:  1  Line:  118  Band:  1
@@ -16546,9 +16535,7 @@ Sample:  1  Line:  123  Band:  1
 Sample:  1  Line:  124  Band:  1
 Sample:  1  Line:  125  Band:  1
 Sample:  1  Line:  126  Band:  1
-100% Processed
-unittest: Working
-0% Processed
Testing one input cube ... 
+Testing one input cube ... 
 Buffer Samples:  252
 Buffer Lines:    126
 Buffer Bands:    2
@@ -16566,7 +16553,7 @@ Sample:  10  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
 Sample:  12  Line:  1  Band:  1
 Sample:  13  Line:  1  Band:  1
-10% Processed
Sample:  14  Line:  1  Band:  1
+Sample:  14  Line:  1  Band:  1
 Sample:  15  Line:  1  Band:  1
 Sample:  16  Line:  1  Band:  1
 Sample:  17  Line:  1  Band:  1
@@ -16579,7 +16566,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-20% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -16591,7 +16578,7 @@ Sample:  35  Line:  1  Band:  1
 Sample:  36  Line:  1  Band:  1
 Sample:  37  Line:  1  Band:  1
 Sample:  38  Line:  1  Band:  1
-30% Processed
Sample:  39  Line:  1  Band:  1
+Sample:  39  Line:  1  Band:  1
 Sample:  40  Line:  1  Band:  1
 Sample:  41  Line:  1  Band:  1
 Sample:  42  Line:  1  Band:  1
@@ -16604,7 +16591,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-40% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -16616,7 +16603,7 @@ Sample:  60  Line:  1  Band:  1
 Sample:  61  Line:  1  Band:  1
 Sample:  62  Line:  1  Band:  1
 Sample:  63  Line:  1  Band:  1
-50% Processed
Sample:  64  Line:  1  Band:  1
+Sample:  64  Line:  1  Band:  1
 Sample:  65  Line:  1  Band:  1
 Sample:  66  Line:  1  Band:  1
 Sample:  67  Line:  1  Band:  1
@@ -16629,7 +16616,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-60% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -16642,7 +16629,7 @@ Sample:  86  Line:  1  Band:  1
 Sample:  87  Line:  1  Band:  1
 Sample:  88  Line:  1  Band:  1
 Sample:  89  Line:  1  Band:  1
-70% Processed
Sample:  90  Line:  1  Band:  1
+Sample:  90  Line:  1  Band:  1
 Sample:  91  Line:  1  Band:  1
 Sample:  92  Line:  1  Band:  1
 Sample:  93  Line:  1  Band:  1
@@ -16654,7 +16641,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-80% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -16667,7 +16654,7 @@ Sample:  111  Line:  1  Band:  1
 Sample:  112  Line:  1  Band:  1
 Sample:  113  Line:  1  Band:  1
 Sample:  114  Line:  1  Band:  1
-90% Processed
Sample:  115  Line:  1  Band:  1
+Sample:  115  Line:  1  Band:  1
 Sample:  116  Line:  1  Band:  1
 Sample:  117  Line:  1  Band:  1
 Sample:  118  Line:  1  Band:  1
@@ -16679,9 +16666,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  2
 Buffer Lines:    1
@@ -18275,7 +18260,7 @@ Sample:  73  Line:  13  Band:  1
 Sample:  74  Line:  13  Band:  1
 Sample:  75  Line:  13  Band:  1
 Sample:  76  Line:  13  Band:  1
-10% Processed
Sample:  77  Line:  13  Band:  1
+Sample:  77  Line:  13  Band:  1
 Sample:  78  Line:  13  Band:  1
 Sample:  79  Line:  13  Band:  1
 Sample:  80  Line:  13  Band:  1
@@ -19863,7 +19848,7 @@ Sample:  23  Line:  26  Band:  1
 Sample:  24  Line:  26  Band:  1
 Sample:  25  Line:  26  Band:  1
 Sample:  26  Line:  26  Band:  1
-20% Processed
Sample:  27  Line:  26  Band:  1
+Sample:  27  Line:  26  Band:  1
 Sample:  28  Line:  26  Band:  1
 Sample:  29  Line:  26  Band:  1
 Sample:  30  Line:  26  Band:  1
@@ -21450,7 +21435,7 @@ Sample:  98  Line:  38  Band:  1
 Sample:  99  Line:  38  Band:  1
 Sample:  100  Line:  38  Band:  1
 Sample:  101  Line:  38  Band:  1
-30% Processed
Sample:  102  Line:  38  Band:  1
+Sample:  102  Line:  38  Band:  1
 Sample:  103  Line:  38  Band:  1
 Sample:  104  Line:  38  Band:  1
 Sample:  105  Line:  38  Band:  1
@@ -23038,7 +23023,7 @@ Sample:  48  Line:  51  Band:  1
 Sample:  49  Line:  51  Band:  1
 Sample:  50  Line:  51  Band:  1
 Sample:  51  Line:  51  Band:  1
-40% Processed
Sample:  52  Line:  51  Band:  1
+Sample:  52  Line:  51  Band:  1
 Sample:  53  Line:  51  Band:  1
 Sample:  54  Line:  51  Band:  1
 Sample:  55  Line:  51  Band:  1
@@ -24625,7 +24610,7 @@ Sample:  123  Line:  63  Band:  1
 Sample:  124  Line:  63  Band:  1
 Sample:  125  Line:  63  Band:  1
 Sample:  126  Line:  63  Band:  1
-50% Processed
Sample:  1  Line:  64  Band:  1
+Sample:  1  Line:  64  Band:  1
 Sample:  2  Line:  64  Band:  1
 Sample:  3  Line:  64  Band:  1
 Sample:  4  Line:  64  Band:  1
@@ -26213,7 +26198,7 @@ Sample:  73  Line:  76  Band:  1
 Sample:  74  Line:  76  Band:  1
 Sample:  75  Line:  76  Band:  1
 Sample:  76  Line:  76  Band:  1
-60% Processed
Sample:  77  Line:  76  Band:  1
+Sample:  77  Line:  76  Band:  1
 Sample:  78  Line:  76  Band:  1
 Sample:  79  Line:  76  Band:  1
 Sample:  80  Line:  76  Band:  1
@@ -27801,7 +27786,7 @@ Sample:  23  Line:  89  Band:  1
 Sample:  24  Line:  89  Band:  1
 Sample:  25  Line:  89  Band:  1
 Sample:  26  Line:  89  Band:  1
-70% Processed
Sample:  27  Line:  89  Band:  1
+Sample:  27  Line:  89  Band:  1
 Sample:  28  Line:  89  Band:  1
 Sample:  29  Line:  89  Band:  1
 Sample:  30  Line:  89  Band:  1
@@ -29388,7 +29373,7 @@ Sample:  98  Line:  101  Band:  1
 Sample:  99  Line:  101  Band:  1
 Sample:  100  Line:  101  Band:  1
 Sample:  101  Line:  101  Band:  1
-80% Processed
Sample:  102  Line:  101  Band:  1
+Sample:  102  Line:  101  Band:  1
 Sample:  103  Line:  101  Band:  1
 Sample:  104  Line:  101  Band:  1
 Sample:  105  Line:  101  Band:  1
@@ -30976,7 +30961,7 @@ Sample:  48  Line:  114  Band:  1
 Sample:  49  Line:  114  Band:  1
 Sample:  50  Line:  114  Band:  1
 Sample:  51  Line:  114  Band:  1
-90% Processed
Sample:  52  Line:  114  Band:  1
+Sample:  52  Line:  114  Band:  1
 Sample:  53  Line:  114  Band:  1
 Sample:  54  Line:  114  Band:  1
 Sample:  55  Line:  114  Band:  1
@@ -32563,9 +32548,7 @@ Sample:  123  Line:  126  Band:  1
 Sample:  124  Line:  126  Band:  1
 Sample:  125  Line:  126  Band:  1
 Sample:  126  Line:  126  Band:  1
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  252
 Buffer Lines:    1
@@ -32584,7 +32567,7 @@ Sample:  1  Line:  10  Band:  1
 Sample:  1  Line:  11  Band:  1
 Sample:  1  Line:  12  Band:  1
 Sample:  1  Line:  13  Band:  1
-10% Processed
Sample:  1  Line:  14  Band:  1
+Sample:  1  Line:  14  Band:  1
 Sample:  1  Line:  15  Band:  1
 Sample:  1  Line:  16  Band:  1
 Sample:  1  Line:  17  Band:  1
@@ -32597,7 +32580,7 @@ Sample:  1  Line:  23  Band:  1
 Sample:  1  Line:  24  Band:  1
 Sample:  1  Line:  25  Band:  1
 Sample:  1  Line:  26  Band:  1
-20% Processed
Sample:  1  Line:  27  Band:  1
+Sample:  1  Line:  27  Band:  1
 Sample:  1  Line:  28  Band:  1
 Sample:  1  Line:  29  Band:  1
 Sample:  1  Line:  30  Band:  1
@@ -32609,7 +32592,7 @@ Sample:  1  Line:  35  Band:  1
 Sample:  1  Line:  36  Band:  1
 Sample:  1  Line:  37  Band:  1
 Sample:  1  Line:  38  Band:  1
-30% Processed
Sample:  1  Line:  39  Band:  1
+Sample:  1  Line:  39  Band:  1
 Sample:  1  Line:  40  Band:  1
 Sample:  1  Line:  41  Band:  1
 Sample:  1  Line:  42  Band:  1
@@ -32622,7 +32605,7 @@ Sample:  1  Line:  48  Band:  1
 Sample:  1  Line:  49  Band:  1
 Sample:  1  Line:  50  Band:  1
 Sample:  1  Line:  51  Band:  1
-40% Processed
Sample:  1  Line:  52  Band:  1
+Sample:  1  Line:  52  Band:  1
 Sample:  1  Line:  53  Band:  1
 Sample:  1  Line:  54  Band:  1
 Sample:  1  Line:  55  Band:  1
@@ -32634,7 +32617,7 @@ Sample:  1  Line:  60  Band:  1
 Sample:  1  Line:  61  Band:  1
 Sample:  1  Line:  62  Band:  1
 Sample:  1  Line:  63  Band:  1
-50% Processed
Sample:  1  Line:  64  Band:  1
+Sample:  1  Line:  64  Band:  1
 Sample:  1  Line:  65  Band:  1
 Sample:  1  Line:  66  Band:  1
 Sample:  1  Line:  67  Band:  1
@@ -32647,7 +32630,7 @@ Sample:  1  Line:  73  Band:  1
 Sample:  1  Line:  74  Band:  1
 Sample:  1  Line:  75  Band:  1
 Sample:  1  Line:  76  Band:  1
-60% Processed
Sample:  1  Line:  77  Band:  1
+Sample:  1  Line:  77  Band:  1
 Sample:  1  Line:  78  Band:  1
 Sample:  1  Line:  79  Band:  1
 Sample:  1  Line:  80  Band:  1
@@ -32660,7 +32643,7 @@ Sample:  1  Line:  86  Band:  1
 Sample:  1  Line:  87  Band:  1
 Sample:  1  Line:  88  Band:  1
 Sample:  1  Line:  89  Band:  1
-70% Processed
Sample:  1  Line:  90  Band:  1
+Sample:  1  Line:  90  Band:  1
 Sample:  1  Line:  91  Band:  1
 Sample:  1  Line:  92  Band:  1
 Sample:  1  Line:  93  Band:  1
@@ -32672,7 +32655,7 @@ Sample:  1  Line:  98  Band:  1
 Sample:  1  Line:  99  Band:  1
 Sample:  1  Line:  100  Band:  1
 Sample:  1  Line:  101  Band:  1
-80% Processed
Sample:  1  Line:  102  Band:  1
+Sample:  1  Line:  102  Band:  1
 Sample:  1  Line:  103  Band:  1
 Sample:  1  Line:  104  Band:  1
 Sample:  1  Line:  105  Band:  1
@@ -32685,7 +32668,7 @@ Sample:  1  Line:  111  Band:  1
 Sample:  1  Line:  112  Band:  1
 Sample:  1  Line:  113  Band:  1
 Sample:  1  Line:  114  Band:  1
-90% Processed
Sample:  1  Line:  115  Band:  1
+Sample:  1  Line:  115  Band:  1
 Sample:  1  Line:  116  Band:  1
 Sample:  1  Line:  117  Band:  1
 Sample:  1  Line:  118  Band:  1
@@ -32697,9 +32680,7 @@ Sample:  1  Line:  123  Band:  1
 Sample:  1  Line:  124  Band:  1
 Sample:  1  Line:  125  Band:  1
 Sample:  1  Line:  126  Band:  1
-100% Processed
-unittest: Working
-0% Processed
+
 Testing one input and output cube ... 
 Buffer Samples:  252
 Buffer Lines:    126
@@ -32718,7 +32699,7 @@ Sample:  10  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
 Sample:  12  Line:  1  Band:  1
 Sample:  13  Line:  1  Band:  1
-10% Processed
Sample:  14  Line:  1  Band:  1
+Sample:  14  Line:  1  Band:  1
 Sample:  15  Line:  1  Band:  1
 Sample:  16  Line:  1  Band:  1
 Sample:  17  Line:  1  Band:  1
@@ -32731,7 +32712,7 @@ Sample:  23  Line:  1  Band:  1
 Sample:  24  Line:  1  Band:  1
 Sample:  25  Line:  1  Band:  1
 Sample:  26  Line:  1  Band:  1
-20% Processed
Sample:  27  Line:  1  Band:  1
+Sample:  27  Line:  1  Band:  1
 Sample:  28  Line:  1  Band:  1
 Sample:  29  Line:  1  Band:  1
 Sample:  30  Line:  1  Band:  1
@@ -32743,7 +32724,7 @@ Sample:  35  Line:  1  Band:  1
 Sample:  36  Line:  1  Band:  1
 Sample:  37  Line:  1  Band:  1
 Sample:  38  Line:  1  Band:  1
-30% Processed
Sample:  39  Line:  1  Band:  1
+Sample:  39  Line:  1  Band:  1
 Sample:  40  Line:  1  Band:  1
 Sample:  41  Line:  1  Band:  1
 Sample:  42  Line:  1  Band:  1
@@ -32756,7 +32737,7 @@ Sample:  48  Line:  1  Band:  1
 Sample:  49  Line:  1  Band:  1
 Sample:  50  Line:  1  Band:  1
 Sample:  51  Line:  1  Band:  1
-40% Processed
Sample:  52  Line:  1  Band:  1
+Sample:  52  Line:  1  Band:  1
 Sample:  53  Line:  1  Band:  1
 Sample:  54  Line:  1  Band:  1
 Sample:  55  Line:  1  Band:  1
@@ -32768,7 +32749,7 @@ Sample:  60  Line:  1  Band:  1
 Sample:  61  Line:  1  Band:  1
 Sample:  62  Line:  1  Band:  1
 Sample:  63  Line:  1  Band:  1
-50% Processed
Sample:  64  Line:  1  Band:  1
+Sample:  64  Line:  1  Band:  1
 Sample:  65  Line:  1  Band:  1
 Sample:  66  Line:  1  Band:  1
 Sample:  67  Line:  1  Band:  1
@@ -32781,7 +32762,7 @@ Sample:  73  Line:  1  Band:  1
 Sample:  74  Line:  1  Band:  1
 Sample:  75  Line:  1  Band:  1
 Sample:  76  Line:  1  Band:  1
-60% Processed
Sample:  77  Line:  1  Band:  1
+Sample:  77  Line:  1  Band:  1
 Sample:  78  Line:  1  Band:  1
 Sample:  79  Line:  1  Band:  1
 Sample:  80  Line:  1  Band:  1
@@ -32794,7 +32775,7 @@ Sample:  86  Line:  1  Band:  1
 Sample:  87  Line:  1  Band:  1
 Sample:  88  Line:  1  Band:  1
 Sample:  89  Line:  1  Band:  1
-70% Processed
Sample:  90  Line:  1  Band:  1
+Sample:  90  Line:  1  Band:  1
 Sample:  91  Line:  1  Band:  1
 Sample:  92  Line:  1  Band:  1
 Sample:  93  Line:  1  Band:  1
@@ -32806,7 +32787,7 @@ Sample:  98  Line:  1  Band:  1
 Sample:  99  Line:  1  Band:  1
 Sample:  100  Line:  1  Band:  1
 Sample:  101  Line:  1  Band:  1
-80% Processed
Sample:  102  Line:  1  Band:  1
+Sample:  102  Line:  1  Band:  1
 Sample:  103  Line:  1  Band:  1
 Sample:  104  Line:  1  Band:  1
 Sample:  105  Line:  1  Band:  1
@@ -32819,7 +32800,7 @@ Sample:  111  Line:  1  Band:  1
 Sample:  112  Line:  1  Band:  1
 Sample:  113  Line:  1  Band:  1
 Sample:  114  Line:  1  Band:  1
-90% Processed
Sample:  115  Line:  1  Band:  1
+Sample:  115  Line:  1  Band:  1
 Sample:  116  Line:  1  Band:  1
 Sample:  117  Line:  1  Band:  1
 Sample:  118  Line:  1  Band:  1
@@ -32831,9 +32812,7 @@ Sample:  123  Line:  1  Band:  1
 Sample:  124  Line:  1  Band:  1
 Sample:  125  Line:  1  Band:  1
 Sample:  126  Line:  1  Band:  1
-100% Processed
-unittest: Working
-0% Processed
Sample:  1:1  Line:  1:1  Band:  1:1
+Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  2:2  Line:  1:1  Band:  1:1
 Sample:  3:3  Line:  1:1  Band:  1:1
 Sample:  4:4  Line:  1:1  Band:  1:1
@@ -34421,7 +34400,7 @@ Sample:  73:73  Line:  13:13  Band:  1:1
 Sample:  74:74  Line:  13:13  Band:  1:1
 Sample:  75:75  Line:  13:13  Band:  1:1
 Sample:  76:76  Line:  13:13  Band:  1:1
-10% Processed
Sample:  77:77  Line:  13:13  Band:  1:1
+Sample:  77:77  Line:  13:13  Band:  1:1
 Sample:  78:78  Line:  13:13  Band:  1:1
 Sample:  79:79  Line:  13:13  Band:  1:1
 Sample:  80:80  Line:  13:13  Band:  1:1
@@ -36009,7 +35988,7 @@ Sample:  23:23  Line:  26:26  Band:  1:1
 Sample:  24:24  Line:  26:26  Band:  1:1
 Sample:  25:25  Line:  26:26  Band:  1:1
 Sample:  26:26  Line:  26:26  Band:  1:1
-20% Processed
Sample:  27:27  Line:  26:26  Band:  1:1
+Sample:  27:27  Line:  26:26  Band:  1:1
 Sample:  28:28  Line:  26:26  Band:  1:1
 Sample:  29:29  Line:  26:26  Band:  1:1
 Sample:  30:30  Line:  26:26  Band:  1:1
@@ -37596,7 +37575,7 @@ Sample:  98:98  Line:  38:38  Band:  1:1
 Sample:  99:99  Line:  38:38  Band:  1:1
 Sample:  100:100  Line:  38:38  Band:  1:1
 Sample:  101:101  Line:  38:38  Band:  1:1
-30% Processed
Sample:  102:102  Line:  38:38  Band:  1:1
+Sample:  102:102  Line:  38:38  Band:  1:1
 Sample:  103:103  Line:  38:38  Band:  1:1
 Sample:  104:104  Line:  38:38  Band:  1:1
 Sample:  105:105  Line:  38:38  Band:  1:1
@@ -39184,7 +39163,7 @@ Sample:  48:48  Line:  51:51  Band:  1:1
 Sample:  49:49  Line:  51:51  Band:  1:1
 Sample:  50:50  Line:  51:51  Band:  1:1
 Sample:  51:51  Line:  51:51  Band:  1:1
-40% Processed
Sample:  52:52  Line:  51:51  Band:  1:1
+Sample:  52:52  Line:  51:51  Band:  1:1
 Sample:  53:53  Line:  51:51  Band:  1:1
 Sample:  54:54  Line:  51:51  Band:  1:1
 Sample:  55:55  Line:  51:51  Band:  1:1
@@ -40771,7 +40750,7 @@ Sample:  123:123  Line:  63:63  Band:  1:1
 Sample:  124:124  Line:  63:63  Band:  1:1
 Sample:  125:125  Line:  63:63  Band:  1:1
 Sample:  126:126  Line:  63:63  Band:  1:1
-50% Processed
Sample:  1:1  Line:  64:64  Band:  1:1
+Sample:  1:1  Line:  64:64  Band:  1:1
 Sample:  2:2  Line:  64:64  Band:  1:1
 Sample:  3:3  Line:  64:64  Band:  1:1
 Sample:  4:4  Line:  64:64  Band:  1:1
@@ -42359,7 +42338,7 @@ Sample:  73:73  Line:  76:76  Band:  1:1
 Sample:  74:74  Line:  76:76  Band:  1:1
 Sample:  75:75  Line:  76:76  Band:  1:1
 Sample:  76:76  Line:  76:76  Band:  1:1
-60% Processed
Sample:  77:77  Line:  76:76  Band:  1:1
+Sample:  77:77  Line:  76:76  Band:  1:1
 Sample:  78:78  Line:  76:76  Band:  1:1
 Sample:  79:79  Line:  76:76  Band:  1:1
 Sample:  80:80  Line:  76:76  Band:  1:1
@@ -43947,7 +43926,7 @@ Sample:  23:23  Line:  89:89  Band:  1:1
 Sample:  24:24  Line:  89:89  Band:  1:1
 Sample:  25:25  Line:  89:89  Band:  1:1
 Sample:  26:26  Line:  89:89  Band:  1:1
-70% Processed
Sample:  27:27  Line:  89:89  Band:  1:1
+Sample:  27:27  Line:  89:89  Band:  1:1
 Sample:  28:28  Line:  89:89  Band:  1:1
 Sample:  29:29  Line:  89:89  Band:  1:1
 Sample:  30:30  Line:  89:89  Band:  1:1
@@ -45534,7 +45513,7 @@ Sample:  98:98  Line:  101:101  Band:  1:1
 Sample:  99:99  Line:  101:101  Band:  1:1
 Sample:  100:100  Line:  101:101  Band:  1:1
 Sample:  101:101  Line:  101:101  Band:  1:1
-80% Processed
Sample:  102:102  Line:  101:101  Band:  1:1
+Sample:  102:102  Line:  101:101  Band:  1:1
 Sample:  103:103  Line:  101:101  Band:  1:1
 Sample:  104:104  Line:  101:101  Band:  1:1
 Sample:  105:105  Line:  101:101  Band:  1:1
@@ -47122,7 +47101,7 @@ Sample:  48:48  Line:  114:114  Band:  1:1
 Sample:  49:49  Line:  114:114  Band:  1:1
 Sample:  50:50  Line:  114:114  Band:  1:1
 Sample:  51:51  Line:  114:114  Band:  1:1
-90% Processed
Sample:  52:52  Line:  114:114  Band:  1:1
+Sample:  52:52  Line:  114:114  Band:  1:1
 Sample:  53:53  Line:  114:114  Band:  1:1
 Sample:  54:54  Line:  114:114  Band:  1:1
 Sample:  55:55  Line:  114:114  Band:  1:1
@@ -48709,9 +48688,7 @@ Sample:  123:123  Line:  126:126  Band:  1:1
 Sample:  124:124  Line:  126:126  Band:  1:1
 Sample:  125:125  Line:  126:126  Band:  1:1
 Sample:  126:126  Line:  126:126  Band:  1:1
-100% Processed
-unittest: Working
-0% Processed
Sample:  1:1  Line:  1:1  Band:  1:1
+Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  1:1  Line:  2:2  Band:  1:1
 Sample:  1:1  Line:  3:3  Band:  1:1
 Sample:  1:1  Line:  4:4  Band:  1:1
@@ -48724,7 +48701,7 @@ Sample:  1:1  Line:  10:10  Band:  1:1
 Sample:  1:1  Line:  11:11  Band:  1:1
 Sample:  1:1  Line:  12:12  Band:  1:1
 Sample:  1:1  Line:  13:13  Band:  1:1
-10% Processed
Sample:  1:1  Line:  14:14  Band:  1:1
+Sample:  1:1  Line:  14:14  Band:  1:1
 Sample:  1:1  Line:  15:15  Band:  1:1
 Sample:  1:1  Line:  16:16  Band:  1:1
 Sample:  1:1  Line:  17:17  Band:  1:1
@@ -48737,7 +48714,7 @@ Sample:  1:1  Line:  23:23  Band:  1:1
 Sample:  1:1  Line:  24:24  Band:  1:1
 Sample:  1:1  Line:  25:25  Band:  1:1
 Sample:  1:1  Line:  26:26  Band:  1:1
-20% Processed
Sample:  1:1  Line:  27:27  Band:  1:1
+Sample:  1:1  Line:  27:27  Band:  1:1
 Sample:  1:1  Line:  28:28  Band:  1:1
 Sample:  1:1  Line:  29:29  Band:  1:1
 Sample:  1:1  Line:  30:30  Band:  1:1
@@ -48749,7 +48726,7 @@ Sample:  1:1  Line:  35:35  Band:  1:1
 Sample:  1:1  Line:  36:36  Band:  1:1
 Sample:  1:1  Line:  37:37  Band:  1:1
 Sample:  1:1  Line:  38:38  Band:  1:1
-30% Processed
Sample:  1:1  Line:  39:39  Band:  1:1
+Sample:  1:1  Line:  39:39  Band:  1:1
 Sample:  1:1  Line:  40:40  Band:  1:1
 Sample:  1:1  Line:  41:41  Band:  1:1
 Sample:  1:1  Line:  42:42  Band:  1:1
@@ -48762,7 +48739,7 @@ Sample:  1:1  Line:  48:48  Band:  1:1
 Sample:  1:1  Line:  49:49  Band:  1:1
 Sample:  1:1  Line:  50:50  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
-40% Processed
Sample:  1:1  Line:  52:52  Band:  1:1
+Sample:  1:1  Line:  52:52  Band:  1:1
 Sample:  1:1  Line:  53:53  Band:  1:1
 Sample:  1:1  Line:  54:54  Band:  1:1
 Sample:  1:1  Line:  55:55  Band:  1:1
@@ -48774,7 +48751,7 @@ Sample:  1:1  Line:  60:60  Band:  1:1
 Sample:  1:1  Line:  61:61  Band:  1:1
 Sample:  1:1  Line:  62:62  Band:  1:1
 Sample:  1:1  Line:  63:63  Band:  1:1
-50% Processed
Sample:  1:1  Line:  64:64  Band:  1:1
+Sample:  1:1  Line:  64:64  Band:  1:1
 Sample:  1:1  Line:  65:65  Band:  1:1
 Sample:  1:1  Line:  66:66  Band:  1:1
 Sample:  1:1  Line:  67:67  Band:  1:1
@@ -48787,7 +48764,7 @@ Sample:  1:1  Line:  73:73  Band:  1:1
 Sample:  1:1  Line:  74:74  Band:  1:1
 Sample:  1:1  Line:  75:75  Band:  1:1
 Sample:  1:1  Line:  76:76  Band:  1:1
-60% Processed
Sample:  1:1  Line:  77:77  Band:  1:1
+Sample:  1:1  Line:  77:77  Band:  1:1
 Sample:  1:1  Line:  78:78  Band:  1:1
 Sample:  1:1  Line:  79:79  Band:  1:1
 Sample:  1:1  Line:  80:80  Band:  1:1
@@ -48800,7 +48777,7 @@ Sample:  1:1  Line:  86:86  Band:  1:1
 Sample:  1:1  Line:  87:87  Band:  1:1
 Sample:  1:1  Line:  88:88  Band:  1:1
 Sample:  1:1  Line:  89:89  Band:  1:1
-70% Processed
Sample:  1:1  Line:  90:90  Band:  1:1
+Sample:  1:1  Line:  90:90  Band:  1:1
 Sample:  1:1  Line:  91:91  Band:  1:1
 Sample:  1:1  Line:  92:92  Band:  1:1
 Sample:  1:1  Line:  93:93  Band:  1:1
@@ -48812,7 +48789,7 @@ Sample:  1:1  Line:  98:98  Band:  1:1
 Sample:  1:1  Line:  99:99  Band:  1:1
 Sample:  1:1  Line:  100:100  Band:  1:1
 Sample:  1:1  Line:  101:101  Band:  1:1
-80% Processed
Sample:  1:1  Line:  102:102  Band:  1:1
+Sample:  1:1  Line:  102:102  Band:  1:1
 Sample:  1:1  Line:  103:103  Band:  1:1
 Sample:  1:1  Line:  104:104  Band:  1:1
 Sample:  1:1  Line:  105:105  Band:  1:1
@@ -48825,7 +48802,7 @@ Sample:  1:1  Line:  111:111  Band:  1:1
 Sample:  1:1  Line:  112:112  Band:  1:1
 Sample:  1:1  Line:  113:113  Band:  1:1
 Sample:  1:1  Line:  114:114  Band:  1:1
-90% Processed
Sample:  1:1  Line:  115:115  Band:  1:1
+Sample:  1:1  Line:  115:115  Band:  1:1
 Sample:  1:1  Line:  116:116  Band:  1:1
 Sample:  1:1  Line:  117:117  Band:  1:1
 Sample:  1:1  Line:  118:118  Band:  1:1
@@ -48837,9 +48814,7 @@ Sample:  1:1  Line:  123:123  Band:  1:1
 Sample:  1:1  Line:  124:124  Band:  1:1
 Sample:  1:1  Line:  125:125  Band:  1:1
 Sample:  1:1  Line:  126:126  Band:  1:1
-100% Processed
-unittest: Working
-0% Processed
Sample:  1:1  Line:  1:1  Band:  1:1
+Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  2:2  Line:  1:1  Band:  1:1
 Sample:  3:3  Line:  1:1  Band:  1:1
 Sample:  4:4  Line:  1:1  Band:  1:1
@@ -48852,7 +48827,7 @@ Sample:  10:10  Line:  1:1  Band:  1:1
 Sample:  11:11  Line:  1:1  Band:  1:1
 Sample:  12:12  Line:  1:1  Band:  1:1
 Sample:  13:13  Line:  1:1  Band:  1:1
-10% Processed
Sample:  14:14  Line:  1:1  Band:  1:1
+Sample:  14:14  Line:  1:1  Band:  1:1
 Sample:  15:15  Line:  1:1  Band:  1:1
 Sample:  16:16  Line:  1:1  Band:  1:1
 Sample:  17:17  Line:  1:1  Band:  1:1
@@ -48865,7 +48840,7 @@ Sample:  23:23  Line:  1:1  Band:  1:1
 Sample:  24:24  Line:  1:1  Band:  1:1
 Sample:  25:25  Line:  1:1  Band:  1:1
 Sample:  26:26  Line:  1:1  Band:  1:1
-20% Processed
Sample:  27:27  Line:  1:1  Band:  1:1
+Sample:  27:27  Line:  1:1  Band:  1:1
 Sample:  28:28  Line:  1:1  Band:  1:1
 Sample:  29:29  Line:  1:1  Band:  1:1
 Sample:  30:30  Line:  1:1  Band:  1:1
@@ -48877,7 +48852,7 @@ Sample:  35:35  Line:  1:1  Band:  1:1
 Sample:  36:36  Line:  1:1  Band:  1:1
 Sample:  37:37  Line:  1:1  Band:  1:1
 Sample:  38:38  Line:  1:1  Band:  1:1
-30% Processed
Sample:  39:39  Line:  1:1  Band:  1:1
+Sample:  39:39  Line:  1:1  Band:  1:1
 Sample:  40:40  Line:  1:1  Band:  1:1
 Sample:  41:41  Line:  1:1  Band:  1:1
 Sample:  42:42  Line:  1:1  Band:  1:1
@@ -48890,7 +48865,7 @@ Sample:  48:48  Line:  1:1  Band:  1:1
 Sample:  49:49  Line:  1:1  Band:  1:1
 Sample:  50:50  Line:  1:1  Band:  1:1
 Sample:  51:51  Line:  1:1  Band:  1:1
-40% Processed
Sample:  52:52  Line:  1:1  Band:  1:1
+Sample:  52:52  Line:  1:1  Band:  1:1
 Sample:  53:53  Line:  1:1  Band:  1:1
 Sample:  54:54  Line:  1:1  Band:  1:1
 Sample:  55:55  Line:  1:1  Band:  1:1
@@ -48902,7 +48877,7 @@ Sample:  60:60  Line:  1:1  Band:  1:1
 Sample:  61:61  Line:  1:1  Band:  1:1
 Sample:  62:62  Line:  1:1  Band:  1:1
 Sample:  63:63  Line:  1:1  Band:  1:1
-50% Processed
Sample:  64:64  Line:  1:1  Band:  1:1
+Sample:  64:64  Line:  1:1  Band:  1:1
 Sample:  65:65  Line:  1:1  Band:  1:1
 Sample:  66:66  Line:  1:1  Band:  1:1
 Sample:  67:67  Line:  1:1  Band:  1:1
@@ -48915,7 +48890,7 @@ Sample:  73:73  Line:  1:1  Band:  1:1
 Sample:  74:74  Line:  1:1  Band:  1:1
 Sample:  75:75  Line:  1:1  Band:  1:1
 Sample:  76:76  Line:  1:1  Band:  1:1
-60% Processed
Sample:  77:77  Line:  1:1  Band:  1:1
+Sample:  77:77  Line:  1:1  Band:  1:1
 Sample:  78:78  Line:  1:1  Band:  1:1
 Sample:  79:79  Line:  1:1  Band:  1:1
 Sample:  80:80  Line:  1:1  Band:  1:1
@@ -48928,7 +48903,7 @@ Sample:  86:86  Line:  1:1  Band:  1:1
 Sample:  87:87  Line:  1:1  Band:  1:1
 Sample:  88:88  Line:  1:1  Band:  1:1
 Sample:  89:89  Line:  1:1  Band:  1:1
-70% Processed
Sample:  90:90  Line:  1:1  Band:  1:1
+Sample:  90:90  Line:  1:1  Band:  1:1
 Sample:  91:91  Line:  1:1  Band:  1:1
 Sample:  92:92  Line:  1:1  Band:  1:1
 Sample:  93:93  Line:  1:1  Band:  1:1
@@ -48940,7 +48915,7 @@ Sample:  98:98  Line:  1:1  Band:  1:1
 Sample:  99:99  Line:  1:1  Band:  1:1
 Sample:  100:100  Line:  1:1  Band:  1:1
 Sample:  101:101  Line:  1:1  Band:  1:1
-80% Processed
Sample:  102:102  Line:  1:1  Band:  1:1
+Sample:  102:102  Line:  1:1  Band:  1:1
 Sample:  103:103  Line:  1:1  Band:  1:1
 Sample:  104:104  Line:  1:1  Band:  1:1
 Sample:  105:105  Line:  1:1  Band:  1:1
@@ -48953,7 +48928,7 @@ Sample:  111:111  Line:  1:1  Band:  1:1
 Sample:  112:112  Line:  1:1  Band:  1:1
 Sample:  113:113  Line:  1:1  Band:  1:1
 Sample:  114:114  Line:  1:1  Band:  1:1
-90% Processed
Sample:  115:115  Line:  1:1  Band:  1:1
+Sample:  115:115  Line:  1:1  Band:  1:1
 Sample:  116:116  Line:  1:1  Band:  1:1
 Sample:  117:117  Line:  1:1  Band:  1:1
 Sample:  118:118  Line:  1:1  Band:  1:1
@@ -48965,4 +48940,3 @@ Sample:  123:123  Line:  1:1  Band:  1:1
 Sample:  124:124  Line:  1:1  Band:  1:1
 Sample:  125:125  Line:  1:1  Band:  1:1
 Sample:  126:126  Line:  1:1  Band:  1:1
-100% Processed
diff --git a/isis/src/base/objs/ProcessByTile/ProcessByTile.truth b/isis/src/base/objs/ProcessByTile/ProcessByTile.truth
index 6da4857bd9ead3a4d3d1bd095d08dfde3fc175cd..4f98b811c602374b36cef8b91187922dab4b155a 100644
--- a/isis/src/base/objs/ProcessByTile/ProcessByTile.truth
+++ b/isis/src/base/objs/ProcessByTile/ProcessByTile.truth
@@ -1,6 +1,5 @@
 **PROGRAMMER ERROR** Use the SetTileSize method to set the tile size.
-unittest: Working
-0% Processed
Testing inplace cube processing function. 
+Testing inplace cube processing function. 
 Sample:  1  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
 Sample:  21  Line:  1  Band:  1
@@ -35,7 +34,7 @@ Sample:  41  Line:  21  Band:  1
 Sample:  51  Line:  21  Band:  1
 Sample:  61  Line:  21  Band:  1
 Sample:  71  Line:  21  Band:  1
-10% Processed
Sample:  81  Line:  21  Band:  1
+Sample:  81  Line:  21  Band:  1
 Sample:  91  Line:  21  Band:  1
 Sample:  101  Line:  21  Band:  1
 Sample:  111  Line:  21  Band:  1
@@ -69,7 +68,7 @@ Sample:  121  Line:  41  Band:  1
 Sample:  1  Line:  51  Band:  1
 Sample:  11  Line:  51  Band:  1
 Sample:  21  Line:  51  Band:  1
-20% Processed
Sample:  31  Line:  51  Band:  1
+Sample:  31  Line:  51  Band:  1
 Sample:  41  Line:  51  Band:  1
 Sample:  51  Line:  51  Band:  1
 Sample:  61  Line:  51  Band:  1
@@ -103,7 +102,7 @@ Sample:  71  Line:  71  Band:  1
 Sample:  81  Line:  71  Band:  1
 Sample:  91  Line:  71  Band:  1
 Sample:  101  Line:  71  Band:  1
-30% Processed
Sample:  111  Line:  71  Band:  1
+Sample:  111  Line:  71  Band:  1
 Sample:  121  Line:  71  Band:  1
 Sample:  1  Line:  81  Band:  1
 Sample:  11  Line:  81  Band:  1
@@ -137,7 +136,7 @@ Sample:  21  Line:  101  Band:  1
 Sample:  31  Line:  101  Band:  1
 Sample:  41  Line:  101  Band:  1
 Sample:  51  Line:  101  Band:  1
-40% Processed
Sample:  61  Line:  101  Band:  1
+Sample:  61  Line:  101  Band:  1
 Sample:  71  Line:  101  Band:  1
 Sample:  81  Line:  101  Band:  1
 Sample:  91  Line:  101  Band:  1
@@ -170,7 +169,7 @@ Sample:  91  Line:  121  Band:  1
 Sample:  101  Line:  121  Band:  1
 Sample:  111  Line:  121  Band:  1
 Sample:  121  Line:  121  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  11  Line:  1  Band:  2
 Sample:  21  Line:  1  Band:  2
 Sample:  31  Line:  1  Band:  2
@@ -204,7 +203,7 @@ Sample:  41  Line:  21  Band:  2
 Sample:  51  Line:  21  Band:  2
 Sample:  61  Line:  21  Band:  2
 Sample:  71  Line:  21  Band:  2
-60% Processed
Sample:  81  Line:  21  Band:  2
+Sample:  81  Line:  21  Band:  2
 Sample:  91  Line:  21  Band:  2
 Sample:  101  Line:  21  Band:  2
 Sample:  111  Line:  21  Band:  2
@@ -238,7 +237,7 @@ Sample:  121  Line:  41  Band:  2
 Sample:  1  Line:  51  Band:  2
 Sample:  11  Line:  51  Band:  2
 Sample:  21  Line:  51  Band:  2
-70% Processed
Sample:  31  Line:  51  Band:  2
+Sample:  31  Line:  51  Band:  2
 Sample:  41  Line:  51  Band:  2
 Sample:  51  Line:  51  Band:  2
 Sample:  61  Line:  51  Band:  2
@@ -272,7 +271,7 @@ Sample:  71  Line:  71  Band:  2
 Sample:  81  Line:  71  Band:  2
 Sample:  91  Line:  71  Band:  2
 Sample:  101  Line:  71  Band:  2
-80% Processed
Sample:  111  Line:  71  Band:  2
+Sample:  111  Line:  71  Band:  2
 Sample:  121  Line:  71  Band:  2
 Sample:  1  Line:  81  Band:  2
 Sample:  11  Line:  81  Band:  2
@@ -306,7 +305,7 @@ Sample:  21  Line:  101  Band:  2
 Sample:  31  Line:  101  Band:  2
 Sample:  41  Line:  101  Band:  2
 Sample:  51  Line:  101  Band:  2
-90% Processed
Sample:  61  Line:  101  Band:  2
+Sample:  61  Line:  101  Band:  2
 Sample:  71  Line:  101  Band:  2
 Sample:  81  Line:  101  Band:  2
 Sample:  91  Line:  101  Band:  2
@@ -339,9 +338,7 @@ Sample:  91  Line:  121  Band:  2
 Sample:  101  Line:  121  Band:  2
 Sample:  111  Line:  121  Band:  2
 Sample:  121  Line:  121  Band:  2
-100% Processed
-unittest: Working
-0% Processed
Input Functor:  
+Input Functor:  
 Testing cube processing in place. 
 Sample:  1  Line:  1  Band:  1
 Sample:  11  Line:  1  Band:  1
@@ -377,7 +374,7 @@ Sample:  41  Line:  21  Band:  1
 Sample:  51  Line:  21  Band:  1
 Sample:  61  Line:  21  Band:  1
 Sample:  71  Line:  21  Band:  1
-10% Processed
Sample:  81  Line:  21  Band:  1
+Sample:  81  Line:  21  Band:  1
 Sample:  91  Line:  21  Band:  1
 Sample:  101  Line:  21  Band:  1
 Sample:  111  Line:  21  Band:  1
@@ -411,7 +408,7 @@ Sample:  121  Line:  41  Band:  1
 Sample:  1  Line:  51  Band:  1
 Sample:  11  Line:  51  Band:  1
 Sample:  21  Line:  51  Band:  1
-20% Processed
Sample:  31  Line:  51  Band:  1
+Sample:  31  Line:  51  Band:  1
 Sample:  41  Line:  51  Band:  1
 Sample:  51  Line:  51  Band:  1
 Sample:  61  Line:  51  Band:  1
@@ -445,7 +442,7 @@ Sample:  71  Line:  71  Band:  1
 Sample:  81  Line:  71  Band:  1
 Sample:  91  Line:  71  Band:  1
 Sample:  101  Line:  71  Band:  1
-30% Processed
Sample:  111  Line:  71  Band:  1
+Sample:  111  Line:  71  Band:  1
 Sample:  121  Line:  71  Band:  1
 Sample:  1  Line:  81  Band:  1
 Sample:  11  Line:  81  Band:  1
@@ -479,7 +476,7 @@ Sample:  21  Line:  101  Band:  1
 Sample:  31  Line:  101  Band:  1
 Sample:  41  Line:  101  Band:  1
 Sample:  51  Line:  101  Band:  1
-40% Processed
Sample:  61  Line:  101  Band:  1
+Sample:  61  Line:  101  Band:  1
 Sample:  71  Line:  101  Band:  1
 Sample:  81  Line:  101  Band:  1
 Sample:  91  Line:  101  Band:  1
@@ -512,7 +509,7 @@ Sample:  91  Line:  121  Band:  1
 Sample:  101  Line:  121  Band:  1
 Sample:  111  Line:  121  Band:  1
 Sample:  121  Line:  121  Band:  1
-50% Processed
Sample:  1  Line:  1  Band:  2
+Sample:  1  Line:  1  Band:  2
 Sample:  11  Line:  1  Band:  2
 Sample:  21  Line:  1  Band:  2
 Sample:  31  Line:  1  Band:  2
@@ -546,7 +543,7 @@ Sample:  41  Line:  21  Band:  2
 Sample:  51  Line:  21  Band:  2
 Sample:  61  Line:  21  Band:  2
 Sample:  71  Line:  21  Band:  2
-60% Processed
Sample:  81  Line:  21  Band:  2
+Sample:  81  Line:  21  Band:  2
 Sample:  91  Line:  21  Band:  2
 Sample:  101  Line:  21  Band:  2
 Sample:  111  Line:  21  Band:  2
@@ -580,7 +577,7 @@ Sample:  121  Line:  41  Band:  2
 Sample:  1  Line:  51  Band:  2
 Sample:  11  Line:  51  Band:  2
 Sample:  21  Line:  51  Band:  2
-70% Processed
Sample:  31  Line:  51  Band:  2
+Sample:  31  Line:  51  Band:  2
 Sample:  41  Line:  51  Band:  2
 Sample:  51  Line:  51  Band:  2
 Sample:  61  Line:  51  Band:  2
@@ -614,7 +611,7 @@ Sample:  71  Line:  71  Band:  2
 Sample:  81  Line:  71  Band:  2
 Sample:  91  Line:  71  Band:  2
 Sample:  101  Line:  71  Band:  2
-80% Processed
Sample:  111  Line:  71  Band:  2
+Sample:  111  Line:  71  Band:  2
 Sample:  121  Line:  71  Band:  2
 Sample:  1  Line:  81  Band:  2
 Sample:  11  Line:  81  Band:  2
@@ -648,7 +645,7 @@ Sample:  21  Line:  101  Band:  2
 Sample:  31  Line:  101  Band:  2
 Sample:  41  Line:  101  Band:  2
 Sample:  51  Line:  101  Band:  2
-90% Processed
Sample:  61  Line:  101  Band:  2
+Sample:  61  Line:  101  Band:  2
 Sample:  71  Line:  101  Band:  2
 Sample:  81  Line:  101  Band:  2
 Sample:  91  Line:  101  Band:  2
@@ -681,10 +678,8 @@ Sample:  91  Line:  121  Band:  2
 Sample:  101  Line:  121  Band:  2
 Sample:  111  Line:  121  Band:  2
 Sample:  121  Line:  121  Band:  2
-100% Processed
 **PROGRAMMER ERROR** Use the SetTileSize method to set the tile size.
-unittest: Working
-0% Processed
InputOutput Functor:  
+InputOutput Functor:  
 Testing one input and one output cube.
 Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  11:11  Line:  1:1  Band:  1:1
@@ -720,7 +715,7 @@ Sample:  41:41  Line:  21:21  Band:  1:1
 Sample:  51:51  Line:  21:21  Band:  1:1
 Sample:  61:61  Line:  21:21  Band:  1:1
 Sample:  71:71  Line:  21:21  Band:  1:1
-10% Processed
Sample:  81:81  Line:  21:21  Band:  1:1
+Sample:  81:81  Line:  21:21  Band:  1:1
 Sample:  91:91  Line:  21:21  Band:  1:1
 Sample:  101:101  Line:  21:21  Band:  1:1
 Sample:  111:111  Line:  21:21  Band:  1:1
@@ -754,7 +749,7 @@ Sample:  121:121  Line:  41:41  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
 Sample:  11:11  Line:  51:51  Band:  1:1
 Sample:  21:21  Line:  51:51  Band:  1:1
-20% Processed
Sample:  31:31  Line:  51:51  Band:  1:1
+Sample:  31:31  Line:  51:51  Band:  1:1
 Sample:  41:41  Line:  51:51  Band:  1:1
 Sample:  51:51  Line:  51:51  Band:  1:1
 Sample:  61:61  Line:  51:51  Band:  1:1
@@ -788,7 +783,7 @@ Sample:  71:71  Line:  71:71  Band:  1:1
 Sample:  81:81  Line:  71:71  Band:  1:1
 Sample:  91:91  Line:  71:71  Band:  1:1
 Sample:  101:101  Line:  71:71  Band:  1:1
-30% Processed
Sample:  111:111  Line:  71:71  Band:  1:1
+Sample:  111:111  Line:  71:71  Band:  1:1
 Sample:  121:121  Line:  71:71  Band:  1:1
 Sample:  1:1  Line:  81:81  Band:  1:1
 Sample:  11:11  Line:  81:81  Band:  1:1
@@ -822,7 +817,7 @@ Sample:  21:21  Line:  101:101  Band:  1:1
 Sample:  31:31  Line:  101:101  Band:  1:1
 Sample:  41:41  Line:  101:101  Band:  1:1
 Sample:  51:51  Line:  101:101  Band:  1:1
-40% Processed
Sample:  61:61  Line:  101:101  Band:  1:1
+Sample:  61:61  Line:  101:101  Band:  1:1
 Sample:  71:71  Line:  101:101  Band:  1:1
 Sample:  81:81  Line:  101:101  Band:  1:1
 Sample:  91:91  Line:  101:101  Band:  1:1
@@ -855,7 +850,7 @@ Sample:  91:91  Line:  121:121  Band:  1:1
 Sample:  101:101  Line:  121:121  Band:  1:1
 Sample:  111:111  Line:  121:121  Band:  1:1
 Sample:  121:121  Line:  121:121  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:2
+Sample:  1:1  Line:  1:1  Band:  2:2
 Sample:  11:11  Line:  1:1  Band:  2:2
 Sample:  21:21  Line:  1:1  Band:  2:2
 Sample:  31:31  Line:  1:1  Band:  2:2
@@ -889,7 +884,7 @@ Sample:  41:41  Line:  21:21  Band:  2:2
 Sample:  51:51  Line:  21:21  Band:  2:2
 Sample:  61:61  Line:  21:21  Band:  2:2
 Sample:  71:71  Line:  21:21  Band:  2:2
-60% Processed
Sample:  81:81  Line:  21:21  Band:  2:2
+Sample:  81:81  Line:  21:21  Band:  2:2
 Sample:  91:91  Line:  21:21  Band:  2:2
 Sample:  101:101  Line:  21:21  Band:  2:2
 Sample:  111:111  Line:  21:21  Band:  2:2
@@ -923,7 +918,7 @@ Sample:  121:121  Line:  41:41  Band:  2:2
 Sample:  1:1  Line:  51:51  Band:  2:2
 Sample:  11:11  Line:  51:51  Band:  2:2
 Sample:  21:21  Line:  51:51  Band:  2:2
-70% Processed
Sample:  31:31  Line:  51:51  Band:  2:2
+Sample:  31:31  Line:  51:51  Band:  2:2
 Sample:  41:41  Line:  51:51  Band:  2:2
 Sample:  51:51  Line:  51:51  Band:  2:2
 Sample:  61:61  Line:  51:51  Band:  2:2
@@ -957,7 +952,7 @@ Sample:  71:71  Line:  71:71  Band:  2:2
 Sample:  81:81  Line:  71:71  Band:  2:2
 Sample:  91:91  Line:  71:71  Band:  2:2
 Sample:  101:101  Line:  71:71  Band:  2:2
-80% Processed
Sample:  111:111  Line:  71:71  Band:  2:2
+Sample:  111:111  Line:  71:71  Band:  2:2
 Sample:  121:121  Line:  71:71  Band:  2:2
 Sample:  1:1  Line:  81:81  Band:  2:2
 Sample:  11:11  Line:  81:81  Band:  2:2
@@ -991,7 +986,7 @@ Sample:  21:21  Line:  101:101  Band:  2:2
 Sample:  31:31  Line:  101:101  Band:  2:2
 Sample:  41:41  Line:  101:101  Band:  2:2
 Sample:  51:51  Line:  101:101  Band:  2:2
-90% Processed
Sample:  61:61  Line:  101:101  Band:  2:2
+Sample:  61:61  Line:  101:101  Band:  2:2
 Sample:  71:71  Line:  101:101  Band:  2:2
 Sample:  81:81  Line:  101:101  Band:  2:2
 Sample:  91:91  Line:  101:101  Band:  2:2
@@ -1024,9 +1019,7 @@ Sample:  91:91  Line:  121:121  Band:  2:2
 Sample:  101:101  Line:  121:121  Band:  2:2
 Sample:  111:111  Line:  121:121  Band:  2:2
 Sample:  121:121  Line:  121:121  Band:  2:2
-100% Processed
-unittest: Working
-0% Processed
Testing one input/one output cube function
+Testing one input/one output cube function
 Sample:  1:1  Line:  1:1  Band:  1:1
 Sample:  11:11  Line:  1:1  Band:  1:1
 Sample:  21:21  Line:  1:1  Band:  1:1
@@ -1061,7 +1054,7 @@ Sample:  41:41  Line:  21:21  Band:  1:1
 Sample:  51:51  Line:  21:21  Band:  1:1
 Sample:  61:61  Line:  21:21  Band:  1:1
 Sample:  71:71  Line:  21:21  Band:  1:1
-10% Processed
Sample:  81:81  Line:  21:21  Band:  1:1
+Sample:  81:81  Line:  21:21  Band:  1:1
 Sample:  91:91  Line:  21:21  Band:  1:1
 Sample:  101:101  Line:  21:21  Band:  1:1
 Sample:  111:111  Line:  21:21  Band:  1:1
@@ -1095,7 +1088,7 @@ Sample:  121:121  Line:  41:41  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
 Sample:  11:11  Line:  51:51  Band:  1:1
 Sample:  21:21  Line:  51:51  Band:  1:1
-20% Processed
Sample:  31:31  Line:  51:51  Band:  1:1
+Sample:  31:31  Line:  51:51  Band:  1:1
 Sample:  41:41  Line:  51:51  Band:  1:1
 Sample:  51:51  Line:  51:51  Band:  1:1
 Sample:  61:61  Line:  51:51  Band:  1:1
@@ -1129,7 +1122,7 @@ Sample:  71:71  Line:  71:71  Band:  1:1
 Sample:  81:81  Line:  71:71  Band:  1:1
 Sample:  91:91  Line:  71:71  Band:  1:1
 Sample:  101:101  Line:  71:71  Band:  1:1
-30% Processed
Sample:  111:111  Line:  71:71  Band:  1:1
+Sample:  111:111  Line:  71:71  Band:  1:1
 Sample:  121:121  Line:  71:71  Band:  1:1
 Sample:  1:1  Line:  81:81  Band:  1:1
 Sample:  11:11  Line:  81:81  Band:  1:1
@@ -1163,7 +1156,7 @@ Sample:  21:21  Line:  101:101  Band:  1:1
 Sample:  31:31  Line:  101:101  Band:  1:1
 Sample:  41:41  Line:  101:101  Band:  1:1
 Sample:  51:51  Line:  101:101  Band:  1:1
-40% Processed
Sample:  61:61  Line:  101:101  Band:  1:1
+Sample:  61:61  Line:  101:101  Band:  1:1
 Sample:  71:71  Line:  101:101  Band:  1:1
 Sample:  81:81  Line:  101:101  Band:  1:1
 Sample:  91:91  Line:  101:101  Band:  1:1
@@ -1196,7 +1189,7 @@ Sample:  91:91  Line:  121:121  Band:  1:1
 Sample:  101:101  Line:  121:121  Band:  1:1
 Sample:  111:111  Line:  121:121  Band:  1:1
 Sample:  121:121  Line:  121:121  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:2
+Sample:  1:1  Line:  1:1  Band:  2:2
 Sample:  11:11  Line:  1:1  Band:  2:2
 Sample:  21:21  Line:  1:1  Band:  2:2
 Sample:  31:31  Line:  1:1  Band:  2:2
@@ -1230,7 +1223,7 @@ Sample:  41:41  Line:  21:21  Band:  2:2
 Sample:  51:51  Line:  21:21  Band:  2:2
 Sample:  61:61  Line:  21:21  Band:  2:2
 Sample:  71:71  Line:  21:21  Band:  2:2
-60% Processed
Sample:  81:81  Line:  21:21  Band:  2:2
+Sample:  81:81  Line:  21:21  Band:  2:2
 Sample:  91:91  Line:  21:21  Band:  2:2
 Sample:  101:101  Line:  21:21  Band:  2:2
 Sample:  111:111  Line:  21:21  Band:  2:2
@@ -1264,7 +1257,7 @@ Sample:  121:121  Line:  41:41  Band:  2:2
 Sample:  1:1  Line:  51:51  Band:  2:2
 Sample:  11:11  Line:  51:51  Band:  2:2
 Sample:  21:21  Line:  51:51  Band:  2:2
-70% Processed
Sample:  31:31  Line:  51:51  Band:  2:2
+Sample:  31:31  Line:  51:51  Band:  2:2
 Sample:  41:41  Line:  51:51  Band:  2:2
 Sample:  51:51  Line:  51:51  Band:  2:2
 Sample:  61:61  Line:  51:51  Band:  2:2
@@ -1298,7 +1291,7 @@ Sample:  71:71  Line:  71:71  Band:  2:2
 Sample:  81:81  Line:  71:71  Band:  2:2
 Sample:  91:91  Line:  71:71  Band:  2:2
 Sample:  101:101  Line:  71:71  Band:  2:2
-80% Processed
Sample:  111:111  Line:  71:71  Band:  2:2
+Sample:  111:111  Line:  71:71  Band:  2:2
 Sample:  121:121  Line:  71:71  Band:  2:2
 Sample:  1:1  Line:  81:81  Band:  2:2
 Sample:  11:11  Line:  81:81  Band:  2:2
@@ -1332,7 +1325,7 @@ Sample:  21:21  Line:  101:101  Band:  2:2
 Sample:  31:31  Line:  101:101  Band:  2:2
 Sample:  41:41  Line:  101:101  Band:  2:2
 Sample:  51:51  Line:  101:101  Band:  2:2
-90% Processed
Sample:  61:61  Line:  101:101  Band:  2:2
+Sample:  61:61  Line:  101:101  Band:  2:2
 Sample:  71:71  Line:  101:101  Band:  2:2
 Sample:  81:81  Line:  101:101  Band:  2:2
 Sample:  91:91  Line:  101:101  Band:  2:2
@@ -1365,10 +1358,8 @@ Sample:  91:91  Line:  121:121  Band:  2:2
 Sample:  101:101  Line:  121:121  Band:  2:2
 Sample:  111:111  Line:  121:121  Band:  2:2
 Sample:  121:121  Line:  121:121  Band:  2:2
-100% Processed
 **PROGRAMMER ERROR** Use the SetTileSize method to set the tile size.
-unittest: Working
-0% Processed
Testing two input and output cubes function.
+Testing two input and output cubes function.
 Number of input cubes:   2
 Number of output cubes:  2
 
@@ -1409,7 +1400,7 @@ Sample:  51:51  Line:  21:21  Band:  1:1
 Sample:  61:61  Line:  21:21  Band:  1:1
 Sample:  71:71  Line:  21:21  Band:  1:1
 Sample:  81:81  Line:  21:21  Band:  1:1
-10% Processed
Sample:  91:91  Line:  21:21  Band:  1:1
+Sample:  91:91  Line:  21:21  Band:  1:1
 Sample:  101:101  Line:  21:21  Band:  1:1
 Sample:  111:111  Line:  21:21  Band:  1:1
 Sample:  121:121  Line:  21:21  Band:  1:1
@@ -1445,7 +1436,7 @@ Sample:  131:131  Line:  41:41  Band:  1:1
 Sample:  1:1  Line:  51:51  Band:  1:1
 Sample:  11:11  Line:  51:51  Band:  1:1
 Sample:  21:21  Line:  51:51  Band:  1:1
-20% Processed
Sample:  31:31  Line:  51:51  Band:  1:1
+Sample:  31:31  Line:  51:51  Band:  1:1
 Sample:  41:41  Line:  51:51  Band:  1:1
 Sample:  51:51  Line:  51:51  Band:  1:1
 Sample:  61:61  Line:  51:51  Band:  1:1
@@ -1482,7 +1473,7 @@ Sample:  81:81  Line:  71:71  Band:  1:1
 Sample:  91:91  Line:  71:71  Band:  1:1
 Sample:  101:101  Line:  71:71  Band:  1:1
 Sample:  111:111  Line:  71:71  Band:  1:1
-30% Processed
Sample:  121:121  Line:  71:71  Band:  1:1
+Sample:  121:121  Line:  71:71  Band:  1:1
 Sample:  131:131  Line:  71:71  Band:  1:1
 Sample:  1:1  Line:  81:81  Band:  1:1
 Sample:  11:11  Line:  81:81  Band:  1:1
@@ -1518,7 +1509,7 @@ Sample:  21:21  Line:  101:101  Band:  1:1
 Sample:  31:31  Line:  101:101  Band:  1:1
 Sample:  41:41  Line:  101:101  Band:  1:1
 Sample:  51:51  Line:  101:101  Band:  1:1
-40% Processed
Sample:  61:61  Line:  101:101  Band:  1:1
+Sample:  61:61  Line:  101:101  Band:  1:1
 Sample:  71:71  Line:  101:101  Band:  1:1
 Sample:  81:81  Line:  101:101  Band:  1:1
 Sample:  91:91  Line:  101:101  Band:  1:1
@@ -1554,7 +1545,7 @@ Sample:  101:101  Line:  121:121  Band:  1:1
 Sample:  111:111  Line:  121:121  Band:  1:1
 Sample:  121:121  Line:  121:121  Band:  1:1
 Sample:  131:131  Line:  121:121  Band:  1:1
-50% Processed
Sample:  1:1  Line:  1:1  Band:  2:2
+Sample:  1:1  Line:  1:1  Band:  2:2
 Sample:  11:11  Line:  1:1  Band:  2:2
 Sample:  21:21  Line:  1:1  Band:  2:2
 Sample:  31:31  Line:  1:1  Band:  2:2
@@ -1591,7 +1582,7 @@ Sample:  51:51  Line:  21:21  Band:  2:2
 Sample:  61:61  Line:  21:21  Band:  2:2
 Sample:  71:71  Line:  21:21  Band:  2:2
 Sample:  81:81  Line:  21:21  Band:  2:2
-60% Processed
Sample:  91:91  Line:  21:21  Band:  2:2
+Sample:  91:91  Line:  21:21  Band:  2:2
 Sample:  101:101  Line:  21:21  Band:  2:2
 Sample:  111:111  Line:  21:21  Band:  2:2
 Sample:  121:121  Line:  21:21  Band:  2:2
@@ -1627,7 +1618,7 @@ Sample:  131:131  Line:  41:41  Band:  2:2
 Sample:  1:1  Line:  51:51  Band:  2:2
 Sample:  11:11  Line:  51:51  Band:  2:2
 Sample:  21:21  Line:  51:51  Band:  2:2
-70% Processed
Sample:  31:31  Line:  51:51  Band:  2:2
+Sample:  31:31  Line:  51:51  Band:  2:2
 Sample:  41:41  Line:  51:51  Band:  2:2
 Sample:  51:51  Line:  51:51  Band:  2:2
 Sample:  61:61  Line:  51:51  Band:  2:2
@@ -1664,7 +1655,7 @@ Sample:  81:81  Line:  71:71  Band:  2:2
 Sample:  91:91  Line:  71:71  Band:  2:2
 Sample:  101:101  Line:  71:71  Band:  2:2
 Sample:  111:111  Line:  71:71  Band:  2:2
-80% Processed
Sample:  121:121  Line:  71:71  Band:  2:2
+Sample:  121:121  Line:  71:71  Band:  2:2
 Sample:  131:131  Line:  71:71  Band:  2:2
 Sample:  1:1  Line:  81:81  Band:  2:2
 Sample:  11:11  Line:  81:81  Band:  2:2
@@ -1700,7 +1691,7 @@ Sample:  21:21  Line:  101:101  Band:  2:2
 Sample:  31:31  Line:  101:101  Band:  2:2
 Sample:  41:41  Line:  101:101  Band:  2:2
 Sample:  51:51  Line:  101:101  Band:  2:2
-90% Processed
Sample:  61:61  Line:  101:101  Band:  2:2
+Sample:  61:61  Line:  101:101  Band:  2:2
 Sample:  71:71  Line:  101:101  Band:  2:2
 Sample:  81:81  Line:  101:101  Band:  2:2
 Sample:  91:91  Line:  101:101  Band:  2:2
@@ -1736,9 +1727,7 @@ Sample:  101:101  Line:  121:121  Band:  2:2
 Sample:  111:111  Line:  121:121  Band:  2:2
 Sample:  121:121  Line:  121:121  Band:  2:2
 Sample:  131:131  Line:  121:121  Band:  2:2
-100% Processed
-unittest: Working
-0% Processed
InputOutputList Functor:  
+InputOutputList Functor:  
 Testing two input and two output cubes.
 InputSample:  1:1 InputLine:  1:1 InputBand:  1:1
 OutputSample:  1:1 OutputLine:  1:1 OutputBand:  1:1
@@ -1814,7 +1803,7 @@ InputSample:  71:71 InputLine:  21:21 InputBand:  1:1
 OutputSample:  71:71 OutputLine:  21:21 OutputBand:  1:1
 InputSample:  81:81 InputLine:  21:21 InputBand:  1:1
 OutputSample:  81:81 OutputLine:  21:21 OutputBand:  1:1
-10% Processed
InputSample:  91:91 InputLine:  21:21 InputBand:  1:1
+InputSample:  91:91 InputLine:  21:21 InputBand:  1:1
 OutputSample:  91:91 OutputLine:  21:21 OutputBand:  1:1
 InputSample:  101:101 InputLine:  21:21 InputBand:  1:1
 OutputSample:  101:101 OutputLine:  21:21 OutputBand:  1:1
@@ -1886,7 +1875,7 @@ InputSample:  11:11 InputLine:  51:51 InputBand:  1:1
 OutputSample:  11:11 OutputLine:  51:51 OutputBand:  1:1
 InputSample:  21:21 InputLine:  51:51 InputBand:  1:1
 OutputSample:  21:21 OutputLine:  51:51 OutputBand:  1:1
-20% Processed
InputSample:  31:31 InputLine:  51:51 InputBand:  1:1
+InputSample:  31:31 InputLine:  51:51 InputBand:  1:1
 OutputSample:  31:31 OutputLine:  51:51 OutputBand:  1:1
 InputSample:  41:41 InputLine:  51:51 InputBand:  1:1
 OutputSample:  41:41 OutputLine:  51:51 OutputBand:  1:1
@@ -1960,7 +1949,7 @@ InputSample:  101:101 InputLine:  71:71 InputBand:  1:1
 OutputSample:  101:101 OutputLine:  71:71 OutputBand:  1:1
 InputSample:  111:111 InputLine:  71:71 InputBand:  1:1
 OutputSample:  111:111 OutputLine:  71:71 OutputBand:  1:1
-30% Processed
InputSample:  121:121 InputLine:  71:71 InputBand:  1:1
+InputSample:  121:121 InputLine:  71:71 InputBand:  1:1
 OutputSample:  121:121 OutputLine:  71:71 OutputBand:  1:1
 InputSample:  131:131 InputLine:  71:71 InputBand:  1:1
 OutputSample:  131:131 OutputLine:  71:71 OutputBand:  1:1
@@ -2032,7 +2021,7 @@ InputSample:  41:41 InputLine:  101:101 InputBand:  1:1
 OutputSample:  41:41 OutputLine:  101:101 OutputBand:  1:1
 InputSample:  51:51 InputLine:  101:101 InputBand:  1:1
 OutputSample:  51:51 OutputLine:  101:101 OutputBand:  1:1
-40% Processed
InputSample:  61:61 InputLine:  101:101 InputBand:  1:1
+InputSample:  61:61 InputLine:  101:101 InputBand:  1:1
 OutputSample:  61:61 OutputLine:  101:101 OutputBand:  1:1
 InputSample:  71:71 InputLine:  101:101 InputBand:  1:1
 OutputSample:  71:71 OutputLine:  101:101 OutputBand:  1:1
@@ -2104,7 +2093,7 @@ InputSample:  121:121 InputLine:  121:121 InputBand:  1:1
 OutputSample:  121:121 OutputLine:  121:121 OutputBand:  1:1
 InputSample:  131:131 InputLine:  121:121 InputBand:  1:1
 OutputSample:  131:131 OutputLine:  121:121 OutputBand:  1:1
-50% Processed
InputSample:  1:1 InputLine:  1:1 InputBand:  2:2
+InputSample:  1:1 InputLine:  1:1 InputBand:  2:2
 OutputSample:  1:1 OutputLine:  1:1 OutputBand:  2:2
 InputSample:  11:11 InputLine:  1:1 InputBand:  2:2
 OutputSample:  11:11 OutputLine:  1:1 OutputBand:  2:2
@@ -2178,7 +2167,7 @@ InputSample:  71:71 InputLine:  21:21 InputBand:  2:2
 OutputSample:  71:71 OutputLine:  21:21 OutputBand:  2:2
 InputSample:  81:81 InputLine:  21:21 InputBand:  2:2
 OutputSample:  81:81 OutputLine:  21:21 OutputBand:  2:2
-60% Processed
InputSample:  91:91 InputLine:  21:21 InputBand:  2:2
+InputSample:  91:91 InputLine:  21:21 InputBand:  2:2
 OutputSample:  91:91 OutputLine:  21:21 OutputBand:  2:2
 InputSample:  101:101 InputLine:  21:21 InputBand:  2:2
 OutputSample:  101:101 OutputLine:  21:21 OutputBand:  2:2
@@ -2250,7 +2239,7 @@ InputSample:  11:11 InputLine:  51:51 InputBand:  2:2
 OutputSample:  11:11 OutputLine:  51:51 OutputBand:  2:2
 InputSample:  21:21 InputLine:  51:51 InputBand:  2:2
 OutputSample:  21:21 OutputLine:  51:51 OutputBand:  2:2
-70% Processed
InputSample:  31:31 InputLine:  51:51 InputBand:  2:2
+InputSample:  31:31 InputLine:  51:51 InputBand:  2:2
 OutputSample:  31:31 OutputLine:  51:51 OutputBand:  2:2
 InputSample:  41:41 InputLine:  51:51 InputBand:  2:2
 OutputSample:  41:41 OutputLine:  51:51 OutputBand:  2:2
@@ -2324,7 +2313,7 @@ InputSample:  101:101 InputLine:  71:71 InputBand:  2:2
 OutputSample:  101:101 OutputLine:  71:71 OutputBand:  2:2
 InputSample:  111:111 InputLine:  71:71 InputBand:  2:2
 OutputSample:  111:111 OutputLine:  71:71 OutputBand:  2:2
-80% Processed
InputSample:  121:121 InputLine:  71:71 InputBand:  2:2
+InputSample:  121:121 InputLine:  71:71 InputBand:  2:2
 OutputSample:  121:121 OutputLine:  71:71 OutputBand:  2:2
 InputSample:  131:131 InputLine:  71:71 InputBand:  2:2
 OutputSample:  131:131 OutputLine:  71:71 OutputBand:  2:2
@@ -2396,7 +2385,7 @@ InputSample:  41:41 InputLine:  101:101 InputBand:  2:2
 OutputSample:  41:41 OutputLine:  101:101 OutputBand:  2:2
 InputSample:  51:51 InputLine:  101:101 InputBand:  2:2
 OutputSample:  51:51 OutputLine:  101:101 OutputBand:  2:2
-90% Processed
InputSample:  61:61 InputLine:  101:101 InputBand:  2:2
+InputSample:  61:61 InputLine:  101:101 InputBand:  2:2
 OutputSample:  61:61 OutputLine:  101:101 OutputBand:  2:2
 InputSample:  71:71 InputLine:  101:101 InputBand:  2:2
 OutputSample:  71:71 OutputLine:  101:101 OutputBand:  2:2
@@ -2468,4 +2457,3 @@ InputSample:  121:121 InputLine:  121:121 InputBand:  2:2
 OutputSample:  121:121 OutputLine:  121:121 OutputBand:  2:2
 InputSample:  131:131 InputLine:  121:121 InputBand:  2:2
 OutputSample:  131:131 OutputLine:  121:121 OutputBand:  2:2
-100% Processed
diff --git a/isis/src/base/objs/ProcessExport/ProcessExport.cpp b/isis/src/base/objs/ProcessExport/ProcessExport.cpp
index 9e7a8b4386ca5514ab072f498471a0debf800475..251c06db05883daba8c146bd80a6a79a594cb357 100644
--- a/isis/src/base/objs/ProcessExport/ProcessExport.cpp
+++ b/isis/src/base/objs/ProcessExport/ProcessExport.cpp
@@ -71,10 +71,10 @@ namespace Isis {
 
   //! Destructor
   ProcessExport::~ProcessExport() {
-    if(p_endianSwap != NULL) {
+    if (p_endianSwap != NULL) {
       delete p_endianSwap;
     }
-    for(unsigned int i = 0; i < p_str.size(); i++) {
+    for (unsigned int i = 0; i < p_str.size(); i++) {
       delete p_str[i];
     }
     p_str.clear();
@@ -167,12 +167,12 @@ namespace Isis {
    */
   void ProcessExport::SetInputRange(const double minimum, const double middle,
                                     const double maximum) {
-    if(minimum >= middle) {
+    if (minimum >= middle) {
       string message =
         "minimum must be less than the middle [ProcessExport::SetInputRange]";
       throw IException(IException::Programmer, message, _FILEINFO_);
     }
-    if(middle >= maximum) {
+    if (middle >= maximum) {
       string message =
         "middle must be less than the maximum [ProcessExport::SetInputRange]";
       throw IException(IException::Programmer, message, _FILEINFO_);
@@ -215,17 +215,17 @@ namespace Isis {
   */
   void ProcessExport::SetInputRange(const double minimum, const double middle,
                                     const double maximum, const int index) {
-    if(minimum >= middle) {
+    if (minimum >= middle) {
       string message =
         "minimum must be less than the middle [ProcessExport::SetInputRange]";
       throw IException(IException::Programmer, message, _FILEINFO_);
     }
-    if(middle >= maximum) {
+    if (middle >= maximum) {
       string message =
         "middle must be less than the maximum [ProcessExport::SetInputRange]";
       throw IException(IException::Programmer, message, _FILEINFO_);
     }
-    if(index >= (int)InputCubes.size() || index < 0) {
+    if (index >= (int)InputCubes.size() || index < 0) {
       string message =
         "index out of bounds";
       throw IException(IException::Programmer, message, _FILEINFO_);
@@ -376,10 +376,10 @@ namespace Isis {
     p_inputMiddle.clear();
     p_inputMaximum.clear();
 
-    for(unsigned int i = 0; i < InputCubes.size(); i++) {
+    for (unsigned int i = 0; i < InputCubes.size(); i++) {
       // Get the manual stretch parameters if needed
       QString strType = Application::GetUserInterface().GetString("STRETCH");
-      if(strType == "MANUAL") {
+      if (strType == "MANUAL") {
         p_inputMinimum.push_back(Application::GetUserInterface().GetDouble("MINIMUM"));
         p_inputMaximum.push_back(Application::GetUserInterface().GetDouble("MAXIMUM"));
 
@@ -387,7 +387,7 @@ namespace Isis {
       }
 
       // Or get the automatic parameters
-      else if(strType != "NONE") {
+      else if (strType != "NONE") {
         Isis::Histogram *hist = InputCubes[i]->histogram(0);
         p_inputMinimum.push_back(hist->Percent(
                                    Application::GetUserInterface().GetDouble("MINPERCENT")));
@@ -399,20 +399,20 @@ namespace Isis {
         Application::GetUserInterface().PutDouble("MINIMUM", p_inputMinimum[i]);
         Application::GetUserInterface().PutDouble("MAXIMUM", p_inputMaximum[i]);
 
-        if(strType == "PIECEWISE") {
+        if (strType == "PIECEWISE") {
           p_inputMiddle[i] = hist->Median();
 
           // If the median is the min or max, back off to linear
-          if(p_inputMiddle[i] == p_inputMinimum[i] ||
+          if (p_inputMiddle[i] == p_inputMinimum[i] ||
               p_inputMiddle[i] == p_inputMaximum[i]) {
             p_inputMiddle[i] = Isis::NULL8;
           }
         }
 
         // Make sure the image isn't constant
-        if(p_inputMinimum[i] == p_inputMaximum[i]) {
+        if (p_inputMinimum[i] == p_inputMaximum[i]) {
           p_inputMaximum[i] = p_inputMinimum[i] + 1.0;
-          if(strType == "PIECEWISE") p_inputMiddle[i] = p_inputMinimum[i] + 0.5;
+          if (strType == "PIECEWISE") p_inputMiddle[i] = p_inputMinimum[i] + 0.5;
         }
       }
     }
@@ -462,7 +462,7 @@ namespace Isis {
    * @throws Isis::iException::Message
    */
   void ProcessExport::SetOutputRange(const double minimum, const double maximum) {
-    if(minimum >= maximum) {
+    if (minimum >= maximum) {
       string message =
         "minimum must be less than the maximum [ProcessExport::SetOutputRange]";
       throw IException(IException::Programmer, message, _FILEINFO_);
@@ -618,19 +618,19 @@ namespace Isis {
   void ProcessExport::SetOutputType(Isis::PixelType pixelIn) {
     p_pixelType = pixelIn;
 
-    if(p_format < 0 || p_format > 3) {
+    if (p_format < 0 || p_format > 3) {
       string message =
         "Format of the output file must be set prior to calling this method [ProcessExport::SetOutputType]";
       throw IException(IException::Programmer, message, _FILEINFO_);
     }
-    if(pixelIn == Isis::UnsignedByte)
+    if (pixelIn == Isis::UnsignedByte)
       SetOutputRange((double)VALID_MIN1, (double)VALID_MAX1);
-    else if(pixelIn == Isis::UnsignedWord)
+    else if (pixelIn == Isis::UnsignedWord)
       SetOutputRange((double)VALID_MINU2, (double)VALID_MAXU2);
-    else if(pixelIn == Isis::SignedWord)
+    else if (pixelIn == Isis::SignedWord)
       SetOutputRange((double)VALID_MIN2, (double)VALID_MAX2);
-    else if(pixelIn == Isis::Real)
-      if(p_format == JP2) {
+    else if (pixelIn == Isis::Real)
+      if (p_format == JP2) {
         string message =
           "Unsupported bit type for JP2 formatted files [ProcessExport::SetOutputType]";
         throw IException(IException::Programmer, message, _FILEINFO_);
@@ -657,17 +657,17 @@ namespace Isis {
   * @param byteOrderIn enumeration of the endianness (MSB or LSB)
   */
   void ProcessExport::SetOutputEndian(enum ByteOrder byteOrderIn) {
-    if(p_endianSwap != NULL) {
+    if (p_endianSwap != NULL) {
       delete p_endianSwap;
     }
     p_endianType = byteOrderIn;
-    if(byteOrderIn == Isis::NoByteOrder) {
+    if (byteOrderIn == Isis::NoByteOrder) {
       p_endianSwap = new EndianSwapper("NoByteOrder");
     }
-    else if(byteOrderIn == Isis::Lsb) {
+    else if (byteOrderIn == Isis::Lsb) {
       p_endianSwap = new EndianSwapper("LSB");
     }
-    else if(byteOrderIn == Isis::Msb) {
+    else if (byteOrderIn == Isis::Msb) {
       p_endianSwap = new EndianSwapper("MSB");
     }
   }
@@ -734,7 +734,7 @@ namespace Isis {
   * @throws Isis::iException::Message - No input cube was specified
   */
   void ProcessExport::InitProcess() {
-    if(InputCubes.size() < 1) {
+    if (InputCubes.size() < 1) {
       string m = "You have not specified any input cubes";
       throw IException(IException::Programmer, m, _FILEINFO_);
     }
@@ -745,7 +745,7 @@ namespace Isis {
     //if (!HasInputRange()) SetInputRange();
 
     // Construct a line buffer manager
-    if(p_format == BIP) {
+    if (p_format == BIP) {
       p_progress->SetMaximumSteps((InputCubes[0]->sampleCount()) * (InputCubes[0]->lineCount()));
     }
     else {
@@ -755,12 +755,12 @@ namespace Isis {
 
     // Setup a stretch object
     p_str.clear();
-    for(unsigned int i = 0; i < InputCubes.size(); i++) {
+    for (unsigned int i = 0; i < InputCubes.size(); i++) {
       p_str.push_back(new Stretch());
-      if(p_inputMinimum.size() > 0) {
-        if(Isis::IsValidPixel(p_inputMinimum[i])) {
+      if (p_inputMinimum.size() > 0) {
+        if (Isis::IsValidPixel(p_inputMinimum[i])) {
           p_str[i]->AddPair(p_inputMinimum[i], p_outputMinimum);
-          if(Isis::IsValidPixel(p_inputMiddle[i])) {
+          if (Isis::IsValidPixel(p_inputMiddle[i])) {
             p_str[i]->AddPair(p_inputMiddle[i], p_outputMiddle);
           }
           p_str[i]->AddPair(p_inputMaximum[i], p_outputMaximum);
@@ -801,13 +801,13 @@ namespace Isis {
     InitProcess();
 
     Isis::BufferManager *buff;
-    if(p_format == BSQ) {
+    if (p_format == BSQ) {
       buff = new Isis::LineManager(*InputCubes[0]);
     }
-    else if(p_format == BIL || p_format == JP2) {
+    else if (p_format == BIL || p_format == JP2) {
       buff = new Isis::LineManager(*InputCubes[0], true);
     }
-    else if(p_format == BIP) {
+    else if (p_format == BIP) {
       buff = new Isis::BandManager(*InputCubes[0]);
     }
     else {
@@ -816,11 +816,11 @@ namespace Isis {
     }
 
     // Loop and let the app programmer fiddle with the buffers
-    for(buff->begin(); !buff->end(); buff->next()) {
+    for (buff->begin(); !buff->end(); buff->next()) {
       // Read a line of data
       InputCubes[0]->read(*buff);
       // Stretch the pixels into the desired range
-      for(int i = 0; i < buff->size(); i++) {
+      for (int i = 0; i < buff->size(); i++) {
         (*buff)[i] = p_str[0]->Map((*buff)[i]);
       }
       // Invoke the user function
@@ -918,7 +918,7 @@ namespace Isis {
 
     vector<BufferManager *> imgrs;
     for (unsigned int i = 0; i < InputCubes.size(); i++) {
-      if((InputCubes[i]->sampleCount() == samples) &&
+      if ((InputCubes[i]->sampleCount() == samples) &&
           (InputCubes[i]->lineCount() == lines)) {
 
         Isis::LineManager *iline = new Isis::LineManager(*InputCubes[i]);
@@ -994,8 +994,8 @@ namespace Isis {
     int samples = InputCubes[0]->sampleCount();
 
     vector<BufferManager *> imgrs;
-    for(unsigned int i = 0; i < InputCubes.size(); i++) {
-      if((InputCubes[i]->bandCount() == bands) && (InputCubes[i]->sampleCount() == samples)) {
+    for (unsigned int i = 0; i < InputCubes.size(); i++) {
+      if ((InputCubes[i]->bandCount() == bands) && (InputCubes[i]->sampleCount() == samples)) {
         Isis::BandManager *iband = new Isis::BandManager(*InputCubes[i]);
         iband->begin();
         imgrs.push_back(iband);
@@ -1028,13 +1028,13 @@ namespace Isis {
     InitProcess();
 
     Isis::BufferManager *buff;
-    if(p_format == BSQ) {
+    if (p_format == BSQ) {
       buff = new Isis::LineManager(*InputCubes[0]);
     }
-    else if(p_format == BIL) {
+    else if (p_format == BIL) {
       buff = new Isis::LineManager(*InputCubes[0], true);
     }
-    else if(p_format == BIP) {
+    else if (p_format == BIP) {
       buff = new Isis::BandManager(*InputCubes[0]);
     }
     else {
@@ -1045,42 +1045,42 @@ namespace Isis {
     //This if is the changed one
     if (m_canGenerateChecksum) {
       // Loop for each line of data
-      for(buff->begin(); !buff->end(); buff->next()) {
+      for (buff->begin(); !buff->end(); buff->next()) {
         // Read a line of data
         InputCubes[0]->read(*buff);
         QByteArray byteArray;
         // Stretch the pixels into the desired range
-        for(int i = 0; i < buff->size(); i++) {
+        for (int i = 0; i < buff->size(); i++) {
           (*buff)[i] = p_str[0]->Map((*buff)[i]);
           byteArray.append((*buff)[i]);
         }
-        if(p_pixelType == Isis::UnsignedByte)
+        if (p_pixelType == Isis::UnsignedByte)
           isisOut8(*buff, fout);
-        else if(p_pixelType == Isis::UnsignedWord)
+        else if (p_pixelType == Isis::UnsignedWord)
           isisOut16u(*buff, fout);
-        else if(p_pixelType == Isis::SignedWord)
+        else if (p_pixelType == Isis::SignedWord)
           isisOut16s(*buff, fout);
-        else if(p_pixelType == Isis::Real)
+        else if (p_pixelType == Isis::Real)
           isisOut32(*buff, fout);
         p_progress->CheckStatus();
         m_cryptographicHash->addData(byteArray);
       }
     }
     else {
-      for(buff->begin(); !buff->end(); buff->next()) {
+      for (buff->begin(); !buff->end(); buff->next()) {
         // Read a line of data
         InputCubes[0]->read(*buff);
         // Stretch the pixels into the desired range
-        for(int i = 0; i < buff->size(); i++) {
+        for (int i = 0; i < buff->size(); i++) {
           (*buff)[i] = p_str[0]->Map((*buff)[i]);
         }
-        if(p_pixelType == Isis::UnsignedByte)
+        if (p_pixelType == Isis::UnsignedByte)
           isisOut8(*buff, fout);
-        else if(p_pixelType == Isis::UnsignedWord)
+        else if (p_pixelType == Isis::UnsignedWord)
           isisOut16u(*buff, fout);
-        else if(p_pixelType == Isis::SignedWord)
+        else if (p_pixelType == Isis::SignedWord)
           isisOut16s(*buff, fout);
-        else if(p_pixelType == Isis::Real)
+        else if (p_pixelType == Isis::Real)
           isisOut32(*buff, fout);
         p_progress->CheckStatus();
       }
@@ -1108,13 +1108,13 @@ namespace Isis {
   */
   void ProcessExport::isisOut8(Buffer &in, std::ofstream &fout) {
     char *out8 = new char[in.size()];
-    for(int samp = 0; samp < in.size(); samp++) {
+    for (int samp = 0; samp < in.size(); samp++) {
       double pixel = in[samp];
-      if(pixel <= 0.0) {
+      if (pixel <= 0.0) {
         out8[samp] = 0;
       }
-      else if(pixel >= 255.0) {
-        out8[samp] = 255;
+      else if (pixel >= 255.0) {
+        out8[samp] = (char)255;
       }
       else {
         out8[samp] = (char)(in[samp] + 0.5);  //Rounds
@@ -1145,18 +1145,19 @@ namespace Isis {
   */
   void ProcessExport::isisOut16s(Buffer &in, std::ofstream &fout) {
     short *out16s = new short[in.size()];
-    for(int samp = 0; samp < in.size(); samp++) {
+    for (int samp = 0; samp < in.size(); samp++) {
       double pixel = in[samp];
       short tempShort;
-      if(pixel <= -32768.0) {
-        tempShort = -(short)32768;
+      if (pixel <= -32768.0) {
+        tempShort = (short)32768;
+        tempShort = -1 * tempShort;
       }
-      else if(pixel >= 32767.0) {
+      else if (pixel >= 32767.0) {
         tempShort = (short)32767;
       }
       else {
         //Rounds
-        if(in[samp] < 0.0) {
+        if (in[samp] < 0.0) {
           tempShort = (short)(in[samp] - 0.5);
         }
         else {
@@ -1191,13 +1192,13 @@ namespace Isis {
   */
   void ProcessExport::isisOut16u(Buffer &in, std::ofstream &fout) {
     unsigned short *out16u = new unsigned short[in.size()];
-    for(int samp = 0; samp < in.size(); samp++) {
+    for (int samp = 0; samp < in.size(); samp++) {
       double pixel = in[samp];
       unsigned short tempShort;
-      if(pixel <= 0.0) {
+      if (pixel <= 0.0) {
         tempShort = 0;
       }
-      else if(pixel >= 65535.0) {
+      else if (pixel >= 65535.0) {
         tempShort = 65535;
       }
       else {
@@ -1231,13 +1232,13 @@ namespace Isis {
   */
   void ProcessExport::isisOut32(Buffer &in, std::ofstream &fout) {
     int *out32 = new int[in.size()];
-    for(int samp = 0; samp < in.size(); samp++) {
+    for (int samp = 0; samp < in.size(); samp++) {
       double pixel = in[samp];
       float tempFloat;
-      if(pixel <= -((double)FLT_MAX)) {
+      if (pixel <= -((double)FLT_MAX)) {
         tempFloat = -((double)FLT_MAX);
       }
-      else if(pixel >= (double)FLT_MAX) {
+      else if (pixel >= (double)FLT_MAX) {
         tempFloat = (double)FLT_MAX;
       }
       else {
diff --git a/isis/src/base/objs/ProcessExport/ProcessExport.h b/isis/src/base/objs/ProcessExport/ProcessExport.h
index e4169be8540bc3e11b875116a7c6ec6e50133a40..e30d86014969fb2fdf85b159b8f4a53200cd2214 100644
--- a/isis/src/base/objs/ProcessExport/ProcessExport.h
+++ b/isis/src/base/objs/ProcessExport/ProcessExport.h
@@ -101,24 +101,26 @@ namespace Isis {
    *  @history 2012-10-04 Jeannie Backer - Added documentation and fixed
    *                          indentation of history entries. No mantis ticket.
    *  @history 2013-06-05 Jeannie Backer - Replaced redundant code in
-   *                           InitProcess() with accessor methods for
-   *                           OutputNull(), et al. Changed local variable names
-   *                           in ProcessCubes for clarity. References #1380.
+   *                          InitProcess() with accessor methods for
+   *                          OutputNull(), et al. Changed local variable names
+   *                          in ProcessCubes for clarity. References #1380.
    *  @history 2015-01-15 Sasha Brownsberger - Added virtual keyword to several
-   *                                            functions to ensure successful
-   *                                            inheritance between Process and its
-   *                                            child classes.  Added virtual keyword
-   *                                            to destructor.  References #2215.
+   *                          functions to ensure successful
+   *                          inheritance between Process and its
+   *                          child classes.  Added virtual keyword
+   *                          to destructor.  References #2215.
    *  @history 2016-04-21 Makayla Shepherd - Added UnsignedWord pixel type handling.
    *  @history 2017-05-17 Makayla Shepherd - Added setCanGenerateChecksum(), canGenerateChecksum(),
    *                          and checksum(). Added m_cryptographicHash and m_canGenerateChecksum.
    *                          This allows an MD5 checksum to be generated when exporting an image.
    *                          This checksum is generated based on the image data. Fixes #1013.
-   *
    *  @todo 2005-02-09 Stuart Sides - write documentation for CreateWorldFile
-   *                                  method
+   *                          method
    *  @todo 2005-02-09 Jeff Anderson - add coded example to class file and
-   *                                   implementation examples
+   *                          implementation examples
+   *  @history 2018-09-28 Kaitlyn Lee - Added (char) cast to fix implicit conversion. Split up 
+   *                          "-(short)32768" into two lines. Fixes build warnings on MacOS 10.13. 
+   *                          Updated code up to standards. References #5520.
    */
   class ProcessExport : public Isis::Process {
 
diff --git a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp
index cf02c924961fb8f5041df1a6309d78d1e49fdb8e..f449f51f133561a19f757bf96a71ab554985b6ff 100644
--- a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp
+++ b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp
@@ -24,8 +24,10 @@
 
 #include <QDomDocument>
 #include <QMap>
+#include <QRegularExpression>
 #include <QString>
 
+#include "Application.h"
 #include "FileName.h"
 #include "IException.h"
 #include "Projection.h"
@@ -43,6 +45,10 @@ namespace Isis {
    *
    */
   ProcessExportPds4::ProcessExportPds4() {
+
+    m_lid = "";
+    m_imageType = StandardImage;
+
     qSetGlobalQHashSeed(1031); // hash seed to force consistent output
 
     m_domDoc = new QDomDocument("");
@@ -59,10 +65,11 @@ namespace Isis {
 
     QString xmlModel;
     xmlModel += "href=\"http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch\" ";
-    xmlModel += "schemetypens=\"http://purl.oclc.org/dsdl/schematron\"";
+    xmlModel += "schematypens=\"http://purl.oclc.org/dsdl/schematron\"";
     QDomProcessingInstruction header =
         m_domDoc->createProcessingInstruction("xml-model", xmlModel);
     m_domDoc->appendChild(header);
+
   }
 
 
@@ -82,34 +89,48 @@ namespace Isis {
    * @return @b QDomDocument The output PDS4 label.
    */
   QDomDocument &ProcessExportPds4::StandardPds4Label() {
-    if (InputCubes.size() == 0) {
-      QString msg("Must set an input cube before creating a PDS4 label.");
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-    else {
-      if (m_domDoc->documentElement().isNull()) {
-        QDomElement root = m_domDoc->createElement("Product_Observational");
-        root.setAttribute("xmlns", "http://pds.nasa.gov/pds4/pds/v1");
-        root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
-        root.setAttribute("xsi:schemaLocation",
-                          "http://pds.nasa.gov/pds4/pds/v1 http://pds.nasa.gov/pds4/pds/v1");
-        m_domDoc->appendChild(root);
-      }
+    CreateImageLabel();
+    translateUnits(*m_domDoc);
+    return *m_domDoc;
+  }
 
-      CreateImageLabel();
-      translateUnits(*m_domDoc);
-      return *m_domDoc;
-    }
+
+  /**
+   * Create a standard PDS4 image label from the input cube.
+   * 
+   * @return @b QDomDocument The output PDS4 label.
+   */
+  void ProcessExportPds4::setImageType(ImageType imageType) {
+    m_imageType = imageType;
   }
 
 
   /**
-   * Create a standard PDS label for type IMAGE. The image label will be
-   * stored internally in the class.
+   * Creates a PDS4 label. The image label will be
+   * stored internally in the class. 
+   *  
+   * This method has a similar function to 
+   * ProcessExportPds::CreateImageLabel. However, it will create 
+   * images of object type Array_3D_Image, Array_2D_Image, or 
+   * Array_3D_Spectrum. 
    */
   void ProcessExportPds4::CreateImageLabel() {
+    if (InputCubes.size() == 0) {
+      QString msg("Must set an input cube before creating a PDS4 label.");
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    if (m_domDoc->documentElement().isNull()) {
+      QDomElement root = m_domDoc->createElement("Product_Observational");
+      root.setAttribute("xmlns", "http://pds.nasa.gov/pds4/pds/v1");
+      root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+      root.setAttribute("xsi:schemaLocation",
+                        "http://pds.nasa.gov/pds4/pds/v1 http://pds.nasa.gov/pds4/pds/v1");
+      m_domDoc->appendChild(root);
+    }
 
     try {
+      // <Product_Observational>
+      //   <Identification_Area>
       identificationArea();
     }
     catch (IException &e) {
@@ -117,6 +138,8 @@ namespace Isis {
       throw IException(e, IException::Programmer, msg, _FILEINFO_);
     }
     try {
+      // <Product_Observational>
+      //   <Observation_Area>
       standardInstrument();
     }
     catch (IException &e) {
@@ -124,25 +147,34 @@ namespace Isis {
       throw IException(e, IException::Programmer, msg, _FILEINFO_);
     }
     try {
+      // <Product_Observational>
+      //   <Observation_Area>
+      //     <Discipline_Area>
+      //       <disp:Display_Settings>
       displaySettings();
     }
     catch (IException &e) {
       QString msg = "Unable to translate and export display settings.";
       throw IException(e, IException::Programmer, msg, _FILEINFO_);
     }
-// Temporarily removed spectral processing because it needs further work. 
-// 
-//    try {
-//      standardBandBin();
-//    } 
-//    catch (IException &e) {
-//      QString msg = "Unable to translate and export spectral information.";
-//      throw IException(e, IException::Programmer, msg, _FILEINFO_);
-//    }
+
+    try {
+      // <Product_Observational>
+      //   <Observation_Area>
+      //     <Discipline_Area>
+      //       <sp:Spectral_Characteristics> OR <img:Imaging>
+      standardBandBin();
+    } 
+    catch (IException &e) {
+      QString msg = "Unable to translate and export spectral information.";
+      throw IException(e, IException::Programmer, msg, _FILEINFO_);
+    }
 
     try { 
-      // <Discipline_Area>
-      // display settings, and cartography handled in this method:
+      // <Product_Observational>
+      //   <Observation_Area>
+      //     <Discipline_Area>
+      //       <card:Cartography>
       StandardAllMapping();
     }
     catch (IException &e) {
@@ -150,8 +182,9 @@ namespace Isis {
       throw IException(e, IException::Programmer, msg, _FILEINFO_);
     }
     try {
-      // file observation area
-      StandardImageImage();
+      // <Product_Observational>
+      //   <File_Area_Observational>
+      fileAreaObservational();
     }
     catch (IException &e) {
       QString msg = "Unable to translate and export standard image information.";
@@ -165,91 +198,137 @@ namespace Isis {
    * Instrument group to the PDS4 labels. 
    */
   void ProcessExportPds4::standardInstrument() {
-    Pvl *inputLabel = InputCubes[0]->label(); 
-    FileName transfile;
-
-    // Translate the Instrument group
-    transfile = "$base/translations/pds4ExportInstrument.trn";
-    PvlToXmlTranslationManager instXlator(*inputLabel, transfile.expanded());
-    instXlator.Auto(*m_domDoc);
-
-    // If instrument and spacecraft values were translated, create the combined name
-    QDomElement obsAreaNode = m_domDoc->documentElement().firstChildElement("Observation_Area");
-
-    if ( !obsAreaNode.isNull() ) {
-
-      // fix start/stop times, if needed
-      QDomElement timeNode = obsAreaNode.firstChildElement("Time_Coordinates");
-      if (!timeNode.isNull()) {
-        QDomElement startTime = timeNode.firstChildElement("start_date_time");
-        if (startTime.text() == "") {
-          startTime.setAttribute("xsi:nil", "true");
-        }
-        else {
-          QString timeValue = startTime.text();
-          PvlToXmlTranslationManager::resetElementValue(startTime, timeValue + "Z");
-        }
-        QDomElement stopTime  = timeNode.firstChildElement("stop_date_time"); 
-        if (stopTime.text() == "") {
-          stopTime.setAttribute("xsi:nil", "true");
-        }
-        else {
-          QString timeValue = stopTime.text();
-          PvlToXmlTranslationManager::resetElementValue(stopTime, timeValue + "Z");
+    Pvl *inputLabel = InputCubes[0]->label();
+    FileName translationFileName;
+
+    if (inputLabel->findObject("IsisCube").hasGroup("Instrument")) {
+      
+      // Translate the Instrument group
+      translationFileName = "$base/translations/pds4ExportInstrument.trn";
+      PvlToXmlTranslationManager instXlator(*inputLabel, translationFileName.expanded());
+      instXlator.Auto(*m_domDoc);
+      
+      // If instrument and spacecraft values were translated, create the combined name
+      QDomElement obsAreaNode = m_domDoc->documentElement().firstChildElement("Observation_Area");
+      
+      if ( !obsAreaNode.isNull() ) {
+      
+        // fix start/stop times, if needed
+        QDomElement timeNode = obsAreaNode.firstChildElement("Time_Coordinates");
+        if (!timeNode.isNull()) {
+          QDomElement startTime = timeNode.firstChildElement("start_date_time");
+          if (startTime.text() == "") {
+            startTime.setAttribute("xsi:nil", "true");
+          }
+          else {
+            QString timeValue = startTime.text();
+            PvlToXmlTranslationManager::resetElementValue(startTime, timeValue + "Z");
+          }
+          QDomElement stopTime  = timeNode.firstChildElement("stop_date_time"); 
+          if (stopTime.text() == "") {
+            stopTime.setAttribute("xsi:nil", "true");
+          }
+          else {
+            QString timeValue = stopTime.text();
+            PvlToXmlTranslationManager::resetElementValue(stopTime, timeValue + "Z");
+          }
+      
         }
-
-      }
-
-      QDomElement obsSysNode = obsAreaNode.firstChildElement("Observing_System");
-      if ( !obsSysNode.isNull() ) {
-        QString instrumentName;
-        QString spacecraftName;
-        QDomElement obsSysCompNode = obsSysNode.firstChildElement("Observing_System_Component");
-        while ( !obsSysCompNode.isNull()) {
-          QDomElement compTypeNode = obsSysCompNode.firstChildElement("type");
-          if ( compTypeNode.text().compare("Spacecraft") == 0 ) {
-            QString componentName = obsSysCompNode.firstChildElement("name").text();
-            if (QString::compare(componentName, "TBD", Qt::CaseInsensitive) != 0) {
-              spacecraftName = componentName; 
+      
+        QDomElement obsSysNode = obsAreaNode.firstChildElement("Observing_System");
+        if ( !obsSysNode.isNull() ) {
+          QString instrumentName;
+          QString spacecraftName;
+          QDomElement obsSysCompNode = obsSysNode.firstChildElement("Observing_System_Component");
+          while ( !obsSysCompNode.isNull()) {
+            QDomElement compTypeNode = obsSysCompNode.firstChildElement("type");
+            if ( compTypeNode.text().compare("Spacecraft") == 0 ) {
+              QString componentName = obsSysCompNode.firstChildElement("name").text();
+              if (QString::compare(componentName, "TBD", Qt::CaseInsensitive) != 0) {
+                spacecraftName = componentName; 
+              }
             }
-          }
-          else if ( compTypeNode.text().compare("Instrument") == 0 ) {
-            QString componentName = obsSysCompNode.firstChildElement("name").text();
-            if (QString::compare(componentName, "TBD", Qt::CaseInsensitive) != 0) {
-              instrumentName = componentName;
+            else if ( compTypeNode.text().compare("Instrument") == 0 ) {
+              QString componentName = obsSysCompNode.firstChildElement("name").text();
+              if (QString::compare(componentName, "TBD", Qt::CaseInsensitive) != 0) {
+                instrumentName = componentName;
+              }
             }
+            obsSysCompNode = obsSysCompNode.nextSiblingElement("Observing_System_Component");
           }
-          obsSysCompNode = obsSysCompNode.nextSiblingElement("Observing_System_Component");
-        }
-        QDomElement combinedNode = m_domDoc->createElement("name");
-        QString combinedValue = "TBD";
-        if ( !instrumentName.isEmpty() && !spacecraftName.isEmpty() ) {
-          combinedValue = spacecraftName + " " + instrumentName;
+          QDomElement combinedNode = m_domDoc->createElement("name");
+          QString combinedValue = "TBD";
+          if ( !instrumentName.isEmpty() && !spacecraftName.isEmpty() ) {
+            combinedValue = spacecraftName + " " + instrumentName;
+          }
+          combinedNode.appendChild( m_domDoc->createTextNode(combinedValue) );
+          obsSysNode.insertBefore( combinedNode, obsSysNode.firstChild() );
         }
-        combinedNode.appendChild( m_domDoc->createTextNode(combinedValue) );
-        obsSysNode.insertBefore( combinedNode, obsSysNode.firstChild() );
       }
+      
+      // Translate the Target name
+      translationFileName = "$base/translations/pds4ExportTargetFromInstrument.trn"; 
+      PvlToXmlTranslationManager targXlator(*inputLabel, translationFileName.expanded());
+      targXlator.Auto(*m_domDoc);
+
+      // move target to just below Observing_System. 
+      QDomElement targetIdNode = obsAreaNode.firstChildElement("Target_Identification");
+      obsAreaNode.insertAfter(targetIdNode, obsAreaNode.firstChildElement("Observing_System"));
+
     }
+    else if (inputLabel->findObject("IsisCube").hasGroup("Mapping")) {
 
-    // Translate the Target name
-    try {
-      transfile = "$base/translations/pds4ExportTargetFromInstrument.trn"; 
-      PvlToXmlTranslationManager targXlator(*inputLabel, transfile.expanded());
+      translationFileName = "$base/translations/pds4ExportTargetFromMapping.trn"; 
+      PvlToXmlTranslationManager targXlator(*inputLabel, translationFileName.expanded());
       targXlator.Auto(*m_domDoc);
-    } 
-    catch (IException &e1) {
-      try {
-        transfile = "$base/translations/pds4ExportTargetFromMapping.trn"; 
-        PvlToXmlTranslationManager targXlator(*inputLabel, transfile.expanded());
-        targXlator.Auto(*m_domDoc);
-      }
-      catch (IException &e2) {
-        IException finalError(IException::Unknown, "Unable to find a target in input cube.", _FILEINFO_);
-        finalError.append(e1);
-        finalError.append(e2);
-        throw finalError;
-      }
+
     }
+    else {
+      throw IException(IException::Unknown, "Unable to find a target in input cube.", _FILEINFO_);
+    }
+  }
+
+
+  /**
+   * Allows mission specific programs to set logical_identifier 
+   * required for PDS4 labels. This value is added to the xml file 
+   * by the identificationArea() method. 
+   *  
+   * The input string should be colon separated string with 6 
+   * identifiers: 
+   *  
+   * <ol> 
+   *   <li> urn </li>
+   *   <li> space_agency (ususally nasa) </li>
+   *   <li> archiving_organization (usually pds) </li>
+   *   <li> bundle_id </li>
+   *   <li> collection_id </li>
+   *   <li> product_id </li>
+   * </ol> 
+   *  
+   * Example: 
+   * urn:esa:psa:em16_tgo_frd:data_raw:frd_raw_sc_d_20150625T133700-20150625T135700 
+   * 
+   * @author 2018-05-21 Jeannie Backer
+   * 
+   * @param lid The logical identifier value required for PDS4 
+   *            compliant labels.
+   */
+  void ProcessExportPds4::setLogicalId(QString lid) {
+    m_lid = lid;
+  }
+
+
+  /**
+   * Allows mission specific programs to use specified 
+   * versions of dictionaries. 
+   * 
+   * @author 2018-05-21 Jeannie Backer
+   *  
+   * @param schema The string of schema to be set.
+   */
+  void ProcessExportPds4::setSchemaLocation(QString schema) {
+    m_schemaLocation = schema;
   }
 
 
@@ -259,10 +338,46 @@ namespace Isis {
    */
   void ProcessExportPds4::identificationArea() {
     Pvl *inputLabel = InputCubes[0]->label(); 
-    FileName transfile;
-    transfile = "$base/translations/pds4ExportIdentificationArea.trn";
-    PvlToXmlTranslationManager xlator(*inputLabel, transfile.expanded());
+    FileName translationFileName;
+    translationFileName = "$base/translations/pds4ExportIdentificationArea.trn";
+    PvlToXmlTranslationManager xlator(*inputLabel, translationFileName.expanded());
     xlator.Auto(*m_domDoc);
+
+    if (m_lid.isEmpty()) {
+      m_lid = "urn:nasa:pds:TBD:TBD:TBD";
+    }
+
+    QDomElement identificationElement;
+    QStringList identificationPath;
+    identificationPath.append("Product_Observational");
+    identificationPath.append("Identification_Area");
+    try {
+      identificationElement = getElement(identificationPath);
+      if( identificationElement.isNull() ) {
+        throw IException(IException::Unknown, "", _FILEINFO_);
+      }
+    }
+    catch(IException &e) {
+      QString msg = "Could not find Identification_Area element "
+                    "to add modification history under.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    QDomElement lidElement = identificationElement.firstChildElement("logical_identifier");
+    PvlToXmlTranslationManager::resetElementValue(lidElement, m_lid);
+
+    // Get export history and add <Modification_History> element.
+    // These regular expressions match the pipe followed by the date from
+    // the Application::Version() return value.
+    QRegularExpression versionRegex(" \\| \\d{4}\\-\\d{2}\\-\\d{2}");
+    QString historyDescription = "Created PDS4 output product from ISIS cube with the "
+                                 + FileName(Application::Name()).baseName()
+                                 + " application from ISIS version "
+                                 + Application::Version().remove(versionRegex) + ".";
+    // This regular expression matches the time from the Application::DateTime return value.
+    QRegularExpression dateRegex("T\\d{2}:\\d{2}:\\d{2}");
+    QString historyDate = Application::DateTime().remove(dateRegex);
+    addHistory(historyDescription, historyDate);
   }
 
   
@@ -273,9 +388,9 @@ namespace Isis {
   void ProcessExportPds4::displaySettings() {
 
     Pvl *inputLabel = InputCubes[0]->label(); 
-    FileName transfile;
-    transfile = "$base/translations/pds4ExportDisplaySettings.trn";
-    PvlToXmlTranslationManager xlator(*inputLabel, transfile.expanded());
+    FileName translationFileName;
+    translationFileName = "$base/translations/pds4ExportDisplaySettings.trn";
+    PvlToXmlTranslationManager xlator(*inputLabel, translationFileName.expanded());
     xlator.Auto(*m_domDoc);
 
     // Add header info
@@ -291,35 +406,290 @@ namespace Isis {
   * 
   */
   void ProcessExportPds4::standardBandBin() {
-    // Spectra
+    Pvl *inputLabel = InputCubes[0]->label(); 
+    if ( !inputLabel->findObject("IsisCube").hasGroup("BandBin") ) return;
+    // Add header info
+    addSchema("PDS4_IMG_1900.sch", 
+              "PDS4_IMG_1900.xsd",
+              "xmlns:img", 
+              "http://pds.nasa.gov/pds4/img/v1"); 
+    
     // Get the input Isis cube label and find the BandBin group if it has one
-    Pvl *inputLabel = InputCubes[0]->label();
-    if(inputLabel->hasObject("IsisCube") &&
-        !(inputLabel->findObject("IsisCube").hasGroup("BandBin"))) return;
+    if (m_imageType == StandardImage) {
+      translateBandBinImage(*inputLabel);
+    }
+    else {
+      // Add header info
+      addSchema("PDS4_SP_1100.sch", 
+                "PDS4_SP_1100.xsd",
+                "xmlns:sp", 
+                "http://pds.nasa.gov/pds4/sp/v1");
+      if (m_imageType == UniformlySampledSpectrum) {
+        translateBandBinSpectrumUniform(*inputLabel);
+      }
+      else if (m_imageType == BinSetSpectrum) {
+        translateBandBinSpectrumBinSet(*inputLabel);
+      }
+    }
+  }
+
 
-    FileName transfile;
-    transfile = "$base/translations/pds4ExportBandBin.trn";
-    PvlToXmlTranslationManager xlator(*inputLabel, transfile.expanded());
+  /**
+   * Export BandBin group for 2D or 3D Image format.
+   */
+  void ProcessExportPds4::translateBandBinImage(Pvl &inputLabel) {
+    QString translationFile = "$base/translations/";
+    translationFile += "pds4ExportBandBinImage.trn";
+    FileName translationFileName(translationFile);
+    PvlToXmlTranslationManager xlator(inputLabel, translationFileName.expanded());
     xlator.Auto(*m_domDoc);
+  }
 
-    // Add header info
-    addSchema("PDS4_SP_1100.sch", 
-              "PDS4_SP_1100.xsd",
-              "xmlns:sp", 
-              "http://pds.nasa.gov/pds4/sp/v1"); 
+
+  /**
+   * Export BandBin group for uniformly spaced 3D Spectral data format.
+   */
+  void ProcessExportPds4::translateBandBinSpectrumUniform(Pvl &inputLabel) {
+    QString translationFile = "$base/translations/";
+    translationFile += "pds4ExportBandBinSpectrumUniform.trn";
+    FileName translationFileName(translationFile);
+    PvlToXmlTranslationManager xlator(inputLabel, translationFileName.expanded());
+    xlator.Auto(*m_domDoc);
+
+    PvlGroup bandBinGroup = inputLabel.findObject("IsisCube").findGroup("BandBin");
+    // fix multi-valued bandbin info
+    QStringList xmlPath;
+    xmlPath << "Product_Observational"
+            << "Observation_Area"
+            << "Discipline_Area"
+            << "sp:Spectral_Characteristics";
+    QDomElement baseElement = m_domDoc->documentElement();
+    QDomElement spectralCharElement = getElement(xmlPath, baseElement);
+
+    // Axis_Bin_Set for variable bin widths
+    // required - bin_sequence_number, center_value, bin_width
+    // optional - detector_number, grating_position, original_bin_number, scaling_factor, value_offset, Filter
+    // ... see schema for more...
+    PvlKeyword center;
+    if (bandBinGroup.hasKeyword("Center")) {
+      center = bandBinGroup["Center"];
+    }
+    else if (bandBinGroup.hasKeyword("FilterCenter")) {
+      center = bandBinGroup["FilterCenter"];
+    }
+    else {
+      QString msg = "Unable to translate BandBin info for BinSetSpectrum. "
+                    "Translation for PDS4 required value [center_value] not found.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    PvlKeyword width;
+    if (bandBinGroup.hasKeyword("Width")) {
+      width = bandBinGroup["Width"];
+    }
+    else if (bandBinGroup.hasKeyword("FilterWidth")) {
+      width = bandBinGroup["FilterWidth"];
+    }
+    else {
+      QString msg = "Unable to translate BandBin info for BinSetSpectrum. "
+                    "Translation for PDS4 required value [bin_width] not found.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    QString units = center.unit();
+
+    if (!width.unit().isEmpty() ) {
+      if (units.isEmpty()) {
+        units = width.unit();
+      }
+      if (units.compare(width.unit(), Qt::CaseInsensitive) != 0) {
+        QString msg = "Unable to translate BandBin info for BinSetSpectrum. "
+                      "Unknown or unmatching units for [center_value] and [bin_width].";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
+    }
+
+    PvlKeyword originalBand;
+    if (bandBinGroup.hasKeyword("OriginalBand")) {
+      originalBand = bandBinGroup["OriginalBand"];
+    }
+    PvlKeyword name;
+    if (bandBinGroup.hasKeyword("Name")) {
+      name = bandBinGroup["Name"];
+    }
+    else if (bandBinGroup.hasKeyword("FilterName")) {
+      name = bandBinGroup["FilterName"];
+    }
+    else if (bandBinGroup.hasKeyword("FilterId")) {
+      name = bandBinGroup["FilterId"];
+    }
+    PvlKeyword number;
+    if (bandBinGroup.hasKeyword("Number")) {
+      number = bandBinGroup["Number"];
+    }
+    else if (bandBinGroup.hasKeyword("FilterNumber")) {
+      number = bandBinGroup["FilterNumber"];
+    }
+
+    QDomElement axisBinSetElement = spectralCharElement.firstChildElement("sp:Axis_Bin_Set");
+    if (axisBinSetElement.isNull()) {
+      axisBinSetElement = m_domDoc->createElement("sp:Axis_Bin_Set");
+      spectralCharElement.appendChild(axisBinSetElement);
+    }
+    int bands = (int)inputLabel.findObject("IsisCube")
+                                .findObject("Core")
+                                .findGroup("Dimensions")
+                                .findKeyword("Bands");
+
+    for (int i = 0; i < bands; i++) {
+
+      QDomElement bin = m_domDoc->createElement("sp:Bin");
+      axisBinSetElement.appendChild(bin);
+
+      QDomElement binSequenceNumber = m_domDoc->createElement("sp:bin_sequence_number");
+      PvlToXmlTranslationManager::setElementValue(binSequenceNumber, toString(i+1));
+      bin.appendChild(binSequenceNumber);
+
+
+      QDomElement centerValue = m_domDoc->createElement("sp:center_value");
+      PvlToXmlTranslationManager::setElementValue(centerValue, center[i], units);
+      bin.appendChild(centerValue);
+
+      QDomElement binWidth = m_domDoc->createElement("sp:bin_width");
+      if (width.size() == bands) {
+        PvlToXmlTranslationManager::setElementValue(binWidth, width[i] , units);
+      }
+      else {
+        PvlToXmlTranslationManager::setElementValue(binWidth, width[0] , units);
+      }
+      bin.appendChild(binWidth);
+
+      QDomElement originalBinNumber = m_domDoc->createElement("sp:original_bin_number");
+      if (originalBand.size() > 0) {
+        PvlToXmlTranslationManager::setElementValue(originalBinNumber, originalBand[i]);
+        bin.appendChild(originalBinNumber);
+      }
+
+      if (name.size() > 0 || number.size() > 0) {
+        QDomElement filter = m_domDoc->createElement("sp:Filter");
+        bin.appendChild(filter);
+        if (name.size() > 0) {
+          QDomElement filterName = m_domDoc->createElement("sp:filter_name");
+          PvlToXmlTranslationManager::setElementValue(filterName, name[i]);
+          filter.appendChild(filterName);
+        }
+        if (number.size() > 0) {
+          QDomElement filterNumber= m_domDoc->createElement("sp:filter_number");
+          PvlToXmlTranslationManager::setElementValue(filterNumber, number[i]);
+          filter.appendChild(filterNumber);
+        }
+      }
+    }
+    
   }
 
 
   /**
-   * Create and internalize a standard image output label from the input image. 
-   * @todo determine whether to treat single band as 2d array
+   * Export BandBin group for non-uniformly spaced 3D Spectral data format.
    */
-  void ProcessExportPds4::StandardImageImage() {
+  void ProcessExportPds4::translateBandBinSpectrumBinSet(Pvl &inputLabel) {
+    QString translationFile = "$base/translations/";
+    translationFile += "pds4ExportBandBinSpectrumBinSet.trn";
+    FileName translationFileName(translationFile);
+    PvlToXmlTranslationManager xlator(inputLabel, translationFileName.expanded());
+    xlator.Auto(*m_domDoc);
+
+    PvlGroup bandBinGroup = inputLabel.findObject("IsisCube").findGroup("BandBin");
+    // fix multi-valued bandbin info
+    QStringList xmlPath;
+    xmlPath << "Product_Observational"
+            << "Observation_Area"
+            << "Discipline_Area"
+            << "sp:Spectral_Characteristics";
+    QDomElement baseElement = m_domDoc->documentElement();
+    QDomElement spectralCharElement = getElement(xmlPath, baseElement);
+
+    // Axis_Uniformly_Sampled
+    // required - sampling_parameter_type (frequency, wavelength, wavenumber)
+    //            sampling_interval (units Hz, Angstrom, cm**-1, respectively)
+    //            bin_width  (units Hz, Angstrom, cm**-1, respectively)
+    //            first_center_value  (units Hz, Angstrom, cm**-1, respectively)
+    //            last_center_value  (units Hz, Angstrom, cm**-1, respectively) 
+    //            Local_Internal_Reference 
+    //            Local_Internal_Reference:local_reference_type = spectral_characteristics_to_array_axis
+    //            Local_Internal_Reference:local_identifier_reference, 
+    //                1. At least one Axis_Array:axis_name must match the 
+    //                   value of the local_identifier_reference in the 
+    //                   Axis_Uniformly_Sampled.
+    //                   Set Axis_Uniformly_Sampled:local_identifier_reference = Axis_Array:axis_name = Band
+    //                2. At least one Array_3D_Spectrum:local_identifier must match 
+    //                   the value of the local_identifier_reference in the
+    //                   Spectral_Characteristics.
+    //                   Set Spectral_Characteristics:local_identifier_reference = Array_3D_Spectrum:local_identifier = Spectral_Array_Object
+    //            Local_Internal_Reference:local_reference_type = spectral_characteristics_to_array_axis
+    PvlKeyword center("Center");
+    if (bandBinGroup.hasKeyword("FilterCenter")) {
+      center = bandBinGroup["FilterCenter"];
+    }
+    else if (bandBinGroup.hasKeyword("Center")) {
+      center = bandBinGroup["Center"];
+    }
+    else {
+      QString msg = "Unable to translate BandBin info for UniformlySpacedSpectrum. "
+                    "Translation for PDS4 required value [last_center_value] not found.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    QString lastCenter = center[center.size() - 1];
+
+    QDomElement axisBinSetElement = spectralCharElement.firstChildElement("sp:Axis_Uniformly_Sampled");
+    if (axisBinSetElement.isNull()) {
+      axisBinSetElement = m_domDoc->createElement("sp:Axis_Uniformly_Sampled");
+      spectralCharElement.appendChild(axisBinSetElement);
+    }
+
+    QDomElement lastCenterElement = m_domDoc->createElement("sp:last_center_value");
+    PvlToXmlTranslationManager::setElementValue(lastCenterElement, lastCenter);
+    spectralCharElement.appendChild(lastCenterElement);
+    
+  }
+
+
+  /**
+   * Create and internalize an image output label from the input 
+   * image. This method has a similar function to 
+   * ProcessExportPds::StandardImageImage. 
+   */
+  void ProcessExportPds4::fileAreaObservational() {
     Pvl *inputLabel = InputCubes[0]->label(); 
-    FileName transfile;
+    QString imageObject = "";
+
+    QString translationFile = "$base/translations/pds4Export";
+    if (m_imageType == StandardImage) {
+      int bands = (int)inputLabel->findObject("IsisCube")
+                                  .findObject("Core")
+                                  .findGroup("Dimensions")
+                                  .findKeyword("Bands");
+      if (bands > 1) {
+        imageObject = "Array_3D_Image";
+      }
+      else {
+        imageObject = "Array_2D_Image";
+      }
+      translationFile += QString(imageObject).remove('_');
+    }
+    else {
+      imageObject = "Array_3D_Spectrum";
+      translationFile += QString(imageObject).remove('_');
+      if (m_imageType == UniformlySampledSpectrum) {
+        translationFile += "Uniform";
+      }
+      else if (m_imageType == BinSetSpectrum) {
+        translationFile += "BinSet";
+      }
+    }
+    translationFile += ".trn";
+    FileName translationFileName(translationFile);
 
-    transfile = "$base/translations/pds4ExportArray3DImage.trn"; 
-    PvlToXmlTranslationManager xlator(*inputLabel, transfile.expanded());
+    PvlToXmlTranslationManager xlator(*inputLabel, translationFileName.expanded());
     xlator.Auto(*m_domDoc);
 
     QDomElement rootElement = m_domDoc->documentElement();
@@ -350,15 +720,14 @@ namespace Isis {
     }
 
     if (!fileAreaObservationalElement.isNull()) {
-      QDomElement array3DImageElement =
-                      fileAreaObservationalElement.firstChildElement("Array_3D_Image");
-
-      if (!array3DImageElement.isNull()) {
+      QDomElement arrayImageElement =
+                      fileAreaObservationalElement.firstChildElement(imageObject);
+      if (!arrayImageElement.isNull()) {
 
         // reorder axis elements. 
         // Translation order:  elements, axis_name, sequence_number
         // Correct order:      axis_name, elements, sequence_number
-        QDomElement axisArrayElement = array3DImageElement.firstChildElement("Axis_Array");
+        QDomElement axisArrayElement = arrayImageElement.firstChildElement("Axis_Array");
         while( !axisArrayElement.isNull() ) {
           QDomElement axisNameElement = axisArrayElement.firstChildElement("axis_name");
           axisArrayElement.insertBefore(axisNameElement, 
@@ -367,8 +736,8 @@ namespace Isis {
         }
 
         QDomElement elementArrayElement = m_domDoc->createElement("Element_Array");
-        array3DImageElement.insertBefore(elementArrayElement,
-                                         array3DImageElement.firstChildElement("Axis_Array"));
+        arrayImageElement.insertBefore(elementArrayElement,
+                                         arrayImageElement.firstChildElement("Axis_Array"));
 
         QDomElement dataTypeElement = m_domDoc->createElement("data_type");
         PvlToXmlTranslationManager::setElementValue(dataTypeElement,
@@ -404,7 +773,7 @@ namespace Isis {
     xmlModel +=  xmlnsURI;
     xmlModel +=  "/";
     xmlModel +=  sch;
-    xmlModel += "\" schemetypens=\"http://purl.oclc.org/dsdl/schematron\"";
+    xmlModel += "\" schematypens=\"http://purl.oclc.org/dsdl/schematron\"";
     QDomProcessingInstruction header =
         m_domDoc->createProcessingInstruction("xml-model", xmlModel);
     m_domDoc->insertAfter(header, m_domDoc->firstChild());
@@ -468,8 +837,8 @@ namespace Isis {
   /**
    * This method write out the labels and image data to the specified output file.
    * Creates an IMG and XML file.
-   *
-   * @param outFile QString of the name of the output file. Will create an XML 
+   * 
+   * @param outFile QString of the name of the output image file. Will create an XML 
    *        and an IMG file with the output file name.
    *
    */
@@ -477,10 +846,20 @@ namespace Isis {
     
     FileName outputFile(outFile);
 
+    // Name for output label
     QString path(outputFile.originalPath());
     QString name(outputFile.baseName());
     QString labelName = path + "/" + name + ".xml";
 
+    // Name for output image
+    QString imageName = outputFile.expanded();
+
+    // If input file ends in .xml, the user entered a label name for the output file, not an
+    // image name with a unique file extension. 
+    if (QString::compare(outputFile.extension(), "xml", Qt::CaseInsensitive) == 0) {
+      imageName = path + "/" + name + ".img";
+    }
+
     QDomElement rootElement = m_domDoc->documentElement();
     QDomElement fileAreaObservationalElement =
                     rootElement.firstChildElement("File_Area_Observational");
@@ -497,13 +876,13 @@ namespace Isis {
 //    PvlToXmlTranslationManager::setElementValue(creationElement, );
 //    fileElement.appendChild(creationElement);
 
-    ofstream oLabel(labelName.toLatin1().data());
-    OutputLabel(oLabel);
-    oLabel.close();
+    ofstream outputLabel(labelName.toLatin1().data());
+    OutputLabel(outputLabel);
+    outputLabel.close();
     
-    ofstream oCube(outputFile.expanded().toLatin1().data());
-    StartProcess(oCube);
-    oCube.close();
+    ofstream outputImageFile(imageName.toLatin1().data());
+    StartProcess(outputImageFile);
+    outputImageFile.close();
 
     EndProcess();
   }
@@ -743,9 +1122,18 @@ namespace Isis {
     // Create the "Modification_Detail" element and add it to the end of the
     // "Modification_History" element.
     QDomElement detailElement = m_domDoc->createElement("Modification_Detail");
-    detailElement.setAttribute("description", description);
-    detailElement.setAttribute("modification_date", date);
-    detailElement.setAttribute("version_id", version);
+
+    QDomElement modDateElement = m_domDoc->createElement("modification_date");
+    PvlToXmlTranslationManager::setElementValue(modDateElement, date);
+    detailElement.appendChild(modDateElement);
+
+    QDomElement versionIdElement = m_domDoc->createElement("version_id");
+    PvlToXmlTranslationManager::setElementValue(versionIdElement, version);
+    detailElement.appendChild(versionIdElement);
+
+    QDomElement descriptionElement = m_domDoc->createElement("description");
+    PvlToXmlTranslationManager::setElementValue(descriptionElement, description);
+    detailElement.appendChild(descriptionElement);
 
     historyElement.insertAfter( detailElement,
                                 historyElement.lastChildElement() );
diff --git a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h
index 35da6988122c573a4196701394cab70a3de4a15a..8dd72fdbdc5d80827ad84f4f1c77bfa72bc50a63 100644
--- a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h
+++ b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h
@@ -67,7 +67,14 @@ namespace Isis {
    *   @history 2017-11-20 Jeannie Backer - Updated StandardImageImage() to re-order the
    *                           Array_3D_Image values properly.
    *   @history 2017-11-21 Kristin Berry - Updated the constructor to add the xml version and 
-   *                           encoding to the beginning of the XML file. 
+   *                           encoding to the beginning of the XML file.
+   *   @history 2018-02-05 Kristin Berry - Updated WritePds4 to remove the .xml and add a .img
+   *                           if the user inputs something of the form filename.xml as the image
+   *                           output name. 
+   *   @history 2018-05-16 Christopher Combs - Fixed typo in xml namespaces and changed History 
+   *                           attributes to elements. Matches pds validate tool specifations.
+   *   @history 2018-06-12 Kristin Berry - Added schema associated with the img class when it is
+   *                           used.
    */
 
   class ProcessExportPds4: public Isis::ProcessExport {
@@ -76,7 +83,14 @@ namespace Isis {
       ProcessExportPds4();
       ~ProcessExportPds4();
 
+      enum ImageType {
+        StandardImage,
+        BinSetSpectrum,
+        UniformlySampledSpectrum
+      };
+
       QDomDocument &StandardPds4Label();
+      QDomDocument &SpectralPds4Label();
       void StandardAllMapping();
 
       void CreateImageLabel();
@@ -93,22 +107,31 @@ namespace Isis {
       void WritePds4(QString outFile);
       QDomElement getElement(QStringList xmlPath, QDomElement parent=QDomElement());
       void addHistory(QString description, QString date = "tbd", QString version = "1.0");
+      void setLogicalId(QString lid);
+      void setSchemaLocation(QString schema);
+      void setImageType(ImageType imageType);
 
       static void translateUnits(QDomDocument &label,
                                  QString transMapFile = "$base/translations/pds4ExportUnits.pvl");
 
-    protected:
       void addSchema(QString sch, QString xsd, QString xmlns, QString xmlnsURI) ;
+    protected:
       void identificationArea();
       void standardInstrument();
       void standardBandBin(); 
       void displaySettings();
+      void fileAreaObservational();
       QString PDS4PixelType(PixelType pixelType, ByteOrder endianType);
       static QMap<QString, QString> createUnitMap(Pvl configPvl);
       static void translateChildUnits(QDomElement parent, QMap<QString, QString> transMap);
+      void translateBandBinImage(Pvl &inputLabel);
+      void translateBandBinSpectrumUniform(Pvl &inputLabel);
+      void translateBandBinSpectrumBinSet(Pvl &inputLabel);
 
-      QDomDocument *m_domDoc;               //!< XML label
-      QString m_schemaLocation;             //!< QString with all schema locations required
+      QDomDocument *m_domDoc;               //!< XML label.
+      QString m_schemaLocation;             //!< QString with all schema locations required.
+      QString m_lid;                        //!< QString with specified logical identifier.
+      ImageType m_imageType;                //!< Type of image data to be written.
 
   };
 }
diff --git a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth
index 70ddaf8ab2291c7a0e024b9247d219d7959cc18f..e0790d4ec5dc2502341d07a33dcb55f25615cd0b 100644
--- a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth
+++ b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth
@@ -2,15 +2,16 @@ Testing ProcessExportPds4
 
 Testing default object
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational/>
 
-Testing defaulte CaSSIS export
+Testing default CaSSIS export
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Element_Array>
     <data_type>IEEE754LSBSingle</data_type>
@@ -18,8 +19,8 @@ Testing defaulte CaSSIS export
     <value_offset>0.0</value_offset>
    </Element_Array>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -27,21 +28,15 @@ Testing defaulte CaSSIS export
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
-unittest: Exporting
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Element_Array>
     <data_type>IEEE754LSBSingle</data_type>
@@ -49,8 +44,8 @@ unittest: Exporting
     <value_offset>0.0</value_offset>
    </Element_Array>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -58,23 +53,19 @@ unittest: Exporting
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
-unittest: Exporting
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
+
+Testing xml input
 
 Testing export pixel types
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Element_Array>
     <data_type>SignedMSB2</data_type>
@@ -82,8 +73,8 @@ Testing export pixel types
     <value_offset>0.0</value_offset>
    </Element_Array>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -91,24 +82,21 @@ Testing export pixel types
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -116,25 +104,23 @@ Testing export pixel types
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -142,26 +128,25 @@ Testing export pixel types
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -169,27 +154,27 @@ Testing export pixel types
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -197,28 +182,29 @@ Testing export pixel types
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -226,23 +212,17 @@ Testing export pixel types
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 
 Testing missing start and end times
-unittest: Exporting
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/img/v1/PDS4_IMG_1900.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Element_Array>
     <data_type>IEEE754LSBSingle</data_type>
@@ -250,8 +230,8 @@ unittest: Exporting
     <value_offset>0.0</value_offset>
    </Element_Array>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2048</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -259,23 +239,18 @@ unittest: Exporting
     <elements>254</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2048</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 
 Testing exporting a map projected product
 
 <?xml version="1.0" encoding="utf-8"?>
-<?xml-model href="http://pds.nasa.gov/pds4/cart/v1/PDS4_CART_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
-<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schemetypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/cart/v1/PDS4_CART_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1700.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
+<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
 <Product_Observational>0</offset>
-   <axes>3</axes>
+   <axes>2</axes>
    <axis_index_order>Last Index Fastest</axis_index_order>
    <Element_Array>
     <data_type>IEEE754LSBSingle</data_type>
@@ -283,8 +258,8 @@ Testing exporting a map projected product
     <value_offset>0.0</value_offset>
    </Element_Array>
    <Axis_Array>
-    <axis_name>Band</axis_name>
-    <elements>1</elements>
+    <axis_name>Sample</axis_name>
+    <elements>2371</elements>
     <sequence_number>1</sequence_number>
    </Axis_Array>
    <Axis_Array>
@@ -292,12 +267,7 @@ Testing exporting a map projected product
     <elements>2371</elements>
     <sequence_number>2</sequence_number>
    </Axis_Array>
-   <Axis_Array>
-    <axis_name>Sample</axis_name>
-    <elements>2371</elements>
-    <sequence_number>3</sequence_number>
-   </Axis_Array>
-  </Array_3D_Image>
+  </Array_2D_Image>
  </File_Area_Observational>
 </Product_Observational>
 
@@ -315,6 +285,5 @@ Test adding a history to an empty label
 **PROGRAMMER ERROR** Could not find Identification_Area element to add modification history under.
 Test a missing target
 **PROGRAMMER ERROR** Unable to translate and export instrument information.
-**ERROR** Unable to find a target in input cube.
-**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [/usgs/cpkgs/isis3/data/base/translations/pds4ExportTargetFromMapping.trn].
-**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [/usgs/cpkgs/isis3/data/base/translations/pds4ExportTargetFromInstrument.trn].
+**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [base/translations/pds4ExportTargetFromInstrument.trn].
+
diff --git a/isis/src/base/objs/ProcessExportPds4/unitTest.cpp b/isis/src/base/objs/ProcessExportPds4/unitTest.cpp
index 60531804475ee83937db5da46a20c0b5746fca32..26309d75680955d6d65d9a825b3f159555db3412 100644
--- a/isis/src/base/objs/ProcessExportPds4/unitTest.cpp
+++ b/isis/src/base/objs/ProcessExportPds4/unitTest.cpp
@@ -10,12 +10,21 @@
 using namespace std;
 using namespace Isis;
 
-/**
- * @author 2017-05-30 Marjorie Hahn
+/** 
+ * Unit test for ProcessExportPds4 class
+ *  
+ * @author 2017-05-30 Marjorie Hahn 
+ *  
+ *  @internal
+ *   @history 2017-05-30 Marjorie Hahn - Original Version
+ *   @history 2016-12-28 Kristin Berry - Updated to test xml input. 
+ *   @history 2018-06-06 Jeannie Backer - Removed file paths from error message written to
+ *                           test output.
+ *  
  */
 void IsisMain() {
   Preference::Preferences(true);
-  
+
   try {
     std::cout << "Testing ProcessExportPds4" << std::endl << std::endl;
 
@@ -27,24 +36,24 @@ void IsisMain() {
     defaultLabel.remove(QRegExp(" xsi.*=\".*\""));
     std::cout << defaultLabel;
 
-    std::cout << std::endl << "Testing defaulte CaSSIS export" << std::endl;
+    std::cout << std::endl << "Testing default CaSSIS export" << std::endl;
 
     Isis::ProcessExportPds4 p;
-    
+
     QString cubeName = "$tgo/testData/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub";
-    
-    Isis::Cube cub; 
-    cub.open(cubeName, "r"); 
-    
+
+    Isis::Cube cub;
+    cub.open(cubeName, "r");
+
     p.SetInputCube(&cub);
-    
+
     // Remove the schema from the lable because we cannot ensure that
     // attributes come out in the same order every time
     QString rawLabel = p.StandardPds4Label().toString();
     rawLabel.remove(QRegExp(" xmlns.*=\".*\""));
     rawLabel.remove(QRegExp(" xsi.*=\".*\""));
     std::cout << rawLabel;
-             
+
     std::ofstream ofs;
     p.OutputLabel(ofs);
 
@@ -61,6 +70,13 @@ void IsisMain() {
     remove("temp.img");
     remove("temp.xml");
 
+    std::cout << std::endl << "Testing xml input" << std::endl; 
+    Isis::ProcessExportPds4 xmlTest;
+    xmlTest.SetInputCube(&cub);
+    xmlTest.WritePds4("tempxml.xml");
+    remove("tempxml.img");
+    remove("tempxml.xml");
+
     std::cout << std::endl << "Testing export pixel types" << std::endl;
 
     ProcessExportPds4 stretchProcess;
@@ -135,7 +151,7 @@ void IsisMain() {
     Cube projectedCube(projectedName);
     ProcessExportPds4 projectedProcess;
     projectedProcess.SetInputCube(&projectedCube);
- 
+
     QString projectedLabel = projectedProcess.StandardPds4Label().toString();
     projectedLabel.remove(QRegExp(" xmlns.*=\".*\""));
     projectedLabel.remove(QRegExp(" xsi.*=\".*\""));
@@ -186,7 +202,10 @@ void IsisMain() {
       testProcess.StandardPds4Label();
     }
     catch(Isis::IException &e) {
-      e.print();
+      QString message = e.toString();
+      cout << message.replace(QRegExp("file.*base/translations"), "file [base/translations");
+      cout << endl;
+      cout << endl;
     }
     instGroup.addKeyword( PvlKeyword("targetName", cassisTarget) );
   }
diff --git a/isis/src/base/objs/ProcessGroundPolygons/ProcessGroundPolygons.truth b/isis/src/base/objs/ProcessGroundPolygons/ProcessGroundPolygons.truth
index 8ee5b26287893323c09070ccf7423dceaa4064d8..3a8af0ac8e8b3d827522d1957891bc167f9eac6e 100644
--- a/isis/src/base/objs/ProcessGroundPolygons/ProcessGroundPolygons.truth
+++ b/isis/src/base/objs/ProcessGroundPolygons/ProcessGroundPolygons.truth
@@ -1,73 +1,63 @@
 Testing Isis::ProcessGroundPolygons Class ... 
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 File Name: ProcessGroundPolygonsTest.cub
-unittest: Working
-0% Processed
Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 
+Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 
 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.070946 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 
 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 
 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 
-10% Processed
Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 
+Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 
 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 
 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 
-20% Processed
Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 
+Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 
 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 
 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0674852 Band: 1 DN: 0.0657548 
-30% Processed
Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0744068 Band: 1 DN: 0.0726764 
+Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0761372 Band: 1 DN: 0.0744068 Band: 1 DN: 0.0726764 
 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0657548 Band: 1 DN: 0.0588333 
 Band: 1 DN: 0.0726764 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 
-40% Processed
Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 
+Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 Band: 1 DN: 0.0692156 
 Band: 1 DN: 0.0692156 
-50% Processed
Band: 2 DN: 0.121396 Band: 2 DN: 0.121396 Band: 2 DN: 0.121396 
+Band: 2 DN: 0.121396 Band: 2 DN: 0.121396 Band: 2 DN: 0.121396 
 Band: 2 DN: 0.126674 Band: 2 DN: 0.126674 Band: 2 DN: 0.110302 Band: 2 DN: 0.0939311 Band: 2 DN: 0.0939311 
 Band: 2 DN: 0.126674 Band: 2 DN: 0.126674 Band: 2 DN: 0.108787 Band: 2 DN: 0.0909011 Band: 2 DN: 0.0909011 Band: 2 DN: 0.0909011 Band: 2 DN: 0.0909011 
 Band: 2 DN: 0.126674 Band: 2 DN: 0.084841 Band: 2 DN: 0.083326 Band: 2 DN: 0.081811 Band: 2 DN: 0.081811 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 
-60% Processed
Band: 2 DN: 0.084841 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.0939311 Band: 2 DN: 0.0939311 
+Band: 2 DN: 0.084841 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.0939311 Band: 2 DN: 0.0939311 
 Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 
 Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.0909011 Band: 2 DN: 0.0909011 Band: 2 DN: 0.0909011 Band: 2 DN: 0.0909011 
-70% Processed
Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 
+Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 
 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.083326 Band: 2 DN: 0.081811 
 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.089386 Band: 2 DN: 0.0909011 Band: 2 DN: 0.089386 Band: 2 DN: 0.087871 
-80% Processed
Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.086356 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 
+Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.086356 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 
 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 Band: 2 DN: 0.086356 Band: 2 DN: 0.084841 Band: 2 DN: 0.086356 Band: 2 DN: 0.087871 
 Band: 2 DN: 0.087871 Band: 2 DN: 0.084841 Band: 2 DN: 0.086356 Band: 2 DN: 0.087871 Band: 2 DN: 0.087871 
-90% Processed
Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 
+Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 Band: 2 DN: 0.084841 
 Band: 2 DN: 0.084841 
-100% Processed
 File Name: ProcessGroundPolygonsTest_count.cub
-unittest: Working
-0% Processed
Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
+Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
-10% Processed
Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
+Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
+Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
-20% Processed
Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 
-30% Processed
Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 
+Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 
 Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 2 Band: 1 DN: 1 Band: 1 DN: 1 
-40% Processed
Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
+Band: 1 DN: 1 Band: 1 DN: 1 Band: 1 DN: 1 
 Band: 1 DN: 1 
-50% Processed
Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
+Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
-60% Processed
Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
+Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
+Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
-70% Processed
Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 
-80% Processed
Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 
+Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 
 Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 2 Band: 2 DN: 1 Band: 2 DN: 1 
-90% Processed
Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
+Band: 2 DN: 1 Band: 2 DN: 1 Band: 2 DN: 1 
 Band: 2 DN: 1 
-100% Processed
diff --git a/isis/src/base/objs/ProcessImport/ProcessImport.cpp b/isis/src/base/objs/ProcessImport/ProcessImport.cpp
index c6ccd306bdc488d40e98b29101ba3214d9fb2a4f..b1bf815fb56a4abb41017c8627bf9561ccbd5ace 100644
--- a/isis/src/base/objs/ProcessImport/ProcessImport.cpp
+++ b/isis/src/base/objs/ProcessImport/ProcessImport.cpp
@@ -279,7 +279,7 @@ namespace Isis {
 
     if ((type == Isis::Double) || (type == Isis::Real) || (type == Isis::SignedWord) ||
         (type == Isis::UnsignedWord) || (type == Isis::UnsignedByte) ||
-        (type == Isis::SignedInteger)) {
+        (type == Isis::SignedInteger) || type==Isis::UnsignedInteger) {
       p_pixelType = type;
     }
     else {
@@ -725,7 +725,7 @@ namespace Isis {
    * This method returns the number of data trailer bytes
    */
   int ProcessImport::DataTrailerBytes() const {
-    return p_dataTrailerBytes; 
+    return p_dataTrailerBytes;
   }
 
 
@@ -1226,6 +1226,11 @@ namespace Isis {
         min = Isis::IVALID_MIN4;
         max = Isis::IVALID_MAX4;
       }
+
+      else if (p_pixelType == Isis::UnsignedInteger) {
+        min = Isis::VALID_MINUI4;
+        max = Isis::VALID_MAXUI4;
+      }
       else if (p_pixelType == Isis::SignedWord) {
         min = Isis::VALID_MIN2 * p_mult[0] + p_base[0];
         max = Isis::VALID_MAX2 * p_mult[0] + p_base[0];
@@ -1480,6 +1485,10 @@ namespace Isis {
             case Isis::SignedInteger:
               (*out)[samp] = (double)swapper.Int((int *)in+samp);
               break;
+
+          case Isis::UnsignedInteger:
+            (*out)[samp] = (double)swapper.Uint32_t((unsigned int *)in+samp);
+            break;
             case Isis::Real:
               if(p_vax_convert) {
                 (*out)[samp]= VAXConversion( (float *)in+samp );
@@ -1733,6 +1742,9 @@ namespace Isis {
             case Isis::SignedInteger:
               (*out)[samp] = (double)swapper.Int((int *)in+samp);
               break;
+          case Isis::UnsignedInteger:
+            (*out)[samp] = (double)swapper.Uint32_t((unsigned int *)in+samp);
+            break;
             case Isis::Real:
               if(p_vax_convert) {
                 (*out)[samp]= VAXConversion( (float *)in+samp );
@@ -1847,11 +1859,6 @@ namespace Isis {
    */
   void ProcessImport::ProcessBip(void funct(Isis::Buffer &out)) {
 
-    // Figure out the number of bytes to read for a single line
-    int readBytes = Isis::SizeOf(p_pixelType);
-    readBytes = readBytes * p_ns * p_nb;
-    char *in = new char [readBytes];
-
     // Set up an Isis::EndianSwapper object
     QString tok(Isis::ByteOrderName(p_byteOrder));
     tok = tok.toUpper();
@@ -1902,6 +1909,11 @@ namespace Isis {
     p_progress->SetMaximumSteps(p_nl);
     p_progress->CheckStatus();
 
+    // Figure out the number of bytes to read for a single line
+    int sampleBytes = Isis::SizeOf(p_pixelType) * p_nb + p_dataPreBytes + p_dataPostBytes;
+    int readBytes = p_ns * sampleBytes;
+    char *in = new char [readBytes];
+
     // Loop for each line
     for(int line = 0; line < p_nl; line++) {
       // Check the last io
@@ -1915,16 +1927,6 @@ namespace Isis {
       // Space for storing prefix and suffix data pointers
       vector<char *> tempPre, tempPost;
 
-      // Handle any line prefix bytes
-      pos = fin.tellg();
-      if (p_saveDataPre) {
-        tempPre.push_back(new char[p_dataPreBytes]);
-        fin.read(tempPre.back(), p_dataPreBytes);
-      }
-      else {
-        fin.seekg(p_dataPreBytes, ios_base::cur);
-      }
-
       // Check the last io
       if (!fin.good()) {
         QString msg = "Cannot read file [" + p_inFile + "]. Position [" +
@@ -1960,31 +1962,35 @@ namespace Isis {
         // to special pixels
         int osamp = 0;
 
-        for(int samp = band; samp < p_ns * p_nb; samp += p_nb) {
+        for(int samp = 0; samp < p_ns; samp++) {
+          int bufferIndex = p_dataPreBytes + Isis::SizeOf(p_pixelType)*band + samp*sampleBytes;
           switch(p_pixelType) {
             case Isis::UnsignedByte:
-              (*out)[osamp] = (double)((unsigned char *)in)[samp];
+              (*out)[osamp] = (double)((unsigned char *)in)[bufferIndex];
               break;
             case Isis::UnsignedWord:
               (*out)[osamp] =
-                (double)swapper.UnsignedShortInt((unsigned short int *)in+samp);
+                (double)swapper.UnsignedShortInt(&in[bufferIndex]);
               break;
             case Isis::SignedWord:
-              (*out)[osamp] = (double)swapper.ShortInt((short int *)in+samp);
+              (*out)[osamp] = (double)swapper.ShortInt(&in[bufferIndex]);
               break;
             case Isis::SignedInteger:
-              (*out)[samp] = (double)swapper.Int((int *)in+samp);
-              break;
+              (*out)[samp] = (double)swapper.Int(&in[bufferIndex]);
+              break;            
+          case Isis::UnsignedInteger:
+            (*out)[samp] = (double)swapper.Uint32_t(&in[bufferIndex]);
+            break;
             case Isis::Real:
               if(p_vax_convert) {
-                (*out)[osamp]= VAXConversion( (float *)in+samp );
+                (*out)[osamp]= VAXConversion(&in[bufferIndex]);
               }
               else {
-                (*out)[osamp] = (double)swapper.Float((float *)in+samp);
+                (*out)[osamp] = (double)swapper.Float(&in[bufferIndex]);
               }
               break;
             case Isis::Double:
-              (*out)[osamp] = (double)swapper.Double((double *)in+samp);
+              (*out)[osamp] = (double)swapper.Double(&in[bufferIndex]);
               break;
             default:
               break;
@@ -2008,47 +2014,38 @@ namespace Isis {
           funct(*out);
         }
 
-        // Handle any line suffix bytes
-        pos = fin.tellg();
-        if (p_saveDataPost) {
-          tempPost.push_back(new char[p_dataPostBytes]);
-          fin.read(tempPost.back(), p_dataPostBytes);
-        }
-        else {
-          fin.seekg(p_dataPostBytes, ios_base::cur);
-        }
-
-        // Check the last io
-        if (!fin.good()) {
-          QString msg = "Cannot read file [" + p_inFile + "]. Position [" +
-                       toString((int)pos) + "]. Byte count [" +
-                       toString(p_dataPreBytes) + "]" ;
-          throw IException(IException::Io, msg, _FILEINFO_);
-        }
-
-
-        // Save off the prefix bytes vector
-        if (p_saveDataPre) {
-          p_dataPre.push_back(tempPre);
-          tempPre.clear();
-        }
+      } // End band loop
 
-        // Save off the suffix bytes vector
-        if (p_saveDataPost) {
-          p_dataPost.push_back(tempPost);
-          tempPost.clear();
+      // Handle record prefix and suffix
+      if (p_saveDataPre) {
+        for(int samp = 0; samp < p_ns; samp++) {
+          char *samplePrefix = new char[p_dataPreBytes];
+          memcpy(samplePrefix, &in[samp*sampleBytes], p_dataPreBytes);
+          tempPre.push_back(samplePrefix);
         }
-
-        // Check the last io
-        if (!fin.good()) {
-          QString msg = "Cannot read file [" + p_inFile + "]. Position [" +
-                       toString((int)pos) + "]. Byte count [" +
-                       toString(p_fileHeaderBytes) + "]" ;
-          throw IException(IException::Io, msg, _FILEINFO_);
+        p_dataPre.push_back(tempPre);
+        tempPre.clear();
+      }
+      if (p_saveDataPost) {
+        for(int samp = 0; samp < p_ns; samp++) {
+          char *sampleSuffix = new char[p_dataPostBytes];
+          int suffixIndex = p_dataPreBytes + Isis::SizeOf(p_pixelType)*p_nb + samp*sampleBytes;
+          memcpy(sampleSuffix, &in[suffixIndex], p_dataPostBytes);
+          tempPost.push_back(sampleSuffix);
         }
+        p_dataPost.push_back(tempPost);
+        tempPost.clear();
+      }
 
-      } // End band loop
+      // Check the last io
+      if (!fin.good()) {
+        QString msg = "Cannot read file [" + p_inFile + "]. Position [" +
+                     toString((int)pos) + "]. Byte count [" +
+                     toString(p_dataPreBytes) + "]" ;
+        throw IException(IException::Io, msg, _FILEINFO_);
+      }
 
+      // Handle the data trailer
       pos = fin.tellg();
       if (p_saveDataTrailer) {
         p_dataTrailer.push_back(new char[p_dataTrailerBytes]);
diff --git a/isis/src/base/objs/ProcessImport/ProcessImport.h b/isis/src/base/objs/ProcessImport/ProcessImport.h
index 1e47db453f8d68ae86fcfc2da5a27114102f6043..ca9c9d8b8602b8cbe6f3688eca2fcd8dd2f78681 100644
--- a/isis/src/base/objs/ProcessImport/ProcessImport.h
+++ b/isis/src/base/objs/ProcessImport/ProcessImport.h
@@ -150,8 +150,21 @@ namespace Isis {
    *                           imports. Brought code closer to coding standards.
    *   @history 2016-04-21 Makayla Shepherd - Added UnsignedWord pixel type handling.
    *   @history 2017-05-29 Kristin Berry - Added support for data trailers in BIP files and fixed
-   *                            a typo so that DataTrailerBytes() will return the correct value.
-   *                            References #3888.
+   *                           a typo so that DataTrailerBytes() will return the correct value.
+   *                           References #3888.
+   *   @history 2018-05-01 Jesse Mapel - Changed data suffix and prefix in BIP files. Previously,
+   *                           data suffixes and prefixes were for each band before/after each line.
+   *                           Now, data suffixes and prefixes are before/after each sample. For a
+   *                           RGB, 3-band image with n samples a line of data was previously
+   *                           | Header | R prefix | G prefix | B prefix | R 1 | G 1 | B 1| ...
+   *                           | R n | G n | B n| R suffix | G suffix | B suffix | Trailer |. Now
+   *                           it is | Header | Prefix 1 | R 1 | G 1 | B 1 | Suffix 1 | ...
+   *                           | Prefix n | R n | G n | B n | Suffix n | Trailer |. This change
+   *                           was made to accomodate Rosetta VIRTIS-m calibrated data files and
+   *                           has no impact on other supported BIP files.
+   *                           Fixes #5398.
+   *   @history 208-07-19 Tyler Wilson - Added support for 4-byte UnsignedInteger special pixel
+   *                            values.
    *
    */
   class ProcessImport : public Isis::Process {
diff --git a/isis/src/base/objs/ProcessImport/ProcessImport.truth b/isis/src/base/objs/ProcessImport/ProcessImport.truth
index 4f73c65371f381c787b060cfb02f8b4ae5381a28..94a38b07f50a7b3ec2d1d90613094f1d84af9c2b 100644
--- a/isis/src/base/objs/ProcessImport/ProcessImport.truth
+++ b/isis/src/base/objs/ProcessImport/ProcessImport.truth
@@ -1,17 +1,9 @@
 Testing ProcessImport Class ... 
-unittest: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 Average: 0
 
 Variance: 3.69653e+38
 
-unittest: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Check the settings of the special pixel ranges
 
 **USER ERROR** The LRS range [35.0,55.0] overlaps the NULL range [0.0,45.0].
@@ -27,9 +19,5 @@ Check the settings of the special pixel ranges
 
 
 Testing ProcessBil()
-unittest: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 Testing ProcessBip()
-unittest: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
diff --git a/isis/src/base/objs/ProcessImport/unitTest.cpp b/isis/src/base/objs/ProcessImport/unitTest.cpp
index fd699449acd05af6f52264b95c2b43c09b352631..1cbf6a8448ae27738fb4777f97ea8b681f613880 100644
--- a/isis/src/base/objs/ProcessImport/unitTest.cpp
+++ b/isis/src/base/objs/ProcessImport/unitTest.cpp
@@ -78,11 +78,11 @@ void IsisMain() {
   core_cub.StartProcess();
   core_cub.EndProcess();
 
- 
+
 
   ProcessImport suffix_cub;
-  
-  
+
+
   suffix_cub.SetInputFile("$base/testData/30i001ci.qub");
   QString suffixFile = Application::GetUserInterface().GetFileName("SUFFIX_CUBE");
   suffix_cub.SetVAXConvert(true);
@@ -101,11 +101,11 @@ void IsisMain() {
   suffix_cub.SetOrganization(ProcessImport::BSQ);
   suffix_cub.SetOutputCube("SUFFIX_CUBE");
 
-  suffix_cub.SetSuffixOffset(47,46,12,4);  
+  suffix_cub.SetSuffixOffset(47,46,12,4);
 
   suffix_cub.StartProcess();
   suffix_cub.EndProcess();
- 
+
 
 
 
@@ -120,28 +120,28 @@ void IsisMain() {
   try { // Should NOT throw an error
     pNull.SetNull(0.0, 45.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
   try { // Should throw an error
     pNull.SetLRS(35.0, 55.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
   try { // Should NOT throw an error
     pNull.SetLIS(50.0, 52.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
   try { // Should throw an error
     pNull.SetHRS(-10.0, 5.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
@@ -151,35 +151,35 @@ void IsisMain() {
   try { // Should throw an error
     pLRS.SetNull(35.0, 55.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
   try { // Should throw an error
     pNull.SetLIS(0.0, 15.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
   try { // Should throw an error
     pLRS.SetHIS(-10.0, 155.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
   try { // Should NOT throw an error
     pLRS.SetHIS(145.0, 155.0);
   }
-  catch(IException e) {
+  catch(IException &e) {
     cout << e.toString() << endl;
   }
   cout << endl;
 
   cout << "Testing ProcessBil()" << endl;
   ProcessImport p3;
- 
+
   p3.SetInputFile("$base/testData/isisTruth.dat");
   p3.SetBase(0.0);
   p3.SetMultiplier(1.0);
diff --git a/isis/src/base/objs/ProcessImportPds/ProcessImportPds.truth b/isis/src/base/objs/ProcessImportPds/ProcessImportPds.truth
index 2d396c5416ef04c0f9f1d2b4ce7bc1af76d82420..5ebab8e2c1801ec9bf5ddd55e1cc788d8af3396c 100644
--- a/isis/src/base/objs/ProcessImportPds/ProcessImportPds.truth
+++ b/isis/src/base/objs/ProcessImportPds/ProcessImportPds.truth
@@ -1,6 +1,4 @@
 Testing PDS file containing an ^IMAGE pointer
-isisimportpds: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 PDS_VERSION_ID                 = PDS3
 
 /* FILE DATA ELEMENTS */
@@ -440,8 +438,6 @@ Group = SITE_DERIVED_GEOMETRY_PARMS
   SOLAR_ELEVATION              = -74.5811 <deg>
 End_Group
 End
-isisimportpds: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 687.556
 282178
 PDS_VERSION_ID                 = PDS3
@@ -885,8 +881,6 @@ End_Group
 End
 
 Testing PDS file containing a ^QUBE pointer
-isisimportpds: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 PDS_VERSION_ID                 = PDS3
 
 /* FILE DATA ELEMENTS */
@@ -948,8 +942,6 @@ Object = QUBE
   CORE_ITEM_BYTES = 2
 End_Object
 End
-isisimportpds: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 687.556
 282178
 **I/O ERROR** Unable to open OriginalLabel [IsisCube] in file [./unitTest.cub].
@@ -957,8 +949,6 @@ isisimportpds: Gathering statistics
 **PROGRAMMER ERROR** Unable to find OriginalLabel [IsisCube].
 
 Testing Isis2 file
-isisimportpds: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = BandBin
   FilterName   = B
   Center       = 0.7500
@@ -974,8 +964,6 @@ Group = Instrument
 End_Group
 End
 Testing PDS file containing an ^IMAGE pointer and ^TABLE pointer
-isisimportpds: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 PDS_VERSION_ID       = PDS3
 RECORD_TYPE          = FIXED_LENGTH
 RECORD_BYTES         = 40000
@@ -1179,8 +1167,6 @@ Object = OriginalLabel
   Bytes     = Null
 End_Object
 End
-isisimportpds: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 0.136336
 0.000260177
 PDS_VERSION_ID       = PDS3
@@ -1308,8 +1294,6 @@ Testing file with invalid Pds label
 
 ********************************************************************
 Test that defaults for projection offsets are changed and can be returned
-isisimportpds: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Projection offsets were changed. New values:
 xOffset = -0.5
 yOffset = 1
diff --git a/isis/src/base/objs/ProcessImportVicar/ProcessImportVicar.truth b/isis/src/base/objs/ProcessImportVicar/ProcessImportVicar.truth
index b744430211234e7c1be00f801fd05263f3f30e74..615cfe279ceef9e12ae526fd4df340ed062b1d1d 100644
--- a/isis/src/base/objs/ProcessImportVicar/ProcessImportVicar.truth
+++ b/isis/src/base/objs/ProcessImportVicar/ProcessImportVicar.truth
@@ -1,5 +1,3 @@
-hist: Importing
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 LBLSIZE                       = 7140
 FORMAT                        = BYTE
 TYPE                          = IMAGE
@@ -256,7 +254,5 @@ SPICE_FILE_NAME               = mars_iau2000_v0.tpc
 SPICE_FILE_ID                 = PCK
 GEOMETRIC_CALIB_FILE_NAME     = h2ggr_01.cal
 End
-hist: Gathering statistics
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 226.411
 33.6794
diff --git a/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.cpp b/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.cpp
index 14684cfec0dd133601f4f8b3ba9d75c98666345d..132b3d6e9d9faf85fcbd65502cfd977229cabc0b 100644
--- a/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.cpp
+++ b/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.cpp
@@ -171,6 +171,11 @@ namespace Isis {
           int outBand = 1;
           
           ProcessMosaic::StartProcess(outSample, outLine, outBand);
+          // Reset the creation flag to ensure that the data within the tracking cube written from
+          // this call of StartProcess isn't over-written in the next. This needs to occur since the 
+          // tracking cube is created in ProcessMosaic if the m_createOutputMosaic flag is set to 
+          // true and the cube would then be completely re-created (setting all pixels to Null).
+          ProcessMosaic::SetCreateFlag(false);
 
           // Increment for projections where occurrances may happen multiple times
           outSample += worldSize;
@@ -570,12 +575,8 @@ namespace Isis {
       p.PropagatePolygons(false);
       p.PropagateOriginalLabel(false);
 
-      // If track set, create the origin band
-      if (GetTrackFlag()) {
-        nbands += 1;
-      }
       // For average priority, get the new band count
-      else if (GetImageOverlay() == AverageImageWithMosaic) {
+      if (GetImageOverlay() == AverageImageWithMosaic) {
         nbands *= 2;
       }
 
@@ -652,12 +653,8 @@ namespace Isis {
       p.PropagatePolygons(false);
       p.PropagateOriginalLabel(false);
 
-      // If track set, create the origin band
-      if (GetTrackFlag()) {
-        nbands += 1;
-      }
       // For average priority, get the new band count
-      else if (GetImageOverlay() == AverageImageWithMosaic) {
+      if (GetImageOverlay() == AverageImageWithMosaic) {
         nbands *= 2;
       }
 
@@ -711,12 +708,8 @@ namespace Isis {
       Cube *propCube = p.SetInputCube(inputFile, inAtt);
       bands = propCube->bandCount();
 
-      // If track set, create the origin band
-      if (GetTrackFlag()) {
-        bands += 1;
-      }
       // For average priority, get the new band count
-      else if (GetImageOverlay() == AverageImageWithMosaic) {
+      if (GetImageOverlay() == AverageImageWithMosaic) {
         bands *= 2;
       }
 
@@ -773,12 +766,8 @@ namespace Isis {
       Cube *propCube = p.SetInputCube(inputFile, inAtt);
       bands = propCube->bandCount();
 
-      // If track set, create the origin band
-      if (GetTrackFlag()) {
-        bands += 1;
-      }
       // For average priority, get the new band count
-      else if (GetImageOverlay() == AverageImageWithMosaic) {
+      if (GetImageOverlay() == AverageImageWithMosaic) {
         bands *= 2;
       }
 
diff --git a/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.h b/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.h
index 07364ea029c408bc6042302834df28b53bb0aa9e..ba9a981a1861b1a35c4075af96b1ed5c3700a9ce 100644
--- a/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.h
+++ b/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.h
@@ -101,6 +101,13 @@ namespace Isis {
    * @history 2016-08-28 Kelvin Rodriguez - Changed SetOutputCube default parameters to
    *                         avoid hidden virtual function warnings in clang and the abiguous called
    *                         errors. Part of porting to OS X 10.11.
+   * @history 2018-08-13 Summer Stapleton - Removed code that added tracking band to mosaic cube as
+   *                         tracking is now being stored in a separate tracking cube. This was part
+   *                         of a larger refactoring project to turn the tracking band of a mosaic
+   *                         cube into its own tracking cube containing the InputImages table to
+   *                         relate DN values to input images. Mosaic cube no longer holds tracking
+   *                         band or InputImages table, but instead has a Tracking group that points
+   *                         to external tracking cube.
    */
 
   class ProcessMapMosaic : public Isis::ProcessMosaic {
diff --git a/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.truth b/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.truth
index c5143e391c1575dda66083c49e1b62b91c6f13b5..cd033548eb489e5334ffb2021ff86bde1b6598cf 100644
--- a/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.truth
+++ b/isis/src/base/objs/ProcessMapMosaic/ProcessMapMosaic.truth
@@ -1,17 +1,14 @@
 Testing Isis::ProcessMapMosaic Class ... 
 Testing Mosaic 1
-unittest: Initializing mosaic
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Mosaicking unitTest1.cub
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-/usgs/cpkgs/isis3/data/base/testData/ProcessMapMosaic/unitTest1.cub is inside the mosaic
-unittest: Mosaicking unitTest2.cub
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-/usgs/cpkgs/isis3/data/base/testData/ProcessMapMosaic/unitTest2.cub is inside the mosaic
+base/testData/ProcessMapMosaic/unitTest1.cub is inside the mosaic
+base/testData/ProcessMapMosaic/unitTest2.cub is inside the mosaic
 Mosaic label: 
 Object = IsisCube
   Object = Core
+    StartByte   = 65537
     Format      = Tile
+    TileSamples = 124
+    TileLines   = 125
 
     Group = Dimensions
       Samples = 124
@@ -21,6 +18,7 @@ Object = IsisCube
 
     Group = Pixels
       Type       = UnsignedByte
+      ByteOrder  = Lsb
       Base       = 0.0
       Multiplier = 1.0
     End_Group
@@ -47,25 +45,25 @@ Object = IsisCube
 End_Object
 
 Object = Label
+  Bytes = 65536
 End_Object
 
 Object = History
   Name      = IsisCube
+  StartByte = 81037
+  Bytes     = 3020
 End_Object
 End
 Testing Mosaic 2
-unittest: Initializing mosaic
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Mosaicking unitTest1.cub
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-/usgs/cpkgs/isis3/data/base/testData/ProcessMapMosaic/unitTest1.cub is inside the mosaic
-unittest: Mosaicking unitTest2.cub
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-/usgs/cpkgs/isis3/data/base/testData/ProcessMapMosaic/unitTest2.cub is inside the mosaic
+base/testData/ProcessMapMosaic/unitTest1.cub is inside the mosaic
+base/testData/ProcessMapMosaic/unitTest2.cub is inside the mosaic
 Mosaic label: 
 Object = IsisCube
   Object = Core
+    StartByte   = 65537
     Format      = Tile
+    TileSamples = 248
+    TileLines   = 249
 
     Group = Dimensions
       Samples = 248
@@ -75,6 +73,7 @@ Object = IsisCube
 
     Group = Pixels
       Type       = UnsignedByte
+      ByteOrder  = Lsb
       Base       = 0.0
       Multiplier = 1.0
     End_Group
@@ -101,10 +100,13 @@ Object = IsisCube
 End_Object
 
 Object = Label
+  Bytes = 65536
 End_Object
 
 Object = History
   Name      = IsisCube
+  StartByte = 127289
+  Bytes     = 3020
 End_Object
 End
 Mosaic Data: -1.79769e+308	-1.79769e+308	-1.79769e+308
@@ -358,14 +360,14 @@ Mosaic Data: -1.79769e+308	-1.79769e+308	-1.79769e+308
 Mosaic Data: -1.79769e+308	-1.79769e+308	-1.79769e+308
 
 Testing Mosaic where the input (x, y) is negative, according to the output cube.
-unittest: Initializing mosaic
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Mosaicking unitTest1.cub
-0% Processed
10% Processed
20% Processed
The mosaic was successfull.
+The mosaic was successfull.
 Mosaic label: 
 Object = IsisCube
   Object = Core
+    StartByte   = 65537
     Format      = Tile
+    TileSamples = 38
+    TileLines   = 25
 
     Group = Dimensions
       Samples = 38
@@ -375,6 +377,7 @@ Object = IsisCube
 
     Group = Pixels
       Type       = UnsignedByte
+      ByteOrder  = Lsb
       Base       = 0.0
       Multiplier = 1.0
     End_Group
@@ -401,11 +404,15 @@ Object = IsisCube
 End_Object
 
 Object = Label
+  Bytes = 65536
 End_Object
 
 Object = Table
   Name        = InstrumentPointing
+  StartByte   = 66487
+  Bytes       = 40
   Records     = 1
+  ByteOrder   = Lsb
   Description = "Created by spiceinit"
   Kernels     = ($clementine1/kernels/fk/clem_v11.tf,
                  $Clementine1/kernels/ck/clem_5sc.bck)
@@ -443,7 +450,10 @@ End_Object
 
 Object = Table
   Name        = InstrumentPosition
+  StartByte   = 66527
+  Bytes       = 32
   Records     = 1
+  ByteOrder   = Lsb
   Description = "Created by spiceinit"
   Kernels     = $Clementine1/kernels/spk/SPKMERGE_940219_940504_CLEMV001b.bsp
 
@@ -474,7 +484,10 @@ End_Object
 
 Object = Table
   Name           = BodyRotation
+  StartByte      = 66559
+  Bytes          = 40
   Records        = 1
+  ByteOrder      = Lsb
   Description    = "Created by spiceinit"
   Kernels        = ($base/kernels/spk/de405.bsp,
                     $base/kernels/pck/pck00008.tpc,
@@ -515,7 +528,10 @@ End_Object
 
 Object = Table
   Name        = SunPosition
+  StartByte   = 66599
+  Bytes       = 32
   Records     = 1
+  ByteOrder   = Lsb
   Description = "Created by spiceinit"
   Kernels     = $base/kernels/spk/de405.bsp
 
@@ -546,26 +562,27 @@ End_Object
 
 Object = History
   Name      = IsisCube
+  StartByte = 71980
+  Bytes     = 3020
 End_Object
 
 Object = OriginalLabel
   Name      = IsisCube
+  StartByte = 66631
+  Bytes     = 5349
 End_Object
 End
 
 Testing Mosaic containing cropped image.
-unittest: Initializing mosaic
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-unittest: Mosaicking unitTest_crop.cub
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-/usgs/cpkgs/isis3/data/base/testData/ProcessMapMosaic/unitTest_crop.cub is inside the mosaic
-unittest: Mosaicking unitTest_nocrop.cub
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-/usgs/cpkgs/isis3/data/base/testData/ProcessMapMosaic/unitTest_nocrop.cub is inside the mosaic
+base/testData/ProcessMapMosaic/unitTest_crop.cub is inside the mosaic
+base/testData/ProcessMapMosaic/unitTest_nocrop.cub is inside the mosaic
 Mosaic label: 
 Object = IsisCube
   Object = Core
+    StartByte   = 65537
     Format      = Tile
+    TileSamples = 443
+    TileLines   = 128
 
     Group = Dimensions
       Samples = 2215
@@ -575,6 +592,7 @@ Object = IsisCube
 
     Group = Pixels
       Type       = Real
+      ByteOrder  = Lsb
       Base       = 0.0
       Multiplier = 1.0
     End_Group
@@ -597,9 +615,12 @@ Object = IsisCube
 End_Object
 
 Object = Label
+  Bytes = 65536
 End_Object
 
 Object = History
   Name      = IsisCube
+  StartByte = 29551617
+  Bytes     = 3519
 End_Object
 End
diff --git a/isis/src/base/objs/ProcessMapMosaic/unitTest.cpp b/isis/src/base/objs/ProcessMapMosaic/unitTest.cpp
index 46ea2c9cd410c216a37ed82497942531894b9b47..1e4b644447d7c4ceb4cdc1c3dd17754133c01bb2 100644
--- a/isis/src/base/objs/ProcessMapMosaic/unitTest.cpp
+++ b/isis/src/base/objs/ProcessMapMosaic/unitTest.cpp
@@ -13,6 +13,16 @@
 using namespace Isis;
 using namespace std;
 
+/** 
+ * Unit test for ProcessMapMosaic class
+ *  
+ * @author ????-??-?? Unknown 
+ *  
+ *  @internal
+ *   @history 2018-06-06 Jeannie Backer - Removed file paths from error message written to
+ *                           test output.
+ *  
+ */
 void IsisMain() {
 
   Preference::Preferences(true);
@@ -35,10 +45,10 @@ void IsisMain() {
 
   for(int i = 0; i < cubes.size(); i++) {
     if(m1.StartProcess(cubes[i].toString())) {
-      cout << cubes[i].toString() << " is inside the mosaic" << endl;
+      cout << cubes[i].toString().replace(QRegExp(".*base/testData"), "base/testData") << " is inside the mosaic" << endl;
     }
     else {
-      cout << cubes[i].toString() << " is outside the mosaic" << endl;
+      cout << cubes[i].toString().replace(QRegExp(".*base/testData"), "base/testData") << " is outside the mosaic" << endl;
     }
   }
 
@@ -60,10 +70,10 @@ void IsisMain() {
 
   for(int i = 0; i < cubes.size(); i++) {
     if(m2.StartProcess(cubes[i].toString())) {
-      cout << cubes[i].toString() << " is inside the mosaic" << endl;
+      cout << cubes[i].toString().replace(QRegExp(".*base/testData"), "base/testData") << " is inside the mosaic" << endl;
     }
     else {
-      cout << cubes[i].toString() << " is outside the mosaic" << endl;
+      cout << cubes[i].toString().replace(QRegExp(".*base/testData"), "base/testData") << " is outside the mosaic" << endl;
     }
   }
 
@@ -146,10 +156,10 @@ void IsisMain() {
 
   for(int i = 0; i < cubes_crop.size(); i++) {
     if(m4.StartProcess(cubes_crop[i].toString())) {
-      cout << cubes_crop[i].toString() << " is inside the mosaic" << endl;
+      cout << cubes_crop[i].toString().replace(QRegExp(".*base/testData"), "base/testData") << " is inside the mosaic" << endl;
     }
     else {
-      cout << cubes_crop[i].toString() << " is outside the mosaic" << endl;
+      cout << cubes_crop[i].toString().replace(QRegExp(".*base/testData"), "base/testData") << " is outside the mosaic" << endl;
     }
   }
 
diff --git a/isis/src/base/objs/ProcessMosaic/ProcessMosaic.cpp b/isis/src/base/objs/ProcessMosaic/ProcessMosaic.cpp
index e87f963ace9d4acd980ada7e9dd7fc652cfc268a..2b9c2bf8f41d169fdded8f831244580ddde20dd8 100644
--- a/isis/src/base/objs/ProcessMosaic/ProcessMosaic.cpp
+++ b/isis/src/base/objs/ProcessMosaic/ProcessMosaic.cpp
@@ -30,6 +30,7 @@
 #include "SerialNumber.h"
 #include "SpecialPixel.h"
 #include "Table.h"
+#include "TrackingTable.h"
 
 using namespace std;
 
@@ -50,6 +51,7 @@ namespace Isis {
 
     // Initialize the structure Track Info
     m_trackingEnabled    = false;
+    m_trackingCube = NULL;
     m_createOutputMosaic   = false;
     m_bandPriorityBandNumber  = 0;
     m_bandPriorityKeyName  = "";
@@ -82,6 +84,11 @@ namespace Isis {
 
   //!  Destroys the Mosaic object. It will close all opened cubes.
   ProcessMosaic::~ProcessMosaic() {
+    if (m_trackingCube) {
+      m_trackingCube->close();
+      delete m_trackingCube;
+      m_trackingCube = NULL;
+    }
   }
 
 
@@ -121,6 +128,12 @@ namespace Isis {
     bool bTrackExists = false;
     if (!m_createOutputMosaic) {
       bTrackExists = GetTrackStatus();
+      if (m_trackingEnabled && 
+            !(OutputCubes[0]->hasGroup("Tracking") || OutputCubes[0]->hasTable("InputImages"))) {
+        QString m = "Cannot enable tracking while adding to a mosaic without tracking ";
+        m += "information. Confirm that your mosaic was originally created with tracking enabled.";
+        throw IException(IException::User, m, _FILEINFO_);
+      }
     }
 
     int ins = m_ins;
@@ -191,12 +204,15 @@ namespace Isis {
     // Tracking is done for:
     // (1) Band priority,
     // (2) Ontop and Beneath priority with number of bands equal to 1,
-    // (3) Ontop priority with all the special pixel flags set to true
+    // (3) Ontop priority with all the special pixel flags set to true. (All special pixel flags
+    //      must be set to true in order to handle multiple bands since we need to force pixels
+    //      from all bands in a single image to be copied to the mosaic with ontop priority so we
+    //      don't have multiple input bands to track for any single pixel in our tracking band.)
     if (m_trackingEnabled) {
       if (!(m_imageOverlay == UseBandPlacementCriteria ||
           ((m_imageOverlay == PlaceImagesOnTop || m_imageOverlay == PlaceImagesBeneath) &&
            // tracking band was already created for Tracking=true
-           (OutputCubes[0]->bandCount()-1) == 1) ||
+           (OutputCubes[0]->bandCount()) == 1) ||
           (m_imageOverlay == PlaceImagesOnTop && m_placeHighSatPixels && m_placeLowSatPixels &&
            m_placeNullPixels)) ){
         QString m = "Tracking cannot be True for multi-band Mosaic with ontop or beneath priority";
@@ -245,28 +261,112 @@ namespace Isis {
       }
     }
 
-    // Even if the track flag is off, if the track table exists continue tracking
+    // Even if the track flag is off, if the track table exists and "TRACKING" exists in bandbin
+    // group continue tracking
     if (bTrackExists) {
       m_trackingEnabled = true;
     }
 
-    int iOriginBand = 0, iChanged = 0;
-
-    // Do this before SetMosaicOrigin as we don't want to set the filename
-    // in the table unless the band info is valid
+    // We don't want to set the filename in the table unless the band info is valid
     int bandPriorityInputBandNumber = -1;
     int bandPriorityOutputBandNumber = -1;
     if (m_imageOverlay == UseBandPlacementCriteria ) {
       bandPriorityInputBandNumber = GetBandIndex(true);
       bandPriorityOutputBandNumber = GetBandIndex(false);
     }
+    
+    // Set index of tracking image to the default offset of the Isis::UnsignedByte
+    int iIndex = VALID_MINUI4;
+    // Propogate tracking if adding to mosaic that was previouly tracked.
+    if (OutputCubes[0]->hasGroup("Tracking") && !m_createOutputMosaic) {
+      m_trackingEnabled = true;
+    }
 
-    // Image name into the table & Get the index for this input file
-    int iIndex = GetIndexOffsetByPixelType();
-
-    // Set the Mosaic Origin is Tracking is enabled
+    // Create tracking cube if need-be, add bandbin group, and update tracking table. Add tracking
+    // group to mosaic cube. 
     if (m_trackingEnabled) {
-      SetMosaicOrigin(iIndex);
+      TrackingTable *trackingTable;
+
+      if (!m_trackingCube) {
+        m_trackingCube = new Cube;
+
+        // A new mosaic cube is being created
+        if (m_createOutputMosaic) {
+
+          // Tracking cubes are always unsigned 4 byte integer
+          m_trackingCube->setPixelType(PixelType::UnsignedInteger);
+
+          // Tracking cube has the same number of lines and samples as the mosaic and 1 band
+          m_trackingCube->setDimensions(OutputCubes[0]->sampleCount(),
+                                        OutputCubes[0]->lineCount(),
+                                        1);
+
+          // The tracking cube file name convention is "output_cube_file_name" + "_tracking.cub"
+          QString trackingBase = FileName(OutputCubes[0]->fileName()).removeExtension().expanded().split("/").last();//toString();
+          m_trackingCube->create(FileName(OutputCubes[0]->fileName()).path() 
+                                  + "/" + trackingBase + "_tracking.cub");
+
+          // Add the tracking group to the mosaic cube label
+          Pvl *mosaicLabel = OutputCubes[0]->label();
+          PvlGroup trackingFileGroup("Tracking");
+          PvlKeyword trackingFileName("FileName");
+          trackingFileName.setValue(trackingBase + "_tracking.cub");
+          trackingFileGroup.addKeyword(trackingFileName);
+          mosaicLabel->findObject("IsisCube").addGroup(trackingFileGroup);
+          
+          // Write the bandbin group to the tracking cube label
+          Pvl *trackingLabel = m_trackingCube->label();
+          PvlGroup bandBin("BandBin");
+          PvlKeyword trackBand("FilterName");
+          trackBand += "TRACKING";
+          bandBin.addKeyword(trackBand);
+          trackingLabel->findObject("IsisCube").addGroup(bandBin);
+
+          // Initialize an empty TrackingTable object to manage tracking table in tracking cube
+          trackingTable = new TrackingTable();
+        }
+        
+        // An existing mosaic cube is being added to
+        else {
+          // Confirm tracking group exists in mosaic cube to address backwards compatibility
+          if ( OutputCubes[0]->hasGroup("Tracking") ) {
+            QString trackingPath = FileName(OutputCubes[0]->fileName()).path();
+            QString trackingFile = OutputCubes[0]->group("Tracking").findKeyword("FileName")[0];
+            m_trackingCube->open(trackingPath + "/" + trackingFile, "rw");
+
+            // Initialize a TrackingTable object from current mosaic
+            Table *table;
+            try {
+              table = new Table(TRACKING_TABLE_NAME, m_trackingCube->fileName());
+              trackingTable = new TrackingTable(*table);
+            }
+            catch (IException &e) {
+              QString msg = "Unable to find Tracking Table in " + m_trackingCube->fileName() + ".";
+              throw IException(IException::User, msg, _FILEINFO_);
+            }
+          }
+          // If no tracking group exists in mosaic cube, warn user to run utility application to
+          // add it and create a separate tracking cube
+          else {
+            QString msg = "Tracking cannot be enabled when adding to an existing mosaic "
+            "that does not already have a tracking cube. Mosaics with a tracking band must "
+            "have the tracking band extracted into an external tracking cube.";
+            throw IException(IException::User, msg, _FILEINFO_);
+          }
+        }
+        
+        // Add current file to the TrackingTable object
+        iIndex = trackingTable->fileNameToPixel(InputCubes[0]->fileName(), 
+                                       SerialNumber::Compose(*(InputCubes[0])));
+        
+        //  Write the tracking table to the tracking cube, overwriting if need-be
+        if (m_trackingCube->hasTable(Isis::trackingTableName)) {
+         m_trackingCube->deleteBlob("Table", Isis::trackingTableName);
+        }
+        Table table = trackingTable->toTable();
+        m_trackingCube->write(table);
+      }
+
     }
     else if (m_imageOverlay == AverageImageWithMosaic && m_createOutputMosaic) {
       ResetCountBands();
@@ -275,13 +375,10 @@ namespace Isis {
     m_onb = OutputCubes[0]->bandCount();
 
     if (m_trackingEnabled) {
-      //Get the last band set aside for "Origin" 1 based
-      iOriginBand = OutputCubes[0]->bandCount();
-      iChanged = 0;
 
       // For mosaic creation, the input is copied onto mosaic by default
       if (m_imageOverlay == UseBandPlacementCriteria && !m_createOutputMosaic) {
-        BandComparison(iss, isl, isb, ins, inl, inb,
+        BandComparison(iss, isl, ins, inl,
                        bandPriorityInputBandNumber, bandPriorityOutputBandNumber, iIndex);
       }
     }
@@ -293,7 +390,6 @@ namespace Isis {
       }
     }
 
-
     // Process Band Priority with no tracking
     if (m_imageOverlay == UseBandPlacementCriteria && !m_trackingEnabled ) {
       BandPriorityWithNoTracking(iss, isl, isb, ins, inl, inb, bandPriorityInputBandNumber,
@@ -303,7 +399,8 @@ namespace Isis {
       // Create portal buffers for the input and output files
       Portal iPortal(ins, 1, InputCubes[0]->pixelType());
       Portal oPortal(ins, 1, OutputCubes[0]->pixelType());
-      Portal origPortal(ins, 1, OutputCubes[0]->pixelType());
+      Portal countPortal(ins, 1, OutputCubes[0]->pixelType());
+      Portal trackingPortal(ins, 1, PixelType::UnsignedInteger);
 
       for (int ib = isb, ob = m_osb; ib < (isb + inb) && ob <= m_onb; ib++, ob++) {
         for (int il = isl, ol = m_osl; il < isl + inl; il++, ol++) {
@@ -315,12 +412,12 @@ namespace Isis {
           OutputCubes[0]->read(oPortal);
 
           if (m_trackingEnabled) {
-            origPortal.SetPosition(m_oss, ol, iOriginBand);
-            OutputCubes[0]->read(origPortal);
+            trackingPortal.SetPosition(m_oss, ol, 1);
+            m_trackingCube->read(trackingPortal);
           }
           else if (m_imageOverlay == AverageImageWithMosaic) {
-            origPortal.SetPosition(m_oss, ol, (ob+m_onb));
-            OutputCubes[0]->read(origPortal);
+            countPortal.SetPosition(m_oss, ol, (ob+m_onb));
+            OutputCubes[0]->read(countPortal);
           }
 
           bool bChanged = false;
@@ -331,20 +428,19 @@ namespace Isis {
             if (m_createOutputMosaic) {
               oPortal[pixel] = iPortal[pixel];
               if (m_trackingEnabled) {
-                origPortal[pixel] = iIndex;
+                trackingPortal[pixel] = iIndex;
                 bChanged = true;
               }
               else if (m_imageOverlay == AverageImageWithMosaic) {
                 if (IsValidPixel(iPortal[pixel])) {
-                  origPortal[pixel]=1;
+                  countPortal[pixel]=1;
                   bChanged = true;
                 }
               }
-              iChanged++;
             }
             // Band Priority
             else if (m_trackingEnabled && m_imageOverlay == UseBandPlacementCriteria) {
-              int iPixelOrigin = qRound(origPortal[pixel]);
+              int iPixelOrigin = qRound(trackingPortal[pixel]);
 
               Portal iComparePortal( ins, 1, InputCubes[0]->pixelType() );
               Portal oComparePortal( ins, 1, OutputCubes[0]->pixelType() );
@@ -366,7 +462,6 @@ namespace Isis {
                        ( m_placeLowSatPixels  && IsLowPixel (iPortal[pixel]) ) ||
                        ( m_placeNullPixels    && IsNullPixel(iPortal[pixel]) ) ){
                     oPortal[pixel] = iPortal[pixel];
-                    iChanged++;
                     bChanged = true;
                   }
                 }
@@ -376,7 +471,6 @@ namespace Isis {
                        ( m_placeLowSatPixels  && IsLowPixel (iPortal[pixel]) ) ||
                        ( m_placeNullPixels    && IsNullPixel(iPortal[pixel]) ) ) {
                     oPortal[pixel] = iPortal[pixel];
-                    iChanged++;
                     bChanged = true;
                   }
                 }
@@ -391,15 +485,14 @@ namespace Isis {
                  (m_placeNullPixels    && IsNullPixel(iPortal[pixel]))) {
                 oPortal[pixel] = iPortal[pixel];
                 if (m_trackingEnabled) {
-                  origPortal[pixel] = iIndex;
+                  trackingPortal[pixel] = iIndex;
                   bChanged = true;
                 }
-                iChanged++;
               }
             }
             // AverageImageWithMosaic priority
             else if (m_imageOverlay == AverageImageWithMosaic) {
-              bChanged |= ProcessAveragePriority(pixel, iPortal, oPortal, origPortal);
+              bChanged |= ProcessAveragePriority(pixel, iPortal, oPortal, countPortal);
             }
             // Beneath/Mosaic Priority
             else if (m_imageOverlay == PlaceImagesBeneath) {
@@ -408,16 +501,18 @@ namespace Isis {
                 // Set the origin if number of input bands equal to 1
                 // and if the track flag was set
                 if (m_trackingEnabled) {
-                  origPortal[pixel] = iIndex;
+                  trackingPortal[pixel] = iIndex;
                   bChanged = true;
                 }
-                iChanged++;
               }
             }
           } // End sample loop
           if (bChanged) {
-            if (m_trackingEnabled || m_imageOverlay == AverageImageWithMosaic) {
-              OutputCubes[0]->write(origPortal);
+            if (m_trackingEnabled) {
+              m_trackingCube->write(trackingPortal);
+            }
+            if (m_imageOverlay == AverageImageWithMosaic) {
+              OutputCubes[0]->write(countPortal);
             }
           }
           OutputCubes[0]->write(oPortal);
@@ -425,9 +520,27 @@ namespace Isis {
         } // End line loop
       }   // End band loop
     }
+    if (m_trackingCube) {
+      m_trackingCube->close();
+      delete m_trackingCube;
+      m_trackingCube = NULL;
+    }
   } // End StartProcess
 
 
+  /**
+   * Cleans up by closing input, output and tracking cubes
+   */
+  void ProcessMosaic::EndProcess() {
+    if (m_trackingCube) {
+      m_trackingCube->close();
+      delete m_trackingCube;
+      m_trackingCube = NULL;
+    }
+    Process::EndProcess();
+  }
+
+
   /**
    * Accessor for the placed images and their locations.
    *
@@ -634,197 +747,6 @@ namespace Isis {
   }
 
 
-  /**
-   * This method creates a table if not already created to hold
-   * the image file names if the track flag is true. If table
-   * exists, checks if the image already exists and if it does
-   * not, then adds the new image file name. If the field size is
-   * smaller than the new image name, then it resizes all the
-   * records to new file size. When the table is newly created,it
-   * resets the origin band to default based on pixel type.
-   *
-   * @param index - the input file index
-   *
-   * @returns none
-   *
-   * @throws an exception if the number of images exceeds the
-   *            pixel size.
-   *
-   * @throws iException::Message
-   *
-   * @author Sharmila Prasad (8/28/2009)
-   */
-  void ProcessMosaic::SetMosaicOrigin(int &index) {
-    // Get the name of the file to be added
-    QString inputFileName   = FileName(InputCubes[0]->fileName()).name();
-    QString tableName       = TRACKING_TABLE_NAME;
-    int inputFileNameLength = inputFileName.length();
-
-    // Get the serial number
-    QString inputFileSerialNumber   = SerialNumber::Compose(*(InputCubes[0]));
-    int inputFileSerialNumberLength = inputFileSerialNumber.length();
-
-    // the fields will be equal length, so choose the larger value
-    int fieldLength = inputFileSerialNumberLength;
-    if (inputFileNameLength > inputFileSerialNumberLength) {
-      fieldLength = inputFileNameLength;
-    }
-
-    // Get output file name
-    QString sOutputFile = FileName(OutputCubes[0]->fileName()).name();
-
-    Pvl *cPvlOut = OutputCubes[0]->label();
-
-    // Create a table record with the new image file name and serial number info
-    TableRecord cFileRecord;
-
-    // Populate with File Name
-    TableField cFileField("FileName", TableField::Text, fieldLength);
-    cFileField = inputFileName;
-    cFileRecord += cFileField;
-
-    // Populate with Serial Number
-    TableField cSNField("SerialNumber", TableField::Text, fieldLength);
-    cSNField = inputFileSerialNumber;
-    cFileRecord += cSNField;
-
-    int iNumObjs = cPvlOut->objects();
-    PvlObject cPvlObj;
-
-    // Check if a Table exists in the mosaic cube
-    if (cPvlOut->hasObject("Table")) {
-      for (int i = 0; i < iNumObjs; i++) {
-        cPvlObj = cPvlOut->object(i);
-        if (cPvlObj.hasKeyword("Name", Pvl::Traverse)) {
-          PvlKeyword cNameKey = cPvlObj.findKeyword("Name", Pvl::Traverse);
-          if (cNameKey[0] == tableName) {
-            int existingTableFieldLength = toInt(QString(cPvlObj.findGroup("Field")
-                                                         .findKeyword("Size")));
-
-            //set the tracker flag to true as the tracking table exists
-            m_trackingEnabled = true;
-
-            // Create a new blank table
-            Table cFileTable(tableName);
-
-            // Read and make a copy of the existing tracking table
-            Table cFileTable_Copy = Table(tableName);
-            OutputCubes[0]->read(cFileTable_Copy);
-            // Records count
-            int existingTableRecords = cFileTable_Copy.Records();
-
-            // Check if the image index can be accomadated in the pixel size
-            bool bFull = false;
-            switch (sizeof(OutputCubes[0]->pixelType())) {
-              case 1:
-                // Index is 1 based as 0=Null invalid value
-                if (existingTableRecords >= (VALID_MAX1 - 1)) bFull = true;
-                break;
-              case 2:
-                // Signed 16bits with some special pixels
-                if (existingTableRecords > (VALID_MAX2 - VALID_MIN2 + 1)) bFull = true;
-                break;
-
-              case 4:
-                // Max float mantissa
-                if (existingTableRecords > (FLOAT_STORE_INT_PRECISELY_MAX_VALUE -
-                                            FLOAT_STORE_INT_PRECISELY_MIN_VALUE + 1)) bFull = true;
-                break;
-            }
-
-            if (bFull) {
-              QString msg = "The number of images in the Mosaic exceeds the pixel size";
-              throw IException(IException::Programmer, msg, _FILEINFO_);
-            }
-
-            for (int i = 0;i < existingTableRecords;i++) {
-              // Get the file name and trim out the characters filled due to resizing
-              QString sTableFile = QString(QString(cFileTable_Copy[i][0]).toLatin1().data());
-              int found = sTableFile.lastIndexOf(".cub");
-              if (found != -1) {
-                // clear the packing characters - get only the file name
-                sTableFile.remove(found + 4);
-              }
-
-              if (sTableFile == inputFileName) {
-                index += i;
-                return;
-              }
-
-
-              // compare the length of the fields in the current table to the length of the fields
-              // in the record to be added to the table, then create the new record to be added
-              TableRecord record;
-              if (existingTableFieldLength < fieldLength) {
-                // if the new field length is larger, create the new record to be added
-                // from the updated field size (i.e. resize each record in the exisiting
-                // table)
-                TableField  cFileFieldUpdate("FileName", TableField::Text, fieldLength);
-                cFileFieldUpdate  = (QString)cFileTable_Copy[i][0];
-                record += cFileFieldUpdate;
-
-                // Populate with Serial Number
-                TableField cSNFieldUpdate("SerialNumber", TableField::Text, fieldLength);
-                cSNFieldUpdate = (QString)cFileTable_Copy[i][1];
-                record += cSNFieldUpdate;
-              }
-              else {
-                // otherwise, keep the original record size
-                record = cFileTable_Copy[i];
-              }
-
-              // if this is the first record, initialize the new table with by adding the record
-              // created above (this will also set the appropriate record size)
-              if (i == 0) {
-                cFileTable = Table(tableName, record);
-                cFileTable += record;
-              }
-              else {
-                // Add all other records from the existing table into the new table
-                cFileTable += record;
-              }
-            }
-            // Get the current image file index
-            index += existingTableRecords;
-
-            // if we kept the original table record size and this record is smaller, then we
-            // need to resize
-            if (cFileRecord.RecordSize() < cFileTable.RecordSize()) { // fieldLength < existingTableFieldLength
-              TableRecord updateNewRecord;
-              TableField  cFileFieldUpdate("FileName", TableField::Text, existingTableFieldLength);
-              cFileFieldUpdate = (QString)cFileRecord[0];
-              updateNewRecord += cFileFieldUpdate;
-
-              // Populate with Serial Number
-              TableField cSNFieldUpdate("SerialNumber", TableField::Text, existingTableFieldLength);
-              cSNFieldUpdate = (QString)cFileRecord[1];
-              updateNewRecord += cSNFieldUpdate;
-              cFileTable +=  updateNewRecord;
-            }
-            else {
-              // Add the current input image record to the new table
-              cFileTable +=  cFileRecord;
-            }
-
-            // Copy the new table to the output Mosaic
-            OutputCubes[0]->write(cFileTable);
-            break;   //break while loop
-          }
-        }
-      } //end for loop
-    }
-
-    //creating new table if track flag is true
-    if (m_createOutputMosaic && m_trackingEnabled) {
-      Table cFileTable(tableName, cFileRecord);
-      cFileTable += cFileRecord;
-      OutputCubes[0]->write(cFileTable);
-      //reset the origin band based on pixel type
-      ResetOriginBand();
-    }
-  }
-
-
   /**
    * Set the keyword/value to use for comparing when using band priority.
    */
@@ -1093,17 +1015,17 @@ namespace Isis {
     int iLines  = OutputCubes[0]->lineCount();
     int iSample = OutputCubes[0]->sampleCount();
 
-    Portal origPortal(iSample, 1, OutputCubes[0]->pixelType());
+    Portal countPortal(iSample, 1, OutputCubes[0]->pixelType());
     int iStartCountBand = iBand/2 + 1;
 
     for (int band=iStartCountBand; band<=iBand; band++) {
       for (int i = 1; i <= iLines; i++) {
-        origPortal.SetPosition(1, i, band);  //sample, line, band position
-        OutputCubes[0]->read(origPortal);
-        for (int iPixel = 0; iPixel < origPortal.size(); iPixel++) {
-          origPortal[iPixel] = 0;
+        countPortal.SetPosition(1, i, band);  //sample, line, band position
+        OutputCubes[0]->read(countPortal);
+        for (int iPixel = 0; iPixel < countPortal.size(); iPixel++) {
+          countPortal[iPixel] = 0;
         }
-        OutputCubes[0]->write(origPortal);
+        OutputCubes[0]->write(countPortal);
       }
     }
   }
@@ -1118,25 +1040,25 @@ namespace Isis {
    * @param piPixel     - Pixel index
    * @param piPortal    - Input Portal
    * @param poPortal    - Output Portal
-   * @param porigPortal - Count Portal
+   * @param countPortal - Count Portal
    *
    * @return bool
    */
   bool ProcessMosaic::ProcessAveragePriority(int piPixel, Portal& piPortal, Portal& poPortal,
-                                             Portal& porigPortal)
+                                             Portal& countPortal)
   {
     bool bChanged=false;
     if (IsValidPixel(piPortal[piPixel]) && IsValidPixel(poPortal[piPixel])) {
-      int iCount = (int)porigPortal[piPixel];
+      int iCount = (int)countPortal[piPixel];
       double dNewDN = (poPortal[piPixel] * iCount + piPortal[piPixel]) / (iCount + 1);
       poPortal[piPixel] = dNewDN;
-      porigPortal[piPixel] =iCount +1;
+      countPortal[piPixel] =iCount +1;
       bChanged = true;
     }
     // Input-Valid, Mosaic-Special
     else if (IsValidPixel(piPortal[piPixel])) {
       poPortal[piPixel] = piPortal[piPixel];
-      porigPortal[piPixel] = 1;
+      countPortal[piPixel] = 1;
       bChanged = true;
     }
     // Input-Special, Flags-True
@@ -1145,7 +1067,7 @@ namespace Isis {
          (m_placeLowSatPixels  && IsLowPixel (piPortal[piPixel]))  ||
          (m_placeNullPixels    && IsNullPixel(piPortal[piPixel]))) {
         poPortal[piPixel]    = piPortal[piPixel];
-        porigPortal[piPixel] = 0;
+        countPortal[piPixel] = 0;
         bChanged = true;
       }
     }
@@ -1201,7 +1123,7 @@ namespace Isis {
           else if (outKey[j] != inKey[k]) {
             QString msg = "The input cube [" + inLab->fileName() + "] and the base mosaic values "
                            "of the Pvl Group [BandBin] for Keyword [" + outKey.name() + "] do not "
-                           "match. Base mosaic value at index [" + QString::number(j) + "] = " + 
+                           "match. Base mosaic value at index [" + QString::number(j) + "] = " +
                            outKey[j] + ". Input cube value at index [" + QString::number(k) + "] = "
                            + inKey[k] + ". **Note: use mapmos/automos MatchBandBin = false to "
                            "override this check**";
@@ -1241,10 +1163,8 @@ namespace Isis {
 
     int iOutBands = OutputCubes[0]->bandCount();
 
-    if (m_trackingEnabled) {
-      iOutBands -= 1;     // leave tracking band
-    }
-    else if (m_imageOverlay == AverageImageWithMosaic) {
+    // else if (m_imageOverlay == AverageImageWithMosaic) {
+    if (m_imageOverlay == AverageImageWithMosaic) {
       iOutBands /= 2;
     }
 
@@ -1254,8 +1174,6 @@ namespace Isis {
     PvlGroup &cInBin  = inLab->findGroup("BandBin", Pvl::Traverse);
     PvlGroup cOutBin("BandBin");
 
-    int iInBands = InputCubes[0]->bandCount();
-
     for (int i = 0; i < cInBin.keywords(); i++) {
       PvlKeyword &cInKey = cInBin[i];
       int iInKeySize = cInKey.size();
@@ -1273,14 +1191,9 @@ namespace Isis {
         }
       }
 
-      // Add the "TRACKING" band to the Keyword if the flag is set and also if the number of
-      // input cube bands is same as the the keysize of the keyword in the BandBin group.
-      if (m_trackingEnabled && iInBands == iInKeySize) {
-        cOutKey += "TRACKING"; // for the origin band
-      }
-
       // Tag the Count Bands if priority is AverageImageWithMosaic.
-      else if (m_imageOverlay == AverageImageWithMosaic) {
+      if (m_imageOverlay == AverageImageWithMosaic) {
+
         int iTotalOutBands = OutputCubes[0]->bandCount();
         isb = origIsb - 1; // reset the input starting band
         int iOutStartBand = iOutBands + osb;
@@ -1391,29 +1304,7 @@ namespace Isis {
           bFound = true;
       }
     }
-// qDebug() << "Band Index:" << iBandIndex;
-// qDebug() << "Priority Band:" << m_bandPriorityBandNumber;
-// qDebug() << "Input Bands:" << InputCubes[0]->bandCount();
-// qDebug() << "output Bands:" << OutputCubes[0]->bandCount();
-// qDebug();
-
-    //if non-zero integer, must be original band #, 1 based
-//     if (m_bandPriorityBandNumber <= InputCubes[0]->bandCount() &&
-//         m_bandPriorityBandNumber > 0) {
-//       PvlKeyword cKeyOrigBand;
-//       if (cPvlLabel.findGroup("BandBin", Pvl::Traverse).hasKeyword("OriginalBand")) {
-//         cKeyOrigBand = cPvlLabel.findGroup("BandBin", Pvl::Traverse).findKeyword("OriginalBand");
-//       }
-//       int iSize = cKeyOrigBand.size();
-//       QString buff = toString(m_bandPriorityBandNumber);
-//       for (int i = 0; i < iSize; i++) {
-//         if (buff == cKeyOrigBand[i]) {
-//           iBandIndex = m_bandPriorityBandNumber;//i + 1; //1 based get band index
-//           bFound = true;
-//           break;
-//         }
-//       }
-//     }
+    
     //key name
     if (!m_bandPriorityBandNumber) {
       PvlKeyword cKeyName;
@@ -1429,8 +1320,6 @@ namespace Isis {
         }
       }
     }
-//     qDebug() << "Band Index:" << iBandIndex;
-// qDebug();
     if (!bFound) {
       QString msg = "Invalid Band / Key Name, Value ";
       throw IException(IException::User, msg, _FILEINFO_);
@@ -1446,23 +1335,23 @@ namespace Isis {
    * input pixel is assigned to the output if the origin pixel equals the current
    * input file index
    *
-   * @index     - FileName Index for the origin band (default +
-   *                zero based index)
-   *
-   * @throws IException::Message
+   * @param iss - Comparison start sample
+   * @param isl - Comparison start line
+   * @param ins - The number of samples to compare
+   * @param inl - The number of lines to compare
+   * @param bandPriorityInputBandNumber - The band in the input cube to use for comparison
+   * @param bandPriorityOutputBandNumber - The band in the output cube to use for comparison
+   * @param index - Tracking index for the input cube
    *
    * @author Sharmila Prasad (9/04/2009)
    */
-  void ProcessMosaic::BandComparison(int iss, int isl, int isb, int ins, int inl, int inb,
+  void ProcessMosaic::BandComparison(int iss, int isl, int ins, int inl,
       int bandPriorityInputBandNumber, int bandPriorityOutputBandNumber, int index) {
     //
     // Create portal buffers for the input and output files
     Portal cIportal(ins, 1, InputCubes[0]->pixelType());
     Portal cOportal(ins, 1, OutputCubes[0]->pixelType());
-    Portal origPortal(ins, 1, OutputCubes[0]->pixelType());
-
-    //Get the last band set aside for "Origin"
-    int iOriginBand = OutputCubes[0]->bandCount();
+    Portal trackingPortal(ins, 1, PixelType::UnsignedInteger);
 
     for (int iIL = isl, iOL = m_osl; iIL < isl + inl; iIL++, iOL++) {
       // Set the position of the portals in the input and output cubes
@@ -1472,28 +1361,27 @@ namespace Isis {
       cOportal.SetPosition(m_oss, iOL, bandPriorityOutputBandNumber);
       OutputCubes[0]->read(cOportal);
 
-      origPortal.SetPosition(m_oss, iOL, iOriginBand);
-      OutputCubes[0]->read(origPortal);
+      trackingPortal.SetPosition(m_oss, iOL, 1);
+      m_trackingCube->read(trackingPortal);
 
       // Move the input data to the output
       for (int iPixel = 0; iPixel < cOportal.size(); iPixel++) {
-        if (IsNullPixel(origPortal[iPixel]) ||
-            (m_placeHighSatPixels && IsHighPixel(cIportal[iPixel])) ||
+        if ((m_placeHighSatPixels && IsHighPixel(cIportal[iPixel])) ||
             (m_placeLowSatPixels  && IsLowPixel(cIportal[iPixel])) ||
             (m_placeNullPixels    && IsNullPixel(cIportal[iPixel]))) {
-          origPortal[iPixel] = index;
+          trackingPortal[iPixel] = index;
         }
         else {
           if (IsValidPixel(cIportal[iPixel])) {
             if (IsSpecial(cOportal[iPixel]) ||
                 (m_bandPriorityUseMaxValue == false  && cIportal[iPixel] < cOportal[iPixel]) ||
                 (m_bandPriorityUseMaxValue == true && cIportal[iPixel] > cOportal[iPixel])) {
-              origPortal[iPixel] = index;
+              trackingPortal[iPixel] = index;
             }
           }
         }
       }
-      OutputCubes[0]->write(origPortal);
+      m_trackingCube->write(trackingPortal);
     }
   }
 
@@ -1583,37 +1471,6 @@ void ProcessMosaic::BandPriorityWithNoTracking(int iss, int isl, int isb, int in
   }
 
 
-
-  /**
-   * This method returns the start value depending on the pixel
-   * type 8,16,32 bit.
-   *
-   * @returns the start/offset value
-   *
-   * @throws iException::Message
-   *
-   * @author Sharmila Prasad (8/28/2009)
-   */
-  int ProcessMosaic::GetIndexOffsetByPixelType() {
-    int iOffset = 0;
-
-    switch (SizeOf(OutputCubes[0]->pixelType())) {
-      case 1:
-        iOffset = VALID_MIN1;
-        break;
-
-      case 2:
-        iOffset = VALID_MIN2;
-        break;
-
-      case 4:
-        iOffset = FLOAT_STORE_INT_PRECISELY_MIN_VALUE;
-        break;
-    }
-    return iOffset;
-  }
-
-
   /**
    * This method  returns the defaults(unassigned origin value)
    * depending on the pixel type.
@@ -1651,35 +1508,6 @@ void ProcessMosaic::BandPriorityWithNoTracking(int iss, int isl, int isb, int in
   }
 
 
-  /**
-   * This method sets the origin band to defaults(unassigned value)
-   * depending on the pixel type.
-   *
-   * @No parameters and no return value
-   *
-   * @author Sharmila Prasad (8/28/2009)
-   */
-  void ProcessMosaic::ResetOriginBand() {
-    int iBand   = OutputCubes[0]->bandCount();
-    int iLines  = OutputCubes[0]->lineCount();
-    int iSample = OutputCubes[0]->sampleCount();
-
-    int iDefault = GetOriginDefaultByPixelType();
-
-    Portal origPortal(iSample, 1, OutputCubes[0]->pixelType());
-
-    for (int i = 1; i <= iLines; i++) {
-      origPortal.SetPosition(1, i, iBand);  //sample, line, band position
-      OutputCubes[0]->read(origPortal);
-      for (int iPixel = 0; iPixel < origPortal.size(); iPixel++) {
-        origPortal[iPixel] = (float)(iDefault);
-      }
-      OutputCubes[0]->write(origPortal);
-    }
-    //Test();
-  }
-
-
   /**
    * This method searchs the mosaic label for a table with name
    * "InputFile". If found return true else false. Checks for the
@@ -1693,24 +1521,16 @@ void ProcessMosaic::BandPriorityWithNoTracking(int iss, int isl, int isb, int in
     //get the output label
     Pvl *cPvlOut = OutputCubes[0]->label();
 
-    bool bTableExists = false;
-    int iNumObjs = cPvlOut->objects();
+    bool bGroupExists = false;
     PvlObject cPvlObj;
 
     //Check if table already exists
-    if (cPvlOut->hasObject("Table")) {
-      for (int i = 0; i < iNumObjs; i++) {
-        cPvlObj = cPvlOut->object(i);
-        if (cPvlObj.hasKeyword("Name", Pvl::Traverse)) {
-          PvlKeyword cNameKey = cPvlObj.findKeyword("Name", Pvl::Traverse);
-          if (cNameKey[0] == TRACKING_TABLE_NAME) {
-            bTableExists = true;
-          }
-        }
-      }
+    if (cPvlOut->hasGroup("Tracking")) {
+      bGroupExists = true;
     }
 
-    return bTableExists;
+    return bGroupExists;
   }
 
 }
+   
diff --git a/isis/src/base/objs/ProcessMosaic/ProcessMosaic.h b/isis/src/base/objs/ProcessMosaic/ProcessMosaic.h
index 03b5e7ab56a469db6b5047ba78cbcc505a94e244..ab13a25134027e1055ab04eb12dd9d02a440adea 100644
--- a/isis/src/base/objs/ProcessMosaic/ProcessMosaic.h
+++ b/isis/src/base/objs/ProcessMosaic/ProcessMosaic.h
@@ -192,6 +192,19 @@ namespace Isis {
    *   @history 2017-05-19 Christopher Combs - Modified unitTest.cpp to truncate paths before date
    *                           directory. Allows test to pass when not using the default data area.
    *                           Fixes #4738.
+   *   @history 2018-07-30 Jesse Mapel & Summer Stapleton - Refactoring of class to create a 
+   *                           separate tracking cube to keep track of input images for a mosaic 
+   *                           instead of storing this information within the mosaic cube itself. 
+   *                           The mosaic cube no longer contains a tracking band or a tracking 
+   *                           table; it now contains a tracking group containing the name of the 
+   *                           tracking file. The tracking file is named 
+   *                           <baseMosaicFileName>_tracking.cub. This tracking cube will contain 
+   *                           the tracking table as well as the tracking band; it will always be 
+   *                           of PixelType::UnsignedInteger regardless of the pixel type of the 
+   *                           mosaic cube or of the input images. References #971
+   *   @history 2018-08-13 Summer Stapleton - Error now being thrown with appropriate message if 
+   *                           user attempts to add tracking capabilities to a mosaic that already
+   *                           exists without tracking. Fixes #2052.
    */
 
   class ProcessMosaic : public Process {
@@ -226,6 +239,9 @@ namespace Isis {
       // Line Processing method for one input and output cube
       virtual void StartProcess(const int &piOutSample, const int &piOutLine, const int &piOutBand);
 
+      // Finish with tracking cube
+      virtual void EndProcess();
+
       // Accessor for the placed images.
       PvlObject imagePositions();
 
@@ -255,8 +271,6 @@ namespace Isis {
       Isis::Cube *SetOutputCube(const QString &psParameter);
 
       void SetBandBinMatch(bool enforceBandBinMatch);
-      void SetMosaicOrigin(int &piIndex);
-
 
       void SetBandKeyword(QString bandPriorityKeyName, QString bandPriorityKeyValue);
       void SetBandNumber(int bandPriorityBandNumber);
@@ -283,12 +297,10 @@ namespace Isis {
       static ImageOverlay StringToOverlay(QString);
 
     private:
-      // Get the file index offset to be saved in the band by pixel type
-      int GetIndexOffsetByPixelType();
 
       //Compare the input and mosaic for the specified band based on the criteria and update the
       //  mosaic origin band.
-      void BandComparison(int iss, int isl, int isb, int ins, int inl, int inb,
+      void BandComparison(int iss, int isl, int ins, int inl,
                           int bandPriorityInputBandNumber, int bandPriorityOutputBandNumber,
                           int index);
 
@@ -307,9 +319,6 @@ namespace Isis {
       // Checks for the table with name "InputImage"
       bool GetTrackStatus();
 
-      // Reset the origin band
-      void ResetOriginBand();
-
       // New mosaic, add the Band Bin group specific to the mosaic
       void AddBandBinGroup(int origIsb);
 
@@ -328,6 +337,7 @@ namespace Isis {
       void MatchDEMShapeModel();
 
       bool m_trackingEnabled;         //!<
+      Cube *m_trackingCube;           //!< Output tracking cube. NULL unless tracking is enabled.
       bool m_createOutputMosaic;      //!<
       int  m_bandPriorityBandNumber;  //!<
       QString m_bandPriorityKeyName;  //!<
diff --git a/isis/src/base/objs/ProcessMosaic/ProcessMosaic.truth b/isis/src/base/objs/ProcessMosaic/ProcessMosaic.truth
index fbf00017a39366f141d88a6498a8f5bb30decb9b..866ad422d1880a0f53af93a51f5a3fe779ff6805 100644
--- a/isis/src/base/objs/ProcessMosaic/ProcessMosaic.truth
+++ b/isis/src/base/objs/ProcessMosaic/ProcessMosaic.truth
@@ -1,12 +1,11 @@
 Testing ProcessMosaic Class ... 
 Create output mosaic with Tracking set to True
 1. Drop a small area into the middle of the output
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
-a. SUCCESS - Track Table Exists
-FileName		SerialNumber	
-isisTruth2.cub	MGS/561812335:32/MOC-WA/RED
+
+a. SUCCESS - "Tracking" Group Exists in [ "isisMosaic_01.cub" ]
+b. SUCCESS - Track Table Exists in [ "isisMosaic_01_tracking.cub" ]
+FileName		SerialNumber		PixelValue
+isisTruth2.cub	MGS/561812335:32/MOC-WA/RED	3
 
 
 ***  Input Image  ***  
@@ -45,7 +44,7 @@ Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "2" ,  "2" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "-2147483648"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -77,42 +76,43 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "159"
 
 
-( "1" , "1" , "2" )= "-8388613" ,  0
-( "1" , "2" , "2" )= "-8388613" ,  0
-( "1" , "3" , "2" )= "-8388613" ,  0
-( "1" , "4" , "2" )= "-8388613" ,  0
-( "1" , "5" , "2" )= "-8388613" ,  0
 
-( "2" , "1" , "2" )= "-8388613" ,  0
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-16777215" ,  1
-( "2" , "5" , "2" )= "-16777215" ,  1
+***  Tracking Cube  ***  
+( "1" , "1" )= "Null" ,  "Unknown"
+( "1" , "2" )= "Null" ,  "Unknown"
+( "1" , "3" )= "Null" ,  "Unknown"
+( "1" , "4" )= "Null" ,  "Unknown"
+( "1" , "5" )= "Null" ,  "Unknown"
 
-( "3" , "1" , "2" )= "-8388613" ,  0
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-16777215" ,  1
-( "3" , "5" , "2" )= "-16777215" ,  1
+( "2" , "1" )= "Null" ,  "Unknown"
+( "2" , "2" )= "3" ,  "1"
+( "2" , "3" )= "3" ,  "1"
+( "2" , "4" )= "3" ,  "1"
+( "2" , "5" )= "3" ,  "1"
 
-( "4" , "1" , "2" )= "-8388613" ,  0
-( "4" , "2" , "2" )= "-16777215" ,  1
-( "4" , "3" , "2" )= "-16777215" ,  1
-( "4" , "4" , "2" )= "-16777215" ,  1
-( "4" , "5" , "2" )= "-16777215" ,  1
+( "3" , "1" )= "Null" ,  "Unknown"
+( "3" , "2" )= "3" ,  "1"
+( "3" , "3" )= "3" ,  "1"
+( "3" , "4" )= "3" ,  "1"
+( "3" , "5" )= "3" ,  "1"
 
-( "5" , "1" , "2" )= "-8388613" ,  0
-( "5" , "2" , "2" )= "-16777215" ,  1
-( "5" , "3" , "2" )= "-16777215" ,  1
-( "5" , "4" , "2" )= "-16777215" ,  1
-( "5" , "5" , "2" )= "-16777215" ,  1
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "3" ,  "1"
+( "4" , "3" )= "3" ,  "1"
+( "4" , "4" )= "3" ,  "1"
+( "4" , "5" )= "3" ,  "1"
+
+( "5" , "1" )= "Null" ,  "Unknown"
+( "5" , "2" )= "3" ,  "1"
+( "5" , "3" )= "3" ,  "1"
+( "5" , "4" )= "3" ,  "1"
+( "5" , "5" )= "3" ,  "1"
 
 
 ***********************************************************************************
 2. Drop 2,2,1 into the lower right corner of band 2
 Tracking is set to False
-unittest: Working
-0% Processed
10% Processed
20% Processed
+
 ***  Input Image  ***  
 Stats  2 ,  2 ,  1 ,  5 ,  5 ,  1
 ( "2" , "2" , "1" )= "162"
@@ -149,7 +149,7 @@ Stats  2 ,  2 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "4" ,  "4" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "-2147483648"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -181,41 +181,9 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-2147483648"
-( "1" , "2" , "2" )= "-2147483648"
-( "1" , "3" , "2" )= "-2147483648"
-( "1" , "4" , "2" )= "-2147483648"
-( "1" , "5" , "2" )= "-2147483648"
-
-( "2" , "1" , "2" )= "-2147483648"
-( "2" , "2" , "2" )= "-2147483648"
-( "2" , "3" , "2" )= "-2147483648"
-( "2" , "4" , "2" )= "-2147483648"
-( "2" , "5" , "2" )= "-2147483648"
-
-( "3" , "1" , "2" )= "-2147483648"
-( "3" , "2" , "2" )= "-2147483648"
-( "3" , "3" , "2" )= "-2147483648"
-( "3" , "4" , "2" )= "-2147483648"
-( "3" , "5" , "2" )= "-2147483648"
-
-( "4" , "1" , "2" )= "-2147483648"
-( "4" , "2" , "2" )= "-2147483648"
-( "4" , "3" , "2" )= "-2147483648"
-( "4" , "4" , "2" )= "162"
-( "4" , "5" , "2" )= "163"
-
-( "5" , "1" , "2" )= "-2147483648"
-( "5" , "2" , "2" )= "-2147483648"
-( "5" , "3" , "2" )= "-2147483648"
-( "5" , "4" , "2" )= "161"
-( "5" , "5" , "2" )= "162"
-
-
 ***********************************************************************************
 3. Drop 3,3,1 into the upper right corner of band 1
-unittest: Working
-0% Processed
10% Processed
+
 ***  Input Image  ***  
 Stats  3 ,  3 ,  1 ,  5 ,  5 ,  1
 ( "3" , "3" , "1" )= "162"
@@ -252,7 +220,7 @@ Stats  3 ,  3 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "1" ,  "5" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "-2147483648"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -284,41 +252,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-8388613" ,  0
-( "1" , "2" , "2" )= "-8388613" ,  0
-( "1" , "3" , "2" )= "-8388613" ,  0
-( "1" , "4" , "2" )= "-8388613" ,  0
-( "1" , "5" , "2" )= "-16777215" ,  1
 
-( "2" , "1" , "2" )= "-8388613" ,  0
-( "2" , "2" , "2" )= "-8388613" ,  0
-( "2" , "3" , "2" )= "-8388613" ,  0
-( "2" , "4" , "2" )= "-8388613" ,  0
-( "2" , "5" , "2" )= "-8388613" ,  0
+***  Tracking Cube  ***  
+( "1" , "1" )= "Null" ,  "Unknown"
+( "1" , "2" )= "Null" ,  "Unknown"
+( "1" , "3" )= "Null" ,  "Unknown"
+( "1" , "4" )= "Null" ,  "Unknown"
+( "1" , "5" )= "3" ,  "1"
 
-( "3" , "1" , "2" )= "-8388613" ,  0
-( "3" , "2" , "2" )= "-8388613" ,  0
-( "3" , "3" , "2" )= "-8388613" ,  0
-( "3" , "4" , "2" )= "-8388613" ,  0
-( "3" , "5" , "2" )= "-8388613" ,  0
+( "2" , "1" )= "Null" ,  "Unknown"
+( "2" , "2" )= "Null" ,  "Unknown"
+( "2" , "3" )= "Null" ,  "Unknown"
+( "2" , "4" )= "Null" ,  "Unknown"
+( "2" , "5" )= "Null" ,  "Unknown"
 
-( "4" , "1" , "2" )= "-8388613" ,  0
-( "4" , "2" , "2" )= "-8388613" ,  0
-( "4" , "3" , "2" )= "-8388613" ,  0
-( "4" , "4" , "2" )= "-8388613" ,  0
-( "4" , "5" , "2" )= "-8388613" ,  0
+( "3" , "1" )= "Null" ,  "Unknown"
+( "3" , "2" )= "Null" ,  "Unknown"
+( "3" , "3" )= "Null" ,  "Unknown"
+( "3" , "4" )= "Null" ,  "Unknown"
+( "3" , "5" )= "Null" ,  "Unknown"
 
-( "5" , "1" , "2" )= "-8388613" ,  0
-( "5" , "2" , "2" )= "-8388613" ,  0
-( "5" , "3" , "2" )= "-8388613" ,  0
-( "5" , "4" , "2" )= "-8388613" ,  0
-( "5" , "5" , "2" )= "-8388613" ,  0
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "Null" ,  "Unknown"
+( "4" , "3" )= "Null" ,  "Unknown"
+( "4" , "4" )= "Null" ,  "Unknown"
+( "4" , "5" )= "Null" ,  "Unknown"
+
+( "5" , "1" )= "Null" ,  "Unknown"
+( "5" , "2" )= "Null" ,  "Unknown"
+( "5" , "3" )= "Null" ,  "Unknown"
+( "5" , "4" )= "Null" ,  "Unknown"
+( "5" , "5" )= "Null" ,  "Unknown"
 
 
 ***********************************************************************************
 4. Drop the first 3x3x1 to the upper left corner
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  3 ,  3 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -337,7 +306,7 @@ Stats  1 ,  1 ,  1 ,  3 ,  3 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "1" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "164"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -369,41 +338,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-16777215" ,  1
-( "1" , "2" , "2" )= "-16777215" ,  1
-( "1" , "3" , "2" )= "-16777215" ,  1
-( "1" , "4" , "2" )= "-8388613" ,  0
-( "1" , "5" , "2" )= "-8388613" ,  0
 
-( "2" , "1" , "2" )= "-16777215" ,  1
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-8388613" ,  0
-( "2" , "5" , "2" )= "-8388613" ,  0
+***  Tracking Cube  ***  
+( "1" , "1" )= "3" ,  "1"
+( "1" , "2" )= "3" ,  "1"
+( "1" , "3" )= "3" ,  "1"
+( "1" , "4" )= "Null" ,  "Unknown"
+( "1" , "5" )= "Null" ,  "Unknown"
 
-( "3" , "1" , "2" )= "-16777215" ,  1
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-8388613" ,  0
-( "3" , "5" , "2" )= "-8388613" ,  0
+( "2" , "1" )= "3" ,  "1"
+( "2" , "2" )= "3" ,  "1"
+( "2" , "3" )= "3" ,  "1"
+( "2" , "4" )= "Null" ,  "Unknown"
+( "2" , "5" )= "Null" ,  "Unknown"
 
-( "4" , "1" , "2" )= "-8388613" ,  0
-( "4" , "2" , "2" )= "-8388613" ,  0
-( "4" , "3" , "2" )= "-8388613" ,  0
-( "4" , "4" , "2" )= "-8388613" ,  0
-( "4" , "5" , "2" )= "-8388613" ,  0
+( "3" , "1" )= "3" ,  "1"
+( "3" , "2" )= "3" ,  "1"
+( "3" , "3" )= "3" ,  "1"
+( "3" , "4" )= "Null" ,  "Unknown"
+( "3" , "5" )= "Null" ,  "Unknown"
 
-( "5" , "1" , "2" )= "-8388613" ,  0
-( "5" , "2" , "2" )= "-8388613" ,  0
-( "5" , "3" , "2" )= "-8388613" ,  0
-( "5" , "4" , "2" )= "-8388613" ,  0
-( "5" , "5" , "2" )= "-8388613" ,  0
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "Null" ,  "Unknown"
+( "4" , "3" )= "Null" ,  "Unknown"
+( "4" , "4" )= "Null" ,  "Unknown"
+( "4" , "5" )= "Null" ,  "Unknown"
+
+( "5" , "1" )= "Null" ,  "Unknown"
+( "5" , "2" )= "Null" ,  "Unknown"
+( "5" , "3" )= "Null" ,  "Unknown"
+( "5" , "4" )= "Null" ,  "Unknown"
+( "5" , "5" )= "Null" ,  "Unknown"
 
 
 ***********************************************************************************
 5. Test for mosaic priority with existing mosaic
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -440,7 +410,7 @@ Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "2" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "164"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -472,41 +442,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-16777215" ,  1
-( "1" , "2" , "2" )= "-16777215" ,  1
-( "1" , "3" , "2" )= "-16777215" ,  1
-( "1" , "4" , "2" )= "-8388613" ,  0
-( "1" , "5" , "2" )= "-8388613" ,  0
 
-( "2" , "1" , "2" )= "-16777215" ,  1
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-16777215" ,  1
-( "2" , "5" , "2" )= "-16777215" ,  1
+***  Tracking Cube  ***  
+( "1" , "1" )= "3" ,  "1"
+( "1" , "2" )= "3" ,  "1"
+( "1" , "3" )= "3" ,  "1"
+( "1" , "4" )= "Null" ,  "Unknown"
+( "1" , "5" )= "Null" ,  "Unknown"
 
-( "3" , "1" , "2" )= "-16777215" ,  1
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-16777215" ,  1
-( "3" , "5" , "2" )= "-16777215" ,  1
+( "2" , "1" )= "3" ,  "1"
+( "2" , "2" )= "3" ,  "1"
+( "2" , "3" )= "3" ,  "1"
+( "2" , "4" )= "3" ,  "1"
+( "2" , "5" )= "3" ,  "1"
 
-( "4" , "1" , "2" )= "-16777215" ,  1
-( "4" , "2" , "2" )= "-16777215" ,  1
-( "4" , "3" , "2" )= "-16777215" ,  1
-( "4" , "4" , "2" )= "-16777215" ,  1
-( "4" , "5" , "2" )= "-16777215" ,  1
+( "3" , "1" )= "3" ,  "1"
+( "3" , "2" )= "3" ,  "1"
+( "3" , "3" )= "3" ,  "1"
+( "3" , "4" )= "3" ,  "1"
+( "3" , "5" )= "3" ,  "1"
 
-( "5" , "1" , "2" )= "-16777215" ,  1
-( "5" , "2" , "2" )= "-16777215" ,  1
-( "5" , "3" , "2" )= "-16777215" ,  1
-( "5" , "4" , "2" )= "-16777215" ,  1
-( "5" , "5" , "2" )= "-16777215" ,  1
+( "4" , "1" )= "3" ,  "1"
+( "4" , "2" )= "3" ,  "1"
+( "4" , "3" )= "3" ,  "1"
+( "4" , "4" )= "3" ,  "1"
+( "4" , "5" )= "3" ,  "1"
+
+( "5" , "1" )= "3" ,  "1"
+( "5" , "2" )= "3" ,  "1"
+( "5" , "3" )= "3" ,  "1"
+( "5" , "4" )= "3" ,  "1"
+( "5" , "5" )= "3" ,  "1"
 
 
 ***********************************************************************************
 6. Test for band priority with Keyname "FilterName" and value "Red" with Criteria "Greater" than in an existing mosaic
-unittest: Working
-0% Processed
10% Processed
+
 ***  Input Image  ***  
 Stats  3 ,  3 ,  1 ,  1 ,  10 ,  1
 ( "3" , "3" , "1" )= "162"
@@ -525,7 +496,7 @@ Stats  3 ,  3 ,  1 ,  1 ,  10 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "1" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "162"
 ( "1" , "2" , "1" )= "162"
 ( "1" , "3" , "1" )= "160"
@@ -557,41 +528,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-16777215" ,  1
-( "1" , "2" , "2" )= "-16777215" ,  1
-( "1" , "3" , "2" )= "-16777215" ,  1
-( "1" , "4" , "2" )= "-16777215" ,  1
-( "1" , "5" , "2" )= "-16777215" ,  1
 
-( "2" , "1" , "2" )= "-16777215" ,  1
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-16777215" ,  1
-( "2" , "5" , "2" )= "-16777215" ,  1
+***  Tracking Cube  ***  
+( "1" , "1" )= "3" ,  "1"
+( "1" , "2" )= "3" ,  "1"
+( "1" , "3" )= "3" ,  "1"
+( "1" , "4" )= "3" ,  "1"
+( "1" , "5" )= "3" ,  "1"
 
-( "3" , "1" , "2" )= "-16777215" ,  1
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-16777215" ,  1
-( "3" , "5" , "2" )= "-16777215" ,  1
+( "2" , "1" )= "Null" ,  "Unknown"
+( "2" , "2" )= "Null" ,  "Unknown"
+( "2" , "3" )= "Null" ,  "Unknown"
+( "2" , "4" )= "Null" ,  "Unknown"
+( "2" , "5" )= "Null" ,  "Unknown"
 
-( "4" , "1" , "2" )= "-16777215" ,  1
-( "4" , "2" , "2" )= "-16777215" ,  1
-( "4" , "3" , "2" )= "-16777215" ,  1
-( "4" , "4" , "2" )= "-16777215" ,  1
-( "4" , "5" , "2" )= "-16777215" ,  1
+( "3" , "1" )= "Null" ,  "Unknown"
+( "3" , "2" )= "Null" ,  "Unknown"
+( "3" , "3" )= "Null" ,  "Unknown"
+( "3" , "4" )= "Null" ,  "Unknown"
+( "3" , "5" )= "Null" ,  "Unknown"
 
-( "5" , "1" , "2" )= "-16777215" ,  1
-( "5" , "2" , "2" )= "-16777215" ,  1
-( "5" , "3" , "2" )= "-16777215" ,  1
-( "5" , "4" , "2" )= "-16777215" ,  1
-( "5" , "5" , "2" )= "-16777215" ,  1
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "Null" ,  "Unknown"
+( "4" , "3" )= "Null" ,  "Unknown"
+( "4" , "4" )= "Null" ,  "Unknown"
+( "4" , "5" )= "Null" ,  "Unknown"
+
+( "5" , "1" )= "Null" ,  "Unknown"
+( "5" , "2" )= "Null" ,  "Unknown"
+( "5" , "3" )= "Null" ,  "Unknown"
+( "5" , "4" )= "Null" ,  "Unknown"
+( "5" , "5" )= "Null" ,  "Unknown"
 
 
 ***********************************************************************************
 7. Test for band priority for existing mosaic with Keyname "OriginalBand" and value "1" and Criteria "Lesser" than
-unittest: Working
-0% Processed
10% Processed
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  1 ,  10 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -610,7 +582,7 @@ Stats  1 ,  1 ,  1 ,  1 ,  10 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "1" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "162"
 ( "1" , "2" , "1" )= "162"
 ( "1" , "3" , "1" )= "160"
@@ -642,41 +614,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-16777215" ,  1
-( "1" , "2" , "2" )= "-16777215" ,  1
-( "1" , "3" , "2" )= "-16777215" ,  1
-( "1" , "4" , "2" )= "-16777215" ,  1
-( "1" , "5" , "2" )= "-16777215" ,  1
 
-( "2" , "1" , "2" )= "-16777215" ,  1
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-16777215" ,  1
-( "2" , "5" , "2" )= "-16777215" ,  1
+***  Tracking Cube  ***  
+( "1" , "1" )= "3" ,  "1"
+( "1" , "2" )= "3" ,  "1"
+( "1" , "3" )= "3" ,  "1"
+( "1" , "4" )= "3" ,  "1"
+( "1" , "5" )= "3" ,  "1"
 
-( "3" , "1" , "2" )= "-16777215" ,  1
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-16777215" ,  1
-( "3" , "5" , "2" )= "-16777215" ,  1
+( "2" , "1" )= "Null" ,  "Unknown"
+( "2" , "2" )= "Null" ,  "Unknown"
+( "2" , "3" )= "Null" ,  "Unknown"
+( "2" , "4" )= "Null" ,  "Unknown"
+( "2" , "5" )= "Null" ,  "Unknown"
 
-( "4" , "1" , "2" )= "-16777215" ,  1
-( "4" , "2" , "2" )= "-16777215" ,  1
-( "4" , "3" , "2" )= "-16777215" ,  1
-( "4" , "4" , "2" )= "-16777215" ,  1
-( "4" , "5" , "2" )= "-16777215" ,  1
+( "3" , "1" )= "Null" ,  "Unknown"
+( "3" , "2" )= "Null" ,  "Unknown"
+( "3" , "3" )= "Null" ,  "Unknown"
+( "3" , "4" )= "Null" ,  "Unknown"
+( "3" , "5" )= "Null" ,  "Unknown"
 
-( "5" , "1" , "2" )= "-16777215" ,  1
-( "5" , "2" , "2" )= "-16777215" ,  1
-( "5" , "3" , "2" )= "-16777215" ,  1
-( "5" , "4" , "2" )= "-16777215" ,  1
-( "5" , "5" , "2" )= "-16777215" ,  1
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "Null" ,  "Unknown"
+( "4" , "3" )= "Null" ,  "Unknown"
+( "4" , "4" )= "Null" ,  "Unknown"
+( "4" , "5" )= "Null" ,  "Unknown"
+
+( "5" , "1" )= "Null" ,  "Unknown"
+( "5" , "2" )= "Null" ,  "Unknown"
+( "5" , "3" )= "Null" ,  "Unknown"
+( "5" , "4" )= "Null" ,  "Unknown"
+( "5" , "5" )= "Null" ,  "Unknown"
 
 
 ***********************************************************************************
-8. Test for band priority with BandNumber set
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
+8. Test for band priority with existing mosaic and BandNumber set
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -713,7 +686,7 @@ Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "3" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "162"
 ( "1" , "2" , "1" )= "162"
 ( "1" , "3" , "1" )= "160"
@@ -745,41 +718,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "160"
 
 
-( "1" , "1" , "2" )= "-16777215" ,  1
-( "1" , "2" , "2" )= "-16777215" ,  1
-( "1" , "3" , "2" )= "-16777215" ,  1
-( "1" , "4" , "2" )= "-16777215" ,  1
-( "1" , "5" , "2" )= "-16777215" ,  1
 
-( "2" , "1" , "2" )= "-16777215" ,  1
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-16777215" ,  1
-( "2" , "5" , "2" )= "-16777215" ,  1
+***  Tracking Cube  ***  
+( "1" , "1" )= "3" ,  "1"
+( "1" , "2" )= "3" ,  "1"
+( "1" , "3" )= "3" ,  "1"
+( "1" , "4" )= "3" ,  "1"
+( "1" , "5" )= "3" ,  "1"
 
-( "3" , "1" , "2" )= "-16777215" ,  1
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-16777215" ,  1
-( "3" , "5" , "2" )= "-16777215" ,  1
+( "2" , "1" )= "Null" ,  "Unknown"
+( "2" , "2" )= "Null" ,  "Unknown"
+( "2" , "3" )= "Null" ,  "Unknown"
+( "2" , "4" )= "Null" ,  "Unknown"
+( "2" , "5" )= "Null" ,  "Unknown"
 
-( "4" , "1" , "2" )= "-16777215" ,  1
-( "4" , "2" , "2" )= "-16777215" ,  1
-( "4" , "3" , "2" )= "-16777215" ,  1
-( "4" , "4" , "2" )= "-16777215" ,  1
-( "4" , "5" , "2" )= "-16777215" ,  1
+( "3" , "1" )= "3" ,  "1"
+( "3" , "2" )= "Null" ,  "Unknown"
+( "3" , "3" )= "Null" ,  "Unknown"
+( "3" , "4" )= "Null" ,  "Unknown"
+( "3" , "5" )= "Null" ,  "Unknown"
 
-( "5" , "1" , "2" )= "-16777215" ,  1
-( "5" , "2" , "2" )= "-16777215" ,  1
-( "5" , "3" , "2" )= "-16777215" ,  1
-( "5" , "4" , "2" )= "-16777215" ,  1
-( "5" , "5" , "2" )= "-16777215" ,  1
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "Null" ,  "Unknown"
+( "4" , "3" )= "Null" ,  "Unknown"
+( "4" , "4" )= "Null" ,  "Unknown"
+( "4" , "5" )= "Null" ,  "Unknown"
+
+( "5" , "1" )= "3" ,  "1"
+( "5" , "2" )= "Null" ,  "Unknown"
+( "5" , "3" )= "Null" ,  "Unknown"
+( "5" , "4" )= "Null" ,  "Unknown"
+( "5" , "5" )= "3" ,  "1"
 
 
 ***********************************************************************************
 9. Test for Null flag set with existing mosaic
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -816,7 +790,7 @@ Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "2" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "162"
 ( "1" , "2" , "1" )= "162"
 ( "1" , "3" , "1" )= "160"
@@ -848,41 +822,42 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "-2147483648"
 
 
-( "1" , "1" , "2" )= "-16777215" ,  1
-( "1" , "2" , "2" )= "-16777215" ,  1
-( "1" , "3" , "2" )= "-16777215" ,  1
-( "1" , "4" , "2" )= "-16777215" ,  1
-( "1" , "5" , "2" )= "-16777215" ,  1
 
-( "2" , "1" , "2" )= "-16777215" ,  1
-( "2" , "2" , "2" )= "-16777215" ,  1
-( "2" , "3" , "2" )= "-16777215" ,  1
-( "2" , "4" , "2" )= "-16777215" ,  1
-( "2" , "5" , "2" )= "-16777215" ,  1
+***  Tracking Cube  ***  
+( "1" , "1" )= "3" ,  "1"
+( "1" , "2" )= "3" ,  "1"
+( "1" , "3" )= "3" ,  "1"
+( "1" , "4" )= "3" ,  "1"
+( "1" , "5" )= "3" ,  "1"
 
-( "3" , "1" , "2" )= "-16777215" ,  1
-( "3" , "2" , "2" )= "-16777215" ,  1
-( "3" , "3" , "2" )= "-16777215" ,  1
-( "3" , "4" , "2" )= "-16777215" ,  1
-( "3" , "5" , "2" )= "-16777215" ,  1
+( "2" , "1" )= "Null" ,  "Unknown"
+( "2" , "2" )= "3" ,  "1"
+( "2" , "3" )= "3" ,  "1"
+( "2" , "4" )= "Null" ,  "Unknown"
+( "2" , "5" )= "3" ,  "1"
 
-( "4" , "1" , "2" )= "-16777215" ,  1
-( "4" , "2" , "2" )= "-16777215" ,  1
-( "4" , "3" , "2" )= "-16777215" ,  1
-( "4" , "4" , "2" )= "-16777215" ,  1
-( "4" , "5" , "2" )= "-16777215" ,  1
+( "3" , "1" )= "3" ,  "1"
+( "3" , "2" )= "3" ,  "1"
+( "3" , "3" )= "3" ,  "1"
+( "3" , "4" )= "Null" ,  "Unknown"
+( "3" , "5" )= "Null" ,  "Unknown"
 
-( "5" , "1" , "2" )= "-16777215" ,  1
-( "5" , "2" , "2" )= "-16777215" ,  1
-( "5" , "3" , "2" )= "-16777215" ,  1
-( "5" , "4" , "2" )= "-16777215" ,  1
-( "5" , "5" , "2" )= "-16777215" ,  1
+( "4" , "1" )= "Null" ,  "Unknown"
+( "4" , "2" )= "Null" ,  "Unknown"
+( "4" , "3" )= "Null" ,  "Unknown"
+( "4" , "4" )= "Null" ,  "Unknown"
+( "4" , "5" )= "Null" ,  "Unknown"
+
+( "5" , "1" )= "3" ,  "1"
+( "5" , "2" )= "Null" ,  "Unknown"
+( "5" , "3" )= "Null" ,  "Unknown"
+( "5" , "4" )= "Null" ,  "Unknown"
+( "5" , "5" )= "3" ,  "1"
 
 
 
 10. Test Average Priority
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -982,8 +957,7 @@ Total Bands= "2"
 ( "5" , "5" , "2" )= "1"
 
 
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
+
 ***  Mosaic Image  ***  
 Start Stats  "1" ,  "1" ,  "1"
 Total Bands= "2"
@@ -1051,8 +1025,7 @@ Total Bands= "2"
 
 ****** End Average **********************
 11. Test for band priority with Tracking Off and BandNumber set
-unittest: Working
-0% Processed
+
 ***  Input Image  ***  
 Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 ( "1" , "1" , "1" )= "-2147483648"
@@ -1089,7 +1062,7 @@ Stats  1 ,  1 ,  1 ,  5 ,  5 ,  1
 
 ***  Mosaic Image  ***  
 Start Stats  "3" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "-2147483648"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -1121,42 +1094,10 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "160"
 
 
-( "1" , "1" , "2" )= "-2147483648"
-( "1" , "2" , "2" )= "-2147483648"
-( "1" , "3" , "2" )= "-2147483648"
-( "1" , "4" , "2" )= "-2147483648"
-( "1" , "5" , "2" )= "-2147483648"
-
-( "2" , "1" , "2" )= "-2147483648"
-( "2" , "2" , "2" )= "-2147483648"
-( "2" , "3" , "2" )= "-2147483648"
-( "2" , "4" , "2" )= "-2147483648"
-( "2" , "5" , "2" )= "-2147483648"
 
-( "3" , "1" , "2" )= "-2147483648"
-( "3" , "2" , "2" )= "-2147483648"
-( "3" , "3" , "2" )= "-2147483648"
-( "3" , "4" , "2" )= "-2147483648"
-( "3" , "5" , "2" )= "-2147483648"
-
-( "4" , "1" , "2" )= "-2147483648"
-( "4" , "2" , "2" )= "-2147483648"
-( "4" , "3" , "2" )= "-2147483648"
-( "4" , "4" , "2" )= "-2147483648"
-( "4" , "5" , "2" )= "-2147483648"
-
-( "5" , "1" , "2" )= "-2147483648"
-( "5" , "2" , "2" )= "-2147483648"
-( "5" , "3" , "2" )= "-2147483648"
-( "5" , "4" , "2" )= "-2147483648"
-( "5" , "5" , "2" )= "-2147483648"
-
-
-unittest: Working
-0% Processed
 ***  Mosaic Image  ***  
 Start Stats  "1" ,  "1" ,  "1"
-Total Bands= "2"
+Total Bands= "1"
 ( "1" , "1" , "1" )= "-2147483648"
 ( "1" , "2" , "1" )= "164"
 ( "1" , "3" , "1" )= "-2147483648"
@@ -1188,37 +1129,6 @@ Total Bands= "2"
 ( "5" , "5" , "1" )= "160"
 
 
-( "1" , "1" , "2" )= "-2147483648"
-( "1" , "2" , "2" )= "-2147483648"
-( "1" , "3" , "2" )= "-2147483648"
-( "1" , "4" , "2" )= "-2147483648"
-( "1" , "5" , "2" )= "-2147483648"
-
-( "2" , "1" , "2" )= "-2147483648"
-( "2" , "2" , "2" )= "-2147483648"
-( "2" , "3" , "2" )= "-2147483648"
-( "2" , "4" , "2" )= "-2147483648"
-( "2" , "5" , "2" )= "-2147483648"
-
-( "3" , "1" , "2" )= "-2147483648"
-( "3" , "2" , "2" )= "-2147483648"
-( "3" , "3" , "2" )= "-2147483648"
-( "3" , "4" , "2" )= "-2147483648"
-( "3" , "5" , "2" )= "-2147483648"
-
-( "4" , "1" , "2" )= "-2147483648"
-( "4" , "2" , "2" )= "-2147483648"
-( "4" , "3" , "2" )= "-2147483648"
-( "4" , "4" , "2" )= "-2147483648"
-( "4" , "5" , "2" )= "-2147483648"
-
-( "5" , "1" , "2" )= "-2147483648"
-( "5" , "2" , "2" )= "-2147483648"
-( "5" , "3" , "2" )= "-2147483648"
-( "5" , "4" , "2" )= "-2147483648"
-( "5" , "5" , "2" )= "-2147483648"
-
-
 ********* Test imagePositions() ********
 Name:  "ImageLocation"
 File:  "isisTruth2.cub"
@@ -1246,17 +1156,16 @@ Test no output cube
 **PROGRAMMER ERROR** You must specify exactly one input and one output cube.
 
 Test Band cannot be a priority if Track is not set
-unittest: Working
-0% Processed
Test Band not found with Band as Priority
-unittest: Working
-0% Processed
**USER ERROR** Invalid Band / Key Name, Value.
+Test tracking with ontop priotirty and multiple bands
+**USER ERROR** Cannot enable tracking while adding to a mosaic without tracking information. Confirm that your mosaic was originally created with tracking enabled.
+
+Test Band not found with Band as Priority
+**USER ERROR** Invalid Band / Key Name, Value.
 
 ***********************************************************************************
 Test Pvl Group [BandBin] for mismatch between input cube and established mosaic
     Create output mosaic
     Modify Group [BandBin] so it will differ
     Mosaic the same cube to verify proper error is thrown
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
unittest: Working
-0% Processed
**USER ERROR** The input cube [/usgs/cpkgs/isis3/data/base/testData/isisTruth2.cub] and the base mosaic values of the Pvl Group [BandBin] for Keyword [OriginalBand] do not match. Base mosaic value at index [0] = 3. Input cube value at index [0] = 1. **Note: use mapmos/automos MatchBandBin = false to override this check**.
+**USER ERROR** The input cube [base/testData/isisTruth2.cub] and the base mosaic values of the Pvl Group [BandBin] for Keyword [OriginalBand] do not match. Base mosaic value at index [0] = 3. Input cube value at index [0] = 1. **Note: use mapmos/automos MatchBandBin = false to override this check**.
 
diff --git a/isis/src/base/objs/ProcessMosaic/unitTest.cpp b/isis/src/base/objs/ProcessMosaic/unitTest.cpp
index fe04553ce67f221ef7ee11507190749dad8ab352..502f071000e0d674f41e17addf8ea07f816bce16 100644
--- a/isis/src/base/objs/ProcessMosaic/unitTest.cpp
+++ b/isis/src/base/objs/ProcessMosaic/unitTest.cpp
@@ -4,6 +4,7 @@
 #include "IString.h"
 #include "Portal.h"
 #include "ProcessMosaic.h"
+#include "SpecialPixel.h"
 #include "Table.h"
 
 using namespace Isis;
@@ -13,17 +14,23 @@ void testIn(int iss, int isl, int isb, int ins = 0, int inl = 0, int inb = 0);
 void testOut(int piSamples, int piLines, int piBands, int piPriority,
              int originBand);
 /**
- * unitTest for ProcessMosaic
- * tests for correct area drop, tracking origin,  origin band,
- * priorities input, mosaic and band, options to allow HS, LS and NULL
- * pixels from input to mosaic, each time displaying the contents of the
- * input and mosaic pixels for the area under consideration
+ * Unit test for ProcessMosaic. 
+ *  
+ * Tests for correct area drop, tracking origin,  origin band, 
+ * priorities input, mosaic and band, options to allow HS, LS 
+ * and NULL pixels from input to mosaic, each time displaying 
+ * the contents of the input and mosaic pixels for the area 
+ * under consideration 
  *
  * Also tests for exceptions like number of input and output images to
  * be exactly one each, band cannot be priority if Track is set off and
  * more
  *
- * @author sprasad (10/14/2009)
+ * @author 2009-10-14 Sharmila Prasad 
+ *  
+ *  @internal
+ *   @history 2018-06-06 Jeannie Backer - Removed file paths from error message written to
+ *                           test output.
  */
 void IsisMain() {
 
@@ -33,7 +40,7 @@ void IsisMain() {
 
   // Create the default output cube
   Process p;
-  p.SetOutputCube("TO", 5, 5, 2);
+  p.SetOutputCube("TO", 5, 5, 1);
   p.EndProcess();
 
   // ***********************************************************
@@ -51,24 +58,35 @@ void IsisMain() {
 
   m1.StartProcess(5, 2, 1); // This should be overwritten by the next StartProcess call
   m1.StartProcess(2, 2, 1);
+  
+  // Test for "Tracking" group in the mosaic cube
+  if (mosaicCube1->hasGroup("Tracking")) {
+    qDebug() << "";
+    qDebug() << "a. SUCCESS - \"Tracking\" Group Exists in [" << mosaicCube1->fileName() << "]";
+  }
+  else {
+    qDebug() << "";
+    qDebug() << "a. FAILURE - \"Tracking\" Group does not Exist in [" << mosaicCube1->fileName() << "]";
+  }
 
-  // Test for Tracking Table "Input Images"
+  // Test for Tracking Table "InputImages" in the tracking cube
+  QString trackingBase = FileName(mosaicCube1->fileName()).removeExtension().expanded().split("/").last();
+  Cube *trackingCube1 = new Cube(FileName(trackingBase + "_tracking.cub"));
   try {
     Table trackTable(ProcessMosaic::TRACKING_TABLE_NAME);
-    mosaicCube1->read(trackTable);
-    qDebug() << "";
-    qDebug() << "a. SUCCESS - Track Table Exists";
+    trackingCube1->read(trackTable);
+    qDebug() << "b. SUCCESS - Track Table Exists in [" << trackingCube1->fileName() << "]";
     qDebug().noquote() << Table::toString( trackTable, "\t" );
   }
   catch (IException&) {
-    qDebug() << "";
-    qDebug() << "a. FAILURE - Track Table does not Exist";
+    qDebug() << "b. FAILURE - Track Table does not Exist in [" << trackingCube1->fileName() << "]";
   }
   m1.EndProcess();
   testIn(1, 1, 1, 5, 5, 1);
   testOut(2, 2, 1, ProcessMosaic::PlaceImagesOnTop, 2);
 
   remove("isisMosaic_01.cub");
+  remove("isisMosaic_01_tracking.cub");
   qDebug() << "***********************************************************************************";
 
   // ***********************************************************
@@ -82,7 +100,7 @@ void IsisMain() {
 
   m2.SetInputCube("FROM", 2, 2, 1, -1, -1, -1);
 
-  p.SetOutputCube("TO", 5, 5, 2);
+  p.SetOutputCube("TO", 5, 5, 1);
   p.EndProcess();
   m2.SetOutputCube("TO");
 
@@ -105,7 +123,7 @@ void IsisMain() {
 
   m3.SetInputCube("FROM", 3, 3, 1, 10, 1, 1);
 
-  p.SetOutputCube("TO", 5, 5, 2);
+  p.SetOutputCube("TO", 5, 5, 1);
   p.EndProcess();
   m3.SetOutputCube("TO");
 
@@ -116,6 +134,7 @@ void IsisMain() {
   testOut(5, 1, 1, ProcessMosaic::PlaceImagesBeneath, 2);
 
   remove("isisMosaic_01.cub");
+  remove("isisMosaic_01_tracking.cub");
   qDebug() << "***********************************************************************************";
 
   // ***********************************************************
@@ -128,7 +147,7 @@ void IsisMain() {
 
   m4.SetInputCube("FROM", 1, 1, 1, 3, 3, 1);
 
-  p.SetOutputCube("TO", 5, 5, 2);
+  p.SetOutputCube("TO", 5, 5, 1);
   p.EndProcess();
   m4.SetOutputCube("TO");
 
@@ -144,7 +163,7 @@ void IsisMain() {
   qDebug() << "5. Test for mosaic priority with existing mosaic";
   ProcessMosaic m5;
   m5.SetImageOverlay(ProcessMosaic::PlaceImagesBeneath);
-
+  
   m5.SetInputCube("FROM", 1, 1, 1, 5, 5, 1);
 
   m5.SetOutputCube("TO");
@@ -204,12 +223,11 @@ void IsisMain() {
   testIn(1, 1, 1, 10, 1, 1);
   testOut(1, 1, 1, ProcessMosaic::UseBandPlacementCriteria, 2);
 
-  //remove("isisMosaic_01.cub");
   qDebug() << "***********************************************************************************";
 
   // ***********************************************************
   // Test for band priority using Band Number
-  qDebug() << "8. Test for band priority with BandNumber set";
+  qDebug() << "8. Test for band priority with existing mosaic and BandNumber set";
   ProcessMosaic m8;
   m8.SetTrackFlag(true);
   m8.SetCreateFlag(false);
@@ -251,7 +269,9 @@ void IsisMain() {
   testIn(1, 1, 1, 5, 5, 1);
   testOut(1, 2, 1, ProcessMosaic::UseBandPlacementCriteria, 2);
 
-  //remove("isisMosaic_01.cub");
+  remove("isisMosaic_01.cub");
+  remove("isisMosaic_01_tracking.cub");
+
 
   // ***********************************************************
   // Test Average Priority
@@ -298,7 +318,7 @@ void IsisMain() {
 
   m11.SetInputCube("FROM", 1, 1, 1, 5, 5, 1);
 
-  p.SetOutputCube("TO", 5, 5, 2);
+  p.SetOutputCube("TO", 5, 5, 1);
   p.EndProcess();
   m11.SetOutputCube("TO");
 
@@ -446,13 +466,33 @@ void IsisMain() {
     p.EndProcess();
     qDebug() << "";
   }
+  
+  // ***********************************************************
+  // Test tracking with ontop priotirty and multiple bands
+  qDebug() << "Test tracking with ontop priotirty and multiple bands";
+  try {
+    ProcessMosaic m;
+    m.SetTrackFlag(true);
+    m.SetImageOverlay(ProcessMosaic::UseBandPlacementCriteria);
+    m.SetBandNumber(10);
+
+    m.SetOutputCube("TO");
+    m.SetInputCube("FROM", 1, 1, 1, -1, -1, -1);
+    m.StartProcess(1, 1, 1);
+    m.EndProcess();
+  }
+  catch (IException &e) {
+    e.print();
+    p.EndProcess();
+    qDebug() << "";
+  }
 
   // ***********************************************************
   // Test Band not found with Band as Priority
   qDebug() << "Test Band not found with Band as Priority";
   try {
     ProcessMosaic m;
-    m.SetTrackFlag(true);
+    m.SetTrackFlag(false);
     m.SetImageOverlay(ProcessMosaic::UseBandPlacementCriteria);
     m.SetBandNumber(10);
 
@@ -467,6 +507,7 @@ void IsisMain() {
     qDebug() << "";
   }
   remove("isisMosaic_01.cub");
+  remove("isisMosaic_01_tracking.cub");
   
   
   // ***********************************************************
@@ -476,8 +517,8 @@ void IsisMain() {
   qDebug() << "    Create output mosaic";
   qDebug() << "    Modify Group [BandBin] so it will differ";
   qDebug() << "    Mosaic the same cube to verify proper error is thrown";
-
-  p.SetOutputCube("TO", 5, 5, 2);
+  
+  p.SetOutputCube("TO", 5, 5, 1);
   p.EndProcess();
   
   ProcessMosaic m13;
@@ -497,7 +538,8 @@ void IsisMain() {
     m.EndProcess();
   }
   catch (IException &e) {
-    e.print();
+    QString message = e.toString();
+    qDebug().noquote() << message.replace(QRegExp("cube.*base/testData"), "cube [base/testData");
     p.EndProcess();
     qDebug() << "";
   }
@@ -557,7 +599,7 @@ void testIn(int iss, int isl, int isb, int ins, int inl, int inb) {
 
 /**
  * Display the contents of Ouput image and display the sample, line and band
- * stas for which it the mosaic is tested
+ * stats for the mosaic being tested
  *
  * @author sprasad (10/14/2009)
  *
@@ -568,6 +610,7 @@ void testIn(int iss, int isl, int isb, int ins, int inl, int inb) {
 void testOut(int piSamples, int piLines,
              int piBands, int piPriority, int originBand) {
   Cube cOutCube;
+  Cube trackingCube;
   UserInterface &ui = Isis::Application::GetUserInterface();
   QString sTo;
   if (piPriority == ProcessMosaic::AverageImageWithMosaic)
@@ -633,5 +676,63 @@ void testOut(int piSamples, int piLines,
       break;
     }
   }
+  
+  // Test the tracking cube
+  if (cOutCube.hasGroup("Tracking")) {
+    
+    qDebug() << "";
+    
+    qDebug() << "***  Tracking Cube  ***  ";
+    
+    QString trackingBase = FileName(cOutCube.fileName()).removeExtension().expanded().split("/").last();
+    trackingCube.open(trackingBase + "_tracking.cub");
+    Portal trackingPortal(5, 1, trackingCube.pixelType());
+    
+    for (int line = 1; line <= 5; line++) {
+      trackingPortal.SetPosition(1, line, 1);  //sample, line, band position
+      trackingCube.read(trackingPortal);
+      for (int iPixel = 0; iPixel < trackingPortal.size(); iPixel++) {
+
+        QString pixelString;
+        QString fileIndex;
+        
+        if (IsSpecial(trackingPortal[iPixel])) {
+          if (trackingPortal[iPixel] == Isis::Null) {
+            pixelString = "Null";
+          }
+          else if (trackingPortal[iPixel] == Isis::Lrs) {
+            pixelString = "Lrs";
+          }
+          else if (trackingPortal[iPixel] == Isis::Lis) {
+            pixelString = "Lis";
+          }
+          else if (trackingPortal[iPixel] == Isis::Hrs) {
+            pixelString = "Hrs";
+          }
+          else if (trackingPortal[iPixel] == Isis::His) {
+            pixelString = "His";
+          }
+          else {
+            pixelString = "Unknown";
+          }
+
+          fileIndex = "Unknown";
+        }
+        else {
+          pixelString = Isis::toString((unsigned int)trackingPortal[iPixel]);
+          fileIndex = Isis::toString((unsigned int)trackingPortal[iPixel] - 2);
+        }
+        
+        qDebug() << "(" << Isis::toString(line) 
+                 << "," << Isis::toString(iPixel + 1)
+                 << ")=" << pixelString
+                 << ", " << fileIndex;
+      }
+      qDebug() << "";
+    }
+    qDebug() << "";
+  }
+  
   cOutCube.close();
+  trackingCube.close();
 }
diff --git a/isis/src/base/objs/ProcessPolygons/ProcessPolygons.truth b/isis/src/base/objs/ProcessPolygons/ProcessPolygons.truth
index bf6c8dd54d5beb0c64d2bb4d52278d515bae9d62..29c056d339086a27ff02738eea7bc327a22f5caa 100644
--- a/isis/src/base/objs/ProcessPolygons/ProcessPolygons.truth
+++ b/isis/src/base/objs/ProcessPolygons/ProcessPolygons.truth
@@ -1,19 +1,15 @@
 Testing Isis::ProcessPolygons Class ... 
 FileName: processPolygonsTest.cub
-unittest: Working
-0% Processed
Band: 1 DN: 4 Band: 1 DN: 4 Band: 1 DN: 4 
-10% Processed
Band: 1 DN: 4.2 Band: 1 DN: 4 Band: 1 DN: 4 
-20% Processed
Band: 1 DN: 4.53846 Band: 1 DN: 4.2 Band: 1 DN: 4 
-30% Processed
40% Processed
50% Processed
Band: 2 DN: 5 Band: 2 DN: 5 Band: 2 DN: 5 
-60% Processed
Band: 2 DN: 5.2 Band: 2 DN: 5 Band: 2 DN: 5 
-70% Processed
Band: 2 DN: 5.53846 Band: 2 DN: 5.2 Band: 2 DN: 5 
-80% Processed
90% Processed
100% Processed
+Band: 1 DN: 4 Band: 1 DN: 4 Band: 1 DN: 4 
+Band: 1 DN: 4.2 Band: 1 DN: 4 Band: 1 DN: 4 
+Band: 1 DN: 4.53846 Band: 1 DN: 4.2 Band: 1 DN: 4 
+Band: 2 DN: 5 Band: 2 DN: 5 Band: 2 DN: 5 
+Band: 2 DN: 5.2 Band: 2 DN: 5 Band: 2 DN: 5 
+Band: 2 DN: 5.53846 Band: 2 DN: 5.2 Band: 2 DN: 5 
 FileName: processPolygonsTest_count.cub
-unittest: Working
-0% Processed
Band: 1 DN: 15 Band: 1 DN: 16 Band: 1 DN: 16 
-10% Processed
Band: 1 DN: 15 Band: 1 DN: 16 Band: 1 DN: 16 
-20% Processed
Band: 1 DN: 13 Band: 1 DN: 15 Band: 1 DN: 15 
-30% Processed
40% Processed
50% Processed
Band: 2 DN: 15 Band: 2 DN: 16 Band: 2 DN: 16 
-60% Processed
Band: 2 DN: 15 Band: 2 DN: 16 Band: 2 DN: 16 
-70% Processed
Band: 2 DN: 13 Band: 2 DN: 15 Band: 2 DN: 15 
-80% Processed
90% Processed
100% Processed
+Band: 1 DN: 15 Band: 1 DN: 16 Band: 1 DN: 16 
+Band: 1 DN: 15 Band: 1 DN: 16 Band: 1 DN: 16 
+Band: 1 DN: 13 Band: 1 DN: 15 Band: 1 DN: 15 
+Band: 2 DN: 15 Band: 2 DN: 16 Band: 2 DN: 16 
+Band: 2 DN: 15 Band: 2 DN: 16 Band: 2 DN: 16 
+Band: 2 DN: 13 Band: 2 DN: 15 Band: 2 DN: 15 
diff --git a/isis/src/base/objs/ProcessRubberSheet/ProcessRubberSheet.truth b/isis/src/base/objs/ProcessRubberSheet/ProcessRubberSheet.truth
index 2304bf41c5cdad3ffa8baa8b55842f397e397ff1..4df58d2d08964087a4998b4d5d9e71499127c761 100644
--- a/isis/src/base/objs/ProcessRubberSheet/ProcessRubberSheet.truth
+++ b/isis/src/base/objs/ProcessRubberSheet/ProcessRubberSheet.truth
@@ -1,6 +1,5 @@
 Testing ProcessRubberSheet Class ... 
-unittest: Working
-0% Processed
The band changed to :1
+The band changed to :1
 Output Sample:Line = 1:1
 Output Sample:Line = 128:1
 Output Sample:Line = 1:128
@@ -26,7 +25,7 @@ Output Sample:Line = 128:65
 Output Sample:Line = 65:128
 Output Sample:Line = 128:128
 Output Sample:Line = 96.5:96.5
-10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
The band changed to :2
+The band changed to :2
 Output Sample:Line = 1:1
 Output Sample:Line = 128:1
 Output Sample:Line = 1:128
@@ -52,7 +51,6 @@ Output Sample:Line = 128:65
 Output Sample:Line = 65:128
 Output Sample:Line = 128:128
 Output Sample:Line = 96.5:96.5
-60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 Testing NO input with one output error ...
 **PROGRAMMER ERROR** You must specify exactly one input cube.
diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth
index 67325455f4502e1422b2b3774c1566b8e2590ef5..979f2b4f7316139763f63fda175b06de9c6ce7c3 100644
--- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth
+++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth
@@ -4,42 +4,37 @@ Testing ls, grep, sed and pipes ...
 
 ProgramLauncher.cpp
 ProgramLauncher.h
-ProgramLauncher.o
 ProgramLauncher.truth
 Testing stats ... 
 
-hist: Computing min/max for histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-hist: Gathering histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = Results
-  From                    = /usgs/cpkgs/isis3/data/base/testData/ab102401_ide-
-                            al.cub
+  From                    = unitTest.cub
   Band                    = 1
-  Average                 = 0.040536894512714
-  StandardDeviation       = 0.01519314883071
-  Variance                = 2.30831771392117e-04
-  Median                  = 0.037797920878468
-  Mode                    = 0.034160507255072
-  Skew                    = 0.54083067271281
-  Minimum                 = 0.010204331949353
-  Maximum                 = 0.095491595566273
-  Sum                     = 31525.745547011
-  TotalPixels             = 1152000
-  ValidPixels             = 777705
+  Average                 = 24.999999961853
+  StandardDeviation       = 14.728323083889
+  Variance                = 216.92350086341
+  Median                  = 24.489967193103
+  Mode                    = 0.0
+  Skew                    = 0.10388815464838
+  Minimum                 = 0.0
+  Maximum                 = 50.0
+  Sum                     = 62499.999904633
+  TotalPixels             = 2500
+  ValidPixels             = 2500
   OverValidMaximumPixels  = 0
   UnderValidMinimumPixels = 0
-  NullPixels              = 353897
+  NullPixels              = 0
   LisPixels               = 0
   LrsPixels               = 0
   HisPixels               = 0
-  HrsPixels               = 20398
+  HrsPixels               = 0
 End_Group
 
 Testing malformed command... 
+NOTE: The exit code for this test differs on each OS.
+That is the reason for the OS specific truth files. Please ignore the exit codes.
 
-sh: -c: line 0: unexpected EOF while looking for matching `''
-sh: -c: line 1: syntax error: unexpected end of file
+sh: 1: Syntax error: Unterminated quoted string
 **PROGRAMMER ERROR** Executing command [ls -l * | grep Program | sed 's/\(.*\)\(ProgramLauncher.*\)/\2/] failed with return status [512].
 
 Testing non-existant Isis 3 program... 
@@ -47,37 +42,35 @@ Testing non-existant Isis 3 program...
 **ERROR** Program [chocolatelab] does not appear to be a valid Isis 3 program.
 
 Testing using Isis 3 program as a system program... 
+NOTE: The exit code for this test differs on each OS.
+That is the reason for the OS specific truth files. Please ignore the exit codes.
 
 terminate called after throwing an instance of 'Isis::IException'
   what():  **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999].
-**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/src/base/objs/Preference/TestPreferences] failed with return status [6].
+Aborted (core dumped)
+**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [34304].
 
 Testing using Isis 3 program as a system program without pid... 
 
-stats: Computing min/max for histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-stats: Gathering histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = Results
-  From                    = /usgs/cpkgs/isis3/data/base/testData/ab102401_ide-
-                            al.cub
+  From                    = unitTest.cub
   Band                    = 1
-  Average                 = 0.040536894512714
-  StandardDeviation       = 0.01519314883071
-  Variance                = 2.30831771392117e-04
-  Median                  = 0.037797920878468
-  Mode                    = 0.034160507255072
-  Skew                    = 0.54083067271281
-  Minimum                 = 0.010204331949353
-  Maximum                 = 0.095491595566273
-  Sum                     = 31525.745547011
-  TotalPixels             = 1152000
-  ValidPixels             = 777705
+  Average                 = 24.999999961853
+  StandardDeviation       = 14.728323083889
+  Variance                = 216.92350086341
+  Median                  = 24.489967193103
+  Mode                    = 0.0
+  Skew                    = 0.10388815464838
+  Minimum                 = 0.0
+  Maximum                 = 50.0
+  Sum                     = 62499.999904633
+  TotalPixels             = 2500
+  ValidPixels             = 2500
   OverValidMaximumPixels  = 0
   UnderValidMinimumPixels = 0
-  NullPixels              = 353897
+  NullPixels              = 0
   LisPixels               = 0
   LrsPixels               = 0
   HisPixels               = 0
-  HrsPixels               = 20398
+  HrsPixels               = 0
 End_Group
diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth
index 70eedde8c6a852d6f0a1437a3c0c7f82cf758584..7f794f7ff36380853de73e94046993d97e540413 100644
--- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth
+++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth
@@ -4,7 +4,6 @@ Testing ls, grep, sed and pipes ...
 
 ProgramLauncher.cpp
 ProgramLauncher.h
-ProgramLauncher.o
 ProgramLauncher.truth
 Testing stats ... 
 
@@ -54,7 +53,7 @@ NOTE: The exit code for this test differs on each OS.
 That is the reason for the OS specific truth files. Please ignore the exit codes.
 
 libc++abi.dylib: terminating with uncaught exception of type Isis::IException: **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999].
-**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/src/base/objs/Preference/TestPreferences] failed with return status [6].
+**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [6].
 
 Testing using Isis 3 program as a system program without pid... 
 
diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_13.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_13.truth
new file mode 100644
index 0000000000000000000000000000000000000000..a3e39f150a6db362d61b39a92f378def9265fb84
--- /dev/null
+++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_13.truth
@@ -0,0 +1,75 @@
+Testing ProgramLauncher Class ... 
+
+Testing ls, grep, sed and pipes ... 
+
+ProgramLauncher.cpp
+ProgramLauncher.h
+ProgramLauncher.truth
+Testing stats ... 
+
+Group = Results
+  From                    = unitTest.cub
+  Band                    = 1
+  Average                 = 24.999999961853
+  StandardDeviation       = 14.728323083889
+  Variance                = 216.92350086341
+  Median                  = 24.489967193103
+  Mode                    = 0.0
+  Skew                    = 0.10388815464838
+  Minimum                 = 0.0
+  Maximum                 = 50.0
+  Sum                     = 62499.999904633
+  TotalPixels             = 2500
+  ValidPixels             = 2500
+  OverValidMaximumPixels  = 0
+  UnderValidMinimumPixels = 0
+  NullPixels              = 0
+  LisPixels               = 0
+  LrsPixels               = 0
+  HisPixels               = 0
+  HrsPixels               = 0
+End_Group
+
+Testing malformed command... 
+NOTE: The exit code for this test differs on each OS.
+That is the reason for the OS specific truth files. Please ignore the exit codes.
+
+sh: -c: line 0: unexpected EOF while looking for matching `''
+sh: -c: line 1: syntax error: unexpected end of file
+**PROGRAMMER ERROR** Executing command [ls -l * | grep Program | sed 's/\(.*\)\(ProgramLauncher.*\)/\2/] failed with return status [512].
+
+Testing non-existant Isis 3 program... 
+
+**ERROR** Program [chocolatelab] does not appear to be a valid Isis 3 program.
+
+Testing using Isis 3 program as a system program... 
+NOTE: The exit code for this test differs on each OS.
+That is the reason for the OS specific truth files. Please ignore the exit codes.
+
+libc++abi.dylib: terminating with uncaught exception of type Isis::IException: **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999].
+**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [6].
+
+Testing using Isis 3 program as a system program without pid... 
+
+Group = Results
+  From                    = unitTest.cub
+  Band                    = 1
+  Average                 = 24.999999961853
+  StandardDeviation       = 14.728323083889
+  Variance                = 216.92350086341
+  Median                  = 24.489967193103
+  Mode                    = 0.0
+  Skew                    = 0.10388815464838
+  Minimum                 = 0.0
+  Maximum                 = 50.0
+  Sum                     = 62499.999904633
+  TotalPixels             = 2500
+  ValidPixels             = 2500
+  OverValidMaximumPixels  = 0
+  UnderValidMinimumPixels = 0
+  NullPixels              = 0
+  LisPixels               = 0
+  LrsPixels               = 0
+  HisPixels               = 0
+  HrsPixels               = 0
+End_Group
diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_CentOS7.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_CentOS7.truth
index 5e0b84d84c9fc70dda8304c1b166dd464053d432..68cefc146e82fd360b4b211896f5f64f6511cc57 100644
--- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_CentOS7.truth
+++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_CentOS7.truth
@@ -4,16 +4,9 @@ Testing ls, grep, sed and pipes ...
 
 ProgramLauncher.cpp
 ProgramLauncher.h
-ProgramLauncher.o
 ProgramLauncher.truth
 Testing stats ... 
 
-greyscale: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-hist: Computing min/max for histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-hist: Gathering histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = Results
   From                    = unitTest.cub
   Band                    = 1
@@ -55,14 +48,10 @@ That is the reason for the OS specific truth files. Please ignore the exit codes
 
 terminate called after throwing an instance of 'Isis::IException'
   what():  **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999].
-**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/src/base/objs/Preference/TestPreferences] failed with return status [6].
+**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [6].
 
 Testing using Isis 3 program as a system program without pid... 
 
-stats: Computing min/max for histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-stats: Gathering histogram
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = Results
   From                    = unitTest.cub
   Band                    = 1
diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_Fedora28.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_Fedora28.truth
new file mode 100644
index 0000000000000000000000000000000000000000..ba1708aa15f11510640f4a4a10b8ae53754aa75a
--- /dev/null
+++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Linux_x86_64_Fedora28.truth
@@ -0,0 +1,76 @@
+Testing ProgramLauncher Class ... 
+
+Testing ls, grep, sed and pipes ... 
+
+ProgramLauncher.cpp
+ProgramLauncher.h
+ProgramLauncher.truth
+Testing stats ... 
+
+Group = Results
+  From                    = unitTest.cub
+  Band                    = 1
+  Average                 = 24.999999961853
+  StandardDeviation       = 14.728323083889
+  Variance                = 216.92350086341
+  Median                  = 24.489967193103
+  Mode                    = 0.0
+  Skew                    = 0.10388815464838
+  Minimum                 = 0.0
+  Maximum                 = 50.0
+  Sum                     = 62499.999904633
+  TotalPixels             = 2500
+  ValidPixels             = 2500
+  OverValidMaximumPixels  = 0
+  UnderValidMinimumPixels = 0
+  NullPixels              = 0
+  LisPixels               = 0
+  LrsPixels               = 0
+  HisPixels               = 0
+  HrsPixels               = 0
+End_Group
+
+Testing malformed command... 
+NOTE: The exit code for this test differs on each OS.
+That is the reason for the OS specific truth files. Please ignore the exit codes.
+
+sh: -c: line 0: unexpected EOF while looking for matching `''
+sh: -c: line 1: syntax error: unexpected end of file
+**PROGRAMMER ERROR** Executing command [ls -l * | grep Program | sed 's/\(.*\)\(ProgramLauncher.*\)/\2/] failed with return status [256].
+
+Testing non-existant Isis 3 program... 
+
+**ERROR** Program [chocolatelab] does not appear to be a valid Isis 3 program.
+
+Testing using Isis 3 program as a system program... 
+NOTE: The exit code for this test differs on each OS.
+That is the reason for the OS specific truth files. Please ignore the exit codes.
+
+terminate called after throwing an instance of 'Isis::IException'
+  what():  **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999].
+**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [134].
+
+Testing using Isis 3 program as a system program without pid... 
+
+Group = Results
+  From                    = unitTest.cub
+  Band                    = 1
+  Average                 = 24.999999961853
+  StandardDeviation       = 14.728323083889
+  Variance                = 216.92350086341
+  Median                  = 24.489967193103
+  Mode                    = 0.0
+  Skew                    = 0.10388815464838
+  Minimum                 = 0.0
+  Maximum                 = 50.0
+  Sum                     = 62499.999904633
+  TotalPixels             = 2500
+  ValidPixels             = 2500
+  OverValidMaximumPixels  = 0
+  UnderValidMinimumPixels = 0
+  NullPixels              = 0
+  LisPixels               = 0
+  LrsPixels               = 0
+  HisPixels               = 0
+  HrsPixels               = 0
+End_Group
diff --git a/isis/src/base/objs/ProgramLauncher/unitTest.cpp b/isis/src/base/objs/ProgramLauncher/unitTest.cpp
index b4aa17dcaf89435c720b6c9d9c8b12b247d0806e..b71a426407360c4b042e99f585c4be7b8f730423 100644
--- a/isis/src/base/objs/ProgramLauncher/unitTest.cpp
+++ b/isis/src/base/objs/ProgramLauncher/unitTest.cpp
@@ -25,11 +25,11 @@ void IsisMain() {
   cerr << "Testing stats ... " << endl;
   cerr << endl;
   ProgramLauncher::RunSystemCommand("greyscale to=unitTest.cub enddn=50.0 samples=50 lines=50 "
-        "-preference=$ISISROOT/src/base/objs/Preference/TestPreferences");
+        "-preference=$ISISROOT/TestPreferences");
 
   ProgramLauncher::RunIsisProgram("stats",
         "from=unitTest.cub "
-        "-preference=$ISISROOT/src/base/objs/Preference/TestPreferences");
+        "-preference=$ISISROOT/TestPreferences");
 
   cerr << endl;
   cerr << "Testing malformed command... " << endl;
@@ -65,7 +65,7 @@ void IsisMain() {
   try {
     ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats "
         "from=\\$base/testData/ab102401_ideal.cub -pid=999 "
-        "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences");
+        "-preference=\\$ISISROOT/TestPreferences");
   }
   catch(IException &e) {
     e.print();
@@ -79,7 +79,7 @@ void IsisMain() {
   try {
     ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats "
         "from=unitTest.cub "
-        "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences");
+        "-preference=\\$ISISROOT/TestPreferences");
   }
   catch(IException &e) {
     e.print();
diff --git a/isis/src/base/objs/Progress/Progress.truth b/isis/src/base/objs/Progress/Progress.truth
index 67bf53240eeebbbd069d660d03d5a5bfb2a52874..7d67cc685539f6f5b809d5feda90cdb9f69bc775 100644
--- a/isis/src/base/objs/Progress/Progress.truth
+++ b/isis/src/base/objs/Progress/Progress.truth
@@ -1,8 +1,4 @@
-Working
-0% Processed
5% Processed
10% Processed
15% Processed
20% Processed
25% Processed
30% Processed
35% Processed
40% Processed
45% Processed
50% Processed
55% Processed
60% Processed
65% Processed
70% Processed
75% Processed
80% Processed
85% Processed
90% Processed
95% Processed
100% Processed
 
-Drinking Coffee
-0% Processed
5% Processed
10% Processed
15% Processed
20% Processed
25% Processed
30% Processed
35% Processed
40% Processed
45% Processed
50% Processed
55% Processed
60% Processed
65% Processed
70% Processed
75% Processed
80% Processed
85% Processed
90% Processed
95% Processed
100% Processed
 
 **PROGRAMMER ERROR** Step exceeds maximumSteps in [Progress::CheckStatus].
 **PROGRAMMER ERROR** Value for [steps] must be greater than or equal to zero in [Progress::SetMaximumSteps].
diff --git a/isis/src/base/objs/PushFrameCameraCcdLayout/PushFrameCameraCcdLayout.truth b/isis/src/base/objs/PushFrameCameraCcdLayout/PushFrameCameraCcdLayout.truth
index f36198413ae088b2edefa59d47bc2ce4d430c34f..d54562e565205f3c9b2224bc8e6e3ca24c196527 100644
--- a/isis/src/base/objs/PushFrameCameraCcdLayout/PushFrameCameraCcdLayout.truth
+++ b/isis/src/base/objs/PushFrameCameraCcdLayout/PushFrameCameraCcdLayout.truth
@@ -31,7 +31,7 @@ Get the METHANE filter layout
 METHANE filter ID: -61504
 METHANE filter name: "METHANE"
 METHANE filter start sample: 1
-METHANE filter start line: 291
+METHANE filter start line: 285
 METHANE filter samples: 1648
 METHANE filter lines: 128
 
@@ -39,7 +39,7 @@ Get the METHANE filter layout but give it a different name
 METHANE filter ID: -61504
 METHANE filter name: "methane"
 METHANE filter start sample: 1
-METHANE filter start line: 291
+METHANE filter start line: 285
 METHANE filter samples: 1648
 METHANE filter lines: 128
 
diff --git a/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.cpp b/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.cpp
index 149c4fcc543389c92cd463fdd1d1ae0d7d6ffb0d..95ee570ca43ebdaeeedf12c5c14bcf2a38922a56 100644
--- a/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.cpp
+++ b/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.cpp
@@ -40,7 +40,7 @@ namespace Isis {
    * set the input label before translating. This may be done by using
    * SetLabel(Pvl inputLabel) or Auto(Pvl inputLabel, Pvl outputLabel).
    *
-   * @param transFile The translation file to be used to tranlate keywords in
+   * @param transFile The translation file to be used to translate keywords in
    *                  the input label.
    */
   PvlToPvlTranslationManager::PvlToPvlTranslationManager(const QString &transFile)
@@ -53,8 +53,8 @@ namespace Isis {
    * input label before translating. This may be done by using SetLabel(Pvl
    * inputLabel) or Auto(Pvl inputLabel, Pvl outputLabel).
    *
-   * @param transStrm A stream containing the tranlation table to be used to
-   *                  tranlate keywords in the input label.
+   * @param transStrm A stream containing the translation table to be used to
+   *                  translate keywords in the input label.
    */
   PvlToPvlTranslationManager::PvlToPvlTranslationManager(std::istream &transStrm)
       : LabelTranslationManager(transStrm) {
@@ -66,7 +66,7 @@ namespace Isis {
    *
    * @param inputLabel The Pvl holding the input label.
    *
-   * @param transFile The translation file to be used to tranlate keywords in
+   * @param transFile The translation file to be used to translate keywords in
    *                  the input label.
    */
   PvlToPvlTranslationManager::PvlToPvlTranslationManager(Pvl &inputLabel,
@@ -81,8 +81,8 @@ namespace Isis {
    *
    * @param inputLabel The Pvl holding the input label.
    *
-   * @param transStrm A stream containing the tranlation table to be used to
-   *                  tranlate keywords in the input label.
+   * @param transStrm A stream containing the translation table to be used to
+   *                  translate keywords in the input label.
    */
   PvlToPvlTranslationManager::PvlToPvlTranslationManager(Pvl &inputLabel,
       std::istream &transStrm)
@@ -103,47 +103,58 @@ namespace Isis {
 
   /**
    * Returns a translated value. The output name is used to find the input
-   * group, keyword, default and tranlations in the translation table. If the
-   * keyword does not exist in the input label, the input default if
-   * available will be used as the input value. This input value
-   * is then used to search all of the translations. If a match is
-   * found the translated value is returned.
+   * group, keyword, default and translations in the translation table. If the
+   * keyword does not exist in the input label and an input default is available,
+   * then this default will be used as the input value. This input value is
+   * then used to search all of the translations. If a match is found the
+   * translated value is returned. 
    *
-   * @param nName The output name used to identify the input keyword to be
-   *              translated.
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
    *
    * @param findex The index into the input keyword array.  Defaults to 0
    *
    * @return string
    */
-  QString PvlToPvlTranslationManager::Translate(QString nName, int findex) {
+  QString PvlToPvlTranslationManager::Translate(QString translationGroupName, int findex) {
     const PvlContainer *con;
     int inst = 0;
     PvlKeyword grp;
 
-    while((grp = InputGroup(nName, inst++)).name() != "") {
+    while((grp = InputGroup(translationGroupName, inst++)).name() != "") {
       if((con = GetContainer(grp)) != NULL) {
-        if(con->hasKeyword(InputKeywordName(nName))) {
-          return PvlTranslationTable::Translate(nName,
-                                                (*con)[InputKeywordName(nName)][findex]);
+        if(con->hasKeyword(InputKeywordName(translationGroupName))) {
+          return PvlTranslationTable::Translate(translationGroupName,
+                                                (*con)[InputKeywordName(translationGroupName)][findex]);
         }
       }
     }
 
-    return PvlTranslationTable::Translate(nName);
+    return PvlTranslationTable::Translate(translationGroupName);
   }
 
 
   /**
    * Translate the requested output name to output values using the input name
-   * and values or default value
+   * and values or default value.
+   *  
+   * Note: This is a protected method used when automatically 
+   * translating
+   *  
+   * @see Auto().
    *
-   * @param nName The output name used to identify the input keyword to be
-   *              translated.
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
    *
    * @return PvlKeyword
    */
-   PvlKeyword PvlToPvlTranslationManager::DoTranslation(const QString nName) {
+   PvlKeyword PvlToPvlTranslationManager::DoTranslation(const QString translationGroupName) {
      const PvlContainer *con = NULL;
      PvlKeyword key;
 
@@ -151,9 +162,9 @@ namespace Isis {
      PvlGroup transGroup;
      PvlKeyword grp;
 
-     while((grp = InputGroup(nName, inst++)).name() != "") {
+     while((grp = InputGroup(translationGroupName, inst++)).name() != "") {
        if((con = GetContainer(grp)) != NULL) {
-         transGroup = TranslationTable().findGroup(nName);
+         transGroup = TranslationTable().findGroup(translationGroupName);
          Pvl::ConstPvlKeywordIterator it = transGroup.findKeyword("InputKey",
                                            transGroup.begin(),
                                            transGroup.end());
@@ -162,11 +173,11 @@ namespace Isis {
          while(it != transGroup.end()) {
            const PvlKeyword &result = *it;
            if(con->hasKeyword(result[0])) {
-             key.setName(OutputName(nName));
+             key.setName(OutputName(translationGroupName));
 
              for(int v = 0; v < (*con)[(result[0])].size(); v++) {
-               key.addValue(PvlTranslationTable::Translate(nName,
-                            (*con)[result[0]][v]),
+               key.addValue(PvlTranslationTable::Translate(translationGroupName,
+                                                           (*con)[result[0]][v]),
                             (*con)[result[0]].unit(v));
              }
 
@@ -177,8 +188,8 @@ namespace Isis {
        }
      }
 
-     return PvlKeyword(OutputName(nName),
-                             PvlTranslationTable::Translate(nName, ""));
+     return PvlKeyword(OutputName(translationGroupName),
+                       PvlTranslationTable::Translate(translationGroupName, ""));
    }
 
 
@@ -222,16 +233,20 @@ namespace Isis {
   /**
    * Returns the ith input value associated with the output name argument.
    *
-   * @param nName The output name used to identify the input keyword.
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
    *
    * @param findex The index into the input keyword array.  Defaults to 0
    *
    * @throws IException::Programmer
    */
-  const PvlKeyword &PvlToPvlTranslationManager::InputKeyword(const QString nName) const {
+  const PvlKeyword &PvlToPvlTranslationManager::InputKeyword(const QString translationGroupName) const {
 
     int instanceNumber = 0;
-    PvlKeyword inputGroupKeyword = InputGroup(nName, instanceNumber);
+    PvlKeyword inputGroupKeyword = InputGroup(translationGroupName, instanceNumber);
     bool anInputGroupFound = false;
 
     while(inputGroupKeyword.name() != "") {
@@ -239,31 +254,31 @@ namespace Isis {
       if(containingGroup != NULL) {
         anInputGroupFound = true;
 
-        if(containingGroup->hasKeyword(InputKeywordName(nName))) {
-          return containingGroup->findKeyword(InputKeywordName(nName));
+        if(containingGroup->hasKeyword(InputKeywordName(translationGroupName))) {
+          return containingGroup->findKeyword(InputKeywordName(translationGroupName));
         }
       }
 
       instanceNumber ++;
-      inputGroupKeyword = InputGroup(nName, instanceNumber);
+      inputGroupKeyword = InputGroup(translationGroupName, instanceNumber);
     }
 
     if(anInputGroupFound) {
-      QString msg = "Unable to find input keyword [" + InputKeywordName(nName) +
-                   "] for output name [" + nName + "] in file [" + TranslationTable().fileName() + "]";
+      QString msg = "Unable to find input keyword [" + InputKeywordName(translationGroupName) +
+                   "] for output name [" + translationGroupName + "] in file [" + TranslationTable().fileName() + "]";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
     else {
       QString container = "";
 
-      for(int i = 0; i < InputGroup(nName).size(); i++) {
+      for(int i = 0; i < InputGroup(translationGroupName).size(); i++) {
         if(i > 0) container += ",";
 
-        container += InputGroup(nName)[i];
+        container += InputGroup(translationGroupName)[i];
       }
 
       QString msg = "Unable to find input group [" + container +
-                   "] for output name [" + nName + "] in file [" + TranslationTable().fileName() + "]";
+                   "] for output name [" + translationGroupName + "] in file [" + TranslationTable().fileName() + "]";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
   }
@@ -273,21 +288,25 @@ namespace Isis {
    * Indicates if the input keyword corresponding to the output name exists in
    * the label
    *
-   * @param nName The output name used to identify the input keyword.
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
    */
-  bool PvlToPvlTranslationManager::InputHasKeyword(const QString nName) {
+  bool PvlToPvlTranslationManager::InputHasKeyword(const QString translationGroupName) {
 
     // Set the current position in the input label pvl
     // by finding the input group corresponding to the output group
     const PvlContainer *con;
     int inst = 0;
-    //while ((con = GetContainer(InputGroup(nName, inst++))) != NULL) {
-    //if ((con = GetContainer (InputGroup(nName))) != NULL) {
+    //while ((con = GetContainer(InputGroup(translationGroupName, inst++))) != NULL) {
+    //if ((con = GetContainer (InputGroup(translationGroupName))) != NULL) {
 
     PvlKeyword grp;
-    while((grp = InputGroup(nName, inst++)).name() != "") {
+    while((grp = InputGroup(translationGroupName, inst++)).name() != "") {
       if((con = GetContainer(grp)) != NULL) {
-        if(con->hasKeyword(InputKeywordName(nName))) return true;
+        if(con->hasKeyword(InputKeywordName(translationGroupName))) return true;
       }
     }
 
@@ -335,10 +354,17 @@ namespace Isis {
 
   /**
    * Create the requsted container and any containers above it and
-   * return a reference to the container
-   * list is an PvlKeyword with an array of container types an their names
+   * return a reference to the container. List is a PvlKeyword 
+   * with an array of container types and their names. 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                        group used to identify the
+   *                        input/output keywords to be
+   *                        translated. Often, this is the
+   *                        same as the output keyword name.
+   * @param pvl Pvl 
    */
-  PvlContainer *PvlToPvlTranslationManager::CreateContainer(const QString nName, Pvl &pvl) {
-    return LabelTranslationManager::CreateContainer(nName, pvl);
+  PvlContainer *PvlToPvlTranslationManager::CreateContainer(const QString translationGroupName, Pvl &pvl) {
+    return LabelTranslationManager::CreateContainer(translationGroupName, pvl);
   }
 } // end namespace isis
diff --git a/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.h b/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.h
index f4f434321d33571b41ab1ab29993cdf44b2b2c42..fcc4c70d5434272ea809f4400dfa36a6a42fccea 100644
--- a/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.h
+++ b/isis/src/base/objs/PvlToPvlTranslationManager/PvlToPvlTranslationManager.h
@@ -44,42 +44,38 @@ namespace Isis {
    * @author 2003-05-29 Stuart Sides
    *
    * @internal
-   *  @history 2003-09-03 Stuart Sides - Modified to work with new isis label
-   *                                     format
-   *  @history 2003-09-25 Stuart Sides - Added the Translate member
-   *  @history 2005-02-15 Elizabeth Ribelin - Modified file to support Doxygen
-   *                                          documentation
-   *  @history 2006-08-09 Brendan George - Modified to support Optional keyword
-   *                                       translation
+   *  @history 2003-09-03 Stuart Sides - Modified to work with new isis label format.
+   *  @history 2003-09-25 Stuart Sides - Added the Translate member.
+   *  @history 2005-02-15 Elizabeth Ribelin - Modified file to support Doxygen documentation.
+   *  @history 2006-08-09 Brendan George - Modified to support Optional keyword translation.
    *  @history 2006-10-01 Stuart Sides - Fixed bug with Optional keyword.
-   *                                     Non-optional keywords were being reported
-   *                                     instantly.
+   *                          Non-optional keywords were being reported instantly.
    *  @history 2006-11-16 Brendan George - Changed instances of "Foreign" to "Input"
-   *                                       and "Native" to "Output"
+   *                          and "Native" to "Output".
    *  @history 2007-06-22 Stuart Sides - Added ability to have more than one input location
-   *                                     keyword for a translation. The first one found
-   *                                     which contains the input keyword is used.
+   *                          keyword for a translation. The first one found which contains
+   *                          the input keyword is used.
    *  @history 2008-05-09 Steven Lambright - Added ability to change input label without
-   *                                     re-reading the translation file.
-   *  @history 2008-07-10 Noah Hilt - Changed while loops to continue searching
-   *           other groups if a group has been found, but the keyword does not
-   *           exist in that group.
-   *  @history 2008-07-10 Steven Lambright - Changed to use new accessors
+   *                          re-reading the translation file.
+   *  @history 2008-07-10 Noah Hilt - Changed while loops to continue searching other groups
+   *                          if a group has been found, but the keyword does not exist in
+   *                          that group.
+   *  @history 2008-07-10 Steven Lambright - Changed to use new accessors.
    *  @history 2010-01-04 Steven Lambright - Added InputKeyword method and removed
-   *                                         InputSize, InputUnits, InputValue.
-   *                                         Renamed private Translate method to
-   *                                         DoTranslation to remove ambiguity
-   *                                         with a parent method, instead of
-   *                                         using a dummy parameter.
-   *  @history 2017-01-11 Jeannie Backer - Moved several methods to a generic
-   *                          parent class, LabelTranslationManager. Fixes #4584.
+   *                          InputSize, InputUnits, InputValue. Renamed private Translate() method
+   *                          to DoTranslation() to remove ambiguity with a parent method,
+   *                          instead of using a dummy parameter.
+   *  @history 2017-01-11 Jeannie Backer - Moved several methods to a generic parent class,
+   *                          LabelTranslationManager. Fixes #4584.
    *  @history 2017-06-13 Adam Paquette - Changed PvlTranslationManager file name to
    *                          PvlToPvlTranslationManager. Fixes #4901.
    *  @history 2018-01-10 Christopher Combs - Changed ProcessDataFilePointer call to reflect 
    *                          changes made to voy2isis. Fixes #4345, #4421.
+   *  @history 2018-04-16 Jeannie Backer - Fixed indentation of history comments and
+   *                          brought code closer to coding standards.
    *  @todo 2005-02-15 Stuart Sides - add coded example and implementation example
-   *                                  to class documentation, and finish
-   *                                  documentation
+   *                          to class documentation, and finish
+   *                          documentation.
    */
   class PvlToPvlTranslationManager : public LabelTranslationManager {
     public:
@@ -97,24 +93,24 @@ namespace Isis {
 
       // Attempt to translate the requested output name to output value
       // using the input name and value/default value
-      virtual QString Translate(QString nName, int findex = 0);
+      virtual QString Translate(QString translationGroupName, int findex = 0);
 
       // Translate all translation table groups which contain "Auto"
       void Auto(Pvl &outputLabel);
       void Auto(Pvl &inputLabel, Pvl &outputLabel);
 
       // Return the ith input value associated with a output name
-      virtual const PvlKeyword &InputKeyword(const QString nName) const;
+      virtual const PvlKeyword &InputKeyword(const QString translationGroupName) const;
 
       // Return true if the input lable contains the translated group and key names
-      virtual bool InputHasKeyword(const QString nName);
+      virtual bool InputHasKeyword(const QString translationGroupName);
 
       void SetLabel(Pvl &inputLabel);
 
     protected:
-      virtual PvlKeyword DoTranslation(const QString nName);
+      virtual PvlKeyword DoTranslation(const QString translationGroupName);
       virtual const PvlContainer *GetContainer(const PvlKeyword &inputGroup) const;
-      virtual PvlContainer *CreateContainer(const QString nName, Pvl &pvl);
+      virtual PvlContainer *CreateContainer(const QString translationGroupName, Pvl &pvl);
     private:
       Pvl p_fLabel; //!< A Pvl object for the input label file
   };
diff --git a/isis/src/base/objs/PvlToXmlTranslationManager/PvlToXmlTranslationManager.h b/isis/src/base/objs/PvlToXmlTranslationManager/PvlToXmlTranslationManager.h
index b1990dfef38f39e625f0d95ebc72663c105b47ce..07a1d7085d2cffa67381eeeb7da3fe464ccf98ec 100644
--- a/isis/src/base/objs/PvlToXmlTranslationManager/PvlToXmlTranslationManager.h
+++ b/isis/src/base/objs/PvlToXmlTranslationManager/PvlToXmlTranslationManager.h
@@ -74,17 +74,17 @@ namespace Isis {
 
       // Attempt to translate the requested output name to output value
       // using the input name and value/default value
-      virtual QString Translate(QString nName, int inputIndex = 0);
+      virtual QString Translate(QString translationGroupName, int inputIndex = 0);
 
       // Translate all translation table groups which contain "Auto"
       void Auto(QDomDocument &outputLabel);
       void Auto(Pvl &inputLabel, QDomDocument &outputLabel);
 
       // Return the ith input value associated with a output name
-      virtual const PvlKeyword &InputKeyword(const QString nName) const;
+      virtual const PvlKeyword &InputKeyword(const QString translationGroupName) const;
 
       // Return true if the input lable contains the translated group and key names
-      virtual bool InputHasKeyword(const QString nName);
+      virtual bool InputHasKeyword(const QString translationGroupName);
 
       void SetLabel(Pvl &inputLabel);
       
diff --git a/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.cpp b/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.cpp
index d67d38d21a9fc2d84457ead504c0074d1de1b5a0..06882220e51ba8ba07c7fc4337b15cad6ce53883 100644
--- a/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.cpp
+++ b/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.cpp
@@ -23,6 +23,8 @@
 #include <fstream>
 #include <sstream>
 
+#include <QDebug>
+
 #include "IException.h"
 #include "IString.h"
 #include "Message.h"
@@ -33,11 +35,9 @@ using namespace std;
 namespace Isis {
 
   /**
-   * Constructs and initializes a PvlTranslationTable object
-   *
-   * @param transFile The translation file to be used
+   * Constructs and initializes a PvlTranslationTable object.
    *
-   * @throws iException::Io
+   * @param transFile The translation file to be used.
    */
   PvlTranslationTable::PvlTranslationTable(FileName transFile) {
     AddTable(transFile.expanded());
@@ -54,34 +54,48 @@ namespace Isis {
   }
 
 
-  //! Construct an empty PvlTranslationTable
+  /**
+   * Construct an empty PvlTranslationTable
+   */
   PvlTranslationTable::PvlTranslationTable() {
   }
 
 
-  //! Destroys the PvlTranslationTable object.
+  /**
+   * Destroys the PvlTranslationTable object.
+   */
   PvlTranslationTable::~PvlTranslationTable() {
   }
 
 
-  //! Protected accessor for pvl translation table passed into class.
+  /**
+   * Protected accessor for pvl translation table passed into 
+   * class. This method returns a reference to the translation 
+   * table member. 
+   *  
+   * @return @b Pvl The translation table as a PVL object. 
+   */
   Pvl &PvlTranslationTable::TranslationTable() {
     return p_trnsTbl;
   }
 
 
-  //! Protected accessor for const pvl translation table passed into class.
+  /**
+  *  Protected accessor for const pvl translation table passed
+  *  into class. This method returns a @b const reference to the
+  *  translation table member.
+   *  
+  * @return @b Pvl The translation table as a PVL object. 
+   */
   const Pvl &PvlTranslationTable::TranslationTable() const {
     return p_trnsTbl;
   }
 
 
   /**
-   * Adds the contents of a translation table to the searchable groups/keys
+   * Adds the contents of a translation table to the searchable groups/keys.
    *
    * @param transFile The name of the translation file to be added.
-   *
-   * @throws IException::Io
    */
   void PvlTranslationTable::AddTable(const QString &transFile) {
     p_trnsTbl.read(FileName(transFile).expanded());
@@ -91,9 +105,15 @@ namespace Isis {
   /**
    * Adds the contents of a translation table to the searchable groups/keys
    * Also performs a verification, to ensure that the translation table
-   * is valid
+   * is valid.
    *
    * @param transStm The stream to be added.
+   * 
+   * @throws IException::User - "Unable to find InputKey for group 
+                               in translation file."
+   * @throws IException::User - "Keyword is not valid. Error in file."
+   * @throws IException::User - "Keyword does not have correct number of elements.
+                                 Error in file."
    */
   void PvlTranslationTable::AddTable(std::istream &transStm) {
     transStm >> p_trnsTbl;
@@ -102,38 +122,38 @@ namespace Isis {
     // A size of -1 means non-zero size.
     vector< pair<QString, int> > validKeywordSizes = validKeywords();
 
-    for(int i = 0; i < p_trnsTbl.groups(); i++) {
-      PvlGroup currGrp = p_trnsTbl.group(i);
+    for (int i = 0; i < p_trnsTbl.groups(); i++) {
+      PvlGroup currGroup = p_trnsTbl.group(i);
 
-      if(!currGrp.hasKeyword("InputKey")) {
+      if (!currGroup.hasKeyword("InputKey")) {
         QString message = "Unable to find InputKey for group ["
-                         + currGrp.name() + "] in file [" +
+                         + currGroup.name() + "] in file [" +
                          p_trnsTbl.fileName() + "]";
         throw IException(IException::User, message, _FILEINFO_);
       }
 
-      for(int j = 0; j < currGrp.keywords(); j++) {
+      for (int j = 0; j < currGroup.keywords(); j++) {
         bool validKeyword = false;
         bool keywordSizeMismatch = false;
 
-        const PvlKeyword &currKey = currGrp[j];
+        const PvlKeyword &currKey = currGroup[j];
 
         // Test this keyword for validity
-        for(int key = 0;
+        for (int key = 0;
             !validKeyword && key < (int)validKeywordSizes.size();
             key++) {
 
           // If this is the right keyword (names match) then test sizes
-          if(currKey.name() == validKeywordSizes[key].first) {
+          if (currKey.name() == validKeywordSizes[key].first) {
 
             // if -1 then test that size() > 0
-            if(validKeywordSizes[key].second == -1) {
-              if(currKey.size() > 0) {
+            if (validKeywordSizes[key].second == -1) {
+              if (currKey.size() > 0) {
                 validKeyword = true;
               }
             }
             // otherwise should exact match
-            else if(currKey.size() == validKeywordSizes[key].second) {
+            else if (currKey.size() == validKeywordSizes[key].second) {
               validKeyword = true;
             }
             else {
@@ -144,8 +164,8 @@ namespace Isis {
         }
 
         // if we had an error report it
-        if(!validKeyword) {
-          if(!keywordSizeMismatch) {
+        if (!validKeyword) {
+          if (!keywordSizeMismatch) {
             QString message = "Keyword [" + currKey.name();
             message += "] is not a valid keyword.";
             message += " Error in file [" + p_trnsTbl.fileName() + "]" ;
@@ -175,70 +195,74 @@ namespace Isis {
   vector< pair<QString, int> > PvlTranslationTable::validKeywords() const {
 
     vector< pair<QString, int> > validKeywords;
-    validKeywords.push_back(pair<QString, int>("Translation",     2));
-    validKeywords.push_back(pair<QString, int>("OutputName",      1));
-    validKeywords.push_back(pair<QString, int>("InputGroup",     -1));
-    validKeywords.push_back(pair<QString, int>("InputPosition",  -1));
-    validKeywords.push_back(pair<QString, int>("OutputPosition", -1));
-    validKeywords.push_back(pair<QString, int>("Auto",            0));
-    validKeywords.push_back(pair<QString, int>("Optional",        0));
-    validKeywords.push_back(pair<QString, int>("InputKey",        1));
-    validKeywords.push_back(pair<QString, int>("InputDefault",   -1));
+    validKeywords.push_back(pair<QString, int>("Translation",           2));
+    validKeywords.push_back(pair<QString, int>("OutputName",            1));
+    validKeywords.push_back(pair<QString, int>("InputGroup",           -1));
+    validKeywords.push_back(pair<QString, int>("InputPosition",        -1));
+    validKeywords.push_back(pair<QString, int>("OutputPosition",       -1));
+    validKeywords.push_back(pair<QString, int>("Auto",                  0));
+    validKeywords.push_back(pair<QString, int>("Optional",              0));
+    validKeywords.push_back(pair<QString, int>("InputKey",              1));
+    validKeywords.push_back(pair<QString, int>("InputDefault",         -1));
+    validKeywords.push_back(pair<QString, int>("InputKeyDependencies", -1));
 
     return validKeywords;
   }
 
 
   /**
-   * Translates the output name and input value.
+   * Translates a single output value from the given translation 
+   * group name and input value. 
    *
-   * @param nName The output name to be used to search the translation table.
-   * @param fValue The input value to be translated
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * @param inputKeyValue The value to be translated, from the 
+   *                      input keyword.
    *
-   * @return QString The translated QString
+   * @return QString The translated value, for the 
+   *         output keyword.
    *
-   * @throws iException::Programmer
+   * @throws IException::Programmer - "No value or default value to translate 
+                                      for translation group."
+   * @throws IException::Programmer - "Unable to find translation value in file."
    */
-  QString PvlTranslationTable::Translate(const QString nName,
-                                         const QString fValue) const {
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" +
-                   nName + "] in file [" + p_trnsTbl.fileName() + "]";
+  QString PvlTranslationTable::Translate(const QString translationGroupName,
+                                         const QString inputKeyValue) const {
 
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    const PvlGroup &tgrp = p_trnsTbl.findGroup(nName);
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
 
     // If no input value was passed in search using the input default
-    QString tmpFValue = fValue;
-    if(tmpFValue.isEmpty()) {
-      if(tgrp.hasKeyword("InputDefault")) {
-        tmpFValue = (QString) tgrp["InputDefault"];
+    QString tmpFValue = inputKeyValue;
+    if (tmpFValue.isEmpty()) {
+      if (translationGroup.hasKeyword("InputDefault")) {
+        tmpFValue = (QString) translationGroup["InputDefault"];
       }
       else {
         QString msg = "No value or default value to translate for ";
         msg += "translation group [";
-        msg += nName;
+        msg += translationGroupName;
         msg += "] in file [" + p_trnsTbl.fileName() + "]";
         throw IException(IException::Programmer, msg, _FILEINFO_);
       }
     }
 
     // Search the Translation keywords for a match to the input value
-    Pvl::ConstPvlKeywordIterator it = tgrp.findKeyword("Translation",
-                                      tgrp.begin(),
-                                      tgrp.end());
+    Pvl::ConstPvlKeywordIterator it = translationGroup.findKeyword("Translation",
+                                      translationGroup.begin(),
+                                      translationGroup.end());
 
-    while(it != tgrp.end()) {
+    while (it != translationGroup.end()) {
       const PvlKeyword &key = *it;
       // compare the value from the input file to the second value of each Translation in the trans file.
       // ignore cases for input values  
-      if((QString) key[1] == tmpFValue) {
+      if (QString::compare((QString) key[1], tmpFValue, Qt::CaseInsensitive) == 0) {
         return key[0];
       }
-      else if((QString) key[1] == "*") {
-        if((QString) key[0] == "*") {
+      else if ((QString) key[1] == "*") {
+        if ((QString) key[0] == "*") {
           return tmpFValue;
         }
         else {
@@ -246,11 +270,11 @@ namespace Isis {
         }
       }
 
-      it = tgrp.findKeyword("Translation", it + 1, tgrp.end());
+      it = translationGroup.findKeyword("Translation", it + 1, translationGroup.end());
     }
 
     QString msg = "Unable to find a translation value for [" +
-                 nName +  ", " + fValue + "] in file [" +
+                 translationGroupName +  ", " + inputKeyValue + "] in file [" +
                  p_trnsTbl.fileName() + "]";
 
     throw IException(IException::Programmer, msg, _FILEINFO_);
@@ -261,47 +285,46 @@ namespace Isis {
    * Returns the input group name from the translation table corresponding to
    * the output name argument.
    *
-   * @param nName The output name to be used to search the translation table.
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
    * @param inst The occurence number of the "InputGroup" keyword
    *             (first one is zero)
    *
    * @return QString The input group name
    *
-   * @throws iException::Programmer
+   * @throws IException::Programmer - "Keyword [InputPosition] cannot have a comma [,] 
+                                       in the value."
    */
-  PvlKeyword PvlTranslationTable::InputGroup(const QString nName,
-      const int inst) const {
+  PvlKeyword PvlTranslationTable::InputGroup(const QString translationGroupName,
+                                             const int inst) const {
 
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" +
-                   nName + "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    const PvlGroup &transGrp = p_trnsTbl.findGroup(nName);
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
 
     //bool foundLegalInputGroup = false;
 
-    Pvl::ConstPvlKeywordIterator it = transGrp.findKeyword("InputPosition",
-                                      transGrp.begin(),
-                                      transGrp.end());
+    Pvl::ConstPvlKeywordIterator it = translationGroup.findKeyword("InputPosition",
+                                      translationGroup.begin(),
+                                      translationGroup.end());
 
     int currentInstance = 0;
 
     // If no InputPosition keyword exists, the answer is root
-    if(inst == 0 && it == transGrp.end()) {
+    if (inst == 0 && it == translationGroup.end()) {
       PvlKeyword root("InputPosition");
       root += "ROOT";
       return root;
     }
 
-    while(it != transGrp.end()) {
+    while (it != translationGroup.end()) {
       const PvlKeyword &result = *it;
 
       // This check is to prevent backtracking to the old "value,value" way of
       //   doing translation file input groups for the new keyword. Flag it
       //   immediately to give a good error message.
-      if(result.size() == 1 && result[0].contains(",")) {
+      if (result.size() == 1 && result[0].contains(",")) {
         QString msg = "Keyword [InputPosition] cannot have a comma [,] in ";
         msg += " the value [";
         msg += result[0];
@@ -311,24 +334,24 @@ namespace Isis {
       else {
         //foundLegalInputGroup = true;
 
-        if(currentInstance == inst) {
+        if (currentInstance == inst) {
           return result;
         }
 
         currentInstance ++;
       }
 
-      it = transGrp.findKeyword("InputPosition", it + 1, transGrp.end());
+      it = translationGroup.findKeyword("InputPosition", it + 1, translationGroup.end());
     }
 
     /* Error if no containers were listed
-    if(!foundLegalInputGroup) {
+    if (!foundLegalInputGroup) {
       QString msg = "No input position found for translation [";
-      msg += nName;
+      msg += translationGroupName;
       msg += "] in translation file [";
       msg += p_trnsTbl.FileName();
       msg += "]";
-      throw iException::Message(iException::Programmer, msg, _FILEINFO_);
+      throw IException::Message(IException::Programmer, msg, _FILEINFO_);
     }*/
 
     PvlKeyword empty;
@@ -340,22 +363,21 @@ namespace Isis {
    * Returns the input keyword name from the translation table corresponding to
    * the output name argument.
    *
-   * @param nName The output name to be used to search the translation table.
-   *
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   *  
    * @return QString The input keyword name
    *
-   * @throws iException::Programmer
+   * @throws IException::Programmer
    */
-  QString PvlTranslationTable::InputKeywordName(const QString nName) const {
+  QString PvlTranslationTable::InputKeywordName(const QString translationGroupName) const {
 
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" +
-                   nName + "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
 
-    PvlGroup tgrp = p_trnsTbl.findGroup(nName);
-    if(tgrp.hasKeyword("InputKey")) return tgrp["InputKey"];
+    if (translationGroup.hasKeyword("InputKey")) return translationGroup["InputKey"];
 
     return "";
   }
@@ -365,97 +387,178 @@ namespace Isis {
    * Returns the input default value from the translation table corresponding
    * to the output name argument.
    *
-   * @param nName The output name to be used to search the translation table.
-   *
-   * @return QString The input default value
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
    *
-   * @throws iException::Programmer
+   * @return QString The input default value.
    */
-  QString PvlTranslationTable::InputDefault(const QString nName) const {
+  QString PvlTranslationTable::InputDefault(const QString translationGroupName) const {
 
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" +
-                   nName + "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
 
-    PvlGroup tgrp = p_trnsTbl.findGroup(nName);
-    if(tgrp.hasKeyword("InputDefault")) return tgrp["InputDefault"];
+    if (translationGroup.hasKeyword("InputDefault")) return translationGroup["InputDefault"];
 
     return "";
   }
 
-  bool PvlTranslationTable::hasInputDefault(const QString nName) {
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" + nName +
-                   "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
 
-    PvlGroup &tgrp = p_trnsTbl.findGroup(nName);
-    if(tgrp.hasKeyword("InputDefault")) return true;
+  /**
+   * Determines whether the given group has a default input value.
+   * This method returns true if the translation group contains a 
+   * PvlKeyword with the name "InputDefault". Note: no value needs
+   * to be assigned to this keyword. 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * 
+   * @return bool Indicates whether the given group has an 
+   *         InputDefault keyword.
+   */
+  bool PvlTranslationTable::hasInputDefault(const QString translationGroupName) {
+
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
+
+    if (translationGroup.hasKeyword("InputDefault")) return true;
 
     return false;
   }
 
-  bool PvlTranslationTable::IsAuto(const QString nName) {
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" + nName +
-                   "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
 
-    PvlGroup &tgrp = p_trnsTbl.findGroup(nName);
-    if(tgrp.hasKeyword("Auto")) return true;
+  /**
+   * Determines whether the given group should be automatically 
+   * translated. This method returns true if the translation 
+   * group contains a PvlKeyword with the name "Auto". Note: 
+   * no value is assigned to this keyword. 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * 
+   * @return bool Indicates whether the given group has an Auto 
+   *         keyword.
+   */
+  bool PvlTranslationTable::IsAuto(const QString translationGroupName) {
+
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
+
+    if (translationGroup.hasKeyword("Auto")) return true;
 
     return false;
   }
 
-  bool PvlTranslationTable::IsOptional(const QString nName) {
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" + nName +
-                   "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
 
-    PvlGroup &tgrp = p_trnsTbl.findGroup(nName);
-    if(tgrp.hasKeyword("Optional")) return true;
+  /**
+   * Determines whether the translation group is optional. This 
+   * method returns true if the translation group contains a 
+   * PvlKeyword with the name "Optional". Note: no value is 
+   * assigned to this keyword. 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * 
+   * @return bool Indicates whether the given group has an 
+   *         Optional keyword.
+   */
+  bool PvlTranslationTable::IsOptional(const QString translationGroupName) {
+
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
+
+    if (translationGroup.hasKeyword("Optional")) return true;
 
     return false;
   }
 
-  PvlKeyword &PvlTranslationTable::OutputPosition(const QString nName) {
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" +
-                   nName + "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
 
-    PvlGroup &tgrp = p_trnsTbl.findGroup(nName);
-    if(!tgrp.hasKeyword("OutputPosition")) {
+  /**
+   * Retrieves the OutputPosition PvlKeyword for the translation 
+   * group with the given name. 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * 
+   * @return PvlKeyword The OutputPosition keyword from the given 
+   *         translation group.
+   *
+   * @throws IException::Programmer - "Unable to find translation keyword [OutputPostion]
+                                       in translation group in file."
+   */
+  PvlKeyword PvlTranslationTable::OutputPosition(const QString translationGroupName) {
+
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
+
+    if (!translationGroup.hasKeyword("OutputPosition")) {
       QString msg = "Unable to find translation keyword [OutputPostion] in [" +
-                   nName + "] in file [" + p_trnsTbl.fileName() + "]";
+                   translationGroupName + "] in file [" + p_trnsTbl.fileName() + "]";
       throw IException(IException::Programmer, msg, _FILEINFO_);
 
     }
 
-    return tgrp["OutputPosition"];
+    return translationGroup["OutputPosition"];
   }
 
 
-  QString PvlTranslationTable::OutputName(const QString nName) {
-    if(!p_trnsTbl.hasGroup(nName)) {
-      QString msg = "Unable to find translation group [" + nName +
-                   "] in file [" + p_trnsTbl.fileName() + "]";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
+  /**
+   * Retrieves a string containing the value of the OutputName 
+   * keyword for the translation group with the given name. 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * 
+   * @return @b QString The value of the OutputName keyword from 
+   *         the given translation group.
+   */
+  QString PvlTranslationTable::OutputName(const QString translationGroupName) {
+
+    const PvlGroup &translationGroup = findTranslationGroup(translationGroupName);
 
-    PvlGroup tgrp = p_trnsTbl.findGroup(nName);
-    if(tgrp.hasKeyword("OutputName")) {
-      return tgrp["OutputName"];
+    if (translationGroup.hasKeyword("OutputName")) {
+      return translationGroup["OutputName"];
     }
 
     return "";
   }
+
+  /**
+   * Searches for translation group with the given name.
+   *  
+   * @see PvlObject::findGroup() 
+   *  
+   * @param translationGroupName The name of the PVL translation 
+   *                             group used to identify the
+   *                             input/output keywords to be
+   *                             translated. Often, this is the
+   *                             same as the output keyword name.
+   * 
+   * @return const PvlGroup& The first PVL group with the given name.
+   *  
+   * @throws IException::Programmer - "Unable to find translation 
+   *                   group in file."
+   */
+  const PvlGroup &PvlTranslationTable::findTranslationGroup(const QString translationGroupName) const {
+    if (!p_trnsTbl.hasGroup(translationGroupName)) {
+      QString msg = "Unable to find translation group [" + translationGroupName +
+                   "] in file [" + p_trnsTbl.fileName() + "]";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    return p_trnsTbl.findGroup(translationGroupName);
+  }
 } // end namespace isis
 
diff --git a/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.h b/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.h
index 6eaede556bfd63e112932f6052b49a71f7cd7551..94474228bf130a04e03ba451af1026302f845fcc 100644
--- a/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.h
+++ b/isis/src/base/objs/PvlTranslationTable/PvlTranslationTable.h
@@ -110,6 +110,8 @@ namespace Isis {
    *                          renamed later) now returns a PvlKeyword.
    *  @history 2017-11-04 Jeannie Backer - Modified Translation input value to make a case
    *                          insensitive comparison.
+   *  @history 2018-04-16 Jeannie Backer - Updated documentation and improved
+   *                          coding standards/style.
    *  
    *  
    *  
@@ -128,16 +130,16 @@ namespace Isis {
       virtual ~PvlTranslationTable();
 
       // Return the associated input group from the trans table
-      virtual PvlKeyword InputGroup(const QString nName, const int inst = 0) const;
+      virtual PvlKeyword InputGroup(const QString translationGroupName, const int inst = 0) const;
 
       // Return the associated input keyword name from the trans table
-      virtual QString InputKeywordName(const QString nName) const;
+      virtual QString InputKeywordName(const QString translationGroupName) const;
 
       // Return the associated input default value from the trans table
-      QString InputDefault(const QString nName) const;
+      QString InputDefault(const QString translationGroupName) const;
 
       // Translate a single input value associated with a output name to a output value
-      QString Translate(const QString nName, const QString fValue = "") const;
+      QString Translate(const QString translationGroupName, const QString inputKeyValue = "") const;
 
       // Add more table entries to the translation table data
       void AddTable(std::istream &transStm);
@@ -148,11 +150,12 @@ namespace Isis {
       const Pvl &TranslationTable() const;
       virtual std::vector< std::pair<QString, int> > validKeywords() const;
 
-      bool hasInputDefault(const QString nName);
-      bool IsAuto(const QString nName);
-      bool IsOptional(const QString nName);
-      PvlKeyword &OutputPosition(const QString nName);
-      QString OutputName(const QString nName);
+      bool hasInputDefault(const QString translationGroupName);
+      bool IsAuto(const QString translationGroupName);
+      bool IsOptional(const QString translationGroupName);
+      PvlKeyword OutputPosition(const QString translationGroupName);
+      QString OutputName(const QString translationGroupName);
+      const PvlGroup &findTranslationGroup(const QString translationGroupName) const;
 
     private:
       Pvl p_trnsTbl;
diff --git a/isis/src/base/objs/QtImporter/QtImporter.truth b/isis/src/base/objs/QtImporter/QtImporter.truth
index d11ca99921278e357c7ebdfc1759d3b4db03fdf8..724db11ad791de31c952e4dc8bfd502d8c4d2dc2 100644
--- a/isis/src/base/objs/QtImporter/QtImporter.truth
+++ b/isis/src/base/objs/QtImporter/QtImporter.truth
@@ -2,8 +2,6 @@ Testing QtImporter...
 
 Creating Instance
 Importing
-Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Clean-up
 
 Done
diff --git a/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.cpp b/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.cpp
index 012334777525788fba58a6a70c23d664ff04f5c4..e08fb54d7b8828beed319af0382765ff47bb62a3 100644
--- a/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.cpp
+++ b/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.cpp
@@ -68,7 +68,7 @@ namespace Isis {
     p_focalPlaneX = dx;  // dx is a ground range distance in meters
     p_focalPlaneY = dy;  // dy is Doppler shift in htz and should always be 0
 
-    if(p_et != p_camera->time().Et()) ComputeA();
+    if (p_et != p_camera->time().Et()) ComputeA();
     double slantRange = p_a[0] + p_a[1] * dx + p_a[2] * dx * dx + p_a[3] * dx * dx * dx; // meters
 
     p_camera->SetFocalLength(slantRange);
@@ -86,7 +86,7 @@ namespace Isis {
     p_undistortedFocalPlaneX = ux * p_rangeSigma;    // ux converts to slant range in meters
     p_undistortedFocalPlaneY = uy * p_dopplerSigma;  // uy converts to Doppler shift in htz and should always be 0
 
-    if(p_et != p_camera->time().Et()) ComputeA();
+    if (p_et != p_camera->time().Et()) ComputeA();
 
     double slant = p_undistortedFocalPlaneX;
     // First trap the case where no iteration is needed. Since this occurs at
@@ -144,19 +144,17 @@ namespace Isis {
         if (abs(funcMin) <= abs(funcMax)) {
           //min is closer
           xMin = xMax - 2*dist; 
-          xMax = xMax; //doesn't change
         }
         else {
           //max is closer
           xMax = xMin + 2*dist;
-          xMin = xMin; //doesn't change
         }
 
         funcMin = slant -(p_a[0]+ xMin *(p_a[1] + xMin * (p_a[2] + xMin * p_a[3])));
         funcMax = slant - (p_a[0] + xMax *(p_a[1] + xMax * (p_a[2] + xMax * p_a[3])));
         
         // if we've successfully bracketed the root, we can break. 
-        if((funcMin <= 0.0 && funcMax >= 0.0) || (funcMin >= 0.0 && funcMax <= 0.0)){
+        if ((funcMin <= 0.0 && funcMax >= 0.0) || (funcMin >= 0.0 && funcMax <= 0.0)){
           p_initialMinGroundRangeGuess = xMin;
           p_initialMaxGroundRangeGuess = xMax;
           minGroundRangeGuess = funcMin;
@@ -169,7 +167,7 @@ namespace Isis {
     // If the ground range guesses at the 2 extremes of the image are equal
     // or they have the same sign, then the ground range cannot be solved for.
     // The only case where they are equal should be at zero, which we already trapped.
-    if((minGroundRangeGuess == maxGroundRangeGuess) ||
+    if ((minGroundRangeGuess == maxGroundRangeGuess) ||
         (minGroundRangeGuess < 0.0 && maxGroundRangeGuess < 0.0) ||
        (minGroundRangeGuess > 0.0 && maxGroundRangeGuess > 0.0)) {
       return false;
@@ -196,13 +194,13 @@ namespace Isis {
 
     do {
       iter++;
-      if(fbx * fcx > 0.0) {
+      if (fbx * fcx > 0.0) {
         cx = ax;
         fcx = fax;
         d = bx - ax;
         e = d;
       }
-      if(fabs(fcx) < fabs(fbx)) {
+      if (fabs(fcx) < fabs(fbx)) {
         ax = bx;
         bx = cx;
         cx = ax;
@@ -212,14 +210,14 @@ namespace Isis {
       }
       tol1 = 2.0 * eps * fabs(bx) + 0.5 * p_tolerance;
       xm = 0.5 * (cx - bx);
-      if(fabs(xm) <= tol1 || fbx == 0.0) {
+      if (fabs(xm) <= tol1 || fbx == 0.0) {
         p_focalPlaneX = bx;
         p_focalPlaneY = 0.0;
         return true;
       }
-      if(fabs(e) >= tol1 && fabs(fax) > fabs(fbx)) {
+      if (fabs(e) >= tol1 && fabs(fax) > fabs(fbx)) {
         s = fbx / fax;
-        if(ax == cx) {
+        if (ax == cx) {
           p = 2.0 * xm * s;
           q = 1.0 - s;
         }
@@ -229,11 +227,11 @@ namespace Isis {
           p = s * (2.0 * xm * q * (q - r) - (bx - ax) * (r - 1.0));
           q = (q - 1.0) * (r - 1.0) * (s - 1.0);
         }
-        if(p > 0.0) q = -q;
+        if (p > 0.0) q = -q;
         p = fabs(p);
         t = 3.0 * xm * q - fabs(tol1 * q);
-        if(t > fabs(e * q)) t = fabs(e * q);
-        if(2.0 * p < t) {
+        if (t > fabs(e * q)) t = fabs(e * q);
+        if (2.0 * p < t) {
           e = d;
           d = p / q;
         }
@@ -248,11 +246,11 @@ namespace Isis {
       }
       ax = bx;
       fax = fbx;
-      if(fabs(d) > tol1) {
+      if (fabs(d) > tol1) {
         bx = bx + d;
       }
       else {
-        if(xm >= 0.0) {
+        if (xm >= 0.0) {
           t = fabs(tol1);
         }
         else {
@@ -262,7 +260,7 @@ namespace Isis {
       }
       fbx = slant - (p_a[0] + bx * (p_a[1] + bx * (p_a[2] + bx * p_a[3])));
     }
-    while(iter <= p_maxIterations);
+    while (iter <= p_maxIterations);
 
     return false;
   }
@@ -274,7 +272,7 @@ namespace Isis {
   void RadarSlantRangeMap::SetCoefficients(PvlKeyword &keyword) {
     PvlSequence seq;
     seq = keyword;
-    for(int i = 0; i < seq.Size(); i++) {
+    for (int i = 0; i < seq.Size(); i++) {
       // TODO:  Test array size to be 4 if not throw error
       std::vector<QString> array = seq[i];
       double et;
diff --git a/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.h b/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.h
index 0844c5424ae3453103e3d4bb9abe584e1f94782d..882c20fcfa93040924b98892b6672465ac3642b5 100644
--- a/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.h
+++ b/isis/src/base/objs/RadarSlantRangeMap/RadarSlantRangeMap.h
@@ -41,26 +41,29 @@ namespace Isis {
    *
    * @internal
    *  @history 2009-07-01 Janet Barrett - Changed the bracketing method
-   *                      used to solve for the root of the function that
-   *                      determines ground range given slant range;
-   *                      fixed code that determines the range coefficients
-   *                      to used based on current ephemeris time
+   *                          used to solve for the root of the function that
+   *                          determines ground range given slant range;
+   *                          fixed code that determines the range coefficients
+   *                          to used based on current ephemeris time
    *  @history 2010-03-19 Debbie A. Cook - Added comments about the units
-   *                      and corrected slant in SetUndistortedFocalPlane
-   *                      to be in meters instead of km
+   *                          and corrected slant in SetUndistortedFocalPlane
+   *                          to be in meters instead of km
    *  @history 2011-09-14 Randy Kirk - Fixed the ComputeA method so that it
-   *                      is handling the range coefficients properly. A
-   *                      linear fit is used to obtain the range coefficients
-   *                      if the current time falls between 2 points with
-   *                      known range coefficients.
+   *                          is handling the range coefficients properly. A
+   *                          linear fit is used to obtain the range coefficients
+   *                          if the current time falls between 2 points with
+   *                          known range coefficients.
    *  @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis 
-   *                      coding standards. References #972.
+   *                          coding standards. References #972.
    *  @history 2016-02-24 Randy Kirk and Janet Barrett - Fixed an issue that caused
-   *                      the sensor model for LRO and Chandrayaan's MiniRF to not be able to 
-   *                      calculate and report lat/lon in the LXB mode. References #2400.
+   *                          the sensor model for LRO and Chandrayaan's MiniRF to not be able to 
+   *                          calculate and report lat/lon in the LXB mode. References #2400.
    *  @history 2016-08-01 Kristin Berry - Added the ability to extend the range of the initial root
-   *                      bracket in SetUndistortedFocalPlan if the initial range was too narrow.
-   *                      Also added RAs & DECs to the camera model.References #2400. 
+   *                          bracket in SetUndistortedFocalPlan if the initial range was too 
+   *                          narrow. Also added RAs & DECs to the camera model.References #2400.
+   *  @history 2018-09-28 Kaitlyn Lee - Removed unnecessary lines of code that were
+   *                          causing build warnings on MacOS 10.13. Updated code up to standards. 
+   *                          References #5520. 
    *                      
    */
   class RadarSlantRangeMap : public CameraDistortionMap {
diff --git a/isis/src/base/objs/Reduce/Reduce.truth b/isis/src/base/objs/Reduce/Reduce.truth
index e42990317a117944c3ef611fc3f68f404268c069..ac88a11ce6d173ff597197dbfdba652d5e32aea7 100644
--- a/isis/src/base/objs/Reduce/Reduce.truth
+++ b/isis/src/base/objs/Reduce/Reduce.truth
@@ -1,6 +1,4 @@
 Reduce by Near
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = Results
   InputLines      = 126
   InputSamples    = 126
@@ -15,8 +13,6 @@ Group = Results
 End_Group
 
 Reduce by Average
-unittest: Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Group = Results
   InputLines      = 126
   InputSamples    = 126
diff --git a/isis/src/base/objs/SerialNumberList/SerialNumberList.truth b/isis/src/base/objs/SerialNumberList/SerialNumberList.truth
index 3ba590bda44080e19e417f5475eef3f82a3bdb76..9911639497e1ceee3737cbfc8b6a7bc3a2055bc5 100644
--- a/isis/src/base/objs/SerialNumberList/SerialNumberList.truth
+++ b/isis/src/base/objs/SerialNumberList/SerialNumberList.truth
@@ -75,8 +75,7 @@ Possible SerialNumbers for Observation Number: Unknown
 
 
 Creating SerialNumberList(QString, bool, Progress)
-Creating Isis 3 serial numbers from list file.
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
1
+1
   FileName from index                  = ab102401.cub
   FileName from SerialNumber           = ab102401.cub
   FileName index from FileName         = 0
diff --git a/isis/src/base/objs/SpecialPixel/SpecialPixel.h b/isis/src/base/objs/SpecialPixel/SpecialPixel.h
index 8210a68e2fc85bc325711a650d99954a59b92616..50e656d9506e3194a19d373fcad0982a5f041158 100644
--- a/isis/src/base/objs/SpecialPixel/SpecialPixel.h
+++ b/isis/src/base/objs/SpecialPixel/SpecialPixel.h
@@ -76,7 +76,8 @@ namespace Isis {
    *   @history 2016-04-20 Jeannie Backer - Added Janet Barret's changes
    *                           IVALID_MAX4 definition to handle SignedInteger
    *                           imports.
-   *
+   *   @history 2018-07-18 Tyler Wilson - Added 4-byte unsigned int special pixel values.
+   *                           References #971.
    *  @todo 2005-02-15 Kris Becker - finish class documentation
    *
    */
@@ -143,6 +144,7 @@ namespace Isis {
   const int  IVALID_MIN4 = 0xFF7FFFFA;
   const float VALID_MIN4 = (*((const float *) &IVALID_MIN4));
 
+
   const int  INULL4 = 0xFF7FFFFB;
   const float NULL4 = (*((const float *) &INULL4));
 
@@ -158,6 +160,7 @@ namespace Isis {
   const int  IHIGH_REPR_SAT4 = 0xFF7FFFFF;
   const float HIGH_REPR_SAT4 = (*((const float *) &IHIGH_REPR_SAT4));
 
+
   const float VALID_MAX4 = FLT_MAX;
   const int IVALID_MAX4  = (*((const int *) &VALID_MAX4));
 
@@ -179,6 +182,16 @@ namespace Isis {
   const unsigned short HIGH_REPR_SATU2  = ((unsigned short)   65535);
   const unsigned short VALID_MAXU2      = ((unsigned short)   65522);
 
+  // 4-byte unsigned special pixel values
+  const unsigned int VALID_MINUI4      = ((unsigned int)       3);
+  const unsigned int NULLUI4           = ((unsigned int)       0);
+  const unsigned int LOW_REPR_SATUI4   = ((unsigned int)       1);
+  const unsigned int LOW_INSTR_SATUI4  = ((unsigned int)       2);
+  const unsigned int HIGH_INSTR_SATUI4 = ((unsigned int)   4294967294);
+  const unsigned int HIGH_REPR_SATUI4  = ((unsigned int)   4294967295);
+  const unsigned int VALID_MAXUI4      = ((unsigned int)   4294967282);
+
+
   // 1-byte special pixel values
   const unsigned char VALID_MIN1      = ((unsigned char) 1);
   const unsigned char NULL1           = ((unsigned char) 0);
diff --git a/isis/src/base/objs/SpecialPixel/unitTest.cpp b/isis/src/base/objs/SpecialPixel/unitTest.cpp
index b949e33030a971ae9290684b5959fd6a9b0270ca..ab80a979a585ae7e8d9a46231778d0c7b2a2dc98 100644
--- a/isis/src/base/objs/SpecialPixel/unitTest.cpp
+++ b/isis/src/base/objs/SpecialPixel/unitTest.cpp
@@ -5,6 +5,8 @@
 #include "SpecialPixel.h"
 #include "Preference.h"
 
+#include <climits>
+
 using namespace Isis;
 using namespace std;
 
@@ -32,7 +34,7 @@ int main(int argc, char *argv[]) {
   cout << endl;
 
   cout << "Valid minimum (4 byte):           " << Isis::VALID_MIN4 << endl;
-  cout << "Null (4 byte):                    " << Isis::NULL4 << endl;
+  cout << "Null (4 byte):                    " << Isis::NULL4 << endl; 
   cout << "Low Representation (4 byte):      " << Isis::LOW_REPR_SAT4 << endl;
   cout << "Low Instrument (4 byte):          " << Isis::LOW_INSTR_SAT4 << endl;
   cout << "High Representation (4 byte):     " << Isis::HIGH_REPR_SAT4 << endl;
@@ -50,6 +52,8 @@ int main(int argc, char *argv[]) {
   cout << "Valid maximum (8 byte):           " << Isis::VALID_MAX8 << endl;
   cout << endl;
 
+
+
   double d = 0.0;
   cout << "Testing 0.0 ... " << endl;
   cout << "IsSpecial:     " << Isis::IsSpecial(d) << endl;
@@ -277,5 +281,15 @@ int main(int argc, char *argv[]) {
     e.print();
   }
   cout << endl;
+
+
+
+
+
+
+
+
+
+
 }
 
diff --git a/isis/src/base/objs/SpectralDefinition2D/SpectralDefinition2D.truth b/isis/src/base/objs/SpectralDefinition2D/SpectralDefinition2D.truth
index 758d7f244457986b4ccfaf07daa558ad94e562a7..2cd3bb3220242b056686f71e8aed47a076d8150c 100644
--- a/isis/src/base/objs/SpectralDefinition2D/SpectralDefinition2D.truth
+++ b/isis/src/base/objs/SpectralDefinition2D/SpectralDefinition2D.truth
@@ -2,8 +2,6 @@
 
 Constructor given a 5x2x20 cube
 Constructor given a 5x2x20 cube
-Importing Spectral Definition Cube
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Spectel at (s,b) (1, 1) : Wavelength=1 Width=91
 Spectel at (s,b) (1, 2) : Wavelength=2 Width=92
 Spectel at (s,b) (1, 3) : Wavelength=3 Width=93
@@ -106,14 +104,10 @@ Spectel at (s,b) (5, 19) : Wavelength=19 Width=919
 Spectel at (s,b) (5, 20) : Wavelength=20 Width=920
 ----- Testing searching -----
 
-Importing Spectral Definition Cube
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Spectel at (s,b) (1, 1) : Wavelength=2 Width=92
 Spectel at (s,b) (1, 1) : Wavelength=2 Width=92
 ----- Testing sections -----
 
-Importing Spectral Definition Cube
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Number of section: 4
 Spectel at (s,b) (1, 1 ): Wavelength=1 Width=91
 Spectel at (s,b) (1, 2 ): Wavelength=2 Width=92
diff --git a/isis/src/base/objs/SpectralDefinitionFactory/SpectralDefinitionFactory.truth b/isis/src/base/objs/SpectralDefinitionFactory/SpectralDefinitionFactory.truth
index 106048266ad1286b8a9aacf75dc9c330564b39bd..4c5ff858d38dba84df0d9c9fe6a537cc9a9ab651 100644
--- a/isis/src/base/objs/SpectralDefinitionFactory/SpectralDefinitionFactory.truth
+++ b/isis/src/base/objs/SpectralDefinitionFactory/SpectralDefinitionFactory.truth
@@ -1,5 +1,5 @@
 ----- Testing SpectralDefinitionFactory -----
 **ERROR** Unable to open input file [assets/test.csv]. Is it a valid CSV?.
-**USER ERROR** Unable to open file assets/test.csv.
+**USER ERROR** Unable to open file [assets/test.csv].
 **I/O ERROR** Unable to open [assets/test.txt].
 **I/O ERROR** Unable to open [assets/cube.cub].
diff --git a/isis/src/base/objs/Spice/Spice.cpp b/isis/src/base/objs/Spice/Spice.cpp
index 8b4ae4887e2cec558f4ca0449496c286ac8fec50..f902508f301dc6e69a2e278a5c9a593cf4a7f9c8 100644
--- a/isis/src/base/objs/Spice/Spice.cpp
+++ b/isis/src/base/objs/Spice/Spice.cpp
@@ -258,7 +258,12 @@ namespace Isis {
     *m_ckCode   = *m_ikCode;
 
     if (!m_target->isSky()) {
+      // Get target body code and radii and store them in the Naif group
+      // DAC modified to look for and store body code so that the radii keyword name
+      // will be able to be constructed even for new bodies not in the standard PCK yet.
       QString radiiKey = "BODY" + Isis::toString(m_target->naifBodyCode()) + "_RADII";
+      QVariant result = m_target->naifBodyCode();
+      storeValue("BODY_CODE", 0, SpiceIntType, result);
       std::vector<Distance> radii(3,Distance());
       radii[0] = Distance(getDouble(radiiKey, 0), Distance::Kilometers);
       radii[1] = Distance(getDouble(radiiKey, 1), Distance::Kilometers);
diff --git a/isis/src/base/objs/Spice/Spice.h b/isis/src/base/objs/Spice/Spice.h
index ab0631b7e271dc63cda537667f3a714ccf7256cf..6e326ccc553c5ac5f676441ef46366d37c97c1fe 100644
--- a/isis/src/base/objs/Spice/Spice.h
+++ b/isis/src/base/objs/Spice/Spice.h
@@ -269,7 +269,7 @@ namespace Isis {
    *   @history 2015-07-21 Kristin Berry - Added additional NaifStatus::CheckErrors() to see if any
    *                           NAIF errors were signaled. References #2248.
    *   @history 2016-05-18 Jeannie Backer and Stuart Sides - Moved the construction of the Target
-   *                           after the NAIF kenels have been loaded or the NAIF keywords
+   *                           after the NAIF kernels have been loaded or the NAIF keywords
    *                           have been pulled from the cube labels, so we can find target
    *                           body codes that are defined in kernels and not just body codes
    *                           build into spicelib. References #3934
@@ -278,6 +278,13 @@ namespace Isis {
    *                           m_et is set. References #4476. 
    *   @history 2016-10-21 Jeannie Backer - Reorder method signatures and member variable
    *                           declarations to fit ISIS coding standards. References #4476.
+   *   @history 2018-06-07 Debbie A Cook - Added BODY_CODE to Naif keywords.  This code
+   *                           is used in the target body radii keyword name.  Isis retrieves this code
+   *                           from the standard PCK.  Because target bodies new to Naif are not 
+   *                           included in the standard PCK, missions create a special body-specific
+   *                           PCK to define the new body, including its body code.  This PCK is only
+   *                           loaded in spiceinit so the code needs to be saved so that the radii 
+   *                           keyword can be created to retrieve the target radii.
    */
   class Spice {
     public:
diff --git a/isis/src/base/objs/Spice/Spice.truth b/isis/src/base/objs/Spice/Spice.truth
index 98bb6a3b8e07cffb7113fb19be5c940fd8af9b11..a4d8a770ac925057026601f46d571f6e2749b17e 100644
--- a/isis/src/base/objs/Spice/Spice.truth
+++ b/isis/src/base/objs/Spice/Spice.truth
@@ -2,7 +2,7 @@ Unit test for Isis::Spice
 Testing unknown target ...
 **ERROR** Unable to look up NAIF body code for this Target.
 **I/O ERROR** Could not convert Target [Mard] to NAIF body code.
-**I/O ERROR** Can not find [BODY_FRAME_CODE] in text kernels.
+**I/O ERROR** Can not find [BODY_CODE] in text kernels.
 
 Creating Spice object ...
 BodyCode        = 499
@@ -592,6 +592,7 @@ Target Name = Mars
 
 Get Stored Naif Keywords...
 Object = NaifKeywords
+  BODY_CODE = 499
   BODY499_RADII = (3397.0, 3397.0, 3375.0)
   BODY_FRAME_CODE = 10014
   FRAME_MGS_MOC = -94031
diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp b/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp
index ceb4e7cd1095eeaf2249baea31a7782b1df1ea9a..a7cebd130f3cf70bcea0fde53eb82015c6923e3a 100644
--- a/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp
+++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp
@@ -149,7 +149,7 @@ namespace Isis {
     p_timeBias = rotToCopy.p_timeBias;
 
     p_et = rotToCopy.p_et;
-    p_quaternion = rotToCopy.p_quaternion; 
+    p_quaternion = rotToCopy.p_quaternion;
     p_matrixSet = rotToCopy.p_matrixSet;
     p_source = rotToCopy.p_source;
     p_axisP = rotToCopy.p_axisP;
@@ -159,8 +159,8 @@ namespace Isis {
     p_timeScale = rotToCopy.p_timeScale;
     p_degreeApplied = rotToCopy.p_degreeApplied;
 
-//    for (std::vector<double>::size_type i = 0; i < rotToCopy.p_coefficients[0].size(); i++) 
-    for (int i = 0; i < 3; i++) 
+//    for (std::vector<double>::size_type i = 0; i < rotToCopy.p_coefficients[0].size(); i++)
+    for (int i = 0; i < 3; i++)
       p_coefficients[i] = rotToCopy.p_coefficients[i];
 
     p_noOverride = rotToCopy.p_noOverride;
@@ -180,43 +180,43 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Destructor for SpiceRotation object.
-   */ 
-  SpiceRotation::~SpiceRotation() { 
+   */
+  SpiceRotation::~SpiceRotation() {
   }
 
 
-  /** 
+  /**
    * Change the frame to the given frame code.  This method has no effect if
-   * spice is cached. 
+   * spice is cached.
    *
-   * @param frameCode The integer-valued frame code 
-   */ 
+   * @param frameCode The integer-valued frame code
+   */
   void SpiceRotation::SetFrame(int frameCode) {
     p_constantFrames[0] = frameCode;
   }
 
 
-  /** 
-   * Accessor method that returns the frame code. This is the first value of the 
-   * constant frames member variable. 
-   *  
-   * @return @b int An integer value indicating the frame code. 
-   */ 
+  /**
+   * Accessor method that returns the frame code. This is the first value of the
+   * constant frames member variable.
+   *
+   * @return @b int An integer value indicating the frame code.
+   */
   int SpiceRotation::Frame() {
     return p_constantFrames[0];
   }
 
 
-  /** 
+  /**
    * Apply a time bias when invoking SetEphemerisTime method.
    *
    * The bias is used only when reading from NAIF kernels.  It is added to the
    * ephermeris time passed into SetEphemerisTime and then the body
    * position is read from the NAIF kernels and returned.  When the cache
-   * is loaded from a table the bias is ignored as it is assumed to have 
-   * already been applied.  If this method is never called the default bias is 
+   * is loaded from a table the bias is ignored as it is assumed to have
+   * already been applied.  If this method is never called the default bias is
    * 0.0 seconds.
    *
    * @param timeBias time bias in seconds
@@ -226,7 +226,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the J2000 to reference frame quaternion at given time.
    *
    * This method returns the J2000 to reference frame rotational matrix at a
@@ -280,11 +280,11 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Accessor method to get current ephemeris time.
    *
    * @return @b double The current ephemeris time.
-   */ 
+   */
   double SpiceRotation::EphemerisTime() const {
     return p_et;
   }
@@ -301,16 +301,16 @@ namespace Isis {
 
 
   /**
-   * Set the downsize status to minimize cache. 
+   * Set the downsize status to minimize cache.
    *
-   * @param status The DownsizeStatus enumeration value. 
-   */ 
+   * @param status The DownsizeStatus enumeration value.
+   */
   void SpiceRotation::MinimizeCache(DownsizeStatus status) {
     p_minimizeCache = status;
   }
 
 
-  /** 
+  /**
    * Cache J2000 rotation quaternion over a time range.
    *
    * This method will load an internal cache with frames over a time
@@ -384,7 +384,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Cache J2000 to frame rotation for a time.
    *
    * This method will load an internal cache with a rotation for a single
@@ -402,7 +402,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Cache J2000 rotations using a table file.
    *
    * This method will load either an internal cache with rotations (quaternions)
@@ -423,7 +423,7 @@ namespace Isis {
    * @param table   An ISIS table blob containing valid J2000 to reference
    *                quaternion/time values
    *
-   * @throws IException::Programmer "Expecting either three, five, or eight fields in the 
+   * @throws IException::Programmer "Expecting either three, five, or eight fields in the
    *                                 SpiceRotation table"
    */
   void SpiceRotation::LoadCache(Table &table) {
@@ -476,7 +476,7 @@ namespace Isis {
       p_fullCacheSize = toInt(table.Label().findKeyword("CkTableOriginalSize")[0]);
     }
 
-    // Load FrameTypeCode from labels if available and the planetary constants keywords 
+    // Load FrameTypeCode from labels if available and the planetary constants keywords
     if (table.Label().hasKeyword("FrameTypeCode")) {
       m_frameType = (FrameType) toInt(table.Label().findKeyword("FrameTypeCode")[0]);
     }
@@ -582,7 +582,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Cache J2000 rotation over existing cached time range using polynomials
    *
    * This method will reload an internal cache with matrices
@@ -601,7 +601,7 @@ namespace Isis {
       p_cacheTime.clear();
       p_cache.clear();
 
-      // Clear the angular velocity cache if we can calculate it instead.  It can't be calculated 
+      // Clear the angular velocity cache if we can calculate it instead.  It can't be calculated
       //  for functions of degree 0 (framing cameras), so keep the original av.  It is better than
       //  nothing.
       if (p_degree > 0 && p_cacheAv.size() > 1)  p_cacheAv.clear();
@@ -644,7 +644,7 @@ namespace Isis {
         if (p_hasAngularVelocity) p_cacheAv.push_back(tempRot.AngularVelocity());
       }
     }
-    else { //(p_source < PolyFunction) 
+    else { //(p_source < PolyFunction)
       QString msg = "The SpiceRotation has not yet been fit to a function";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
@@ -657,7 +657,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return a table with J2000 to reference rotations.
    *
    * Return a table containing the cached pointing with the given
@@ -668,7 +668,7 @@ namespace Isis {
    *
    * @throws IException::Programmer "Only cached rotations can be returned as a line cache of
    *                                 quaternions and time"
-   * 
+   *
    * @return @b Table Table with given name that contains the cached pointing
    */
   Table SpiceRotation::LineCache(const QString &tableName) {
@@ -685,7 +685,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return a table with J2000 to reference rotations.
    *
    * Return a table containing the cached pointing with the given
@@ -703,7 +703,7 @@ namespace Isis {
    * @param tableName    Name of the table to create and return
    *
    * @throws IException::Programmer "To create table source of data must be either Memcache or
-   *                                 PolyFunction" 
+   *                                 PolyFunction"
    *
    * @return @b Table Table with given name that contains the cached pointing
    */
@@ -812,8 +812,8 @@ namespace Isis {
   }
 
 
-  /** 
-   * Initialize planetary orientation constants from Spice PCK 
+  /**
+   * Initialize planetary orientation constants from Spice PCK
    *
    * Retrieve planetary orientation constants from a Spice PCK and store them in the class.
    *
@@ -825,12 +825,12 @@ namespace Isis {
 
     // Retrieve the frame class from Naif.  We distinguish PCK types into text PCK,
     // binary PCK, and PCK not referenced to J2000.  Isis binary PCK can
-    // not be used to solve for target body orientation because of the variety and 
+    // not be used to solve for target body orientation because of the variety and
     // complexity models used with binary PCK.  Currently ISIS does not solve for
     // target body orientation on bodies not referenced to J2000, but it could be
     // changed to handle that case.
     checkForBinaryPck();
-    
+
     if (m_frameType == PCK) {
       // Make sure the reference frame is J2000.  We will need to modify FrameTrace and
       // the pck methods in this class to handle this case.  At the time this method was
@@ -848,13 +848,13 @@ namespace Isis {
       if (found) {
         // Go get the frame name if it is not the default J2000
         SpiceDouble relativeFrameCode;
-        bodvcd_c(centerBodyCode, "CONSTANTS_REF_FRAME", 1, 
+        bodvcd_c(centerBodyCode, "CONSTANTS_REF_FRAME", 1,
                         &numReturned, &relativeFrameCode);
-      } 
+      }
 
       if (!found || relativeFrameCode == 1) {  // We only work with J2000 relative frames for now
 
-        // Make sure the standard coefficients are available for the body code by 
+        // Make sure the standard coefficients are available for the body code by
         // checking for ra
         naifKeyword = "BODY" + toString(centerBodyCode) + "_POLE_RA" ;
         dtpool_c(naifKeyword.toLatin1().data(), &found, &numExpected, &naifType);
@@ -899,7 +899,7 @@ namespace Isis {
             m_raNutPrec.resize(numExpected, 0.);
             m_decNutPrec.resize(numExpected, 0.);
             m_pmNutPrec.resize(numExpected, 0.);
-            
+
             std::vector<SpiceDouble> angles(numExpected);
             bodvcd_c(centerBodyCode, "NUT_PREC_RA", numExpected,  &numReturned, &m_raNutPrec[0]);
             bodvcd_c(centerBodyCode, "NUT_PREC_DEC", numExpected,  &numReturned, &m_decNutPrec[0]);
@@ -924,7 +924,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Initialize planetary orientation constants from an cube body rotation label
    *
    * Retrieve planetary orientation constants from a cube body rotation label if they are present.
@@ -998,12 +998,12 @@ namespace Isis {
         m_sysNutPrec1.push_back(Angle(toDouble(labelCoeffs[i]), Angle::Degrees));
       }
     }
- 
+
     NaifStatus::CheckErrors();
   }
 
 
-  /** 
+  /**
    * Add labels to a SpiceRotation table.
    *
    * Return a table containing the labels defining the rotation.
@@ -1052,7 +1052,7 @@ namespace Isis {
 
  // Begin section added 06-20-2015 DAC
     table.Label() += PvlKeyword("FrameTypeCode");
-    table.Label()["FrameTypeCode"].addValue(toString(m_frameType)); 
+    table.Label()["FrameTypeCode"].addValue(toString(m_frameType));
 
     if (m_frameType == PCK) {
       // Write out all the body orientation constants
@@ -1113,7 +1113,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the camera angles at the center time of the observation
    *
    * @return @b vector<double> Camera angles at center time
@@ -1127,9 +1127,9 @@ namespace Isis {
   }
 
 
-  /** 
-   * Return the camera angles (right ascension, declination, and twist) for the 
-   * time-based matrix CJ 
+  /**
+   * Return the camera angles (right ascension, declination, and twist) for the
+   * time-based matrix CJ
    *
    * @param axis3 The rotation axis for the third angle
    * @param axis2 The rotation axis for the second angle
@@ -1154,8 +1154,8 @@ namespace Isis {
 
 
 
-  /** 
-   * Set the rotation angles (phi, delta, and w) for the current time to define the 
+  /**
+   * Set the rotation angles (phi, delta, and w) for the current time to define the
    * time-based matrix CJ. This method was created for unitTests and should not
    * be used otherwise.  It only works for cached data with a cache size of 1.
    *
@@ -1167,54 +1167,54 @@ namespace Isis {
   void SpiceRotation::SetAngles(std::vector<double> angles, int axis3, int axis2, int axis1) {
     eul2m_c(angles[2], angles[1], angles[0], axis3, axis2, axis1, (SpiceDouble (*)[3]) &(p_CJ[0]));
     p_cache[0] = p_CJ;
-    // Reset to get the new values 
+    // Reset to get the new values
     p_et = -DBL_MAX;
     SetEphemerisTime(p_et);
   }
 
 
-  /** 
-   * Accessor method to get the angular velocity 
+  /**
+   * Accessor method to get the angular velocity
    *
    * @return @b vector<double> Angular velocity
-   */ 
+   */
   std::vector<double> SpiceRotation::AngularVelocity() {
     return p_av;
   }
 
 
-  /** 
-   * Accessor method to get the frame chain for the constant part of the 
-   * rotation (ends in target) 
+  /**
+   * Accessor method to get the frame chain for the constant part of the
+   * rotation (ends in target)
    *
-   * @return @b vector<int> The frame chain for the constant part of the rotation. 
-   */ 
+   * @return @b vector<int> The frame chain for the constant part of the rotation.
+   */
   std::vector<int> SpiceRotation::ConstantFrameChain() {
     return p_constantFrames;
   }
 
 
-  /** 
+  /**
    * Accessor method to get the frame chain for the rotation (begins in J2000).
-   * 
+   *
    * @return @b vector<int> The frame chain for the rotation.
-   */ 
+   */
   std::vector<int> SpiceRotation::TimeFrameChain() {
     return p_timeFrames;
   }
 
 
-  /** 
-   * Checks whether the rotation has angular velocities.  
+  /**
+   * Checks whether the rotation has angular velocities.
    *
    * @return @b bool Indicates whether the rotation has angular velocities.
-   */ 
+   */
   bool SpiceRotation::HasAngularVelocity() {
     return p_hasAngularVelocity;
   }
 
 
-  /** 
+  /**
    * Given a direction vector in the reference frame, return a J2000 direction.
    *
    * @param[in] rVec A direction vector in the reference frame
@@ -1223,7 +1223,7 @@ namespace Isis {
    */
   std::vector<double> SpiceRotation::J2000Vector(const std::vector<double> &rVec) {
     NaifStatus::CheckErrors();
-    
+
     std::vector<double> jVec;
 
     if (rVec.size() == 3) {
@@ -1232,7 +1232,7 @@ namespace Isis {
       jVec.resize(3);
       mtxv_c(TJ, (SpiceDouble *) &rVec[0], (SpiceDouble *) &jVec[0]);
     }
-    
+
     else if (rVec.size() == 6) {
       // See Naif routine frmchg for the format of the state matrix.  The constant rotation, TC,
       // has a derivative with respect to time of I.
@@ -1257,7 +1257,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body pole ra
    *
    * Return the coefficients used to calculate the target body right
@@ -1267,7 +1267,7 @@ namespace Isis {
    * right ascension (usually the same as the most recent IAU Report)
    * the trignometric terms to account for nutation/precession need to
    * be added.
-   * 
+   *
    * pole ra = ra0 + ra1*T + ra2*T**2 + sum(racoef[i]i*sin(angle[i]))
    *
    * @return @b vector<double> A vector of length 3 containing the pole ra coefficients
@@ -1277,7 +1277,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body pole dec
    *
    * Return the coefficients used to calculate the target body declination
@@ -1287,7 +1287,7 @@ namespace Isis {
    * declination (usually the same as the most recent IAU Report)
    * the trignometric terms to account for nutation/precession need to
    * be added.
-   * 
+   *
    * pole dec = dec0 + dec1*T + dec2*T**2 + sum(racoef[i]i*sin(angle[i]))
    *
    * @return @b vector<double> A vector of length 3 containing the pole declination coefficients.
@@ -1297,16 +1297,16 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body prime meridian
    *
    * Return the coefficients used to calculate the target body prime
    * meridian without nutation/precession.  The model is a standard
-   * quadratic polynomial in time in days from the standard epoch 
+   * quadratic polynomial in time in days from the standard epoch
    * (usually J2000).  To match the Naif PCK prime meridian, (usually
    * the same as the most recent IAU Report) the trignometric terms
    * to account for nutation/precession need to be added.
-   * 
+   *
    * pm = pm0 + pm1*d + pm2*d**2 + sum(pmcoef[i]i*sin(angle[i]))
    *
    * @return @b vector<double> A vector of length 3 containing the prime meridian coefficients.
@@ -1316,7 +1316,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body pole ra nut/prec coefficients
    *
    * Return the coefficients used to calculate the target body right
@@ -1324,7 +1324,7 @@ namespace Isis {
    * sum of the products of the coefficients returned by this method
    * with the sin of the corresponding angles associated with the
    * barycenter related to the target body.
-   * 
+   *
    * pole ra = ra0 + ra1*T + ra2*T**2 + sum(raCoef[i]i*sin(angle[i]))
    *
    * @return @b vector<double> A vector containing the pole ra nut/prec coefficients.
@@ -1334,14 +1334,14 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body pole dec nut/prec coefficients
    *
    * Return the coefficients used to calculate the target body declination
-   * nutation/precession contribution.  The model is the sum of the products 
-   * of the coefficients returned by this method with the sin of the corresponding 
+   * nutation/precession contribution.  The model is the sum of the products
+   * of the coefficients returned by this method with the sin of the corresponding
    * angles associated with the barycenter related to the target body.
-   * 
+   *
    * pole dec = dec0 + dec1*T + dec2*T**2 + sum(decCoef[i]i*sin(angle[i]))
    *
    * @return @b vector<double> A vector containing the pole dec nut/prec coeffcients.
@@ -1351,14 +1351,14 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body pm nut/prec coefficients
    *
    * Return the coefficients used to calculate the target body prime meridian
-   * nutation/precession contribution.  The model is the sum of the products 
-   * of the coefficients returned by this method with the sin of the corresponding 
+   * nutation/precession contribution.  The model is the sum of the products
+   * of the coefficients returned by this method with the sin of the corresponding
    * angles associated with the barycenter related to the target body.
-   * 
+   *
    * prime meridian = pm0 + pm1*T + pm2*d**2 + sum(pmCoef[i]i*sin(angle[i]))
    *
    * @return @b vector<double> A vector containing the pm nut/prec coeffcients.
@@ -1368,14 +1368,14 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the constants used to calculate the target body system nut/prec angles
    *
    * Return the constant terms used to calculate the target body system (barycenter)
    * nutation/precession angles (periods).  The model for the angles is linear in
-   * time in Julian centuries since the standard epoch (usually J2000). 
+   * time in Julian centuries since the standard epoch (usually J2000).
    * angles associated with the barycenter related to the target body.
-   *  
+   *
    * angle[i] = constant[i] + coef[i]*T
    *
    * @return @b vector<Angle> A vector containing the system nut/prec constant terms.
@@ -1385,15 +1385,15 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the coefficients used to calculate the target body system nut/prec angles
    *
-   * Return the linear coefficients used to calculate the target body system 
-   * (barycenter) nutation/precession angles (periods).  The model for the 
-   * angles is linear in time in Julian centuries since the standard epoch 
-   * (usually J2000). angles associated with the barycenter related to the 
+   * Return the linear coefficients used to calculate the target body system
+   * (barycenter) nutation/precession angles (periods).  The model for the
+   * angles is linear in time in Julian centuries since the standard epoch
+   * (usually J2000). angles associated with the barycenter related to the
    * target body.
-   *  
+   *
    * angle[i] = constant[i] + coef[i]*T
    *
    * @return @b vector<Angle> A vector containing the system nut/prec linear coefficients.
@@ -1403,9 +1403,9 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Given a direction vector in the reference frame, compute the derivative
-   * with respect to one of the coefficients in the angle polynomial fit 
+   * with respect to one of the coefficients in the angle polynomial fit
    * equation of a vector rotated from the reference frame to J2000.
    * TODO - merge this method with ToReferencePartial
    *
@@ -1416,14 +1416,14 @@ namespace Isis {
    * @throws IException::User "Body rotation uses a binary PCK. Solutions for this model are not
    *                           supported"
    * @throws IException::User "Body rotation uses a PCK not referenced to J2000. Solutions for this
-   *                           model are not supported" 
+   *                           model are not supported"
    * @throws IException::User "Solutions are not supported for this frame type."
    *
-   * @return @b vector<double>   A direction vector rotated by derivative 
+   * @return @b vector<double>   A direction vector rotated by derivative
    *                             of reference to J2000 rotation.
    */
-  std::vector<double> SpiceRotation::toJ2000Partial(const std::vector<double> &lookT, 
-                                                    SpiceRotation::PartialType partialVar, 
+  std::vector<double> SpiceRotation::toJ2000Partial(const std::vector<double> &lookT,
+                                                    SpiceRotation::PartialType partialVar,
                                                     int coeffIndex) {
     NaifStatus::CheckErrors();
 
@@ -1459,7 +1459,7 @@ namespace Isis {
        break;
      case NOTJ2000PCK:
        msg = "Body rotation uses a PCK not referenced to J2000. "
-             "Solutions for this model are not supported";    
+             "Solutions for this model are not supported";
        throw IException(IException::User, msg, _FILEINFO_);
        break;
      default:
@@ -1497,7 +1497,7 @@ namespace Isis {
     double dTJ[3][3];
     mxm_c((SpiceDouble *) &p_TC[0], dCJ[0], dTJ);
 
-    // Finally rotate the target vector with the transpose of the 
+    // Finally rotate the target vector with the transpose of the
     // derivative matrix, dTJ to get a J2000 vector
     std::vector<double> lookdJ(3);
 
@@ -1508,7 +1508,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Given a direction vector in J2000, return a reference frame direction.
    *
    * @param[in] jVec A direction vector in J2000
@@ -1543,7 +1543,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the coefficients of a polynomial fit to each
    * of the three camera angles for the time period covered by the
    * cache, angle = a + bt + ct**2, where t = (time - p_baseTime)/ p_timeScale.
@@ -1691,7 +1691,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the coefficients of a polynomial fit to each of the
    * three camera angles for the time period covered by the
    * cache, angle = c0 + c1*t + c2*t**2 + ... + cn*t**n,
@@ -1745,10 +1745,10 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the coefficients of a polynomial fit to each
    * of the three planet angles for the time period covered by the
-   * cache, ra = ra0 + ra1*t + ra2*t**2 + raTrig, 
+   * cache, ra = ra0 + ra1*t + ra2*t**2 + raTrig,
    *            dec = dec0 + dec1*t + dec2*t**2 + decTrig,
    *            pm = pm0 + pm1*d + pm2*t**2 + pmTrig,
    * where t = time / (seconds per day). for time = et
@@ -1764,7 +1764,7 @@ namespace Isis {
    */
   void SpiceRotation::usePckPolynomial() {
 
-    // Check to see if rotation is already stored as a polynomial 
+    // Check to see if rotation is already stored as a polynomial
     if (p_source == PckPolyFunction) {
       p_hasAngularVelocity = true;
       return;
@@ -1780,7 +1780,7 @@ namespace Isis {
     // Set the scales
     p_dscale =  0.000011574074074;   // seconds to days conversion
     p_tscale = 3.1688087814029D-10; // seconds to Julian centuries conversion
-    //Set the quadratic part of the equations  
+    //Set the quadratic part of the equations
     //TODO consider just hard coding this part in evaluate
     Isis::PolynomialUnivariate functionRa(p_degree);  // Basis function fit to target body pole ra
     Isis::PolynomialUnivariate functionDec(p_degree);  // Basis function fit to target body pole dec
@@ -1793,7 +1793,7 @@ namespace Isis {
 
     int numNutPrec = p_sysNutPrec0.size;
     if (numNutPrec > 0) {
-      // Set the trigonometric part of the equation 
+      // Set the trigonometric part of the equation
       Isis::TrigBasis functionRaNutPrec("raNutPrec", Isis::TrigBasis::Sin, numNutPrec);
       Isis::TrigBasis functionRaNutPrec("decNutPrec", Isis::TrigBasis::Cos, numNutPrec);
       Isis::TrigBasis functionRaNutPrec("pmNutPrec", Isis::TrigBasis::Sin, numNutPrec);
@@ -1811,9 +1811,9 @@ namespace Isis {
     */
 
     // Set the flag indicating p_degree has been applied to the planet angles, the
-    // coefficients of the polynomials have been saved, and the cache reloaded from  
+    // coefficients of the polynomials have been saved, and the cache reloaded from
     // TODO cache reloaded???
-    // the polynomials.  
+    // the polynomials.
     // ****At least for the planet angles, I don't think we want to reload the cache until just
     // before we write out the table
     p_degreeApplied = true;
@@ -1823,10 +1823,10 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the coefficients of a polynomial fit to each
    * of the three planet angles for the time period covered by the
-   * cache, ra = ra0 + ra1*t + ra2*t**2 + raTrig, 
+   * cache, ra = ra0 + ra1*t + ra2*t**2 + raTrig,
    *            dec = dec0 + dec1*t + dec2*t**2 + decTrig,
    *            pm = pm0 + pm1*d + pm2*t**2 + pmTrig,
    * where t = time / (seconds per day). for time = et
@@ -1853,7 +1853,7 @@ namespace Isis {
     // Apply new function parameters
     setEphemerisTimePckPolyFunction();
   }
-                               
+
 
   /**
    * Return the coefficients of a polynomial fit to each of the
@@ -1939,7 +1939,7 @@ namespace Isis {
    *
    * @param coeffIndex The index of the coefficient to differentiate
    *
-   * @throws IException::Programmer "Unable to evaluate the derivative of the SPICE rotation fit 
+   * @throws IException::Programmer "Unable to evaluate the derivative of the SPICE rotation fit
    *                                 polynomial for the given coefficient index. Index is negative
    *                                 or exceeds degree of polynomial"
    *
@@ -1974,7 +1974,7 @@ namespace Isis {
    * @param partialVar Variable derivative is to be with respect to
    * @param coeffIndex The index of the coefficient to differentiate
    *
-   * @throws IException::Programmer "Unable to evaluate the derivative of the SPICE rotation fit 
+   * @throws IException::Programmer "Unable to evaluate the derivative of the SPICE rotation fit
    *                                 polynomial for the given coefficient index. Index is negative
    *                                 or exceeds degree of polynomial"
    *
@@ -1983,7 +1983,7 @@ namespace Isis {
   double SpiceRotation::DPckPolynomial(SpiceRotation::PartialType partialVar,
                                        const int coeffIndex) {
     const double p_dayScale = 86400; // number of seconds in a day
- // Number of 24 hour days in a Julian century = 36525    
+ // Number of 24 hour days in a Julian century = 36525
     const double p_centScale = p_dayScale * 36525;
     double time = 0.;
 
@@ -2104,7 +2104,7 @@ namespace Isis {
     double dTJ[3][3];
     mxm_c((SpiceDouble *) &p_TC[0], dCJ[0], dTJ);
 
-    // Finally rotate the J2000 vector with the derivative matrix, dTJ to 
+    // Finally rotate the J2000 vector with the derivative matrix, dTJ to
     // get the vector in the targeted reference frame.
     std::vector<double> lookdT(3);
 
@@ -2115,7 +2115,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Wrap the input angle to keep it within 2pi radians of the angle to compare.
    *
    * @param[in]  compareAngle Look vector in J2000 frame
@@ -2139,7 +2139,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the degree of the polynomials to be fit to the
    * three camera angles for the time period covered by the
    * cache, angle = c0 + c1*t + c2*t**2 + ... + cn*t**n,
@@ -2195,8 +2195,8 @@ namespace Isis {
   }
 
 
-  /** 
-   * Accessor method to get the rotation frame type. 
+  /**
+   * Accessor method to get the rotation frame type.
    *
    * @return @b SpiceRotation::FrameType The frame type of the rotation.
    */
@@ -2205,8 +2205,8 @@ namespace Isis {
   }
 
 
-  /** 
-   * Accessor method to get the rotation source. 
+  /**
+   * Accessor method to get the rotation source.
    *
    * @return @b SpiceRotation::Source The source of the rotation.
    */
@@ -2216,9 +2216,9 @@ namespace Isis {
 
 
   /**
-   * Resets the source of the rotation to the given value. 
+   * Resets the source of the rotation to the given value.
    *
-   * @param source The rotation source to be set.  
+   * @param source The rotation source to be set.
    */
   void SpiceRotation::SetSource(Source source) {
     p_source = source;
@@ -2227,7 +2227,7 @@ namespace Isis {
 
 
   /**
-   * Accessor method to get the rotation base time. 
+   * Accessor method to get the rotation base time.
    *
    * @return @b double The base time for the rotation.
    */
@@ -2237,7 +2237,7 @@ namespace Isis {
 
 
   /**
-   * Accessor method to get the rotation time scale. 
+   * Accessor method to get the rotation time scale.
    *
    * @return @b double The time scale for the rotation.
    */
@@ -2246,7 +2246,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the axes of rotation for decomposition of a rotation
    * matrix into 3 angles.
    *
@@ -2269,15 +2269,15 @@ namespace Isis {
   }
 
 
-  /** 
-   * Load the time cache.  This method should works with the LoadCache(startTime, endTime, size) 
+  /**
+   * Load the time cache.  This method should works with the LoadCache(startTime, endTime, size)
    * method to load the time cache.
    *
    * @throws IException::Programmer "Full cache size does NOT match cache size in LoadTimeCache --
    *                                 should never happen"
-   * @throws IException::Programmer "Observation crosses segment boundary--unable to interpolate 
+   * @throws IException::Programmer "Observation crosses segment boundary--unable to interpolate
    *                                 pointing"
-   * @throws IException::User "No camera kernels loaded...Unable to determine time cache to 
+   * @throws IException::User "No camera kernels loaded...Unable to determine time cache to
    *                           downsize"
    */
   void SpiceRotation::LoadTimeCache() {
@@ -2311,7 +2311,7 @@ namespace Isis {
       SpiceDouble quats[p_fullCacheSize][4];
       double avvs[p_fullCacheSize][3];// Angular velocity vector
 
-      // We will treat et as the sclock time and avoid converting back and forth 
+      // We will treat et as the sclock time and avoid converting back and forth
      for (int r = 0; r < p_fullCacheSize; r++) {
         timeSclkdp[r] = p_cacheTime[r];
         SpiceDouble CJ[9] = { p_cache[r][0], p_cache[r][1], p_cache[r][2],
@@ -2332,7 +2332,7 @@ namespace Isis {
       SpiceInt intarr[p_fullCacheSize]; // Integer work array
       SpiceInt sizOut = p_fullCacheSize; // Size of downsized cache
 
-      ck3sdn(radTol, avflag, (int *) &sizOut, timeSclkdp, (doublereal *) quats, 
+      ck3sdn(radTol, avflag, (int *) &sizOut, timeSclkdp, (doublereal *) quats,
              (SpiceDouble *) avvs, nints, &cubeStarts, dparr, (int *) intarr);
 
       // Clear full cache and load with downsized version
@@ -2398,7 +2398,7 @@ namespace Isis {
 
         // Don't read type 5 ck here
         if (ic[2] == 5) break;
-//      
+//
         // Check times for type 3 ck segment if spacecraft matches
         if (ic[0] == spCode && ic[2] == 3) {
           sct2e_c((int) spCode / 1000, dc[0], &segStartEt);
@@ -2409,7 +2409,7 @@ namespace Isis {
           // Get times for this segment
           if (currentTime >= segStartEt  &&  currentTime <= segStopEt) {
 
-            // Check for a gap in the time coverage by making sure the time span of the observation 
+            // Check for a gap in the time coverage by making sure the time span of the observation
             //  does not cross a segment unless the next segment starts where the current one ends
             if (observationSpansToNextSegment && currentTime > segStartEt) {
               QString msg = "Observation crosses segment boundary--unable to interpolate pointing";
@@ -2476,7 +2476,7 @@ namespace Isis {
       throw IException(IException::User, msg, _FILEINFO_);
     }
 
-    // Load times according to cache size (body rotations) -- handle first round of type 5 ck case 
+    // Load times according to cache size (body rotations) -- handle first round of type 5 ck case
     //   and multiple ck case --Load a time for every line scan line and downsize later
     if (!timeLoaded) {
       double cacheSlope = 0.0;
@@ -2490,7 +2490,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return full listing (cache) of original time coverage requested.
    *
    * @throws IException::User "Time cache not availabe -- rerun spiceinit"
@@ -2518,7 +2518,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Compute frame trace chain from target frame to J2000
    *
    * @param et Ephemeris time
@@ -2611,7 +2611,7 @@ namespace Isis {
 
       else {
         QString msg = "The frame " + toString(frameCodes[frmidx]) +
-            " has a type " + toString(type) + " not supported by your version of Naif Spicelib." 
+            " has a type " + toString(type) + " not supported by your version of Naif Spicelib."
             + "You need to update.";
         throw IException(IException::Programmer, msg, _FILEINFO_);
 
@@ -2649,7 +2649,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the full rotation TJ as a matrix
    *
    * @return @b vector<double> Returned matrix.
@@ -2664,9 +2664,9 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the constant 3x3 rotation TC matrix as a quaternion.
-   *  
+   *
    * @return @b vector<double> Constant rotation quaternion, TC.
    */
   std::vector<double> SpiceRotation::ConstantRotation() {
@@ -2679,9 +2679,9 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return the constant 3x3 rotation TC matrix as a vector of length 9.
-   *  
+   *
    * @return @b vector<double> Constant rotation matrix, TC.
    */
   std::vector<double> &SpiceRotation::ConstantMatrix() {
@@ -2689,9 +2689,9 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the constant 3x3 rotation TC matrix from a vector of length 9.
-   *  
+   *
    * @param constantMatrix Constant rotation matrix, TC.
    */
   void SpiceRotation::SetConstantMatrix(std::vector<double> constantMatrix) {
@@ -2699,9 +2699,9 @@ namespace Isis {
     return;
   }
 
-  /** 
+  /**
    * Return time-based 3x3 rotation CJ matrix as a quaternion.
-   *  
+   *
    * @return @b vector<double> Time-based rotation quaternion, CJ.
    */
   std::vector<double> SpiceRotation::TimeBasedRotation() {
@@ -2714,9 +2714,9 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Return time-based 3x3 rotation CJ matrix as a vector of length 9.
-   *  
+   *
    * @return @b vector<double> Time-based rotation matrix, CJ.
    */
   std::vector<double> &SpiceRotation::TimeBasedMatrix() {
@@ -2724,9 +2724,9 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Set the time-based 3x3 rotation CJ matrix from a vector of length 9.
-   *  
+   *
    * @param timeBasedMatrix Time-based rotation matrix, TC.
    */
   void SpiceRotation::SetTimeBasedMatrix(std::vector<double> timeBasedMatrix) {
@@ -2735,7 +2735,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Initialize the constant rotation
    *
    * @param et Ephemeris time.
@@ -2752,7 +2752,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Compute the angular velocity from the time-based functions fit to the pointing angles
    * This method computes omega = angular velocity matrix, and extracts the angular velocity.
    * See comments in the Naif Spicelib routine xf2rav_c.c.
@@ -2810,7 +2810,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Compute the derivative of the 3x3 rotation matrix CJ with respect to time.
    * The derivative is computed based on p_CJ (J2000 to first constant frame).
    *
@@ -2877,7 +2877,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Compute & return the rotation matrix that rotates vectors from J2000 to the targeted frame.
    *
    * @return @b vector<double> Returned rotation matrix.
@@ -2900,7 +2900,7 @@ namespace Isis {
       for (int col = 0; col < 3; col++) {
         jcol  =  col + 3;
         // Fill the upper left corner
-        stateTJ[irow*6 + col] = p_TC[vpos] * stateCJ[0][col] + p_TC[vpos+1] * stateCJ[1][col] 
+        stateTJ[irow*6 + col] = p_TC[vpos] * stateCJ[0][col] + p_TC[vpos+1] * stateCJ[1][col]
                                               + p_TC[vpos+2] * stateCJ[2][col];
         // Fill the lower left corner
         stateTJ[row*6 + col]  =  p_TC[vpos] * stateCJ[3][col] + p_TC[vpos+1] * stateCJ[4][col]
@@ -2915,7 +2915,7 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Extrapolate pointing for a given time assuming a constant angular velocity.
    * The pointing and angular velocity at the current time will be used to
    * extrapolate pointing at the input time.  If angular velocity does not
@@ -2934,7 +2934,7 @@ namespace Isis {
     std::vector<double> CJ(9, 0.0);
     double dmat[3][3];
 
-    // Create a rotation matrix for the axis and magnitude of the angular velocity multiplied by  
+    // Create a rotation matrix for the axis and magnitude of the angular velocity multiplied by
     //   the time difference
     axisar_c((SpiceDouble *) &p_av[0], diffTime*vnorm_c((SpiceDouble *) &p_av[0]), dmat);
 
@@ -2945,7 +2945,7 @@ namespace Isis {
    }
 
 
-   /** 
+   /**
     * Set the full cache time parameters.
     *
     * @param[in]   startTime The earliest time of the full cache coverage
@@ -2960,7 +2960,7 @@ namespace Isis {
    }
 
 
-  /** 
+  /**
    * Check loaded pck to see if any are binary and set frame type to indicate binary pck.
    *
    * This is strictly a local method to be called only when the source is Spice.  Its purpose is
@@ -2971,7 +2971,7 @@ namespace Isis {
     // Get a count of all the loaded kernels
     SpiceInt count;
     ktotal_c("PCK", &count);
-    
+
     // Define some Naif constants
     int FILESIZ = 128;
     int TYPESIZ = 32;
@@ -2981,7 +2981,7 @@ namespace Isis {
     SpiceChar source[SOURCESIZ];
     SpiceInt handle;
     SpiceBoolean found;
-       
+
     // Get the name of each loaded kernel.  The accuracy of this test depends on the use of the
     // "bpc" suffix to name a binary pck.  If a binary bpc does not have the "bpc" suffix, it will not
     // be found by this test.  This test was suggested by Boris Semenov at Naif.
@@ -2994,9 +2994,9 @@ namespace Isis {
       }
     }
   }
-  
 
-  /** 
+
+  /**
    * Set the frame type (m_frameType).
    *
    * This is strictly a local method to be called only when the source is Spice.  Its purpose is
@@ -3012,7 +3012,7 @@ namespace Isis {
     frinfo_c(frameCode, &centerBodyCode, &frameClass, &classId, &found);
 
     if (found) {
-      if (frameClass == 2  ||  centerBodyCode > 0) {
+      if (frameClass == 2  ||  (centerBodyCode > 0 && frameClass != 3)) {
         m_frameType = PCK;
         // Load the PC information while it is available and set member values
         loadPCFromSpice(centerBodyCode);
@@ -3043,7 +3043,7 @@ namespace Isis {
           m_frameType = UNKNOWN;
         }
       }
-    }      
+    }
   }
 
 
@@ -3102,7 +3102,7 @@ namespace Isis {
       SpiceDouble delta[3][3];
       axisar_c(axis, angle * (SpiceDouble)mult, delta);
       mxmt_c((SpiceDouble *) &CJ1[0], delta, (SpiceDouble( *) [3]) &p_CJ[0]);
- 
+
       if (p_hasAngularVelocity) {
         double v1[3], v2[3]; // Vectors surrounding desired time
         vequ_c((SpiceDouble *) &p_cacheAv[cacheIndex][0], v1);
@@ -3154,7 +3154,7 @@ namespace Isis {
    * When setting the ephemeris time, updates the rotation state based on data read directly
    * from NAIF kernels using NAIF Spice routines
    *
-   * @throws IException::Io "[framecode] is an unrecognized reference frame code. Has the mission 
+   * @throws IException::Io "[framecode] is an unrecognized reference frame code. Has the mission
    *                         frames kernel been loaded?"
    * @throws IException::Io "No pointing is availabe at request time for frame code"
    *
@@ -3294,7 +3294,7 @@ namespace Isis {
 
   /**
    * When setting the ephemeris time, updates the rotation state based on a polynomial fit
-   * over spice kernel data. 
+   * over spice kernel data.
    *
    * @see SpiceRotation::SetEphemerisTime
    */
@@ -3308,7 +3308,7 @@ namespace Isis {
     setEphemerisTimePolyFunction();
     std::vector<double> polyAngles(3);
     // The decomposition fails because the angles are outside the valid range for Naif
-    // polyAngles = Angles(p_axis3, p_axis2, p_axis1); 
+    // polyAngles = Angles(p_axis3, p_axis2, p_axis1);
     polyAngles = EvaluatePolyFunction();
     std::vector<double> polyVelocity(3);
     polyVelocity = p_av;
@@ -3358,14 +3358,14 @@ namespace Isis {
     Angle dra = (m_raPole[1] + 2.*m_raPole[2]*centTime) / secondsPerJulianCentury;
     Angle ddec = (m_decPole[1] + 2.*m_decPole[2]*centTime) / secondsPerJulianCentury;
     Angle dpm = (m_pm[1] + 2.*m_pm[2]*dTime) / 86400;
-    
+
     // Now add the nutation/precession (trig part) adjustment to the expression if any
     int numNutPrec = (int) m_raNutPrec.size();
     Angle theta;
     double dtheta;
     double costheta;
     double sintheta;
-    
+
     for (int ia = 0;  ia < numNutPrec; ia++) {
       theta = m_sysNutPrec0[ia] + m_sysNutPrec1[ia]*centTime;
       dtheta = m_sysNutPrec1[ia].degrees() * DEG2RAD;
@@ -3408,7 +3408,7 @@ namespace Isis {
     SpiceDouble angsDangs[6];
     SpiceDouble BJs[6][6];
     vpack_c(w, delta, phi, angsDangs);
-    vpack_c(dw, ddelta, dphi, &angsDangs[3]); 
+    vpack_c(dw, ddelta, dphi, &angsDangs[3]);
     eul2xf_c (angsDangs, p_axis3, p_axis2, p_axis1, BJs);
 
     // Decompose the state matrix to the rotation and its angular velocity
diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.h b/isis/src/base/objs/SpiceRotation/SpiceRotation.h
index 74b842f046b383e2652822decea6b2970c8f11a2..9523b64c1f1a72305a746092e9a1c66ae53a72da 100644
--- a/isis/src/base/objs/SpiceRotation/SpiceRotation.h
+++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.h
@@ -187,31 +187,37 @@ namespace Isis {
    *   @history 2015-02-20 Jeannie Backer - Improved error messages.
    *   @history 2015-07-21 Kristin Berry - Added additional NaifStatus::CheckErrors() calls to see if
    *                           any NAIF errors were signaled. References #2248.
-   *   @history 2015-08-05 Debbie A. Cook - Programmer notes - Modified LoadCache, 
+   *   @history 2015-08-05 Debbie A. Cook - Programmer notes - Modified LoadCache,
    *                           and ComputeAv.
-   *                           Added new methods 
+   *                           Added new methods
    *                           loadPCFromSpice, loadPCFromTable, toJ2000Partial, poleRaCoefs,
-   *                           poleDecCoefs, pmCoefs, poleRaNutPrecCoefs, poleDecNutPrecCoefs, 
+   *                           poleDecCoefs, pmCoefs, poleRaNutPrecCoefs, poleDecNutPrecCoefs,
    *                           pmNutPrecCoefs, sysNutPrecConstants, sysNutPrecCoefs,
    *                           usePckPolynomial, setPckPolynomial(raCoef, decCoef, pmCoef),
    *                           getPckPolynomial, setEphemerisTimePckPolyFunction, getFrameType
-   *                           and members m_frameType, m_tOrientationAvailable, 
+   *                           and members m_frameType, m_tOrientationAvailable,
    *                           m_raPole, m_decPole, m_pm, m_raNutPrec, m_decNutPrec, m_pmNutPrec,
-   *                           m_sysNutPrec0, m_sysNutPrec1, m_dscale, m_Tscale to support request for 
+   *                           m_sysNutPrec0, m_sysNutPrec1, m_dscale, m_Tscale to support request for
    *                           solving for target body parameters.
-   *                           Also added a new enumerated value for Source, PckPolyFunction, 
+   *                           Also added a new enumerated value for Source, PckPolyFunction,
    *                           and PartialType, WRT_RotationRate.
    *   @history 2016-02-15 Debbie A. Cook - Programmer notes - Added private method
-   *                           setFrameType to set the frame type.  It also loads the planetary 
-   *                           constants for a PCK type. 
+   *                           setFrameType to set the frame type.  It also loads the planetary
+   *                           constants for a PCK type.
    *   @history 2016-06-28 Ian Humphrey - Updated documentation and coding standards. Added new
    *                           tests to unit test. Fixes #3972.
    *   @history 2017-12-13 Ken Edmundson - Added "case DYN:" to methods ToReferencePartial and toJ2000Partial. Fixes #5251.
    *                           This problem was found when trying to bundle M3 images that had been spiceinited with nadir
    *                           pointing. The nadir frame is defined as a Dynamic Frame by Naif.
+   *   @history 2018-04-21 Jesse Mapel - Modified frametype resolution to check if a body centered
+   *                           frame uses a CK or PCK definition. This only occurs for bodies
+   *                           where a pck cannot accurately define for the duration of a mission.
+   *                           The current example is the comet 67P/CHURYUMOV-GERASIMENKO
+   *                           imaged by Rosetta. Some future comet/astroid missions are expected
+   *                           to use a CK defined body fixed reference frame. Fixes #5408.
    *
    *  @todo Downsize using Hermite cubic spline and allow Nadir tables to be downsized again.
-   *  @todo Consider making this a base class with child classes based on frame type or 
+   *  @todo Consider making this a base class with child classes based on frame type or
    *              storage type (polynomial, polynomial over cache, cache, etc.)
    */
   class SpiceRotation {
@@ -236,66 +242,66 @@ namespace Isis {
       /**
        * The rotation can come from one of 3 places for an Isis cube.  The class
        * expects function to be after Memcache.
-       *       Spice - the rotation is calculated by Naif Spice routines with data 
+       *       Spice - the rotation is calculated by Naif Spice routines with data
        *                  read directly from Naif kernels.
-       *       Nadir - the rotation is calculated using the Naif routine twovec with 
+       *       Nadir - the rotation is calculated using the Naif routine twovec with
        *                  the position and velocity vectors of the spacecraft.
-       *       Memcache - the rotation is linearly interpolated from time-based 
+       *       Memcache - the rotation is linearly interpolated from time-based
        *                  values in a table.
-       *       PolyFunction - the rotation is calculated from an nth degree 
+       *       PolyFunction - the rotation is calculated from an nth degree
        *                  polynomial in one variable (time in scaled seconds)
        *       PolyFunctionOverSpice - the rotation is calculated from an nth
        *                  degree polynomial fit over the Naif Spice results.
-       *       PckPolyFunction - The rotation is calculated using the IAU fit 
+       *       PckPolyFunction - The rotation is calculated using the IAU fit
        *                  polynomials in one variable (time in Julian centuries and days).
        */
-      enum Source {            
-        Spice,                   //!< Directly from the kernels 
+      enum Source {
+        Spice,                   //!< Directly from the kernels
         Nadir,                   //!< Nadir pointing
         Memcache,                //!< From cached table
         PolyFunction,            //!< From nth degree polynomial
-        PolyFunctionOverSpice ,  //!< Kernels plus nth degree polynomial 
+        PolyFunctionOverSpice ,  //!< Kernels plus nth degree polynomial
         PckPolyFunction          //!< Quadratic polynomial function with linear trignometric terms
-      };            
+      };
 
-      /** 
-       * This enumeration indicates whether the partial derivative is taken with 
-       * respect to Right Ascension, Declination, or Twist (or Rotation). 
-       */ 
-      enum PartialType { 
+      /**
+       * This enumeration indicates whether the partial derivative is taken with
+       * respect to Right Ascension, Declination, or Twist (or Rotation).
+       */
+      enum PartialType {
         WRT_RightAscension, //!< With respect to Right Ascension
         WRT_Declination,    //!< With respect to Declination
         WRT_Twist           //!< With respect to Twist or Prime Meridian Rotation
       };
 
-      /** 
+      /**
        * Status of downsizing the cache
-       */ 
-      enum DownsizeStatus { 
-        Yes,  //!< Downsize the cache 
+       */
+      enum DownsizeStatus {
+        Yes,  //!< Downsize the cache
         Done, //!< Cache is downsized
-        No    //!< Do not downsize the cache 
+        No    //!< Do not downsize the cache
       };
 
-      /** 
-       * Enumeration for the frame type of the rotation  
-       */ 
+      /**
+       * Enumeration for the frame type of the rotation
+       */
       enum FrameType {
         UNKNOWN = 0,      //!< Isis specific code for unknown frame type
-        INERTL = 1,       //!< See Naif Frames.req document for 
+        INERTL = 1,       //!< See Naif Frames.req document for
         PCK  = 2,         //!< definitions
-        CK = 3,           //!< 
-        TK = 4,           //!< 
+        CK = 3,           //!<
+        TK = 4,           //!<
         DYN = 5,          //!<
         BPC = 6,          //!< Isis specific code for binary pck
         NOTJ2000PCK = 7   //!< PCK frame not referenced to J2000
-      };                                   
+      };
 
       void SetEphemerisTime(double et);
       double EphemerisTime() const;
 
       std::vector<double> GetCenterAngles();
-      
+
       std::vector<double> Matrix();
       std::vector<double> AngularVelocity();
 
@@ -422,9 +428,9 @@ namespace Isis {
       void setEphemerisTimePolyFunctionOverSpice();
       void setEphemerisTimePckPolyFunction();
       std::vector<double> p_cacheTime;  //!< iTime for corresponding rotation
-      std::vector<std::vector<double> > p_cache; /**< Cached rotations, stored as 
-                                                      rotation matrix from J2000 
-                                                      to 1st constant frame (CJ) or 
+      std::vector<std::vector<double> > p_cache; /**< Cached rotations, stored as
+                                                      rotation matrix from J2000
+                                                      to 1st constant frame (CJ) or
                                                       coefficients of polynomial
                                                       fit to rotation angles.*/
       int p_degree;                     //!< Degree of fit polynomial for angles
@@ -435,11 +441,11 @@ namespace Isis {
     private:
       // method
       void setFrameType();
-      std::vector<int> p_constantFrames;  /**< Chain of Naif frame codes in constant 
-                                               rotation TC. The first entry will always 
+      std::vector<int> p_constantFrames;  /**< Chain of Naif frame codes in constant
+                                               rotation TC. The first entry will always
                                                be the target frame code*/
-      std::vector<int> p_timeFrames;      /**< Chain of Naif frame codes in time-based 
-                                               rotation CJ. The last entry will always 
+      std::vector<int> p_timeFrames;      /**< Chain of Naif frame codes in time-based
+                                               rotation CJ. The last entry will always
                                                be 1 (J2000 code)*/
       double p_timeBias;                  //!< iTime bias when reading kernels
 
@@ -449,7 +455,7 @@ namespace Isis {
 
       bool p_matrixSet;                    //!< Flag indicating p_TJ has been set
       bool m_tOrientationAvailable;  //!< Target orientation constants are available
- 
+
 
       FrameType m_frameType;  //!< The type of rotation frame
       Source p_source;                    //!< The source of the rotation data
@@ -464,7 +470,7 @@ namespace Isis {
       bool p_degreeApplied;               /**< Flag indicating whether or not a polynomial
                                                of degree p_degree has been created and
                                                used to fill the cache*/
-      std::vector<double> p_coefficients[3];  /**< Coefficients defining functions fit 
+      std::vector<double> p_coefficients[3];  /**< Coefficients defining functions fit
                                                    to 3 pointing angles*/
       bool p_noOverride;                  //!< Flag to compute base time;
       double p_overrideBaseTime;          //!< Value set by caller to override computed base time
@@ -473,34 +479,34 @@ namespace Isis {
       double p_fullCacheStartTime;        //!< Initial requested starting time of cache
       double p_fullCacheEndTime;          //!< Initial requested ending time of cache
       int p_fullCacheSize;                //!< Initial requested cache size
-      std::vector<double> p_TC;           /**< Rotation matrix from first constant rotation 
+      std::vector<double> p_TC;           /**< Rotation matrix from first constant rotation
                                           (after all time-based rotations in frame chain from
                                            J2000 to target) to the target frame*/
-      std::vector<double> p_CJ;           /**< Rotation matrix from J2000 to first constant 
+      std::vector<double> p_CJ;           /**< Rotation matrix from J2000 to first constant
                                                rotation*/
       std::vector<std::vector<double> > p_cacheAv;
       //!< Cached angular velocities for corresponding rotactions in p_cache
       std::vector<double> p_av;           //!< Angular velocity for rotation at time p_et
-      bool p_hasAngularVelocity;          /**< Flag indicating whether the rotation 
+      bool p_hasAngularVelocity;          /**< Flag indicating whether the rotation
                                                includes angular velocity*/
-      std::vector<double> StateTJ();      /**< State matrix (6x6) for rotating state 
+      std::vector<double> StateTJ();      /**< State matrix (6x6) for rotating state
                                                vectors from J2000 to target frame*/
-      // The remaining items are only used for PCK frame types.  In this case the  
+      // The remaining items are only used for PCK frame types.  In this case the
       // rotation is  stored as a cache, but the coefficients are available for display
-      // or comparison, and the first three coefficient sets can be solved for and 
+      // or comparison, and the first three coefficient sets can be solved for and
       // updated in jigsaw.   The initial coefficient values are read from a Naif PCK.
       //
       // The general equation for the right ascension of the pole is
       //
       // raPole  =  raPole[0] + raPole[1]*Time  + raPole[2]*Time**2 + raNutPrec,
-      //    where 
-      //    raNutPrec  =  raNutPrec1[0]*sin(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) + 
+      //    where
+      //    raNutPrec  =  raNutPrec1[0]*sin(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) +
       //                  raNutPrec1[1]*sin(sysNutPrec[1][0] + sysNutPrec[1][1]*Time) + ...
       //                  raNutPrec1[N-1]*sin(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time) +
       // (optional for multiples of nutation precession angles)
       //                  raNutPrec2[0]*sin(2*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
       //                  raNutPrec2[1]*sin(2*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
-      //                  raNutPrec2[N-1]*sin(2*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) + 
+      //                  raNutPrec2[N-1]*sin(2*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
       //                  raNutPrecM[0]*sin(M*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
       //                  raNutPrecM[1]*sin(M*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
       //                  raNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
@@ -508,8 +514,8 @@ namespace Isis {
       // The general equation for the declination of the pole is
       //
       // decPole  =  p_decPole[0] + p_decPole[1]*Time  + p_decPole[2]*Time**2 + decNutPrec,
-      //    where 
-      //    decNutPrec  =  decNutPrec1[0]*cos(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) + 
+      //    where
+      //    decNutPrec  =  decNutPrec1[0]*cos(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) +
       //                   decNutPrec1[1]*cos(sysNutPrec[1][0] + sysNutPrec[1][1]*Time) + ...
       //                   decNutPrec1[N-1]*cos(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time) +
       //                   decNutPrec2[0]*cos(2*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
@@ -518,15 +524,15 @@ namespace Isis {
       // (optional for multiples of nutation precession angles)
       //                   decNutPrecM[0]*sin(M*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
       //                   decNutPrecM[1]*sin(M*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
-      //                   decNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) 
+      //                   decNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time))
       //
       //     and Time is julian centuries since J2000.
       //
       // The general equation for the prime meridian rotation is
       //
       // pm  =  p_pm[0] + p_pm[1]*Dtime  + p_pm[2]*Dtime**2 + pmNutPrec,
-      //    where 
-      //    pmNutPrec  =  pmNutPrec1[0]*sin(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) + 
+      //    where
+      //    pmNutPrec  =  pmNutPrec1[0]*sin(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) +
       //                  pmNutPrec1[1]*sin(sysNutPrec[1][0] + sysNutPrec[1][1]*Time) + ...
       //                  pmNutPrec1[N-1]*sin(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time) +
       // (optional for multiples of nutation precession angles)
@@ -535,24 +541,24 @@ namespace Isis {
       //                  pmNutPrec2[N-1]*sin(2*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
       //                  pmNutPrecM[0]*sin(M*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
       //                  pmNutPrecM[1]*sin(M*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
-      //                  pmNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) 
+      //                  pmNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time))
       //
-      //     Time is interval in Julian centuries since the standard epoch, 
+      //     Time is interval in Julian centuries since the standard epoch,
       //     dTime is interval in days from the standard epoch (J2000),
       //
-      //     N is the number of nutation/precession terms for the planetary system of the target 
-      //     body,  (possibly including multiple angles as unique terms, 
+      //     N is the number of nutation/precession terms for the planetary system of the target
+      //     body,  (possibly including multiple angles as unique terms,
       //             ie. 2*sysNutPrec[0][0] + sysNutPrec[][1]*Time).
       //
       //     Many of the constants in this equation are 0. for a given body.
       //
-      //     M is included as an option for future improvements.  M = highest multiple (period) 
+      //     M is included as an option for future improvements.  M = highest multiple (period)
       //     of any of the nutation/precession angles included in the equations.
       //
-      //     ***NOTE*** Currently Naif stores multiples (amplitudes) as if they were additional 
-      //                nutation/precession terms (periods) in the equation.  This method works as 
-      //                long as jigsaw does not solve for those values.  In order to solve for 
-      //                those values, the multiples will need to be known so that the partial 
+      //     ***NOTE*** Currently Naif stores multiples (amplitudes) as if they were additional
+      //                nutation/precession terms (periods) in the equation.  This method works as
+      //                long as jigsaw does not solve for those values.  In order to solve for
+      //                those values, the multiples will need to be known so that the partial
       //                derivatives can be correctly calculated.  Some possible ways of doing this
       //                are 1) Convince Naif to change their data format indicating the relation
       //                      2) Make an Isis version of the PCK data and have Isis software to
@@ -561,7 +567,7 @@ namespace Isis {
       //                          and software to apply them when calculating the rotation and partials.
       //
       //                For now this software will handle any terms with the same period and different
-      //                amplitudes as unique terms in the equation (raNutPrec, decNutPrec, 
+      //                amplitudes as unique terms in the equation (raNutPrec, decNutPrec,
       //                and pmNutPrec).
       //
       // The next three vectors will have length 3 (for a quadratic polynomial) if used.
@@ -569,19 +575,19 @@ namespace Isis {
       std::vector<Angle>m_decPole;      //!< Coefficients of a quadratic polynomial fitting pole dec.
       std::vector<Angle>m_pm ;          //!< Coefficients of a quadratic polynomial fitting pole pm.
       //
-      // Currently multiples (terms with periods matching other terms but varying amplitudes) 
-      // are handled as additional terms added to the end of the vector as Naif does (see 
-      // comments in any of the standard Naif PCK. 
-      std::vector<double>m_raNutPrec;    //!< Coefficients of pole right ascension nut/prec terms.  
-      std::vector<double>m_decNutPrec;  //!< Coefficients of pole decliniation nut/prec terms. 
-      std::vector<double>m_pmNutPrec;   //!< Coefficients of prime meridian nut/prec terms.  
+      // Currently multiples (terms with periods matching other terms but varying amplitudes)
+      // are handled as additional terms added to the end of the vector as Naif does (see
+      // comments in any of the standard Naif PCK.
+      std::vector<double>m_raNutPrec;    //!< Coefficients of pole right ascension nut/prec terms.
+      std::vector<double>m_decNutPrec;  //!< Coefficients of pole decliniation nut/prec terms.
+      std::vector<double>m_pmNutPrec;   //!< Coefficients of prime meridian nut/prec terms.
 
       // The periods of bodies in the same system are modeled with a linear equation
       std::vector<Angle>m_sysNutPrec0; //!< Constants of planetary system nut/prec periods
       std::vector<Angle>m_sysNutPrec1; //!< Linear terms of planetary system nut/prec periods
 
       // The following scalars are used in the IAU equations to convert p_et to the appropriate time
-      // units for calculating target body ra, dec, and w.  These need to be initialized in every 
+      // units for calculating target body ra, dec, and w.  These need to be initialized in every
       // constructor.
       //! Seconds per Julian century for scaling time in seconds
       static const double m_centScale;
@@ -591,4 +597,3 @@ namespace Isis {
 };
 
 #endif
-
diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.truth b/isis/src/base/objs/SpiceRotation/SpiceRotation.truth
index fa867d10df9e9f90a297d3df714a2da810503d26..695c9a31d7a0c46a531ff901237940c442da5114 100644
--- a/isis/src/base/objs/SpiceRotation/SpiceRotation.truth
+++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.truth
@@ -624,6 +624,13 @@ Frame type is binary PCK and cannot be updated
 End of PCK testing
 
 
+Testing CK based body rotation with 67P/Churyumov–Gerasimenko data ...
+Time = 4.6285471e+08
+CJ = 0.93816333 -0.34618155 -0.002810256
+     0.30996014 0.84356223 -0.43855157
+     0.15418909 0.41056193 0.89870163
+
+
 Testing exceptions...
 
 **I/O ERROR** Cannot find [INS-99999_TRANSX] in text kernels.
diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation_Darwin_x86_64_MacOSX10_13.truth b/isis/src/base/objs/SpiceRotation/SpiceRotation_Darwin_x86_64_MacOSX10_13.truth
new file mode 100644
index 0000000000000000000000000000000000000000..7d62d2b36f57ef514526617be53632541643feb6
--- /dev/null
+++ b/isis/src/base/objs/SpiceRotation/SpiceRotation_Darwin_x86_64_MacOSX10_13.truth
@@ -0,0 +1,662 @@
+Unit test for SpiceRotation
+Naif code = -94031
+Testing without cache (from SPICE)... 
+CJ(0) = -0.87506927 0.25477955 -0.41151081
+         0.011442263 0.86088548 0.50867009
+         0.48386242 0.44041295 -0.75624969
+av(0) = -1.3817139e-05 -0.0011493844 -0.00067443921
+CJ(1) = -0.85216522 0.27457809 -0.44544506
+         0.011408438 0.86081401 0.5087918
+         0.52314843 0.42849284 -0.73668827
+av(1) = -1.2759664e-05 -0.0011485667 -0.00067607282
+CJ(2) = -0.82753684 0.29372914 -0.47844118
+         0.011307844 0.86075918 0.50888679
+         0.56129752 0.41571243 -0.71563138
+av(2) = -1.4155561e-05 -0.001147111 -0.00067413283
+CJ(3) = -0.80133591 0.31214822 -0.51031779
+         0.011159773 0.86071999 0.50895635
+         0.59811054 0.40214997 -0.69320934
+av(3) = -1.2104446e-05 -0.0011411423 -0.00066849871
+CJ(4) = -0.77359018 0.32985508 -0.54106734
+         0.010977931 0.86068895 0.50901279
+         0.63359113 0.38782749 -0.66944164
+av(4) = -1.4107831e-05 -0.0011349124 -0.0006662493
+CJ(5) = -0.74451309 0.34675249 -0.57049362
+         0.010796958 0.86067614 0.50903832
+         0.66752055 0.3728261 -0.64452852
+av(5) = -1.1968844e-05 -0.0011267333 -0.00066073722
+CJ(6) = -0.71415 0.36283075 -0.59861809
+         0.010597655 0.86068385 0.50902947
+         0.69991247 0.35717945 -0.61850252
+av(6) = -8.9185184e-06 -0.0011163624 -0.00065670687
+CJ(7) = -0.68276816 0.37813868 -0.625171
+         0.010490873 0.86063983 0.50910611
+         0.73055977 0.34104285 -0.59158448
+av(7) = -1.3255742e-05 -0.0011054424 -0.00064995353
+CJ(8) = -0.6504334 0.39252175 -0.65027923
+         0.010371283 0.86063225 0.50912136
+         0.75949248 0.32440531 -0.56385491
+av(8) = -1.1327819e-05 -0.0010915537 -0.00063894876
+CJ(9) = -0.61729588 0.4060182 -0.67386573
+         0.010223693 0.86060645 0.50916796
+         0.78666465 0.30741789 -0.53539982
+av(9) = -1.2932496e-05 -0.0010747293 -0.00063276804
+
+Testing with cache ... 
+Time           = -69382819
+CJ(0) = -0.87506927 0.25477955 -0.41151081
+         0.011442263 0.86088548 0.50867009
+         0.48386242 0.44041295 -0.75624969
+av(0) = -1.3817139e-05 -0.0011493844 -0.00067443921
+Time           = -69382785
+CJ(1) = -0.85216522 0.27457809 -0.44544506
+         0.011408438 0.86081401 0.5087918
+         0.52314843 0.42849284 -0.73668827
+av(1) = -1.2759664e-05 -0.0011485667 -0.00067607282
+Time           = -69382751
+CJ(2) = -0.82753684 0.29372914 -0.47844118
+         0.011307844 0.86075918 0.50888679
+         0.56129752 0.41571243 -0.71563138
+av(2) = -1.4155561e-05 -0.001147111 -0.00067413283
+Time           = -69382717
+CJ(3) = -0.80133591 0.31214822 -0.51031779
+         0.011159773 0.86071999 0.50895635
+         0.59811054 0.40214997 -0.69320934
+av(3) = -1.2104446e-05 -0.0011411423 -0.00066849871
+Time           = -69382683
+CJ(4) = -0.77359018 0.32985508 -0.54106734
+         0.010977931 0.86068895 0.50901279
+         0.63359113 0.38782749 -0.66944164
+av(4) = -1.4107831e-05 -0.0011349124 -0.0006662493
+Time           = -69382648
+CJ(5) = -0.74451309 0.34675249 -0.57049362
+         0.010796958 0.86067614 0.50903832
+         0.66752055 0.3728261 -0.64452852
+av(5) = -1.1968844e-05 -0.0011267333 -0.00066073722
+Time           = -69382614
+CJ(6) = -0.71415 0.36283075 -0.59861809
+         0.010597655 0.86068385 0.50902947
+         0.69991247 0.35717945 -0.61850252
+av(6) = -8.9185184e-06 -0.0011163624 -0.00065670687
+Time           = -69382580
+CJ(7) = -0.68276816 0.37813868 -0.625171
+         0.010490873 0.86063983 0.50910611
+         0.73055977 0.34104285 -0.59158448
+av(7) = -1.3255742e-05 -0.0011054424 -0.00064995353
+Time           = -69382546
+CJ(8) = -0.6504334 0.39252175 -0.65027923
+         0.010371283 0.86063225 0.50912136
+         0.75949248 0.32440531 -0.56385491
+av(8) = -1.1327819e-05 -0.0010915537 -0.00063894876
+Time           = -69382512
+CJ(9) = -0.61729588 0.4060182 -0.67386573
+         0.010223693 0.86060645 0.50916796
+         0.78666465 0.30741789 -0.53539982
+av(9) = -1.2932496e-05 -0.0010747293 -0.00063276804
+
+Testing with functions ... 
+Source = 3
+Time           = -69382819
+CJ(0) = -0.87506744 0.25462094 -0.41161286
+         0.011738947 0.86135321 0.5078709
+         0.48385863 0.43958939 -0.75673113
+av(0) = 3.9588092e-05 -0.0011571406 -0.00066422493
+Time           = -69382785
+CJ(1) = -0.85215758 0.27464212 -0.44542021
+         0.011286673 0.86064824 0.50907487
+         0.52316352 0.42878469 -0.73650771
+av(1) = 1.2612887e-05 -0.0011528552 -0.00066929916
+Time           = -69382751
+CJ(2) = -0.82753094 0.29389355 -0.47835042
+         0.011001086 0.86036145 0.50956565
+         0.56131231 0.41641897 -0.71520887
+av(2) = -7.8092276e-06 -0.001146583 -0.00067221199
+Time           = -69382717
+CJ(3) = -0.80130119 0.31232593 -0.51026357
+         0.010876467 0.86037533 0.5095449
+         0.59816227 0.40274907 -0.69281678
+av(3) = -2.1501533e-05 -0.0011389681 -0.00067272227
+Time           = -69382683
+CJ(4) = -0.77358897 0.32991801 -0.54103069
+         0.010878267 0.86056939 0.50921703
+         0.63359432 0.3880392 -0.66931593
+av(4) = -2.8366393e-05 -0.0011306014 -0.00067058131
+Time           = -69382648
+CJ(5) = -0.7445192 0.34667611 -0.57053207
+         0.010943787 0.86082321 0.50878643
+         0.66751135 0.37255749 -0.64469335
+av(5) = -2.8375445e-05 -0.0011220116 -0.00066553371
+Time           = -69382614
+CJ(6) = -0.71421902 0.36263313 -0.5986555
+         0.010983412 0.86101859 0.50845487
+         0.69983609 0.35657286 -0.6189388
+av(6) = -2.1559923e-05 -0.0011136579 -0.00065731818
+Time           = -69382580
+CJ(7) = -0.68281661 0.37784723 -0.62529429
+         0.010882256 0.86104113 0.50841887
+         0.73050876 0.34035224 -0.59204502
+av(7) = -8.001423e-06 -0.0011059244 -0.00064566852
+Time           = -69382546
+CJ(8) = -0.65044065 0.39240013 -0.65034537
+         0.010502127 0.86078088 0.50886735
+         0.75948448 0.324158 -0.56400791
+av(8) = 1.2176658e-05 -0.0010991161 -0.00063031469
+Time           = -69382512
+CJ(9) = -0.61722064 0.40639527 -0.67370733
+         0.0096837405 0.86013226 0.50997914
+         0.78673052 0.30824564 -0.53482681
+av(9) = 3.8816777e-05 -0.0010934565 -0.00061098396
+
+Testing with polynomial functions over Spice ... 
+Source = 4
+Time           = -69382819
+CJ(0) = -0.87809698 0.25267525 -0.40632612
+         0.010857485 0.85950052 0.51101953
+         0.4783595 0.44431303 -0.75746823
+av(0) = 3.6136802e-05 -0.001148937 -0.00071783127
+Time           = -69382785
+CJ(1) = -0.85534528 0.27482047 -0.43915619
+         0.01383053 0.85950782 0.51093544
+         0.5178737 0.43095246 -0.73897687
+av(1) = 2.6818529e-05 -0.0011482899 -0.00072824243
+Time           = -69382751
+CJ(2) = -0.83089148 0.29534676 -0.47158206
+         0.015622983 0.85955538 0.51080376
+         0.55621513 0.41705497 -0.71881144
+av(2) = 1.5045992e-05 -0.0011468841 -0.00073507982
+Time           = -69382717
+CJ(3) = -0.80487479 0.31420086 -0.50344253
+         0.0162853 0.8597142 0.5105157
+         0.59322117 0.40270251 -0.69707915
+av(3) = 6.7201932e-06 -0.00114088 -0.0007382229
+Time           = -69382683
+CJ(4) = -0.77730696 0.33143284 -0.53473934
+         0.015873612 0.86003947 0.50998054
+         0.62892123 0.38792318 -0.6737757
+av(4) = -5.6601096e-06 -0.0011345655 -0.00074475059
+Time           = -69382648
+CJ(5) = -0.74837985 0.34697393 -0.56527576
+         0.01447613 0.86059696 0.50908086
+         0.66311239 0.37280285 -0.64907626
+av(5) = -1.3898006e-05 -0.001126288 -0.00074801566
+Time           = -69382614
+CJ(6) = -0.71811664 0.36084247 -0.59506403
+         0.012135221 0.86143483 0.50772312
+         0.69581695 0.35738319 -0.62298959
+av(6) = -2.1224594e-05 -0.0011158407 -0.00075276262
+Time           = -69382580
+CJ(7) = -0.68675883 0.37311393 -0.62381752
+         0.0090314657 0.86251995 0.50594245
+         0.72682924 0.34182646 -0.59571296
+av(7) = -3.5938808e-05 -0.0011049021 -0.00075478687
+Time           = -69382546
+CJ(8) = -0.65434784 0.38366056 -0.65163908
+         0.005132805 0.86396924 0.50351842
+         0.75617628 0.32613145 -0.56730566
+av(8) = -4.4387854e-05 -0.0010910882 -0.00075255999
+Time           = -69382512
+CJ(9) = -0.62100725 0.39254656 -0.67842257
+         0.00050302319 0.86574982 0.50047677
+         0.78380466 0.31045844 -0.53783438
+av(9) = -5.6369117e-05 -0.0010744677 -0.00075515738
+
+Test fitting polynomial function over cache to new cache
+Source = 2
+Time           = -69382819
+CJ(0) = -0.87809698 0.25267525 -0.40632612
+         0.010857485 0.85950052 0.51101953
+         0.4783595 0.44431303 -0.75746823
+av(0) = 3.6136802e-05 -0.001148937 -0.00071783127
+Time           = -69382785
+CJ(1) = -0.85534528 0.27482047 -0.43915619
+         0.01383053 0.85950782 0.51093544
+         0.5178737 0.43095246 -0.73897687
+av(1) = 2.6818529e-05 -0.0011482899 -0.00072824243
+Time           = -69382751
+CJ(2) = -0.83089148 0.29534676 -0.47158206
+         0.015622983 0.85955538 0.51080376
+         0.55621513 0.41705497 -0.71881144
+av(2) = 1.5045992e-05 -0.0011468841 -0.00073507982
+Time           = -69382717
+CJ(3) = -0.80487479 0.31420086 -0.50344253
+         0.0162853 0.8597142 0.5105157
+         0.59322117 0.40270251 -0.69707915
+av(3) = 6.7201932e-06 -0.00114088 -0.0007382229
+Time           = -69382683
+CJ(4) = -0.77730696 0.33143284 -0.53473934
+         0.015873612 0.86003947 0.50998054
+         0.62892123 0.38792318 -0.6737757
+av(4) = -5.6601096e-06 -0.0011345655 -0.00074475059
+Time           = -69382648
+CJ(5) = -0.74837985 0.34697393 -0.56527576
+         0.01447613 0.86059696 0.50908086
+         0.66311239 0.37280285 -0.64907626
+av(5) = -1.3898006e-05 -0.001126288 -0.00074801566
+Time           = -69382614
+CJ(6) = -0.71811664 0.36084247 -0.59506403
+         0.012135221 0.86143483 0.50772312
+         0.69581695 0.35738319 -0.62298959
+av(6) = -2.1224594e-05 -0.0011158407 -0.00075276262
+Time           = -69382580
+CJ(7) = -0.68675883 0.37311393 -0.62381752
+         0.0090314657 0.86251995 0.50594245
+         0.72682924 0.34182646 -0.59571296
+av(7) = -3.5938808e-05 -0.0011049021 -0.00075478687
+Time           = -69382546
+CJ(8) = -0.65434784 0.38366056 -0.65163908
+         0.005132805 0.86396924 0.50351842
+         0.75617628 0.32613145 -0.56730566
+av(8) = -4.4387854e-05 -0.0010910882 -0.00075255999
+Time           = -69382512
+CJ(9) = -0.62100725 0.39254656 -0.67842257
+         0.00050302319 0.86574982 0.50047677
+         0.78380466 0.31045844 -0.53783438
+av(9) = -5.6369117e-05 -0.0010744677 -0.00075515738
+
+Testing ToReferencePartial method
+For angles (ra,dec,twist) = 1.9429654 2.1356375 -0.92665897
+ For lookJ = 0.78673052 0.30824564 -0.53482681
+Right ascension partial on A applied to lookJ =:  -0.50997914 -0.67370733 0
+Right ascension partial on B applied to lookJ =:  -0.50997914 -0.67370733 0
+Right ascension partial on C applied to lookJ =:  -0.50997914 -0.67370733 0
+Declination partial on A applied to lookJ =:  -0.7977269 0.60301797 0
+
+Twist partial on A applied to lookJ =:  0.0011693703 -0.00020943951 0
+
+Testing with setting functions ... 
+Source = 3
+Time           = -69382819
+CJ(0) = -0.87506744 0.25462094 -0.41161286
+         0.011738947 0.86135321 0.5078709
+         0.48385863 0.43958939 -0.75673113
+av(0) = 3.9588092e-05 -0.0011571406 -0.00066422493
+Time           = -69382785
+CJ(1) = -0.85215758 0.27464212 -0.44542021
+         0.011286673 0.86064824 0.50907487
+         0.52316352 0.42878469 -0.73650771
+av(1) = 1.2612887e-05 -0.0011528552 -0.00066929916
+Time           = -69382751
+CJ(2) = -0.82753094 0.29389355 -0.47835042
+         0.011001086 0.86036145 0.50956565
+         0.56131231 0.41641897 -0.71520887
+av(2) = -7.8092276e-06 -0.001146583 -0.00067221199
+Time           = -69382717
+CJ(3) = -0.80130119 0.31232593 -0.51026357
+         0.010876467 0.86037533 0.5095449
+         0.59816227 0.40274907 -0.69281678
+av(3) = -2.1501533e-05 -0.0011389681 -0.00067272227
+Time           = -69382683
+CJ(4) = -0.77358897 0.32991801 -0.54103069
+         0.010878267 0.86056939 0.50921703
+         0.63359432 0.3880392 -0.66931593
+av(4) = -2.8366393e-05 -0.0011306014 -0.00067058131
+Time           = -69382648
+CJ(5) = -0.7445192 0.34667611 -0.57053207
+         0.010943787 0.86082321 0.50878643
+         0.66751135 0.37255749 -0.64469335
+av(5) = -2.8375445e-05 -0.0011220116 -0.00066553371
+Time           = -69382614
+CJ(6) = -0.71421902 0.36263313 -0.5986555
+         0.010983412 0.86101859 0.50845487
+         0.69983609 0.35657286 -0.6189388
+av(6) = -2.1559923e-05 -0.0011136579 -0.00065731818
+Time           = -69382580
+CJ(7) = -0.68281661 0.37784723 -0.62529429
+         0.010882256 0.86104113 0.50841887
+         0.73050876 0.34035224 -0.59204502
+av(7) = -8.001423e-06 -0.0011059244 -0.00064566852
+Time           = -69382546
+CJ(8) = -0.65044065 0.39240013 -0.65034537
+         0.010502127 0.86078088 0.50886735
+         0.75948448 0.324158 -0.56400791
+av(8) = 1.2176658e-05 -0.0010991161 -0.00063031469
+Time           = -69382512
+CJ(9) = -0.61722064 0.40639527 -0.67370733
+         0.0096837405 0.86013226 0.50997914
+         0.78673052 0.30824564 -0.53482681
+av(9) = 3.8816777e-05 -0.0010934565 -0.00061098396
+
+Testing line cache...
+Time           = -69382819
+CJ(0) = -0.87506744 0.25462094 -0.41161286
+         0.011738947 0.86135321 0.5078709
+         0.48385863 0.43958939 -0.75673113
+av(0) = 3.9588092e-05 -0.0011571406 -0.00066422493
+Time           = -69382785
+CJ(1) = -0.85215758 0.27464212 -0.44542021
+         0.011286673 0.86064824 0.50907487
+         0.52316352 0.42878469 -0.73650771
+av(1) = 1.2612887e-05 -0.0011528552 -0.00066929916
+Time           = -69382751
+CJ(2) = -0.82753094 0.29389355 -0.47835042
+         0.011001086 0.86036145 0.50956565
+         0.56131231 0.41641897 -0.71520887
+av(2) = -7.8092276e-06 -0.001146583 -0.00067221199
+Time           = -69382717
+CJ(3) = -0.80130119 0.31232593 -0.51026357
+         0.010876467 0.86037533 0.5095449
+         0.59816227 0.40274907 -0.69281678
+av(3) = -2.1501533e-05 -0.0011389681 -0.00067272227
+Time           = -69382683
+CJ(4) = -0.77358897 0.32991801 -0.54103069
+         0.010878267 0.86056939 0.50921703
+         0.63359432 0.3880392 -0.66931593
+av(4) = -2.8366393e-05 -0.0011306014 -0.00067058131
+Time           = -69382648
+CJ(5) = -0.7445192 0.34667611 -0.57053207
+         0.010943787 0.86082321 0.50878643
+         0.66751135 0.37255749 -0.64469335
+av(5) = -2.8375445e-05 -0.0011220116 -0.00066553371
+Time           = -69382614
+CJ(6) = -0.71421902 0.36263313 -0.5986555
+         0.010983412 0.86101859 0.50845487
+         0.69983609 0.35657286 -0.6189388
+av(6) = -2.1559923e-05 -0.0011136579 -0.00065731818
+Time           = -69382580
+CJ(7) = -0.68281661 0.37784723 -0.62529429
+         0.010882256 0.86104113 0.50841887
+         0.73050876 0.34035224 -0.59204502
+av(7) = -8.001423e-06 -0.0011059244 -0.00064566852
+Time           = -69382546
+CJ(8) = -0.65044065 0.39240013 -0.65034537
+         0.010502127 0.86078088 0.50886735
+         0.75948448 0.324158 -0.56400791
+av(8) = 1.2176658e-05 -0.0010991161 -0.00063031469
+Time           = -69382512
+CJ(9) = -0.61722064 0.40639527 -0.67370733
+         0.0096837405 0.86013226 0.50997914
+         0.78673052 0.30824564 -0.53482681
+av(9) = 3.8816777e-05 -0.0010934565 -0.00061098396
+
+Testing tables ... 
+Time           = -69382819
+CJ(0) = -0.87506744 0.25462094 -0.41161286
+         0.011738947 0.86135321 0.5078709
+         0.48385863 0.43958939 -0.75673113
+av(0) = 3.9588092e-05 -0.0011571406 -0.00066422493
+Time           = -69382785
+CJ(1) = -0.85215758 0.27464212 -0.44542021
+         0.011286673 0.86064824 0.50907487
+         0.52316352 0.42878469 -0.73650771
+av(1) = 1.2612887e-05 -0.0011528552 -0.00066929916
+Time           = -69382751
+CJ(2) = -0.82753094 0.29389355 -0.47835042
+         0.011001086 0.86036145 0.50956565
+         0.56131231 0.41641897 -0.71520887
+av(2) = -7.8092276e-06 -0.001146583 -0.00067221199
+Time           = -69382717
+CJ(3) = -0.80130119 0.31232593 -0.51026357
+         0.010876467 0.86037533 0.5095449
+         0.59816227 0.40274907 -0.69281678
+av(3) = -2.1501533e-05 -0.0011389681 -0.00067272227
+Time           = -69382683
+CJ(4) = -0.77358897 0.32991801 -0.54103069
+         0.010878267 0.86056939 0.50921703
+         0.63359432 0.3880392 -0.66931593
+av(4) = -2.8366393e-05 -0.0011306014 -0.00067058131
+Time           = -69382648
+CJ(5) = -0.7445192 0.34667611 -0.57053207
+         0.010943787 0.86082321 0.50878643
+         0.66751135 0.37255749 -0.64469335
+av(5) = -2.8375445e-05 -0.0011220116 -0.00066553371
+Time           = -69382614
+CJ(6) = -0.71421902 0.36263313 -0.5986555
+         0.010983412 0.86101859 0.50845487
+         0.69983609 0.35657286 -0.6189388
+av(6) = -2.1559923e-05 -0.0011136579 -0.00065731818
+Time           = -69382580
+CJ(7) = -0.68281661 0.37784723 -0.62529429
+         0.010882256 0.86104113 0.50841887
+         0.73050876 0.34035224 -0.59204502
+av(7) = -8.001423e-06 -0.0011059244 -0.00064566852
+Time           = -69382546
+CJ(8) = -0.65044065 0.39240013 -0.65034537
+         0.010502127 0.86078088 0.50886735
+         0.75948448 0.324158 -0.56400791
+av(8) = 1.2176658e-05 -0.0010991161 -0.00063031469
+Time           = -69382512
+CJ(9) = -0.61722064 0.40639527 -0.67370733
+         0.0096837405 0.86013226 0.50997914
+         0.78673052 0.30824564 -0.53482681
+av(9) = 3.8816777e-05 -0.0010934565 -0.00061098396
+
+Testing vector methods
+v = 0 0 1
+v = 0 1.6653345e-16 1
+Testing with linear function ... 
+Source = 3
+Time           = -69382819
+CJ(0) = -0.87506927 0.25477955 -0.41151081
+         0.011442263 0.86088548 0.50867009
+         0.48386242 0.44041295 -0.75624969
+Time           = -69382512
+CJ(1) = -0.61729588 0.4060182 -0.67386573
+         0.010223693 0.86060645 0.50916796
+         0.78666465 0.30741789 -0.53539982
+
+Testing Nadir rotation ... 
+Time           = -69382819
+CJ(0) = -0.87397636 0.25584047 -0.41317186
+         0.011529483 0.86087973 0.50867786
+         0.48583166 0.43980876 -0.75533824
+Time           = -69382785
+CJ(1) = -0.8510575 0.27545415 -0.44701918
+         0.011395904 0.86083688 0.50875338
+         0.52494883 0.42788419 -0.73576073
+Time           = -69382751
+CJ(2) = -0.82643964 0.29447099 -0.47987952
+         0.011259757 0.86079693 0.508824
+         0.56291272 0.415109 -0.71471238
+Time           = -69382717
+CJ(3) = -0.80023437 0.31282061 -0.5116329
+         0.011120698 0.86076027 0.50888906
+         0.59958426 0.4015408 -0.69228874
+Time           = -69382683
+CJ(4) = -0.77256675 0.3304389 -0.54217225
+         0.010977542 0.86072774 0.5089472
+         0.63483865 0.38724396 -0.66859704
+Time           = -69382648
+CJ(5) = -0.74357294 0.34727037 -0.57140403
+         0.01082962 0.86070008 0.50899715
+         0.66856713 0.37228842 -0.64375409
+Time           = -69382614
+CJ(6) = -0.71339766 0.36327069 -0.59924801
+         0.010678492 0.86067708 0.50903923
+         0.70067806 0.35674833 -0.6178842
+Time           = -69382580
+CJ(7) = -0.6821915 0.37840638 -0.62563837
+         0.010527022 0.86065772 0.50907512
+         0.73109776 0.34070061 -0.59111687
+Time           = -69382546
+CJ(8) = -0.65010809 0.39265255 -0.65052551
+         0.010377232 0.86064111 0.50910626
+         0.75977087 0.32422345 -0.5635844
+Time           = -69382512
+CJ(9) = -0.61730133 0.40599204 -0.67387649
+         0.010229777 0.86062698 0.50913313
+         0.78666029 0.30739495 -0.53541939
+
+Testing angle wrapping...
+   Using anchor angle of 30, 240 changes to -120
+   Using anchor angle of 30, -10 changes to -10
+   Using anchor angle of 30, -180 changes to 180
+   Using anchor angle of 30, 90 changes to 90
+
+
+Begin tests for PCK data...
+
+Test LoadPCFromSpice and all the coefficient accessors...
+Test CacheLabel for PCK data...
+Test LoadPCFromTable...
+Io Pole RA coefficients = 268.05,-0.009,0
+Io Pole DEC coefficients = 64.5,0.003,0
+Io PM coefficients = 200.39,203.48895,0
+Io Pole RA Nutation/Precession coefficients = 0,0,0.094,0.024,0,0,0,0,0,0,0,0,0,0,0,
+Io Pole DEC Nutation/Precession coefficients = 0,0,0.04,0.011,0,0,0,0,0,0,0,0,0,0,0,
+Io PM Nutation/Precession coefficients = 0,0,-0.085,-0.022,0,0,0,0,0,0,0,0,0,0,0,
+Io System Nutation/Precession constants = 73.32,24.62,283.9,355.8,119.9,229.8,352.25,113.35,146.64,49.24,99.360714,175.89537,300.32316,114.0123,49.511251,
+Io System Nutation/Precession coefficients = 91472.9,45137.2,4850.7,1191.3,262.1,64.3,2382.6,6070,182945.8,90274.4,4850.4046,1191.9605,262.5475,6070.2476,64.3,
+
+Testing with PCK polynomial ... 
+Io    Angles = -2.0466383,25.496441,-24.093155
+
+
+  Mars original SPICE values for target body orientation unadjusted
+  Source = 2
+    Time           = -69382819
+CJ(0) = 0.65330574 -0.46117449 -0.60042459
+         0.61166293 0.78886884 0.059619006
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382785
+CJ(1) = 0.65478275 -0.45926576 -0.60027869
+         0.61008153 0.78998159 0.061070579
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382751
+CJ(2) = 0.65625594 -0.45735435 -0.60012927
+         0.60849657 0.79108972 0.062521795
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382717
+CJ(3) = 0.65772528 -0.45544026 -0.59997635
+         0.60690805 0.79219323 0.063972645
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382683
+CJ(4) = 0.65919078 -0.45352351 -0.59981992
+         0.60531598 0.79329211 0.065423122
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382648
+CJ(5) = 0.66065243 -0.45160411 -0.59965998
+         0.60372038 0.79438635 0.066873216
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382614
+CJ(6) = 0.66211021 -0.44968207 -0.59949654
+         0.60212124 0.79547595 0.068322919
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382580
+CJ(7) = 0.66356413 -0.4477574 -0.59932959
+         0.60051859 0.7965609 0.069772222
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382546
+CJ(8) = 0.66501416 -0.44583011 -0.59915914
+         0.59891242 0.79764119 0.071221118
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382512
+CJ(9) = 0.66646031 -0.44390022 -0.59898518
+         0.59730276 0.79871681 0.072669597
+         0.44616149 -0.4062069 0.79745588
+
+
+Now PCK polynomial values for angles unadjusted ...
+  Io PCK polynomial output
+  Source = 5
+    Angles = -2.0466383,25.496441,-24.093155
+
+  Mars PCK polynomial output
+  Source = 5
+    Time           = -69382819
+CJ(0) = 0.65330574 -0.46117449 -0.60042459
+         0.61166293 0.78886884 0.059619006
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382785
+CJ(1) = 0.65478275 -0.45926576 -0.60027869
+         0.61008153 0.78998159 0.061070579
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382751
+CJ(2) = 0.65625594 -0.45735435 -0.60012927
+         0.60849657 0.79108972 0.062521795
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382717
+CJ(3) = 0.65772528 -0.45544026 -0.59997635
+         0.60690805 0.79219323 0.063972645
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382683
+CJ(4) = 0.65919078 -0.45352351 -0.59981992
+         0.60531598 0.79329211 0.065423122
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382648
+CJ(5) = 0.66065243 -0.45160411 -0.59965998
+         0.60372038 0.79438635 0.066873216
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382614
+CJ(6) = 0.66211021 -0.44968207 -0.59949654
+         0.60212124 0.79547595 0.068322919
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382580
+CJ(7) = 0.66356413 -0.4477574 -0.59932959
+         0.60051859 0.7965609 0.069772222
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382546
+CJ(8) = 0.66501416 -0.44583011 -0.59915914
+         0.59891242 0.79764119 0.071221118
+         0.44616149 -0.4062069 0.79745588
+    Time           = -69382512
+CJ(9) = 0.66646031 -0.44390022 -0.59898518
+         0.59730276 0.79871681 0.072669597
+         0.44616149 -0.4062069 0.79745588
+
+
+Testing angular velocity with Io data ...
+SpiceRotation av = -6.3193326e-07 -1.7682968e-05 3.7102704e-05
+J2000 to body-fixed Naif av = -6.3193326e-07 -1.7682968e-05 3.7102704e-05
+
+
+
+Testing partials for target body parameters...
+For angles (ra,dec,rotation) = 1.9429654 2.1356375 -0.92665897
+Beginning with J2000 vector 0.78673052 0.30824564 -0.53482681
+lookB = 0.69294371 0.69249343 -0.20070344
+
+ dLookB with respect to ra = 0.56419869 -0.43208476 0.4571027
+  Right ascension partial on A applied to dlookB =:  0.78673052 0.30824564 0
+
+ dLookB with respect to dec = -0.19972128 0.019831273 -0.62112827
+  Declination partial on A applied to dlookB =:  0.27671521 -0.25193486 -0.53482681
+
+ dLookB with respect to rotation rate = -556.10123 556.46282 0
+  Rotation rate partial on A applied to dlookB =:  565090.03 146205.39 -241683.3
+
+ dLookB with respect to rotation = 0.69249343 -0.69294371 0
+  Rotation partial on A applied to dlookB =:  0.87627666 0.22671852 -0.37477468
+
+
+... Testing failure of body rotation with binary PCK
+ Source = 0
+Frame type is binary PCK and cannot be updated
+End of PCK testing
+
+
+Testing CK based body rotation with 67P/Churyumov–Gerasimenko data ...
+Time = 4.6285471e+08
+CJ = 0.93816333 -0.34618155 -0.002810256
+     0.30996014 0.84356223 -0.43855157
+     0.15418909 0.41056193 0.89870163
+
+
+Testing exceptions...
+
+**I/O ERROR** Cannot find [INS-99999_TRANSX] in text kernels.
+
+**PROGRAMMER ERROR** Argument cacheSize must not be less or equal to zero.
+
+**PROGRAMMER ERROR** Argument startTime must be less than or equal to endTime.
+
+**PROGRAMMER ERROR** Cache size must be more than 1 if startTime and endTime differ.
+
+**PROGRAMMER ERROR** A SpiceRotation cache has already been created.
+
+**PROGRAMMER ERROR** The SpiceRotation has not yet been fit to a function.
+
+**PROGRAMMER ERROR** Only cached rotations can be returned as a line cache of quaternions and time.
+
+**PROGRAMMER ERROR** To create table source of data must be either Memcache or PolyFunction.
+
+**USER ERROR** Target body orientation information not available.  Rerun spiceinit.
+
+**PROGRAMMER ERROR** Unable to evaluate the derivative of the SPICE rotation fit polynomial for the given coefficient index [-1]. Index is negative or exceeds degree of polynomial [2].
+
+**PROGRAMMER ERROR** Unable to evaluate the derivative of the target body rotation fit polynomial for the given coefficient index [100]. Index is negative or exceeds degree of polynomial [2].
+
+**PROGRAMMER ERROR** A rotation axis is outside the valid range of 1 to 3.
+
+**USER ERROR** Time cache not available -- rerun spiceinit.
+
+**PROGRAMMER ERROR** The SpiceRotation pointing angles must be fit to polynomials in order to compute angular velocity.
diff --git a/isis/src/base/objs/SpiceRotation/unitTest.cpp b/isis/src/base/objs/SpiceRotation/unitTest.cpp
index 95f0c9749fa0f00555a56cc73518bf29acb33f7f..673da7149b2c927ac76bb8a1d50b292e7de66010 100644
--- a/isis/src/base/objs/SpiceRotation/unitTest.cpp
+++ b/isis/src/base/objs/SpiceRotation/unitTest.cpp
@@ -37,6 +37,8 @@ int main(int argc, char *argv[]) {
   QString mocbsp(dir + "moc.bsp");
   QString de(dir + "de405.bsp");
   QString pck("/usgs/cpkgs/isis3/data/base/kernels/pck/pck00009.tpc");
+  QString cgFK(dir + "ROS_V29.TF");
+  QString cgCK(dir + "CATT_DV_145_02_______00216.BC");
   //QString mocadd(dir+"mocAddendum.ti");
   QString mocspice(dir + "mocSpiceRotationUnitTest.ti");
   furnsh_c(naif.toLatin1().data());
@@ -47,6 +49,8 @@ int main(int argc, char *argv[]) {
   furnsh_c(de.toLatin1().data());
   furnsh_c(pck.toLatin1().data());
   furnsh_c(mocspice.toLatin1().data());
+  furnsh_c(cgFK.toLatin1().data());
+  furnsh_c(cgCK.toLatin1().data());
 
   double startTime = -69382819.0;
   double endTime = -69382512.0;
@@ -202,7 +206,7 @@ int main(int argc, char *argv[]) {
   lookC.push_back(1.);
   vector<double> lookJ = rot.J2000Vector(lookC);
   // Save a J2000 vector for testing target body partial methods later.
-  vector<double> testLookJ(lookJ);  
+  vector<double> testLookJ(lookJ);
   cout << " For lookJ = " << lookJ[0] << " " << lookJ[1] << " " << lookJ[2] << endl;
   vector<double> dAraLookC(3);
   dAraLookC = rot.ToReferencePartial(lookJ, SpiceRotation::WRT_RightAscension, 0);
@@ -385,11 +389,11 @@ int main(int argc, char *argv[]) {
   // Use Galileo Io image with product id = 21I0165 for testing nutation/precession terms.  Mars has none.
   //  tet = -15839262.24291
   // body frame code for Io = 10023
-  // Use Europa for exercising the code using nutation/precession terms.  Mars has none. 
+  // Use Europa for exercising the code using nutation/precession terms.  Mars has none.
   SpiceRotation targrot1(10014);   //Frame code for Mars
   // SpiceRotation targrotV1(10024);   //Frame code for Europa
   // targrotV1.LoadCache(-646009153.46723, -646009153.46723, 1); // This calls LoadPcFromSpice for Europa
-  SpiceRotation targrotV1(10023);   //Frame code for Io  
+  SpiceRotation targrotV1(10023);   //Frame code for Io
   targrotV1.LoadCache(-15839262.24291, -15839262.24291, 1); // This calls LoadPcFromSpice for Io
   targrot1.LoadCache(startTime, endTime, 2); // This calls LoadPcFromSpice for Mars
   cout << "Test CacheLabel for PCK data..." << endl;
@@ -397,8 +401,8 @@ int main(int argc, char *argv[]) {
   Table pcktabV = targrotV1.Cache("Planetary constants test table"); // This calls CacheLabel
   SpiceRotation targrot(10014);  // Mars
   // SpiceRotation targrotV(10024);  // Europa  --  The results for pm will differ slightly from TrigBasis because of the older PCK
-  SpiceRotation targrotV(10023);  // Io  -- 
-  cout << "Test LoadPCFromTable..." << endl; 
+  SpiceRotation targrotV(10023);  // Io  --
+  cout << "Test LoadPCFromTable..." << endl;
   targrot.LoadCache(pcktab);  // This calls LoadPcFromTable
   targrotV.LoadCache(pcktabV);  // This calls LoadPcFromTable
   // Now get the values
@@ -460,7 +464,7 @@ int main(int argc, char *argv[]) {
   // cout << "    Angles = " << pckanglesV[0]*dpr_c() <<","<< pckanglesV[1]*dpr_c() <<","
   //      << pckanglesV[2]*dpr_c() <<endl <<endl;
   // end Europa test
-  
+
   // For testing Io with the nutation/precession terms and a cache size of 1
   tet = -15839262.24291;  // time et for Io
   ibod = 501; // Io
@@ -471,8 +475,8 @@ int main(int argc, char *argv[]) {
        << pckanglesV[2]*dpr_c() <<endl <<endl;
   // end Io test
 
-  // For testing Mars with more than one value in the cache 
-  cout << endl << "  Mars original SPICE values for target body orientation unadjusted" 
+  // For testing Mars with more than one value in the cache
+  cout << endl << "  Mars original SPICE values for target body orientation unadjusted"
        << endl;
   cout << "  Source = " << targrot.GetSource() << endl;
   for (int i = 0; i < 10; i++) {
@@ -520,18 +524,18 @@ int main(int argc, char *argv[]) {
     cout << "         " << CJ[6] << " " << CJ[7] << " " << CJ[8] << endl;
   }
 
-    // Test angular velocities 
+    // Test angular velocities
   cout << endl << endl << "Testing angular velocity with Io data ..." << endl;
   if (targrotV.HasAngularVelocity()) {
     vector<double> av = targrotV.AngularVelocity();
     cout << "SpiceRotation av = " << av[0] << " " << av[1] << " " << av[2] << endl;
     SpiceDouble tsipm[6][6];
-    sxform_c ( "J2000", "IAU_IO", -15839262.24291, tsipm); 
-    // sxform_c ( "J2000", "IAU_EUROPA", -646009153.46723, tsipm); 
+    sxform_c ( "J2000", "IAU_IO", -15839262.24291, tsipm);
+    // sxform_c ( "J2000", "IAU_EUROPA", -646009153.46723, tsipm);
     SpiceDouble tipm[3][3];
     vector<SpiceDouble> nav(3,0.);
     xf2rav_c (tsipm, tipm, &(nav[0]) );
-    cout << "J2000 to body-fixed Naif av = " << nav[0] << " " << nav[1] << " " << nav[2] << endl; 
+    cout << "J2000 to body-fixed Naif av = " << nav[0] << " " << nav[1] << " " << nav[2] << endl;
   }
   cout << endl;
 
@@ -559,7 +563,7 @@ int main(int argc, char *argv[]) {
        << matchLookJ[1] << " " << matchLookJ[2] << endl;
 
   dLookB = targrot.ToReferencePartial(testLookJ, SpiceRotation::WRT_Twist, 1);
-  cout << endl << " dLookB with respect to rotation rate = " << dLookB[0] << " " << 
+  cout << endl << " dLookB with respect to rotation rate = " << dLookB[0] << " " <<
           dLookB[1] << " " << dLookB[2] << endl;
   //If I apply toJ2000Partial to dLookB, I get back lookJ(x,y,0) with roundoff  -- 05-12-2015 DAC
   matchLookJ = targrot.toJ2000Partial(dLookB, SpiceRotation::WRT_Twist, 1);
@@ -567,7 +571,7 @@ int main(int argc, char *argv[]) {
        << matchLookJ[1] << " " << matchLookJ[2] << endl;
 
   dLookB = targrot.ToReferencePartial(testLookJ, SpiceRotation::WRT_Twist, 0);
-  cout << endl << " dLookB with respect to rotation = " << dLookB[0] << " " << 
+  cout << endl << " dLookB with respect to rotation = " << dLookB[0] << " " <<
           dLookB[1] << " " << dLookB[2] << endl;
   //If I apply toJ2000Partial to dLookB, I get back lookJ(x,y,0) with roundoff  -- 05-12-2015 DAC
   matchLookJ = targrot.toJ2000Partial(dLookB, SpiceRotation::WRT_Twist, 0);
@@ -589,15 +593,28 @@ int main(int argc, char *argv[]) {
   if (frameType == SpiceRotation::BPC)
     cout << "Frame type is binary PCK and cannot be updated" << endl;
 
-  
+
   cout << "End of PCK testing" << endl;
 
-  
+  // Test CK based body rotation
+  cout << endl << endl << "Testing CK based body rotation with 67P/Churyumov–Gerasimenko data ..." << endl;
+
+  SpiceRotation cgRotation(-1000012000);
+  // Test time from Rosetta OSIRIS NAC image n20140901t144253568id30f22
+  double cgTestTime = 462854709.88606;
+  cgRotation.SetEphemerisTime(cgTestTime);
+  vector<double> cgCJ = cgRotation.Matrix();
+  cout << "Time = " << cgRotation.EphemerisTime() << endl;
+  cout << "CJ = " << cgCJ[0] << " " << cgCJ[1] << " " << cgCJ[2] << endl;
+  cout << "     " << cgCJ[3] << " " << cgCJ[4] << " " << cgCJ[5] << endl;
+  cout << "     " << cgCJ[6] << " " << cgCJ[7] << " " << cgCJ[8] << endl;
+
+
   //Test exceptions
   cout << endl << endl << "Testing exceptions..." << endl;
   SpiceRotation testRot(-94031); // MGS_MOC
 
-  // SpiceRotation(frameCode, targetCode) 
+  // SpiceRotation(frameCode, targetCode)
   //     "Cannot find [key] in text kernels
   try {
     cout << endl;
@@ -611,13 +628,13 @@ int main(int argc, char *argv[]) {
   //     "Argument cacheSize must not be less or equal to zero"
   try {
     cout << endl;
-    testRot.LoadCache(10, 20, -1); 
+    testRot.LoadCache(10, 20, -1);
   }
   catch (IException &e) {
     e.print();
   }
 
-  //     "Argument startTime must be less than or equal to endTime"   
+  //     "Argument startTime must be less than or equal to endTime"
   try {
     cout << endl;
     testRot.LoadCache(20, 10, 1);
@@ -639,7 +656,7 @@ int main(int argc, char *argv[]) {
   try {
     cout << endl;
     testRot.LoadCache(startTime, endTime, 2);
-    testRot.LoadCache(startTime, endTime - 1, 2); 
+    testRot.LoadCache(startTime, endTime - 1, 2);
   }
   catch (IException &e) {
     e.print();
@@ -656,7 +673,7 @@ int main(int argc, char *argv[]) {
   }
 
   // LineCache(tableName)
-  //     "Only cached rotations can be returned as a line cache of quaternions and time" 
+  //     "Only cached rotations can be returned as a line cache of quaternions and time"
   try {
     cout << endl;
     SpiceRotation sr(-94031);
@@ -665,7 +682,7 @@ int main(int argc, char *argv[]) {
   catch (IException &e) {
     e.print();
   }
-    
+
   // Cache(tableName)
   //     "To create table source of data must be either Memcache or PolyFunction"
   try {
@@ -690,10 +707,10 @@ int main(int argc, char *argv[]) {
     e.print();
   }
 
-  // DPolynomial(coeffIndex) 
-  //     "Unable to evaluate the derivative of the SPCIE rotation fit 
+  // DPolynomial(coeffIndex)
+  //     "Unable to evaluate the derivative of the SPCIE rotation fit
   //      polynomial for the given coefficient index. Index is negative
-  //      or exceeds degree of polynomial"    
+  //      or exceeds degree of polynomial"
   try {
     cout << endl;
     testRot.DPolynomial(-1);
@@ -703,7 +720,7 @@ int main(int argc, char *argv[]) {
   }
 
   // DPckPolynomial(partialVar, coeffIndex)
-  //     "Unable to evaluate the derivative of the SPCIE rotation fit 
+  //     "Unable to evaluate the derivative of the SPCIE rotation fit
   //      polynomial for the given coefficient index. Index is negative
   //      or exceeds degree of polynomial"
   try {
@@ -731,9 +748,9 @@ int main(int argc, char *argv[]) {
 
   // LoadTimeCache()
   //TODO test its 3 exceptions
-  
+
   // GetFullCacheTime()
-  //    "Time cache not availabe -- rerun spiceinit" 
+  //    "Time cache not availabe -- rerun spiceinit"
   try {
     cout << endl;
     SpiceRotation sr(-94031);
@@ -745,7 +762,7 @@ int main(int argc, char *argv[]) {
 
   // FrameTrace()
   //TODO test its 3 exceptions
-  
+
   // ComputeAv()
   //     "The SpiceRotation pointing angles must be fit to polynomials in order to
   //      compute angular velocity."
diff --git a/isis/src/base/objs/SurfacePoint/SurfacePoint.cpp b/isis/src/base/objs/SurfacePoint/SurfacePoint.cpp
index 883ca24b5a0c618e0ae982ee38453c33fb60ae03..9e0656784591ddf6d94ff300556872ba79fc5dc2 100644
--- a/isis/src/base/objs/SurfacePoint/SurfacePoint.cpp
+++ b/isis/src/base/objs/SurfacePoint/SurfacePoint.cpp
@@ -6,6 +6,7 @@
 #include "IString.h"
 #include "Latitude.h"
 #include "Longitude.h"
+#include "SpecialPixel.h"
 
 using namespace boost::numeric::ublas;
 using namespace std;
@@ -19,34 +20,14 @@ namespace Isis {
   SurfacePoint::SurfacePoint() {
     InitCovariance();
     InitPoint();
-    InitRadii();
   }
 
   /**
-   * Constructs an empty SurfacePoint object
+   * Constructs a new SurfacePoint object from an existing SurfacePoint.
    *
    */
   SurfacePoint::SurfacePoint(const SurfacePoint &other) {
-    if(other.p_majorAxis) {
-      p_majorAxis = new Distance(*other.p_majorAxis);
-    }
-    else {
-      p_majorAxis = NULL;
-    }
-
-    if(other.p_minorAxis) {
-      p_minorAxis = new Distance(*other.p_minorAxis);
-    }
-    else {
-      p_minorAxis = NULL;
-    }
-
-    if(other.p_polarAxis) {
-      p_polarAxis = new Distance(*other.p_polarAxis);
-    }
-    else {
-      p_polarAxis = NULL;
-    }
+    p_localRadius = other.p_localRadius;
 
     if(other.p_x) {
       p_x = new Displacement(*other.p_x);
@@ -96,7 +77,6 @@ namespace Isis {
       const Distance &radius) {
     InitCovariance();
     InitPoint();
-    InitRadii();
     SetSphericalPoint(lat, lon, radius);
   }
 
@@ -121,7 +101,6 @@ namespace Isis {
       const Distance &radiusSigma) {
     InitCovariance();
     InitPoint();
-    InitRadii();
     SetSpherical(lat, lon, radius, latSigma, lonSigma, radiusSigma);
   }
 
@@ -135,7 +114,6 @@ namespace Isis {
       const Distance &radius, const symmetric_matrix<double, upper> &covar) {
     InitCovariance();
     InitPoint();
-    InitRadii();
     SetSpherical(lat, lon, radius, covar);
   }
 
@@ -151,7 +129,6 @@ namespace Isis {
       const Displacement &z) {
     InitCovariance();
     InitPoint();
-    InitRadii();
     SetRectangular(x, y, z);
   }
 
@@ -175,7 +152,6 @@ namespace Isis {
       const Distance &zSigma) {
     InitCovariance();
     InitPoint();
-    InitRadii();
     SetRectangular(x, y, z, xSigma, ySigma, zSigma);
   }
 
@@ -193,7 +169,6 @@ namespace Isis {
       const Displacement &z, const symmetric_matrix<double, upper> &covar) {
     InitCovariance();
     InitPoint();
-    InitRadii();
     SetRectangular(x, y, z, covar);
   }
 
@@ -225,19 +200,10 @@ namespace Isis {
     p_x = NULL;
     p_y = NULL;
     p_z = NULL;
+    p_localRadius = Distance();
   }
 
-  /**
-   * Initialize the target surface radii
-   *
-   */
-  void SurfacePoint::InitRadii() {
-    p_majorAxis = NULL;
-    p_minorAxis = NULL;
-    p_polarAxis = NULL;
-  }
-
-
+  
   /**
    * This is a private method to set a surface point in rectangular, body-fixed
    *   coordinates.  This method isolates the procedure for setting a
@@ -252,7 +218,7 @@ namespace Isis {
    */
   void SurfacePoint::SetRectangularPoint(const Displacement &x,
       const Displacement &y, const Displacement &z) {
-
+ 
     if (!x.isValid() || !y.isValid() || !z.isValid()) {
       IString msg = "x, y, and z must be set to valid displacements.  One or "
         "more coordinates have been set to an invalid displacement.";
@@ -279,6 +245,18 @@ namespace Isis {
     else {
       p_z = new Displacement(z);
     }
+
+    // Added 07-30-2018 to avoid trying to set an invalid SurfacePoint.  This breaks the ringspt and cnetnewradii tests.  Also the pole...mean test.
+    // if (!(this->Valid())) {
+    //   IString msg = "All coodinates of the point are zero. At least one coordinate"
+    //     " must be nonzero to be a valid SurfacePoint.";
+    //   throw IException(IException::User, msg, _FILEINFO_);
+    // }
+
+    if (!p_localRadius.isValid()) {
+      ComputeLocalRadius();
+      p_localRadius = GetLocalRadius();
+    }
   }
 
 
@@ -299,6 +277,10 @@ namespace Isis {
   void SurfacePoint::SetRectangular(const Displacement &x,
       const Displacement &y, const Displacement &z, const Distance &xSigma,
       const Distance &ySigma, const Distance &zSigma) {
+    
+    // Wipe out current local radius to ensure it will be recalculated in SetRectangularPoint
+     p_localRadius = Distance();
+    
     SetRectangularPoint(x, y, z);
 
     if (xSigma.isValid() && ySigma.isValid() && zSigma.isValid())
@@ -319,23 +301,49 @@ namespace Isis {
    */
   void SurfacePoint::SetRectangular(Displacement x, Displacement y, Displacement z,
                                     const symmetric_matrix<double,upper>& covar) {
+    // Wipe out current local radius to ensure it will be recalulated in SetRectangularPoint
+    p_localRadius = Distance();
+
     SetRectangularPoint(x, y, z);
     SetRectangularMatrix(covar);
   }
 
 
+  /**
+   * Set surface point in rectangular coordinates
+   *
+   * @param x  x value of body-fixed coordinate of surface point
+   * @param y  y value of body-fixed coordinate of surface point
+   * @param z  z value of body-fixed coordinate of surface point
+   *
+   * @return void
+   */
+  void SurfacePoint::SetRectangularCoordinates(const Displacement &x,
+                                                                                     const Displacement &y,
+                                                                                     const Displacement &z) {
+    // Wipe out current local radius to ensure it will be recalculated in SetRectangularPoint
+     p_localRadius = Distance();
+     
+    SetRectangularPoint(x, y, z);
+  }
+
+
   /**
    * Set the rectangular sigmas into the rectangular variance/covariance
-   *   matrix.
+   *   matrix with diagonal element units of km^2, km^2, and km^2..
    *
    * @param xSigma x sigma of body-fixed coordinate of surface point
    * @param ySigma y sigma of body-fixed coordinate of surface point
    * @param zSigma z sigma of body-fixed coordinate of surface point
+   *
+   * @internal
+   *   @history  2017-07-25 Debbie A. Cook  Added documentation and corrected units for diagonal 
+   *                                                       elements to be km^2 instead of m^2.
+   *   @history  2017-11-22 Debbie A. Cook  Updated call to SetRectangularMatrix 
    */
   void SurfacePoint::SetRectangularSigmas(const Distance &xSigma,
                                           const Distance &ySigma,
                                           const Distance &zSigma) {
-    // Is this error checking necessary or should we just use Distance?????
     if (!xSigma.isValid() || !ySigma.isValid() || !zSigma.isValid()) {
       IString msg = "x sigma, y sigma , and z sigma must be set to valid "
         "distances.  One or more sigmas have been set to an invalid distance.";
@@ -347,19 +355,21 @@ namespace Isis {
     covar(0,0) = xSigma.meters() * xSigma.meters();
     covar(1,1) = ySigma.meters() * ySigma.meters();
     covar(2,2) = zSigma.meters() * zSigma.meters();
-    SetRectangularMatrix(covar);
+    SetRectangularMatrix(covar, Meters);
   }
 
 
   /**
-   * Set rectangular covariance matrix
+   * Set rectangular covariance matrix and store in units of km**2
    *
-   * @param covar Rectangular variance/covariance matrix (units are m**2)
+   * @param covar Rectangular variance/covariance matrix 
+   * @param units Units of matrix are units**2
    *
    * @return void
    */
-  void SurfacePoint::SetRectangularMatrix(
-       const symmetric_matrix<double, upper> &covar) {
+  void SurfacePoint::SetRectangularMatrix(const symmetric_matrix<double, upper> &covar,
+                                          SurfacePoint::CoordUnits units) {
+
     // Make sure the point is set first
     if (!Valid()) {
       IString msg = "A point must be set before a variance/covariance matrix "
@@ -367,22 +377,39 @@ namespace Isis {
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
-    if(p_rectCovar) {
+    // Make sure the units are valid
+    if (units != Kilometers && units != Meters) {
+      IString msg = "Units must be Kilometers or Meters";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    
+    // covar units are km**2
+    if (p_rectCovar) {
       *p_rectCovar = covar;
     }
     else {
       p_rectCovar = new symmetric_matrix<double, upper>(covar);
     }
 
+    if (units == Meters) {
+      // Convert input matrix to km to hold in memory
+      (*p_rectCovar)(0,0) = covar(0,0)/1.0e6;
+      (*p_rectCovar)(0,1) = covar(0,1)/1.0e6;
+      (*p_rectCovar)(0,2) = covar(0,2)/1.0e6;
+      (*p_rectCovar)(1,1) = covar(1,1)/1.0e6;
+      (*p_rectCovar)(1,2) = covar(1,2)/1.0e6;
+      (*p_rectCovar)(2,2) = covar(2,2)/1.0e6;
+    }
+
     SpiceDouble rectMat[3][3];
 
-    // Compute the local radius of the surface point
+    // Compute the local radius of the surface point in meters.  We will convert to km before saving the matrix.
     double x2  = p_x->meters() * p_x->meters();
     double y2  = p_y->meters() * p_y->meters();
     double z   = p_z->meters();
     double radius = sqrt(x2 + y2 + z*z);
 
-    // Should we use a matrix utility?
+    // *** TODO *** Replace this section with LinearAlgebra multiply calls and avoid having to create a Spice matrix
     rectMat[0][0] = covar(0,0);
     rectMat[0][1] = rectMat[1][0] = covar(0,1);
     rectMat[0][2] = rectMat[2][0] = covar(0,2);
@@ -390,7 +417,7 @@ namespace Isis {
     rectMat[1][2] = rectMat[2][1] = covar(1,2);
     rectMat[2][2] = covar(2,2);
 
-    // Compute the Jacobian
+    // Compute the Jacobian in meters.  Don't deal with unit mismatch yet to preserve precision.
     SpiceDouble J[3][3];
     double zOverR = p_z->meters() / radius;
     double r2 = radius*radius;
@@ -401,7 +428,7 @@ namespace Isis {
     J[1][0] = -p_y->meters() / (x2 + y2);
     J[1][1] = p_x->meters() / (x2 + y2);
     J[1][2] = 0.0;
-    J[2][0] = p_x->meters() / radius;
+    J[2][0] = p_x->meters() / radius;  // This row is unitless
     J[2][1] = p_y->meters() / radius;
     J[2][2] = p_z->meters() / radius;
 
@@ -411,12 +438,25 @@ namespace Isis {
     SpiceDouble mat[3][3];
     mxm_c (J, rectMat, mat);
     mxmt_c (mat, J, mat);
-    (*p_sphereCovar)(0,0) = mat[0][0];
-    (*p_sphereCovar)(0,1) = mat[0][1];
-    (*p_sphereCovar)(0,2) = mat[0][2];
-    (*p_sphereCovar)(1,1) = mat[1][1];
-    (*p_sphereCovar)(1,2) = mat[1][2];
-    (*p_sphereCovar)(2,2) = mat[2][2];
+    if (units == Kilometers) {
+      // Now take care of unit mismatch between rect matrix in km and Jacobian in m
+      (*p_sphereCovar)(0,0) = mat[0][0] * 1.0e6;
+      (*p_sphereCovar)(0,1) = mat[0][1] * 1.0e6;
+      (*p_sphereCovar)(0,2) = mat[0][2] * 1000.0;
+      (*p_sphereCovar)(1,1) = mat[1][1] * 1.0e6;
+
+      (*p_sphereCovar)(1,2) = mat[1][2] * 1000.0;
+      (*p_sphereCovar)(2,2) = mat[2][2];
+    }
+    else { // (units == Meters) 
+      // Convert matrix lengths from m to km
+      (*p_sphereCovar)(0,0) = mat[0][0];
+      (*p_sphereCovar)(0,1) = mat[0][1];
+      (*p_sphereCovar)(0,2) = mat[0][2] / 1000.0;
+      (*p_sphereCovar)(1,1) = mat[1][1];
+      (*p_sphereCovar)(1,2) = mat[1][2] / 1000.0;
+      (*p_sphereCovar)(2,2) = mat[2][2] / 1.0e6;
+    }
   }
 
 
@@ -447,6 +487,9 @@ namespace Isis {
     SpiceDouble rect[3];
     latrec_c ( dradius, dlon, dlat, rect);
 
+    // Set local radius now since we have it and avoid calculating it later
+    p_localRadius = radius;
+
     SetRectangularPoint(Displacement(rect[0], Displacement::Kilometers),
                         Displacement(rect[1], Displacement::Kilometers),
                         Displacement(rect[2], Displacement::Kilometers));
@@ -469,6 +512,7 @@ namespace Isis {
   void SurfacePoint::SetSpherical(const Latitude &lat, const Longitude &lon,
       const Distance &radius, const Angle &latSigma, const Angle &lonSigma,
       const Distance &radiusSigma) {
+
     SetSphericalPoint(lat, lon, radius);
 
     if (latSigma.isValid() && lonSigma.isValid() && radiusSigma.isValid())
@@ -502,17 +546,23 @@ namespace Isis {
    */
   void SurfacePoint::SetSphericalCoordinates(const Latitude &lat,
                                                 const Longitude &lon, const Distance &radius) {
-
-      SetSphericalPoint(lat, lon, radius);
+    SetSphericalPoint(lat, lon, radius);
   }
 
 
   /**
-   * Set the spherical sigmas into the spherical variance/covariance matrix.
+   * Set the spherical sigmas into the spherical variance/covariance matrix in diagonal units of 
+   *  radians^2, radians^2, km^2.
    *
    * @param latSigma Latitude sigma of body-fixed coordinate of surface point
    * @param lonSigma Longitude sigma of body-fixed coordinate of surface point
    * @param radiusSigma Radius sigma of body-fixed coordinate of surface point
+   *
+   * @internal
+   *   @history  2017-07-25 Debbie A. Cook  Added documentation and corrected units for covar(2,2) 
+   *                                                                 to be km^2 instead of m^2.
+   *   @history  2017-11-22 Debbie A. Cook  Set units for covar(2,2) back to m^2 which is not the default
+   *                                                                 for the set method. 
    */
   void SurfacePoint::SetSphericalSigmas(const Angle &latSigma,
                                         const Angle &lonSigma,
@@ -529,6 +579,7 @@ namespace Isis {
       sphericalCoordinate = (double) radiusSigma.meters();
       covar(2,2) = sphericalCoordinate*sphericalCoordinate;
 
+      // Use default set units for radius of meters*meters
       SetSphericalMatrix(covar);
     }
     else {
@@ -542,49 +593,44 @@ namespace Isis {
 
 
   /**
-   * Set the spherical sigmas (in meters) into the spherical variance/covariance
+   * Set the spherical sigmas (in Distance units) into the spherical variance/covariance
    *   matrix.
    *
    * @param latSigma Latitude sigma of body-fixed coordinate of surface point
-   *                  in meters
+   *                  as a Distance
    * @param lonSigma Longitude sigma of body-fixed coordinate of surface point
-   *                  in meters
+   *                  as a Distance
    * @param radiusSigma Radius sigma of body-fixed coordinate of surface point
    *                  in meters
+   * @internal
+   *   @history  2018-06-28 Debbie A. Cook  Revised to use the local radius of
+   *                 the SurfacePoint to convert distance to angle instead of the
+   *                 major equatorial axis.  Also corrected longitude conversion.
+   *                 See note in SurfacePoint.h.  References #5457.
    */
   void SurfacePoint::SetSphericalSigmasDistance(const Distance &latSigma,
     const Distance &lonSigma, const Distance &radiusSigma) {
 
-    if (!p_majorAxis || !p_minorAxis || !p_polarAxis || !p_majorAxis->isValid() ||
-        !p_minorAxis->isValid() || !p_polarAxis->isValid()) {
-      IString msg = "In order to use sigmas in meter units, the equitorial "
-        "radius must be set with a call to SetRadii or an appropriate "
-        "constructor";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
     if (!Valid()) {
       IString msg = "Cannot set spherical sigmas on an invalid surface point";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
-    double scaledLatSig = latSigma / *p_majorAxis;
-    double scaledLonSig = lonSigma * cos((double)GetLatitude().radians())
-                                   / *p_majorAxis;
-    SetSphericalSigmas( Angle(scaledLatSig, Angle::Radians),
-                        Angle(scaledLonSig, Angle::Radians), radiusSigma);
+    SetSphericalSigmas(Angle(MetersToLatitude(latSigma.meters()),Angle::Radians),
+           Angle(MetersToLongitude(lonSigma.meters()), Angle::Radians), radiusSigma);
   }
 
 
   /**
    * Set spherical covariance matrix
    *
-   * @param covar Spherical variance/covariance matrix (radians**2)
+   * @param covar Spherical variance/covariance matrix (radians**2 for lat and lon)
    *
    * @return void
    */
   void SurfacePoint::SetSphericalMatrix(
-     const symmetric_matrix<double, upper> & covar) {
+                                        const symmetric_matrix<double, upper> & covar,
+                                        SurfacePoint::CoordUnits units) {
 
     // Make sure the point is set first
     if (!Valid()) {
@@ -593,13 +639,35 @@ namespace Isis {
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
-    if(p_sphereCovar) {
-      *p_sphereCovar = covar;
+    // Make sure the units are valid
+    if (units != Kilometers && units != Meters) {
+      IString msg = "Units must be Kilometers or Meters";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    // Get the radius of the point in the same units as the input matrix when saving the input matrix
+    double radius = (double) GetLocalRadius().kilometers();
+    
+    // Save the spherical matrix in km and km**2
+    if (p_sphereCovar) {
+        *p_sphereCovar = covar;
     }
     else {
       p_sphereCovar = new symmetric_matrix<double, upper>(covar);
     }
+        
+    if (units == Meters) {
+      // Convert input matrix to km to store
+      (*p_sphereCovar)(0,0) = covar(0,0);
+      (*p_sphereCovar)(0,1) = covar(0,1);
+      (*p_sphereCovar)(0,2) = covar(0,2) / 1000.;
+      (*p_sphereCovar)(1,1) = covar(1,1);
+      (*p_sphereCovar)(1,2) = covar(1,2) / 1000.;
+      (*p_sphereCovar)(2,2) = covar(2,2) / 1.0e6;
+      radius = (double) GetLocalRadius().meters();
+    }
 
+    // ***TODO*** Consider using LinearAlgebra matrix multiply and avoid creating SpiceDouble matrix.
     SpiceDouble sphereMat[3][3];
 
     sphereMat[0][0] = covar(0,0);
@@ -616,9 +684,8 @@ namespace Isis {
     // Get the lat/lon/radius of the point
     double lat = (double) GetLatitude().radians();
     double lon = (double) GetLongitude().radians();
-    double radius = (double) GetLocalRadius().meters();
 
-    // Compute the Jacobian
+    // Compute the Jacobian in same units as input matrix.
     SpiceDouble J[3][3];
     double cosPhi = cos(lat);
     double sinPhi = sin(lat);
@@ -642,20 +709,149 @@ namespace Isis {
     SpiceDouble mat[3][3];
     mxm_c (J, sphereMat, mat);
     mxmt_c (mat, J, mat);
-    //  TODO  Test to see if only the upper triangular portion of the matrix needs to be set
-    (*p_rectCovar)(0,0) = mat[0][0];
-    (*p_rectCovar)(0,1) = mat[0][1];
-    (*p_rectCovar)(0,2) = mat[0][2];
-    (*p_rectCovar)(1,1) = mat[1][1];
-    (*p_rectCovar)(1,2) = mat[1][2];
-    (*p_rectCovar)(2,2) = mat[2][2];
 
+    if (units == Kilometers) {
+      (*p_rectCovar)(0,0) = mat[0][0];
+      (*p_rectCovar)(0,1) = mat[0][1];
+      (*p_rectCovar)(0,2) = mat[0][2];
+      (*p_rectCovar)(1,1) = mat[1][1];
+      (*p_rectCovar)(1,2) = mat[1][2];
+      (*p_rectCovar)(2,2) = mat[2][2];
+    }
+    else { // (units == Meters) 
+      //  Convert to km
+      (*p_rectCovar)(0,0) = mat[0][0]/1.0e6;
+      (*p_rectCovar)(0,1) = mat[0][1]/1.0e6;
+      (*p_rectCovar)(0,2) = mat[0][2]/1.0e6;
+      (*p_rectCovar)(1,1) = mat[1][1]/1.0e6;
+      (*p_rectCovar)(1,2) = mat[1][2]/1.0e6;
+      (*p_rectCovar)(2,2) = mat[2][2]/1.0e6;
+    }
 //     std::cout<<"Rcovar = "<<p_rectCovar(0,0)<<" "<<p_rectCovar(0,1)<<" "<<p_rectCovar(0,2)<<std::endl
 //              <<"         "<<p_rectCovar(1,0)<<" "<<p_rectCovar(1,1)<<" "<<p_rectCovar(1,2)<<std::endl
 //              <<"         "<<p_rectCovar(2,0)<<" "<<p_rectCovar(2,1)<<" "<<p_rectCovar(2,2)<<std::endl;
   }
+  
 
+  /**
+   * Set  covariance matrix in km
+   *
+   * @param covar variance/covariance matrix
+   *
+   * @return void
+   */
+  void SurfacePoint::SetMatrix(CoordinateType type, const symmetric_matrix<double, upper>& covar) {
+
+    switch (type) {   
+      case Latitudinal:
+        SetSphericalMatrix(covar, SurfacePoint::Kilometers);
+        break;
+      case Rectangular:
+        SetRectangularMatrix(covar, SurfacePoint::Kilometers);
+        break;
+      default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+  }
+
+
+   /**
+   * Compute partial derivative of the conversion of the body-fixed surface point coordinate to the 
+   * specified coordinate type.
+   *
+   * @param covar variance/covariance matrix
+   *
+   * @return void
+   */
+  std::vector<double> SurfacePoint::Partial(CoordinateType type, CoordIndex index) {
+    std::vector<double> derivative(3);
+    switch (type) {
+      case Latitudinal:
+        derivative = LatitudinalDerivative(index);
+        break;
+      case Rectangular:
+        derivative = RectangularDerivative(index);
+        break;
+      default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return derivative;
+  } 
+
+
+   /**
+   * Compute partial derivative of the conversion of the latitudinal coordinates to body-fixed 
+   *   rectangular coordinates with respect to the indicated coordinate.
+   *
+   * @param index Coordinate index
+   *
+   * @return @b std::vector<double>  The derivative of the latitudinal to body-fixed vector
+   */
+  std::vector<double> SurfacePoint::LatitudinalDerivative(CoordIndex index) {
+    std::vector<double> derivative(3);
+    double rlat = GetLatitude().radians();
+    double rlon = GetLongitude().radians();
+    double sinLon = sin(rlon);
+    double cosLon = cos(rlon);
+    double sinLat = sin(rlat);
+    double cosLat = cos(rlat);
+    double radkm = GetLocalRadius().kilometers();
+
+    switch (index) {
+      case One:
+        derivative[0] = -radkm * sinLat * cosLon;
+        derivative[1] = -radkm * sinLon * sinLat;
+        derivative[2] =  radkm * cosLat;
+        break;
+      case Two:
+        derivative[0] = -radkm * cosLat * sinLon;
+        derivative[1] =  radkm * cosLat * cosLon;
+        derivative[2] =  0.0;
+        break;
+      case Three:
+        derivative[0] = cosLon * cosLat;
+        derivative[1] = sinLon * cosLat;
+        derivative[2] = sinLat;
+        break;
+      default:
+        IString msg = "Invalid coordinate index  (must be less than 3).";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return derivative;
+  } 
+
+
+   /**
+   * Compute partial derivative of the body-fixed rectangular coordinates with respect to the 
+   *   indicated coordinate.
+   *
+   * @param index Coordinate index
+   *
+   * @return @b std::vector<double>  The derivative of the body-fixed vector
+   */
+  std::vector<double> SurfacePoint::RectangularDerivative(CoordIndex index) {
+    std::vector<double> derivative(3,0.0);
+
+    switch (index) {
+      case One:
+        derivative[0] = 1.;
+        break;
+      case Two:
+        derivative[1] =  1.;
+        break;
+      case Three:
+        derivative[2] = 1.;
+        break;
+      default:
+        IString msg = "Invalid coordinate index  (must be less than 3).";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return derivative;
+  }
 
+  
   /**
    * A naif array is a c-style array of size 3. The element types are double...
    * keep in mind a SpiceDouble is a double. The values' units are
@@ -697,48 +893,9 @@ namespace Isis {
       p_y = new Displacement(naifValues[1], Displacement::Kilometers);
       p_z = new Displacement(naifValues[2], Displacement::Kilometers);
     }
-  }
-
-
-  /**
-   * Reset the radii of the surface body of the surface point
-   *
-   * @param majorAxis  The semi-major axis of the surface model
-   * @param minorAxis  The semi-minor axis of the surface model
-   * @param polarAxis  The polar axis of the surface model
-   */
-  void SurfacePoint::SetRadii(const Distance &majorRadius,
-                              const Distance &minorRadius,
-                              const Distance &polarRadius) {
-
-    if (!majorRadius.isValid()  ||
-        !minorRadius.isValid()  ||
-        !polarRadius.isValid()) {
-      IString msg = "Radii must be set to valid distances.  One or more radii "
-        "have been set to an invalid distance.";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    if(p_majorAxis) {
-      *p_majorAxis = majorRadius;
-    }
-    else {
-      p_majorAxis = new Distance(majorRadius);
-    }
-
-    if(p_minorAxis) {
-      *p_minorAxis = minorRadius;
-    }
-    else {
-      p_minorAxis = new Distance(minorRadius);
-    }
-
-    if(p_polarAxis) {
-      *p_polarAxis = polarRadius;
-    }
-    else {
-      p_polarAxis = new Distance(polarRadius);
-    }
+    
+    ComputeLocalRadius();
+    p_localRadius = GetLocalRadius();
   }
 
 
@@ -762,8 +919,13 @@ namespace Isis {
         throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
+    // Set latitudinal coordinates
     SpiceDouble lat = (double) GetLatitude().radians();
     SpiceDouble lon = (double) GetLongitude().radians();
+    
+    p_localRadius = radius;
+    
+    // Set rectangular coordinates
     SpiceDouble rect[3];
     latrec_c ((SpiceDouble) radius.kilometers(), lon, lat, rect);
     p_x->setKilometers(rect[0]);
@@ -783,6 +945,483 @@ namespace Isis {
   }
 
 
+  /**
+   * This method returns a coordinate of a SurfacePoint
+   *
+   * @param type The coordinate type to return (see CoordinateType in .h file)
+   * @param index The coordinate index to return (1 <= index <= 3)
+   * @param units The units in which to return the coordinate value (see CoordinateUnits in .h file)
+   *
+   */
+  double SurfacePoint::GetCoord(CoordinateType type, CoordIndex index, CoordUnits units) {
+    // TODO *** Is there a better way to satisfy the compiler that a value will be initialized? 
+    //                 Don't the enums take care of preventing any other possibilities? no
+    double value = 0.;
+    
+    switch (type) {
+      
+      case Latitudinal:
+      
+        switch (index) {
+            
+          case One:  // Latitude
+            value = LatToDouble(GetLatitude(), units);
+            break;
+            
+          case Two:  // Longitude
+            value = LonToDouble(GetLongitude(), units);
+            break;
+            
+          case Three:  // LocalRadius
+            value = DistanceToDouble(GetLocalRadius(), units);
+            break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+      case Rectangular:
+      
+        switch (index) {
+            
+          case One:  // X
+            value = DisplacementToDouble(GetX(), units);
+            break;
+            
+          case Two: // Y
+            value = DisplacementToDouble(GetY(), units);
+            break;
+            
+          case Three:  // Z
+            value = DisplacementToDouble(GetZ(), units);
+            break;
+            
+          default:
+            IString msg = "Invalid coordinate index  enum (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+       default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return value;
+  }
+
+
+  /**
+   * This method returns a sigma of a SurfacePoint coordinate
+   *
+   * @param type The coordinate type to return (see CoordinateType in .h file)
+   * @param index The coordinate index to return (1 <= index <= 3)
+   * @param units The units in which to return the coordinate value (see CoordinateUnits in .h file)
+   *
+   */
+  double SurfacePoint::GetSigma(CoordinateType type, CoordIndex index, CoordUnits units) {
+    double value = 0;  // See first TODO in GetCoord
+    
+    switch (type) {
+      
+      case Latitudinal:
+      
+        switch (index) {
+            
+          case One:
+            value = DistanceToDouble(GetLatSigmaDistance(), units);
+            break;
+            
+          case Two:
+             value = DistanceToDouble(GetLonSigmaDistance(), units);
+             break;
+            
+          case Three:
+             value = DistanceToDouble(GetLocalRadiusSigma(), units);
+             break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+      case Rectangular:
+      
+        switch (index) {
+            
+          case One:
+            value = DistanceToDouble(GetXSigma(), units);
+            break;
+            
+          case Two:
+             value = DistanceToDouble(GetYSigma(), units);
+             break;
+            
+          case Three:
+             value = DistanceToDouble(GetZSigma(), units);
+             break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+       default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+            
+    return value;
+  }
+
+
+  /**
+   * This method returns a sigma of a SurfacePoint coordinate as a Distance
+   *
+   * @param type The coordinate type to return (see CoordinateType in .h file)
+   * @param index The coordinate index to return (1 <= index <= 3)
+   *
+   */
+  Distance SurfacePoint::GetSigmaDistance(CoordinateType type,
+                                                         CoordIndex index) {
+    Distance dist = Distance();  // See first TODO in GetCoord
+    
+    switch (type) {
+      
+      case Latitudinal:
+      
+        switch (index) {
+            
+          case One:
+            dist = GetLatSigmaDistance();
+            break;
+            
+          case Two:
+             dist = GetLonSigmaDistance();
+             break;
+            
+          case Three:
+             dist = GetLocalRadiusSigma();
+             break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+      case Rectangular:
+      
+        switch (index) {
+            
+          case One:
+            dist = GetXSigma();
+            break;
+            
+          case Two:
+             dist = GetYSigma();
+             break;
+            
+          case Three:
+             dist = GetZSigma();
+             break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+       default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+            
+    return dist;
+  }
+
+
+  /**
+   * This method returns a double version of a Displacement in the specified units
+   *
+   * @param disp The displacement to convert to a double
+   * @param units The units in which to return the displacement (see CoordinateUnits in .h file)
+   *
+   */
+  double SurfacePoint::DisplacementToDouble(Displacement disp, CoordUnits units) {
+    double value;
+    
+    switch (units) {
+      
+        case Meters:
+          value = disp.meters();
+          break;
+          
+        case Kilometers:
+          value = disp.kilometers();
+          break;
+          
+        default:
+           IString msg = "Unrecognized unit for a Displacement (must be meters or kilometers).";
+           throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
+    return value;
+  }
+      
+
+  /**
+   * This method returns a double version of a Distance in the specified units
+   *
+   * @param dist The distance to convert to a double
+   * @param units The units in which to return the distance (see CoordinateUnits in .h file)
+   *
+   */
+  double SurfacePoint::DistanceToDouble(Distance dist, CoordUnits units) {
+    double value;
+    
+    switch (units) {
+      
+        case Meters:
+          value = dist.meters();
+          break;
+          
+        case Kilometers:
+          value = dist.kilometers();
+          break;
+          
+        default:
+           IString msg = "Unrecognized unit for a Distance (not meters or kilometers).";
+           throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
+    return value;
+  }
+
+
+  /**
+   * This method returns a double version of a Latitude in the specified units
+   *
+   * @param lat The latitude to convert to a double
+   * @param units The units in which to return the latitude (see CoordinateUnits in .h file)
+   *
+   */
+  double SurfacePoint::LatToDouble(Latitude lat, CoordUnits units) {
+    double value;
+    
+    switch (units) {
+      
+      case Radians:
+        value = GetLatitude().radians();
+        break;
+
+      case Degrees:
+        value = GetLatitude().degrees();
+        break;
+
+       default:
+         IString msg = "Invalid unit for latitude (must be Radians or Degrees).";
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return value;
+  }
+
+
+  /**
+   * This method returns an angular measure of a distance in the direction 
+   * of and relative to the latitude of the SurfacePoint.  It should only be used to convert 
+   * lengths relative to the SurfacePoint and in the direction of latitude.
+   * Typical usage would be to convert latitude sigmas and point 
+   * corrections for the SurfacePoint.
+   *
+   * @param latLength The latitude in meters to convert to radian units
+   * @return @b LatDispAngle The converted linear measure in radian units
+   *
+   */
+  double SurfacePoint::MetersToLatitude(double latLength) {
+    if (Valid() && !IsSpecial(latLength)) {
+      // Convert angle measure in meters to radians relative to latitude of SurfacePoint.
+      return latLength / GetLocalRadius().meters();
+    }
+    else {
+      // Return Null to be consistent with the bundle classes
+      return Isis::Null;
+    }
+  }
+
+
+  /**
+   * This method returns an angular measure in radians of a distance in the direction 
+   * of and relative to the longitude of the SurfacePoint.  It should only be used to  
+   * convert lengths relative to the SurfacePoint and in the direction of longitude.
+   * Typical usage is to convert longitude sigmas and point corrections for the 
+   * SurfacePoint.
+   *
+   * @param lonLength The delta longitude distance in meters  to convert to radians
+   * @return @b LonDistAngle The converted delta length in radians
+   *
+   */
+  double SurfacePoint::MetersToLongitude(double deltaLonMeters) {
+    
+    if (Valid() && !IsSpecial(deltaLonMeters)) {
+      double convFactor = cos((double)GetLatitude().radians());
+      double deltaLonRadians;
+
+      // Convert angle displacement to radians relative to longitude of SurfacePoint.      
+      if (convFactor > DBL_EPSILON) {             
+        deltaLonRadians = deltaLonMeters / (convFactor*GetLocalRadius().meters());
+      }
+      else {
+        //  Brent Archinal suggested setting sigma to pi in the case of a point near the pole
+        deltaLonRadians = PI;
+      }
+      return deltaLonRadians;
+    }
+    else {
+      // Return Null to be consistent with the bundle classes
+      return Isis::Null;
+    }
+  }
+
+
+  /**
+   * This method returns a Displacement of an Angle relative to the current 
+   * SurfacePoint latitude.  It should only be used to convert relative latitudes 
+   * near the SurfacePoint latitude.  Typical usage would be to convert
+   * latitude sigmas and point corrections for the SurfacePoint.
+   *
+   * @param latRadians The latitude in Angle units to convert to Displacement units
+   * @return @b LatDisp The converted latitude in displacement units at the 
+   *                                  SurfacePoint latitude
+   *
+   */
+  double SurfacePoint::LatitudeToMeters(double relativeLat) const {
+    // Returns are consistent with the bundle classes
+    if (relativeLat == 0.) {
+      return 0.;
+    }
+    else if (Valid() && !IsSpecial(relativeLat) && GetLocalRadius().isValid() ) {
+      return relativeLat * GetLocalRadius().meters();
+    }
+    else {
+      return Isis::Null;
+    }
+  }
+
+
+  /**
+   * This method returns a length in meters version of a delta longitude angle 
+   * in radians  relative to the current SurfacePoint longitude.  It should only be 
+   * used to convert delta longitudes relative to the SurfacePoint longitude.  
+   * Typical usage would be to convert longitude sigmas and point corrections 
+   * for the SurfacePoint.
+   *
+   * @param lonRadians The delta longitude in radians to convert to meters
+   * @return @b relativeLonDist The delta longitude in meters from the 
+   *                                  SurfacePoint longitude
+   *
+   */
+  double SurfacePoint::LongitudeToMeters(double deltaLonRadians) const{
+    // Returns are consistent with the bundle classes
+    double deltaLonMeters = Isis::Null;
+
+    if (deltaLonRadians == 0.) {
+      deltaLonMeters = 0.;
+    }
+    else if (Valid() && !IsSpecial(deltaLonRadians) && GetLocalRadius().isValid() ) {
+      // Convert from radians to meters and return
+      double scalingRadius = cos(GetLatitude().radians()) * GetLocalRadius().meters();
+      deltaLonMeters = deltaLonRadians * scalingRadius;
+    }
+    
+    return deltaLonMeters;
+  }
+
+
+    /**
+   * This method converts the given string value to a SurfacePoint::CoordinateType
+   * enumeration.  Currently (March 31, 2017) accepted inputs are listed below.  
+   * This method is case insensitive.
+   *
+   * @param type The coordinate type name to be converted
+   * @return @b CoordinateType The enumeration corresponding to the input name
+   *
+   */
+  SurfacePoint::CoordinateType
+                 SurfacePoint::stringToCoordinateType(QString type)  {
+    if (type.compare("LATITUDINAL", Qt::CaseInsensitive) == 0) {
+      return SurfacePoint::Latitudinal;
+    }
+    else if (type.compare("RECTANGULAR", Qt::CaseInsensitive) == 0) {
+      return SurfacePoint::Rectangular;
+    }
+    else {
+      throw IException(IException::Programmer,
+                          "Unknown coordinate type for a SurfacePoint [" + type + "].",
+                          _FILEINFO_);
+    }
+  }
+
+
+  /**
+   * Converts the given SurfacePoint::CoordinateType enumeration to a string. 
+   * This method is used to print the type of control point coordinates used in 
+   * the bundle adjustment. 
+   * 
+   * @param type The Coordinate Type enumeration to be converted.
+   * 
+   * @return @b QString The name associated with the given CoordinateType.
+   * 
+   * @throw Isis::Exception::Programmer "Unknown SurfacePoint CoordinateType enum."
+   */
+  QString SurfacePoint::coordinateTypeToString(
+                                               SurfacePoint::CoordinateType type) {
+    switch (type) {
+      
+      case Latitudinal:
+        return "Latitudinal";
+        break;
+        
+      case Rectangular:
+        return "Rectangular";
+        break;
+
+       default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+  }
+
+  
+  /**
+   * This method returns a double version of a Longitude in the specified units
+   *
+   * @param lon The longitude to convert to a double
+   * @param units The units in which to return the longitude (see CoordinateUnits in .h file)
+   *
+   */
+  double SurfacePoint::LonToDouble(Longitude lon, CoordUnits units) {
+    double value;
+    
+    switch (units) {
+      
+      case Radians:
+        value = GetLongitude().radians();
+        break;
+
+      case Degrees:
+        value = GetLongitude().degrees();
+        break;
+
+       default:
+         IString msg = "Invalid unit for longitude (must be Radians of Degrees).";
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return value;
+  }
+  
+    
   Displacement SurfacePoint::GetX() const {
     if(!p_x) return Displacement();
 
@@ -807,32 +1446,187 @@ namespace Isis {
   Distance SurfacePoint::GetXSigma() const {
     if(!p_rectCovar) return Distance();
 
-    return Distance(sqrt((*p_rectCovar)(0, 0)), Distance::Meters);
+    return Distance(sqrt((*p_rectCovar)(0, 0)), Distance::Kilometers);
   }
 
 
   Distance SurfacePoint::GetYSigma() const {
     if(!p_rectCovar) return Distance();
 
-    return Distance(sqrt((*p_rectCovar)(1, 1)), Distance::Meters);
+    return Distance(sqrt((*p_rectCovar)(1, 1)), Distance::Kilometers);
   }
 
 
   Distance SurfacePoint::GetZSigma() const {
     if(!p_rectCovar) return Distance();
 
-    return Distance(sqrt((*p_rectCovar)(2, 2)), Distance::Meters);
+    return Distance(sqrt((*p_rectCovar)(2, 2)), Distance::Kilometers);
+  }
+
+
+  /**
+   * This method returns the weight of a SurfacePoint coordinate
+   * Note:  At this time a units argument is not included.  If BundleAdjust
+   *            is modified to allow different distance or displacement units
+   *            other than kilometers, the units argument can be added similar
+   *            to the GetCoord and GetSigma methods.  Angle weights are in
+   *            1/rad^2 and distance and displacements are in 1/km^2
+   *
+   * @param type The coordinate type to return (see CoordinateType in .h file)
+   * @param index The coordinate index to return (1 <= index <= 3)
+   *
+   *
+   */
+  double SurfacePoint::GetWeight(CoordinateType type, CoordIndex index) {
+    double value = 0;  // See first TODO in GetCoord
+    
+    switch (type) {
+      
+      case Latitudinal:
+      
+        switch (index) {
+            
+          case One:
+            value = GetLatWeight();  // 1/radians**2
+            break;
+            
+          case Two:
+            value = GetLonWeight();  // 1/radians**2
+            break;
+            
+          case Three:
+            value = GetLocalRadiusWeight();  // 1/km**2
+            break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+      case Rectangular:
+      
+        switch (index) {
+            
+          case One:
+            value = GetXWeight();   // 1/km**2
+            break;
+            
+          case Two:
+            value = GetYWeight();   // 1/km**2
+            break;
+            
+          case Three:
+            value = GetZWeight();  // 1/km**2
+            break;
+            
+          default:
+            IString msg = "Invalid coordinate index  (must be less than 3).";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+          }
+        break;
+
+       default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(type) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return value;
+  }
+
+  
+  /**
+  * Return X weight for bundle adjustment
+  * Units are 1/(kilometers)^2
+  *
+  */
+  double SurfacePoint::GetXWeight() const {
+
+    double dXSigma = GetXSigma().kilometers();
+
+    if (dXSigma <= 0.0 ) {
+        IString msg = "SurfacePoint::GetXWeight(): Sigma <= 0.0";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    return 1.0/(dXSigma*dXSigma);
+  }
+
+
+  /**
+  * Return Y weight for bundle adjustment
+  * Units are 1/(kilometers)^2
+  *
+  */
+  double SurfacePoint::GetYWeight() const {
+
+    double dYSigma = GetYSigma().kilometers();
+
+    if (dYSigma <= 0.0 ) {
+        IString msg = "SurfacePoint::GetYWeight(): Sigma <= 0.0";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    return 1.0/(dYSigma*dYSigma);
+  }
+
+
+  /**
+  * Return Z weight for bundle adjustment
+  * Units are 1/(kilometers)^2
+  *
+  */
+  double SurfacePoint::GetZWeight() const {
+
+    double dZSigma = GetZSigma().kilometers();
+
+    if (dZSigma <= 0.0 ) {
+        IString msg = "SurfacePoint::GetZWeight(): Sigma <= 0.0";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    return 1.0/(dZSigma*dZSigma);
   }
 
 
-  symmetric_matrix<double, upper> SurfacePoint::GetRectangularMatrix()
-      const {
+  symmetric_matrix<double, upper> SurfacePoint::GetRectangularMatrix
+                               (SurfacePoint::CoordUnits units) const {
     if(!p_rectCovar) {
       symmetric_matrix<double, upper> tmp(3);
       tmp.clear();
       return tmp;
     }
 
+    // Make sure the units are valid
+    if (units != Kilometers && units != Meters) {
+      IString msg = "Units must be Kilometers or Meters";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    
+    symmetric_matrix<double, upper> covar(3);
+    covar.clear();
+    
+    switch (units) {
+      
+      case Meters:
+        // Convert member matrix to Meters to return
+        covar(0,0) = (*p_rectCovar)(0,0)*1.0e6;
+        covar(0,1) = (*p_rectCovar)(0,1)*1.0e6;
+        covar(0,2) = (*p_rectCovar)(0,2)*1.0e6;
+        covar(1,1) = (*p_rectCovar)(1,1)*1.0e6;
+        covar(1,2) = (*p_rectCovar)(1,2)*1.0e6;
+        covar(2,2) = (*p_rectCovar)(2,2)*1.0e6;
+        return covar;
+        break;
+        
+      case Kilometers:
+        return *p_rectCovar;
+        break;
+        
+    default:
+        IString msg = "Unrecognized unit for a Displacement (must be meters or kilometers).";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    
     return *p_rectCovar;
   }
 
@@ -898,74 +1692,67 @@ namespace Isis {
 
 
   /**
-   * Return the radius of the surface point
+   * Compute the local radius of the surface point
    *
    */
-    Distance SurfacePoint::GetLocalRadius() const {
-      if (!Valid())
-        return Distance();
-
-      double x = p_x->meters();
-      double y = p_y->meters();
-      double z = p_z->meters();
+    void SurfacePoint::ComputeLocalRadius() {
+    static const Displacement zero(0, Displacement::Meters);
+      if (Valid()) {
+        double x = p_x->meters();
+        double y = p_y->meters();
+        double z = p_z->meters();
 
-      return Distance(sqrt(x*x + y*y + z*z), Distance::Meters);
+        p_localRadius = Distance(sqrt(x*x + y*y + z*z), Distance::Meters);
+      }
+      else if (*p_x == zero && *p_y == zero && *p_z == zero) { // for backwards compatability
+        p_localRadius = Distance(0., Distance::Meters);
+      }
+      else { // Invalid point
+        IString msg = "SurfacePoint::Can't compute local radius on invalid point";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
     }
 
 
   /**
-   * Return the latitude sigma in meters
+   * Return the radius of the surface point
    *
    */
-    Distance SurfacePoint::GetLatSigmaDistance() const {
-      Distance latSigmaDistance;
-
-      if(Valid()) {
-        Angle latSigma = GetLatSigma();
-
-        if (latSigma.isValid()) {
-          if (!p_majorAxis || !p_majorAxis->isValid()) {
-            IString msg = "In order to calculate sigmas in meter units, the "
-              "equitorial radius must be set with a call to SetRadii.";
-            throw IException(IException::Programmer, msg, _FILEINFO_);
-          }
-
-          // Convert from radians to meters
-          latSigmaDistance = latSigma.radians() * *p_majorAxis;
-        }
-      }
-
-      return latSigmaDistance;
+    Distance SurfacePoint::GetLocalRadius() const {
+     return p_localRadius;
     }
 
 
   /**
-   * Return the longiitude sigma in meters
+   * Return the latitude sigma as a Distance
    *
    */
-  Distance SurfacePoint::GetLonSigmaDistance() const {
-    Distance lonSigmaDistance;
+  Distance SurfacePoint::GetLatSigmaDistance() const {
+    double d = LatitudeToMeters(GetLatSigma().radians());
 
-    if(Valid()) {
-      Angle lonSigma = GetLonSigma();
-
-      if (lonSigma.isValid()) {
-        if (!p_majorAxis || !p_majorAxis->isValid()) {
-          IString msg = "In order to calculate sigmas in meter units, the "
-            "equitorial radius must be set with a call to SetRadii.";
-          throw IException(IException::Programmer, msg, _FILEINFO_);
-        }
-
-        Latitude lat = GetLatitude();
-        double scaler = cos(lat.radians());
-
-        // Convert from radians to meters and return
-        if (scaler != 0.)
-          lonSigmaDistance = lonSigma.radians() * *p_majorAxis / scaler;
-      }
+    if (d > DBL_EPSILON)  {
+      return Distance(d,  Distance::Meters);
+    }
+    else {
+      return Distance();
     }
+  }
 
-    return lonSigmaDistance;
+
+  /**
+   * Return the longitude sigma in meters
+   *
+   */
+  Distance SurfacePoint::GetLonSigmaDistance() const{
+    // return lonSigmaDistance;
+    double d = LongitudeToMeters(GetLonSigma().radians());
+// TODO What do we do when the scaling radius is 0 (at the pole)?
+    // if (d > DBL_EPSILON)  {  
+      return Distance(d,  Distance::Meters);
+    // }
+    // else { // Too close to the pole
+    //   return Distance();
+    // }
   }
 
 
@@ -973,17 +1760,49 @@ namespace Isis {
     if(!p_sphereCovar)
       return Distance();
 
-    return Distance(sqrt((*p_sphereCovar)(2, 2)), Distance::Meters);
+    return Distance(sqrt((*p_sphereCovar)(2, 2)), Distance::Kilometers);
   }
 
 
-  symmetric_matrix<double, upper> SurfacePoint::GetSphericalMatrix() const {
+  symmetric_matrix<double, upper> SurfacePoint::GetSphericalMatrix
+                               (SurfacePoint::CoordUnits units) const {
     if(!p_sphereCovar) {
       symmetric_matrix<double, upper> tmp(3);
       tmp.clear();
       return tmp;
     }
 
+    // Make sure the units are valid
+    if (units != Kilometers && units != Meters) {
+      IString msg = "Units must be Kilometers or Meters";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    
+    symmetric_matrix<double, upper> covar(3);
+    covar.clear();
+    
+    switch (units) {
+      
+      case Meters:
+        // Convert member matrix to Meters to return
+        covar(0,0) = (*p_sphereCovar)(0,0);
+        covar(0,1) = (*p_sphereCovar)(0,1);
+        covar(0,2) = (*p_sphereCovar)(0,2)*1000.;
+        covar(1,1) = (*p_sphereCovar)(1,1);
+        covar(1,2) = (*p_sphereCovar)(1,2)*1000.;
+        covar(2,2) = (*p_sphereCovar)(2,2)*1.0e6;
+        return covar;
+        break;
+        
+      case Kilometers:
+        return *p_sphereCovar;
+        break;
+        
+    default:
+        IString msg = "Unrecognized unit for a Displacement (must be meters or kilometers).";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
     return *p_sphereCovar;
   }
 
@@ -1022,7 +1841,7 @@ namespace Isis {
 
   /**
   * Return radius weight for bundle adjustment
-  * Units are 1/(meters)^2
+  * Units are 1/(kilometers)^2
   *
   */
   double SurfacePoint::GetLocalRadiusWeight() const {
@@ -1038,19 +1857,11 @@ namespace Isis {
       }
 
   /**
-   * Computes and returns the distance between two surface points. This does
-   *   not currently support ellipsoids and so any attempt with points with
-   *   planetary radii will fail. The average of the local radii will be
-   *   used.
+   * Computes and returns the distance between two surface points.  The average of 
+   * the local radii will be used.
    */
   Distance SurfacePoint::GetDistanceToPoint(const SurfacePoint &other) const {
-    if(p_majorAxis || p_minorAxis || p_polarAxis ||
-       other.p_majorAxis || other.p_minorAxis || other.p_polarAxis) {
-      IString msg = "SurfacePoint::GetDistanceToPoint not yet implemented for "
-          "ellipsoids";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
+    
     if(!Valid() || !other.Valid())
       return Distance();
 
@@ -1112,17 +1923,6 @@ namespace Isis {
       equal = equal && p_z == NULL && other.p_z == NULL;
     }
 
-    if(equal && p_majorAxis && p_minorAxis && p_polarAxis) {
-      equal = equal && *p_majorAxis == *other.p_majorAxis;
-      equal = equal && *p_minorAxis == *other.p_minorAxis;
-      equal = equal && *p_polarAxis == *other.p_polarAxis;
-    }
-    else if(equal) {
-      equal = equal && p_majorAxis == NULL && other.p_majorAxis == NULL;
-      equal = equal && p_minorAxis == NULL && other.p_minorAxis == NULL;
-      equal = equal && p_polarAxis == NULL && other.p_polarAxis == NULL;
-    }
-
     if(equal && p_rectCovar) {
       equal = equal && (*p_rectCovar)(0, 0) == (*other.p_rectCovar)(0, 0);
       equal = equal && (*p_rectCovar)(0, 1) == (*other.p_rectCovar)(0, 1);
@@ -1156,9 +1956,6 @@ namespace Isis {
     if(p_x && other.p_x &&
        p_y && other.p_y &&
        p_z && other.p_z &&
-       !p_majorAxis && !other.p_majorAxis &&
-       !p_minorAxis && !other.p_minorAxis &&
-       !p_polarAxis && !other.p_polarAxis &&
        !p_rectCovar && !other.p_rectCovar &&
        !p_sphereCovar && !other.p_sphereCovar) {
       *p_x = *other.p_x;
@@ -1167,17 +1964,6 @@ namespace Isis {
     }
     else {
       FreeAllocatedMemory();
-      if(other.p_majorAxis) {
-        p_majorAxis = new Distance(*other.p_majorAxis);
-      }
-
-      if(other.p_minorAxis) {
-        p_minorAxis = new Distance(*other.p_minorAxis);
-      }
-
-      if(other.p_polarAxis) {
-        p_polarAxis = new Distance(*other.p_polarAxis);
-      }
 
       if(other.p_x) {
         p_x = new Displacement(*other.p_x);
@@ -1200,6 +1986,9 @@ namespace Isis {
       }
     }
 
+    // Finally initialize local radius to avoid using a previous value
+    p_localRadius = other.GetLocalRadius();
+
     return *this;
   }
 
@@ -1219,21 +2008,6 @@ namespace Isis {
       p_z = NULL;
     }
 
-    if(p_majorAxis) {
-      delete p_majorAxis;
-      p_majorAxis = NULL;
-    }
-
-    if(p_minorAxis) {
-      delete p_minorAxis;
-      p_minorAxis = NULL;
-    }
-
-    if(p_polarAxis) {
-      delete p_polarAxis;
-      p_polarAxis = NULL;
-    }
-
     if(p_rectCovar) {
       delete p_rectCovar;
       p_rectCovar = NULL;
diff --git a/isis/src/base/objs/SurfacePoint/SurfacePoint.h b/isis/src/base/objs/SurfacePoint/SurfacePoint.h
index 5d269309ae63d50746ed2b8da0624a45d0bc9704..39833cb964cd3af894a8756fbee58910ec2e4650 100644
--- a/isis/src/base/objs/SurfacePoint/SurfacePoint.h
+++ b/isis/src/base/objs/SurfacePoint/SurfacePoint.h
@@ -25,9 +25,13 @@
 #include <vector>
 #include <cmath>
 
+// Qt library
+#include <QString>
+
 #include "boost/numeric/ublas/symmetric.hpp"
 #include "boost/numeric/ublas/io.hpp"
 
+// ISIS library
 #include "Displacement.h"
 #include "Distance.h"
 #include "Angle.h"
@@ -81,12 +85,87 @@ namespace Isis {
    *   @history 2011-10-06 Steven Lambright - Get*SigmaDistance will no longer
    *                           throw an exception if there is no stored sigma
    *                           and there is no stored target radii.
+   *   @history 2018-06-28 Debbie A. Cook - Removed target body radii and all
+   *                           related methods.  Any reference to the major axis (equatorial
+   *                           radius) was replaced with the local radius. Technically I think
+   *                           we should be using the target body minor axis (polar) for the
+   *                           conversion of latitude degrees to/from distance and the local 
+   *                           radius of the surface point for conversion of longitude degrees 
+   *                           to/from distance.  For large bodies the percent error will be small, 
+   *                           so we will use the local radius for convenience.  For small bodies, 
+   *                           any bundle adjustment will likely use rectangular coordinates 
+   *                           where degree conversions will not be necessary.  Added new
+   *                           member p_localRadius to avoid recalculating when coordinates
+   *                           have not changed.  Also corrected the longitude conversion equation
+   *                           in SetSphericalSigmasDistance and GetLonSigmaDistance.
+   *                           References #5457.
+   *   @history 2018-08-15 Debbie A. Cook - Initialized the local radius whenever any 
+   *                           SurfacePoint coordinate was changed, removed memory errors,
+   *                           and cleaned up documentation.  Changed localRadius member
+   *                           from a pointer to value to reduce extraneous if blocks.  
+   *                           References #5457
+   *   @history 2018-09-06 Debbie A. Cook - Originally added to BundleXYZ branch on 
+   *                           2017-06-25 - Added CoordinateType, CoordUnits, and CoordIndex
+   *                           to support new convenience methods GetCoord, GetSigma, and GetWeight.
+   *                           Also added methods GetXWeight, GetYWeight, GetZWeight, LatToDouble, 
+   *                           LonToDouble, DistanceToDouble, DisplacementToDouble,  
+   *                           getCoordSigmaDistance, stringToCoordinateType, and 
+   *                           coordinateTypeToString.  Fixed comment in GetLocalRadiusWeight method 
+   *                           to indicate kilometers instead of meters.  References #4649 and #501.
+   *   @history 2018-09-06 Debbie A. Cook - Originally added to BundleXYZ branch on
+   *                           2017-07-25 - Corrected covar(2,2) units in SetSphericalSigmas,
+   *                           and all diagonal units in SetRectangularSigmas.  Corrected spelling 
+   *                           of equatorial in comments.  Corrected conversion of longitude sigma
+   *                           from meters to radians in SetSphericalSigmasDistance and from radians
+   *                           to meters in GetLonSigmaDistance.  Fixed SetRectangularMatrix to take
+   *                           input in km instead of m. 
+   *   @history 2018-09-06 Debbie A. Cook - Originally added to BundleXYZ branch on
+   *                           2017-11-20  - Added an additional argument to SetRectangularMatrix
+   *                           and SetSphericalMatrix to specify the units of the matrix.  This will allow the 
+   *                           bundle adjust to set in km and existing software to continue setting in the default 
+   *                           units (meters).  The matrix will be stored in km in this object to avoid extra 
+   *                           conversions during processing.
+   *   @history 2018-09-06 Debbie A. Cook - Originally added to BundleXYZ branch on 
+   *                           2018-03-07 - Added an additional argument to GetRectangularMatrix
+   *                           and GetSphericalMatrix to specify the units of the matrix.  This will allow existing
+   *                           callers to get in m (the default) and bundle adjust software to get in km and 
+   *                           minimize conversions. The matrix is held in this object in km to avoid extra 
+   *                           conversions during the bundle adjustment.  The control net stores the distance
+   *                           values of the matrix in m**2.
+   *   @history 2018-09-20 Debbie A. Cook - Added new methods 
+   *                           LatitudeToMeters, MetersToLatitude,
+   *                           LongitudeToMeters, and MetersToLongitude
+   *                           for converting sigmas and corrections at the current SurfacePoint 
+   *                           coordinates.  References #4649 and #501.
+   *   @history 2018-10-12 Debbie A. Cook - Initialized local radius in 
+   *                           SetRectangularCoordinates 
+   *                                                    
    */
 
   class SurfacePoint {
     public:
+
+      // definitions
+      /**
+       * Defines the coordinate typ, units, and coordinate index  for some of the output methods
+       */
+      enum CoordinateType {
+        Latitudinal,                       /**< Planetocentric latitudinal (lat/lon/rad) coordinates */
+        Rectangular                   /**< Body-fixed rectangular x/y/z coordinates */
+      }; 
+      enum CoordUnits {
+        Degrees,
+        Kilometers,
+        Meters,
+        Radians
+      };
+      enum CoordIndex {
+        One=0,
+        Two=1,
+        Three=2
+    };
+      
       // Constructors
-//      SurfacePoint(const std::vector <double> radii);
       SurfacePoint();
       SurfacePoint(const SurfacePoint &other);
       SurfacePoint(const Latitude &lat, const Longitude &lon,
@@ -117,13 +196,16 @@ namespace Isis {
       void SetRectangular(const Displacement x, const Displacement y, const Displacement z,
         const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
 
+      void SetRectangularCoordinates(const Displacement &x, const Displacement &y,
+                                   const Displacement &z);
+
       //! Set surface point and sigmas in rectangular coordinates and convert to planetocentric
       void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma,
                                 const Distance &zSigma);
 
-
       void SetRectangularMatrix(
-        const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
+                                const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar,
+                                SurfacePoint::CoordUnits units = SurfacePoint::Meters);
 
 // Spherical loading utilities
 
@@ -143,7 +225,8 @@ namespace Isis {
                                    const Distance &radius);
 
       void SetSphericalMatrix(
-        const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
+                              const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar,
+                              SurfacePoint::CoordUnits units = SurfacePoint::Meters);
 
       void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma,
                               const Distance &radiusSigma);
@@ -152,21 +235,37 @@ namespace Isis {
                                       const Distance &lonSigma,
                                       const Distance &radiusSigma);
 
-      void SetRadii(const Distance &majorRadius, const Distance &minorRadius,
-                    const Distance &polarRadius);
-
       void ResetLocalRadius(const Distance &radius);
       bool Valid() const;
-
+      
+// Generic utilities for convenience
+      
+      //! Set the covariance matrix
+      void SetMatrix(CoordinateType type,
+         const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);        
+   
+      //! Compute partial derivative of conversion from body-fixed coordinates to the specified
+      //    coordinate type with respect to the indicated coordinate (specified by index).     
+      std::vector<double> Partial(CoordinateType type, CoordIndex index);
+      
 // Output methods
+      double GetCoord(CoordinateType type, CoordIndex index, CoordUnits units);
+      // Consider making this GetSigmaDistance and use the Distance methods to specify units for
+      // maximum flexibility and safety. ***TBD***
+      double GetSigma(CoordinateType type, CoordIndex index, CoordUnits units);
+      Distance GetSigmaDistance(CoordinateType type, CoordIndex index);
+      double GetWeight(CoordinateType type, CoordIndex index);
       Displacement GetX() const;
       Displacement GetY() const;
       Displacement GetZ() const;
       Distance GetXSigma() const;
       Distance GetYSigma() const;
       Distance GetZSigma() const;
+      double GetXWeight() const;
+      double GetYWeight() const;
+      double GetZWeight() const;
       boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper> 
-        GetRectangularMatrix() const;
+        GetRectangularMatrix(SurfacePoint::CoordUnits units = SurfacePoint::Meters) const;
       Latitude GetLatitude() const; 
       Longitude GetLongitude() const;
       Distance GetLocalRadius() const;
@@ -179,12 +278,27 @@ namespace Isis {
       Distance GetLocalRadiusSigma() const;
       double GetLocalRadiusWeight() const;
       boost::numeric::ublas::symmetric_matrix
-          <double,boost::numeric::ublas::upper> GetSphericalMatrix() const;
+          <double,boost::numeric::ublas::upper> GetSphericalMatrix
+            (SurfacePoint::CoordUnits units = SurfacePoint::Meters) const;
 
+// Conversion methods (for convenience)
+      double DisplacementToDouble(Displacement disp, CoordUnits units);
+      double DistanceToDouble(Distance dist, CoordUnits units);
+      double MetersToLatitude(double latLength);
+      double MetersToLongitude(double lonLength);
+      double LatitudeToMeters(double latitude) const;
+      double LongitudeToMeters(double longitude) const;
+      double LatToDouble(Latitude lat, CoordUnits units);
+      double LonToDouble(Longitude lon, CoordUnits units);
+      static CoordinateType stringToCoordinateType(QString type);
+      static QString coordinateTypeToString(CoordinateType type);
+        
 // Computational methods
       Distance GetDistanceToPoint(const SurfacePoint &other) const;
       Distance GetDistanceToPoint(const SurfacePoint &other,
           const Distance &sphereRadius) const;
+      std::vector<double> LatitudinalDerivative(CoordIndex index);
+      std::vector<double> RectangularDerivative(CoordIndex index);
 
 // Misc methods
       void ToNaifArray(double naifOutput[3]) const;
@@ -195,16 +309,14 @@ namespace Isis {
       SurfacePoint &operator=(const SurfacePoint &other);
 
     private:
+      void ComputeLocalRadius();
       void InitCovariance();
       void InitPoint();
-      void InitRadii();
       void SetRectangularPoint(const Displacement &x, const Displacement &y, const Displacement &z);
       void SetSphericalPoint(const Latitude &lat, const Longitude &lon, const Distance &radius);
       void FreeAllocatedMemory();
 
-      Distance *p_majorAxis;
-      Distance *p_minorAxis;
-      Distance *p_polarAxis;
+      Distance p_localRadius;
       Displacement *p_x;
       Displacement *p_y;
       Displacement *p_z;
diff --git a/isis/src/base/objs/SurfacePoint/SurfacePoint.truth b/isis/src/base/objs/SurfacePoint/SurfacePoint.truth
index 31d6f890a6fede688b230fd0f04f93fc95f97130..17607a0ee4b883f9e34402ec2816c41476092a8a 100644
--- a/isis/src/base/objs/SurfacePoint/SurfacePoint.truth
+++ b/isis/src/base/objs/SurfacePoint/SurfacePoint.truth
@@ -1,6 +1,6 @@
 UnitTest for SurfacePoint
 
-1-Test rectangular set of point and variance only ...
+1-Test rectangular set of point and variance only (variance in m^2) ...
  with x=-424.024048 m, y=734.4311949 m, z=529.919264 m,sigmaX=10. m, sigmaY=50. m, sigmaZ=20. m
 
   Output spherical...
@@ -8,54 +8,122 @@ UnitTest for SurfacePoint
     lat = 0.55850536 radians, lon = 2.0943951 radians, radius = 1000 meters
     latitude sigma=1.64192315 degrees, longitude sigma=1.78752107 degrees, radius sigma=38.4548873 m
     latitude sigma=0.0286569649 radians, longitude sigma=0.0311981281 radians, radius sigma=38.4548873 m
-    latitude sigma=28.6569649 m, longitude sigma=36.7881588 m, radius sigma=38.4548873 m
+    latitude sigma=28.6569649 m, longitude sigma=26.4575131 m, radius sigma=38.4548873 m
     latitude weight =1217.69806, longitude weight =1027.40796, radius weight =676.233861
-    spherical covariance matrix = 0.00082122164  0.000649383279  -0.674095535
-                                  0.000649383279  0.000973323195  -1.03923048
-                                  -0.674095535  -1.03923048  1478.77836
+    spherical covariance matrix = 0.00082122164  0.000649383279  -0.000674095535
+                                  0.000649383279  0.000973323195  -0.00103923048
+                                  -0.000674095535  -0.00103923048  0.00147877836
   Input rectangular sigmas = 10/50/20
 
-2-Testing spherical set of point and variance/covariance matrix ...
+2-Testing spherical set of point and variance/covariance matrix (in meters^2)...
  with lat=32 degrees, lon=120 degrees, radius=1000 m
- latitude sigma=1.64192315 m, longitude sigma=1.78752107 m, radiusSig=38.4548873 m
+ latitude sigma=1.64192315 deg, longitude sigma=1.78752107 deg, radiusSig=38.4548873 m
   Output rectangular...
     x=-424.024048 m, y=734.431195 m, z=529.919264 m
     X sigma=10 m, Y sigma=50 m, Z sigma=20 m
-    rectangular covariance matrix =        100         0         0
-                                             0      2500         0
-                                             0         0       400
+    rectangular covariance matrix =     0.0001         0         0
+                                             0    0.0025         0
+                                             0         0    0.0004
 3-Testing rectangular set with point and sigmas only...
   Output spherical...
     lat=32 degrees, lon=120 degrees, radius=1000m
     latitude sigma=1.64192315 degrees, longitude sigma=1.78752107 degrees, radius sigma=38.4548873m
-    ocentric covariance matrix = 0.00082122164  0.000649383279  -0.674095535
-                                 0.000649383279  0.000973323195  -1.03923048
-                                 -0.674095535  -1.03923048  1478.77836
+    ocentric covariance matrix = 0.00082122164  0.000649383279  -0.000674095535
+                                 0.000649383279  0.000973323195  -0.00103923048
+                                 -0.000674095535  -0.00103923048  0.00147877836
 
-4-Testing planetocentric set with point and sigmas only in degrees ...
+4-Testing planetocentric set with point and sigmas  ...
   4a-Output rectangular from degrees...
     x=-424.024048 m, y=734.431195 m, z=529.919264 m
     X sigma =29.1295681 m, Y sigma = 33.8466425 m, Z sigma = 31.7155018m
-    rectangular covariance matrix = 848.531739  -257.264514  -147.752015
-                                    -257.264514  1145.59521  255.913997
-                                    -147.752015  255.913997  1005.87306
+    rectangular covariance matrix = 0.000848531739  -0.000257264514  -0.000147752015
+                                    -0.000257264514  0.00114559521  0.000255913997
+                                    -0.000147752015  0.000255913997  0.00100587306
   4b-Output rectangular from radians...
     x=-424.024046 m, y=734.431196 m, z=529.919264 m
     X sigma = 29.1295681 m, Y sigma = 33.8466425 m, Z sigma = 31.7155018m
-    rectangular covariance matrix = 848.531737  -257.264513  -147.752014
-                                    -257.264513  1145.59521  255.913997
-                                    -147.752014  255.913997  1005.87305
+    rectangular covariance matrix = 0.000848531737  -0.000257264513  -0.000147752014
+                                    -0.000257264513  0.00114559521  0.000255913997
+                                    -0.000147752014  0.000255913997  0.00100587305
+  4c-Output spherical sigmas from meters...
+    latitude sigma=0.0286569649 radians, longitude sigma=0.031198128 radians, radius sigma=38.4548873 m
 
 5-Testing copy constructor
   Output spherical...
     lat=32 degrees, lon=120 degrees, radius=1000 m
     latitude sigma = 1.64192315 degrees, longitude sigma = 1.78752107 degrees, radius sigma = 38.4548873 m
-    ocentric covariance matrix = 0.00082122164  0.000649383279  -0.674095535
-                                 0.000649383279  0.000973323195  -1.03923048
-                                 -0.674095535  -1.03923048  1478.77836
+    ocentric covariance matrix = 0.00082122164  0.000649383279  -0.000674095535
+                                 0.000649383279  0.000973323195  -0.00103923048
+                                 -0.000674095535  -0.00103923048  0.00147877836
 
 Testing Longitude Accessor...
 Longitude (from -45): 315
 
+6-Testing set of matrices in spherical and rectangular coordinates in km ...
+  6a-Test rectangular set of point and variance only (variance in km^2) ...
+    with x=-424.024048 m, y=734.4311949 m, z=529.919264 m,sigmaX=.01 km, sigmaY=.05 km, sigmaZ=.02 km
+
+    Output spherical...
+      lat = 32 degrees, lon = 120 degrees, radius = 1000 meters
+      lat = 0.55850536 radians, lon = 2.0943951 radians, radius = 1000 meters
+      latitude sigma=0.0286569649 radians, longitude sigma=0.0311981281 radians, radius sigma=38.4548873 m
+      spherical covariance matrix = 0.00082122164  0.000649383279  -0.000674095535
+                                    0.000649383279  0.000973323195  -0.00103923048
+                                    -0.000674095535  -0.00103923048  0.00147877836
+    Input rectangular sigmas = 0.01/0.05/0.02
+
+  6b-Testing spherical set of point and variance/covariance matrix (in km^2)...
+    with lat=32 degrees, lon=120 degrees, radius=1000 m
+    latitude sigma=1.64192315 deg, longitude sigma=1.78752107 deg, radiusSig=38.4548873 m
+    Output rectangular...
+      x=-424.024048 m, y=734.431195 m, z=529.919264 m
+      X sigma=10 m, Y sigma=50 m, Z sigma=20 m
+      rectangular covariance matrix =     0.0001         0         0
+                                             0    0.0025         0
+                                             0         0    0.0004
+
+Testing error conditions in GetCoord, GetSigma, GetWeight, LatToDouble, 
+LonToDouble,  GetSigmaDistance, DistanceToDouble, and DisplacementToDouble...
+
+  ...Test Rectangular GetCoord with incorrect unit Degrees
+**PROGRAMMER ERROR** Unrecognized unit for a Displacement (must be meters or kilometers).
+  ...Test Rectangular GetCoord with incorrect unit Radians
+**PROGRAMMER ERROR** Unrecognized unit for a Displacement (must be meters or kilometers).
+  ...Test Rectangular GetCoord with incorrect unit Degrees
+**PROGRAMMER ERROR** Unrecognized unit for a Distance (not meters or kilometers).
+  ...Test Latitudinal GetCoord with incorrect unit Radians for local radius
+**PROGRAMMER ERROR** Unrecognized unit for a Distance (not meters or kilometers).
+  ...Test Latitudinal GetCoord with incorrect unit Kilometers for latitude
+**PROGRAMMER ERROR** Invalid unit for latitude (must be Radians or Degrees).
+  ...Test Latitudinal GetCoord with incorrect unit Meters for longitude
+**PROGRAMMER ERROR** Invalid unit for longitude (must be Radians of Degrees).
+
+Test error statements: case where weights are requested after only coordinates have  been set...
+**PROGRAMMER ERROR** SurfacePoint::GetXWeight(): Sigma <= 0.0.
+
+Test error statements: case of invalid SurfacePoint in SetSphericalSigmasDistance 
+**PROGRAMMER ERROR** Cannot set spherical sigmas on an invalid surface point.
+
+...Testing GetCoord, GetSigma, and GetWeight...  
+
+Rectangular Coordinates kilometers:  X= -0.424024048   Y = 0.734431195   Z = 0.529919264
+Rectangular Coordinates meters:  X= -424.024048   Y = 734.431195   Z = 529.919264
+Rectangular sigmas kilometers:  X= 0.01   Y = 0.05   Z = 0.02
+Using GetSigmaDistance, Rectangular sigmas kilometers:  X= 0.01   Y = 0.05   Z = 0.02
+Rectangular sigmas meters:  X= 10   Y = 50   Z = 20
+Using GetSigmaDistance, Rectangular sigmas meters:  X= 10   Y = 50   Z = 20
+Rectangular Weights kilometers:  X = 10000  Y = 400  Z = 2500
+Latitudinal Coordinates radians:  Latitude= 0.55850536   Longitude = 2.0943951   Local Radius = 1
+Latitudinal Coordinates degrees:  Latitude= 32   Longitude = 120   Local Radius = 1000
+Latitudinal weight degrees:  Latitude= 1217.69806   Longitude = 1027.40796   Local Radius = 676.233861
+
+Testing stringToCoordinateType with Latitudinal:  coordType = 0
+Testing coordinateTypeToString with coordType = 0:  coordTypeStr = Latitudinal
+Testing stringToCoordinateType with Rectangular:  coordType = 1
+Testing coordinateTypeToString with coordType = 1:  coordTypeStr = Rectangular
+
+Test invalid coordinate type error condition.
+**PROGRAMMER ERROR** Unknown coordinate type for a SurfacePoint [Garbage].
+
 Test computational methods...
   SphericalDistanceToPoint (i.e. haversine): 1570.79633 meters
diff --git a/isis/src/base/objs/SurfacePoint/unitTest.cpp b/isis/src/base/objs/SurfacePoint/unitTest.cpp
index 6b2cb35f4feff1ebe516108f83589cf986e65e53..6907b8bb514a861638b0064f063696f6994ad37a 100644
--- a/isis/src/base/objs/SurfacePoint/unitTest.cpp
+++ b/isis/src/base/objs/SurfacePoint/unitTest.cpp
@@ -12,7 +12,7 @@
 #include "Preference.h"
 #include "SurfacePoint.h"
 
-#include "boost/numeric/ublas/symmetric.hpp"
+#include <boost/numeric/ublas/symmetric.hpp>
 
 using namespace Isis;
 using namespace std;
@@ -20,11 +20,26 @@ using namespace boost::numeric::ublas;
 
 /**
  *
- * @author 2010-07-30 Tracie Sucharski, Ken L. Edmunson, and Debbie A. Cook
+ * @author 2010-07-30 Tracie Sucharski, Ken L. Edmundson, and Debbie A. Cook
  *
  * @internal
  *   @history 2015-02-20 Jeannie Backer - Added print statement for
  *            latitude, longitude and radius weight accessor methods.
+ *   @history 2018-06-28 Debbie A.Cook - Removed test of obsolete method
+ *            SetRadii
+ *   @history 2018-09-06 (added to BundleXYZ branch on 2017-05-27)  
+ *            Debbie A. Cook - Added tests for new methods:
+ *            GetCoord, GetSigma, GetWeight, GetXSigma, GetYSigma, 
+ *            GetZsigma, LatToDouble, LonToDouble, DistanceToDouble,
+ *            DisplacementToDouble, and enum types CoordinateType, 
+ *            CoordUnits, and CoordIndex.  Fixed incorrect units in report for
+ *            latSig and lonSig.
+ *   @history 2018-09-06 (added to BundleXYZ branch on 2017-11-20) 
+ *            Debbie A. Cook - Added tests for new options in
+ *            SetRectangularMatrix and SetSphericalMatrix.
+ *   @history 2018-09-21 Debbie A. Cook - Added tests for new 
+ *            SurfacePoint modifications.
+ *   
  */
 int main(int argc, char *argv[]) {
   Isis::Preference::Preferences(true);
@@ -32,22 +47,20 @@ int main(int argc, char *argv[]) {
 
   try {
     cout << "UnitTest for SurfacePoint" << endl << endl;
-    cout << "1-Test rectangular set of point and variance only ..." << endl;
+    cout << "1-Test rectangular set of point and variance only (variance in m^2) ..." << endl;
     cout << " with x=-424.024048 m, y=734.4311949 m, z=529.919264 m,"
           "sigmaX=10. m, sigmaY=50. m, sigmaZ=20. m" << endl << endl;
     Isis::SurfacePoint spRec;
 
-    spRec.SetRadii(Distance(1000., Distance::Meters),
-                   Distance(1000., Distance::Meters),
-                   Distance(1000., Distance::Meters));
-
-    symmetric_matrix<double,upper> covar;
+    symmetric_matrix<double,upper> covar; // Units are m**2
     covar.resize(3);
     covar.clear();
+    // Units are m**2
     covar(0,0) = 100.;
     covar(1,1) = 2500.;
     covar(2,2) = 400.;
 
+    // Default is to set covar in meters**2 for length units
     spRec.SetRectangular(Displacement(-424.024048, Displacement::Meters),
                          Displacement(734.4311949, Displacement::Meters),
                          Displacement(529.919264, Displacement::Meters), covar);
@@ -58,9 +71,11 @@ int main(int argc, char *argv[]) {
     double latSig = spRec.GetLatSigma().degrees();
     double lonSig = spRec.GetLonSigma().degrees();
     double radSig = spRec.GetLocalRadiusSigma().meters();
+;
     symmetric_matrix<double,upper> covarSphere(3);
     covarSphere.clear();
-    covarSphere = spRec.GetSphericalMatrix();
+    // Default is to get matrix with length units in meters**2
+    covarSphere = spRec.GetSphericalMatrix(SurfacePoint::Kilometers);
     
     cout << setprecision(9);
     cout << "  Output spherical..." << endl;
@@ -97,20 +112,26 @@ int main(int argc, char *argv[]) {
 
 
     cout << endl;
-    cout << "2-Testing spherical set of point and variance/covariance matrix ..."
-         << endl;
+    cout << "2-Testing spherical set of point and variance/covariance matrix (in meters^2)..."
+            << endl;
+      // Usage note:  In order to get accurate results, the full correlation matrix should be
+      // used as opposed to only setting the diagonal elements with the sigmas. 
     cout << " with lat=" << lat << " degrees, lon=" << lon << " degrees, radius="
          << radius << " m" << endl;
-    cout << " latitude sigma=" << latSig << " m, longitude sigma=" << lonSig
-         << " m, radiusSig=" << radSig << " m" << endl;
+    cout << " latitude sigma=" << latSig << " deg, longitude sigma=" << lonSig
+         << " deg, radiusSig=" << radSig << " m" << endl;
     Isis::SurfacePoint spSphere;
+    // Convert covarSphere to meters to be able to test default set
+    covarSphere(0,2) *= 1000.;
+    covarSphere(1,2) *= 1000.;
+    covarSphere(2,2) *= 1.0e6;
     spSphere.SetSpherical(Latitude(lat, Angle::Degrees),
                           Longitude(lon, Angle::Degrees),
                           Distance(radius, Distance::Meters),
-                          covarSphere );
+                          covarSphere);
     symmetric_matrix<double,upper> covarRec(3);
     covarRec.clear();
-    covarRec = spSphere.GetRectangularMatrix();
+    covarRec = spSphere.GetRectangularMatrix(SurfacePoint::Kilometers);
 
     if(fabs(covarRec(0,1)) < 1E-12) covarRec(0,1) = 0.0;
     if(fabs(covarRec(0,2)) < 1E-12) covarRec(0,2) = 0.0;
@@ -157,7 +178,7 @@ int main(int argc, char *argv[]) {
     double radSig = spRec.GetLocalRadiusSigma().meters();
     symmetric_matrix<double,upper> covarSphere(3);
     covarSphere.clear();
-    covarSphere = spRec.GetSphericalMatrix();
+    covarSphere = spRec.GetSphericalMatrix(SurfacePoint::Kilometers);
     
     cout << setprecision(9);
     cout << "  Output spherical..." << endl;
@@ -176,25 +197,32 @@ int main(int argc, char *argv[]) {
     // The next test will not match previous results because only the sigmas are set
     // and not the whole variance/covariance matrix
     cout << endl;
-    cout << "4-Testing planetocentric set with point and sigmas only in degrees ..."
+    cout << "4-Testing planetocentric set with point and sigmas  ..."
          << endl;
-    Isis::SurfacePoint spSphere1,spSphere2;
+    Isis::SurfacePoint spSphere1,spSphere2,spSphere4;
     spSphere1.SetSpherical(Latitude(32., Angle::Degrees),
                          Longitude(120., Angle::Degrees),
                          Distance(1000., Distance::Meters),
                          Angle(1.64192315,Angle::Degrees),
                          Angle(1.78752107, Angle::Degrees),
-                         Distance(38.454887335682053718134171237789,
+                         Distance( 38.454887335682053718134171237789,
                                   Distance::Meters));
     symmetric_matrix<double,upper> covarRec(3);
     covarRec.clear();
-    covarRec = spSphere1.GetRectangularMatrix();
+    covarRec = spSphere1.GetRectangularMatrix(SurfacePoint::Kilometers);
     spSphere2.SetSpherical(Latitude(0.55850536, Angle::Radians),
                               Longitude(2.0943951, Angle::Radians),
                               Distance(1000., Distance::Meters),
                               Angle(0.028656965, Angle::Radians),
                               Angle(0.0311981281, Angle::Radians),
                               Distance(38.4548873, Distance::Meters));
+    spSphere4.SetSpherical(Latitude(0.55850536, Angle::Radians),
+                              Longitude(2.0943951, Angle::Radians),
+                              Distance(1000., Distance::Meters));
+    spSphere4.SetSphericalSigmasDistance(
+                              Distance(28.6569649, Distance::Meters),
+                              Distance(26.4575131, Distance::Meters),
+                              Distance(38.4548873, Distance::Meters));
 
     // TODO try to convert ocentric sigmas to meters and get error to test error
 
@@ -214,7 +242,7 @@ int main(int argc, char *argv[]) {
          << covarRec(2,1) << "  " << covarRec(2,2) << endl;
 
     covarRec.clear();
-    covarRec = spSphere2.GetRectangularMatrix();
+    covarRec = spSphere2.GetRectangularMatrix(SurfacePoint::Kilometers);
     cout << "  4b-Output rectangular from radians..." << endl;
     cout << "    x=" << spSphere2.GetX().meters()
          << " m, y=" << spSphere2.GetY().meters()
@@ -229,9 +257,13 @@ int main(int argc, char *argv[]) {
          << covarRec(1,1) << "  " << covarRec(1,2) << endl;
     cout << "                                    " << covarRec(2,0) << "  "
          << covarRec(2,1) << "  " << covarRec(2,2) << endl;
-
-
+    cout << "  4c-Output spherical sigmas from meters..." << endl;
+    cout << "    latitude sigma=" << spSphere4.GetLatSigma().radians() <<
+            " radians, longitude sigma=" << spSphere4.GetLonSigma().radians()
+         << " radians, radius sigma=" << spSphere4.GetLocalRadiusSigma().meters()
+         << " m" << endl;
     cout << endl << "5-Testing copy constructor" << endl;
+
     Isis::SurfacePoint spRec2(spSphere1);
     lat = (spRec2.GetLatitude()).degrees();
     lon = (spRec2.GetLongitude()).degrees();
@@ -259,11 +291,339 @@ int main(int argc, char *argv[]) {
     cout << "Longitude (from -45): " << spSphere3.GetLongitude().degrees()
          << endl << endl;
 
+    cout << "6-Testing set of matrices in spherical and rectangular coordinates in km ..."
+         << endl;
+    cout << "  6a-Test rectangular set of point and variance only (variance in km^2) ..." << endl;
+    cout << "    with x=-424.024048 m, y=734.4311949 m, z=529.919264 m,"
+          "sigmaX=.01 km, sigmaY=.05 km, sigmaZ=.02 km" << endl << endl;
+    Isis::SurfacePoint spRecKm;
+
+    // spRecKm.SetRadii(Distance(1000., Distance::Meters),
+    //                Distance(1000., Distance::Meters),
+    //                Distance(1000., Distance::Meters));
+
+    symmetric_matrix<double,upper> covar;
+    covar.resize(3);
+    covar.clear();
+    // Units are km**2
+    covar(0,0) = .0001;
+    covar(1,1) = .0025;
+    covar(2,2) = .0004;
+
+    spRecKm.SetRectangular(Displacement(-424.024048, Displacement::Meters),
+                           Displacement(734.4311949, Displacement::Meters),
+                         Displacement(529.919264, Displacement::Meters));
+    spRecKm.SetMatrix(SurfacePoint::Rectangular, covar);
+
+    lat = spRecKm.GetLatitude().degrees();
+    lon = spRecKm.GetLongitude().degrees();
+    radius = spRecKm.GetLocalRadius().meters();
+    latSig = spRecKm.GetLatSigma().degrees();
+    lonSig = spRecKm.GetLonSigma().degrees();
+    radSig = spRecKm.GetLocalRadiusSigma().meters();
+    symmetric_matrix<double,upper> covarSphKm(3);
+    covarSphKm.clear();
+    covarSphKm = spRecKm.GetSphericalMatrix(SurfacePoint::Kilometers);
+    
+    cout << setprecision(9);
+    cout << "    Output spherical..." << endl;
+    cout << "      lat = " << lat << " degrees, lon = " << lon <<
+            " degrees, radius = " << radius << " meters" << endl;
+    cout << "      lat = " << spRecKm.GetLatitude().radians() <<
+            " radians, lon = " << spRecKm.GetLongitude().radians() 
+         << " radians, radius = " << spRecKm.GetLocalRadius().meters() <<
+            " meters" << endl;
+    cout << "      latitude sigma=" << spRecKm.GetLatSigma().radians() <<
+            " radians, longitude sigma=" << spRecKm.GetLonSigma().radians()
+         << " radians, radius sigma=" << spRecKm.GetLocalRadiusSigma().meters()
+         << " m" << endl;
+
+    cout << "      spherical covariance matrix = " << covarSphKm(0,0) << "  " <<
+         covarSphKm(0,1) << "  " << covarSphKm(0,2) << endl;
+    cout << "                                    " << covarSphKm(1,0) << "  " <<
+         covarSphKm(1,1) << "  " << covarSphKm(1,2) << endl;
+    cout << "                                    " << covarSphKm(2,0) << "  " <<
+         covarSphKm(2,1) << "  " << covarSphKm(2,2) << endl;
+    cout << "    Input rectangular sigmas = " << spRecKm.GetXSigma().kilometers()
+         << "/" << spRecKm.GetYSigma().kilometers() << "/"
+         << spRecKm.GetZSigma().kilometers() << std::endl;
+    
+    cout << endl;
+    cout << "  6b-Testing spherical set of point and variance/covariance matrix (in km^2)..."
+            << endl;
+      // Usage note:  In order to get accurate results, the full correlation matrix should be
+      // used as opposed to only setting the diagonal elements with the sigmas. 
+    cout << "    with lat=" << lat << " degrees, lon=" << lon << " degrees, radius="
+         << radius << " m" << endl;
+    cout << "    latitude sigma=" << latSig << " deg, longitude sigma=" << lonSig
+         << " deg, radiusSig=" << radSig << " m" << endl;
+    Isis::SurfacePoint spSphereKm;
+    spSphereKm.SetSpherical(Latitude(lat, Angle::Degrees),
+                          Longitude(lon, Angle::Degrees),
+                            Distance(radius, Distance::Meters));
+    spSphereKm.SetMatrix(SurfacePoint::Latitudinal, covarSphKm);
+    symmetric_matrix<double,upper> covarRecKm(3);
+    covarRecKm.clear();
+    covarRecKm = spSphereKm.GetRectangularMatrix(SurfacePoint::Kilometers);
+
+    if(fabs(covarRecKm(0,1)) < 1E-12) covarRecKm(0,1) = 0.0;
+    if(fabs(covarRecKm(0,2)) < 1E-12) covarRecKm(0,2) = 0.0;
+    if(fabs(covarRecKm(1,0)) < 1E-12) covarRecKm(1,0) = 0.0;
+    if(fabs(covarRecKm(1,2)) < 1E-12) covarRecKm(1,2) = 0.0;
+    if(fabs(covarRecKm(2,0)) < 1E-12) covarRecKm(2,0) = 0.0;
+    if(fabs(covarRecKm(2,2)) < 1E-12) covarRecKm(2,2) = 0.0;
+
+    cout << "    Output rectangular..." << endl;
+    cout << "      x=" << spSphereKm.GetX().meters()
+         << " m, y=" << spSphereKm.GetY().meters()
+         << " m, z=" << spSphereKm.GetZ().meters() << " m" << endl;
+    cout << "      X sigma=" << spSphereKm.GetXSigma().meters() << " m, Y sigma="
+         << spSphereKm.GetYSigma().meters() << " m, Z sigma=" <<
+            spSphereKm.GetZSigma().meters() << " m" << endl;
+    cout << "      rectangular covariance matrix = " 
+         << setw(10) << covarRecKm(0,0) << setw(10) << covarRecKm(0,1)
+         << setw(10) << covarRecKm(0,2) << endl;
+    cout << "                                    "
+         << setw(10) << covarRecKm(1,0) << setw(10) << covarRecKm(1,1)
+         << setw(10) << covarRecKm(1,2) << endl;
+    cout << "                                    "
+         << setw(10) << covarRecKm(2,0) << setw(10) << covarRecKm(2,1)
+         << setw(10) << covarRecKm(2,2) << endl << endl;
+
   }
   catch(Isis::IException &e) {
     e.print();
   }
 
+    // Test new code added to support solving and outputting control points in body-fixed
+    // x/y/z (RECTANGULAR)
+    
+    // Set a point for testing - Use coordinate data from test 1
+    Isis::SurfacePoint spRec1;
+    spRec1.SetRectangular(Displacement(-424.024048, Displacement::Meters),
+                          Displacement(734.4311949, Displacement::Meters),
+                          Displacement(529.919264, Displacement::Meters));
+    
+    cout << "Testing error conditions in GetCoord, GetSigma, GetWeight, LatToDouble, "
+         << endl << "LonToDouble,  GetSigmaDistance, DistanceToDouble, and DisplacementToDouble..."
+         << endl << endl;
+
+    try {
+    // Test DisplacementToDouble error conditions. (DistanceToDouble, LatToDouble, and LonToDouble)
+      cout << "  ...Test Rectangular GetCoord with incorrect unit Degrees" << endl;
+    double value = spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::One,
+                                   SurfacePoint::Degrees);
+    cout << "X-degrees = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test DisplacementToDouble error conditions. (DistanceToDouble, LatToDouble, and LonToDouble)
+      cout << "  ...Test Rectangular GetCoord with incorrect unit Radians" << endl;
+    double value = spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::One,
+                                   SurfacePoint::Radians);
+    cout << "X-radians = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test DisplacementToDouble error conditions. (DistanceToDouble, LatToDouble, and LonToDouble)
+      cout << "  ...Test Rectangular GetCoord with incorrect unit Degrees" << endl;
+    double value = spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Three,
+                                   SurfacePoint::Degrees);
+    cout << "Local Radius-degrees = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test DisplacementToDouble error conditions. (DistanceToDouble, LatToDouble, and LonToDouble)
+      cout << "  ...Test Latitudinal GetCoord with incorrect unit Radians for local radius" << endl;
+    double value = spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Three,
+                                   SurfacePoint::Radians);
+    cout << "Local Radius-radians = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test DisplacementToDouble error conditions. (DistanceToDouble, LatToDouble, and LonToDouble)
+      cout << "  ...Test Latitudinal GetCoord with incorrect unit Kilometers for latitude" << endl;
+    double value = spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::One,
+                                   SurfacePoint::Kilometers);
+    cout << "Latitude-kilometers = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test DisplacementToDouble error conditions. (DistanceToDouble, LatToDouble, and LonToDouble)
+      cout << "  ...Test Latitudinal GetCoord with incorrect unit Meters for longitude" << endl;
+    double value = spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Two,
+                                   SurfacePoint::Kilometers);
+    cout << "Longitude-meters = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test point coordinates only set.  Try GetWeight.  Set sigmas. Try GetWeight.
+    // Try GetWeight and GetCoord for all possibilities
+      cout << endl;
+      cout << "Test error statements: case where weights are requested after only coordinates "
+              << "have  been set..." << endl;
+    double value = spRec1.GetWeight(SurfacePoint::Rectangular, SurfacePoint::One);
+    cout << "X sigma-degrees = " << value << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test SetSphericalSigmasDistance error condition
+      cout << endl;
+      cout << "Test error statements: case of invalid SurfacePoint in"
+              << " SetSphericalSigmasDistance " << endl;
+      SurfacePoint sp;
+      sp.SetSphericalSigmasDistance(Distance(3.,Distance::Meters),
+           Distance(3.,Distance::Meters),Distance(3.,Distance::Meters));
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    try {
+    // Test GetWeight after point coordinates and sigmas have been set. Try GetWeight. Set body 
+    // radii.  Try GetWeight, GetSigma and GetCoord for all possibilities.
+      cout << endl;
+      cout << "...Testing GetCoord, GetSigma, and GetWeight...  " << endl << endl;
+      spRec1.SetRectangularSigmas(Distance(10.,Distance::Meters),
+                                Distance(50., Distance::Meters),
+                                Distance(20., Distance::Meters));
+
+      cout << "Rectangular Coordinates kilometers:  "  << "X= ";
+      cout << spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::One,
+                              SurfacePoint::Kilometers);
+      cout << "   Y = ";
+      cout << spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::Two,
+                              SurfacePoint::Kilometers);
+      cout << "   Z = ";
+      cout << spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::Three,
+                              SurfacePoint::Kilometers);
+      cout << endl;
+
+      cout << "Rectangular Coordinates meters:  "  << "X= ";
+      cout << spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::One, SurfacePoint::Meters);
+      cout << "   Y = ";
+      cout << spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::Two, SurfacePoint::Meters);
+      cout << "   Z = ";
+      cout << spRec1.GetCoord(SurfacePoint::Rectangular, SurfacePoint::Three, SurfacePoint::Meters);
+      cout << endl;
+      
+      cout << "Rectangular sigmas kilometers:  "  << "X= ";
+      cout << spRec1.GetSigma(SurfacePoint::Rectangular, SurfacePoint::One,
+                              SurfacePoint::Kilometers);
+      cout << "   Y = ";
+      cout << spRec1.GetSigma(SurfacePoint::Rectangular, SurfacePoint::Two,
+                              SurfacePoint::Kilometers);
+      cout << "   Z = ";
+      cout << spRec1.GetSigma(SurfacePoint::Rectangular, SurfacePoint::Three,
+                              SurfacePoint::Kilometers);
+      cout << endl;
+      
+      cout << "Using GetSigmaDistance, Rectangular sigmas kilometers:  "  << "X= ";
+      cout << spRec1.GetSigmaDistance(SurfacePoint::Rectangular, SurfacePoint::One)
+        .kilometers();
+      cout << "   Y = ";
+      cout << spRec1.GetSigmaDistance(SurfacePoint::Rectangular, SurfacePoint::Two)
+        .kilometers();
+      cout << "   Z = ";
+      cout << spRec1.GetSigmaDistance(SurfacePoint::Rectangular, SurfacePoint::Three)
+        .kilometers();
+      cout << endl;
+
+    cout << "Rectangular sigmas meters:  "  << "X= ";
+    cout << spRec1.GetSigma(SurfacePoint::Rectangular, SurfacePoint::One, SurfacePoint::Meters);
+    cout << "   Y = ";
+    cout << spRec1.GetSigma(SurfacePoint::Rectangular, SurfacePoint::Two, SurfacePoint::Meters);
+    cout << "   Z = ";
+    cout << spRec1.GetSigma(SurfacePoint::Rectangular, SurfacePoint::Three, SurfacePoint::Meters);
+    cout << endl;
+
+    cout << "Using GetSigmaDistance, Rectangular sigmas meters:  "  << "X= ";
+    cout << spRec1.GetSigmaDistance(SurfacePoint::Rectangular, SurfacePoint::One).meters();
+    cout << "   Y = ";
+    cout << spRec1.GetSigmaDistance(SurfacePoint::Rectangular, SurfacePoint::Two).meters();
+    cout << "   Z = ";
+    cout << spRec1.GetSigmaDistance(SurfacePoint::Rectangular, SurfacePoint::Three).meters();
+    cout << endl;
+    
+    cout << "Rectangular Weights kilometers:  "  << "X = "; 
+    cout << spRec1.GetWeight(SurfacePoint::Rectangular, SurfacePoint::One) <<  "  Y = " 
+             << spRec1.GetWeight(SurfacePoint::Rectangular, SurfacePoint::Two) << "  Z = " 
+             << spRec1.GetWeight(SurfacePoint::Rectangular, SurfacePoint::Three) << endl;
+
+    cout << "Latitudinal Coordinates radians:  "  << "Latitude= ";
+    cout << spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::One, SurfacePoint::Radians);
+    cout << "   Longitude = ";
+    cout << spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Two, SurfacePoint::Radians);
+    cout << "   Local Radius = ";
+    cout << spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Three,
+                            SurfacePoint::Kilometers);
+    cout << endl;
+
+    cout << "Latitudinal Coordinates degrees:  "  << "Latitude= ";
+    cout << spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::One, SurfacePoint::Degrees);
+    cout << "   Longitude = ";
+    cout << spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Two, SurfacePoint::Degrees);
+    cout << "   Local Radius = ";
+    cout << spRec1.GetCoord(SurfacePoint::Latitudinal, SurfacePoint::Three, SurfacePoint::Meters);
+    cout << endl;
+    
+    cout << "Latitudinal weight degrees:  "  << "Latitude= ";
+    cout << spRec1.GetWeight(SurfacePoint::Latitudinal, SurfacePoint::One);
+    cout << "   Longitude = ";
+    cout << spRec1.GetWeight(SurfacePoint::Latitudinal, SurfacePoint::Two);
+    cout << "   Local Radius = ";
+    cout << spRec1.GetWeight(SurfacePoint::Latitudinal, SurfacePoint::Three);
+    cout << endl << endl;
+   }
+   catch(Isis::IException &e) {
+    e.print();
+  }
+
+    // Test stringToCoordType and coordinateTypeToString
+    QString ctypeStr = "Latitudinal";
+    SurfacePoint::CoordinateType ctype = spRec1.stringToCoordinateType(ctypeStr);
+    cout << "Testing stringToCoordinateType with Latitudinal:  coordType = " << ctype << endl;
+    cout << "Testing coordinateTypeToString with coordType = 0:  coordTypeStr = " <<
+      spRec1.coordinateTypeToString(ctype)  << endl;
+    ctypeStr = "RectanGular";
+    ctype = spRec1.stringToCoordinateType(ctypeStr);
+    cout << "Testing stringToCoordinateType with Rectangular:  coordType = " << ctype << endl; 
+    cout << "Testing coordinateTypeToString with coordType = 1:  coordTypeStr = " << 
+         spRec1.coordinateTypeToString(ctype) << endl;
+    try {
+    // Test invalid coordinate type error condition
+      cout << endl;
+      cout << "Test invalid coordinate type error condition." << endl;
+      ctypeStr = "Garbage";
+      ctype = spRec1.stringToCoordinateType(ctypeStr);
+      cout << "Testing stringToCoordinateType with Garbage:  coordType = " << ctype << endl;
+   }
+   catch(Isis::IException &e) {
+     e.print();
+  }
+
+  cout << endl;
   cout << "Test computational methods..." << endl;
   cout << "  SphericalDistanceToPoint (i.e. haversine): ";
 
diff --git a/isis/src/base/objs/TProjection/TProjection.cpp b/isis/src/base/objs/TProjection/TProjection.cpp
index 7723af573e0ab6d330b6cb16de188de594dc9a41..456b4987db4e1836353a637cadd55decd4fa3324 100644
--- a/isis/src/base/objs/TProjection/TProjection.cpp
+++ b/isis/src/base/objs/TProjection/TProjection.cpp
@@ -1564,9 +1564,7 @@ namespace Isis {
       }
       if (!m_good) {
         minBorderX = Null;
-        minBorderY = minBorderX;
-        minBorderX = minBorderX;
-        minBorderY = minBorderX;
+        minBorderY = Null;
         return;
       }
     }
diff --git a/isis/src/base/objs/TProjection/TProjection.h b/isis/src/base/objs/TProjection/TProjection.h
index bd0fb3a69d9ddd702d39ada74cbc7b8c7d28650c..03f280e40a85e9dce4e5eb2ac1e61108b10639ff 100644
--- a/isis/src/base/objs/TProjection/TProjection.h
+++ b/isis/src/base/objs/TProjection/TProjection.h
@@ -166,16 +166,18 @@ namespace Isis {
    *   @history 2016-05-10 Jeannie Backer - Moved TargetRadii() methods to Target class.
    *   @history 2016-05-25 Jeannie Backer - Updated documentation. References #3877
    *   @history 2016-08-28 Kelvin Rodriguez - Removed redundant var=var lines
-   *                            causing warnings in clang. Part of porting to OS X 10.11.
+   *                           causing warnings in clang. Part of porting to OS X 10.11.
    *   @history 2016-12-28 Jeannie Backer - Added inLatitudeRange, and inLongitudeRange methods.
-   *                            References #3877
+   *                           References #3877
    *   @history 2017-06-26 Jesse Mapel - Added a new method to set the universal ground point
-   *                            without adjusting for the longitude domain. Fixes #2185.
+   *                           without adjusting for the longitude domain. Fixes #2185.
    *   @todo Continue to modify Projection class to comply with coding
    *         standards. Some of these include, but may not be limited to remove
    *         "Get" from methods GetX and GetY, change methods to lower camel
    *         case, add methods for RelativeScaleFactorLatitude and
    *         RelativeScaleFactorLongitude (see LambertAzimuthalEqualArea.cpp).
+   *   @history 2018-09-28 Kaitlyn Lee - Removed unnecessary lines of code that were
+   *                           causing build warnings on MacOS 10.13. References #5520.
    */
   class TProjection : public Projection {
     public:
diff --git a/isis/src/base/objs/Table/Table.h b/isis/src/base/objs/Table/Table.h
index 69adda0d670877570bd8dcb983b567f0e4b5b4da..84aa5634f2e4f2f2b27582129f428b345d41d7d1 100644
--- a/isis/src/base/objs/Table/Table.h
+++ b/isis/src/base/objs/Table/Table.h
@@ -70,6 +70,9 @@ namespace Isis {
    *   @history 2015-10-04 Jeannie Backer Improved coding standards. Uncommented error throw for
    *                           operator+=(record) that verifies that the record sizes match.
    *                           References #1178
+   *   @history 2018-08-13 Summer Stapleton - Added a default constructor for logic relating to the
+   *                           overhaul of the mosaic tracking now being handled in a separate 
+   *                           tracking cube.
    */
   class Table : public Isis::Blob {
     public:
@@ -84,6 +87,7 @@ namespace Isis {
       };
 
       // Constructors and Destructors
+      Table();
       Table(const QString &tableName, TableRecord &rec);
       Table(const QString &tableName);// Only use this constructor for reading in an existing table
       Table(const QString &tableName, const QString &file);
diff --git a/isis/src/base/objs/TableField/unitTest.cpp b/isis/src/base/objs/TableField/unitTest.cpp
index 202a90b53ca3eb469f3301222fbff8116ea1ddb7..98bc41e9788a638fd52cea7cc61035353a3efbfb 100644
--- a/isis/src/base/objs/TableField/unitTest.cpp
+++ b/isis/src/base/objs/TableField/unitTest.cpp
@@ -224,13 +224,13 @@ int main(int argc, char *argv[]) {
   try {
     cout << int(dblSingletonField) << endl; // try to cast a non-Integer type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     cout << int(intVectorField3); // try to cast an Integer type with multiple values
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -239,13 +239,13 @@ int main(int argc, char *argv[]) {
   try {
     cout << double(textField); // try to cast a non-Double type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     cout << double(dblVectorField3); // try to cast a Double type with multiple values
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -254,7 +254,7 @@ int main(int argc, char *argv[]) {
   try {
     cout << QString(realSingletonField); // try to cast a non-Text type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -263,13 +263,13 @@ int main(int argc, char *argv[]) {
   try {
     cout << float(intSingletonField); // try to cast a non-Real type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     cout << float(realVectorField3); // try to cast a Real type with multiple values
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -278,7 +278,7 @@ int main(int argc, char *argv[]) {
   try {
     vector<int> error = dblSingletonField; // try to cast a non Integer type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -287,7 +287,7 @@ int main(int argc, char *argv[]) {
   try {
     vector<double> error = realSingletonField; // try to cast a non Double type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -296,7 +296,7 @@ int main(int argc, char *argv[]) {
   try {
     vector<float> error = intVectorField3; // try to cast a non Real type
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -306,13 +306,13 @@ int main(int argc, char *argv[]) {
   try {
     realSingletonField = (int) 1; // try to set Real type to non-float value
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     intVectorField3 = (int) 1; // try to set single value to vector Field
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -321,13 +321,13 @@ int main(int argc, char *argv[]) {
   try {
     intSingletonField = (double) 3.14; // try to set Integer type to non-integer value
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     dblVectorField3 = (double) 3.14; // try to set single value to vector Field
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -336,7 +336,7 @@ int main(int argc, char *argv[]) {
   try {
     dblSingletonField = "Error"; // try to set Double type to non-double value
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -345,13 +345,13 @@ int main(int argc, char *argv[]) {
   try {
     textField = (float) 3.14; // try to set Text type to non-string value
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     realVectorField3 = (float) 3.14; // try to set single value to vector Field
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -364,13 +364,13 @@ int main(int argc, char *argv[]) {
   try {
     intVectorField3 = intVector2; // try to set wrong size vector
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     realVectorField3 = intVector2;  // try to set float vector to intVector
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -379,13 +379,13 @@ int main(int argc, char *argv[]) {
   try {
     dblVectorField3 = doubleVector2; // try to set wrong size vector
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     intVectorField3 = doubleVector2;  // try to set int vector to double vector
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
@@ -394,13 +394,13 @@ int main(int argc, char *argv[]) {
   try {
     realVectorField3 = floatVector2;  // try to set wrong size vector
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   try {
     dblVectorField3 = floatVector2;  // try to set double vector to float vector
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
   cout << "----------------------------------------" << endl << endl;
diff --git a/isis/src/base/objs/Target/Target.cpp b/isis/src/base/objs/Target/Target.cpp
index 88c6663d38046a3c3a110f161b5de0468c119c12..62ebc1928ac888d0efacd9ea911df6a814c73a8f 100644
--- a/isis/src/base/objs/Target/Target.cpp
+++ b/isis/src/base/objs/Target/Target.cpp
@@ -196,19 +196,21 @@ namespace Isis {
     }
     catch (IException &e) {
       try {
+        // Get body code from Isis Naif object if it exists or Naif data pool
         if (m_spice) {
-          code = m_spice->getInteger("BODY_FRAME_CODE", 0);
+          code = m_spice->getInteger("BODY_CODE", 0);
           return code;
         }
+        // getInteger automatically calls Spice::readValue which looks in the NaifKeywords
         else if (lab.hasObject("NaifKeywords") 
-                 && lab.findObject("NaifKeywords").hasKeyword("BODY_FRAME_CODE") ) {
-          code = int(lab.findObject("NaifKeywords").findKeyword("BODY_FRAME_CODE"));
+                 && lab.findObject("NaifKeywords").hasKeyword("BODY_CODE") ) {
+          code = int(lab.findObject("NaifKeywords").findKeyword("BODY_CODE"));
           return code;
         }
         else {
           throw IException(e, 
                            IException::Unknown, 
-                           "BODY_FRAME_CODE not found for this Target.", 
+                           "BODY_CODE not found for this Target.", 
                            _FILEINFO_);
         }
       }
@@ -272,7 +274,7 @@ namespace Isis {
     }
  
     // If radii values are not in the given mapping group, we will get the target from the mapping
-    // group or cube label and attempt use NAIF routines to find the radii.
+    // group or cube label and attempt to use NAIF routines to find the radii.
     QString target = "";
     try {
       if (mapping.hasKeyword("TargetName")) {
@@ -313,15 +315,39 @@ namespace Isis {
       // If all previous attempts fail, look for the radii using the body frame
       // code in the NaifKeywords object.
       // Note: We will only look in the given label for the values after SPICELIB 
-      // routines have failed to preserve backwards compatibility (since this
+      // routines have failed, to preserve backwards compatibility (since this
       // label check is new).
       if (cubeLab.hasObject("NaifKeywords")) {
 
         PvlObject naifKeywords = cubeLab.findObject("NaifKeywords");
-
+        
+        // Try using the target bodycode_RADII keyword in the NaifKeywords PVL object
+        
         try {
+          
+          SpiceInt bodyCode = 0;
+          try {
+            // Try using the target bodycode_RADII keyword in the NaifKeywords PVL object
+            bodyCode = lookupNaifBodyCode(target);
+          }
+          catch (IException &e2) {
+            throw IException(e, IException::Unknown, e2.what(), _FILEINFO_);
+          }
+          QString radiiKeyword = "BODY" + toString(int(bodyCode)) + "_RADII";
 
-          // Try using the value of the BODY_FRAME_CODE keyword in the NaifKeywords PVL object
+          if (naifKeywords.hasKeyword(radiiKeyword)) {
+            PvlKeyword radii =  naifKeywords.findKeyword(radiiKeyword);
+            mapping.addKeyword( PvlKeyword("EquatorialRadius",
+                                           toString(toDouble(radii[0]) * 1000.0), "meters"),
+                                PvlContainer::Replace);
+            mapping.addKeyword( PvlKeyword("PolarRadius",
+                                           toString(toDouble(radii[2]) * 1000.0), "meters"),
+                                PvlContainer::Replace);
+            return mapping;
+          }
+        }
+        catch (IException &e) {
+        // Try using the value of the BODY_FRAME_CODE keyword in the NaifKeywords PVL object
           if (naifKeywords.hasKeyword("BODY_FRAME_CODE")) {
 
             PvlKeyword bodyFrame = naifKeywords.findKeyword("BODY_FRAME_CODE");
@@ -339,40 +365,6 @@ namespace Isis {
                                   PvlContainer::Replace);
               return mapping;
             }
-            // Try getting the radii using the BODY_FRAME_CODE with SPICELIB
-            else {
-              PvlGroup radiiGroup = Target::radiiGroup(toInt(bodyFrame[0]));
-              // Now APPEND the EquatorialRadius and PolorRadius
-              mapping.addKeyword( radiiGroup.findKeyword("EquatorialRadius"), PvlContainer::Replace);
-              mapping.addKeyword( radiiGroup.findKeyword("PolarRadius"),      PvlContainer::Replace);
-              return mapping;
-
-
-            }
-          }
-        }
-        catch (IException &e) {
-
-          // Try using the BODYbodycode_RADII keyword in the NaifKeywords PVL object
-          SpiceInt bodyCode = 0;
-          try {
-            bodyCode = lookupNaifBodyCode(target);
-          }
-          catch (IException &e2) {
-            throw IException(e, IException::Unknown, e2.what(), _FILEINFO_);
-          }
-
-          QString radiiKeyword = "BODY" + toString(int(bodyCode)) + "_RADII";
-
-          if (naifKeywords.hasKeyword(radiiKeyword)) {
-            PvlKeyword radii =  naifKeywords.findKeyword(radiiKeyword);
-            mapping.addKeyword( PvlKeyword("EquatorialRadius",
-                                           toString(toDouble(radii[0]) * 1000.0), "meters"),
-                                           PvlContainer::Replace);
-            mapping.addKeyword( PvlKeyword("PolarRadius",
-                                           toString(toDouble(radii[2]) * 1000.0), "meters"),
-                                           PvlContainer::Replace);
-            return mapping;
           }
         }
       }
@@ -414,9 +406,9 @@ namespace Isis {
     }
     else {
 
-      SpiceInt bodyFrame = 0;
+      SpiceInt bodyCode = 0;
       try {
-        bodyFrame = lookupNaifBodyCode(target);
+        bodyCode = lookupNaifBodyCode(target);
       }
       catch (IException &e) {
         QString msg = "Unable to find target radii for given target [" 
@@ -424,7 +416,7 @@ namespace Isis {
         throw IException(IException::Io, msg, _FILEINFO_);
       }
 
-      PvlGroup radiiGroup = Target::radiiGroup(int(bodyFrame));
+      PvlGroup radiiGroup = Target::radiiGroup(int(bodyCode));
       mapping += PvlKeyword("TargetName",  target);
       mapping += radiiGroup.findKeyword("EquatorialRadius");
       mapping += radiiGroup.findKeyword("PolarRadius");
@@ -437,7 +429,7 @@ namespace Isis {
 
   /**
    * Convenience method called by the public radii() methods to 
-   * compute the target radii using a body frame code recognized by NAIF. 
+   * compute the target radii using a body code recognized by NAIF. 
    *  
    * The PVL group contains only the EquatorialRadius and PolarRadius 
    * keywords. This group does not contain the Target keyword. 
@@ -446,7 +438,7 @@ namespace Isis {
    *  
    * @return PvlGroup containing EquatorialRadius and PolarRadius keywords. 
    */
-  PvlGroup Target::radiiGroup(int bodyFrameCode) {
+  PvlGroup Target::radiiGroup(int bodyCode) {
 
     // Load the most recent target attitude and shape kernel for NAIF
     static bool pckLoaded = false;
@@ -465,13 +457,13 @@ namespace Isis {
     // Get the radii from NAIF
     SpiceInt n;
     SpiceDouble radii[3];
-    bodvar_c(bodyFrameCode, "RADII", &n, radii);
+    bodvar_c(bodyCode, "RADII", &n, radii);
     
     try {
       NaifStatus::CheckErrors();
     }
     catch (IException &e) {
-      QString msg = "Unable to find radii for target code [" + toString(bodyFrameCode)
+      QString msg = "Unable to find radii for target code [" + toString(bodyCode)
                     + "]. Target code was not found in furnished kernels.";
     
       throw IException(e, IException::Unknown, msg, _FILEINFO_);
diff --git a/isis/src/base/objs/Target/Target.h b/isis/src/base/objs/Target/Target.h
index 7c488937a522054abee386a66c4eb3938fa385d4..1cd41059702552339d0b5817d9fd4f67e6619426 100644
--- a/isis/src/base/objs/Target/Target.h
+++ b/isis/src/base/objs/Target/Target.h
@@ -62,6 +62,16 @@ namespace Isis {
    *  @history 2017-08-14 Stuart Sides - Added the ability to use a target code and the
    *                          NaifKeywords to find the radii. Added so osirisrex and spicelib v66.
    *                          References #4947.
+   *  @history 2018-10-02 Debbie A. Cook - Fixed method lookupNaifBodyCode to look
+   *                          up the Naif body code instead of the Naif body frame code.  We may
+   *                          need to add a method to look up the Naif body frame code as well.
+   *                          Also moved the try loop attempting to find the radii tagged with the
+   *                          Naif body code ahead of the try loop that attempts to find the radii 
+   *                           tagged with the body frame code in the method radiiGroup.  Fixed
+   *                           any mention of Naif body frame code that should be Naif body code.
+   *                           These are not the same.  Naif tags the body radii keyword with the
+   *                           Naif body code.  The Naif body frame code refers to the orientation
+   *                           (SpiceRotation) of the body.  References #4649 and #501.
    */
   class Target {
 
diff --git a/isis/src/base/objs/Target/Target.truth b/isis/src/base/objs/Target/Target.truth
index 950cba674a0bd70be34bbaf7c9ed5e026308dd0f..d824e2aca4a39d8bcf6bf317f02de9c534bca9e7 100644
--- a/isis/src/base/objs/Target/Target.truth
+++ b/isis/src/base/objs/Target/Target.truth
@@ -27,7 +27,7 @@ Unit test for Isis::Target
   Testing unknown target ...
 **ERROR** Unable to look up NAIF body code for this Target.
 **I/O ERROR** Could not convert Target [Mard] to NAIF body code.
-**ERROR** BODY_FRAME_CODE not found for this Target.
+**ERROR** BODY_CODE not found for this Target.
 **I/O ERROR** Could not convert Target [Mard] to NAIF body code.
 
 
@@ -191,9 +191,8 @@ End_Group
 
 RETURNS: 
 
-**ERROR** **I/O ERROR** Could not convert Target [Chewbaca] to NAIF body code.
-**ERROR** Unable to find radii for target code [2101955]. Target code was not found in furnished kernels.
-**ERROR** An unknown NAIF error has been encountered. The short explanation provided by NAIF is [SPICE(KERNELVARNOTFOUND)]. The Naif error is [The variable BODY2101955_RADII could not be found in the kernel pool.].
+**ERROR** Unable to find Equatorial and Polar radii for target [Chewbaca].
+**I/O ERROR** Unable to find target radii for given target [Chewbaca].
 -------------------------------
 
 -------------------------------
diff --git a/isis/src/base/objs/TiffImporter/TiffImporter.truth b/isis/src/base/objs/TiffImporter/TiffImporter.truth
index 07c04d3c5cd79cf97973e354e75a75fee1ef7827..e0283604cc4834a0d8e7258343547b5e4f192204 100644
--- a/isis/src/base/objs/TiffImporter/TiffImporter.truth
+++ b/isis/src/base/objs/TiffImporter/TiffImporter.truth
@@ -2,8 +2,6 @@ Testing TiffImporter...
 
 Creating Instance
 Importing
-Working
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Clean-up
 
 Done
diff --git a/isis/src/control/objs/ControlCubeGraphNode/Makefile b/isis/src/base/objs/TrackingTable/Makefile
similarity index 100%
rename from isis/src/control/objs/ControlCubeGraphNode/Makefile
rename to isis/src/base/objs/TrackingTable/Makefile
diff --git a/isis/src/base/objs/TrackingTable/TrackingTable.cpp b/isis/src/base/objs/TrackingTable/TrackingTable.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..798052e60b2de1c73f35da075ce5eaa909f375df
--- /dev/null
+++ b/isis/src/base/objs/TrackingTable/TrackingTable.cpp
@@ -0,0 +1,228 @@
+/**
+ * @file
+ * $Revision: 1.4 $
+ * $Date: 2010/05/14 19:17:09 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are public
+ *   domain. See individual third-party library and package descriptions for
+ *   intellectual property information,user agreements, and related information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or implied,
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
+ *   therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
+ *   the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include "TrackingTable.h"
+
+#include <QList>
+#include <QString>
+
+#include "FileName.h"
+#include "IException.h"
+#include "Pvl.h"
+#include "SpecialPixel.h"
+#include "Table.h"
+#include "TableField.h"
+#include "TableRecord.h"
+
+using namespace std;
+namespace Isis {
+
+
+  /**
+  * Default constructor
+  */
+  TrackingTable::TrackingTable() {
+
+  }
+
+
+  /**
+  * Constructs a TrackingTable given a Table object. The Table is used to populate
+  *         m_fileList.
+  *
+  * @param table The Table object to pull the filenames and serial numbers from
+  */
+  TrackingTable::TrackingTable(Table table) {
+
+    for (int i=0; i < table.Records(); i++) {
+      TableRecord record = table[i];
+      QString nameField = QString(record["FileName"]).split("/").last();
+      QString extension(FileName(nameField).extension());
+      int found = nameField.lastIndexOf(extension);
+      if (found != -1) {
+        // clear the packing characters - get only the file name
+        nameField.remove(found + 3);
+      }
+      FileName fileName(nameField);
+      QString serialNumber = QString(record["SerialNumber"]);
+      m_fileList.append(QPair<FileName, QString>(fileName, serialNumber));
+    }
+  }
+
+
+  /**
+  * Destroys the TrackingTable object
+  */
+  TrackingTable::~TrackingTable() {
+
+  }
+
+
+  /**
+  * Constrcts and returns a Table object based on values in m_fileList.
+  *
+  * @return Table The constructed table to be returned
+  */
+  Table TrackingTable::toTable() {
+
+    // Begin by establishing the length of the fields within the table. This would be the longest
+    // length that is needed to be stored.
+    int fieldLength = 0;
+
+    for (int i=0; i < m_fileList.size(); i++) {
+      if (m_fileList[i].first.name().length() > fieldLength) {
+        fieldLength = m_fileList[i].first.name().length();
+      }
+      if (m_fileList[i].second.length() > fieldLength) {
+        fieldLength = m_fileList[i].second.length();
+      }
+    }
+
+    // This record is never being used. It is simply to construct the Table object.
+    TableRecord dummyRecord;
+    TableField fileNameField("FileName", TableField::Text, fieldLength);
+    TableField serialNumberField("SerialNumber", TableField::Text, fieldLength);
+    TableField indexField("PixelValue", TableField::Integer);
+    dummyRecord += fileNameField;
+    dummyRecord += serialNumberField;
+    dummyRecord += indexField;
+    Table table(trackingTableName, dummyRecord);
+
+    // Loop through m_fileList and add records to the table with the proper information.
+    for (int i=0; i < m_fileList.size(); i++) {
+
+      fileNameField = m_fileList[i].first.name();
+      serialNumberField = m_fileList[i].second;
+      indexField = (int) (i + VALID_MINUI4);
+
+      TableRecord record;
+      record += fileNameField;
+      record += serialNumberField;
+      record += indexField;
+
+      table += record;
+
+    }
+
+    return table;
+  }
+
+
+  /**
+  * Returns the FileName that corresponds to a pixel value.
+  *
+  * @param pixel The pixel value to find the filename for
+  * @returns @b FileName The FileName represented by the pixel value
+  */
+  FileName TrackingTable::pixelToFileName(unsigned int pixel) {
+    if (pixel < VALID_MINUI4) {
+      QString msg = "Cannot convert pixel [" + toString(pixel)
+                  + "] to a filename, pixel is below valid minimum ["
+                  + toString(VALID_MINUI4) + "].";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    unsigned int index = pixel - VALID_MINUI4;
+    if (index >= (unsigned int)m_fileList.size()) {
+      QString msg = "Cannot convert pixel [" + toString(pixel)
+                  + "] to a filename, pixel is above valid maximum ["
+                  + toString(VALID_MINUI4 + m_fileList.size()) + "].";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    return m_fileList[index].first;
+  }
+
+
+  /**
+  * Returns the pixel value of the filename/serialnumber combination.
+  *
+  * @param file The FileName within m_fileList to find the pixel value of
+  * @param serialNumber The QString of the serial number within m_fileList
+  *                     to find the pixel value of
+  *
+  * @return  @b unsigned  @b int The pixel value corresponding to the
+  *                              filename/serialnumber combination
+  */
+  unsigned int TrackingTable::fileNameToPixel(FileName file, QString serialNumber) {
+    for (int i = 0; i < m_fileList.size(); i++) {
+      if (QString::compare(m_fileList[i].first.toString(), file.name()) == 0) {
+        return i + VALID_MINUI4;
+      }
+    }
+
+    // At this point, the file is not in the internal file list so append it
+    // and return its new index.
+    m_fileList.append(QPair<FileName, QString>(file, serialNumber));
+    return m_fileList.size() - 1 + VALID_MINUI4;
+  }
+
+
+  /**
+  * Returns the serial number that corresponds to a pixel value.
+  *
+  * @param pixel The pixel value to find the serial number for
+  * @returns @b QString The serial number represented by the pixel value
+  */
+  QString TrackingTable::pixelToSN(unsigned int pixel) {
+    if (pixel < VALID_MINUI4) {
+      QString msg = "Cannot convert pixel [" + toString(pixel)
+                  + "] to a serial number, pixel is below valid minimum ["
+                  + toString(VALID_MINUI4) + "].";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    unsigned int index = pixel - VALID_MINUI4;
+    if (index >= (unsigned int)m_fileList.size()) {
+      QString msg = "Cannot convert pixel [" + toString(pixel)
+                  + "] to a serial number, pixel is above valid maximum ["
+                  + toString(VALID_MINUI4 + m_fileList.size()) + "].";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    return m_fileList[index].second;
+  }
+
+
+  /**
+  * Returns the index of the filename/serialnumber combination.
+  *
+  * @param file The FileName within m_fileList to find the index of
+  * @param serialNumber The QString of the serial number within m_fileList
+  *                     to find the index of
+  *
+  * @return @b int The index corresponding to the
+  *                              filename/serialnumber combination
+  */
+  int TrackingTable::fileNameToIndex(FileName file, QString serialNumber) {
+    for (int i = 0; i < m_fileList.size(); i++) {
+      if (m_fileList[i].first == file) {
+        return i;
+      }
+    }
+
+    // At this point, the file is not in the internal file list so append it
+    // and return its new index.
+    m_fileList.append(QPair<FileName, QString>(file, serialNumber));
+    return m_fileList.size() - 1;
+  }
+}
diff --git a/isis/src/base/objs/TrackingTable/TrackingTable.h b/isis/src/base/objs/TrackingTable/TrackingTable.h
new file mode 100644
index 0000000000000000000000000000000000000000..3bf853f57bba8ac8ff023491c38a0d4d4b6dafa8
--- /dev/null
+++ b/isis/src/base/objs/TrackingTable/TrackingTable.h
@@ -0,0 +1,79 @@
+#ifndef TrackingTable_h
+#define TrackingTable_h
+/**
+ * @file
+ * $Revision: 1.3 $
+ * $Date: 2010/05/14 19:17:09 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are public
+ *   domain. See individual third-party library and package descriptions for
+ *   intellectual property information,user agreements, and related information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or implied,
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
+ *   therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
+ *   the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include "FileName.h"
+#include "Pvl.h"
+#include "Table.h"
+
+#include <QList>
+#include <QString>
+
+
+namespace Isis {
+
+  const QString trackingTableName = "InputImages";
+
+  /**
+   * Table to store tracking information for a mosaic.
+   *
+   * This table will currently be stored in the label of a separate cube. This tracking cube will
+   * also contain a single tracking band. The DN values stored in this band will correlate to the
+   * indices in this table. Each record within this table will contain the filename of an
+   * associated cube, that cube's serial number, and the DN value associated with this cube within
+   * the tracking band (which should also be its index in the table).
+   *
+   * @author 2018-07-19 Jesse Mapel & Summer Stapleton
+   *
+   * @internal
+   *   @history 2018-07-26 Jesse Mapel - Added offset based on minimum unsigned integer value.
+   *                           Renamed methods to better convey output/input meaning.
+   *   @history 2018-07-30 Kaitlyn Lee - Added pixelToSN() and fileNameToIndex().
+   */
+  class TrackingTable{
+
+    public:
+
+      TrackingTable();
+
+      TrackingTable(Table table);
+
+      ~TrackingTable();
+
+      Table toTable();
+
+      FileName pixelToFileName(unsigned int pixel);
+
+      unsigned int fileNameToPixel(FileName file, QString serialNumber);
+
+      int fileNameToIndex(FileName file, QString serialNumber);
+
+      QString pixelToSN(unsigned int pixel);
+
+    private:
+
+      QList< QPair< FileName, QString > > m_fileList;   //!< The list to keep track of images
+  };
+};
+
+#endif
diff --git a/isis/src/base/objs/TrackingTable/TrackingTable.truth b/isis/src/base/objs/TrackingTable/TrackingTable.truth
new file mode 100644
index 0000000000000000000000000000000000000000..dc406f466d2070a1ec30c60396f42fca2f8839fe
--- /dev/null
+++ b/isis/src/base/objs/TrackingTable/TrackingTable.truth
@@ -0,0 +1,48 @@
+Unit test for TrackingTable
+
+
+Testing default constructor ...
+Record added: fileName1.cub, 1
+
+Testing constructor with a Table object ...
+Constructing Table ...
+First record : fileName1.cub, 1234567890
+Second record: fileName2.cub, 123
+Third record : fileName3.dat, 456789
+TrackingTable object created
+
+Testing the pixelToFileName method ...
+FileName with pixel value 2: FileName with pixel value 2 does not exist and an exception is thrown.
+**PROGRAMMER ERROR** Cannot convert pixel [2] to a filename, pixel is below valid minimum [3].
+FileName with pixel value 3: fileName1.cub
+FileName with pixel value 4: fileName2.cub
+FileName with pixel value 5: fileName3.dat
+FileName with pixel value 6: FileName with pixel value 6 does not exist and an exception is thrown.
+**PROGRAMMER ERROR** Cannot convert pixel [6] to a filename, pixel is above valid maximum [6].
+
+Testing the fileNameToPixel method ...
+Pixel value of FileName fileName1.cub: 3
+Pixel value of FileName fileName2.cub: 4
+Pixel value of FileName fileName3.cub: 5
+Pixel value of the non-existent FileName fileName4.cub (demonstrating its addition): 6
+
+Testing the toTable method ...
+First record : fileName1.cub, 1234567890, 3
+Second record: fileName2.cub, 123, 4
+Third record : fileName3.dat, 456789, 5
+Fourth record: fileName4.cub, 12345678901234567890, 6
+
+Creating a new TrackingTable object with the table returned from toTable method ...
+New TrackingTable object created
+
+Verifying that the pixel values are the same ...
+Pixel value of FileName fileName1.cub: 3
+Pixel value of FileName fileName2.cub: 4
+Pixel value of FileName fileName3.cub: 5
+Pixel value of FileName fileName4.cub: 6
+
+Testing that the Table returned from toTable on new TrackingTable matches ...
+First record : fileName1.cub, 1234567890, 3
+Second record: fileName2.cub, 123, 4
+Third record : fileName3.dat, 456789, 5
+Fourth record: fileName4.cub, 12345678901234567890, 6
diff --git a/isis/src/base/objs/TrackingTable/TrackingTable_Linux_x86_64_CentOS7.truth b/isis/src/base/objs/TrackingTable/TrackingTable_Linux_x86_64_CentOS7.truth
new file mode 100644
index 0000000000000000000000000000000000000000..d85e264a407c3c84c5c045c8bbf83a272e7a27b7
--- /dev/null
+++ b/isis/src/base/objs/TrackingTable/TrackingTable_Linux_x86_64_CentOS7.truth
@@ -0,0 +1,48 @@
+Unit test for TrackingTable
+
+
+Testing default constructor ...
+Record added: fileName1.cub, 1
+
+Testing constructor with a Table object ...
+Constructing Table ...
+First record : fileName1.cub, 1234567890
+Second record: fileName2.cub, 123
+Third record : fileName3.dat, 456789
+TrackingTable object created
+
+Testing the pixelToFileName method ...
+FileName with pixel value 2 does not exist and an exception is thrown.
+**PROGRAMMER ERROR** Cannot convert pixel [2] to a filename, pixel is below valid minimum [3].
+FileName with pixel value 3: fileName1.cub
+FileName with pixel value 4: fileName2.cub
+FileName with pixel value 5: fileName3.dat
+FileName with pixel value 6 does not exist and an exception is thrown.
+**PROGRAMMER ERROR** Cannot convert pixel [6] to a filename, pixel is above valid maximum [6].
+
+Testing the fileNameToPixel method ...
+Pixel value of FileName fileName1.cub: 3
+Pixel value of FileName fileName2.cub: 4
+Pixel value of FileName fileName3.cub: 5
+Pixel value of the non-existent FileName fileName4.cub (demonstrating its addition): 6
+
+Testing the toTable method ...
+First record : fileName1.cub, 1234567890, 3
+Second record: fileName2.cub, 123, 4
+Third record : fileName3.dat, 456789, 5
+Fourth record: fileName4.cub, 12345678901234567890, 6
+
+Creating a new TrackingTable object with the table returned from toTable method ...
+New TrackingTable object created
+
+Verifying that the pixel values are the same ...
+Pixel value of FileName fileName1.cub: 3
+Pixel value of FileName fileName2.cub: 4
+Pixel value of FileName fileName3.cub: 5
+Pixel value of FileName fileName4.cub: 6
+
+Testing that the Table returned from toTable on new TrackingTable matches ...
+First record : fileName1.cub, 1234567890, 3
+Second record: fileName2.cub, 123, 4
+Third record : fileName3.dat, 456789, 5
+Fourth record: fileName4.cub, 12345678901234567890, 6
diff --git a/isis/src/base/objs/TrackingTable/unitTest.cpp b/isis/src/base/objs/TrackingTable/unitTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..49315820153e3a245281b01100e9d8daed521458
--- /dev/null
+++ b/isis/src/base/objs/TrackingTable/unitTest.cpp
@@ -0,0 +1,168 @@
+#include <iostream>
+
+#include "IException.h"
+#include "Preference.h"
+#include "Table.h"
+#include "TableField.h"
+#include "TableRecord.h"
+#include "TrackingTable.h"
+
+using namespace Isis;
+using namespace std;
+
+int main(int argc, char *argv[]) {
+
+  Preference::Preferences(true);
+
+  try{
+    cout << "Unit test for TrackingTable\n" << endl;
+
+    cout << endl;
+
+
+    cout << "Testing default constructor ..." << endl;
+
+    TrackingTable trackingTable1;
+
+    trackingTable1.fileNameToPixel("fileName1.cub", "1");
+
+    Table tableOut1 = trackingTable1.toTable();
+
+    cout << "Record added: " << QString(tableOut1[0][0]) << ", " << QString(tableOut1[0][1]) << endl;
+
+    cout << endl;
+
+
+    cout << "Testing constructor with a Table object ..." << endl;
+
+    cout << "Constructing Table ..." << endl;
+
+    TableField fileNameField("FileName", TableField::Text, 50);
+    TableField serialNumberField("SerialNumber", TableField::Text, 50);
+
+    TableRecord record;
+    record += fileNameField;
+    record += serialNumberField;
+    Table tableIn("TestingTable", record);
+
+    record[0] = "fileName1.cub";
+    record[1] = "1234567890";
+    tableIn += record;
+
+    record[0] = "fileName2.cub";
+    record[1] = "123";
+    tableIn += record;
+
+    record[0] = "fileName3.dat";
+    record[1] = "456789";
+    tableIn += record;
+
+    cout << "First record : " << QString(tableIn[0][0]) << ", " << QString(tableIn[0][1]) << endl;
+    cout << "Second record: " << QString(tableIn[1][0]) << ", " << QString(tableIn[1][1]) << endl;
+    cout << "Third record : " << QString(tableIn[2][0]) << ", " << QString(tableIn[2][1]) << endl;
+
+    TrackingTable trackingTable2(tableIn);
+
+    cout << "TrackingTable object created" << endl;
+
+    cout << endl;
+
+
+    cout << "Testing the pixelToFileName method ..." << endl;
+
+    for (int i = 2; i < 7; i++) {
+      try {
+        cout << "FileName with pixel value " << i << ": "
+             << trackingTable2.pixelToFileName(i).name() << endl;
+      }
+      catch (IException &e) {
+        cout << "FileName with pixel value " << i
+             << " does not exist and an exception is thrown." << endl;
+        e.print();
+      }
+    }
+
+    cout << endl;
+
+
+    cout << "Testing the fileNameToPixel method ..." << endl;
+
+    cout << "Pixel value of FileName fileName1.cub: "
+           << trackingTable2.fileNameToPixel("fileName1.cub", "1234567890") << endl;
+    cout << "Pixel value of FileName fileName2.cub: "
+           << trackingTable2.fileNameToPixel("fileName2.cub", "123") << endl;
+    cout << "Pixel value of FileName fileName3.cub: "
+           << trackingTable2.fileNameToPixel("fileName3.dat", "456789") << endl;
+    cout << "Pixel value of the non-existent FileName fileName4.cub (demonstrating its addition): "
+           << trackingTable2.fileNameToPixel("fileName4.cub", "12345678901234567890") << endl;
+
+    cout << endl;
+
+
+    cout << "Testing the toTable method ..." << endl;
+
+    Table tableOut2 = trackingTable2.toTable();
+
+    cout << "First record : " << QString(tableOut2[0][0]) << ", "
+                              << QString(tableOut2[0][1]) << ", "
+                              << int(tableOut2[0][2]) << endl;
+    cout << "Second record: " << QString(tableOut2[1][0]) << ", "
+                              << QString(tableOut2[1][1]) << ", "
+                              << int(tableOut2[1][2]) << endl;
+    cout << "Third record : " << QString(tableOut2[2][0]) << ", "
+                              << QString(tableOut2[2][1]) << ", "
+                              << int(tableOut2[2][2]) << endl;
+    cout << "Fourth record: " << QString(tableOut2[3][0]) << ", "
+                              << QString(tableOut2[3][1]) << ", "
+                              << int(tableOut2[3][2]) << endl;
+
+    cout << endl;
+
+
+    cout << "Creating a new TrackingTable object with the table returned from toTable method ..." << endl;
+
+    TrackingTable trackingTable3(tableOut2);
+
+    cout << "New TrackingTable object created" << endl;
+
+    cout << endl;
+
+    cout << "Verifying that the pixel values are the same ..." << endl;
+
+    cout << "Pixel value of FileName fileName1.cub: "
+         << trackingTable3.fileNameToPixel("fileName1.cub", "1234567890") << endl;
+    cout << "Pixel value of FileName fileName2.cub: "
+         << trackingTable3.fileNameToPixel("fileName2.cub", "123") << endl;
+    cout << "Pixel value of FileName fileName3.cub: "
+         << trackingTable3.fileNameToPixel("fileName3.dat", "456789") << endl;
+    cout << "Pixel value of FileName fileName4.cub: "
+         << trackingTable3.fileNameToPixel("fileName4.cub", "12345678901234567890") << endl;
+
+    cout << endl;
+
+
+    cout << "Testing that the Table returned from toTable on new TrackingTable matches ..." << endl;
+
+    Table tableOut3 = trackingTable3.toTable();
+
+    cout << "First record : " << QString(tableOut3[0][0]) << ", "
+                              << QString(tableOut3[0][1]) << ", "
+                              << int(tableOut3[0][2]) << endl;
+    cout << "Second record: " << QString(tableOut3[1][0]) << ", "
+                              << QString(tableOut3[1][1]) << ", "
+                              << int(tableOut3[1][2]) << endl;
+    cout << "Third record : " << QString(tableOut3[2][0]) << ", "
+                              << QString(tableOut3[2][1]) << ", "
+                              << int(tableOut3[2][2]) << endl;
+    cout << "Fourth record: " << QString(tableOut3[3][0]) << ", "
+                              << QString(tableOut3[3][1]) << ", "
+                              << int(tableOut3[3][2]) << endl;
+
+  }
+  catch (IException &e) {
+    cout << "Unit test failed." << endl;
+    e.print();
+  }
+
+
+}
diff --git a/isis/src/base/objs/UserInterface/UserInterface.cpp b/isis/src/base/objs/UserInterface/UserInterface.cpp
index 1492a6f720a1785b561a54d979d844572c87c043..aa1f8b2ef68c38e71fdcf7f3d58372b7bccd28ba 100644
--- a/isis/src/base/objs/UserInterface/UserInterface.cpp
+++ b/isis/src/base/objs/UserInterface/UserInterface.cpp
@@ -101,7 +101,7 @@ namespace Isis {
     return p_infoFileName;
   }
 
-  
+
   /**
    * This method returns the flag state of info. This returns if
    * its in debugging mode(the -info tag was specified).
@@ -118,7 +118,7 @@ namespace Isis {
    * the new parameters
    *
    * @param i The line number to retrieve parameter information from
-   * 
+   *
    * @throws Isis::IException::User - Invalid command line
    */
   void UserInterface::SetBatchList(int i) {
@@ -139,7 +139,7 @@ namespace Isis {
 
       try {
         getNextParameter(currArgument, paramName, paramValue);
-    
+
         if (paramName[0] == '-')
           continue;
 
@@ -174,7 +174,7 @@ namespace Isis {
       catch (IException &e) {
         throw IException(IException::User, "Invalid command line", _FILEINFO_);
       }
-     
+
       PutAsString(paramName, paramValue);
 
       cout << paramName;
@@ -201,14 +201,14 @@ namespace Isis {
     VerifyAll();
   }
 
-  
+
   /**
    * This method adds the line specified in the BatchList that the error occured
    * on.  The BatchList line is added exactly as it is seen, so the BatchList
    * command can be run on the errorlist file created.
    *
    * @param i The line of the batchlist to write to the error file
-   * 
+   *
    * @throws Isis::IException::User - Unable to create error list - Disk may be full or
    *                                  directory permissions not writeable
    */
@@ -234,7 +234,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Saves the user parameter information in the history of the program for later
    * use
@@ -288,7 +288,7 @@ namespace Isis {
 
   }
 
-  
+
   /**
    * Loads the user entered batchlist file into a private variable for later use
    *
@@ -354,7 +354,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * This is used to load the command line into p_cmdline and the Aml object
    * using information contained in argc and argv.
@@ -384,7 +384,7 @@ namespace Isis {
     for (int i = 0; i < argc; i++) {
       p_cmdline.push_back(argv[i]);
     }
-    
+
     // Check for special tokens (reserved parameters) (those beginning with a dash)
     vector<QString> options;
     options.push_back("-GUI");
@@ -405,41 +405,41 @@ namespace Isis {
 
     bool usedDashLast = false;
     bool usedDashRestore = false; //< for throwing -batchlist exceptions at end of function
-    
+
     // pre-process command line for -HELP first
     preProcess("-HELP", options);
     // pre-process command line for -WEBHELP
     preProcess("-WEBHELP", options);
     // now, parse command line to evaluate -LAST
     preProcess("-LAST", options);
-     
+
     for (unsigned int currArgument = 1; currArgument < (unsigned)argc; currArgument++) {
       QString paramName;
       vector<QString> paramValue;
 
       getNextParameter(currArgument, paramName, paramValue);
-      
+
       // we now have a name,value pair
       if (paramName[0] == '-') {
         paramName = paramName.toUpper();
-        
+
         // where if(paramname == -last ) to continue } was originally
-        
+
         if (paramValue.size() > 1) {
           QString msg = "Invalid value for reserve parameter ["
                        + paramName + "]";
           throw IException(IException::User, msg, _FILEINFO_);
         }
-        
+
         // resolve the reserved parameter (e.g. set -h to -HELP)
         paramName = resolveParameter(paramName, options);
-        
+
         // Prevent double handling of -LAST to prevent conflicts
         // Keep track of using -LAST to prevent conflicts with -BATCHLIST
         if (paramName == "-LAST") {
           usedDashLast = true;
           continue;
-        }        
+        }
 
 
         // Keep track of using -RESTORE to prevent conflicts with -BATCHLIST
@@ -453,7 +453,7 @@ namespace Isis {
         if ( paramValue.size() ) {
           realValue = paramValue[0];
         }
-        
+
         evaluateOption(paramName, realValue);
         continue;
       }
@@ -468,7 +468,7 @@ namespace Isis {
     }
 
     // Can't use the batchlist with the gui, save, last or restore option
-    if ( BatchListSize() != 0 && (p_interactive || usedDashLast || p_saveFile != "" 
+    if ( BatchListSize() != 0 && (p_interactive || usedDashLast || p_saveFile != ""
                                   || usedDashRestore) ) {
       QString msg = "-BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, ";
       msg += "or -LAST";
@@ -482,8 +482,8 @@ namespace Isis {
       throw IException(IException::User, msg, _FILEINFO_);
     }
   }
-   
-   
+
+
   /**
    * Loads the previous history for the program
    *
@@ -504,6 +504,7 @@ namespace Isis {
         int g = lab.groups() - 1;
         if (g >= 0 && lab.group(g).isNamed("UserParameters") ) {
           Isis::PvlGroup &up = lab.group(g);
+          QString commandline(p_progName + " ");
           for (int k = 0; k < up.keywords(); k++) {
             QString keyword = up[k].name();
 
@@ -529,9 +530,15 @@ namespace Isis {
               }
             }
 
-            if (!matchesDefault)
+            if (!matchesDefault) {
               PutAsString(keyword, values);
+              commandline += keyword + "=";
+              foreach(QString val, values) {
+                commandline += val + " ";
+              }
+            }
           }
+          std::cout << commandline << std::endl;
           return;
         }
 
@@ -567,14 +574,14 @@ namespace Isis {
       throw IException(IException::User, msg, _FILEINFO_);
     }
   }
- 
- 
+
+
   /**
    * This interprets the "-" options for reserved parameters
    *
    * @param name "-OPTIONNAME" (name of the reserved parameter)
    * @param value Value of the option, if supplied (-name=value)
-   * 
+   *
    * @throws Isis::IException::Programmer - evaluating -WEBHELP throws an exception when
    *                                        unit testing to avoid exiting from the unit test
    * @throws Isis::IException::Programmer - evaluating -HELP throws an exception when
@@ -624,7 +631,7 @@ namespace Isis {
       command += FileName(p_progName).name() + "/" + FileName(p_progName).name() + ".html";
       // cannot test else in unit test - don't want to open webhelp
       if (unitTest) {
-        throw IException(IException::Programmer, 
+        throw IException(IException::Programmer,
                          "Evaluating -WEBHELP should only throw this exception during a unitTest",
                          _FILEINFO_);
       }
@@ -632,7 +639,7 @@ namespace Isis {
         ProgramLauncher::RunSystemCommand(command);
         exit(0);
       }
-      
+
     }
     else if (name == "-INFO") {
       p_info = true;
@@ -785,7 +792,7 @@ namespace Isis {
       }
       // we must throw an exception for unitTest to handle to continue testing
       if (unitTest) {
-        throw IException(IException::Programmer, 
+        throw IException(IException::Programmer,
                          "Evaluating -HELP should only throw this exception during a unitTest",
                          _FILEINFO_);
       }
@@ -855,8 +862,8 @@ namespace Isis {
       throw IException(IException::Unknown, msg, _FILEINFO_);
     }
   }
- 
- 
+
+
   /**
    * This gets the next parameter in the list of arguments. curPos will be changed
    * to be the end of the current argument (still needs incremented to get the
@@ -865,11 +872,11 @@ namespace Isis {
    * @param curPos End of previous argument
    * @param name Resulting parameter name
    * @param value Resulting array of parameter values (usually just 1 element)
-   * 
+   *
    * @throws Isis::IException::User - parameters cannot start with "="
    */
   void UserInterface::getNextParameter(unsigned int &curPos,
-                                       QString &name, 
+                                       QString &name,
                                        std::vector<QString> &value) {
     QString paramName = p_cmdline[curPos];
     QString paramValue = "";
@@ -941,44 +948,44 @@ namespace Isis {
       value = readArray(paramValue);
     }
   }
- 
- 
+
+
   /**
    * This parses the command line and looks for the specified reserved parameter
-   * name passed. Resolves and evaluates the passed reserved parameter. 
+   * name passed. Resolves and evaluates the passed reserved parameter.
    * This method ignores invalid parameters ( @see resolveParameter() ).
-   * 
+   *
    * Example: preProcess("-HELP", options) will try to resolve any reserved parameters
    * and will evaluate if one resolves to -HELP.
-   * 
+   *
    * @param fullReservedName the full name of reserved parameter being looked for
    * @param reservedParams the list of reserved parameters for resolving parameter name
-   *                        
-   */   
-  void UserInterface::preProcess(QString fullReservedName, 
+   *
+   */
+  void UserInterface::preProcess(QString fullReservedName,
                                  std::vector<QString> &reservedParams) {
-    for (unsigned int currArgument = 1; currArgument < (unsigned)p_cmdline.size(); 
+    for (unsigned int currArgument = 1; currArgument < (unsigned)p_cmdline.size();
          currArgument++) {
-      
+
       QString paramName = p_cmdline[currArgument];
       QString trueParamValue = "";
       vector<QString> paramValue;
-      
+
       // reserved parameters start with -
       if (paramName[0] == '-') {
-        
+
         // grab the current argument
         getNextParameter(currArgument, paramName, paramValue);
         paramName = paramName.toUpper();
-        
+
         // grab the argument's value
         if ( paramValue.size() ) {
           trueParamValue = paramValue[0].toUpper();
         }
-        
+
         // resolve the reserved parameter token
         paramName = resolveParameter(paramName, reservedParams, false);
-        
+
         // evaluate the resolved parameter if it matches fullReservedName
         if (fullReservedName == paramName) {
           evaluateOption(paramName, trueParamValue);
@@ -986,8 +993,8 @@ namespace Isis {
       }
     }
   }
-   
-   
+
+
   /**
    * This interprets an array value from the command line.
    *
@@ -995,7 +1002,7 @@ namespace Isis {
    *   format (a,b,c)
    *
    * @return std::vector<QString> Values in the array QString
-   * 
+   *
    * @throws Isis::IException::User - arrays not starting with '(' are invalid
    * @throws Isis::IException::User - arrays ending in a backslash are invalid
    * @throws Isis::IException::User - invalid array format
@@ -1108,34 +1115,34 @@ namespace Isis {
 
     return values;
   }
-   
-   
+
+
   /**
    * This resolves a reserved parameter token on the command line to its fullname.
-   * Matches with the list of reserved parameters (options). 
+   * Matches with the list of reserved parameters (options).
    * Resolution necessary for evaluateOption().
-   * 
+   *
    * Example: an -h token on the command line will resolve to -HELP
    *
    * @param unresolvedParam the parameter name that needs to be resolved
    * @param reservedParams the list of reserved parameters for resolving parameter name
-   * @param handleNoMatches boolean value defaulted to true for handling invalid reserved 
+   * @param handleNoMatches boolean value defaulted to true for handling invalid reserved
    *                        parameters
-   * 
+   *
    * @return @b QString the resolved parameter name
-   * 
+   *
    * @throws Isis::IException::User - unresolved reserved parameter is ambigious
    * @throws Isis::IException::User - reserved parameter cannot be matched (invalid)
-   * 
-   */  
-  QString UserInterface::resolveParameter(QString &unresolvedParam, 
-                                          std::vector<QString> &reservedParams, 
+   *
+   */
+  QString UserInterface::resolveParameter(QString &unresolvedParam,
+                                          std::vector<QString> &reservedParams,
                                           bool handleNoMatches) {
     // index of the reserved parameter in options that matches the cmdline parameter
     int matchOption = -1;
     // determine if the reserved parameter on cmdline is shortened (e.g. -h for -HELP)
     for (int option = 0; option < (int)reservedParams.size(); option++) {
-      
+
       // If our option starts with the parameter name so far, this is it
       if ( reservedParams[option].startsWith(unresolvedParam) ) {
         if (matchOption >= 0) {
@@ -1153,17 +1160,17 @@ namespace Isis {
       if (matchOption < 0) {
         QString msg = "Invalid Reserve Parameter Option ["
         + unresolvedParam + "]. Choices are ";
-        
+
         QString msgOptions;
         for (int option = 0; option < (int)reservedParams.size(); option++) {
           // Make sure not to show -PID as an option
           if (reservedParams[option].compare("-PID") == 0) {
             continue;
           }
-          
+
           msgOptions += reservedParams[option];
           msgOptions += ",";
-          
+
           // this condition will never evaluate to FALSE -
           // this condition is only reachable when reservedParams.size() == 0 (empty) -
           // if this is the case, this for loop will never be entered
@@ -1171,11 +1178,11 @@ namespace Isis {
 //             msgOptions += ",";
 //           }
         }
-        
+
         // remove the terminating ',' from msgOptions
-        msgOptions.chop(1);        
+        msgOptions.chop(1);
         msg += " [" + msgOptions + "]";
-        
+
         throw IException(IException::User, msg, _FILEINFO_);
       }
     }
@@ -1185,5 +1192,5 @@ namespace Isis {
     else {
       return reservedParams[matchOption];
     }
-  }  
+  }
 } // end namespace isis
diff --git a/isis/src/base/objs/UserInterface/UserInterface.h b/isis/src/base/objs/UserInterface/UserInterface.h
index d8e382d89b40daf7891f69839bdbb9097043494a..e85c443e8f416949884021926b24fd4700c08e7f 100644
--- a/isis/src/base/objs/UserInterface/UserInterface.h
+++ b/isis/src/base/objs/UserInterface/UserInterface.h
@@ -69,7 +69,7 @@ namespace Isis {
    *                           documentation
    *   @history 2005-10-03 Elizabeth Miller - changed @ingroup tag
    *   @history 2005-12-21 Elizabeth Miller - Added command line options
-   *                           -BATCHLIST, -SAVE, -ERRLIST, -ONERROR, 
+   *                           -BATCHLIST, -SAVE, -ERRLIST, -ONERROR,
    *                           -PREFERENCE, and -PRINTFILE
    *   @history 2006-01-23 Elizabeth Miller - Renamed -HELP to -WEBHELP and made
    *                           it accept abbreviations of reserve params
@@ -128,25 +128,28 @@ namespace Isis {
    *   @history 2014-06-09 Ian Humphrey - Added PreProcess() and ResolveParameter()
    *                           functions to replace redundant code in LoadCommandLine().
    *                           These functions evaulate -HELP and -WEBHELP flags regardless
-   *                           of errors on commandline. Fixes #552. 
-   *   @history 2014-06-10 Ian Humphrey - Fixed issue causing parameter name values 
+   *                           of errors on commandline. Fixes #552.
+   *   @history 2014-06-10 Ian Humphrey - Fixed issue causing parameter name values
    *                           on the -HELP flag to only evaluate if uppercase. Fixes #1735.
    *                           Reorganized header and cpp layout. Renamed private member functions
    *                           to follow code convention. Began modifying unitTest.cpp.
-   *   @history 2014-06-11 Ian Humphrey - Added throws to evaluateOption() so that if the parameter 
+   *   @history 2014-06-11 Ian Humphrey - Added throws to evaluateOption() so that if the parameter
    *                           is -HELP or -WEBHELP unitTest.cpp can catch and continue running.
    *   @history 2014-06-12 Ian Humphrey - Modified logic in loadCommandLine() throw statements so
    *                           an exception is thrown when -BATCHLIST is used with -GUI, -SAVE,
    *                           -LAST, or -RESTORE options. Added bool usedDashRestore.
-   *   @history 2014-06-17 Ian Humphrey - Added to unitTest.xml to test -HELP=value. Renamed 
+   *   @history 2014-06-17 Ian Humphrey - Added to unitTest.xml to test -HELP=value. Renamed
    *                           application name from 'hist' to 'unitTest'. Modified logic of
    *                           resolveParameter() to give appropriate error message to user
    *                           when using an invalid reserved parameter (e.g. -x).
-   *   @history 2014-06-18 Ian Humphrey - Finished developing unitTest.cpp and reorganized. 
+   *   @history 2014-06-18 Ian Humphrey - Finished developing unitTest.cpp and reorganized.
    *                           Added lacking [at]throws documentation to UserInterface.cpp.
    *   @history 2016-04-05 Jesse Mapel - Changed bad histroy file error message to reflect that
    *                           the history file could be for a different application. Fixes #2366
-   *                           
+   *   @history 2018-04-20 Adam Goins - Modified loadHistory() to print out the last command
+   *                           so that users can see the actual command that the -last arg loads.
+   *                           Fixes #4779.
+   *
    */
 
   class UserInterface : public IsisAml {
@@ -162,8 +165,8 @@ namespace Isis {
        */
       bool AbortOnError() {
         return p_abortOnError;
-      };    
-      
+      };
+
       /**
        * Returns the size of the batchlist.  If there is no batchlist, it will
        * return 0
@@ -173,7 +176,7 @@ namespace Isis {
       int BatchListSize() {
         return p_batchList.size();
       };
-      
+
       /**
        * Indicates if the Isis Graphical User Interface is operating.
        *
@@ -190,8 +193,8 @@ namespace Isis {
        */
       int ParentId() {
         return p_parentId;
-      };  
-      
+      };
+
       /**
        * @return the Gui
        */
@@ -201,24 +204,24 @@ namespace Isis {
 
       QString GetInfoFileName();
       bool GetInfoFlag();
-      
+
       void SetBatchList(int i);
       void SetErrorList(int i);
-      
+
       void SaveHistory();
 
     private:
       void loadBatchList(const QString file);
       void loadCommandLine(int argc, char *argv[]);
       void loadHistory(const QString file);
-      
+
       void evaluateOption(const QString name, const QString value);
-      void getNextParameter(unsigned int &curPos, 
-                            QString &unresolvedParam, 
+      void getNextParameter(unsigned int &curPos,
+                            QString &unresolvedParam,
                             std::vector<QString> &value);
       void preProcess(QString fullReservedName, std::vector<QString> &reservedParams);
       std::vector<QString> readArray(QString arrayString);
-      QString resolveParameter(QString &name, 
+      QString resolveParameter(QString &name,
                                std::vector<QString> &reservedParams,
                                bool handleNoMatches = true);
 
@@ -227,23 +230,23 @@ namespace Isis {
       //! Vector of batchlist data.
       std::vector<std::vector<QString> > p_batchList;
       //! This variable will contain argv.
-      std::vector<char *> p_cmdline; 
+      std::vector<char *> p_cmdline;
       //! FileName to write batchlist line that caused error on.
       QString p_errList;
       //! Pointer to the gui object.
-      Gui *p_gui;                  
+      Gui *p_gui;
       //! Boolean value representing if it's in debug mode.
-      bool p_info;  
+      bool p_info;
       //! FileName to save debugging info.
-      QString p_infoFileName;  
+      QString p_infoFileName;
       //! Boolean value representing whether the program is interactive or not.
-      bool p_interactive;  
-      //! This is a status to indicate if the GUI is running or not.                         
-      int p_parentId;               
-      //! Name of program to run.                                  
-      QString p_progName;        
+      bool p_interactive;
+      //! This is a status to indicate if the GUI is running or not.
+      int p_parentId;
+      //! Name of program to run.
+      QString p_progName;
       //! FileName to save last history to.
-      QString p_saveFile;          
+      QString p_saveFile;
   };
 };
 
diff --git a/isis/src/base/objs/UserInterface/UserInterface.truth b/isis/src/base/objs/UserInterface/UserInterface.truth
index 5c459802988e6151be42c960f4f68524fecb5b82..f22e1f926aaf171284c26aa575b2c513a49d97df 100644
--- a/isis/src/base/objs/UserInterface/UserInterface.truth
+++ b/isis/src/base/objs/UserInterface/UserInterface.truth
@@ -83,6 +83,7 @@ Testing Reserved Parameter=Invalid Value
 **USER ERROR** Invalid value for reserve parameter [-VERBOSE].
 
 Testing Unambiguous Reserved Parameter Resolution (-la)
+./unitTest From=It To=Worked 
 FROM:    It
 TO:      Worked
 GUI:     0
@@ -142,9 +143,11 @@ Testing -BATCHLIST with -SAVE
 **USER ERROR** -BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, or -LAST.
 
 Testing -BATCHLIST with -RESTORE
+./unitTest From=It To=Worked 
 **USER ERROR** -BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, or -LAST.
 
 Testing -BATCHLIST with -LAST
+./unitTest From=It To=Worked 
 **USER ERROR** -BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, or -LAST.
 
 Testing -BATCHLIST with nonexistent .lis file
@@ -263,11 +266,13 @@ GetInfoFlag() returns: 1
 GetInfoFileName() returns: debug.log
 
 Testing -LAST
+./unitTest From=It To=Worked 
 FROM:    It
 TO:      Worked
 GUI:     0
 
 Testing -LAST with other app parameters
+./unitTest From=It To=Worked 
 FROM:    otherParam
 TO:      Worked
 GUI:     0
@@ -281,6 +286,7 @@ FileOutput = On
 FileName = unitTest.prt
 
 Testing -RESTORE with valid (existing) .par file
+./unitTest From=It To=Worked 
 FROM:    It
 TO:      Worked
 GUI:     0
@@ -304,6 +310,7 @@ TO:      works
 GUI:     0
 
 Restoring Saved Parameters:
+./unitTest FROM=saveParam TO=works 
 FROM:    saveParam
 TO:      works
 GUI:     0
diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp
index 90d919132bd9d7726c3138172d12d616ebbb270d..3a80580884e11e126d9f5c6c3bdcaea76c7dbc00 100644
--- a/isis/src/base/objs/UserInterface/unitTest.cpp
+++ b/isis/src/base/objs/UserInterface/unitTest.cpp
@@ -14,8 +14,9 @@ int main(int argc, char *argv[]) {
 
   cout << "Unit test for Isis::UserInterface ..." << endl;
 
-  QString unitTestXml = Isis::FileName("unitTest.xml").expanded();
-  QString highpass = Isis::FileName("$ISISROOT/src/base/apps/highpass/highpass.xml").expanded();
+  QString unitTestXml = Isis::FileName(QString(ISISROOT) + "/src/base/objs/UserInterface/unitTest.xml").expanded();
+  QString highpass = Isis::FileName(QString(ISISBUILDDIR) + "/bin/xml/highpass.xml").expanded();
+
   char *myArgv[15];// = {"unitTest", "from=input.cub", "to=output.cub"};
 
   for (int i = 0; i < 15; i++)
@@ -36,7 +37,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing param= value Format" << endl;
     {
       int myArgc = 0;
@@ -55,7 +56,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing No Arguments (Defaults)" << endl;
     {
       int myArgc = 0;
@@ -69,7 +70,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing Basic Array Argument" << endl;
     {
       int myArgc = 0;
@@ -97,7 +98,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing Common Array Argument" << endl;
     {
       int myArgc = 0;
@@ -123,7 +124,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing Complicated Array Argument" << endl;
     {
       int myArgc = 0;
@@ -148,14 +149,14 @@ int main(int argc, char *argv[]) {
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing Escaped Array \\(" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "to=\\(escaped, argument)");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       vector<QString> vals;
       cout << "FROM:    " << ui.GetAsString("FROM") << endl;
@@ -166,14 +167,14 @@ int main(int argc, char *argv[]) {
       }
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing Escaped Array \\\\(" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "to=\\\\(escaped, argument)");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       vector<QString> vals;
       cout << "FROM:    " << ui.GetAsString("FROM") << endl;
@@ -184,7 +185,7 @@ int main(int argc, char *argv[]) {
       }
       cout << endl;
     }
-   
+
 
     cout << "Testing param = value Format" << endl;
     {
@@ -210,7 +211,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing Space in Parameter Value" << endl;
     {
       int myArgc = 0;
@@ -225,7 +226,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing =value" << endl;
     try {
       int myArgc = 0;
@@ -242,7 +243,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing param =value" << endl;
     try {
       int myArgc = 0;
@@ -264,8 +265,8 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing mismatched quotes for array-value" << endl;
     try {
       int myArgc = 0;
@@ -280,7 +281,7 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing array-value ending in backslash" << endl;
     try {
       int myArgc = 0;
@@ -294,12 +295,12 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing Invalid Parameter" << endl;
     try {
       int myArgc = 0;
-      strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass");
+      strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass/highpass");
       strcpy(myArgv[myArgc++], "bogus=parameter");
 
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
@@ -309,14 +310,14 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing Invalid Reserved Parameter" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-lastt");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -324,44 +325,44 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing Reserved Parameter=Invalid Value" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-verbose=(\"invalid\", \"value\")");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
-       
+
     }
     catch (Isis::IException &e) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing Unambiguous Reserved Parameter Resolution (-la)" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-la");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "FROM:    " << ui.GetAsString("FROM") << endl;
       cout << "TO:      " << ui.GetAsString("TO") << endl;
       cout << "GUI:     " << ui.IsInteractive() << endl;
-      cout << endl; 
+      cout << endl;
     }
-   
-   
+
+
     cout << "Testing Ambiguous Reserved Parameter Resolution" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-l");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -369,8 +370,8 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing unitTest v. ./unitTest for GUI" << endl;
     {
       int myArgc = 0;
@@ -389,15 +390,15 @@ int main(int argc, char *argv[]) {
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -PID and -GUI" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-pid=1");
       strcpy(myArgv[myArgc++], "-gui");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -405,31 +406,31 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing ParentId() and TheGui()" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       ui.ParentId();
       ui.TheGui();
     }
-    
-    
+
+
     cout << "Testing -NOGUI" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-nogui");
-      
+
       Isis::UserInterface ui(highpass, myArgc, myArgv);
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Starting Batchlist Test" << endl;
     {
       int myArgc = 0;
@@ -449,8 +450,8 @@ int main(int argc, char *argv[]) {
       cout << "Finished Batchlist Test" << endl;
       cout << endl;
     }
-    
-    
+
+
     // The following four tests should all catch thrown exceptions -
     // -BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, or -LAST
     cout << "Testing -BATCHLIST with -GUI" << endl;
@@ -469,7 +470,7 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
     cout << "Testing -BATCHLIST with -SAVE" << endl;
     try {
       int myArgc = 0;
@@ -486,7 +487,7 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
     cout << "Testing -BATCHLIST with -RESTORE" << endl;
     try {
       int myArgc = 0;
@@ -503,7 +504,7 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
     cout << "Testing -BATCHLIST with -LAST" << endl;
     try {
       int myArgc = 0;
@@ -520,13 +521,13 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
     cout << "Testing -BATCHLIST with nonexistent .lis file" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-batchlist=doesntExist.lis");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -534,14 +535,14 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -BATCHLIST with empty .lis file" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-batchlist=unitTestEmpty.lis");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -549,14 +550,14 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -BATCHLIST with mismatched columns in .lis file" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-batchlist=unitTestBadColumns.lis");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -564,41 +565,41 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ONERROR=CONTINUE" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
       strcpy(myArgv[myArgc++], "-onerror=continue");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "AbortOnError() returns: " << ui.AbortOnError() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ONERROR=ABORT" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
       strcpy(myArgv[myArgc++], "-onerror=abort");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "AbortOnError() returns: " << ui.AbortOnError() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ONERROR=badValue" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
       strcpy(myArgv[myArgc++], "-onerror=badValue");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -606,14 +607,14 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ONERROR=CONTINUE without -BATCHLIST" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-onerror=continue");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
       }
@@ -621,14 +622,14 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ERRLIST=value without -BATCHLIST" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-errlist=unitTest.txt");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -636,15 +637,15 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ERRLIST with no value" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-errlist");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
@@ -652,15 +653,15 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -ERRLIST=value" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-errlist=unitTestErr.txt");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       for(int i = 0; i < ui.BatchListSize(); i++) {
         ui.SetBatchList(i);
@@ -668,8 +669,8 @@ int main(int argc, char *argv[]) {
       }
       cout << endl;
     }
-    
-    
+
+
     // evaluating -HELP during a unitTest should throw an exception (instead of exiting)
     cout << "Testing -HELP Priority (invalid parameters present)" << endl;
     try {
@@ -681,7 +682,7 @@ int main(int argc, char *argv[]) {
       strcpy(myArgv[myArgc++], "-webhelp");
       strcpy(myArgv[myArgc++], "invalid=parameter");
       strcpy(myArgv[myArgc++], "-help");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl;
       cout << endl;
@@ -689,9 +690,9 @@ int main(int argc, char *argv[]) {
     catch (Isis::IException &e) {
       e.print();
       cout << endl;
-    } 
-    
-    
+    }
+
+
     cout << "Testing -HELP=value ..." << endl;
     cout << endl;
     cout << "Testing pixelType" << endl;
@@ -699,7 +700,7 @@ int main(int argc, char *argv[]) {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-help=to");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl;
       cout << endl;
@@ -707,14 +708,14 @@ int main(int argc, char *argv[]) {
     catch (Isis::IException &e) {
       e.print();
       cout << endl;
-    } 
-    
+    }
+
     cout << "Testing inclusive min and max, lessThan, lessThanOrEqual, internalDefault" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-help=testone");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl;
       cout << endl;
@@ -722,14 +723,14 @@ int main(int argc, char *argv[]) {
     catch (Isis::IException &e) {
       e.print();
       cout << endl;
-    } 
-    
+    }
+
     cout << "Testing odd, noninclusive min and max, greaterThan, greaterThanOrEqual" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-help=testtwo");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl;
       cout << endl;
@@ -738,13 +739,13 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
     cout << "Testing inclusions, exclusions" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-help=testthree");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl;
       cout << endl;
@@ -753,13 +754,13 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
    cout << "Testing list inclusions, exclusions, defaults" << endl;
     try {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-help=listtest");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl;
       cout << endl;
@@ -770,34 +771,34 @@ int main(int argc, char *argv[]) {
     }
     cout << "...End testing -HELP=value" << endl;
     cout << endl;
-    
-    
+
+
     cout << "Testing -INFO" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-info");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "GetInfoFlag() returns: " << ui.GetInfoFlag() << endl;
       cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -INFO=value" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-info=debug.log");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "GetInfoFlag() returns: " << ui.GetInfoFlag() << endl;
-      cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl;     
+      cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -LAST" << endl;
     {
       int myArgc = 0;
@@ -810,8 +811,8 @@ int main(int argc, char *argv[]) {
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -LAST with other app parameters" << endl;
     {
       int myArgc = 0;
@@ -825,36 +826,36 @@ int main(int argc, char *argv[]) {
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -LOG" << endl;
     {
       Preference &tempTestPrefs = Isis::Preference::Preferences(true);
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-log");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << tempTestPrefs.findGroup("SessionLog")["FileOutput"] << endl;
       cout << tempTestPrefs.findGroup("SessionLog")["FileName"] << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -LOG=value" << endl;
     {
       Preference &tempTestPrefs = Isis::Preference::Preferences(true);
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-log=unitTest.prt");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << tempTestPrefs.findGroup("SessionLog")["FileOutput"] << endl;
       cout << tempTestPrefs.findGroup("SessionLog")["FileName"] << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -RESTORE with valid (existing) .par file" << endl;
     {
       int myArgc = 0;
@@ -867,8 +868,8 @@ int main(int argc, char *argv[]) {
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -RESTORE with corrupt .par file" << endl;
     try {
       int myArgc = 0;
@@ -883,11 +884,11 @@ int main(int argc, char *argv[]) {
       cout << endl;
     }
 
-    
+
     cout << "Testing -RESTORE with invalid (non-existing) .par file" << endl;
     try {
       int myArgc = 0;
-      strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass");
+      strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass");
       strcpy(myArgv[myArgc++], "-restore=junk.par");
 
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
@@ -897,8 +898,8 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
-    
+
+
     // testing loadHistory()
     cout << "Testing -RESTORE with an empty .par file" << endl;
     {
@@ -909,8 +910,8 @@ int main(int argc, char *argv[]) {
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
-    
-    
+
+
     // unitTestLoadHistory.par has more object groups to test loadHistory()
     cout << "Testing -RESTORE with a more populated .par file" << endl;
     {
@@ -921,21 +922,21 @@ int main(int argc, char *argv[]) {
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << endl;
     }
-    
-    
+
+
     // TestPreferences for unit tests have HistoryRecording set to Off
     cout << "Testing -SAVE with HistoryRecording Off" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
-      strcpy(myArgv[myArgc++], "-save");
-      
+      strcpy(myArgv[myArgc++], "-save=unitTestSaveArgs.par");
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       ui.SaveHistory();
       cout << endl;
     }
-    
-    
+
+
     cout << "Starting -SAVE, -PREFERECE, and -RESTORE Test" << endl;
     {
       cout << "Testing -SAVE=value with HistoryRecording On" << endl;
@@ -945,30 +946,30 @@ int main(int argc, char *argv[]) {
       strcpy(myArgv[myArgc++], "to=works");
       strcpy(myArgv[myArgc++], "-save=unitTestSave.par");
       strcpy(myArgv[myArgc++], "-preference=unitTestPrefs");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "FROM:    " << ui.GetAsString("FROM") << endl;
       cout << "TO:      " << ui.GetAsString("TO") << endl;
       cout << "GUI:     " << ui.IsInteractive() << endl;
       cout << endl;
       ui.SaveHistory();
-      
+
       cout << "Restoring Saved Parameters:" << endl;
       myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-restore=unitTestSave.par");
-      
+
       Isis::UserInterface ui2(unitTestXml, myArgc, myArgv);
       cout << "FROM:    " << ui2.GetAsString("FROM") << endl;
       cout << "TO:      " << ui2.GetAsString("TO") << endl;
       cout << "GUI:     " << ui2.IsInteractive() << endl;
-      cout << endl; 
-      
+      cout << endl;
+
       cout << "Finished -SAVE, PREFERENCE, and -RESTORE Test" << endl;
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing SetBatchList()..." << endl;
     {
       cout << "Testing with param=array-value" << endl;
@@ -977,50 +978,50 @@ int main(int argc, char *argv[]) {
       strcpy(myArgv[myArgc++], "from=$$1");
       strcpy(myArgv[myArgc++], "to=($2,$2copy)");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       ui.SetBatchList(0);
       cout << endl;
-      
+
       cout << "Testing with param= " << endl;
       myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "from=$1");
       strcpy(myArgv[myArgc++], "to= ");
       strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis");
-      
+
       Isis::UserInterface ui2(unitTestXml, myArgc, myArgv);
       ui2.SetBatchList(0);
-      cout << endl; 
-    }   
+      cout << endl;
+    }
     cout << "...End SetBatchList() Test" << endl;
     cout << endl;
-     
-    
+
+
     cout << "Testing SetErrorList() with p_errList == \"\"" << endl;
     {
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       ui.SetErrorList(0);
       cout << endl;
     }
-    
-    
+
+
     cout << "Testing -VERBOSE" << endl;
     {
       Preference &tempTestPrefs = Isis::Preference::Preferences(true);
       int myArgc = 0;
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "-verbose");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << tempTestPrefs.findGroup("SessionLog")["TerminalOutput"] << endl;
       cout << endl;
     }
-    
-    
+
+
     // evaluating -webhelp should throw an error during unit test (instead of exiting)
     cout << "Testing -WEBHELP" << endl;
     try {
@@ -1028,7 +1029,7 @@ int main(int argc, char *argv[]) {
       strcpy(myArgv[myArgc++], "./unitTest");
       strcpy(myArgv[myArgc++], "bogus=parameter");
       strcpy(myArgv[myArgc++], "-webhelp");
-      
+
       Isis::UserInterface ui(unitTestXml, myArgc, myArgv);
       cout << "Evaluating -WEBHELP should have thrown an exception during unit testing" << endl;
     }
@@ -1036,9 +1037,9 @@ int main(int argc, char *argv[]) {
       e.print();
       cout << endl;
     }
-    
+
   }
   catch (Isis::IException &e) {
     e.print();
   }
-}
\ No newline at end of file
+}
diff --git a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp
index fe4b7e64284d8c678c7cd84bb40fe32c6929105a..052ccc2c14581f4f47f6bb56c71101acb88f4b5b 100644
--- a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp
+++ b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp
@@ -142,19 +142,24 @@ namespace Isis {
 
 
   /**
-   * Returns a translated value. The output name is used to find the input
-   * group, keyword, default and tranlations in the translation table. If the
-   * keyword does not exist in the input label, the input default if
-   * available will be used as the input value. This input value
-   * is then used to search all of the translations. If a match is
-   * found the translated value is returned.
+   * Returns a translated value. The translation group name is 
+   * used to find the input group, keyword, default and 
+   * tranlations in the translation table. If the keyword does not 
+   * exist in the input label, the input default if available will 
+   * be used as the input value. This input value is then used to 
+   * search all of the translations. If a match is found the 
+   * translated value is returned. 
    *
-   * @param outputName The output name used to identify the input keyword to
-   *                   be translated.
+   * @param translationGroupName The name of the PVL translation 
+   *                        group used to identify the
+   *                        input/output keywords to be
+   *                        translated. Often, this is the
+   *                        same as the output keyword name.
    *
    * @param index The index into the input keyword array.  Defaults to 0
    *
-   * @return string The ISIS cube label value for the outputName.
+   * @return @b QString The translated output value to be 
+   *         placed in the ISIS3 cube label.
    *
    * @throws IException::Unknown "Failed to translate output value."
    * @throws IException::Unknown "Cannot translate value. Xml files can only
@@ -170,7 +175,7 @@ namespace Isis {
    * @throws IException::Unknown "Could not find an input value or default value."
    * @throws IException::Unknown "Input element does not have the named attribute."
    */
-  QString XmlToPvlTranslationManager::Translate(QString outputName, 
+  QString XmlToPvlTranslationManager::Translate(QString translationGroupName, 
                                                 int index) {
     try {
     if (index != 0) {
@@ -182,7 +187,7 @@ namespace Isis {
     const Pvl &transTable = TranslationTable();
     PvlGroup transGroup;
     try {
-      transGroup = transTable.findGroup(outputName);
+      transGroup = transTable.findGroup(translationGroupName);
     }
     catch (IException &e){
       QString msg = "Unable to retrieve translation group from translation table.";
@@ -228,7 +233,7 @@ namespace Isis {
     // Notify what we are translating and what the translating group is.
     if (isDebug) {
       cout << endl << "          ====================          " << endl;
-      cout << endl << "Translating output keyword: " << outputName << endl;
+      cout << endl << "Translating output keyword: " << translationGroupName << endl;
       cout << endl << "Translation group:" << endl;
       cout << transGroup << endl << endl;
     }
@@ -240,31 +245,51 @@ namespace Isis {
       cout << endl << "Finding input element:" << endl << endl;
       cout << inputParentElement.tagName() << endl;
     }
-    for (int i = 0; i < inputPosition.size(); i++) {
-      QString childName = inputPosition[i];
-      inputParentElement = inputParentElement.firstChildElement(childName);
-      if(inputParentElement.isNull()) {
-        if ( hasInputDefault(outputName) ) {
+    // traverse the input position path 
+    Pvl::ConstPvlKeywordIterator it = transGroup.findKeyword("InputPosition",
+                                      transGroup.begin(),
+                                      transGroup.end());
+
+    QDomElement oldInputParentElement = inputParentElement;
+    QString childName;
+    while(it != transGroup.end()) {
+      const PvlKeyword &inputPosition = *it;
+      inputParentElement = oldInputParentElement; 
+
+        for (int i = 0; i < inputPosition.size(); i++) {
+          childName = inputPosition[i];
+          inputParentElement = inputParentElement.firstChildElement(childName);
+          if(inputParentElement.isNull()) {
+            break;
+          }
           if (isDebug) {
-            cout << endl << "Could not traverse input position, " <<
-                            "using default value: " <<
-                            InputDefault(outputName) << endl;
+            indent += "  ";
+            cout << indent << inputParentElement.tagName() << endl;
           }
-          return PvlTranslationTable::Translate( outputName );
         }
-        else {
-          QString msg = "Failed traversing input position. [" +
-                        inputParentElement.parentNode().toElement().tagName() +
-                        "] element does not have a child element named [" +
-                        childName + "].";
-          throw IException(IException::Unknown, msg, _FILEINFO_);
+        if (!inputParentElement.isNull()) {
+          break;
+        }
+        it = transGroup.findKeyword("InputPosition", it + 1, transGroup.end()); 
+    }
+     
+    if (inputParentElement.isNull()) {
+      if (hasInputDefault(translationGroupName)) {
+        if (isDebug) {
+          cout << endl << "Could not traverse input position, " <<
+            "using default value: " <<
+            InputDefault(translationGroupName) << endl;
         }
+        return PvlTranslationTable::Translate( translationGroupName );
       }
-      if (isDebug) {
-        indent += "  ";
-        cout << indent << inputParentElement.tagName() << endl;
+      else {
+        QString msg = "Failed traversing input position. [" +
+          inputPosition.name() + "] element does not have a child element named [" +
+          childName + "].";
+        throw IException(IException::Unknown, msg, _FILEINFO_);
       }
     }
+    // now get input value at given input position path
     QDomElement inputKeyElement = inputParentElement.firstChildElement(inputKey);
     if (isDebug) {
       indent += "  ";
@@ -289,19 +314,19 @@ namespace Isis {
         inputKeyElement = inputParentElement.firstChildElement(inputKey);
       }
     }
-
     // If the parent element is NULL at this point then we traversed every
     // potential input element and none of them satisfied the dependencies.
     if ( inputParentElement.isNull() ) {
-      if ( hasInputDefault(outputName) ) {
+      if ( hasInputDefault(translationGroupName) ) {
         if (isDebug) {
           cout << endl << "No input value found, using default value: " <<
-                          InputDefault(outputName) << endl;
+                          InputDefault(translationGroupName) << endl;
         }
-        return PvlTranslationTable::Translate( outputName );
+        return PvlTranslationTable::Translate( translationGroupName );
       }
       else {
-        QString msg = "Could not find an input value or default value.";
+        QString msg = "Could not find an input or default value that fits the given input "
+                      "keyword dependencies.";
         throw IException(IException::Unknown, msg, _FILEINFO_);
       }
     }
@@ -313,12 +338,12 @@ namespace Isis {
       if ( inputKeyElement.hasAttribute(attributeName) ) {
         inputValue = inputKeyElement.attribute(attributeName);
       }
-      else if (hasInputDefault(outputName) ) {
+      else if (hasInputDefault(translationGroupName) ) {
         if (isDebug) {
           cout << endl << "No input value found, using default value: " <<
-                          InputDefault(outputName) << endl;
+                          InputDefault(translationGroupName) << endl;
         }
-        return PvlTranslationTable::Translate( outputName );
+        return PvlTranslationTable::Translate( translationGroupName );
       }
       else {
         QString msg = "Input element [" + inputKeyElement.tagName() +
@@ -330,10 +355,10 @@ namespace Isis {
     if (isDebug) {
           cout << endl << "Translating input value: " << inputValue << endl;
         }
-    return PvlTranslationTable::Translate( outputName, inputValue.trimmed() );
+    return PvlTranslationTable::Translate( translationGroupName, inputValue.trimmed() );
     }
     catch (IException &e){
-      QString msg = "Failed to translate output value for [" + outputName + "].";
+      QString msg = "Failed to translate output value for [" + translationGroupName + "].";
       throw IException(e, IException::Unknown, msg, _FILEINFO_);
     }
   }
@@ -347,8 +372,9 @@ namespace Isis {
    * dependencies are requirements on the values of attributes of the element
    * and/or the values of sibling elements. The dependencies are specified by
    * strings that are formatted as follows
-   * <code>[tag/att]\@[tagName/attName]:[value]</code>
-   *
+   * <code>[tag/att]\@[tagName/attName]|[value]</code> or 
+   * <code>[tagName/attName]|[value]</code> 
+   * 
    * @param element The element to check dependencies on.
    * @param dependencies A multi-valued keyword were every entry specifies a
    *                     requirement upon either an attribute of the element or
diff --git a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.h b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.h
index 44d0ec821aa42770f71b8da8e7b81bc77e7bb03b..1a7a6fa9a1908cae03a2339751bf59e69d512914 100644
--- a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.h
+++ b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.h
@@ -123,6 +123,9 @@ namespace Isis {
    *  @history 2017-01-18 Jesse Mapel - Updated documentation and error messages. Fixes #4584.
    *  @history 2017-01-25 Jesse Mapel - Created unit test. Fixes #4584.
    *  @history 2017-05-26 Makayla Shepherd - Renamed XmlToPvlTranslationManager.
+   *  @history 2018-02-15 Kristin Berry and Summer Stapleton - Updated translate() method to search
+   *                          for multiple values for InputPosition keyword. Fixes #5332
+   *  @history 2018-04-16 Jeannie Backer - Improved error message for keyword dependencies.
    */
   class XmlToPvlTranslationManager : public LabelTranslationManager {
     public:
@@ -140,7 +143,7 @@ namespace Isis {
 
       // Attempt to translate the requested output name to output value
       // using the input name and value/default value
-      virtual QString Translate(QString nName, int findex = 0);
+      virtual QString Translate(QString translationGroupName, int findex = 0);
 
       // Translate all translation table groups which contain "Auto"
       using LabelTranslationManager::Auto;
diff --git a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.truth b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.truth
index e16b36c1692bc420524e516311e7294d2f1838bc..f4fd8f9d93f9a7220c50fa38345a213c05d4acd4 100644
--- a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.truth
+++ b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.truth
@@ -772,7 +772,7 @@ Testing error throws
 **ERROR** PVL Keyword [InputPosition] does not exist in [Group = NoInputPosition].
 
 **ERROR** Failed to translate output value for [BadInputPosition].
-**ERROR** Failed traversing input position. [] element does not have a child element named [Bad_Parent].
+**ERROR** Failed traversing input position. [InputPosition] element does not have a child element named [Bad_Parent].
 
 **ERROR** Failed to translate output value for [InputKeyDoesNotExist].
 **PROGRAMMER ERROR** No value or default value to translate for translation group [InputKeyDoesNotExist] in file [].
@@ -796,5 +796,5 @@ Testing error throws
 
 **ERROR** Could not open label file [DoesNotExist.xml].
 
-**ERROR** XML read/parse error in file [/usgs/cpkgs/isis3/data/base/translations/pdsImage.trn] at line [1], column [1], message: error occurred while parsing element.
+**ERROR** XML read/parse error in file [base/translations/pdsImage.trn] at line [1], column [1], message: error occurred while parsing element.
 
diff --git a/isis/src/base/objs/XmlToPvlTranslationManager/unitTest.cpp b/isis/src/base/objs/XmlToPvlTranslationManager/unitTest.cpp
index dbd942488640188630e85f997255da1520ff680a..bf618d44a7350f0b784e318afd1fe53f356a1af7 100644
--- a/isis/src/base/objs/XmlToPvlTranslationManager/unitTest.cpp
+++ b/isis/src/base/objs/XmlToPvlTranslationManager/unitTest.cpp
@@ -1,14 +1,26 @@
 #include <sstream>
-#include "XmlToPvlTranslationManager.h"
+
+#include <QDebug>
+
 #include "FileName.h"
-#include "Preference.h"
 #include "IException.h"
 #include "IString.h"
 #include "Preference.h"
+#include "XmlToPvlTranslationManager.h"
 
 using namespace Isis;
 using namespace std;
 
+/** 
+ * Unit test for XmlToPvlTranslationManager class
+ *  
+ * @author ????-??-?? Unknown 
+ *  
+ *  @internal
+ *   @history 2018-06-06 Jeannie Backer - Removed file paths from error message written to
+ *                           test output.
+ *  
+ */
 int main(void) {
   Preference::Preferences(true);
 
@@ -372,7 +384,9 @@ int main(void) {
       XmlToPvlTranslationManager pvlTransFileManager(pvlFile, simpleTrans);
     }
     catch(IException &e) {
-      e.print();
+      QString message = e.toString();
+      cout << message.replace(QRegExp("in file.*base/translations"), "in file [base/translations");
+      cout << endl;
       cout << endl;
     }
 
diff --git a/isis/src/base/objs/iTime/iTime.cpp b/isis/src/base/objs/iTime/iTime.cpp
index 9b49dceaabda2f2b02e7f5b464ff49c80cd3e16a..e8a92e549cc9716d6476c5b58e53dbe807505ef3 100644
--- a/isis/src/base/objs/iTime/iTime.cpp
+++ b/isis/src/base/objs/iTime/iTime.cpp
@@ -47,8 +47,8 @@ namespace Isis {
   }
 
   /**
-   * Constructs a iTime object and initializes it to the time from the argument.
-   *
+   * Constructs a iTime object and initializes it to the time from the argument.  
+   *  
    * @param time A time string formatted in standard UTC or similar format.
    *             Example:"2000/12/31 23:59:01.6789" or "2000-12-31T23:59:01.6789"
    */
@@ -56,14 +56,13 @@ namespace Isis {
     LoadLeapSecondKernel();
 
     NaifStatus::CheckErrors();
+
     // Convert the time string to a double ephemeris time
     SpiceDouble et;
     str2et_c(time.toLatin1().data(), &et);
 
     p_et = et;
     NaifStatus::CheckErrors();
-
-    UnloadLeapSecondKernel();
   }
 
 
@@ -79,7 +78,7 @@ namespace Isis {
    */
   void iTime::operator=(const QString &time) {
     LoadLeapSecondKernel();
-    
+
     NaifStatus::CheckErrors();
     // Convert the time string to a double ephemeris time
     SpiceDouble et;
@@ -87,8 +86,6 @@ namespace Isis {
 
     p_et = et;
     NaifStatus::CheckErrors();
-
-    UnloadLeapSecondKernel();
   }
 
   // Overload of "=" with a c string
@@ -102,8 +99,6 @@ namespace Isis {
 
     p_et = et;
     NaifStatus::CheckErrors();
-
-    UnloadLeapSecondKernel();
   }
 
 
@@ -111,7 +106,6 @@ namespace Isis {
   void iTime::operator=(const double time) {
     LoadLeapSecondKernel();
     p_et = time;
-    UnloadLeapSecondKernel();
   }
 
   /**
@@ -484,15 +478,6 @@ namespace Isis {
     p_lpInitialized = true;
   }
 
-  //! Uses the Naif routines to unload the leap second kernel.
-  void iTime::UnloadLeapSecondKernel() {
-    // Inorder to improve the speed of iTime comparisons, the leapsecond
-    // kernel is loaded only once and left open.
-
-    //string leapSecondName(p_leapSecond.expanded());
-    //unload_c (leapSecondName.c_str());
-  }
-
   /**
    * Returns the current Greenwich Mean iTime
    * The time is based on the system time, so it is only as
diff --git a/isis/src/base/objs/iTime/iTime.h b/isis/src/base/objs/iTime/iTime.h
index e5517638cc297bf8bb1d96007d53894e7b7f82be..40b4c0cc7c22fdb1474f1a67f9e89d32bbcd8308 100644
--- a/isis/src/base/objs/iTime/iTime.h
+++ b/isis/src/base/objs/iTime/iTime.h
@@ -70,6 +70,8 @@ namespace Isis {
    *           setEt and addition operators
    *  @history 2015-07-21 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors
    *           were signaled. References #2248.
+   *  @history 2018-03-15 Adam Goins - Removed deprecated function iTime::UnloadLeapSecondKernel().
+   *                          Fixes #5325.
    */
   class iTime {
     public:
@@ -139,7 +141,7 @@ namespace Isis {
       QString UTC() const;
       static QString CurrentGMT();
       static QString CurrentLocalTime();
-      
+
       void setEt(double et);
       void setUtc(QString utcString);
 
@@ -148,11 +150,9 @@ namespace Isis {
                            passed into the constructor or the operator= member*/
 
       void LoadLeapSecondKernel();
-      void UnloadLeapSecondKernel();
 
       static bool p_lpInitialized;
   };
 };
 
 #endif
-
diff --git a/isis/src/cassini/apps/ciss2isis/ciss2isis.cpp b/isis/src/cassini/apps/ciss2isis/ciss2isis.cpp
index ab81f852563e605967f19e84c1ea3bc706f92035..2ce069e018b31a5a249722918ddc67e3d338115d 100644
--- a/isis/src/cassini/apps/ciss2isis/ciss2isis.cpp
+++ b/isis/src/cassini/apps/ciss2isis/ciss2isis.cpp
@@ -229,12 +229,15 @@ void CreateStretchPairs() {
   return;
 }
 
-// The input buffer has a raw 16 bit buffer but the values are still 0 to 255.
-// We know that 255 (stretched to 4095 if Table converted) is saturated.
-// Sky pixels could have valid DN of 0, but missing pixels are also saved as 0,
-// so it is impossible to distinguish between them.
-// This method is used by ConvertLinePrefixPixels() and IsisMain() for ProcessByLine p2.
-// author Jeannie Walldren 2008-08-21
+/**
+* The input buffer has a raw 16 bit buffer but the values are still 0 to 255.
+* We know that 255 (stretched to 4095 if Table converted) is saturated.
+* Sky pixels could have valid DN of 0, but missing pixels are also saved as 0,
+* so it is impossible to distinguish between them.
+* This method is used by ConvertLinePrefixPixels() and IsisMain() for ProcessByLine p2.
+* author Jeannie Walldren 2008-08-21
+*
+*/
 void FixDns(Buffer &buf) {
   for(int i = 0; i < buf.size(); i++) {
     // zeros and negatives are valid DN values, according to scientists,
@@ -452,4 +455,3 @@ double ComputeOverclockAvg(vector <double> pixel) {
 //        IDL cisscal application files: cassimg_subtractdark.pro and linetime.pro
 // -Jeannie Walldren 08/06/2008
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
diff --git a/isis/src/cassini/apps/ciss2isis/ciss2isis.xml b/isis/src/cassini/apps/ciss2isis/ciss2isis.xml
index f2714b5bce1ae48867cf2e873359c92cc7a96805..5d77ef85ec484681c4df3e6192d2fbffb77b0c86 100644
--- a/isis/src/cassini/apps/ciss2isis/ciss2isis.xml
+++ b/isis/src/cassini/apps/ciss2isis/ciss2isis.xml
@@ -3,16 +3,16 @@
 <application name="ciss2isis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
 
   <brief>
-    Import a PDS Cassini ISS image file into Isis 
+    Import a PDS Cassini ISS image file into Isis
   </brief>
 
   <description>
     This program will import a PDS Cassini ISS image file into an
     Isis cube.  Some Cassini files available from PDS contain VICAR labels
     <b>THIS PROGRAM ONLY ACCEPTS PDS LABELS.</b> You must specify an
-    input file which contains PDS labels.  <strong>Note:</strong> Scientists 
-    indicate that zeros may be valid DN values for sky areas of CISS images,  
-    but missing pixels are also assigned a value of zero and there is no known 
+    input file which contains PDS labels.  <strong>Note:</strong> Scientists
+    indicate that zeros may be valid DN values for sky areas of CISS images,
+    but missing pixels are also assigned a value of zero and there is no known
     way to distinguish them. Since the chance of a valid zero DN is so slight,
     ciss2isis will replace all zeros with Isis::Null.
   </description>
@@ -35,24 +35,24 @@
     <change name="Christopher Austin" date="2008-03-18">
       Checks if input file is rdr.
     </change>
-    <change name="Jeannie Walldren" date="2008-08-25"> Modified application to 
-      save off binary file header and compute read out order,  to save off line 
-      prefix data of overclocked pixels with the appropriate overclock average 
-      into a table, and  to convert compressed 8bit images to 16bit using a 
-      look-up table. Added keywords, with units where appropriate, to labels. 
+    <change name="Jeannie Walldren" date="2008-08-25"> Modified application to
+      save off binary file header and compute read out order,  to save off line
+      prefix data of overclocked pixels with the appropriate overclock average
+      into a table, and  to convert compressed 8bit images to 16bit using a
+      look-up table. Added keywords, with units where appropriate, to labels.
     </change>
-    <change name="Jeannie Walldren" date="2008-08-28"> Modified to 
-      allow import of images with BandBin filter combinations not found or 
-      commented out in the translation *.def files.  Previously, this 
-      circumstance stopped the program and threw an exception. Application now 
+    <change name="Jeannie Walldren" date="2008-08-28"> Modified to
+      allow import of images with BandBin filter combinations not found or
+      commented out in the translation *.def files.  Previously, this
+      circumstance stopped the program and threw an exception. Application now
       outputs a warning to the log but still creates the cube.
     </change>
     <change name="Jeannie Walldren" date="2008-11-05">
       Modified FixDns method and updated documentation.
     </change>
     <change name="Jeannie Walldren" date="2009-05-27">
-      Modified to convert BiasStripMean value back to 12-bit using look up table 
-      for images with DataConversionType of Table.  Updated documentation in 
+      Modified to convert BiasStripMean value back to 12-bit using look up table
+      for images with DataConversionType of Table.  Updated documentation in
       ciss2isis.cpp
     </change>
     <change name="Christopher Austin" date="2010-01-08">
@@ -70,13 +70,13 @@
     </change>
   </history>
   <liens>
-    <item> 
+    <item>
       Insert hyperlinks to section Related Objects and Documents, subsection
       Documents.
     </item>
     <item>
-       Since zeros may be valid DNs and missing pixels are set to zero, 
-       investigate whether there is a way to distinguish the two.  If so, update 
+       Since zeros may be valid DNs and missing pixels are set to zero,
+       investigate whether there is a way to distinguish the two.  If so, update
        FixDns method in cisscal.cpp.
     </item>
   </liens>
@@ -90,8 +90,8 @@
       <document>
         <title>
             Cassini ISS Software
-                Interface Specification (SIS) -- 
-              https://cel.jpl.nasa.gov/cedr/home/mcdl.html 
+                Interface Specification (SIS) --
+              https://cel.jpl.nasa.gov/cedr/home/mcdl.html
         </title>
       </document>
     </documents>
@@ -148,7 +148,7 @@
       Using ciss2isis
       </brief>
       <description>
-        The use of ciss2isis to ingest PDS images and output Isis3 cubes. 
+        The use of ciss2isis to ingest PDS images and output Isis3 cubes.
       </description>
       <terminalInterface>
         <commandLine>
@@ -156,10 +156,10 @@
 	  to= N1472853667_1.cub
         </commandLine>
         <description>
-	This example shows the use of ciss2isis create an Isis3 cube from a PDS image. 
+	This example shows the use of ciss2isis create an Isis3 cube from a PDS image.
         </description>
       </terminalInterface>
-   
+
       <guiInterfaces>
         <guiInterface>
           <image width="448" height="550" src="assets/images/ciss2isisGUI.jpg">
@@ -196,7 +196,7 @@
           <parameterName>TO</parameterName>
         </dataFile>
       </dataFiles>
-  
+
       <outputImages>
         <image width="551" height="550" src="assets/images/N1472853667_1.jpg">
           <brief>
diff --git a/isis/src/cassini/objs/VimsCamera/VimsCamera.cpp b/isis/src/cassini/objs/VimsCamera/VimsCamera.cpp
index 929bb6b51a41c92c1c0a595fc5cfc106a507060f..4b78ac01ba89577b04dba44bd5806de722cbd866 100644
--- a/isis/src/cassini/objs/VimsCamera/VimsCamera.cpp
+++ b/isis/src/cassini/objs/VimsCamera/VimsCamera.cpp
@@ -2,17 +2,17 @@
  * @file
  *
  *   Unless noted otherwise, the portions of Isis written by the USGS are public
- *   domain. See individual third-party library and package descriptions for 
+ *   domain. See individual third-party library and package descriptions for
  *   intellectual property information,user agreements, and related information.
  *
  *   Although Isis has been used by the USGS, no warranty, expressed or implied,
- *   is made by the USGS as to the accuracy and functioning of such software 
- *   and related material nor shall the fact of distribution constitute any such 
- *   warranty, and no responsibility is assumed by the USGS in connection 
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
  *   therewith.
  *
  *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see 
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
  *   the Privacy &amp; Disclaimers page on the Isis website,
  *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
  *   http://www.usgs.gov/privacy.html.
@@ -50,13 +50,16 @@ namespace Isis {
    *
    * @param [in] lab   (Pvl &)  Label used to create camera model
    *
-   * @internal 
+   * @internal
    *   @history 2007-12-12  Tracie Sucharski,  After creating spice cache with
    *                           padding, reset et by calling SetImage(1,1) so that
    *                           et is initialized properly at beginning of image
    *                           without padding.
    * @internal
    *   @history 2011-05-03 Jeannie Walldren - Added NAIF error check.
+   *   @history 2018-03-14 Adam Goins - Changed cache calculations with LoadCache() call.
+   *                           This fixes an error where VimsCamera caused spiceinit to
+   *                           fail when TargetName == SKY. Fixes #5353.
    *
    */
   VimsCamera::VimsCamera(Cube &cube) : Camera(cube) {
@@ -64,7 +67,7 @@ namespace Isis {
     m_instrumentNameShort = "VIMS";
     m_spacecraftNameLong = "Cassini Huygens";
     m_spacecraftNameShort = "Cassini";
-    
+
     NaifStatus::CheckErrors();
 
     Pvl &lab = *cube.label();
@@ -161,18 +164,8 @@ namespace Isis {
     ((VimsGroundMap *)GroundMap())->Init(lab);
     ((VimsSkyMap *)SkyMap())->Init(lab);
 
-    double tol = PixelResolution();
-
-    if (tol < 0.) {
-      // Alternative calculation of .01*ground resolution of a pixel
-      tol = PixelPitch() * SpacecraftAltitude() / FocalLength() / 1000. / 100.;
-    }
-
-    if (channel == "VIS") createCache(etStart, etStop, 64 * 64, tol);
-    if (channel == "IR") createCache(etStart, etStop, 64 * 64, tol);
+    LoadCache();
 
-    //  Call SetImage so that the et is reset to beginning of image w/o
-    //   padding.
     IgnoreProjection(true);
     SetImage(1, 1);
     IgnoreProjection(false);
@@ -182,10 +175,10 @@ namespace Isis {
 
 
   /**
-   * Returns the pixel ifov offsets from center of pixel.  For vims this will be a rectangle or 
-   * square, depending on the sampling mode.  The first vertex is the top left. 
-   *  
-   * @internal 
+   * Returns the pixel ifov offsets from center of pixel.  For vims this will be a rectangle or
+   * square, depending on the sampling mode.  The first vertex is the top left.
+   *
+   * @internal
    *   @history 2013-08-09 Tracie Sucharski - Add more vertices along each edge.  This might need
    *                          to be a user parameter evenually?  Might be dependent on resolution.
    */
@@ -218,17 +211,16 @@ namespace Isis {
 }
 
 // Plugin
-/** 
- * This is the function that is called in order to instantiate a VimsCamera object. 
+/**
+ * This is the function that is called in order to instantiate a VimsCamera object.
  *
  * @param lab Cube labels
  *
  * @return Isis::Camera* VimsCamera
- * @internal 
+ * @internal
  *   @history 2011-05-03 Jeannie Walldren - Added documentation.  Removed
  *            Cassini namespace.
  */
 extern "C" Isis::Camera *VimsCameraPlugin(Isis::Cube &cube) {
   return new Isis::VimsCamera(cube);
 }
-
diff --git a/isis/src/cassini/objs/VimsCamera/VimsCamera.h b/isis/src/cassini/objs/VimsCamera/VimsCamera.h
index 298883828ac2dec0cd00cf642437f8a29e4dd5fc..b2052ef05da5c312bcbc3596568b54dff08f2490 100644
--- a/isis/src/cassini/objs/VimsCamera/VimsCamera.h
+++ b/isis/src/cassini/objs/VimsCamera/VimsCamera.h
@@ -62,7 +62,7 @@ namespace Isis {
    *                          namespace wrap inside Isis namespace wrap. Added
    *                          Isis Disclaimer to files. Added NAIF error check
    *                          to constructor.
-   *   @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis 
+   *   @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis
    *                          coding standards. References #972.
    *   @history 2012-03-04 Tracie Sucharski - Added new method, PixelIfovOffsets, which will return
    *                           the ifov offsets,in x and y, from the center of the pixel in mm.  The
@@ -78,9 +78,12 @@ namespace Isis {
    *   @history 2015-08-11 Ian Humphrey and Makayla Shepherd - Added new data members and methods
    *                           to get spacecraft and instrument names. Extended unit test to test
    *                           these methods.
-   *   @history 2015-10-16 Ian Humphrey - Removed declarations of spacecraft and instrument 
+   *   @history 2015-10-16 Ian Humphrey - Removed declarations of spacecraft and instrument
    *                           members and methods and removed implementation of these methods
    *                           since Camera now handles this. References #2335.
+   *   @history 2018-03-14 Adam Goins - Changed cache calculations with LoadCache() call.
+   *                           This fixes an error where VimsCamera caused spiceinit to
+   *                           fail when TargetName == SKY. Fixes #5353.
    */
   class VimsCamera : public Camera {
     public:
@@ -92,7 +95,7 @@ namespace Isis {
 
       /**
        * The Vims camera is the only point camera we have.
-       *  
+       *
        * @return CameraType Camera::Point
        */
       virtual CameraType GetCameraType() const {
@@ -104,32 +107,32 @@ namespace Isis {
 
       /**
        * CK frame ID -  - Instrument Code from spacit run on CK
-       *  
-       * @return @b int The appropriate instrument code for the "Camera-matrix" 
+       *
+       * @return @b int The appropriate instrument code for the "Camera-matrix"
        *         Kernel Frame ID
        */
       virtual int CkFrameId() const { return (-82000); }
 
-      /** 
+      /**
        * CK Reference ID - J2000
-       * 
+       *
        * @return @b int The appropriate instrument code for the "Camera-matrix"
        *         Kernel Reference ID
        */
       virtual int CkReferenceId() const { return (1); }
 
-      /** 
+      /**
        *  SPK Center ID - 6 (Saturn)
-       *  
-       * @return @b int The appropriate instrument code for the Spacecraft 
+       *
+       * @return @b int The appropriate instrument code for the Spacecraft
        *         Kernel Center ID
        */
       virtual int SpkCenterId() const { return 6; }
 
-      /** 
+      /**
        *  SPK Reference ID - J2000
-       *  
-       * @return @b int The appropriate instrument code for the Spacecraft 
+       *
+       * @return @b int The appropriate instrument code for the Spacecraft
        *         Kernel Reference ID
        */
       virtual int SpkReferenceId() const { return (1); }
diff --git a/isis/src/clementine/objs/UvvisCamera/ClementineUvvisDistortionMap.cpp b/isis/src/clementine/objs/UvvisCamera/ClementineUvvisDistortionMap.cpp
index b41692d39153aecf413da1f2be49f16881da6d2f..047eb050fe432862b841bf4f781d4697061d17a5 100755
--- a/isis/src/clementine/objs/UvvisCamera/ClementineUvvisDistortionMap.cpp
+++ b/isis/src/clementine/objs/UvvisCamera/ClementineUvvisDistortionMap.cpp
@@ -65,7 +65,7 @@ namespace Isis {
   /** 
    * Deconstruct the distortion map for the Clementine UVVIS instrument. 
    */ 
-  ~ClementineUvvisDistortionMap() {
+  ClementineUvvisDistortionMap::~ClementineUvvisDistortionMap() {
   }
 
 
diff --git a/isis/src/clementine/objs/UvvisCamera/UvvisCamera.truth b/isis/src/clementine/objs/UvvisCamera/UvvisCamera.truth
index d44834d44e4f7f42b3284f92c3d9545f02b7aad2..ce954c1cbcf66046bbae9c93abc28e2097c78fe8 100644
--- a/isis/src/clementine/objs/UvvisCamera/UvvisCamera.truth
+++ b/isis/src/clementine/objs/UvvisCamera/UvvisCamera.truth
@@ -1,6 +1,6 @@
 Unit Test for UvvisCamera...
 FileName: lub0428b.cub
-CK Frame: -40002
+CK Frame: -40022
 
 Kernel IDs: 
 CK Frame ID = -40000
diff --git a/isis/src/clementine/objs/UvvisCamera/unitTest.cpp b/isis/src/clementine/objs/UvvisCamera/unitTest.cpp
index e8c5e4b8018c3c2defae5725ba15f1ad983a3b51..918ec4489693a5d39de8dcdf2f7b83b26e63f8a3 100644
--- a/isis/src/clementine/objs/UvvisCamera/unitTest.cpp
+++ b/isis/src/clementine/objs/UvvisCamera/unitTest.cpp
@@ -45,8 +45,10 @@ int main(void) {
     // These should be lat/lon at center of image. To obtain these numbers for a new cube/camera,
     // set both the known lat and known lon to zero and copy the unit test output "Latitude off by: "
     // and "Longitude off by: " values directly into these variables.
-    double knownLat = -78.45421507741148;
-    double knownLon = 126.8232718994049;
+//    double knownLat = -78.45421507741148;
+//    double knownLon = 126.8232718994049;
+    double knownLat = -78.5596210979503127;
+    double knownLon = 126.7917803447135014;
 
     Cube c("$clementine1/testData/lub0428b.cub", "r");
     UvvisCamera *cam = (UvvisCamera *) CameraFactory::Create(c);
diff --git a/isis/src/control/apps/cnet2dem/PointCloudTree.h b/isis/src/control/apps/cnet2dem/PointCloudTree.h
index 2122a911ababc7b3944e3b6d8feedf62dcc08816..df2b3912e62d342ed7eb41714c75cfb612c731ce 100644
--- a/isis/src/control/apps/cnet2dem/PointCloudTree.h
+++ b/isis/src/control/apps/cnet2dem/PointCloudTree.h
@@ -28,7 +28,7 @@
 
 #include <QSharedPointer>
 
-#include <nanoflann/nanoflann.hpp>
+#include <nanoflann.hpp>
 
 #include "PointCloud.h"
 #include "PointCloudSearchResult.h"
diff --git a/isis/src/control/apps/cnet2dem/cnet2dem.cpp b/isis/src/control/apps/cnet2dem/cnet2dem.cpp
index fb0efbf522ca344c37d60ecf06daac1008be1dbd..25716043273c089ca6cd4fce9ef0d581a2e13dce 100644
--- a/isis/src/control/apps/cnet2dem/cnet2dem.cpp
+++ b/isis/src/control/apps/cnet2dem/cnet2dem.cpp
@@ -9,7 +9,7 @@
 // boost library
 #include <boost/foreach.hpp>
 
-#include "nanoflann/nanoflann.hpp"
+#include "nanoflann.hpp"
 
 #include "ControlNet.h"
 #include "ControlPointCloudPt.h"
diff --git a/isis/src/control/apps/cnetbin2pvl/cnetbin2pvl.xml b/isis/src/control/apps/cnetbin2pvl/cnetbin2pvl.xml
index 6daa77c8a6ac99d088aceb6e7224ecee3c2dda6f..da7cd8b6035c766f912eaa4fe8b04edf32afdcc9 100644
--- a/isis/src/control/apps/cnetbin2pvl/cnetbin2pvl.xml
+++ b/isis/src/control/apps/cnetbin2pvl/cnetbin2pvl.xml
@@ -8,8 +8,8 @@
   <description>
     <p>
       This program converts an Isis3 control network file from binary into a human readable
-      utf8 pvl formatted file. The output pvl will be written as the latest Pvl version.
-      The most recent Pvl template can be found in the Control data directory under templates/controlnetworks.
+      UTF-8 pvl formatted file. The output .pvl will be written as the latest PVL version.
+      The most recent PVL template can be found in the Control data directory under templates/controlnetworks.
     </p>
   </description>
 
@@ -28,8 +28,8 @@
       Added a basic progress
     </change>
     <change name="Adam Goins" date="2018-01-24">
-      Updated Description to reflect utf file format.
-      Added link to current Pvl template.
+      Updated Description to reflect UTF-8 file format.
+      Added link to current PVL template.
       Added user example.
     </change>
   </history>
@@ -54,10 +54,10 @@
       <type>filename</type>
       <fileMode>output</fileMode>
       <brief>
-              Pvl formated control net file
+              PVL formatted control net file
       </brief>
       <description>
-              A control net file in the Pvl format.
+              A control network file in the PVL format.
       </description>
       <filter>
               *.cnet *.pvl
@@ -67,14 +67,14 @@
   </groups>
   <examples>
     <example>
-      <brief>Converting a binary Control Network to a Pvl network.</brief>
-      <description>A binary V0001 Control Network converted to the latest Pvl network.</description>
+      <brief>Converting a binary Control Network to a PVL network.</brief>
+      <description>A binary V0001 Control Network converted to the latest PVL network.</description>
       <terminalInterface>
         <commandLine>
           from=/usgs/cpkgs/isis3/data/control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net to=PvlNetwork.pvl
         </commandLine>
         <description>
-          In this example we are converting a binary V0001 network from the test data area to a Pvl network.
+          In this example, we are converting a binary V0001 network from the test data area to a PVL network.
         </description>
       </terminalInterface>
       <inputImages>
@@ -89,20 +89,20 @@
       </inputImages>
       <outputImages>
         <image src="assets/image/OutputNetwork.png" width="500" height="500">
-          <brief>Output Pvl network from cnetbin2pvl</brief>
+          <brief>Output PVL network from cnetbin2pvl</brief>
           <description>
-            This is the Pvl network that results from running cnetbin2pvl.
+            This is the PVL network that results from running cnetbin2pvl.
           </description>
-          <thumbnail caption="Output Pvl network that was made from the existing network." src="assets/image/OutputNetwork.png" width="200" height="165"/>
+          <thumbnail caption="Output PVL network that was made from the existing network." src="assets/image/OutputNetwork.png" width="200" height="165"/>
           <parameterName>TO</parameterName>
         </image>
       </outputImages>
       <guiInterfaces>
         <guiInterface>
           <image width="500" height="500" src="assets/image/cnetbin2pvlGUI.png">
-            <brief>Example Gui</brief>
+            <brief>Example GUI</brief>
             <description>
-              Screenshot of GUI with parameters filled to convert a binary Control Network to a Pvl network.
+              Screenshot of GUI with parameters filled to convert a binary Control Network to a PVL network.
             </description>
             <thumbnail width="200" height="165" caption="Cnetbin2pvl -gui" src="assets/image/cnetbin2pvlGUI.png"/>
           </image>
diff --git a/isis/src/control/apps/cnetcombinept/PointCloudTree.h b/isis/src/control/apps/cnetcombinept/PointCloudTree.h
index 4fdb116b26b4a6076e7c3bcb75cb2eef0cdabcdb..ddaf7cfb59157f0fe08d9cffd5b014707b31ae00 100644
--- a/isis/src/control/apps/cnetcombinept/PointCloudTree.h
+++ b/isis/src/control/apps/cnetcombinept/PointCloudTree.h
@@ -28,7 +28,7 @@
 
 #include <QSharedPointer>
 
-#include <nanoflann/nanoflann.hpp>
+#include <nanoflann.hpp>
 
 #include "PointCloud.h"
 
diff --git a/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp b/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp
index e44f1ac326daab5c1701f479ba203d7b004f36b0..491a36aafa1ac6f53113346b338b3438bcf0c7a2 100644
--- a/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp
+++ b/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp
@@ -9,7 +9,7 @@
 #include <boost/foreach.hpp>
 #include <boost/assert.hpp>
 
-#include "nanoflann/nanoflann.hpp"
+#include "nanoflann.hpp"
 
 #include "ControlNet.h"
 #include "MeasurePoint.h"
@@ -59,7 +59,7 @@ typedef PointCloudTree<PointType>          CNetPointCloudTree;
 typedef QSharedPointer<CNetPointCloudTree> CubeMeasureTree;
 
 void IsisMain() {
- 
+
   // We will be processing by line
   ProcessByLine pbl;
   UserInterface &ui = Application::GetUserInterface();
@@ -67,13 +67,13 @@ void IsisMain() {
   QStringList cnetfiles;
   int nBase(0);
   if ( ui.WasEntered("CNETBASE") ) {
-    cnetfiles.append(ui.GetAsString("CNETBASE")); 
+    cnetfiles.append(ui.GetAsString("CNETBASE"));
     nBase++;
   }
 
   int nFrom(0);
   if ( ui.WasEntered("CNETFROM") ) {
-    cnetfiles.append(ui.GetAsString("CNETFROM")); 
+    cnetfiles.append(ui.GetAsString("CNETFROM"));
     nFrom++;
   }
 
@@ -112,7 +112,6 @@ void IsisMain() {
   QString netid;
   QString target;
   QString description;
-  QVector<Distance> radii;
 
   BigInt allPoints(0);
   BigInt validPoints(0);
@@ -127,17 +126,14 @@ void IsisMain() {
 #else
     QScopedPointer<ControlNet> cnet( new ControlNet(cfile) );
 #endif
-    if ( netid.isEmpty() ) { 
-      netid = cnet->GetNetworkId(); 
-    }
-    if ( target.isEmpty() ) { 
-      target = cnet->GetTarget(); 
+    if ( netid.isEmpty() ) {
+      netid = cnet->GetNetworkId();
     }
-    if ( description.isEmpty() ) { 
-      description = cnet->Description(); 
+    if ( target.isEmpty() ) {
+      target = cnet->GetTarget();
     }
-    if ( radii.isEmpty() )  { 
-      radii = QVector<Distance>::fromStdVector(cnet->GetTargetRadii()); 
+    if ( description.isEmpty() ) {
+      description = cnet->Description();
     }
 
     // Now get list of all cube serials and add all to list
@@ -182,7 +178,7 @@ void IsisMain() {
 
     FileName filename( ui.GetFileName("TOSN") );
     QFile logfile(filename.expanded());
-    if ( !logfile.open(QIODevice::WriteOnly | QIODevice::Truncate | 
+    if ( !logfile.open(QIODevice::WriteOnly | QIODevice::Truncate |
                        QIODevice::Text | QIODevice::Unbuffered) ) {
       QString mess = "Unable to open/create serial number file " + filename.name();
       throw IException(IException::User, mess, _FILEINFO_);
@@ -194,7 +190,7 @@ void IsisMain() {
       sns.next();
       lout << sns.key() << "\n";
     }
-    
+
     logfile.close();
   }
 
@@ -285,7 +281,7 @@ void IsisMain() {
   bool cleanmeasures = ui.GetBoolean("CLEANMEASURES");
   int minmeasures = ui.GetInteger("MINMEASURES");
 
-  // Set up control net here so we can complete all processing in this step 
+  // Set up control net here so we can complete all processing in this step
   QScopedPointer<ControlNet> cnet;
   if ( ui.WasEntered("ONET") ) {
     // std::cout << "\nWriting network...\n";
@@ -295,16 +291,16 @@ void IsisMain() {
       netid = ui.GetString("NETWORKID");
     }
 
-    cnet->SetNetworkId(netid); 
+    cnet->SetNetworkId(netid);
     cnet->SetUserName(Application::UserName());
 
-    if ( ui.WasEntered("DESCRIPTION") ) {  
-      description = ui.GetString("DESCRIPTION"); 
+    if ( ui.WasEntered("DESCRIPTION") ) {
+      description = ui.GetString("DESCRIPTION");
     }
 
-    cnet->SetDescription(description); 
+    cnet->SetDescription(description);
     cnet->SetCreatedDate(Application::DateTime());
-    cnet->SetTarget(target, radii);
+    cnet->SetTarget(target);
 #if defined(HAS_WRITE_ONLY_OPTION)
     cnet->setWriteOnly();
 #endif
@@ -337,14 +333,14 @@ void IsisMain() {
 
     if ( isValid(m_p) ) {
       vPoints++;
-      
+
       // Processes measures if requested
       if ( true == cleanmeasures ) {
 
         QList<ControlMeasure *> measures = m_p->getMeasures( false );
         BOOST_FOREACH ( ControlMeasure *m, measures) {
-          if ( !isValid(m) ) {  
-            m_p->Delete(m); 
+          if ( !isValid(m) ) {
+            m_p->Delete(m);
             nRemoved++;
           }
         }
@@ -383,7 +379,7 @@ void IsisMain() {
           m_p->SetAprioriSurfacePoint(m_p->GetBestSurfacePoint());
         }
 
-        cnet->AddPoint(m_p); 
+        cnet->AddPoint(m_p);
         oPoints++;
       }
       else { // If not creating control network, ensure points are deleted
@@ -420,4 +416,3 @@ void IsisMain() {
 
   pbl.EndProcess();
 }
-
diff --git a/isis/src/control/apps/cnetcombinept/cnetcombinept.xml b/isis/src/control/apps/cnetcombinept/cnetcombinept.xml
index 83570228bf263c3d8d7cca1f20c56a157595bd2f..73516a55a3235e6652aa7326e3b9e6b8fe3c3a08 100644
--- a/isis/src/control/apps/cnetcombinept/cnetcombinept.xml
+++ b/isis/src/control/apps/cnetcombinept/cnetcombinept.xml
@@ -9,9 +9,9 @@
   <description>
     <p>
       This program will create a control network by combining control points
-      from one or more control networks into single points that satisfy image 
+      from one or more control networks into single points that satisfy image
       distance criteria. It employs a more robust/direct technique than
-      <em>cnetmerge</em>. This technique evaluates each control point in all 
+      <em>cnetmerge</em>. This technique evaluates each control point in all
       input networks by finding all candidate merger control points who have a
       measure within IMAGETOL. Then, for each candidate point, the average
       distance of the measures in the candidate to a measure in the source
@@ -24,12 +24,12 @@
     </p>
     <p>
        When all control points have been searched and all mergers have taken
-       place, a new single combined control network is created. 
+       place, a new single combined control network is created.
     </p>
     <p>
-        Note that this application can be ran more than once and directly on the 
-        output of any past run (in other words, you need only provide a single 
-        network, if desired). 
+        Note that this application can be ran more than once and directly on the
+        output of any past run (in other words, you need only provide a single
+        network, if desired).
     </p>
   </description>
 
@@ -47,16 +47,16 @@
       Corrected the count when SAVEMINS=TRUE.
     </change>
     <change name="Kris Becker" date="2015-11-13">
-      Uses modified ControlNet class  which provides the ability to take 
-      ownership of all points in the control net efficiently. This is needed 
-      in order to ensure only a single copies of control points are utlized to 
+      Uses modified ControlNet class  which provides the ability to take
+      ownership of all points in the control net efficiently. This is needed
+      in order to ensure only a single copies of control points are utlized to
       minimize memory overhead.
     </change>
     <change name="Jeannie Backer" date="2016-03-11">
       Added program to ISIS package.
     </change>
     <change name="Jeannie Backer" date="2016-04-22">
-      Modified to set the new control net's target and radii by using the input control net's 
+      Modified to set the new control net's target and radii by using the input control net's
       values. References #3892
     </change>
     <change name="Kris Becker" date="2016-12-05">
@@ -76,6 +76,10 @@
     <change name="Tyler Wilson" date="2017-06-29">
       cnetcombinept now properly sets apriori lat/lon values to adjusted values.  Fixes #4772.
     </change>
+    <change name="Jesse Mapel" date="2018-07-06">
+      Removed calls to set control net target radii because they are no longer needed by
+      the control network. Fixes #5457.
+    </change>
   </history>
 
   <category>
@@ -87,11 +91,11 @@
 
       <parameter name="CNETBASE">
         <type>filename</type>
-        <fileMode>input</fileMode>           
+        <fileMode>input</fileMode>
         <internalDefault>None</internalDefault>
         <brief>Master control network file to match</brief>
         <description>
-          The base control network file to which others will be matched. 
+          The base control network file to which others will be matched.
         </description>
         <filter>*.net *.cnet *.ctl</filter>
       </parameter>
@@ -142,8 +146,8 @@
           Write a list of all serial numbers contained in the network
         </brief>
         <description>
-           Provided with a filename in this option, all the cube serial numbers 
-           that are contained in the network are written to this file as soon as 
+           Provided with a filename in this option, all the cube serial numbers
+           that are contained in the network are written to this file as soon as
            it is determined in the processing.
         </description>
         <filter>*.lis</filter>
@@ -182,10 +186,10 @@
            </description>
         </parameter>
 
-        <parameter name="KDNODES"> 
+        <parameter name="KDNODES">
            <type>integer</type>
            <default><item>10</item></default>
-           <brief>Specify the leaf size of the kd-tree</brief> 
+           <brief>Specify the leaf size of the kd-tree</brief>
            <description>
               Number of leaves in the kd-tree structure.
            </description>
@@ -197,8 +201,8 @@
               Reset the apriori surface point to best available
            </brief>
            <description>
-               When TRUE, all points apriori latitude/longitude surface point is 
-               updated to use the best one available. This is often the 
+               When TRUE, all points apriori latitude/longitude surface point is
+               updated to use the best one available. This is often the
                resulting coordinate after jigsaw has adjusted the surface point.
            </description>
            <default><item>false</item></default>
@@ -210,18 +214,18 @@
            <brief>Remove all invalid or ignored control points/measures</brief>
            <description>
              <p>
-                 When true, all invalid or ignored control points and measures 
-                 are removed from the output control network as one of 
-                 the main objectives of this application is to remove 
-                 redundancies and mimimize the size of networks. However, for 
-                 evaluation purposes, you can set this to false, which will 
-                 preserve all control points. 
+                 When true, all invalid or ignored control points and measures
+                 are removed from the output control network as one of
+                 the main objectives of this application is to remove
+                 redundancies and mimimize the size of networks. However, for
+                 evaluation purposes, you can set this to false, which will
+                 preserve all control points.
              </p>
              <p>
-                 When specifying the minimum number of measures/control point 
-                 using the MINMEASURES parameter, any control point that does 
-                 not meet this criteria will also be removed from the netwrk 
-                 when CLEANNET=true, otherwise these points will be set to 
+                 When specifying the minimum number of measures/control point
+                 using the MINMEASURES parameter, any control point that does
+                 not meet this criteria will also be removed from the netwrk
+                 when CLEANNET=true, otherwise these points will be set to
                  ignored.
              </p>
            </description>
@@ -233,18 +237,18 @@
            <brief>Remove all invalid or ignored control measures</brief>
            <description>
              <p>
-                 When true, all invalid or ignored control points and measures 
-                 are removed from the output control network as one of 
-                 the main objectives of this application is to remove 
-                 redundancies and mimimize the size of networks. However, for 
-                 evaluation purposes, you can set this to false, which will 
-                 preserve all control points. 
+                 When true, all invalid or ignored control points and measures
+                 are removed from the output control network as one of
+                 the main objectives of this application is to remove
+                 redundancies and mimimize the size of networks. However, for
+                 evaluation purposes, you can set this to false, which will
+                 preserve all control points.
              </p>
              <p>
-                 When specifying the minimum number of measures/control point 
-                 using the MINMEASURES parameter, any control point that does 
-                 not meet this criteria will also be removed from the netwrk 
-                 when CLEANNET=true, otherwise these points will be set to 
+                 When specifying the minimum number of measures/control point
+                 using the MINMEASURES parameter, any control point that does
+                 not meet this criteria will also be removed from the netwrk
+                 when CLEANNET=true, otherwise these points will be set to
                  ignored.
              </p>
            </description>
@@ -253,18 +257,18 @@
         <parameter name="MINMEASURES">
             <type>integer</type>
             <default><item>0</item></default>
-            <brief>Select minimim number of valid measures/point</brief> 
+            <brief>Select minimim number of valid measures/point</brief>
             <description>
-                 This allows users to disable points that have less than   
-                 MINMEASURES control measures/control point. For example, if you 
-                 want to flag all points as ignored with 2 measures or less, set 
-                 MINMEASURES=3. Points that don't meet this critieria are set to 
-                 ignore and are subject to the CLEANNET action requested by the 
-                 user (i.e., all ignored points are removed from the network if 
+                 This allows users to disable points that have less than
+                 MINMEASURES control measures/control point. For example, if you
+                 want to flag all points as ignored with 2 measures or less, set
+                 MINMEASURES=3. Points that don't meet this critieria are set to
+                 ignore and are subject to the CLEANNET action requested by the
+                 user (i.e., all ignored points are removed from the network if
                  CLEANNET=true).
             </description>
         </parameter>
-      
+
     </group>
   </groups>
 </application>
diff --git a/isis/src/control/apps/cnetsplit/cnetsplit.cpp b/isis/src/control/apps/cnetsplit/cnetsplit.cpp
index 629dcd50aa4e596dc420df6e209c1c5cb52a0eb1..196a63e9602115ba509d39a190e8bcbc239c0256 100644
--- a/isis/src/control/apps/cnetsplit/cnetsplit.cpp
+++ b/isis/src/control/apps/cnetsplit/cnetsplit.cpp
@@ -66,7 +66,7 @@ void IsisMain() {
       oNet.SetCreatedDate(Application::DateTime());
       oNet.SetDescription(cNet.Description());
       oNet.SetNetworkId(cNet.GetNetworkId());
-      oNet.SetTarget(cNet.GetTarget(), QVector<Distance>::fromStdVector(cNet.GetTargetRadii()));
+      oNet.SetTarget(cNet.GetTarget());
       oNet.SetUserName(Application::UserName());
 
       startIndex = endIndex;
diff --git a/isis/src/control/apps/cnetsplit/cnetsplit.xml b/isis/src/control/apps/cnetsplit/cnetsplit.xml
index 1992af0d1cdcc9069bcaade09fed9089090c8c7b..9d1f4430954df393ec23f947301aaf3fbde85466 100644
--- a/isis/src/control/apps/cnetsplit/cnetsplit.xml
+++ b/isis/src/control/apps/cnetsplit/cnetsplit.xml
@@ -3,46 +3,46 @@
 <application name="cnetsplit" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
 
   <brief>
-    The application cnetsplit splits the input control network into user 
+    The application cnetsplit splits the input control network into user
     specified number of control networks.
   </brief>
 
   <description>
-    The application cnetsplit splits the input control network into a user 
+    The application cnetsplit splits the input control network into a user
     specified number of control networks with the user specified output name.
-    A possible use of this application would be to allow extremely large 
+    A possible use of this application would be to allow extremely large
     control networks to be split, then further processing could be divided
     among multiple computers.  The application, "cnetmerge" can then be used
     to merge the individual control networks back into a single large
     network.  The application log will display statistics for the input
-    ControlNet.  
+    ControlNet.
     <p>
-      The input control network keyword values for Description, NetworkId, and 
-      Target Keywords will be copied to each output control network.  The 
+      The input control network keyword values for Description, NetworkId, and
+      Target Keywords will be copied to each output control network.  The
       DateTime and UserName keywords will be created new for the output control
-      networks.  The output control networks are filled from smallest to 
-      largest output file name from the first points in the input control 
-      network to the last. 
+      networks.  The output control networks are filled from smallest to
+      largest output file name from the first points in the input control
+      network to the last.
     </p>
     <p>
-      We can denote the number of control points in the input file by 
+      We can denote the number of control points in the input file by
       <i><b>n</b></i> and the number of output files to be created is by
       <i><b>k</b></i>.  Then, denote the remainder of <i><b>n/k</b></i> by
-      <i><b>R</b></i> .  If <i><b>R</b></i> is not zero, then, the first 
-      <i><b>R</b></i> files will have one more point than the last 
-      <i><b>k-R</b></i> files.  
-      Otherwise, if <i><b>R</b></i> = 0, i.e. if the number of output files 
-      evenly divides the number of points in the input control network, then 
-      each of the output files will have the same number of points.  
+      <i><b>R</b></i> .  If <i><b>R</b></i> is not zero, then, the first
+      <i><b>R</b></i> files will have one more point than the last
+      <i><b>k-R</b></i> files.
+      Otherwise, if <i><b>R</b></i> = 0, i.e. if the number of output files
+      evenly divides the number of points in the input control network, then
+      each of the output files will have the same number of points.
     </p>
     <p>
       Errors thrown by cnetsplit will include the following:
       <ul>
         <li>No question marks in the ONET_PREFIX string.</li>
         <li>More than one set of question marks in the ONET_PREFIX string.</li>
-        <li>Not enough question marks for the specified number of output 
+        <li>Not enough question marks for the specified number of output
               files.</li>
-        <li>Number of output files exceeds the number of control points in the 
+        <li>Number of output files exceeds the number of control points in the
               intput control network.</li>
       </ul>
     </p>
@@ -66,9 +66,13 @@
       Added appTests, improved error message, added documentation.
     </change>
     <change name="Jeannie Backer" date="2016-04-22">
-      Modified to set the new control net's target and radii by using the input control net's 
+      Modified to set the new control net's target and radii by using the input control net's
       values. References #3892
     </change>
+    <change name="Jesse Mapel" date="2018-07-06">
+      Removed calls to set control net target radii because they are no longer needed by
+      the control network. Fixes #5457.
+    </change>
   </history>
 
 <groups>
@@ -80,7 +84,7 @@
           Input control network to be split.
         </brief>
         <description>
-          The input control network whose control points will be 
+          The input control network whose control points will be
           divided among the output control networks.  This file is not modified
           by cnetsplit.
         </description>
@@ -92,19 +96,19 @@
       <parameter name="ONET_PREFIX">
         <type>string</type>
         <brief>
-          The output file name pattern string containing question marks where 
+          The output file name pattern string containing question marks where
           the file number should be placed.
         </brief>
         <description>
-          This string will be used to create unique output file names.  It 
-          should contain a set of question marks ("?") where the file number 
-          will be placed. The string should not have question marks 
-          anywhere else. For each output file, the question marks will be 
-          replaced with a number from one to the number of output files.  
-          For example, if the user sets the pattern to 
-          ONET_PREFIX="ControlNet????" and NUM_OUTPUT_FILES=999, 
-          then cnetsplit will create 999 files with file names 
-          "ControlNet0001.net" through "ControlNet0999.net". 
+          This string will be used to create unique output file names.  It
+          should contain a set of question marks ("?") where the file number
+          will be placed. The string should not have question marks
+          anywhere else. For each output file, the question marks will be
+          replaced with a number from one to the number of output files.
+          For example, if the user sets the pattern to
+          ONET_PREFIX="ControlNet????" and NUM_OUTPUT_FILES=999,
+          then cnetsplit will create 999 files with file names
+          "ControlNet0001.net" through "ControlNet0999.net".
           Note: If there are not enough "?"s for the number of output files to
           be created during this run, the user will be thrown an error .
         </description>
@@ -118,7 +122,7 @@
         The number of output files that will be created by cnetsplit
       </brief>
       <description>
-        The control points from the input control network will be split among 
+        The control points from the input control network will be split among
         this number of output files.
       </description>
     </parameter>
@@ -129,13 +133,13 @@
     <example>
 
       <brief>
-        Split a control network with 8 points into 3 control networks. 
+        Split a control network with 8 points into 3 control networks.
       </brief>
 
       <description>
-        This example will show how a control network is split when the number 
-        of output networks does not evenly divide the number points in the 
-        input control network.  
+        This example will show how a control network is split when the number
+        of output networks does not evenly divide the number points in the
+        input control network.
       </description>
 
       <terminalInterface>
@@ -143,7 +147,7 @@
           cnet=controlNet.net onet_prefix=outputNetSplit??? num_output_files=3
         </commandLine>
         <description>
-          In this example, cnetsplit will split the file controlNet.net into 3 
+          In this example, cnetsplit will split the file controlNet.net into 3
           output files with name pattern outputNetSplit???
         </description>
       </terminalInterface>
@@ -155,8 +159,8 @@
               Example GUI for cnetsplit.
             </brief>
             <description>
-              Screen shot of GUI for cnetsplit.  This run of the program will 
-              split the file controlNet.net into 3 output files with name 
+              Screen shot of GUI for cnetsplit.  This run of the program will
+              split the file controlNet.net into 3 output files with name
               pattern outputNetSplit???
             </description>
             <thumbnail width="200" height="193" src="assets/thumbs/cnetsplitGuiThumb.jpeg" caption="Screenshot of GUI command."/>
@@ -170,9 +174,9 @@
             PVL of the Input control network, (controlNet.net).
           </brief>
           <description>
-            This is the input control network with 8 control points that will 
-            be divided among 3 output control networks.  This file is not 
-            changed by cnetsplit. 
+            This is the input control network with 8 control points that will
+            be divided among 3 output control networks.  This file is not
+            changed by cnetsplit.
           </description>
           <parameterName>
             CNET
@@ -184,7 +188,7 @@
             PVL of the first output control network, (outputNetSplit001.net).
           </brief>
           <description>
-            This is the first of the output control networks created by 
+            This is the first of the output control networks created by
             cnetsplit.  It contains the 1st, 2nd, and 3rd control points from
             the input control network.
           </description>
@@ -198,7 +202,7 @@
             PVL of the second output control network, (outputNetSplit002.net).
           </brief>
           <description>
-            This is the first of the output control networks created by 
+            This is the first of the output control networks created by
             cnetsplit.  It contains the 4th, 5th, and 6th control points from
             the input control network.
           </description>
@@ -212,8 +216,8 @@
             PVL of the third output control network, (outputNetSplit003.net).
           </brief>
           <description>
-            This is the last of the output control networks created by 
-            cnetsplit.  It contains the 7th and 8th control points from the 
+            This is the last of the output control networks created by
+            cnetsplit.  It contains the 7th and 8th control points from the
             input control network.
           </description>
           <parameterName>
diff --git a/isis/src/control/apps/cnetwinnow/cnetwinnow.cpp b/isis/src/control/apps/cnetwinnow/cnetwinnow.cpp
index 6510a966bc67d6d98b3122672f10a1ca0722c725..b7194969f145a5d23c407b578066eaea0c687432 100644
--- a/isis/src/control/apps/cnetwinnow/cnetwinnow.cpp
+++ b/isis/src/control/apps/cnetwinnow/cnetwinnow.cpp
@@ -311,7 +311,6 @@ void IsisMain() {
         measFlag[j] = true;  //test passed
     }
 
-
     //for now it is necessary to set measures to ignor before testing to see if they would split the network
       //this will change when the expected ControlNet::isCriticalMeasure(...) method is written
     for (int j=0; j<measGroup.size(); j++) {
@@ -319,25 +318,12 @@ void IsisMain() {
     }
 
     //if the number of islands has increased the network has split
-    if (net.GetSerialConnections().size() > numInitialIslands) islandFlag = false; //test failed
-    else islandFlag = true; //test passed
-
-    //Check to see if the network has split
-      //this simplifies to making sure that all cubes observing the ControlPoint that had some or
-      //all of it's measures ignored are still connected
-    /* //Travis Addair informed me that this method only checks 1 step conections
-    // thus it was effectively only enforcing that the last tie between pairs
-    // of images not be ingorned
-    QList<ControlMeasure *> ptMeas = suspectMeasures[i]->Parent()->getMeasures();
-    const ControlCubeGraphNode *node0 = net.getGraphNode(ptMeas[0]->GetCubeSerialNumber());
-    islandFlag = true;  //assuming the best, and then verify
-    for (int j=1; j<ptMeas.size(); j++) {
-      //check each subsequent node for conection to the first
-      if ( !node0->isConnected(net.getGraphNode(ptMeas[j]->GetCubeSerialNumber()))) {
-        islandFlag = false; //test failed
-        break;
-      }
-    }*/
+    if (net.GetSerialConnections().size() > numInitialIslands) {
+      islandFlag = false; //test failed
+    }
+    else {
+      islandFlag = true; //test passed
+    }
 
     //again we will temporarily be setting the measure back to unignored
       //this will change when the expected ControlNet::isCriticalMeasure(...) method is written
@@ -393,7 +379,6 @@ void IsisMain() {
   fclose(guiltyFile);
   fclose(ignoredReport);
 
-
   //save out the winnowed ControlNet
   net.Write(ui.GetFileName("ONET"));
 }
diff --git a/isis/src/control/apps/deltack/deltack.cpp b/isis/src/control/apps/deltack/deltack.cpp
index 0b88d4aa5b7032df44603038281b07eb99e88f73..1b78cb116a420d3a6c33ef4bdae30643b12aafac 100644
--- a/isis/src/control/apps/deltack/deltack.cpp
+++ b/isis/src/control/apps/deltack/deltack.cpp
@@ -267,12 +267,12 @@ void IsisMain() {
       QObject::connect( bundleAdjust, SIGNAL( statusUpdate(QString) ),
                         bundleAdjust, SLOT( outputBundleStatus(QString) ) );
 
-      BundleSolutionInfo bundleSolution = bundleAdjust->solveCholeskyBR();
+      BundleSolutionInfo *bundleSolution = bundleAdjust->solveCholeskyBR();
 
 
       // Output bundle adjust files
-      bundleSolution.outputText();
-      bundleSolution.outputResiduals();
+      bundleSolution->outputText();
+      bundleSolution->outputResiduals();
 
       Table cmatrix = bundleAdjust->cMatrix(0);
 
@@ -285,6 +285,9 @@ void IsisMain() {
       //cmatrix.Label().findObject("Table",Pvl::Traverse).addKeyword(description);
 
       c.write(cmatrix);
+      
+      delete bundleAdjust;
+      delete bundleSolution;
     }
 
     // Now do final clean up as the update was successful if we reach here...
@@ -351,7 +354,8 @@ BundleSettingsQsp bundleSettings() {
   //     longitude sigma        = 1000.0
   //     radius sigma           = Null since we are not solving for radius
   //     outlier rejection      = false
-  settings->setSolveOptions(false, false, false, false, 1000.0, 1000.0, Isis::Null);
+  settings->setSolveOptions(false, false, false, false, SurfacePoint::Latitudinal, 
+                            SurfacePoint::Latitudinal, 1000.0, 1000.0, Isis::Null);
   settings->setOutlierRejection(false);
 
   // =========================================================================================//
diff --git a/isis/src/control/apps/deltack/deltack.xml b/isis/src/control/apps/deltack/deltack.xml
index 76122f369e7b9f61a4e0ad38d8c4cf269ebf9428..25f78dd1d424c2f6e2cb0e5e2d23f5750ca9122e 100644
--- a/isis/src/control/apps/deltack/deltack.xml
+++ b/isis/src/control/apps/deltack/deltack.xml
@@ -190,7 +190,11 @@
       method to apply. The default is METHOD=BUNDLE which chooses pre-existing 
       behavor. Updated documentation to reflect these new changes. Fixes #4868. 
     </change>
-    
+    <change name="Ken Edmundson" date="2018-05-23">
+      Modifed call to bundleAdjustment->solveCholeskyBR() to return a raw pointer to a
+      BundleSolutionInfo object. Am also deleting this pointer because jigsaw.cpp takes
+      ownership from BundleAdjust.
+    </change>    
   </history>
 
   <groups>
diff --git a/isis/src/control/apps/findfeatures/tsts/debug/Makefile b/isis/src/control/apps/findfeatures/tsts/debug/Makefile
index 3cf318cdcbd439afc88397961ce230d1d07770cc..7b82a65f96d0ac87560b41b5e12f249d60223fbd 100644
--- a/isis/src/control/apps/findfeatures/tsts/debug/Makefile
+++ b/isis/src/control/apps/findfeatures/tsts/debug/Makefile
@@ -32,6 +32,7 @@ commands:
 	       -e 's/\(.*second:\).*/\1/' \
 	       -e 's/\(Processing.*:\).*/\1/' \
                -e 's/\(.*\) [0-9]*\.[0-9]* \(seconds*\)/\1 \2/' \
+            -e 's/\(Total threads:\).*/\1/' \
 	       $(OUTPUT)/debug_temp.txt > $(OUTPUT)/debug.txt;
 	# Do same to stdoutdebug_temp, and remove total threads and
 	# MatchSolution Group
@@ -49,4 +50,4 @@ commands:
 	       -e 's/\(Total threads:\).*/\1/' \
 	       -e '/Group/,/End_Group/d' \
 	       $(OUTPUT)/stdoutdebug_temp.txt > $(OUTPUT)/stdoutdebug.txt;
-	$(RM) $(OUTPUT)/debug_temp.txt $(OUTPUT)/stdoutdebug_temp.txt;
+	$(RM) $(OUTPUT)/debug_temp.txt $(OUTPUT)/stdoutdebug_temp.txt;
\ No newline at end of file
diff --git a/isis/src/control/apps/jigsaw/jigsaw.cpp b/isis/src/control/apps/jigsaw/jigsaw.cpp
index 66a0d84bfd9df5817486c2017d4c6e8eedcca348..ba617252aa45fa24a7d3e306e8e4db58fb8d8ece 100644
--- a/isis/src/control/apps/jigsaw/jigsaw.cpp
+++ b/isis/src/control/apps/jigsaw/jigsaw.cpp
@@ -80,24 +80,24 @@ void IsisMain() {
 
     QObject::connect( bundleAdjustment, SIGNAL( statusUpdate(QString) ),
                       bundleAdjustment, SLOT( outputBundleStatus(QString) ) );
-    BundleSolutionInfo bundleSolution = bundleAdjustment->solveCholeskyBR();
+    BundleSolutionInfo *bundleSolution = bundleAdjustment->solveCholeskyBR();
     
     cout << "\nGenerating report files\n" << endl;
 
     // write output files
     if (ui.GetBoolean("BUNDLEOUT_TXT")) {
-      bundleSolution.outputText();
+      bundleSolution->outputText();
     }
 
     if (ui.GetBoolean("IMAGESCSV")) {
-      bundleSolution.outputImagesCSV();
+      bundleSolution->outputImagesCSV();
     }
 
     if (ui.GetBoolean("OUTPUT_CSV")) {
-      bundleSolution.outputPointsCSV();
+      bundleSolution->outputPointsCSV();
     }
     if (ui.GetBoolean("RESIDUALS_CSV")) {
-      bundleSolution.outputResiduals();
+      bundleSolution->outputResiduals();
     }
     
     // write updated control net
@@ -109,6 +109,8 @@ void IsisMain() {
     if (ui.GetBoolean("UPDATE") ) {
       if ( !bundleAdjustment->isConverged() ) {
         gp += PvlKeyword("Status","Bundle did not converge, camera pointing NOT updated");
+        QString msg = "Bundle did not converge within MAXITS [" + toString(ui.GetInteger("MAXITS")) + "] iterations [" + cnetFile +  "]";
+        throw IException(IException::Unknown, msg, _FILEINFO_);
       }
       else {
         for (int i = 0; i < bundleAdjustment->numberOfImages(); i++) {
@@ -147,6 +149,7 @@ void IsisMain() {
       gp += PvlKeyword("Status", "Camera pointing NOT updated");
     }
     Application::Log(gp);
+    delete bundleSolution;
   }
   catch(IException &e) {
     bundleAdjustment->controlNet()->Write(ui.GetFileName("ONET"));
@@ -165,26 +168,49 @@ BundleSettingsQsp bundleSettings(UserInterface &ui) {
   settings->setValidateNetwork(true);
 
   // solve options
-  double latitudeSigma  = Isis::Null;
-  double longitudeSigma = Isis::Null;
-  double radiusSigma    = Isis::Null;
+  QString coordTypeBundleStr = ui.GetString("CONTROL_POINT_COORDINATE_TYPE_BUNDLE");
+  QString coordTypeReportsStr = ui.GetString("CONTROL_POINT_COORDINATE_TYPE_REPORTS");
+  SurfacePoint::CoordinateType ctypeBundle = SurfacePoint::Latitudinal;
+  SurfacePoint::CoordinateType ctypeReports = SurfacePoint::Latitudinal;
+  
+  if (coordTypeBundleStr == "RECTANGULAR") {
+    ctypeBundle = SurfacePoint::Rectangular;
+  }
+
+  if (coordTypeReportsStr == "RECTANGULAR") {
+    ctypeReports = SurfacePoint::Rectangular;
+  }
+  
+  double coord1Sigma  = Isis::Null;
+  double coord2Sigma = Isis::Null;
+  double coord3Sigma    = Isis::Null;
   if (ui.WasEntered("POINT_LATITUDE_SIGMA")) {
-    latitudeSigma = ui.GetDouble("POINT_LATITUDE_SIGMA");
+    coord1Sigma = ui.GetDouble("POINT_LATITUDE_SIGMA");
   }
   if (ui.WasEntered("POINT_LONGITUDE_SIGMA")) {
-    longitudeSigma = ui.GetDouble("POINT_LONGITUDE_SIGMA");
+    coord2Sigma = ui.GetDouble("POINT_LONGITUDE_SIGMA");
   }
   if (ui.WasEntered("POINT_RADIUS_SIGMA")) {
-    radiusSigma = ui.GetDouble("POINT_RADIUS_SIGMA");
+    coord3Sigma = ui.GetDouble("POINT_RADIUS_SIGMA");
+  }
+  if (ui.WasEntered("POINT_X_SIGMA")) {
+    coord1Sigma = ui.GetDouble("POINT_X_SIGMA");
+  }
+  if (ui.WasEntered("POINT_Y_SIGMA")) {
+    coord2Sigma = ui.GetDouble("POINT_Y_SIGMA");
+  }
+  if (ui.WasEntered("POINT_Z_SIGMA")) {
+    coord3Sigma = ui.GetDouble("POINT_Z_SIGMA");
   }
 
   settings->setSolveOptions(ui.GetBoolean("OBSERVATIONS"), 
                             ui.GetBoolean("UPDATE"), 
                             ui.GetBoolean("ERRORPROPAGATION"), 
                             ui.GetBoolean("RADIUS"),
-                            latitudeSigma, 
-                            longitudeSigma, 
-                            radiusSigma);
+                            ctypeBundle, ctypeReports, 
+                            coord1Sigma, 
+                            coord2Sigma, 
+                            coord3Sigma);
 
   // Don't create the inverse correlation matrix file
   settings->setCreateInverseMatrix(false);
diff --git a/isis/src/control/apps/jigsaw/jigsaw.xml b/isis/src/control/apps/jigsaw/jigsaw.xml
index ec0f2bb3d5907baa1d156ee3365c3b771ebe7d36..2b54de33be477275e91ecafef403125bd9fc12e6 100644
--- a/isis/src/control/apps/jigsaw/jigsaw.xml
+++ b/isis/src/control/apps/jigsaw/jigsaw.xml
@@ -252,6 +252,27 @@
     <change name="Summer Stapleton" date="2017-08-09">
       Fixed bug where an invalid control net was not throwing exception. Fixes #5068.
     </change>
+    <change name="Ken Edmundson" date="2018-05-23">
+      Modifed call to bundleAdjustment->solveCholeskyBR() to return a raw pointer to a
+      BundleSolutionInfo object. Am also deleting this pointer because jigsaw.cpp takes
+      ownership from BundleAdjust.
+    </change>
+   <change name="Debbie A. Cook" date="2018-06-04">
+      (BundleXYZ modified on 2017-09-11) Added options for outputting
+      and/or solving for body-fixed x/y/z instead of lat/lon/radius.
+      References #501.
+    </change>
+    <change name="Debbie A. Cook" date="2018-06-04">
+      (BundleXYZ modified on 2017-09-17) Fixed a problem in the 
+      xml that was causing the input parameters to be omitted from
+      the history.  References #501.
+    </change>
+    <change name="Debbie A. Cook" date="2018-06-04">
+      (BundleXYZ modified on 2018-03-18) Fixed a problem in the xml 
+      that excluded entry of values for latitudinal point sigmas when the 
+      coordinate type for reports was set to Rectangular and vice versa.  
+      References #501.
+    </change>
   </history>
 
   <groups>
@@ -1018,6 +1039,77 @@
       </parameter>
     </group>
 
+    <group name="Control Point Parameters">
+      <parameter name="CONTROL_POINT_COORDINATE_TYPE_BUNDLE">
+        <type>string</type>
+        <brief> Coordinate type to use for bundling and outputting control points</brief>
+        <default>
+          <item>LATITUDINAL</item>
+        </default>
+        <description>
+          This parameter indicates which coordinate type will be used to present
+          the control points in the bundle adjustment and bundle output.  
+        </description>
+        <list>
+          <option value="LATITUDINAL">
+            <brief> Coordinates will be planetocentric latitudinal</brief>
+            <description>
+              If this option is selected all control points will be adjusted, corrected,
+              and reported in planetocentric latitudinal coordinates (latitude,
+              longitude, and radius).  
+            </description>
+          <exclusions>
+            <item>POINT_X_SIGMA</item>
+            <item>POINT_Y_SIGMA</item>
+            <item>POINT_Z_SIGMA</item>
+          </exclusions>
+          </option>
+
+          <option value="RECTANGULAR">
+            <brief> Coordinates will be body-fixed rectangular</brief>
+            <description>
+              If this option is selected all control points will be adjusted, corrected,
+              and reported in body-fixed rectangular coordinates (X, Y, and Z).  
+            </description>
+            <exclusions>
+              <item>POINT_LATITUDE_SIGMA</item>
+              <item>POINT_LONGITUDE_SIGMA</item>
+              <item>POINT_RADIUS_SIGMA</item>
+            </exclusions>
+          </option>
+        </list>
+       </parameter>
+      <parameter name="CONTROL_POINT_COORDINATE_TYPE_REPORTS">
+        <type>string</type>
+        <brief> Coordinate type to use for bundling and outputting control points</brief>
+        <default>
+          <item>LATITUDINAL</item>
+        </default>
+        <description>
+          This parameter indicates which coordinate type will be used to present
+          the control points in the bundle adjustment and bundle output.  
+        </description>
+        <list>
+          <option value="LATITUDINAL">
+            <brief> Coordinates will be planetocentric latitudinal</brief>
+            <description>
+              If this option is selected all control points will be adjusted, corrected,
+              and reported in planetocentric latitudinal coordinates (latitude,
+              longitude, and radius).  
+            </description>
+          </option>
+
+          <option value="RECTANGULAR">
+            <brief> Coordinates will be body-fixed rectangular</brief>
+            <description>
+              If this option is selected all control points will be adjusted, corrected,
+              and reported in body-fixed rectangular coordinates (X, Y, and Z).  
+            </description>
+          </option>
+        </list>
+       </parameter>
+    </group>
+    
       <group name="Parameter Uncertainties">
         <parameter name="POINT_LATITUDE_SIGMA">
           <brief> Global latitude uncertainty for all points (meters)
@@ -1060,6 +1152,42 @@
           </inclusions>
         </parameter>
 
+        <parameter name="POINT_X_SIGMA">
+          <brief> Global body-fixed X uncertainty for all points (meters)
+          </brief>
+          <description> 
+            This optional value will be used as the global  
+            uncertainty for all points.  Units are meters.
+          </description>
+          <type>double</type>
+          <internalDefault>none</internalDefault>
+          <minimum inclusive="yes">0</minimum>
+        </parameter>
+
+        <parameter name="POINT_Y_SIGMA">
+          <brief> Global body-fixed X uncertainty for all points (meters)
+          </brief>
+          <description> 
+            This optional value will be used as the global  
+            uncertainty for all points.  Units are meters.
+          </description>
+          <type>double</type>
+          <internalDefault>none</internalDefault>
+          <minimum inclusive="yes">0</minimum>
+        </parameter>
+
+        <parameter name="POINT_Z_SIGMA">
+          <brief> Global body-fixed X uncertainty for all points (meters)
+          </brief>
+          <description> 
+            This optional value will be used as the global  
+            uncertainty for all points.  Units are meters.
+          </description>
+          <type>double</type>
+          <internalDefault>none</internalDefault>
+          <minimum inclusive="yes">0</minimum>
+        </parameter>
+        
         <parameter name="SPACECRAFT_POSITION_SIGMA">
           <brief> Global uncertainty for spacecraft coordinates (meters)
           </brief>
diff --git a/isis/src/control/apps/jigsaw/tsts/bundleXYZ/Makefile b/isis/src/control/apps/jigsaw/tsts/bundleXYZ/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..c8821dcc23fc92da69bfa8a401a4ae4b41423bdc
--- /dev/null
+++ b/isis/src/control/apps/jigsaw/tsts/bundleXYZ/Makefile
@@ -0,0 +1,219 @@
+APPNAME = jigsaw
+# These tests exercise the bundle adjustment of Apollo images using the bundleXYZ options
+# These tests should probably be replaced with Bennu data or other more appropriate data.
+# Solving for position, angles (with twist), and radius with error propagation.
+#
+# 2018-10-12 Debbie A. Cook - original test
+# 2018-10-22 Jesse Mapel - Added DIFF file for control network. Reduced number of
+#                          decimals in CSVs.
+
+# The "cat bundleout.txt" command in these tests uses sed to do the following (in order):
+# 1. remove cube filename paths
+# 2. remove net filename paths
+# 3. remove digits beyond the fifth decimal place of decimal numbers
+#  TODO Change truncation to at least 7th decimal place for free tests
+# 4. remove date and time
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+# test rect bundle with lat output some points constrained
+	$(LS) -1 $(INPUT)/*.cub > $(OUTPUT)/cube.lis;
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_7-ImageLSTest_USGS_combined.net \
+	           onet=$(OUTPUT)/rect-latConstrained_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           spsolve=position \
+	           spacecraft_position_sigma=1000.0 \
+	           camera_angles_sigma=2. \
+	           control_point_coordinate_type_bundle=RECT \
+	           control_point_coordinate_type_reports=LAT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/rect-latConstrained_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rect-latConstrained_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rect-latConstrained_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/rect-latConstrained_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+
+# test rect bundle and rect output with a free network (all points free) - (sigma 0 should match lat bundle with rect output
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_free.net \
+	           onet=$(OUTPUT)/rectFree_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           control_point_coordinate_type_bundle=RECT \
+	           control_point_coordinate_type_reports=RECT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/rectFree_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rectFree_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rectFree_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/rectFree_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+
+# test lat bundle and rect output with a free network (all points free) - (sigma 0 should match rect bundle with rect outpu
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_free.net \
+	           onet=$(OUTPUT)/lat-rectFree_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           control_point_coordinate_type_bundle=LAT \
+	           control_point_coordinate_type_reports=RECT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/lat-rectFree_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/lat-rectFree_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/lat-rectFree_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/lat-rectFree_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+
+# test lat bundle and rect output with some constrained points
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_7-ImageLSTest_USGS_combined.net \
+	           onet=$(OUTPUT)/lat-rectConstrained_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           spsolve=position \
+	           spacecraft_position_sigma=1000.0 \
+	           camera_angles_sigma=2. \
+	           control_point_coordinate_type_bundle=LAT \
+	           control_point_coordinate_type_reports=RECT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/lat-rectConstrained_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/lat-rectConstrained_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/lat-rectConstrained_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/lat-rectConstrained_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+
+# test rect bundle and rect output with some constrained points
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_7-ImageLSTest_USGS_combined.net \
+	           onet=$(OUTPUT)/rectConstrained_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           spsolve=position \
+	           spacecraft_position_sigma=1000.0 \
+	           camera_angles_sigma=2. \
+	           control_point_coordinate_type_bundle=RECT \
+	           control_point_coordinate_type_reports=RECT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/rectConstrained_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rectConstrained_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rectConstrained_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/rectConstrained_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+
+# test rect bundle and lat output with a free network (all points free) - (sigma 0 should match lat bundle with lat output
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_free.net \
+	           onet=$(OUTPUT)/rect-latFree_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           control_point_coordinate_type_bundle=RECT \
+	           control_point_coordinate_type_reports=LAT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/rect-latFree_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rect-latFree_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/rect-latFree_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/rect-latFree_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+#	$(RM) $(OUTPUT)/cube.lis print.prt > /dev/null;
+
+# test lat bundle and lat output with a free network (all points free) - (sigma 0 should match lat bundle with lat output
+	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
+	           cnet=$(INPUT)/Ames_free.net \
+	           onet=$(OUTPUT)/latFree_out.net \
+	           radius=yes \
+	           errorpropagation=yes \
+	           control_point_coordinate_type_bundle=LAT \
+	           control_point_coordinate_type_reports=LAT \
+	           file_prefix=$(OUTPUT)/ > /dev/null;
+	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       > $(OUTPUT)/latFree_bundleout.txt;
+	$(CAT) $(OUTPUT)/residuals.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       > $(OUTPUT)/latFree_residuals.csv;
+	$(CAT) $(OUTPUT)/bundleout_images.csv \
+	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9][0-9]\)\([[0-9]0-9]*\)/\1/g' \
+	       > $(OUTPUT)/latFree_bundleout_images.csv;
+	$(RM) $(OUTPUT)/bundleout_images.csv > /dev/null;
+	$(MV) $(OUTPUT)/bundleout_points.csv $(OUTPUT)/latFree_bundleout_points.csv > /dev/null;
+	$(RM) $(OUTPUT)/bundleout.txt print.prt > /dev/null;
+	$(RM) $(OUTPUT)/residuals.csv > /dev/null;
+	$(RM) $(OUTPUT)/cube.lis print.prt > /dev/null;
diff --git a/isis/src/control/apps/jigsaw/tsts/errors/Makefile b/isis/src/control/apps/jigsaw/tsts/errors/Makefile
index 8cde58284f2494256f08f76e4082664dd8c45f25..6c884e3452c56ed55d041e46c9d3bb3bb7f998d1 100644
--- a/isis/src/control/apps/jigsaw/tsts/errors/Makefile
+++ b/isis/src/control/apps/jigsaw/tsts/errors/Makefile
@@ -60,7 +60,7 @@ commands:
 	if [[ `$(APPNAME) \
 	  fromlist=$(INPUT)/empty.lis \
 	  cnet=$(INPUT)/notacnet.net \
-	  onet=$(output)/out.net \
+	  onet=$(OUTPUT)/out.net \
 	  radius=yes \
 	  spsolve=positions \
 	  point_radius_sigma=500 \
diff --git a/isis/src/control/apps/jigsaw/tsts/mestimator/Makefile b/isis/src/control/apps/jigsaw/tsts/mestimator/Makefile
index 55cfc668e648b92e5e7fa4c977e23a08fb157d33..d8b818425f1faef3cae2e4b4a867222c3bff5192 100644
--- a/isis/src/control/apps/jigsaw/tsts/mestimator/Makefile
+++ b/isis/src/control/apps/jigsaw/tsts/mestimator/Makefile
@@ -11,6 +11,9 @@ APPNAME = jigsaw
 # 2014-07-23 Jeannie Backer - Commented out references to bundleout_images.csv.  
 #                Removed default parameters.
 # 2016-08-11 Jeannie Backer - Updated documentation
+# 2018-07-24 Debbie A. Cook - Now removing digits beyond the fourth decimal place of
+#                        decimal numbers to make the mac test work.  Also changed
+#                        "-0.0000" to "0.0000" after truncating.
 include $(ISISROOT)/make/isismake.tsts
 
 commands:
@@ -28,8 +31,10 @@ commands:
 	           spsolve=position > /dev/null;
 	$(CAT) bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
 	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
-	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
 	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       | sed 's/\-0.0000/ 0.0000/' \
+	       | sed 's/\-0.0000/ 0.0000/' \
 	       > $(OUTPUT)/mEstimator_bundleout.txt;
 	$(CAT) residuals.csv | $(SED) 's/,[^,]*\/\([^,\/]*\.cub\)/,\1/g'\
 	       > $(OUTPUT)/mEstimator_residuals.csv
diff --git a/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-mean-radius/Makefile b/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-mean-radius/Makefile
index d0d91fcb457ffdd343c9a07e8a722f802383c084..f1bd20255c1033b992e8dcb72a349f773ac2c93a 100644
--- a/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-mean-radius/Makefile
+++ b/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-mean-radius/Makefile
@@ -3,12 +3,15 @@ APPNAME = jigsaw
 # 2016-10-31 Tyler Wilson This test exercises the bundle adjustment of images from Enceladus 
 # when the target body Enceladus when the target body parameter file is used.  This particular
 # test sets the RadiusSolveOption to mean.
+# 2018-07-24 Debbie A. Cook Changed the SED commands to remove digits beyond the second
+# decimal place instead of the third to get the MacOS test to match.  Also changed
+#                        "-0.00" to "0.00" after truncating.
 
 
 # The "cat bundleout.txt" command in these tests uses perl and sed to do the following (in order):
 # 1. remove cube filename paths.
 # 2. remove net filename paths.
-# 3. remove digits beyond the fifth decimal place of decimal numbers.
+# 3. remove digits beyond the second decimal place of decimal numbers.
 # 4. remove date and time.
 
 # The "cat bundleout_images.csv/residuals.csv" commands uses perl to:
@@ -25,8 +28,10 @@ commands:
 	file_prefix=$(OUTPUT)/ > /dev/null;
 	$(CAT) $(OUTPUT)/bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
 	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
-	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
+	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
 	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       | sed 's/\ -0.00/ 0.00/' \
+	       | sed 's/\ -0.00/ 0.00/' \
 	       > $(OUTPUT)/pole-ra-dec-w0-wDot-mean-radius_bundleout.txt;
 	$(CAT) $(OUTPUT)/bundleout_images.csv \
 	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
diff --git a/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-triaxial-radii/Makefile b/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-triaxial-radii/Makefile
index b9a3f086beeeb9bcbe433d87f705f77ffb44ee45..011f122dabbe2c95e838060997bfca97a55c53c8 100644
--- a/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-triaxial-radii/Makefile
+++ b/isis/src/control/apps/jigsaw/tsts/pole-ra-dec-w0-wDot-triaxial-radii/Makefile
@@ -31,6 +31,7 @@ commands:
 	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
 	       | $(SED) 's/\([0-9][0-9]*\.[0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
 	       | $(SED) s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
+	       | $(SED) 's/-0\.000/ 0\.000/g' \
 	       > $(OUTPUT)/pole-ra-dec-w0-wDot-triaxial-radii_bundleout.txt;
 	$(CAT) $(OUTPUT)/bundleout_images.csv \
 	       | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
diff --git a/isis/src/control/apps/mat2cnet/mat2cnet.cpp b/isis/src/control/apps/mat2cnet/mat2cnet.cpp
index c87848c053c4500710e561eb507ba511c009e983..0c0240e0fa8e74717e6fc64a807779fced868459 100644
--- a/isis/src/control/apps/mat2cnet/mat2cnet.cpp
+++ b/isis/src/control/apps/mat2cnet/mat2cnet.cpp
@@ -90,11 +90,6 @@ void IsisMain() {
 
   // first try to set target from user entered TargetName
   cnet.SetTarget(ui.GetString("TARGET"));
-  // if that fails, look in a cube label for the info
-  if ( !cnet.GetTargetRadii()[0].isValid() ) {
-    Pvl isis3Lab(snl.fileName(0));
-    cnet.SetTarget(isis3Lab);
-  }
   cnet.SetUserName(Application::UserName());
   cnet.SetCreatedDate(Application::DateTime());
   cnet.SetDescription(ui.GetString("DESCRIPTION"));
diff --git a/isis/src/control/apps/mat2cnet/mat2cnet.xml b/isis/src/control/apps/mat2cnet/mat2cnet.xml
index 26e4b65330cd8cf7c262973b7195b4c1da6b28f3..7035a02301b39cb6e4dbaae29497cb71ea8feb23 100644
--- a/isis/src/control/apps/mat2cnet/mat2cnet.xml
+++ b/isis/src/control/apps/mat2cnet/mat2cnet.xml
@@ -9,27 +9,27 @@
     <p>
       This program converts an ISIS2 match point file to an ISIS3 control
       network file.  It requires a list file of ISIS2 cubes and corresponding
-      list file of ISIS3 cubes.  
+      list file of ISIS3 cubes.
       <strong>Note: </strong> In order to identify which ISIS3 cube
       corresponds to a particular ISIS2 cube, these lists must be the same
-      length and ordering.  That is, if the first cube of the ISIS2 list was 
-      imported from a particular raw image (observation), then the first cube 
-      of the ISIS3 list must be imported from the same image (observation), 
-      and so on for each cube listed.  
+      length and ordering.  That is, if the first cube of the ISIS2 list was
+      imported from a particular raw image (observation), then the first cube
+      of the ISIS3 list must be imported from the same image (observation),
+      and so on for each cube listed.
     </p>
     <p>
       This application also requires a match point file, an output Control
       Network pvl name, a network ID, a target and a description.  The user may
-      also choose whether to input a RAND PPP file containing latitude, 
-      longitude and radius for each corresponding point ID and to create an 
-      output RAND PPP log.  This program converts the radius values in these 
-      files from km to meters before adding them to the output control network.  
-      If a RAND PPP file is not entered, all the points in the MATCH file will 
-      be set to type Free.  If a RAND PPP is input, then any points not found 
+      also choose whether to input a RAND PPP file containing latitude,
+      longitude and radius for each corresponding point ID and to create an
+      output RAND PPP log.  This program converts the radius values in these
+      files from km to meters before adding them to the output control network.
+      If a RAND PPP file is not entered, all the points in the MATCH file will
+      be set to type Free.  If a RAND PPP is input, then any points not found
       in this file will still be set to Free and the user may choose whether to
-      set points found in both the RAND and MATCH files to Fixed or Free.  Any 
-      points found in the RAND file without measurements in the MATCH file will 
-      not be included in the output control net.  The corresponding lines from 
+      set points found in both the RAND and MATCH files to Fixed or Free.  Any
+      points found in the RAND file without measurements in the MATCH file will
+      not be included in the output control net.  The corresponding lines from
       the RAND PPP file for these points will be copied to the RAND PPP log.
     </p>
     <p>
@@ -56,10 +56,10 @@
     <change name="Steven Lambright" date="2007-12-14">
       Now IMAGE_NUMBER will be used before IMAGE_ID for matching files
     </change>
-    <change name="Stuart Sides" date="2008-04-15"> 
+    <change name="Stuart Sides" date="2008-04-15">
       Fixed bug where serial numbers were not correct.
     </change>
-    <change name="Steven Lambright" date="2008-05-19"> 
+    <change name="Steven Lambright" date="2008-05-19">
       Error message added for missing FSC's
     </change>
     <change name="Christopher Austin" date="2008-07-01">
@@ -67,31 +67,31 @@
       keyword is less than the number of actual Match Points in the file.
     </change>
     <change name="Jeannie Walldren" date="2009-11-06">
-      Added RAND input parameter and updated documentation.  Added exception 
+      Added RAND input parameter and updated documentation.  Added exception
       messages for invalid match point file headers and values. Added 1%
       Progress updates to show potentially slower steps. Added appTests for
       RAND parameter and to catch errors.  Added examples to xml file.
     </change>
     <change name="Jeannie Walldren" date="2009-12-17">
-      Modify code to allow use of particular types of edited RAND files. 
-      Updated description of RAND parameter to reflect this change.  
+      Modify code to allow use of particular types of edited RAND files.
+      Updated description of RAND parameter to reflect this change.
     </change>
     <change name="Jeannie Walldren" date="2010-03-21">
-      Convert RAND radius values from kilometers to meters.  Added option to 
+      Convert RAND radius values from kilometers to meters.  Added option to
     </change>
     <change name="Jeannie Walldren" date="2010-04-15">
-      Added option to create RAND only points (no measures in the matchpoint 
+      Added option to create RAND only points (no measures in the matchpoint
       file) as GROUND points.
     </change>
     <change name="Jeannie Walldren" date="2010-04-19">
-      Modified error messages to output filename typed in by user rather than 
+      Modified error messages to output filename typed in by user rather than
       entire path.
     </change>
     <change name="Jeannie Walldren" date="2010-06-30">
-      Changed CONTROL parameter name to CNET for consistency with other ISIS3 
-      programs.  Added INPUTPPP parameter. Changed parameter name from RAND to 
-      PPP for more precise description and modified POINTTYPE parameter usage.  
-      Added results to GUI log and added output PPPLOG parameter.  
+      Changed CONTROL parameter name to CNET for consistency with other ISIS3
+      programs.  Added INPUTPPP parameter. Changed parameter name from RAND to
+      PPP for more precise description and modified POINTTYPE parameter usage.
+      Added results to GUI log and added output PPPLOG parameter.
     </change>
     <change name="Jeannie Walldren" date="2010-12-01">
       Modified to be compatible with binary control network.  Modified errors app test Makefile.
@@ -103,15 +103,19 @@
       Changed point types "Ground" to "Fixed" and "Tie" to "Free".
     </change>
     <change name="Jeannie Backer" date="2011-07-20">
-      Clarified documentation.  Added POINTLOCK and MEASURELOCK parameters to 
-      allow the user to determine whether to EditLock points and measures.  
-      Added appTests for new parameters and gave more meaningful names to 
+      Clarified documentation.  Added POINTLOCK and MEASURELOCK parameters to
+      allow the user to determine whether to EditLock points and measures.
+      Added appTests for new parameters and gave more meaningful names to
       existing appTests.
     </change>
     <change name="Jeannie Backer" date="2016-04-22">
       Modified to use cube labels to set control net target if unable to set with only the user
       given TARGET. References #3892
     </change>
+    <change name="Jesse Mapel" date="2018-07-06">
+      Changed to just use the input target name because it is not needed to compute target radii.
+      Fixes #5457.
+    </change>
   </history>
 
   <groups>
@@ -125,12 +129,12 @@
           List of ISIS2 input cubes in the match point file.
         </brief>
         <description>
-          A text file containing one column of ISIS2 cube file names. Every 
-          file used in the match point file should be represented in this list. 
-          <strong>Note: </strong> The cubes must be available for the program 
-          to open and must be in the same order as the ISIS3 cubes in LIST3.  
-          An error will be thrown if the number of files in this list does not 
-          match the number of files in LIST2, or if the IMAGE_ID and 
+          A text file containing one column of ISIS2 cube file names. Every
+          file used in the match point file should be represented in this list.
+          <strong>Note: </strong> The cubes must be available for the program
+          to open and must be in the same order as the ISIS3 cubes in LIST3.
+          An error will be thrown if the number of files in this list does not
+          match the number of files in LIST2, or if the IMAGE_ID and
           IMAGE_NUMBER keywords are not found in any ISIS2 cube.
         </description>
         <filter>
@@ -146,20 +150,20 @@
         </brief>
         <description>
           Use this parameter to specify the ISIS2 match point file to be
-          converted to an ISIS3 control network file.  This file must contain a 
-          two line header.  The first line of the header must have the 
-          "Matchpoint Total" keyword and a value for the number of measures in 
-          the match point file.  The second line of the header should be text 
-          labels for each column.  The match point file has 7 columns: PointID, 
-          FSC, LINE, SAMP, CLASS, DIAMETER, and Comments.  The Point ID is 
-          made up of alphanumeric characters,  FSC is an integer, LINE and SAMP 
-          must be doubles.  CLASS is used to determine the measure type.  Valid 
-          values include T (set to reference measure, validated manual), M 
-          (validated manual), S (validated automatic), or U (if line/samp=0/0, 
-          set unmeasured, otherwise set estimated).   The DIAMETER column is 
-          used in the case of a crater.  Comments are not read in to this 
-          application. A match point file may only have one line for a 
-          particular PointID/FSC combination, otherwise an error will be thrown 
+          converted to an ISIS3 control network file.  This file must contain a
+          two line header.  The first line of the header must have the
+          "Matchpoint Total" keyword and a value for the number of measures in
+          the match point file.  The second line of the header should be text
+          labels for each column.  The match point file has 7 columns: PointID,
+          FSC, LINE, SAMP, CLASS, DIAMETER, and Comments.  The Point ID is
+          made up of alphanumeric characters,  FSC is an integer, LINE and SAMP
+          must be doubles.  CLASS is used to determine the measure type.  Valid
+          values include T (set to reference measure, validated manual), M
+          (validated manual), S (validated automatic), or U (if line/samp=0/0,
+          set unmeasured, otherwise set estimated).   The DIAMETER column is
+          used in the case of a crater.  Comments are not read in to this
+          application. A match point file may only have one line for a
+          particular PointID/FSC combination, otherwise an error will be thrown
           since there is no way to determine which line contains correct values.
         </description>
         <filter>
@@ -171,7 +175,7 @@
         <type>boolean</type>
         <brief>Input a RAND PPP file</brief>
         <description>
-          This parameter indicates whether a RAND PPP (Pole, Point, Picture) 
+          This parameter indicates whether a RAND PPP (Pole, Point, Picture)
           file will be input.  Valid RAND PPP files for mat2cnet are detailed
           in the PPP parameter description.
         </description>
@@ -188,22 +192,22 @@
         <type>filename</type>
         <fileMode>input</fileMode>
         <brief>
-            RAND PPP file containing latitude, longitude, and radius values for 
+            RAND PPP file containing latitude, longitude, and radius values for
             given Point IDs.
         </brief>
         <description>
           Use this parameter to specify the RAND PPP file to assign lat/lon/rad
-          values associated with corresponding point IDs from the MATCH file.  
-          These files do not contain headers and have 4 unlabeled columns: 
+          values associated with corresponding point IDs from the MATCH file.
+          These files do not contain headers and have 4 unlabeled columns:
           LATITUDE, LONGITUDE, RADIUS, and PointID.  The lines of original RAND
-          PPP files have exactly 79 characters, and columns are right justified 
-          with specific lengths, namely, 24, 24, 24, and 7.  The only edited 
-          RAND PPP files that are valid for this program are those that have a 
-          single space added between the RADIUS and the PointID. LATITUDE, 
-          LONGITUDE, and RADIUS values must be doubles and PointID is 
-          alphanumeric.  If this file contains a Point ID that does not exist 
-          in the match point file, it will not be added to the ControlNet 
-          output and the corresponding lines from the RAND PPP file will be 
+          PPP files have exactly 79 characters, and columns are right justified
+          with specific lengths, namely, 24, 24, 24, and 7.  The only edited
+          RAND PPP files that are valid for this program are those that have a
+          single space added between the RADIUS and the PointID. LATITUDE,
+          LONGITUDE, and RADIUS values must be doubles and PointID is
+          alphanumeric.  If this file contains a Point ID that does not exist
+          in the match point file, it will not be added to the ControlNet
+          output and the corresponding lines from the RAND PPP file will be
           copied to the LOG output file.
         </description>
         <filter>
@@ -218,17 +222,17 @@
           ControlPoint type for points found in RAND PPP and MATCH files.
         </brief>
         <description>
-          This parameter determines the ControlPoint type to which points will 
-          be set if they are found in the RAND PPP file and have corresponding 
-          measurements in the MATCH file.  This parameter defaults to Fixed.  
-          <strong>Note: </strong> All points from the MATCH file not found in 
+          This parameter determines the ControlPoint type to which points will
+          be set if they are found in the RAND PPP file and have corresponding
+          measurements in the MATCH file.  This parameter defaults to Fixed.
+          <strong>Note: </strong> All points from the MATCH file not found in
           the RAND PPP file will be set to Free and all points from the RAND PPP
-          file not found in the MATCH file will be omitted from the output 
+          file not found in the MATCH file will be omitted from the output
           Control Network.
         </description>
         <list>
           <option value = "FIXED">
-            <brief> 
+            <brief>
               Set PointType keyword to Fixed for points in RAND PPP file
             </brief>
             <description>
@@ -239,7 +243,7 @@
           </option>
 
           <option value = "FREE">
-            <brief> 
+            <brief>
               Set PointType keyword to Free for points in RAND PPP file
             </brief>
             <description>
@@ -254,17 +258,17 @@
       <parameter name="POINTLOCK">
         <type>boolean</type>
         <brief>
-          Indicates how to set EditLock keyword for points in RAND PPP file 
+          Indicates how to set EditLock keyword for points in RAND PPP file
         </brief>
         <description>
           This parameter indicates whether control points found in the RAND PPP
-          file will be locked. That is, if this parameter is set to true, 
-          then each ControPoint in the output ControlNet that exists in the 
-          RAND PPP file will have the keyword EditLock set to true. This 
+          file will be locked. That is, if this parameter is set to true,
+          then each ControPoint in the output ControlNet that exists in the
+          RAND PPP file will have the keyword EditLock set to true. This
           prevents any editing by most ISIS3 programs (with the exception of
-          jigsaw) to the latitude, longitude, and radius values associated to 
+          jigsaw) to the latitude, longitude, and radius values associated to
           the points in the RAND PPP file. Furthermore, the reference measures
-          of each of these points will be treated as if they are locked, 
+          of each of these points will be treated as if they are locked,
           preventing any editing by ISIS3 programs to the sample and line
           values found in the match point file. This parameter defaults to TRUE
           and can only be used if the INPUTPPP parameter is set to true.
@@ -280,13 +284,13 @@
           Optional RAND PPP log file.
         </brief>
         <description>
-          This file will contain the Point IDs of all control points that were 
+          This file will contain the Point IDs of all control points that were
           found in the RAND PPP file but had no measurements in the MATCH file.
-          <strong>Note: </strong> This log is <u>not</u> a typical results log that 
+          <strong>Note: </strong> This log is <u>not</u> a typical results log that
           contains the GUI log output.
         </description>
         <filter>
-          *.log *.txt 
+          *.log *.txt
         </filter>
       </parameter>
 
@@ -300,11 +304,11 @@
           List of ISIS3 input cubes in the match point file.
         </brief>
         <description>
-          A text file containing one column of ISIS3 cube file names. Every 
-          file used in the match point file should be represented in this list. 
+          A text file containing one column of ISIS3 cube file names. Every
+          file used in the match point file should be represented in this list.
           <strong>Note: </strong> The cubes must be available for the program to
-          open and must be in the same order as the ISIS2 cubes in LIST2.  An 
-          error will be thrown if the number of files in this list does not 
+          open and must be in the same order as the ISIS2 cubes in LIST2.  An
+          error will be thrown if the number of files in this list does not
           match the number of files in LIST2.
         </description>
         <filter>
@@ -336,8 +340,8 @@
           Set Description keyword to this value in output ControlNet
         </brief>
         <description>
-          The Description keyword of the output ControlNet will be set to this 
-          string value. This should be a brief description of the control 
+          The Description keyword of the output ControlNet will be set to this
+          string value. This should be a brief description of the control
           network file to be created.
         </description>
       </parameter>
@@ -348,7 +352,7 @@
           Set NetworkId keyword to this value in output ControlNet
         </brief>
         <description>
-          The NetworkId keyword of the output ControlNet will be set to this 
+          The NetworkId keyword of the output ControlNet will be set to this
           string value. The NetworkId is a single word identifier assigned
           to this particular ControlNet file. This string should be unique
           to this output file.
@@ -361,13 +365,13 @@
           Set TargetName keyword to this value in output ControlNet
         </brief>
         <description>
-          The TargetName keyword of the output ControlNet will be set to this 
-          string value. This is the planetary body targeted in the images in 
+          The TargetName keyword of the output ControlNet will be set to this
+          string value. This is the planetary body targeted in the images in
           the input file lists. The TargetName value should appear in all cubes
           used in the output ControlNet.
         </description>
       </parameter>
-      
+
       <parameter name="MEASURELOCK">
         <type>boolean</type>
         <brief>
@@ -375,10 +379,10 @@
         </brief>
         <description>
           This parameter indicates whether control measures found in the match
-          point file will be locked. That is, if this parameter is set to true, 
-          then each ControlMeasure in the output ControlNet file will have the 
-          keyword EditLock set to true. This prevents any editing by ISIS3 
-          programs to the sample and line values associated to each measure 
+          point file will be locked. That is, if this parameter is set to true,
+          then each ControlMeasure in the output ControlNet file will have the
+          keyword EditLock set to true. This prevents any editing by ISIS3
+          programs to the sample and line values associated to each measure
           found in the match point file. This parameter defaults to FALSE.
         </description>
         <default><item>FALSE</item></default>
@@ -392,19 +396,19 @@
     <example>
       <brief>Create control net from match point file</brief>
       <description>
-        This example demonstrates how to use the  <strong>mat2cnet </strong> 
-        application to create a control network from a match point file.  In 
+        This example demonstrates how to use the  <strong>mat2cnet </strong>
+        application to create a control network from a match point file.  In
         this case, no RAND PPP file is used.
       </description>
       <terminalInterface>
-        <commandLine> 
-          list2=../IN/isis2cubes.lis match=../IN/matchpointfile.mat 
-          list3=../IN/isis3cubes.lis control=../OUT/controlnet.net 
+        <commandLine>
+          list2=../IN/isis2cubes.lis match=../IN/matchpointfile.mat
+          list3=../IN/isis3cubes.lis control=../OUT/controlnet.net
           description="Default Test Network" networkid= TestNet01 target=Titan
         </commandLine>
-        <description> 
-          Run the <strong>mat2cnet</strong> application to create a ControlNet 
-          file from a match point file with corresponding ISIS2 cubelist and 
+        <description>
+          Run the <strong>mat2cnet</strong> application to create a ControlNet
+          file from a match point file with corresponding ISIS2 cubelist and
           ISIS3 cubelist
         </description>
       </terminalInterface>
@@ -413,7 +417,7 @@
           <image width="750" height="539" src="assets/images/mat2cnetGuiEx1.jpg">
             <brief>Example Gui</brief>
             <description>
-              Screenshot of GUI with parameters filled in to perform the 
+              Screenshot of GUI with parameters filled in to perform the
               <strong>mat2cnet</strong> application.  The RAND PPP parameter is left
               as the default of "None".
             </description>
@@ -449,19 +453,19 @@
     <example>
       <brief>Create control net from match point file and RAND PPP file</brief>
       <description>
-        This example demonstrates how to use the  <strong>mat2cnet </strong> 
-        application to create a control network from a match point file and 
+        This example demonstrates how to use the  <strong>mat2cnet </strong>
+        application to create a control network from a match point file and
         corresponding RAND PPP file.
       </description>
       <terminalInterface>
-        <commandLine> 
+        <commandLine>
           list2=../IN/isis2cubes.lis match=../IN/matchpt.mat inputppp=true
-          ppp=../IN/rand.ppp list3=../IN/isis3cubes.lis 
-          control=../OUT/control.net description="RAND PPP Test Network" 
+          ppp=../IN/rand.ppp list3=../IN/isis3cubes.lis
+          control=../OUT/control.net description="RAND PPP Test Network"
           networkid= TestNet02 target=Titan
         </commandLine>
-        <description> 
-          Run the <strong>mat2cnet</strong> application to create a ControlNet 
+        <description>
+          Run the <strong>mat2cnet</strong> application to create a ControlNet
           file from a match point file with corresponding ISIS2 cubelist, ISIS3
           cubelist, RAND PPP file with a default point type of fixed.
         </description>
@@ -471,8 +475,8 @@
           <image width="750" height="539" src="assets/images/mat2cnetGuiEx2.jpg">
             <brief>Example Gui</brief>
             <description>
-              Screenshot of GUI with parameters filled in to perform the 
-              <strong>mat2cnet</strong> application with a RAND PPP file.  
+              Screenshot of GUI with parameters filled in to perform the
+              <strong>mat2cnet</strong> application with a RAND PPP file.
             </description>
             <thumbnail width="200" height="144" caption="Mat2cnet Gui using intensity" src="assets/thumbs/mat2cnetGuiThumbEx2.jpg" />
           </image>
@@ -503,11 +507,11 @@
           <brief>Example of control net file.</brief>
           <description>
             This pvl file is an example of the output control network created
-            from the given match point file and RAND PPP file.  Notice the 
-            following: the first point in the RAND PPP file has 3 measures in 
+            from the given match point file and RAND PPP file.  Notice the
+            following: the first point in the RAND PPP file has 3 measures in
             the MATCH file and is written to the control network as type Fixed
-            and the second point in the RAND PPP file is not contained in the 
-            Control Network since there are no measures with this ID in the 
+            and the second point in the RAND PPP file is not contained in the
+            Control Network since there are no measures with this ID in the
             MATCH file.
           </description>
           <parameterName>
@@ -518,7 +522,7 @@
           <brief>Example of RAND PPP output log file.</brief>
           <description>
             This text file is an example of the output RAND PPP log created when
-            there are points in the RAND PPP file that do not have measures in 
+            there are points in the RAND PPP file that do not have measures in
             the MATCH file.
           </description>
           <parameterName>
diff --git a/isis/src/control/apps/seedgrid/seedgrid.cpp b/isis/src/control/apps/seedgrid/seedgrid.cpp
index e21b22147585e93596cc1cf3bad94b0adf3a1568..8b99f0727549975df2f0911b9fa73b8b9ab3ee16 100644
--- a/isis/src/control/apps/seedgrid/seedgrid.cpp
+++ b/isis/src/control/apps/seedgrid/seedgrid.cpp
@@ -55,27 +55,23 @@ void IsisMain() {
 
   // Use the target name to create the control net to store the points in.
   ControlNet cnet;
-  cnet.SetTarget(target); 
-
-  // The cnet.SetTarget(target) call above will call Target::radiiGroup(target) to
-  // attempt to find the target radii values using the target name.
-  // Add those values, if not already in the mapping group.
-  double equatorialRadius = 0.0;
-  vector<Distance> targetRadii = cnet.GetTargetRadii();
-  if (mapGroup.hasKeyword("EquatorialRadius")) {
-    equatorialRadius = toDouble(mapGroup.findKeyword("EquatorialRadius")[0]);
-  }
-  else if (targetRadii[0].isValid()) {
-    equatorialRadius = targetRadii[0].meters();
-    mapGroup += PvlKeyword("EquatorialRadius", toString(equatorialRadius), "Meters");
-    // if we successfully found equatorial radius, then polar should have worked too.
-    mapGroup += PvlKeyword("PolarRadius", toString(targetRadii[2].meters()), "Meters");
-  }
-  else {
-    QString msg = "Unable to get target radii values from the given target [" + target + "]. "
-                  "User must add EquatorialRadius and PolarRadius values to the input MAP file.";
-    throw IException(IException::Unknown, msg, _FILEINFO_);
+  cnet.SetTarget(target);
+
+  // If the mapping group doesn't have the target radii, try to get them from the Target class.
+  if (!mapGroup.hasKeyword("EquatorialRadius")) {
+    try {
+      PvlGroup pvlRadii = Target::radiiGroup(target);
+      mapGroup += PvlKeyword("EquatorialRadius", pvlRadii["EquatorialRadius"], "Meters");
+      // if we successfully found equatorial radius, then polar should have worked too.
+      mapGroup += PvlKeyword("PolarRadius", pvlRadii["PolarRadius"], "Meters");
+    }
+    catch (IException &e) {
+      QString msg = "Unable to get target radii values from the given target [" + target + "]. "
+                    "User must add EquatorialRadius and PolarRadius values to the input MAP file.";
+      throw IException(e, IException::Unknown, msg, _FILEINFO_);
+    }
   }
+  double equatorialRadius = toDouble(mapGroup.findKeyword("EquatorialRadius")[0]);
 
   QString networkId;
   if (ui.WasEntered("NETWORKID")) {
@@ -96,7 +92,7 @@ void IsisMain() {
   double minLon = ui.GetDouble("MINLON");
   double maxLon = ui.GetDouble("MAXLON");
   checkLatitude(minLat, maxLat);
-  int lonDomain = 
+  int lonDomain =
       (mapGroup.hasKeyword("LongitudeDomain") ?
           toInt(mapGroup.findKeyword("LongitudeDomain")[0]) :
           360);
diff --git a/isis/src/control/apps/seedgrid/seedgrid.xml b/isis/src/control/apps/seedgrid/seedgrid.xml
index f7c711565c0aa7e81d45a31003621cd548f19261..373c05a556306febb2e2be9031fe0a623eac7bcf 100644
--- a/isis/src/control/apps/seedgrid/seedgrid.xml
+++ b/isis/src/control/apps/seedgrid/seedgrid.xml
@@ -34,13 +34,13 @@
       Added parameter allowing user to enter in projection type to use in seeding process.
     </change>
     <change name="Travis Addair" date="2009-09-14">
-      Changed means of entering projection type to be a map file so as to allow 
+      Changed means of entering projection type to be a map file so as to allow
       for more customization and accepted projection types.
     </change>
     <change name="Travis Addair" date="2009-09-24">
-      Added option to use lat/lon spacing when seeding points; fixed bug causing 
-      points to be seeded outside the lat/lon range; added a default projection 
-      type and reinstated the TARGET parameter so the user does not need to edit 
+      Added option to use lat/lon spacing when seeding points; fixed bug causing
+      points to be seeded outside the lat/lon range; added a default projection
+      type and reinstated the TARGET parameter so the user does not need to edit
       a projection file in order to run the program.
     </change>
     <change name="Travis Addair" date="2010-06-07">
@@ -66,10 +66,14 @@
       Cleaned up duplicate code. Added error message to alert to the user when the program fails
       to find TargetRadii. Added errors appTest. References #3892
     </change>
+    <change name="Jesse Mapel" date="2018-07-06">
+      Changed to get the target radii directly from the Target class instead of the control network
+      because the control network no longer has them. Fixes #5457.
+    </change>
   </history>
 
   <groups>
-    <group name="Target/Range"> 
+    <group name="Target/Range">
       <parameter name="TARGET">
         <type>string</type>
         <brief>
@@ -84,7 +88,7 @@
           the program will throw an error.
         </description>
         <internalDefault>From MAP file</internalDefault>
-      </parameter>                                                   
+      </parameter>
 
       <parameter name="MAP">
         <type>filename</type>
@@ -97,8 +101,8 @@
         <description>
           A file containing the mapping parameters in PVL form.  This file can
           be a simple PVL file or an existing cube label that contains a
-          Mapping group.  By default, the program will use a 
-          standard map template for a Sinusoidal projection.  If the keyword 
+          Mapping group.  By default, the program will use a
+          standard map template for a Sinusoidal projection.  If the keyword
           TargetName is not in this mapping file, then the user must specify
           a value for the TARGET parameter. You can produce map files using the
           <a href="../maptemplate/maptemplate.html"
@@ -167,14 +171,14 @@
       <parameter name="SPACING">
         <type>string</type>
         <brief>
-          Whether the generated control points should be spaced by meter 
+          Whether the generated control points should be spaced by meter
           increment, or by latitude/longitude increment
         </brief>
         <description>
-            This option allows the user to specify the type of spacing the 
-            program will use when generating the control points.  Selecting 
-            METER spacing will use a projection to attempt to place control 
-            points every XSTEP meters within the longitude range, and every 
+            This option allows the user to specify the type of spacing the
+            program will use when generating the control points.  Selecting
+            METER spacing will use a projection to attempt to place control
+            points every XSTEP meters within the longitude range, and every
             YSTEP meters within the latitude range.  Conversely, LATLON spacing
             will simply place control points every LATSTEP and LONSTEP within
             the range.
@@ -186,10 +190,10 @@
                    Space control points in the range by meter increments.
                 </brief>
                 <description>
-                    This option will space control points in the range by a 
-                    specified XSTEP and YSTEP given in meters on the planet's 
-                    surface.  If this option is selected, the user must also 
-                    specify a MAP file, but not necessarily a value for 
+                    This option will space control points in the range by a
+                    specified XSTEP and YSTEP given in meters on the planet's
+                    surface.  If this option is selected, the user must also
+                    specify a MAP file, but not necessarily a value for
                     TARGET if the projection contains the TargetName keyword.
                 </description>
                 <inclusions>
@@ -204,12 +208,12 @@
             </option>
             <option value="LATLON">
                 <brief>
-                    Space control points in the range by latitude and longitude 
+                    Space control points in the range by latitude and longitude
                     increments.
                 </brief>
                 <description>
-                    This option will space control points in the range by a 
-                    specified LATSTEP and LONSTEP, given in terms of the 
+                    This option will space control points in the range by a
+                    specified LATSTEP and LONSTEP, given in terms of the
                     planet's degrees latitude and longitude, respectively. If
                     this option is selected, the user must specify a TARGET
                     name, but not a MAP file. The lat/lon coordinates are in
diff --git a/isis/src/control/apps/sumspice/sumspice.xml b/isis/src/control/apps/sumspice/sumspice.xml
index 7743e47e016bc42445e8d222be863d180f9501b4..f36826f1a4cc28c91494d7cb54b9ce42068fca6e 100644
--- a/isis/src/control/apps/sumspice/sumspice.xml
+++ b/isis/src/control/apps/sumspice/sumspice.xml
@@ -314,6 +314,10 @@ sumspice from=st_2395699394_v.lev0.cub sumfile=N2395699394.SUM  update=spice sum
       Changed pvl.DIFF of input for hayabusa app test to ignore file names. Allows test to pass when
       not using default data area. Fixes #4738.
     </change>
+    <change name="Kaitlyn Lee" date="2018-04-08">
+      Updated the pvl.DIFF's of the input for the dawn test to ignore the 
+      InstrumentPointing keyword. Fixes #5379.
+    </change>
   </history>
 
   <category>
diff --git a/isis/src/control/objs/BundleAdjust/BundleAdjust.cpp b/isis/src/control/objs/BundleAdjust/BundleAdjust.cpp
index 8c892e114cb8e5d137778a1f66c279b860f366db..5ed7b22cae200e6f3fa8f6c3adc294e85cc5bfdf 100644
--- a/isis/src/control/objs/BundleAdjust/BundleAdjust.cpp
+++ b/isis/src/control/objs/BundleAdjust/BundleAdjust.cpp
@@ -104,7 +104,8 @@ namespace Isis {
     m_cleanUp = true;
     m_cnetFileName = cnetFile;
     try {
-      m_controlNet = ControlNetQsp( new ControlNet(cnetFile, &progress) );
+      m_controlNet = ControlNetQsp( new ControlNet(cnetFile, &progress,
+                                     bundleSettings->controlPointCoordTypeReports()) );
     }
     catch (IException &e) {
       throw;
@@ -275,9 +276,8 @@ namespace Isis {
     m_bundleSettings = bundleSettings;
 
     m_abort = false;
-    Progress progress;
     try {
-      m_controlNet = ControlNetQsp( new ControlNet(control.fileName(), &progress) );
+      m_controlNet = ControlNetQsp( new ControlNet(control.fileName()) );
     }
     catch (IException &e) {
       throw;
@@ -360,7 +360,7 @@ namespace Isis {
    *   @todo answer comments with questions, TODO, ???, and !!!
    */
   void BundleAdjust::init(Progress *progress) {
-
+    emit(statusUpdate("Initialization"));
     m_previousNumberImagePartials = 0;
 
     // initialize
@@ -368,8 +368,6 @@ namespace Isis {
     // JWB
     // - some of these not originally initialized.. better values???
     m_iteration = 0;
-    m_radiansToMeters = 0.0;
-    m_metersToRadians = 0.0;
     m_rank = 0;
     m_iterationSummary = "";
 
@@ -398,22 +396,6 @@ namespace Isis {
 
     // should we initialize objects m_xResiduals, m_yResiduals, m_xyResiduals
 
-    // (must be a smarter way)
-    // get target body radii and body specific conversion factors between radians and meters.
-    // need validity checks and different conversion factors for lat and long
-    // initialize m_bodyRadii
-    m_bodyRadii[0] = m_bodyRadii[1] = m_bodyRadii[2] = Distance();
-    Camera *cnetCamera = m_controlNet->Camera(0);
-    if (cnetCamera) {
-      cnetCamera->radii(m_bodyRadii);  // meters
-
-      if (m_bodyRadii[0] >= Distance(0, Distance::Meters)) {
-        m_metersToRadians = 0.001 / m_bodyRadii[0].kilometers(); // at equator
-        m_radiansToMeters = 1.0 / m_metersToRadians;
-        m_bundleResults.setRadiansToMeters(m_radiansToMeters);
-      }
-     }
-
       // TESTING
       // TODO: code below should go into a separate method???
       // set up BundleObservations and assign solve settings for each from BundleSettings class
@@ -460,11 +442,10 @@ namespace Isis {
           continue;
         }
 
-        BundleControlPointQsp bundleControlPoint(new BundleControlPoint(point));
+        BundleControlPointQsp bundleControlPoint(new BundleControlPoint
+                            (m_bundleSettings, point));
         m_bundleControlPoints.append(bundleControlPoint);
 
-        bundleControlPoint->setWeights(m_bundleSettings, m_metersToRadians);
-
         // set parent observation for each BundleMeasure
 
         int numMeasures = bundleControlPoint->size();
@@ -551,8 +532,9 @@ namespace Isis {
    *                           printed to stdout. References #4313.
    */
   bool BundleAdjust::validateNetwork() {
+     
     outputBundleStatus("\nValidating network...");
-
+    
     int imagesWithInsufficientMeasures = 0;
     QString msg = "Images with one or less measures:\n";
     int numObservations = m_bundleObservations.size();
@@ -576,8 +558,8 @@ namespace Isis {
       throw IException(IException::User, msg, _FILEINFO_);
     }
 
-    outputBundleStatus("Validation complete!...");
-
+    outputBundleStatus("\nValidation complete!...\n");
+    
     return true;
   }
 
@@ -680,7 +662,7 @@ namespace Isis {
    *
    * @TODO make solveCholesky return a BundleSolutionInfo object and delete this placeholder ???
    */
-  BundleSolutionInfo BundleAdjust::solveCholeskyBR() {
+  BundleSolutionInfo* BundleAdjust::solveCholeskyBR() {
     solveCholesky();
     return bundleSolveInformation();
   }
@@ -710,6 +692,7 @@ namespace Isis {
    *                           mode. Fixes #4483.
    */
   bool BundleAdjust::solveCholesky() {
+    emit(statusBarUpdate("Solving"));
     try {
 
       // throw error if a frame camera is included AND
@@ -726,7 +709,7 @@ namespace Isis {
   //      }
   //    }
 
-      // Compute the apriori lat/lons for each nonheld point
+      // Compute the apriori coordinates for each nonheld point
       m_controlNet->ComputeApriori(); // original location
 
       // ken testing - if solving for target mean radius, set point radius to current mean radius
@@ -743,7 +726,9 @@ namespace Isis {
         }
       }
 
-      if (m_bundleTargetBody && m_bundleTargetBody->solveTriaxialRadii()) {
+      // Only use target body solution options when using Latitudinal coordinates
+      if (m_bundleTargetBody && m_bundleTargetBody->solveTriaxialRadii()
+         && m_bundleSettings->controlPointCoordTypeBundle() == SurfacePoint::Latitudinal) {
         int numControlPoints = m_bundleControlPoints.size();
         for (int i = 0; i < numControlPoints; i++) {
           BundleControlPointQsp point = m_bundleControlPoints.at(i);
@@ -757,6 +742,7 @@ namespace Isis {
         }
       }
 
+      // Beginning of iterations
       m_iteration = 1;
       double vtpv = 0.0;
       double previousSigma0 = 0.0;
@@ -766,7 +752,7 @@ namespace Isis {
 
       for (;;) {
 
-        emit iterationUpdate(m_iteration, m_bundleResults.sigma0());
+        emit iterationUpdate(m_iteration);
 
         // testing
         if (m_abort) {
@@ -786,7 +772,7 @@ namespace Isis {
           m_sparseNormals.zeroBlocks();
         }
 
-        // form normal equations
+        // form normal equations -- computePartials is called in here.
         if (!formNormalEquations()) {
           m_bundleResults.setConverged(false);
           break;
@@ -803,7 +789,7 @@ namespace Isis {
 
         // solve the system
         if (!solveSystem()) {
-          printf("solve failed!\n");
+          outputBundleStatus("\nsolve failed!");
           m_bundleResults.setConverged(false);
           break;
         }
@@ -855,22 +841,22 @@ namespace Isis {
         char format = 'f';
         int precision = 10;
 
-        emit statusUpdate(QString("Iteration: %1")
+        emit statusUpdate(QString("Iteration: %1 \n")
                                   .arg(m_iteration));
-        emit statusUpdate(QString("Sigma0: %1")
+        emit statusUpdate(QString("Sigma0: %1 \n")
                                   .arg(m_bundleResults.sigma0(),
                                        fieldWidth,
                                        format,
                                        precision));
-        emit statusUpdate(QString("Observations: %1")
+        emit statusUpdate(QString("Observations: %1 \n")
                                   .arg(m_bundleResults.numberObservations()));
-        emit statusUpdate(QString("Constrained Parameters:%1")
+        emit statusUpdate(QString("Constrained Parameters:%1 \n")
                                   .arg(m_bundleResults.numberConstrainedPointParameters()));
-        emit statusUpdate(QString("Unknowns: %1")
+        emit statusUpdate(QString("Unknowns: %1 \n")
                                   .arg(m_bundleResults.numberUnknownParameters()));
-        emit statusUpdate(QString("Degrees of Freedom: %1")
+        emit statusUpdate(QString("Degrees of Freedom: %1 \n")
                                   .arg(m_bundleResults.degreesOfFreedom()));
-        emit iterationUpdate(m_iteration, m_bundleResults.sigma0());
+        emit iterationUpdate(m_iteration);
 
         // check for convergence
         if (m_bundleSettings->convergenceCriteria() == BundleSettings::Sigma0) {
@@ -896,6 +882,7 @@ namespace Isis {
             else { // otherwise iterations are complete
               m_bundleResults.setConverged(true);
               emit statusUpdate("Bundle has converged\n");
+              emit statusBarUpdate("Converged");
               break;
             }
           }
@@ -914,7 +901,8 @@ namespace Isis {
 
           if ( numConvergedParams == numImgParams ) {
             m_bundleResults.setConverged(true);
-            emit statusUpdate("Bundle has converged");
+            emit statusUpdate("Bundle has converged\n");
+            emit statusBarUpdate("Converged");
             break;
           }
         }
@@ -923,14 +911,15 @@ namespace Isis {
         clock_t iterationStopClock = clock();
         double iterationTime = (iterationStopClock - iterationStartClock)
                                 / (double)CLOCKS_PER_SEC;
-        emit statusUpdate( QString("End of Iteration %1").arg(m_iteration) );
-        emit statusUpdate( QString("Elapsed Time: %1").arg(iterationTime,
+        emit statusUpdate( QString("End of Iteration %1 \n").arg(m_iteration) );
+        emit statusUpdate( QString("Elapsed Time: %1 \n").arg(iterationTime,
                                                            fieldWidth,
                                                            format,
                                                            precision) );
 
         // check for maximum iterations
         if (m_iteration >= m_bundleSettings->convergenceCriteriaMaximumIterations()) {
+          emit(statusBarUpdate("Max Iterations Reached"));
           break;
         }
 
@@ -958,9 +947,11 @@ namespace Isis {
 
       if (m_bundleResults.converged() && m_bundleSettings->errorPropagation()) {
         clock_t errorPropStartClock = clock();
-        printf("Starting Error Propagation");
+        
+        outputBundleStatus("\nStarting Error Propagation");
+        
         errorPropagation();
-        emit statusUpdate("\n\nError Propagation Complete");
+        emit statusUpdate("\n\nError Propagation Complete\n");
         clock_t errorPropStopClock = clock();
         m_bundleResults.setElapsedTimeErrorProp((errorPropStopClock - errorPropStartClock)
                                                 / (double)CLOCKS_PER_SEC);
@@ -976,16 +967,16 @@ namespace Isis {
       m_bundleResults.setObservations(m_bundleObservations);
       m_bundleResults.setBundleControlPoints(m_bundleControlPoints);
 
-      BundleSolutionInfo *results = new BundleSolutionInfo(bundleSolveInformation());
-      emit resultsReady(results);
+      emit resultsReady(bundleSolveInformation());
 
-      emit statusUpdate("\nBundle Complete");
+      emit statusUpdate("\nBundle Complete\n");
 
       iterationSummary();
     }
     catch (IException &e) {
       m_bundleResults.setConverged(false);
       emit statusUpdate("\n aborting...");
+      emit statusBarUpdate("Failed to Converge");
       emit finished();
       QString msg = "Could not solve bundle adjust.";
       throw IException(e, e.errorType(), msg, _FILEINFO_);
@@ -999,12 +990,18 @@ namespace Isis {
   /**
    * Create a BundleSolutionInfo containing the settings and results from the bundle adjustment.
    *
-   * @return @b BundleSolutionInfo A container with solve information from the adjustment.
+   * @return @b BundleSolutionInfo A container with solve information from the adjustment. NOTE:
+   *            Caller takes ownership and is responsible for memory management of returned
+   *            BundleSolutionInfo raw pointer.
+   *
    */
-  BundleSolutionInfo BundleAdjust::bundleSolveInformation() {
-    BundleSolutionInfo results(m_bundleSettings, FileName(m_cnetFileName), m_bundleResults, imageLists());
-    results.setRunTime("");
-    return results;
+  BundleSolutionInfo *BundleAdjust::bundleSolveInformation() {
+    BundleSolutionInfo *bundleSolutionInfo = new BundleSolutionInfo(m_bundleSettings,
+                                                                    FileName(m_cnetFileName),
+                                                                    m_bundleResults,
+                                                                    imageLists());
+    bundleSolutionInfo->setRunTime("");
+    return bundleSolutionInfo;
   }
 
 
@@ -1020,6 +1017,7 @@ namespace Isis {
    * @see BundleAdjust::formWeightedNormals
    */
   bool BundleAdjust::formNormalEquations() {
+    emit(statusBarUpdate("Forming Normal Equations"));
     bool status = false;
 
     m_bundleResults.setNumberObservations(0);// ???
@@ -1062,10 +1060,10 @@ namespace Isis {
     int pointIndex = 0;
     int num3DPoints = m_bundleControlPoints.size();
 
-    printf("\n");
-
+    outputBundleStatus("\n\n");
+    
     for (int i = 0; i < num3DPoints; i++) {
-
+      emit(pointUpdate(i+1));
       BundleControlPointQsp point = m_bundleControlPoints.at(i);
 
       if (point->isRejected()) {
@@ -1296,6 +1294,7 @@ namespace Isis {
     Q.zeroBlocks();
 
     // weighting of 3D point parameters
+    // Make sure weights are in the units corresponding to the bundle coordinate type
     boost::numeric::ublas::bounded_vector<double, 3> &weights
         = bundleControlPoint->weights();
     boost::numeric::ublas::bounded_vector<double, 3> &corrections
@@ -1324,7 +1323,7 @@ namespace Isis {
 
     // save upper triangular covariance matrix for error propagation
     SurfacePoint SurfacePoint = bundleControlPoint->adjustedSurfacePoint();
-    SurfacePoint.SetSphericalMatrix(N22);
+    SurfacePoint.SetMatrix(m_bundleSettings->controlPointCoordTypeBundle(), N22);
     bundleControlPoint->setAdjustedSurfacePoint(SurfacePoint);
 
     // form Q (this is N22{-1} * N12{T})
@@ -1416,35 +1415,6 @@ namespace Isis {
   }
 
 
-  /**
-   * Perform the matrix multiplication v2 = alpha ( Q x v1 ).
-   *
-   * @param alpha A constant multiplier.
-   * @param v2 The output vector.
-   * @param Q A sparse block matrix.
-   * @param v1 A vector.
-   */
-  void BundleAdjust::productAlphaAV(double alpha, bounded_vector<double,3> &v2,
-                                    SparseBlockRowMatrix &Q,
-                                    vector<double> &v1) {
-
-    QMapIterator< int, LinearAlgebra::Matrix * > Qit(Q);
-
-    int subrangeStart, subrangeEnd;
-    
-    while ( Qit.hasNext() ) {
-      Qit.next();
-
-      int columnIndex = Qit.key();
-
-      subrangeStart = m_sparseNormals.at(columnIndex)->startColumn();
-      subrangeEnd = subrangeStart + Qit.value()->size2();
-      
-      v2 += alpha * prod(*(Qit.value()),subrange(v1,subrangeStart,subrangeEnd));
-    }
-  }
-
-
   /**
    * Perform the matrix multiplication Q = N22 x N12(transpose)
    *
@@ -1647,7 +1617,7 @@ namespace Isis {
                                                   -1, CHOLMOD_REAL, &m_cholmodCommon);
 
       if ( !m_cholmodTriplet ) {
-        printf("Triplet allocation failure");
+        outputBundleStatus("\nTriplet allocation failure\n");
         return false;
       }
 
@@ -1668,7 +1638,9 @@ namespace Isis {
       SparseBlockColumnMatrix *normalsColumn = m_sparseNormals[columnIndex];
 
       if ( !normalsColumn ) {
-        printf("SparseBlockColumnMatrix retrieval failure at column %d", columnIndex);
+        QString status = "\nSparseBlockColumnMatrix retrieval failure at column " + 
+                         QString::number(columnIndex);
+        outputBundleStatus(status);
         return false;
       }
 
@@ -1687,9 +1659,15 @@ namespace Isis {
 
         LinearAlgebra::Matrix *normalsBlock = it.value();
         if ( !normalsBlock ) {
-          printf("matrix block retrieval failure at column %d, row %d", columnIndex, rowIndex);
-          printf("Total # of block columns: %d", numBlockcolumns);
-          printf("Total # of blocks: %d", m_sparseNormals.numberOfBlocks());
+          QString status = "\nmatrix block retrieval failure at column ";
+          status.append(columnIndex);
+          status.append(", row ");
+          status.append(rowIndex);
+          outputBundleStatus(status);
+          status = "Total # of block columns: " + QString::number(numBlockcolumns);
+          outputBundleStatus(status);
+          status = "Total # of blocks: " + QString::number(m_sparseNormals.numberOfBlocks());
+          outputBundleStatus(status);
           return false;
         }
 
@@ -1829,7 +1807,7 @@ namespace Isis {
    * with the different partial derivatives.
    *
    * @param coeffTarget A matrix that will contain target body
-   *                    pertial derivatives.
+   *                    partial derivatives.
    * @param coeffImage A matrix that will contain camera position and orientation
    *                   partial derivatives.
    * @param coeffPoint3D A matrix that will contain point lat, lon, and radius
@@ -1849,10 +1827,11 @@ namespace Isis {
                                      BundleMeasure &measure,
                                      BundleControlPoint &point) {
 
-    // additional vectors
-    std::vector<double> lookBWRTLat;
-    std::vector<double> lookBWRTLon;
-    std::vector<double> lookBWRTRad;
+    // These vectors are either body-fixed latitudinal (lat/lon/radius) or rectangular (x/y/z)
+    // depending on the value of coordinate type in SurfacePoint
+    std::vector<double> lookBWRTCoord1;
+    std::vector<double> lookBWRTCoord2;
+    std::vector<double> lookBWRTCoord3;
 
     Camera *measureCamera = NULL;
 
@@ -1888,8 +1867,10 @@ namespace Isis {
 
     // no need to call SetImage for framing camera ( CameraType  = 0 )
     if (measureCamera->GetCameraType() != 0) {
-      // Set the Spice to the measured point
-      // TODO - can we explain this better?
+      // Set the Spice to the measured point.  A framing camera exposes the entire image at one time.
+      // It will have a single set of Spice for the entire image.  Scanning cameras may populate a single
+      // image with multiple exposures, each with a unique set of Spice.  SetImage needs to be called
+      // repeatedly for these images to point to the Spice for the current pixel.
       measureCamera->SetImage(measure.sample(), measure.line());
     }
 
@@ -1906,13 +1887,12 @@ namespace Isis {
       throw IException(IException::User, msg, _FILEINFO_);
     }
 
-    // partials for fixed point w/r lat, long, radius in Body-Fixed
-    lookBWRTLat = measureCamera->GroundMap()->PointPartial(point.adjustedSurfacePoint(),
-                                                           CameraGroundMap::WRT_Latitude);
-    lookBWRTLon = measureCamera->GroundMap()->PointPartial(point.adjustedSurfacePoint(),
-                                                           CameraGroundMap::WRT_Longitude);
-    lookBWRTRad = measureCamera->GroundMap()->PointPartial(point.adjustedSurfacePoint(),
-                                                           CameraGroundMap::WRT_Radius);
+    // Retrieve the coordinate type (latitudinal or rectangular) and compute the partials for
+    // the fixed point with respect to each coordinate in Body-Fixed
+    SurfacePoint::CoordinateType type = m_bundleSettings->controlPointCoordTypeBundle();
+    lookBWRTCoord1 = point.adjustedSurfacePoint().Partial(type, SurfacePoint::One);
+    lookBWRTCoord2 = point.adjustedSurfacePoint().Partial(type, SurfacePoint::Two);
+    lookBWRTCoord3 = point.adjustedSurfacePoint().Partial(type, SurfacePoint::Three);
 
     int index = 0;
     if (m_bundleSettings->solveTargetBody() && m_bundleSettings->solvePoleRA()) {
@@ -2062,14 +2042,14 @@ namespace Isis {
       }
     }
 
-    // partials for 3D point
-    measureCamera->GroundMap()->GetdXYdPoint(lookBWRTLat,
+    // Complete partials calculations for 3D point (latitudinal or rectangular)
+    measureCamera->GroundMap()->GetdXYdPoint(lookBWRTCoord1,
                                              &coeffPoint3D(0, 0),
                                              &coeffPoint3D(1, 0));
-    measureCamera->GroundMap()->GetdXYdPoint(lookBWRTLon,
+    measureCamera->GroundMap()->GetdXYdPoint(lookBWRTCoord2,
                                              &coeffPoint3D(0, 1),
                                              &coeffPoint3D(1, 1));
-    measureCamera->GroundMap()->GetdXYdPoint(lookBWRTRad,
+    measureCamera->GroundMap()->GetdXYdPoint(lookBWRTCoord3,
                                              &coeffPoint3D(0, 2),
                                              &coeffPoint3D(1, 2));
 
@@ -2122,7 +2102,7 @@ namespace Isis {
    * apply parameter corrections for solution.
    */
   void BundleAdjust::applyParameterCorrections() {
-
+    emit(statusBarUpdate("Updating Parameters"));
     int t = 0;
 
     // TODO - update target body parameters if in solution
@@ -2151,14 +2131,12 @@ namespace Isis {
 
       t += numParameters;
     }
-        
-    // TODO: Below code should move into BundleControlPoint->updateParameterCorrections
-    //       except, what about the productAlphaAV method?
+    // TODO - When BundleXYZ gets merged into dev, go with Ken's version of merging the updating of
+    //              of the adjusted surface point into BundleControlPoint.
     
-    // Update lat/lon for each control point
-    double latCorrection, lonCorrection, radCorrection;
     int pointIndex = 0;
     int numControlPoints = m_bundleControlPoints.size();
+    
     for (int i = 0; i < numControlPoints; i++) {
       BundleControlPointQsp point = m_bundleControlPoints.at(i);
 
@@ -2167,78 +2145,8 @@ namespace Isis {
           continue;
       }
 
-      // get NIC, Q, and correction vector for this point
-      boost::numeric::ublas::bounded_vector< double, 3 > &NIC = point->nicVector();
-      SparseBlockRowMatrix &Q = point->cholmodQMatrix();
-      boost::numeric::ublas::bounded_vector< double, 3 > &corrections = point->corrections();
-      
-      // subtract product of Q and nj from NIC
-      productAlphaAV(-1.0, NIC, Q, m_imageSolution);
-
-      // get point parameter corrections
-      latCorrection = NIC(0);
-      lonCorrection = NIC(1);
-      radCorrection = NIC(2);
-
-      SurfacePoint surfacepoint = point->adjustedSurfacePoint();
-
-      double pointLat = surfacepoint.GetLatitude().degrees();
-      double pointLon = surfacepoint.GetLongitude().degrees();
-      double pointRad = surfacepoint.GetLocalRadius().meters();
-
-      pointLat += RAD2DEG * latCorrection;
-      pointLon += RAD2DEG * lonCorrection;
-
-      // Make sure updated values are still in valid range.
-      // TODO What is the valid lon range?
-      if (pointLat < -90.0) {
-        pointLat = -180.0 - pointLat;
-        pointLon = pointLon + 180.0;
-      }
-      if (pointLat > 90.0) {
-        pointLat = 180.0 - pointLat;
-        pointLon = pointLon + 180.0;
-      }
-      while (pointLon > 360.0) {
-        pointLon = pointLon - 360.0;
-      }
-      while (pointLon < 0.0) {
-        pointLon = pointLon + 360.0;
-      }
-
-      pointRad += 1000.*radCorrection;
-
-      // sum and save corrections
-      corrections(0) += latCorrection;
-      corrections(1) += lonCorrection;
-      corrections(2) += radCorrection;
-           
-      // ken testing - if solving for target body mean radius, set radius to current
-      // mean radius value
-      if (m_bundleTargetBody && (m_bundleTargetBody->solveMeanRadius()
-          || m_bundleTargetBody->solveTriaxialRadii())) {
-        if (m_bundleTargetBody->solveMeanRadius()) {
-          surfacepoint.SetSphericalCoordinates(Latitude(pointLat, Angle::Degrees),
-                                               Longitude(pointLon, Angle::Degrees),
-                                               m_bundleTargetBody->meanRadius());
-        }
-        else if (m_bundleTargetBody->solveTriaxialRadii()) {
-            Distance localRadius = m_bundleTargetBody->
-                                       localRadius(Latitude(pointLat, Angle::Degrees),
-                                                   Longitude(pointLon, Angle::Degrees));
-            surfacepoint.SetSphericalCoordinates(Latitude(pointLat, Angle::Degrees),
-                                                 Longitude(pointLon, Angle::Degrees),
-                                                 localRadius);
-        }
-      }
-      else {
-        surfacepoint.SetSphericalCoordinates(Latitude(pointLat, Angle::Degrees),
-                                             Longitude(pointLon, Angle::Degrees),
-                                             Distance(pointRad, Distance::Meters));
-      }
-
-      point->setAdjustedSurfacePoint(surfacepoint);
-
+      point->applyParameterCorrections(m_imageSolution, m_sparseNormals,
+                                       m_bundleTargetBody); 
       pointIndex++;
 
     } // end loop over point corrections
@@ -2257,6 +2165,7 @@ namespace Isis {
    *                           image sample and line residuals.
    */
   double BundleAdjust::computeResiduals() {
+    emit(statusBarUpdate("Computing Residuals"));
     double vtpv = 0.0;
     double vtpvControl = 0.0;
     double vtpvImage = 0.0;
@@ -2303,7 +2212,7 @@ namespace Isis {
     }
 
     // add vtpv from constrained 3D points
-    int pointIndex = 0;
+    int pointIndex = 0;   // *** TODO *** This does not appear to be used.  Delete? DAC 07-14-2017
     for (int i = 0; i < numObjectPoints; i++) {
       BundleControlPointQsp bundleControlPoint = m_bundleControlPoints.at(i);
 
@@ -2460,17 +2369,26 @@ namespace Isis {
         medianDev = residuals[midpointIndex];
       }
 
-      std::cout << "median deviation: " << medianDev << std::endl;
-
+      QString status = "\nmedian deviation: ";
+      status.append(QString("%1").arg(medianDev));
+      status.append("\n");
+      outputBundleStatus(status);
+      
       mad = 1.4826 * medianDev;
 
-      std::cout << "mad: " << mad << "\n";
-
+      status = "\nmad: ";
+      status.append(QString("%1").arg(mad));
+      status.append("\n");
+      outputBundleStatus(status);
+      
       m_bundleResults.setRejectionLimit(median
                                         + m_bundleSettings->outlierRejectionMultiplier() * mad);
 
-      std::cout << "Rejection Limit: " << m_bundleResults.rejectionLimit() << std::endl;
-
+      status = "\nRejection Limit: ";
+      status.append(QString("%1").arg(m_bundleResults.rejectionLimit()));
+      status.append("\n");
+      outputBundleStatus(status);
+      
       return true;
   }
 
@@ -2497,6 +2415,8 @@ namespace Isis {
     int numComingBack = 0;
 
     int numObjectPoints = m_bundleControlPoints.size();
+    
+    outputBundleStatus("\n");
     for (int i = 0; i < numObjectPoints; i++) {
       BundleControlPointQsp point = m_bundleControlPoints.at(i);
 
@@ -2521,7 +2441,10 @@ namespace Isis {
 
           // was it previously rejected?
           if ( measure->isRejected() ) {
-            printf("Coming back in: %s\r",point->id().toLatin1().data());
+            QString status = "Coming back in: ";
+            status.append(QString("%1").arg(point->id().toLatin1().data()));
+            status.append("\r");
+            outputBundleStatus(status);
             numComingBack++;
             m_controlNet->DecrementNumberOfRejectedMeasuresInImage(measure->cubeSerialNumber());
           }
@@ -2570,7 +2493,10 @@ namespace Isis {
       // do we still have sufficient remaining observations for this 3D point?
       if ( ( numMeasures-numRejected ) < 2 ) {
           point->setRejected(true);
-          printf("Rejecting Entire Point: %s\r",point->id().toLatin1().data());
+          QString status = "Rejecting Entire Point: ";
+          status.append(QString("%1").arg(point->id().toLatin1().data()));
+          status.append("\r");
+          outputBundleStatus(status);
       }
       else
           point->setRejected(false);
@@ -2579,12 +2505,20 @@ namespace Isis {
 
     int numberRejectedObservations = 2*totalNumRejected;
 
-    printf("\nRejected Observations:%10d (Rejection Limit:%12.5lf)\n",
-            numberRejectedObservations, usedRejectionLimit);
+    QString status = "\nRejected Observations:";
+    status.append(QString("%1").arg(numberRejectedObservations));
+    status.append(" (Rejection Limit:");
+    status.append(QString("%1").arg(usedRejectionLimit));
+    status.append(")\n");
+    outputBundleStatus(status);
+    
     m_bundleResults.setNumberRejectedObservations(numberRejectedObservations);
 
-    std::cout << "Measures that came back: " << numComingBack << "\n" << std::endl;
-
+    status = "\nMeasures that came back: ";
+    status.append(QString("%1").arg(numComingBack));
+    status.append("\n");
+    outputBundleStatus(status);
+         
     return true;
   }
 
@@ -2638,24 +2572,34 @@ namespace Isis {
    *                           us to create the inverse matrix correlation file. References #4315.
    *   @history 2016-10-28 Ian Humphrey - Added extra newline between Error Propagation: Inverse
    *                           Blocking and Filling point covariance messages. References #4463.
+   *   @history 2018-09-06 Debbie A. Cook and Ken Edmundson - (added to BundleXYZ 
+   *                            branch on (2018-05-31).  Moved productAlphaAV and control point 
+   *                            parameter correction code to BundleControlPoint.  Earlier revised 
+   *                            errorPropagation to compute the sigmas via the variance/ 
+   *                            covariance matrices instead of the sigmas.  This should produce 
+   *                            more accurate results.  References #4649 and #501.
    */
   bool BundleAdjust::errorPropagation() {
-
+    emit(statusBarUpdate("Error Propagation"));
     // free unneeded memory
     cholmod_free_triplet(&m_cholmodTriplet, &m_cholmodCommon);
     cholmod_free_sparse(&m_cholmodNormal, &m_cholmodCommon);
 
     LinearAlgebra::Matrix T(3, 3);
-    double sigmaLat, sigmaLon, sigmaRad;
-    double t;
+    // *** TODO *** 
+    // Can any of the control point specific code be moved to BundleControlPoint?
 
     double sigma0Squared = m_bundleResults.sigma0() * m_bundleResults.sigma0();
 
     int numObjectPoints = m_bundleControlPoints.size();
 
     std::string currentTime = iTime::CurrentLocalTime().toLatin1().data();
-    printf("     Time: %s\n\n", currentTime.c_str());
-
+    
+    QString status = "     Time: ";
+    status.append(currentTime.c_str());
+    status.append("\n\n");
+    outputBundleStatus(status); 
+    
     // create and initialize array of 3x3 matrices for all object points
     std::vector< symmetric_matrix<double> > pointCovariances(numObjectPoints,
                                                              symmetric_matrix<double>(3));
@@ -2786,7 +2730,7 @@ namespace Isis {
       // now loop over all object points to sum contributions into 3x3 point covariance matrix
       int pointIndex = 0;
       for (j = 0; j < numObjectPoints; j++) {
-
+        emit(pointUpdate(j+1));
         BundleControlPointQsp point = m_bundleControlPoints.at(pointIndex);
         if ( point->isRejected() ) {
           continue;
@@ -2794,10 +2738,15 @@ namespace Isis {
 
         // only update point every 100 points
         if (j%100 == 0) {
-            printf("\rError Propagation: Inverse Block %8d of %8d; Point %8d of %8d", i+1,
-                   numBlockColumns,  j+1, numObjectPoints);
-
-            emit iterationUpdate(i+1, j+1);
+          QString status = "\rError Propagation: Inverse Block ";
+          status.append(QString::number(i+1));
+          status.append(" of ");
+          status.append(QString::number(numBlockColumns));
+          status.append("; Point ");
+          status.append(QString::number(j+1));
+          status.append(" of ");
+          status.append(QString::number(numObjectPoints));
+          outputBundleStatus(status);
         }
 
         // get corresponding Q matrix
@@ -2853,7 +2802,7 @@ namespace Isis {
           }
 
           catch (std::exception &e) {
-            printf("\n\n");
+            outputBundleStatus("\n\n");
             QString msg = "Input data and settings are not sufficiently stable "
                           "for error propagation.";
             throw IException(IException::User, msg, _FILEINFO_);
@@ -2876,12 +2825,17 @@ namespace Isis {
     // free b (right-hand side vector
     cholmod_free_dense(&b,&m_cholmodCommon);
 
-    printf("\n\n");
+    outputBundleStatus("\n\n");
+     
     currentTime = Isis::iTime::CurrentLocalTime().toLatin1().data();
-    printf("\rFilling point covariance matrices: Time %s", currentTime.c_str());
-    printf("\n\n");
+    
+    status = "\rFilling point covariance matrices: Time ";
+    status.append(currentTime.c_str());
+    outputBundleStatus(status);
+    outputBundleStatus("\n\n");
 
     // now loop over points again and set final covariance stuff
+    // *** TODO *** Can this loop go into BundleControlPoint
     int pointIndex = 0;
     for (j = 0; j < numObjectPoints; j++) {
 
@@ -2892,44 +2846,81 @@ namespace Isis {
       }
 
       if (j%100 == 0) {
-        printf("\rError Propagation: Filling point covariance matrices %8d of %8d\r",j+1,
-               numObjectPoints);
+        status = "\rError Propagation: Filling point covariance matrices ";
+        status.append(QString("%1").arg(j+1));
+        status.append(" of ");
+        status.append(QString("%1").arg(numObjectPoints));
+        status.append("\r");
+        outputBundleStatus(status);
       }
 
       // get corresponding point covariance matrix
       boost::numeric::ublas::symmetric_matrix<double> &covariance = pointCovariances[pointIndex];
 
-      // Ask Ken what is happening here...Setting just the sigmas is not very accurate
-      // Shouldn't we be updating and setting the matrix???  TODO
+      // Update and reset the matrix
+      // Get the Limiting Error Propagation uncertainties:  sigmas for coordinate 1, 2, and 3 in meters
+      // 
       SurfacePoint SurfacePoint = point->adjustedSurfacePoint();
 
-      sigmaLat = SurfacePoint.GetLatSigma().radians();
-      sigmaLon = SurfacePoint.GetLonSigma().radians();
-      sigmaRad = SurfacePoint.GetLocalRadiusSigma().meters();
-
-      t = sigmaLat * sigmaLat + covariance(0, 0);
-      Distance latSigmaDistance(sqrt(sigma0Squared * t) * m_radiansToMeters, Distance::Meters);
-
-      t = sigmaLon * sigmaLon + covariance(1, 1);
-      t = sqrt(sigma0Squared * t) * m_radiansToMeters;
-      Distance lonSigmaDistance(
-          t * cos(point->adjustedSurfacePoint().GetLatitude().radians()),
-          Distance::Meters);
-
-      t = sigmaRad*sigmaRad + covariance(2, 2);
-      t = sqrt(sigma0Squared * t) * 1000.0;
-
-      SurfacePoint.SetSphericalSigmasDistance(latSigmaDistance, lonSigmaDistance,
-                                              Distance(t, Distance::Meters));
-
+      // Get the TEP by adding the corresponding members of pCovar and covariance      
+      boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> pCovar;
+      
+      if (m_bundleSettings->controlPointCoordTypeBundle() == SurfacePoint::Latitudinal) {
+        pCovar = SurfacePoint.GetSphericalMatrix(SurfacePoint::Kilometers);
+      }
+      else {
+        // Assume Rectangular coordinates 
+        pCovar = SurfacePoint.GetRectangularMatrix(SurfacePoint::Kilometers);
+      }
+      pCovar += covariance;
+      pCovar *= sigma0Squared;
+
+      // debug lines
+      // if (j < 3) {
+      //   std::cout << " Adjusted surface point ..." << std::endl;
+      //   std:: cout << "     sigmaLat (radians) = " << sqrt(pCovar(0,0)) << std::endl;
+      //   std:: cout << "     sigmaLon (radians) = " << sqrt(pCovar(1,1)) << std::endl;
+      //   std:: cout << "     sigmaRad (km) = " << sqrt(pCovar(2,2)) << std::endl;
+      // std::cout <<  "      Adjusted matrix = " << std::endl;
+      // std::cout << "       " << pCovar(0,0) << "   " << pCovar(0,1) << "   "
+      //           << pCovar(0,2) << std::endl; 
+      // std::cout << "        " << pCovar(1,0) << "   " << pCovar(1,1) << "   "
+      //           << pCovar(1,2) << std::endl; 
+      // std::cout << "        " << pCovar(2,0) << "   " << pCovar(2,1) << "   "
+      //           << pCovar(2,2) << std::endl;
+      // }
+      // end debug
+      
+      // Distance units are km**2
+      SurfacePoint.SetMatrix(m_bundleSettings->controlPointCoordTypeBundle(),pCovar);
       point->setAdjustedSurfacePoint(SurfacePoint);
+      // // debug lines
+      // if (j < 3) {
+      //   boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> recCovar;
+      //   recCovar = SurfacePoint.GetRectangularMatrix(SurfacePoint::Meters);
+      //   std:: cout << "     sigmaLat (meters) = " << 
+      //     point->adjustedSurfacePoint().GetSigmaDistance(SurfacePoint::Latitudinal,
+      //     SurfacePoint::One).meters() << std::endl;
+      //   std:: cout << "     sigmaLon (meters) = " <<
+      //     point->adjustedSurfacePoint().GetSigmaDistance(SurfacePoint::Latitudinal,
+      //     SurfacePoint::Two).meters() << std::endl;
+      //   std:: cout << "   sigmaRad (km) = " << sqrt(pCovar(2,2)) << std::endl;
+      //   std::cout << "Rectangular matrix with radius in meters" << std::endl;
+      //   std::cout << "       " << recCovar(0,0) << "   " << recCovar(0,1) << "   "
+      //           << recCovar(0,2) << std::endl; 
+      //   std::cout << "        " << recCovar(1,0) << "   " << recCovar(1,1) << "   "
+      //           << recCovar(1,2) << std::endl; 
+      //   std::cout << "        " << recCovar(2,0) << "   " << recCovar(2,1) << "   "
+      //           << recCovar(2,2) << std::endl;
+      // }
+      // // end debug
 
       pointIndex++;
     }
 
     return true;
   }
-
+  
 
   /**
    * Returns a pointer to the output control network.
@@ -3086,6 +3077,16 @@ namespace Isis {
   }
 
 
+    /**
+   * Returns if the BundleAdjust has been aborted.
+   *
+   * @return @b bool If the BundleAdjust was aborted.
+   */
+  bool BundleAdjust::isAborted() {
+    return m_abort;
+  }
+
+
   /**
    * Returns the iteration summary string.
    *
@@ -3108,8 +3109,9 @@ namespace Isis {
    *                           -Wformat-security warning during the build.
    */
   void BundleAdjust::outputBundleStatus(QString status) {
-    status += "\n";
-    printf("%s", status.toStdString().c_str());
+    if (QCoreApplication::applicationName() != "ipce") { 
+      printf("%s", status.toStdString().c_str());
+    }
   }
 
 
@@ -3194,31 +3196,36 @@ namespace Isis {
 
     if (m_bundleSettings->errorPropagation()) {
 
-      // initialize lat/lon/rad boundaries
-      Distance minSigmaLatDist;
-      QString  minSigmaLatPointId = "";
+      // initialize body-fixed coordinate boundaries
 
-      Distance maxSigmaLatDist;
-      QString  maxSigmaLatPointId = "";
-
-      Distance minSigmaLonDist;
-      QString  minSigmaLonPointId = "";
-
-      Distance maxSigmaLonDist;
-      QString  maxSigmaLonPointId = "";
+      // Latitude or X
+      Distance minSigmaCoord1Dist;
+      QString  minSigmaCoord1PointId = "";
+      
+      Distance maxSigmaCoord1Dist;
+      QString  maxSigmaCoord1PointId = "";
+      
+      // Longitude or Y
+      Distance minSigmaCoord2Dist;
+      QString  minSigmaCoord2PointId = "";
 
-      Distance minSigmaRadDist;
-      QString  minSigmaRadPointId = "";
+      Distance maxSigmaCoord2Dist;
+      QString  maxSigmaCoord2PointId = "";
 
-      Distance maxSigmaRadDist;
-      QString  maxSigmaRadPointId = "";
+      // Radius or Z
+      Distance minSigmaCoord3Dist;
+      QString  minSigmaCoord3PointId = "";
 
+      Distance maxSigmaCoord3Dist;
+      QString  maxSigmaCoord3PointId = "";
+      
       // compute stats for point sigmas
-      Statistics sigmaLatStats;
-      Statistics sigmaLonStats;
-      Statistics sigmaRadStats;
+      Statistics sigmaCoord1Stats;
+      Statistics sigmaCoord2Stats;
+      Statistics sigmaCoord3Stats;
 
-      Distance sigmaLatDist, sigmaLonDist, sigmaRadDist;
+      Distance sigmaCoord1Dist, sigmaCoord2Dist, sigmaCoord3Dist;
+      SurfacePoint::CoordinateType type = m_bundleSettings->controlPointCoordTypeReports();
 
       int numPoints = m_bundleControlPoints.size();
       // initialize max and min values to those from first valid point
@@ -3226,23 +3233,27 @@ namespace Isis {
 
         const BundleControlPointQsp point = m_bundleControlPoints.at(i);
 
-        maxSigmaLatDist = point->adjustedSurfacePoint().GetLatSigmaDistance();;
-        minSigmaLatDist = maxSigmaLatDist;
+        maxSigmaCoord1Dist = point->adjustedSurfacePoint().GetSigmaDistance(type,
+                                                                            SurfacePoint::One);
+        minSigmaCoord1Dist = maxSigmaCoord1Dist;
 
-        maxSigmaLonDist = point->adjustedSurfacePoint().GetLonSigmaDistance();;
-        minSigmaLonDist = maxSigmaLonDist;
+        maxSigmaCoord2Dist = point->adjustedSurfacePoint().GetSigmaDistance(type,
+                                                                            SurfacePoint::Two);
+        minSigmaCoord2Dist = maxSigmaCoord2Dist;
 
-        maxSigmaLatPointId = point->id();
-        maxSigmaLonPointId = maxSigmaLatPointId;
-        minSigmaLatPointId = maxSigmaLatPointId;
-        minSigmaLonPointId = maxSigmaLatPointId;
+        maxSigmaCoord1PointId = point->id();
+        maxSigmaCoord2PointId = maxSigmaCoord1PointId;
+        minSigmaCoord1PointId = maxSigmaCoord1PointId;
+        minSigmaCoord2PointId = maxSigmaCoord1PointId;
 
-        if (m_bundleSettings->solveRadius()) {
-          maxSigmaRadDist = point->adjustedSurfacePoint().GetLocalRadiusSigma();
-          minSigmaRadDist = maxSigmaRadDist;
+        // Get stats for coordinate 3 if used
+        if (m_bundleSettings->solveRadius() || type == SurfacePoint::Rectangular) {
+          maxSigmaCoord3Dist = point->adjustedSurfacePoint().GetSigmaDistance(type,
+                                                                              SurfacePoint::Three);
+          minSigmaCoord3Dist = maxSigmaCoord3Dist;
 
-          maxSigmaRadPointId = maxSigmaLatPointId;
-          minSigmaRadPointId = maxSigmaLatPointId;
+          maxSigmaCoord3PointId = maxSigmaCoord1PointId;
+          minSigmaCoord3PointId = maxSigmaCoord1PointId;
         }
         break;
       }
@@ -3251,40 +3262,43 @@ namespace Isis {
 
         const BundleControlPointQsp point = m_bundleControlPoints.at(i);
 
-        sigmaLatDist = point->adjustedSurfacePoint().GetLatSigmaDistance();
-        sigmaLonDist = point->adjustedSurfacePoint().GetLonSigmaDistance();
-        sigmaRadDist = point->adjustedSurfacePoint().GetLocalRadiusSigma();
+        sigmaCoord1Dist = point->adjustedSurfacePoint().GetSigmaDistance(type,
+                                                                         SurfacePoint::One);
+        sigmaCoord2Dist = point->adjustedSurfacePoint().GetSigmaDistance(type,
+                                                                         SurfacePoint::Two);
+        sigmaCoord3Dist = point->adjustedSurfacePoint().GetSigmaDistance(type,
+                                                                         SurfacePoint::Three);
 
-        sigmaLatStats.AddData(sigmaLatDist.meters());
-        sigmaLonStats.AddData(sigmaLonDist.meters());
-        sigmaRadStats.AddData(sigmaRadDist.meters());
+        sigmaCoord1Stats.AddData(sigmaCoord1Dist.meters());
+        sigmaCoord2Stats.AddData(sigmaCoord2Dist.meters());
+        sigmaCoord3Stats.AddData(sigmaCoord3Dist.meters());
 
-        if (sigmaLatDist > maxSigmaLatDist) {
-          maxSigmaLatDist = sigmaLatDist;
-          maxSigmaLatPointId = point->id();
+        if (sigmaCoord1Dist > maxSigmaCoord1Dist) {
+          maxSigmaCoord1Dist = sigmaCoord1Dist;
+          maxSigmaCoord1PointId = point->id();
         }
-        if (sigmaLonDist > maxSigmaLonDist) {
-          maxSigmaLonDist = sigmaLonDist;
-          maxSigmaLonPointId = point->id();
+        if (sigmaCoord2Dist > maxSigmaCoord2Dist) {
+          maxSigmaCoord2Dist = sigmaCoord2Dist;
+          maxSigmaCoord2PointId = point->id();
         }
-        if (m_bundleSettings->solveRadius()) {
-          if (sigmaRadDist > maxSigmaRadDist) {
-            maxSigmaRadDist = sigmaRadDist;
-            maxSigmaRadPointId = point->id();
+        if (m_bundleSettings->solveRadius() || type == SurfacePoint::Rectangular) {
+          if (sigmaCoord3Dist > maxSigmaCoord3Dist) {
+            maxSigmaCoord3Dist = sigmaCoord3Dist;
+            maxSigmaCoord3PointId = point->id();
           }
         }
-        if (sigmaLatDist < minSigmaLatDist) {
-          minSigmaLatDist = sigmaLatDist;
-          minSigmaLatPointId = point->id();
+        if (sigmaCoord1Dist < minSigmaCoord1Dist) {
+          minSigmaCoord1Dist = sigmaCoord1Dist;
+          minSigmaCoord1PointId = point->id();
         }
-        if (sigmaLonDist < minSigmaLonDist) {
-          minSigmaLonDist = sigmaLonDist;
-          minSigmaLonPointId = point->id();
+        if (sigmaCoord2Dist < minSigmaCoord2Dist) {
+          minSigmaCoord2Dist = sigmaCoord2Dist;
+          minSigmaCoord2PointId = point->id();
         }
-        if (m_bundleSettings->solveRadius()) {
-          if (sigmaRadDist < minSigmaRadDist) {
-            minSigmaRadDist = sigmaRadDist;
-            minSigmaRadPointId = point->id();
+        if (m_bundleSettings->solveRadius() || type == SurfacePoint::Rectangular) {
+          if (sigmaCoord3Dist < minSigmaCoord3Dist) {
+            minSigmaCoord3Dist = sigmaCoord3Dist;
+            minSigmaCoord3PointId = point->id();
           }
         }
       }
@@ -3292,18 +3306,18 @@ namespace Isis {
       // update bundle results
       m_bundleResults.resizeSigmaStatisticsVectors(numberImages);
 
-      m_bundleResults.setSigmaLatitudeRange(minSigmaLatDist, maxSigmaLatDist,
-                                            minSigmaLatPointId, maxSigmaLatPointId);
+      m_bundleResults.setSigmaCoord1Range(minSigmaCoord1Dist, maxSigmaCoord1Dist,
+                                            minSigmaCoord1PointId, maxSigmaCoord1PointId);
 
-      m_bundleResults.setSigmaLongitudeRange(minSigmaLonDist, maxSigmaLonDist,
-                                             minSigmaLonPointId, maxSigmaLonPointId);
+      m_bundleResults.setSigmaCoord2Range(minSigmaCoord2Dist, maxSigmaCoord2Dist,
+                                             minSigmaCoord2PointId, maxSigmaCoord2PointId);
 
-      m_bundleResults.setSigmaRadiusRange(minSigmaRadDist, maxSigmaRadDist,
-                                          minSigmaRadPointId, maxSigmaRadPointId);
+      m_bundleResults.setSigmaCoord3Range(minSigmaCoord3Dist, maxSigmaCoord3Dist,
+                                          minSigmaCoord3PointId, maxSigmaCoord3PointId);
 
-      m_bundleResults.setRmsFromSigmaStatistics(sigmaLatStats.Rms(),
-                                                sigmaLonStats.Rms(),
-                                                sigmaRadStats.Rms());
+      m_bundleResults.setRmsFromSigmaStatistics(sigmaCoord1Stats.Rms(),
+                                                sigmaCoord2Stats.Rms(),
+                                                sigmaCoord3Stats.Rms());
     }
     m_bundleResults.setRmsImageResidualLists(rmsImageLineResiduals.toList(),
                                              rmsImageSampleResiduals.toList(),
diff --git a/isis/src/control/objs/BundleAdjust/BundleAdjust.h b/isis/src/control/objs/BundleAdjust/BundleAdjust.h
index 8c30664b4536254a1c923c6c670205ffb37efe57..c5d64f9746051180eac96695930a2bd2e8d7477d 100644
--- a/isis/src/control/objs/BundleAdjust/BundleAdjust.h
+++ b/isis/src/control/objs/BundleAdjust/BundleAdjust.h
@@ -269,7 +269,7 @@ namespace Isis {
    *                           there is no longer a -Wformat-security warning.
    *   @history 2017-05-01 Makayla Shepherd - Added imageLists() to track and return the images
    *                           bundled. Fixes #4818.
-   *   @history 2017-05-09 Tracie Sucharski - Fixed an empty pointer in ::imgeLists method. 
+   *   @history 2017-05-09 Tracie Sucharski - Fixed an empty pointer in ::imgeLists method.
    *   @history 2017-05-09 Ken Edmundson - Speed improvements and error propagation bug fix.
    *                           Separated initializations for Normal Equations matrix out of
    *                           ::initializeCholmodLibraryVariables() into
@@ -285,6 +285,44 @@ namespace Isis {
    *   @history 2017-08-09 Summer Stapleton - Added a try/catch around the m_controlNet assignment
    *                           in each of the constructors to verify valid control net input.
    *                           Fixes #5068.
+   *   @history 2017-09-01 Debbie A. Cook - Added BundleSettingsQsp as argument to
+   *                            BundleControlPoint constructor and moved setWeights call from
+   *                            BundleAdjust::init to BundleControlPoint constructor.  Don't allow
+   *                            solving for triaxial radii when coordinate type is not Latitudinal.
+   *                            Added new optional argument controlPointCoordType to ControlNet
+   *                            constructor call.  References #4649 and #501.
+   *   @history 2018-05-31 Debbie A. Cook - Moved productAlphaAV and control point parameter
+   *                            correction code to BundleControlPoint.  Earlier revised errorPropagation to
+   *                            compute the sigmas via the variance/covariance matrices instead of the sigmas.
+   *                            This should produce more accurate results.  References #4649 and #501.
+   *   @history 2018-05-22 Ken Edmundson - Modified methods bundleSolveInformation() and
+   *                           solveCholeskyBR() to return raw pointers to a BundleSolutionInfo object.
+   *                           Also modified resultsReady signal to take a raw pointer to a
+   *                           BundleSolutionInfo object. This was done to avoid using a copy
+   *                           constructor in the BundleSolutionInfo class because it is derived
+   *                           from QObject. Note that we ultimately want to return a QSharedPointer
+   *                           instead of a raw pointer.
+   *   @history 2018-06-14 Christopher Combs - Added getter method to tell if a bundle adjust was
+   *                           aborted. Added emits for status updates to the run widget.
+   *   @history 2018-06-18 Makayla Shepherd - Stopped command line output for ipce BundleAdjust.
+   *                           Fixes #4171.
+   *   @history 2018-09-06 Debbie A. Cook - (added to BundleXYZ branch on 2017-09-01)
+   *                            Added BundleSettingsQsp as argument to BundleControlPoint constructor
+   *                            and moved setWeights call from BundleAdjust::init to BundleControlPoint
+   *                            constructor.  Don't allow solving for triaxial radii when coordinate type
+   *                            is not Latitudinal. Added new optional argument controlPointCoordType
+   *                            to ControlNet constructor call.  References #4649 and #501.
+   *   @history 2018-09-06 Debbie A. Cook and Ken Edmundson - (added to BundleXYZ
+   *                            branch on (2018-05-31).  Moved productAlphaAV and control point
+   *                            parameter correction code to BundleControlPoint.  Earlier revised
+   *                            errorPropagation to compute the sigmas via the variance/
+   *                            covariance matrices instead of the sigmas.  This should produce
+   *                            more accurate results.  References #4649 and #501.
+   *   @history 2018-09-06 Debbie A. Cook - Removed obsolete member variables:
+   *                            m_radiansToMeters, m_metersToRadians, and m_bodyRadii
+   *                            which have been replaced with the local radius of a control
+   *                            point for converting point sigmas to/from radians from/to meters.
+   *                            References #4649 and #501.
    */
   class BundleAdjust : public QObject {
       Q_OBJECT
@@ -314,9 +352,10 @@ namespace Isis {
                    QList<ImageList *> imgList,
                    bool printSummary);
       ~BundleAdjust();
-      BundleSolutionInfo    solveCholeskyBR();
+      BundleSolutionInfo*    solveCholeskyBR();
 
       QList<ImageList *> imageLists();
+      bool isAborted();
 
     public slots:
       bool solveCholesky();
@@ -338,7 +377,9 @@ namespace Isis {
     signals:
       void statusUpdate(QString);
       void error(QString);
-      void iterationUpdate(int, double);
+      void iterationUpdate(int);
+      void pointUpdate(int);
+      void statusBarUpdate(QString);
       void resultsReady(BundleSolutionInfo *bundleSolveInformation);
       void finished();
 
@@ -350,7 +391,7 @@ namespace Isis {
       bool validateNetwork();
       bool solveSystem();
       void iterationSummary();
-      BundleSolutionInfo bundleSolveInformation();
+      BundleSolutionInfo* bundleSolveInformation();
       bool computeBundleStatistics();
       void applyParameterCorrections();
       bool errorPropagation();
@@ -433,7 +474,6 @@ namespace Isis {
       SerialNumberList *m_serialNumberList;                  //!< List of image serial numbers.
       BundleTargetBodyQsp m_bundleTargetBody;                /**!< Contains information about the
                                                                    target body.*/
-      Distance m_bodyRadii[3];                               //!< Triaxial body radii in meters.
       bool m_abort;                                          //!< If the bundle should abort.
       QString m_iterationSummary;                            /**!< Summary of the most recently
                                                                    completed iteration.*/
@@ -446,10 +486,6 @@ namespace Isis {
       int m_rank;                                            //!< The rank of the system.
       int m_iteration;                                       //!< The current iteration.
       int m_numberOfImagePartials;                           //!< number of image-related partials.
-      double m_radiansToMeters;                              /**!< The body specific radians to
-                                                                   meters conversion factor.*/
-      double m_metersToRadians;                              /**!< The body specific meters to
-                                                                   radians conversion factor.*/
       QList<ImageList *> m_imageLists;                        /**!< The lists of images used in the
                                                                    bundle.*/
 
@@ -490,7 +526,7 @@ namespace Isis {
                                                                    cholmod_factorize.*/
       LinearAlgebra::Vector m_imageSolution;                 /**!< The image parameter solution
                                                                    vector.*/
-                                                                   
+
       int m_previousNumberImagePartials;                     /**!< used in ::computePartials method
                                                                    to avoid unnecessary resizing
                                                                    of the coeffImage matrix.*/
diff --git a/isis/src/control/objs/BundleResults/BundleResults.cpp b/isis/src/control/objs/BundleResults/BundleResults.cpp
index 7ee446184d13d8875c14d4b6b634ef08cbd44823..3d7c1d295402d2177b1e40b1996cd26637cb9d7e 100644
--- a/isis/src/control/objs/BundleResults/BundleResults.cpp
+++ b/isis/src/control/objs/BundleResults/BundleResults.cpp
@@ -33,7 +33,7 @@ using namespace boost::numeric::ublas;
 namespace Isis {
 
   /**
-   * Constructs a BundleSettings object.
+   * Constructs a BundleResults object.
    *
    * @param parent The Qt-relationship parent.
    */
@@ -53,7 +53,7 @@ namespace Isis {
 
 
   /**
-   * Construct this BundleSettings object from XML.
+   * Construct this BundleResults object from XML.
    *
    * @param bundleSettingsFolder Where the settings XML for this bundle adjustment
    *                             resides - /work/.../projectRoot/images/import1
@@ -73,7 +73,7 @@ namespace Isis {
 
 
   /**
-   * Copy constructor for BundleResults.  Creates this BundleSettings object as a copy
+   * Copy constructor for BundleResults.  Creates this BundleResults object as a copy
    * of another BundleResults object.
    *
    * @param src The other BundleResults object to be copied.
@@ -98,7 +98,6 @@ namespace Isis {
         m_sigma0(src.m_sigma0),
         m_elapsedTime(src.m_elapsedTime),
         m_elapsedTimeErrorProp(src.m_elapsedTimeErrorProp),
-        m_radiansToMeters(src.m_radiansToMeters),
         m_converged(src.m_converged),
         m_bundleControlPoints(src.m_bundleControlPoints),
         m_outNet(src.m_outNet),
@@ -113,21 +112,21 @@ namespace Isis {
         m_rmsImageRASigmas(src.m_rmsImageRASigmas),
         m_rmsImageDECSigmas(src.m_rmsImageDECSigmas),
         m_rmsImageTWISTSigmas(src.m_rmsImageTWISTSigmas),
-        m_minSigmaLatitudeDistance(src.m_minSigmaLatitudeDistance),
-        m_maxSigmaLatitudeDistance(src.m_maxSigmaLatitudeDistance),
-        m_minSigmaLongitudeDistance(src.m_minSigmaLongitudeDistance),
-        m_maxSigmaLongitudeDistance(src.m_maxSigmaLongitudeDistance),
-        m_minSigmaRadiusDistance(src.m_minSigmaRadiusDistance),
-        m_maxSigmaRadiusDistance(src.m_maxSigmaRadiusDistance),
-        m_minSigmaLatitudePointId(src.m_minSigmaLatitudePointId),
-        m_maxSigmaLatitudePointId(src.m_maxSigmaLatitudePointId),
-        m_minSigmaLongitudePointId(src.m_minSigmaLongitudePointId),
-        m_maxSigmaLongitudePointId(src.m_maxSigmaLongitudePointId),
-        m_minSigmaRadiusPointId(src.m_minSigmaRadiusPointId),
-        m_maxSigmaRadiusPointId(src.m_maxSigmaRadiusPointId),
-        m_rmsSigmaLatitudeStats(src.m_rmsSigmaLatitudeStats),
-        m_rmsSigmaLongitudeStats(src.m_rmsSigmaLongitudeStats),
-        m_rmsSigmaRadiusStats(src.m_rmsSigmaRadiusStats),
+        m_minSigmaCoord1Distance(src.m_minSigmaCoord1Distance),
+        m_maxSigmaCoord1Distance(src.m_maxSigmaCoord1Distance),
+        m_minSigmaCoord2Distance(src.m_minSigmaCoord2Distance),
+        m_maxSigmaCoord2Distance(src.m_maxSigmaCoord2Distance),
+        m_minSigmaCoord3Distance(src.m_minSigmaCoord3Distance),
+        m_maxSigmaCoord3Distance(src.m_maxSigmaCoord3Distance),
+        m_minSigmaCoord1PointId(src.m_minSigmaCoord1PointId),
+        m_maxSigmaCoord1PointId(src.m_maxSigmaCoord1PointId),
+        m_minSigmaCoord2PointId(src.m_minSigmaCoord2PointId),
+        m_maxSigmaCoord2PointId(src.m_maxSigmaCoord2PointId),
+        m_minSigmaCoord3PointId(src.m_minSigmaCoord3PointId),
+        m_maxSigmaCoord3PointId(src.m_maxSigmaCoord3PointId),
+        m_rmsSigmaCoord1Stats(src.m_rmsSigmaCoord1Stats),
+        m_rmsSigmaCoord2Stats(src.m_rmsSigmaCoord2Stats),
+        m_rmsSigmaCoord3Stats(src.m_rmsSigmaCoord3Stats),
         m_maximumLikelihoodFunctions(src.m_maximumLikelihoodFunctions),
         m_maximumLikelihoodIndex(src.m_maximumLikelihoodIndex),
         m_cumPro(new StatCumProbDistDynCalc(*src.m_cumPro)),
@@ -184,7 +183,6 @@ namespace Isis {
       m_sigma0 = src.m_sigma0;
       m_elapsedTime = src.m_elapsedTime;
       m_elapsedTimeErrorProp = src.m_elapsedTimeErrorProp;
-      m_radiansToMeters = src.m_radiansToMeters;
       m_converged = src.m_converged;
       m_bundleControlPoints = src.m_bundleControlPoints;
       m_outNet = src.m_outNet;
@@ -199,21 +197,21 @@ namespace Isis {
       m_rmsImageRASigmas = src.m_rmsImageRASigmas;
       m_rmsImageDECSigmas = src.m_rmsImageDECSigmas;
       m_rmsImageTWISTSigmas = src.m_rmsImageTWISTSigmas;
-      m_minSigmaLatitudeDistance = src.m_minSigmaLatitudeDistance;
-      m_maxSigmaLatitudeDistance = src.m_maxSigmaLatitudeDistance;
-      m_minSigmaLongitudeDistance = src.m_minSigmaLongitudeDistance;
-      m_maxSigmaLongitudeDistance = src.m_maxSigmaLongitudeDistance;
-      m_minSigmaRadiusDistance = src.m_minSigmaRadiusDistance;
-      m_maxSigmaRadiusDistance = src.m_maxSigmaRadiusDistance;
-      m_minSigmaLatitudePointId = src.m_minSigmaLatitudePointId;
-      m_maxSigmaLatitudePointId = src.m_maxSigmaLatitudePointId;
-      m_minSigmaLongitudePointId = src.m_minSigmaLongitudePointId;
-      m_maxSigmaLongitudePointId = src.m_maxSigmaLongitudePointId;
-      m_minSigmaRadiusPointId = src.m_minSigmaRadiusPointId;
-      m_maxSigmaRadiusPointId = src.m_maxSigmaRadiusPointId;
-      m_rmsSigmaLatitudeStats = src.m_rmsSigmaLatitudeStats;
-      m_rmsSigmaLongitudeStats = src.m_rmsSigmaLongitudeStats;
-      m_rmsSigmaRadiusStats = src.m_rmsSigmaRadiusStats;
+      m_minSigmaCoord1Distance = src.m_minSigmaCoord1Distance;
+      m_maxSigmaCoord1Distance = src.m_maxSigmaCoord1Distance;
+      m_minSigmaCoord2Distance = src.m_minSigmaCoord2Distance;
+      m_maxSigmaCoord2Distance = src.m_maxSigmaCoord2Distance;
+      m_minSigmaCoord3Distance = src.m_minSigmaCoord3Distance;
+      m_maxSigmaCoord3Distance = src.m_maxSigmaCoord3Distance;
+      m_minSigmaCoord1PointId = src.m_minSigmaCoord1PointId;
+      m_maxSigmaCoord1PointId = src.m_maxSigmaCoord1PointId;
+      m_minSigmaCoord2PointId = src.m_minSigmaCoord2PointId;
+      m_maxSigmaCoord2PointId = src.m_maxSigmaCoord2PointId;
+      m_minSigmaCoord3PointId = src.m_minSigmaCoord3PointId;
+      m_maxSigmaCoord3PointId = src.m_maxSigmaCoord3PointId;
+      m_rmsSigmaCoord1Stats = src.m_rmsSigmaCoord1Stats;
+      m_rmsSigmaCoord2Stats = src.m_rmsSigmaCoord2Stats;
+      m_rmsSigmaCoord3Stats = src.m_rmsSigmaCoord3Stats;
       m_maximumLikelihoodFunctions = src.m_maximumLikelihoodFunctions;
       m_maximumLikelihoodIndex = src.m_maximumLikelihoodIndex;
 
@@ -257,23 +255,24 @@ namespace Isis {
     m_rmsImageDECSigmas.clear();
     m_rmsImageTWISTSigmas.clear();
 
-    // initialize lat/lon/rad boundaries
-    m_minSigmaLatitudeDistance.setMeters(1.0e+12);
-    m_maxSigmaLatitudeDistance.setMeters(0.0);
-    m_minSigmaLongitudeDistance.setMeters(1.0e+12);
-    m_maxSigmaLongitudeDistance.setMeters(0.0);;
-    m_minSigmaRadiusDistance.setMeters(1.0e+12);
-    m_maxSigmaRadiusDistance.setMeters(0.0);
-    m_minSigmaLatitudePointId = "";
-    m_maxSigmaLatitudePointId = "";
-    m_minSigmaLongitudePointId = "";
-    m_maxSigmaLongitudePointId = "";
-    m_minSigmaRadiusPointId = "";
-    m_maxSigmaRadiusPointId = "";
-
-    m_rmsSigmaLatitudeStats = 0.0;
-    m_rmsSigmaLongitudeStats = 0.0;
-    m_rmsSigmaRadiusStats = 0.0;
+    // Initialize coordinate sigma boundaries.  Units are meters for sigmas in both
+    // latitudinal and rectangular coordinates
+    m_minSigmaCoord1Distance.setMeters(1.0e+12);
+    m_maxSigmaCoord1Distance.setMeters(0.0);
+    m_minSigmaCoord2Distance.setMeters(1.0e+12);
+    m_maxSigmaCoord2Distance.setMeters(0.0);;
+    m_minSigmaCoord3Distance.setMeters(1.0e+12);
+    m_maxSigmaCoord3Distance.setMeters(0.0);
+    m_minSigmaCoord1PointId = "";
+    m_maxSigmaCoord1PointId = "";
+    m_minSigmaCoord2PointId = "";
+    m_maxSigmaCoord2PointId = "";
+    m_minSigmaCoord3PointId = "";
+    m_maxSigmaCoord3PointId = "";
+
+    m_rmsSigmaCoord1Stats = 0.0;
+    m_rmsSigmaCoord2Stats = 0.0;
+    m_rmsSigmaCoord3Stats = 0.0;
 
 
     // set by compute residuals
@@ -316,7 +315,6 @@ namespace Isis {
     m_maximumLikelihoodFunctions.clear();
     m_cumProRes = NULL;
 
-    m_radiansToMeters = 0;
     m_observations.clear();
     m_outNet.clear();
 
@@ -367,70 +365,70 @@ namespace Isis {
 
 
   /**
-   * Sets the min and max sigma latitude distances and point ids.
+   * Sets the min and max sigma distances and point ids for coordinate 1.
    *
    * @param minLatDist The new minimum sigma latitude distance.
    * @param maxLatDist The new maximum sigma latitude distance.
    * @param minLatPointId The new minimum sigma latitude point id.
    * @param maxLatPointId The new maximum sigma latitude point id.
    */
-  void BundleResults::setSigmaLatitudeRange(Distance minLatDist, Distance maxLatDist,
-                                            QString minLatPointId, QString maxLatPointId) {
-    m_minSigmaLatitudeDistance = minLatDist;
-    m_maxSigmaLatitudeDistance = maxLatDist;
-    m_minSigmaLatitudePointId  = minLatPointId;
-    m_maxSigmaLatitudePointId  = maxLatPointId;
+  void BundleResults::setSigmaCoord1Range(Distance minCoord1Dist, Distance maxCoord1Dist,
+                                            QString minCoord1PointId, QString maxCoord1PointId) {
+    m_minSigmaCoord1Distance = minCoord1Dist;
+    m_maxSigmaCoord1Distance = maxCoord1Dist;
+    m_minSigmaCoord1PointId  = minCoord1PointId;
+    m_maxSigmaCoord1PointId  = maxCoord1PointId;
   }
 
 
   /**
-   * Sets the min and max sigma longitude distances and point ids.
+   * Sets the min and max sigma distances and point ids for coordinate 2.
    *
    * @param minLonDist The new minimum sigma longitude distance.
    * @param maxLonDist The new maximum sigma longitude distance.
    * @param minLonPointId The new minimum sigma longitude point id.
    * @param maxLonPointId The new maximum sigma longitude point id.
    */
-  void BundleResults::setSigmaLongitudeRange(Distance minLonDist, Distance maxLonDist,
-                                             QString minLonPointId, QString maxLonPointId) {
-    m_minSigmaLongitudeDistance = minLonDist;
-    m_maxSigmaLongitudeDistance = maxLonDist;
-    m_minSigmaLongitudePointId  = minLonPointId;
-    m_maxSigmaLongitudePointId  = maxLonPointId;
+  void BundleResults::setSigmaCoord2Range(Distance minCoord2Dist, Distance maxCoord2Dist,
+                                             QString minCoord2PointId, QString maxCoord2PointId) {
+    m_minSigmaCoord2Distance = minCoord2Dist;
+    m_maxSigmaCoord2Distance = maxCoord2Dist;
+    m_minSigmaCoord2PointId  = minCoord2PointId;
+    m_maxSigmaCoord2PointId  = maxCoord2PointId;
   }
 
 
   /**
-   * Sets the min and max sigma radius distances and point ids.
+   * Sets the min and max sigma distances and point ids for coordinate 3.
    *
    * @param minRadDist The new minimum sigma radius distance.
    * @param maxRadDist The new maximum sigma radius distance.
    * @param minRadPointId The new minimum sigma radius point id.
    * @param maxRadPointId The new maximum sigma radius point id.
    */
-  void BundleResults::setSigmaRadiusRange(Distance minRadDist, Distance maxRadDist,
-                                          QString minRadPointId, QString maxRadPointId) {
-    m_minSigmaRadiusDistance = minRadDist;
-    m_maxSigmaRadiusDistance = maxRadDist;
-    m_minSigmaRadiusPointId  = minRadPointId;
-    m_maxSigmaRadiusPointId  = maxRadPointId;
+  void BundleResults::setSigmaCoord3Range(Distance minCoord3Dist, Distance maxCoord3Dist,
+                                          QString minCoord3PointId, QString maxCoord3PointId) {
+    m_minSigmaCoord3Distance = minCoord3Dist;
+    m_maxSigmaCoord3Distance = maxCoord3Dist;
+    m_minSigmaCoord3PointId  = minCoord3PointId;
+    m_maxSigmaCoord3PointId  = maxCoord3PointId;
   }
 
 
   /**
-   * Sets the root mean square values of the adjusted latitiude sigmas, adjusted longitude sigmas,
-   * and adjusted radius sigmas.
+   * Sets the root mean square values of the adjusted sigmas for all three coordinates.
    *
-   * @param rmsFromSigmaLatStats The new RMS value of the adjusted latitude sigmas.
-   * @param rmsFromSigmaLonStats The new RMS value of the adjusted longitude sigmas.
-   * @param rmsFromSigmaRadStats The new RMS value of the adjusted radius sigmas.
+   * @param rmsFromSigmaCoord1Stats The new RMS value of the adjusted coord1 sigmas.
+   * @param rmsFromSigmaCoord2Stats The new RMS value of the adjusted coord2 sigmas.
+   * @param rmsFromSigmaCoord3Stats The new RMS value of the adjusted coord3 sigmas.
    */
-  void BundleResults::setRmsFromSigmaStatistics(double rmsFromSigmaLatStats,
-                                                double rmsFromSigmaLonStats,
-                                                double rmsFromSigmaRadStats) {
-    m_rmsSigmaLatitudeStats = rmsFromSigmaLatStats;
-    m_rmsSigmaLongitudeStats = rmsFromSigmaLonStats;
-    m_rmsSigmaRadiusStats = rmsFromSigmaRadStats;
+  void BundleResults::setRmsFromSigmaStatistics(
+                                                double rmsFromSigmaCoord1Stats,
+                                                double rmsFromSigmaCoord2Stats,
+                                                double rmsFromSigmaCoord3Stats) {
+    m_rmsSigmaCoord1Stats = rmsFromSigmaCoord1Stats;
+    m_rmsSigmaCoord2Stats = rmsFromSigmaCoord2Stats;
+    m_rmsSigmaCoord3Stats = rmsFromSigmaCoord3Stats;
   }
 
 
@@ -808,16 +806,6 @@ namespace Isis {
   }
 
 
-  /**
-   * Sets the radians to meters conversion constant for the target body.
-   *
-   * @param rtm The (double) conversion factor.
-   */
-  void BundleResults::setRadiansToMeters(double rtm) {
-    m_radiansToMeters = rtm;
-  }
-
-
   /**
    * Sets if the bundle adjustment converged.
    *
@@ -962,152 +950,152 @@ namespace Isis {
 
 
   /**
-   * Returns the minimum sigma latitude distance.
+   * Returns the minimum sigma distance for coordinate 1.
    *
-   * @return @b Distance The minimum sigma latitude.
+   * @return @b Distance The minimum sigma for Coord1.
    */
-  Distance BundleResults::minSigmaLatitudeDistance() const {
-    return m_minSigmaLatitudeDistance;
+  Distance BundleResults::minSigmaCoord1Distance() const {
+    return m_minSigmaCoord1Distance;
   }
 
 
   /**
-   * Returns the maximum sigma latitude distance.
+   * Returns the maximum sigma distance for coordinate 1.
    *
-   * @return @b Distance The maximum sigma latitude.
+   * @return @b Distance The maximum sigma Coord1.
    */
-  Distance BundleResults::maxSigmaLatitudeDistance() const {
-    return m_maxSigmaLatitudeDistance;
+  Distance BundleResults::maxSigmaCoord1Distance() const {
+    return m_maxSigmaCoord1Distance;
   }
 
 
   /**
-   * Returns the minimum sigma longitude distance.
+   * Returns the minimum sigma distance for coordinate 2.
    *
-   * @return @b Distance The minimum sigma longitude.
+   * @return @b Distance The minimum sigma Coord2.
    */
-  Distance BundleResults::minSigmaLongitudeDistance() const {
-    return m_minSigmaLongitudeDistance;
+  Distance BundleResults::minSigmaCoord2Distance() const {
+    return m_minSigmaCoord2Distance;
   }
 
 
   /**
-   * Returns the maximum sigma longitude distance.
+   * Returns the maximum sigma distance for coordinate 2.
    *
-   * @return @b Distance The maximum sigma longitude.
+   * @return @b Distance The maximum sigma Coord2.
    */
-  Distance BundleResults::maxSigmaLongitudeDistance() const {
-    return m_maxSigmaLongitudeDistance;
+  Distance BundleResults::maxSigmaCoord2Distance() const {
+    return m_maxSigmaCoord2Distance;
   }
 
 
   /**
-   * Returns the minimum sigma redius distance.
+   * Returns the minimum sigma distance for coordinate 3.
    *
-   * @return @b Distance The minimum sigma redius.
+   * @return @b Distance The minimum sigma Coord3.
    */
-  Distance BundleResults::minSigmaRadiusDistance() const {
-    return m_minSigmaRadiusDistance;
+  Distance BundleResults::minSigmaCoord3Distance() const {
+    return m_minSigmaCoord3Distance;
   }
 
 
   /**
-   * Returns the maximum sigma redius distance.
+   * Returns the maximum sigma distance for coordinate 3.
    *
-   * @return @b Distance The maximum sigma radius.
+   * @return @b Distance The maximum sigma Coord3.
    */
-  Distance BundleResults::maxSigmaRadiusDistance() const {
-    return m_maxSigmaRadiusDistance;
+  Distance BundleResults::maxSigmaCoord3Distance() const {
+    return m_maxSigmaCoord3Distance;
   }
 
 
   /**
-   * Returns the minimum sigma latitude point id.
+   * Returns the minimum sigma point id for coordinate 1.
    *
-   * @return @b @QString The minimum sigma latitude point id.
+   * @return @b @QString The minimum sigma Coord1 point id.
    */
-  QString BundleResults::minSigmaLatitudePointId() const {
-    return m_minSigmaLatitudePointId;
+  QString BundleResults::minSigmaCoord1PointId() const {
+    return m_minSigmaCoord1PointId;
   }
 
 
   /**
-   * Returns the maximum sigma latitude point id.
+   * Returns the maximum sigma point id for coordinate 1.
    *
-   * @return @b @QString The maximum sigma latitude point id.
+   * @return @b @QString The maximum sigma Coord1 point id.
    */
-  QString BundleResults::maxSigmaLatitudePointId() const {
-    return m_maxSigmaLatitudePointId;
+  QString BundleResults::maxSigmaCoord1PointId() const {
+    return m_maxSigmaCoord1PointId;
   }
 
 
   /**
-   * Returns the minimum sigma longitude point id.
+   * Returns the minimum sigma point id for coordinate 2.
    *
    * @return @b @QString The minimum sigma longitude point id.
    */
-  QString BundleResults::minSigmaLongitudePointId() const {
-    return m_minSigmaLongitudePointId;
+  QString BundleResults::minSigmaCoord2PointId() const {
+    return m_minSigmaCoord2PointId;
   }
 
 
   /**
-   * Returns the maximum sigma longitude point id.
+   * Returns the maximum sigma point id for coordinate 2.
    *
-   * @return @b @QString The maximum sigma longitude point id.
+   * @return @b @QString The maximum sigma Coord2 point id.
    */
-  QString BundleResults::maxSigmaLongitudePointId() const {
-    return m_maxSigmaLongitudePointId;
+  QString BundleResults::maxSigmaCoord2PointId() const {
+    return m_maxSigmaCoord2PointId;
   }
 
 
   /**
-   * Returns the minimum sigma radius point id.
+   * Returns the minimum sigma point id for coordinate 3.
    *
-   * @return @b @QString The minimum sigma radius point id.
+   * @return @b @QString The minimum sigma Coord3 point id.
    */
-  QString BundleResults::minSigmaRadiusPointId() const {
-    return m_minSigmaRadiusPointId;
+  QString BundleResults::minSigmaCoord3PointId() const {
+    return m_minSigmaCoord3PointId;
   }
 
 
   /**
-   * Returns the maximum sigma radius point id.
+   * Returns the maximum sigma point id for coordinate 3.
    *
-   * @return @b @QString The maximum sigma radius point id.
+   * @return @b @QString The maximum sigma Coord3 point id.
    */
-  QString BundleResults::maxSigmaRadiusPointId() const {
-    return m_maxSigmaRadiusPointId;
+  QString BundleResults::maxSigmaCoord3PointId() const {
+    return m_maxSigmaCoord3PointId;
   }
 
 
   /**
-   * Returns the RMS of the adjusted latitude sigmas.
+   * Returns the RMS of the adjusted sigmas for coordinate 1.
    *
-   * @return @b double The RMS of the adjusted latitude sigmas.
+   * @return @b double The RMS of the adjusted Coord1 sigmas.
    */
-  double BundleResults::sigmaLatitudeStatisticsRms() const {
-    return m_rmsSigmaLatitudeStats;
+  double BundleResults::sigmaCoord1StatisticsRms() const {
+    return m_rmsSigmaCoord1Stats;
   }
 
 
   /**
-   * Returns the RMS of the adjusted longitude sigmas.
+   * Returns the RMS of the adjusted sigmas for coordinate 2.
    *
-   * @return @b double The RMS of the adjusted longitude sigmas.
+   * @return @b double The RMS of the adjusted Coord2 sigmas.
    */
-  double BundleResults::sigmaLongitudeStatisticsRms() const {
-    return m_rmsSigmaLongitudeStats;
+  double BundleResults::sigmaCoord2StatisticsRms() const {
+    return m_rmsSigmaCoord2Stats;
   }
 
 
   /**
-   * Returns the RMS of the adjusted raidus sigmas.
+   * Returns the RMS of the adjusted sigmas for coordinate 3.
    *
-   * @return @b double The RMS of the adjusted radius sigmas.
+   * @return @b double The RMS of the adjusted Coord3 sigmas.
    */
-  double BundleResults::sigmaRadiusStatisticsRms() const {
-    return m_rmsSigmaRadiusStats;
+  double BundleResults::sigmaCoord3StatisticsRms() const {
+    return m_rmsSigmaCoord3Stats;
   }
 
 
@@ -1151,16 +1139,6 @@ namespace Isis {
   }
 
 
-  /**
-   * Returns the radians to meters conversion factor for the target body.
-   *
-   * @return @b double The conversion factor.
-   */
-  double BundleResults::radiansToMeters() const {
-    return m_radiansToMeters;
-  }
-
-
   /**
    * Returns the number of observation that were rejected.
    *
@@ -1450,6 +1428,18 @@ namespace Isis {
   }
 
 
+  SurfacePoint::CoordinateType BundleResults::coordTypeReports() {
+    // Get the coordinate type from the output net if it exists.  Otherwise use the default.
+    SurfacePoint::CoordinateType type = SurfacePoint::Latitudinal;
+
+    if (m_outNet) {
+        type = outputControlNet()->GetCoordType();
+    }
+
+    return type;
+  }
+
+
   /**
    * Saves the BundleResults object to an XML file.
    *
@@ -1457,6 +1447,13 @@ namespace Isis {
    * @param project The project that the BundleResults object belongs to.
    */
   void BundleResults::save(QXmlStreamWriter &stream, const Project *project) const {
+    // Get the coordinate type from the output net if it exists.  Otherwise use the default.
+    SurfacePoint::CoordinateType coordType = SurfacePoint::Latitudinal;
+
+    if (m_outNet) {
+        coordType = outputControlNet()->GetCoordType();
+    }
+
     stream.writeStartElement("bundleResults");
     stream.writeStartElement("correlationMatrix");
     stream.writeAttribute("correlationFileName",
@@ -1506,9 +1503,23 @@ namespace Isis {
     stream.writeAttribute("xy", toString(rmsRxy()));
     stream.writeEndElement(); // end residuals element
     stream.writeStartElement("sigmas");
-    stream.writeAttribute("lat", toString(sigmaLatitudeStatisticsRms()));
-    stream.writeAttribute("lon", toString(sigmaLongitudeStatisticsRms()));
-    stream.writeAttribute("rad", toString(sigmaRadiusStatisticsRms()));
+
+    // Set the label based of the coordinate type set for reports
+    switch (coordType) {
+      case SurfacePoint::Latitudinal:
+        stream.writeAttribute("lat", toString(sigmaCoord1StatisticsRms()));
+        stream.writeAttribute("lon", toString(sigmaCoord2StatisticsRms()));
+        stream.writeAttribute("rad", toString(sigmaCoord3StatisticsRms()));
+        break;
+      case SurfacePoint::Rectangular:
+        stream.writeAttribute("x", toString(sigmaCoord1StatisticsRms()));
+        stream.writeAttribute("y", toString(sigmaCoord2StatisticsRms()));
+        stream.writeAttribute("z", toString(sigmaCoord3StatisticsRms()));
+        break;
+      default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(coordType) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
     stream.writeEndElement(); // end sigmas element
 
     stream.writeStartElement("imageResidualsLists");
@@ -1603,30 +1614,65 @@ namespace Isis {
     stream.writeEndElement(); // end elapsed time
 
     stream.writeStartElement("minMaxSigmas");
-    stream.writeStartElement("minLat");
-    stream.writeAttribute("value", toString(minSigmaLatitudeDistance().meters()));
-    stream.writeAttribute("pointId", minSigmaLatitudePointId());
-    stream.writeEndElement();
-    stream.writeStartElement("maxLat");
-    stream.writeAttribute("value", toString(maxSigmaLatitudeDistance().meters()));
-    stream.writeAttribute("pointId", maxSigmaLatitudePointId());
-    stream.writeEndElement();
-    stream.writeStartElement("minLon");
-    stream.writeAttribute("value", toString(minSigmaLongitudeDistance().meters()));
-    stream.writeAttribute("pointId", minSigmaLongitudePointId());
-    stream.writeEndElement();
-    stream.writeStartElement("maxLon");
-    stream.writeAttribute("value", toString(maxSigmaLongitudeDistance().meters()));
-    stream.writeAttribute("pointId", maxSigmaLongitudePointId());
-    stream.writeEndElement();
-    stream.writeStartElement("minRad");
-    stream.writeAttribute("value", toString(minSigmaRadiusDistance().meters()));
-    stream.writeAttribute("pointId", minSigmaRadiusPointId());
-    stream.writeEndElement();
-    stream.writeStartElement("maxRad");
-    stream.writeAttribute("value", toString(maxSigmaRadiusDistance().meters()));
-    stream.writeAttribute("pointId", maxSigmaRadiusPointId());
-    stream.writeEndElement();
+
+    // Write the labels corresponding to the coordinate type set for reports
+    switch (coordType) {
+      case SurfacePoint::Latitudinal:
+        stream.writeStartElement("minLat");
+        stream.writeAttribute("value", toString(minSigmaCoord1Distance().meters()));
+        stream.writeAttribute("pointId", minSigmaCoord1PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("maxLat");
+        stream.writeAttribute("value", toString(maxSigmaCoord1Distance().meters()));
+        stream.writeAttribute("pointId", maxSigmaCoord1PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("minLon");
+        stream.writeAttribute("value", toString(minSigmaCoord2Distance().meters()));
+        stream.writeAttribute("pointId", minSigmaCoord2PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("maxLon");
+        stream.writeAttribute("value", toString(maxSigmaCoord2Distance().meters()));
+        stream.writeAttribute("pointId", maxSigmaCoord2PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("minRad");
+        stream.writeAttribute("value", toString(minSigmaCoord3Distance().meters()));
+        stream.writeAttribute("pointId", minSigmaCoord3PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("maxRad");
+        stream.writeAttribute("value", toString(maxSigmaCoord3Distance().meters()));
+        stream.writeAttribute("pointId", maxSigmaCoord3PointId());
+        stream.writeEndElement();
+        break;
+      case SurfacePoint::Rectangular:
+        stream.writeStartElement("minX");
+        stream.writeAttribute("value", toString(minSigmaCoord1Distance().meters()));
+        stream.writeAttribute("pointId", minSigmaCoord1PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("maxX");
+        stream.writeAttribute("value", toString(maxSigmaCoord1Distance().meters()));
+        stream.writeAttribute("pointId", maxSigmaCoord1PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("minY");
+        stream.writeAttribute("value", toString(minSigmaCoord2Distance().meters()));
+        stream.writeAttribute("pointId", minSigmaCoord2PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("maxY");
+        stream.writeAttribute("value", toString(maxSigmaCoord2Distance().meters()));
+        stream.writeAttribute("pointId", maxSigmaCoord2PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("minZ");
+        stream.writeAttribute("value", toString(minSigmaCoord3Distance().meters()));
+        stream.writeAttribute("pointId", minSigmaCoord3PointId());
+        stream.writeEndElement();
+        stream.writeStartElement("maxZ");
+        stream.writeAttribute("value", toString(maxSigmaCoord3Distance().meters()));
+        stream.writeAttribute("pointId", maxSigmaCoord3PointId());
+        stream.writeEndElement();
+        break;
+      default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(coordType) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
     stream.writeEndElement(); // end minMaxSigmas
 
     // call max likelihood setup from startElement to fill the rest of these values...
@@ -1764,17 +1810,27 @@ namespace Isis {
       else if (qName == "sigmas") {
         QString lat = atts.value("lat");
         if (!lat.isEmpty()) {
-          m_xmlHandlerBundleResults->m_rmsSigmaLatitudeStats = toDouble(lat);
+          m_xmlHandlerBundleResults->m_rmsSigmaCoord1Stats = toDouble(lat);
         }
-
         QString lon = atts.value("lon");
         if (!lon.isEmpty()) {
-          m_xmlHandlerBundleResults->m_rmsSigmaLongitudeStats = toDouble(lon);
+          m_xmlHandlerBundleResults->m_rmsSigmaCoord2Stats = toDouble(lon);
         }
-
         QString rad = atts.value("rad");
         if (!rad.isEmpty()) {
-          m_xmlHandlerBundleResults->m_rmsSigmaRadiusStats = toDouble(rad);
+          m_xmlHandlerBundleResults->m_rmsSigmaCoord3Stats = toDouble(rad);
+        }
+        QString x = atts.value("x");
+        if (!x.isEmpty()) {
+          m_xmlHandlerBundleResults->m_rmsSigmaCoord1Stats = toDouble(x);
+        }
+        QString y = atts.value("y");
+        if (!y.isEmpty()) {
+          m_xmlHandlerBundleResults->m_rmsSigmaCoord2Stats = toDouble(y);
+        }
+        QString z = atts.value("z");
+        if (!z.isEmpty()) {
+          m_xmlHandlerBundleResults->m_rmsSigmaCoord3Stats = toDouble(z);
         }
       }
       else if (qName == "residualsList") {
@@ -1860,68 +1916,153 @@ namespace Isis {
       else if (qName == "minLat") {
         QString minLat = atts.value("value");
         if (!minLat.isEmpty()) {
-          m_xmlHandlerBundleResults->m_minSigmaLatitudeDistance.setMeters(toDouble(minLat));
+          m_xmlHandlerBundleResults->m_minSigmaCoord1Distance.setMeters(toDouble(minLat));
         }
 
         QString minLatPointId = atts.value("pointId");
         if (!minLatPointId.isEmpty()) {
-          m_xmlHandlerBundleResults->m_minSigmaLatitudePointId = minLatPointId;
+          m_xmlHandlerBundleResults->m_minSigmaCoord1PointId = minLatPointId;
+        }
+
+      }
+      else if (qName == "minX") {
+        QString minX = atts.value("value");
+        if (!minX.isEmpty()) {
+          m_xmlHandlerBundleResults->m_minSigmaCoord1Distance.setMeters(toDouble(minX));
+        }
+
+        QString minXPointId = atts.value("pointId");
+        if (!minXPointId.isEmpty()) {
+          m_xmlHandlerBundleResults->m_minSigmaCoord1PointId = minXPointId;
         }
       }
       else if (qName == "maxLat") {
         QString maxLat = atts.value("value");
         if (!maxLat.isEmpty()) {
-          m_xmlHandlerBundleResults->m_maxSigmaLatitudeDistance.setMeters(toDouble(maxLat));
+          m_xmlHandlerBundleResults->m_maxSigmaCoord1Distance.setMeters(toDouble(maxLat));
         }
 
         QString maxLatPointId = atts.value("pointId");
         if (!maxLatPointId.isEmpty()) {
-          m_xmlHandlerBundleResults->m_maxSigmaLatitudePointId = maxLatPointId;
+          m_xmlHandlerBundleResults->m_maxSigmaCoord1PointId = maxLatPointId;
         }
+
+      }
+      else if (qName == "maxX") {
+
+        QString maxX = atts.value("value");
+        if (!maxX.isEmpty()) {
+          m_xmlHandlerBundleResults->m_maxSigmaCoord1Distance.setMeters(toDouble(maxX));
+        }
+
+        QString maxXPointId = atts.value("pointId");
+        if (!maxXPointId.isEmpty()) {
+          m_xmlHandlerBundleResults->m_maxSigmaCoord1PointId = maxXPointId;
+        }
+
       }
       else if (qName == "minLon") {
+
         QString minLon = atts.value("value");
         if (!minLon.isEmpty()) {
-          m_xmlHandlerBundleResults->m_minSigmaLongitudeDistance.setMeters(toDouble(minLon));
+          m_xmlHandlerBundleResults->m_minSigmaCoord2Distance.setMeters(toDouble(minLon));
         }
 
         QString minLonPointId = atts.value("pointId");
         if (!minLonPointId.isEmpty()) {
-          m_xmlHandlerBundleResults->m_minSigmaLongitudePointId = minLonPointId;
+          m_xmlHandlerBundleResults->m_minSigmaCoord2PointId = minLonPointId;
+        }
+
+      }
+      else if (qName == "minY") {
+
+        QString minY = atts.value("value");
+        if (!minY.isEmpty()) {
+          m_xmlHandlerBundleResults->m_minSigmaCoord2Distance.setMeters(toDouble(minY));
+        }
+
+        QString minYPointId = atts.value("pointId");
+        if (!minYPointId.isEmpty()) {
+          m_xmlHandlerBundleResults->m_minSigmaCoord2PointId = minYPointId;
         }
+
       }
       else if (qName == "maxLon") {
+
         QString maxLon = atts.value("value");
         if (!maxLon.isEmpty()) {
-          m_xmlHandlerBundleResults->m_maxSigmaLongitudeDistance.setMeters(toDouble(maxLon));
+          m_xmlHandlerBundleResults->m_maxSigmaCoord2Distance.setMeters(toDouble(maxLon));
         }
 
         QString maxLonPointId = atts.value("pointId");
         if (!maxLonPointId.isEmpty()) {
-          m_xmlHandlerBundleResults->m_maxSigmaLongitudePointId = maxLonPointId;
+          m_xmlHandlerBundleResults->m_maxSigmaCoord2PointId = maxLonPointId;
+        }
+
+      }
+      else if (qName == "maxY") {
+        QString maxY = atts.value("value");
+        if (!maxY.isEmpty()) {
+          m_xmlHandlerBundleResults->m_maxSigmaCoord2Distance.setMeters(toDouble(maxY));
+        }
+
+        QString maxYPointId = atts.value("pointId");
+        if (!maxYPointId.isEmpty()) {
+          m_xmlHandlerBundleResults->m_maxSigmaCoord2PointId = maxYPointId;
         }
+
       }
       else if (qName == "minRad") {
+
         QString minRad = atts.value("value");
         if (!minRad.isEmpty()) {
-          m_xmlHandlerBundleResults->m_minSigmaRadiusDistance.setMeters(toDouble(minRad));
+          m_xmlHandlerBundleResults->m_minSigmaCoord3Distance.setMeters(toDouble(minRad));
         }
 
         QString minRadPointId = atts.value("pointId");
         if (!minRadPointId.isEmpty()) {
-          m_xmlHandlerBundleResults->m_minSigmaRadiusPointId = minRadPointId;
+          m_xmlHandlerBundleResults->m_minSigmaCoord3PointId = minRadPointId;
+        }
+
+      }
+      else if (qName == "minZ") {
+
+        QString minZ = atts.value("value");
+        if (!minZ.isEmpty()) {
+          m_xmlHandlerBundleResults->m_minSigmaCoord3Distance.setMeters(toDouble(minZ));
+        }
+
+        QString minZPointId = atts.value("pointId");
+        if (!minZPointId.isEmpty()) {
+          m_xmlHandlerBundleResults->m_minSigmaCoord3PointId = minZPointId;
         }
+
       }
       else if (qName == "maxRad") {
+
         QString maxRad = atts.value("value");
         if (!maxRad.isEmpty()) {
-          m_xmlHandlerBundleResults->m_maxSigmaRadiusDistance.setMeters(toDouble(maxRad));
+          m_xmlHandlerBundleResults->m_maxSigmaCoord3Distance.setMeters(toDouble(maxRad));
         }
 
         QString maxRadPointId = atts.value("pointId");
         if (!maxRadPointId.isEmpty()) {
-          m_xmlHandlerBundleResults->m_maxSigmaRadiusPointId = maxRadPointId;
+          m_xmlHandlerBundleResults->m_maxSigmaCoord3PointId = maxRadPointId;
         }
+
+      }
+      else if (qName == "maxZ") {
+
+        QString maxZ = atts.value("value");
+        if (!maxZ.isEmpty()) {
+          m_xmlHandlerBundleResults->m_maxSigmaCoord3Distance.setMeters(toDouble(maxZ));
+        }
+
+        QString maxZPointId = atts.value("pointId");
+        if (!maxZPointId.isEmpty()) {
+          m_xmlHandlerBundleResults->m_maxSigmaCoord3PointId = maxZPointId;
+        }
+
       }
       else if (qName == "maximumLikelihoodEstimation") {
         QString maximumLikelihoodIndex = atts.value("maximumLikelihoodIndex");
diff --git a/isis/src/control/objs/BundleResults/BundleResults.h b/isis/src/control/objs/BundleResults/BundleResults.h
index 2aa943e0f7659766c434be486ef8ddff46078a7c..3fd2b27e0d44521cff2bd937b00a9770308b87ab 100644
--- a/isis/src/control/objs/BundleResults/BundleResults.h
+++ b/isis/src/control/objs/BundleResults/BundleResults.h
@@ -39,6 +39,7 @@
 #include "MaximumLikelihoodWFunctions.h"
 #include "PvlObject.h"
 #include "Statistics.h" // ???
+#include "SurfacePoint.h"
 #include "XmlStackedHandler.h"
 
 // Qt Library
@@ -84,6 +85,13 @@ namespace Isis {
    *   @history 2017-04-24 Ian Humphrey - Removed pvlObject() method. Commented out m_id serialization
    *                           for save() (causes segfault in unit test for empty xml). Fixes #4797.
    *   @history 2017-04-27 J Bonn - Updated serialization code and tests.
+   *   @history 2017-05-30 Debbie A. Cook - Corrected class names in method comments and generalized 
+   *                            control point coordinate names.  Methods changed:  copy constructor, 
+   *                            assignment operator, initialize,  Also added access methods for coordinate types.
+   *                            References #4649 and #501.
+   *   @history 2018-09-30 Debbie A. Cook - Removed methods setRadiansToMeters and 
+   *                            radiansToMeters and member variable m_radiansToMeters.  References #4649 
+   *                            and #501.
    */
   class BundleResults : public QObject {
     Q_OBJECT
@@ -104,15 +112,15 @@ namespace Isis {
       void setRmsImageResidualLists(QVector<Statistics> rmsImageLineResiduals,
                                     QVector<Statistics> rmsImageSampleResiduals,
                                     QVector<Statistics> rmsImageResiduals);
-      void setSigmaLatitudeRange(Distance minLatDist, Distance maxLatDist,
-                                 QString minLatPointId, QString maxLatPointId);
-      void setSigmaLongitudeRange(Distance minLonDist, Distance maxLonDist,
-                                  QString minLonPointId, QString maxLonPointId);
-      void setSigmaRadiusRange(Distance minRadDist, Distance maxRadDist,
-                               QString minRadPointId, QString maxRadPointId);
-      void setRmsFromSigmaStatistics(double rmsFromSigmaLatStats,
-                                     double rmsFromSigmaLonStats,
-                                     double rmsFromSigmaRadStats);
+      void setSigmaCoord1Range(Distance minCoord1Dist, Distance maxCoord1Dist,
+                                 QString minCoord1PointId, QString maxCoord1PointId);
+      void setSigmaCoord2Range(Distance minCoord2Dist, Distance maxCoord2Dist,
+                                  QString minCoord2PointId, QString maxCoord2PointId);
+      void setSigmaCoord3Range(Distance minCoord3Dist, Distance maxCoord3Dist,
+                               QString minCoord3PointId, QString maxCoord3PointId);
+      void setRmsFromSigmaStatistics(double rmsFromSigmaCoord1Stats,
+                                     double rmsFromSigmaCoord2Stats,
+                                     double rmsFromSigmaCoord3Stats);
       void maximumLikelihoodSetUp(
           QList< QPair< MaximumLikelihoodWFunctions::Model, double > > modelsWithQuantiles);
       void printMaximumLikelihoodTierInformation();
@@ -165,7 +173,6 @@ namespace Isis {
       void setSigma0(double sigma0);
       void setElapsedTime(double time);
       void setElapsedTimeErrorProp(double time);
-      void setRadiansToMeters(double rtm);
       void setConverged(bool converged); // or initialze method
       void setBundleControlPoints(QVector<BundleControlPointQsp> controlPoints);
       void setOutputControlNet(ControlNetQsp outNet);
@@ -182,26 +189,30 @@ namespace Isis {
       QVector<Statistics> rmsImageRASigmas() const;      // currently unused ???
       QVector<Statistics> rmsImageDECSigmas() const;     // currently unused ???
       QVector<Statistics> rmsImageTWISTSigmas() const;   // currently unused ???
-      Distance minSigmaLatitudeDistance() const;
-      Distance maxSigmaLatitudeDistance() const;
-      Distance minSigmaLongitudeDistance() const;
-      Distance maxSigmaLongitudeDistance() const;
-      Distance minSigmaRadiusDistance() const;
-      Distance maxSigmaRadiusDistance() const;
-      QString maxSigmaLatitudePointId() const;
-      QString minSigmaLatitudePointId() const;
-      QString minSigmaLongitudePointId() const;
-      QString maxSigmaLongitudePointId() const;
-      QString minSigmaRadiusPointId() const;
-      QString maxSigmaRadiusPointId() const;
-      double sigmaLatitudeStatisticsRms() const;
-      double sigmaLongitudeStatisticsRms() const;
-      double sigmaRadiusStatisticsRms() const;
+      // *** TODO *** Will we ever want to request a specific coordinate type?
+      //   (Lat or X) or just whatever is the designated type?
+      SurfacePoint::CoordinateType coordTypeReports();
+
+      Distance minSigmaCoord1Distance() const;
+      Distance maxSigmaCoord1Distance() const;
+      Distance minSigmaCoord2Distance() const;
+      Distance maxSigmaCoord2Distance() const;
+      Distance minSigmaCoord3Distance() const;
+      Distance maxSigmaCoord3Distance() const;
+      QString maxSigmaCoord1PointId() const;
+      QString minSigmaCoord1PointId() const;
+      QString minSigmaCoord2PointId() const;
+      QString maxSigmaCoord2PointId() const;
+      QString minSigmaCoord3PointId() const;
+      QString maxSigmaCoord3PointId() const;
+      double sigmaCoord1StatisticsRms() const;
+      double sigmaCoord2StatisticsRms() const;
+      double sigmaCoord3StatisticsRms() const;
+      
       double rmsRx() const;  // currently unused ???
       double rmsRy() const;  // currently unused ???
       double rmsRxy() const; // currently unused ???
       double rejectionLimit() const;
-      double radiansToMeters() const;
       int numberRejectedObservations() const;
       int numberObservations() const;
 
@@ -289,7 +300,6 @@ namespace Isis {
 
       CorrelationMatrix *m_correlationMatrix; //!< The correlation matrix from the BundleAdjust.
 
-
       int m_numberFixedPoints;                //!< number of 'fixed' (ground) points (define)
       // Currently set but unused
       int m_numberIgnoredPoints;              //!< number of ignored points
@@ -313,11 +323,10 @@ namespace Isis {
       double m_sigma0;                         //!< std deviation of unit weight
       double m_elapsedTime;                    //!< elapsed time for bundle
       double m_elapsedTimeErrorProp;           //!< elapsed time for error propagation
-      double m_radiansToMeters;                //!< radian to meters conversion factor for the body
       bool m_converged;
-
+      
       // Variables for output methods in BundleSolutionInfo
-
+      
       QVector<BundleControlPointQsp> m_bundleControlPoints; /**< The vector of BundleControlPoints
                                                                  from BundleAdjust.  Equivalent to
                                                                  the output control net minus
@@ -358,23 +367,23 @@ namespace Isis {
       //!< The root mean square image twist sigmas.
       QVector<Statistics> m_rmsImageTWISTSigmas; // unset and unused ???
 
-      Distance m_minSigmaLatitudeDistance;  //!< The minimum sigma latitude distance.
-      Distance m_maxSigmaLatitudeDistance;  //!< The maximum sigma latitude distance.
-      Distance m_minSigmaLongitudeDistance; //!< The minimum sigma longitude distance.
-      Distance m_maxSigmaLongitudeDistance; //!< The maximum sigma longitude distance.
-      Distance m_minSigmaRadiusDistance;    //!< The minimum sigma radius distance.
-      Distance m_maxSigmaRadiusDistance;    //!< The maximum sigma radius distance.
-
-      QString m_minSigmaLatitudePointId;    //!< The minimum sigma latitude point id.
-      QString m_maxSigmaLatitudePointId;    //!< The maximum sigma latitude point id.
-      QString m_minSigmaLongitudePointId;   //!< The minimum sigma longitude point id.
-      QString m_maxSigmaLongitudePointId;   //!< The maximum sigma longitude point id.
-      QString m_minSigmaRadiusPointId;      //!< The minimum sigma radius point id.
-      QString m_maxSigmaRadiusPointId;      //!< The maximum sigma radius point id.
-
-      double m_rmsSigmaLatitudeStats;       //!< rms of adjusted Latitude sigmas
-      double m_rmsSigmaLongitudeStats;      //!< rms of adjusted Longitude sigmas
-      double m_rmsSigmaRadiusStats;         //!< rms of adjusted Radius sigmas
+      Distance m_minSigmaCoord1Distance;  //!< The minimum sigma latitude distance.
+      Distance m_maxSigmaCoord1Distance;  //!< The maximum sigma latitude distance.
+      Distance m_minSigmaCoord2Distance; //!< The minimum sigma longitude distance.
+      Distance m_maxSigmaCoord2Distance; //!< The maximum sigma longitude distance.
+      Distance m_minSigmaCoord3Distance;    //!< The minimum sigma radius distance.
+      Distance m_maxSigmaCoord3Distance;    //!< The maximum sigma radius distance.
+
+      QString m_minSigmaCoord1PointId;    //!< The minimum sigma coordinate 1 point id.
+      QString m_maxSigmaCoord1PointId;    //!< The maximum sigma coordinate 1 point id.
+      QString m_minSigmaCoord2PointId;   //!< The minimum sigma coordinate 2 point id.
+      QString m_maxSigmaCoord2PointId;   //!< The maximum sigma coordinate2 point id.
+      QString m_minSigmaCoord3PointId;      //!< The minimum sigma coordinate 3 point id.
+      QString m_maxSigmaCoord3PointId;      //!< The maximum sigma coordinate 3 point id.
+
+      double m_rmsSigmaCoord1Stats;       //!< rms of adjusted Latitude sigmas
+      double m_rmsSigmaCoord2Stats;      //!< rms of adjusted Longitude sigmas
+      double m_rmsSigmaCoord3Stats;         //!< rms of adjusted Radius sigmas
 
       //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       // variables for maximum likelihood estimation
diff --git a/isis/src/control/objs/BundleResults/BundleResults.truth b/isis/src/control/objs/BundleResults/BundleResults.truth
index bd039dce5fadf9d7efb56ba710de65c385db6c5b..35d9aba939258c8a5776d0b5467485b7f2e3beb6 100644
--- a/isis/src/control/objs/BundleResults/BundleResults.truth
+++ b/isis/src/control/objs/BundleResults/BundleResults.truth
@@ -429,7 +429,142 @@ Testing XML: Object deserialized as (should match object above):
 </bundleResults> 
 
 
+Testing rectangular coordinate type in control net and settings
+
+bundle control points...
+       FreePoint           FREE    1 of 1  3.54            Null            Null            Null             N/A             N/A             N/A
+
+      FixedPoint          FIXED    0 of 0  0.00     -0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
+
+
+Testing XML serialization for a rectangular net 1: round trip serialization of fully populated BundleSettings object...
+Serializing test XML object to file...
+
+<bundleResults>
+    <correlationMatrix correlationFileName="covariance.dat" covarianceFileName="covariance.dat">
+        <imagesAndParameters>
+            <image id="img1">
+                <parameter>param1</parameter>
+                <parameter>param2</parameter>
+            </image>
+            <image id="img2">
+                <parameter>param3</parameter>
+                <parameter>param4</parameter>
+                <parameter>param5</parameter>
+            </image>
+        </imagesAndParameters>
+    </correlationMatrix>
+    <generalStatisticsValues>
+        <numberFixedPoints>1</numberFixedPoints>
+        <numberIgnoredPoints>1</numberIgnoredPoints>
+        <numberHeldImages>1</numberHeldImages>
+        <rejectionLimit>7.0</rejectionLimit>
+        <numberRejectedObservations>8</numberRejectedObservations>
+        <numberObservations>9</numberObservations>
+        <numberImageParameters>10</numberImageParameters>
+        <numberConstrainedPointParameters>11</numberConstrainedPointParameters>
+        <numberConstrainedImageParameters>10</numberConstrainedImageParameters>
+        <numberConstrainedTargetParameters>2</numberConstrainedTargetParameters>
+        <numberUnknownParameters>32</numberUnknownParameters>
+        <degreesOfFreedom>0</degreesOfFreedom>
+        <sigma0>0.0</sigma0>
+        <converged>Yes</converged>
+    </generalStatisticsValues>
+    <rms>
+        <residuals x="4.0" y="5.0" xy="6.0"/>
+        <sigmas x="0.123" y="0.456" z="0.789"/>
+        <imageResidualsLists>
+            <residualsList listSize="3">
+                <statisticsItem>
+                    
+                </statisticsItem>
+            </twistSigmas>
+        </imageSigmasLists>
+    </rms>
+    <elapsedTime time="16.0" errorProp="17.0"/>
+    <minMaxSigmas>
+        <minX value="0.5" pointId="MinLatId"/>
+        <maxX value="89.6" pointId="MaxLatId"/>
+        <minY value="0.7" pointId="MinLonId"/>
+        <maxY value="179.2" pointId="MaxLonId"/>
+        <minZ value="0.9" pointId="MinRadId"/>
+        <maxZ value="354.4" pointId="MaxRadId"/>
+    </minMaxSigmas>
+    <maximumLikelihoodEstimation numberModels="3" maximumLikelihoodIndex="4" maximumLikelihoodMedianR2Residuals="0.49504950495049">
+        <cumulativeProbabilityCalculator/>
+        <residualsCumulativeProbabilityCalculator/>
+        <model modelNumber="1" modelSelection="Huber" tweakingConstant="0.099009900990099" quantile="0.1"/>
+        <model modelNumber="2" modelSelection="Welsch" tweakingConstant="0.1980198019802" quantile="0.2"/>
+        <model modelNumber="3" modelSelection="Chen" tweakingConstant="0.2970297029703" quantile="0.3"/>
+    </maximumLikelihoodEstimation>
+</bundleResults> 
+
+
+Testing rectangular XML: reading serialized BundleResults back in...
+Testing rectangular XML: Object deserialized as (should match object above):
+
+<bundleResults>
+    <correlationMatrix correlationFileName="covariance.dat" covarianceFileName="covariance.dat">
+        <imagesAndParameters>
+            <image id="img1">
+                <parameter>param1</parameter>
+                <parameter>param2</parameter>
+            </image>
+            <image id="img2">
+                <parameter>param3</parameter>
+                <parameter>param4</parameter>
+                <parameter>param5</parameter>
+            </image>
+        </imagesAndParameters>
+    </correlationMatrix>
+    <generalStatisticsValues>
+        <numberFixedPoints>1</numberFixedPoints>
+        <numberIgnoredPoints>1</numberIgnoredPoints>
+        <numberHeldImages>1</numberHeldImages>
+        <rejectionLimit>7.0</rejectionLimit>
+        <numberRejectedObservations>8</numberRejectedObservations>
+        <numberObservations>9</numberObservations>
+        <numberImageParameters>10</numberImageParameters>
+        <numberConstrainedPointParameters>11</numberConstrainedPointParameters>
+        <numberConstrainedImageParameters>10</numberConstrainedImageParameters>
+        <numberConstrainedTargetParameters>2</numberConstrainedTargetParameters>
+        <numberUnknownParameters>32</numberUnknownParameters>
+        <degreesOfFreedom>0</degreesOfFreedom>
+        <sigma0>0.0</sigma0>
+        <converged>Yes</converged>
+    </generalStatisticsValues>
+    <rms>
+        <residuals x="4.0" y="5.0" xy="6.0"/>
+        <sigmas x="0.123" y="0.456" z="0.789"/>
+        <imageResidualsLists>
+            <residualsList listSize="3">
+                <statisticsItem>
+                    
+                </statisticsItem>
+            </twistSigmas>
+        </imageSigmasLists>
+    </rms>
+    <elapsedTime time="16.0" errorProp="17.0"/>
+    <minMaxSigmas>
+        <minX value="0.5" pointId="MinLatId"/>
+        <maxX value="89.6" pointId="MaxLatId"/>
+        <minY value="0.7" pointId="MinLonId"/>
+        <maxY value="179.2" pointId="MaxLonId"/>
+        <minZ value="0.9" pointId="MinRadId"/>
+        <maxZ value="354.4" pointId="MaxRadId"/>
+    </minMaxSigmas>
+    <maximumLikelihoodEstimation numberModels="3" maximumLikelihoodIndex="4" maximumLikelihoodMedianR2Residuals="0.49504950495049">
+        <cumulativeProbabilityCalculator/>
+        <residualsCumulativeProbabilityCalculator/>
+        <model modelNumber="1" modelSelection="Huber" tweakingConstant="0.099009900990099" quantile="0.1"/>
+        <model modelNumber="2" modelSelection="Welsch" tweakingConstant="0.1980198019802" quantile="0.2"/>
+        <model modelNumber="3" modelSelection="Chen" tweakingConstant="0.2970297029703" quantile="0.3"/>
+    </maximumLikelihoodEstimation>
+</bundleResults> 
+
+
 Testing error throws...
 **I/O ERROR** Computed degrees of freedom [-1] is invalid.
 **I/O ERROR** Computed degrees of freedom [0] is invalid.
 **PROGRAMMER ERROR** Output Control Network has not been set.
+**PROGRAMMER ERROR** Unknown surface point coordinate type enum [-1].
diff --git a/isis/src/control/objs/BundleResults/unitTest.cpp b/isis/src/control/objs/BundleResults/unitTest.cpp
index 79a99c157511a6bbfb5dc13e060bfc1df897f423..3c45479843ae3f3664dcb8671e8820577d9bd7b2 100755
--- a/isis/src/control/objs/BundleResults/unitTest.cpp
+++ b/isis/src/control/objs/BundleResults/unitTest.cpp
@@ -157,15 +157,16 @@ int main(int argc, char *argv[]) {
     results.setRmsImageResidualLists(rmsImageLineResiduals,
                                      rmsImageSampleResiduals,
                                      rmsImageResiduals);
-    results.setSigmaLatitudeRange(Distance(0.5, Distance::Meters),
+    results.setSigmaCoord1Range(Distance(0.5, Distance::Meters),
                                   Distance(89.6, Distance::Meters),
                                   "MinLatId", "MaxLatId");
-    results.setSigmaLongitudeRange(Distance(0.7, Distance::Meters),
+    results.setSigmaCoord2Range(Distance(0.7, Distance::Meters),
                                   Distance(179.2, Distance::Meters),
                                   "MinLonId", "MaxLonId");
-    results.setSigmaRadiusRange(Distance(0.9, Distance::Meters),
+    results.setSigmaCoord3Range(Distance(0.9, Distance::Meters),
                                 Distance(354.4, Distance::Meters),
                                 "MinRadId", "MaxRadId");
+
     results.setRmsFromSigmaStatistics(0.123, 0.456, 0.789);
     results.setRmsXYResiduals(4.0, 5.0, 6.0);
     results.setRejectionLimit(7.0);
@@ -187,7 +188,6 @@ int main(int argc, char *argv[]) {
     results.incrementFixedPoints();
     results.incrementHeldImages();
     results.incrementIgnoredPoints();
-    results.setRadiansToMeters(23.68);
     results.setIterations(6);
     printXml(results);
     qDebug() << "";
@@ -207,6 +207,7 @@ int main(int argc, char *argv[]) {
     imgsAndParams.insert("img1", list1);
     imgsAndParams.insert("img2", list2);
     results.setCorrMatImgsAndParams(imgsAndParams);
+    copyResults = results;
     qDebug() << "";
 
     qDebug() << "Testing storage for output methods...";
@@ -230,8 +231,11 @@ int main(int argc, char *argv[]) {
     ControlNet outNet;
     outNet.AddPoint(freePoint);
     outNet.AddPoint(fixedPoint);
-    BundleControlPointQsp freeBundleControlPoint(new BundleControlPoint(freePoint));
-    BundleControlPointQsp fixedBundleControlPoint(new BundleControlPoint(fixedPoint));
+    BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings());
+    BundleControlPointQsp freeBundleControlPoint(
+                                     new BundleControlPoint(settings, freePoint));
+    BundleControlPointQsp fixedBundleControlPoint(
+                                     new BundleControlPoint(settings, fixedPoint));
     QVector<BundleControlPointQsp> bundleControlPointVector;
     bundleControlPointVector.append(freeBundleControlPoint);
     bundleControlPointVector.append(fixedBundleControlPoint);
@@ -310,6 +314,58 @@ int main(int argc, char *argv[]) {
     printXml(bsFromXml);
 
 
+    qDebug() << "Testing rectangular coordinate type in control net and settings";
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::Rectangular,
+                              SurfacePoint::Rectangular);
+    // outNetRect.SetCoordType(SurfacePoint::Rectangular);
+    outNet.SetCoordType(SurfacePoint::Rectangular);
+    BundleControlPointQsp freeRBundleControlPoint(
+                                     new BundleControlPoint(settings, freePoint));
+    BundleControlPointQsp fixedRBundleControlPoint(
+                                     new BundleControlPoint(settings, fixedPoint));
+    QVector<BundleControlPointQsp> bundleControlPointVectorR;
+    bundleControlPointVectorR.append(freeRBundleControlPoint);
+    bundleControlPointVectorR.append(fixedRBundleControlPoint);
+    copyResults.setBundleControlPoints(bundleControlPointVectorR);
+    copyResults.setOutputControlNet(ControlNetQsp(new ControlNet(outNet)));
+    copyResults.setObservations(observationVector);
+    qDebug() << "";
+
+    qDebug() << "bundle control points...";
+    accessedControlPoints = copyResults.bundleControlPoints();
+    for (int i = 0; i < accessedControlPoints.size(); i++) {
+      qDebug().noquote() << accessedControlPoints[i]->formatBundleOutputSummaryString(false);
+    }
+
+    qDebug() << "";
+
+    qDebug() << "Testing XML serialization for a rectangular net 1: round trip serialization of fully populated BundleSettings object...";
+    qDebug() << "Serializing test XML object to file...";
+    printXml(copyResults);
+    FileName xmlFileR("./BundleResultsR.xml");
+    xmlPath = xmlFileR.expanded();
+    QFile qXmlFileR(xmlPath);
+    if (!qXmlFileR.open(QIODevice::WriteOnly|QIODevice::Text)) {
+      throw IException(IException::Io,
+                       QString("Unable to open xml file, [%1],  with write access").arg(xmlPath),
+                       _FILEINFO_);
+    }
+    QXmlStreamWriter writerR(&qXmlFileR);
+    writerR.setAutoFormatting(true);
+    writerR.writeStartDocument();
+    project = NULL;
+    copyResults.save(writerR, project);
+    writerR.writeEndDocument();
+    qXmlFileR.close();
+
+    qDebug() << "Testing rectangular XML: reading serialized BundleResults back in...";
+    BundleResultsXmlHandlerTester bsRectFromXml(project, &reader, xmlFileR);
+    // Set the output control net in bsRectFromXml in order to get the desired coordinate type
+    bsRectFromXml.setOutputControlNet(ControlNetQsp(new ControlNet(outNet)));
+    qDebug() << "Testing rectangular XML: Object deserialized as (should match object above):";
+    printXml(bsRectFromXml);
+
+
     qDebug() << "Testing error throws...";
     try {
       results.setNumberObservations(0);
@@ -334,8 +390,16 @@ int main(int argc, char *argv[]) {
       e.print();
     }
     try {
-      BundleResults defaultResaults;
-      defaultResaults.outputControlNet();
+      BundleResults defaultResults;
+      defaultResults.outputControlNet();
+    }
+    catch (IException &e) {
+      e.print();
+    }
+    try {
+      outNet.SetCoordType(SurfacePoint::CoordinateType (-1));
+      results.setOutputControlNet(ControlNetQsp(new ControlNet(outNet)));
+      printXml(results);
     }
     catch (IException &e) {
       e.print();
diff --git a/isis/src/control/objs/BundleSettings/BundleSettings.cpp b/isis/src/control/objs/BundleSettings/BundleSettings.cpp
index 7434226a2a8acaf6a549dbb911ff4b3826e1a7da..fb7cd9a615ccc5ba37ca94c38318ed77f9c205f6 100644
--- a/isis/src/control/objs/BundleSettings/BundleSettings.cpp
+++ b/isis/src/control/objs/BundleSettings/BundleSettings.cpp
@@ -10,10 +10,6 @@
 #include <QXmlStreamWriter>
 #include <QXmlInputSource>
 
-#include <H5Cpp.h>
-#include <hdf5_hl.h>
-#include <hdf5.h>
-
 #include "BundleObservationSolveSettings.h"
 //#include "FileName.h"currently only used in commented code
 #include "IException.h"
@@ -52,15 +48,16 @@ namespace Isis {
     m_solveRadius          = false;
     m_updateCubeLabel      = false;
     m_errorPropagation     = false;
-    m_createInverseMatrix  = true;
+    m_createInverseMatrix  = false;
 
     m_outlierRejection     = false;
-    m_outlierRejectionMultiplier = 1.0;
+    m_outlierRejectionMultiplier = 3.0;
 
     // Parameter Uncertainties (Weighting)
-    m_globalLatitudeAprioriSigma  = Isis::Null;
-    m_globalLongitudeAprioriSigma = Isis::Null;
-    m_globalRadiusAprioriSigma    = Isis::Null;
+    // The units are meters for either coordinate type
+    m_globalPointCoord1AprioriSigma  = Isis::Null;
+    m_globalPointCoord2AprioriSigma = Isis::Null;
+    m_globalPointCoord3AprioriSigma    = Isis::Null;
 
     // Convergence Criteria
     m_convergenceCriteria = BundleSettings::Sigma0;
@@ -79,6 +76,10 @@ namespace Isis {
 //    m_solveTargetBodyRotationRate = false;
 //    m_solveTargetBodyRadiusMethod = None;
 
+    // Control Points
+    m_cpCoordTypeReports = SurfacePoint::Latitudinal;
+    m_cpCoordTypeBundle = SurfacePoint::Latitudinal;
+
     // Output Options
     m_outputFilePrefix = "";
   }
@@ -123,9 +124,9 @@ namespace Isis {
         m_createInverseMatrix(other.m_createInverseMatrix),
         m_outlierRejection(other.m_outlierRejection),
         m_outlierRejectionMultiplier(other.m_outlierRejectionMultiplier),
-        m_globalLatitudeAprioriSigma(other.m_globalLatitudeAprioriSigma),
-        m_globalLongitudeAprioriSigma(other.m_globalLongitudeAprioriSigma),
-        m_globalRadiusAprioriSigma(other.m_globalRadiusAprioriSigma),
+        m_globalPointCoord1AprioriSigma(other.m_globalPointCoord1AprioriSigma),
+        m_globalPointCoord2AprioriSigma(other.m_globalPointCoord2AprioriSigma),
+        m_globalPointCoord3AprioriSigma(other.m_globalPointCoord3AprioriSigma),
         m_observationSolveSettings(other.m_observationSolveSettings),
         m_convergenceCriteria(other.m_convergenceCriteria),
         m_convergenceCriteriaThreshold(other.m_convergenceCriteriaThreshold),
@@ -133,6 +134,8 @@ namespace Isis {
         m_maximumLikelihood(other.m_maximumLikelihood),
         m_solveTargetBody(other.m_solveTargetBody),
         m_bundleTargetBody(other.m_bundleTargetBody),
+        m_cpCoordTypeReports(other.m_cpCoordTypeReports),
+        m_cpCoordTypeBundle(other.m_cpCoordTypeBundle),
         m_outputFilePrefix(other.m_outputFilePrefix){
   }
 
@@ -151,6 +154,10 @@ namespace Isis {
    * @param other The BundleSettings object to be copied.
    *
    * @return @b BundleSettings& A reference to the copied BundleSettings object.
+   *
+   * @internal
+   *   @history 2017-07-04 Debbie A. Cook - Added new coordType members and made
+   *                           global coordinate names generic.
    */
   BundleSettings &BundleSettings::operator=(const BundleSettings &other) {
     if (&other != this) {
@@ -162,15 +169,17 @@ namespace Isis {
       m_createInverseMatrix = other.m_createInverseMatrix;
       m_outlierRejection = other.m_outlierRejection;
       m_outlierRejectionMultiplier = other.m_outlierRejectionMultiplier;
-      m_globalLatitudeAprioriSigma = other.m_globalLatitudeAprioriSigma;
-      m_globalLongitudeAprioriSigma = other.m_globalLongitudeAprioriSigma;
-      m_globalRadiusAprioriSigma = other.m_globalRadiusAprioriSigma;
+      m_globalPointCoord1AprioriSigma = other.m_globalPointCoord1AprioriSigma;
+      m_globalPointCoord2AprioriSigma = other.m_globalPointCoord2AprioriSigma;
+      m_globalPointCoord3AprioriSigma = other.m_globalPointCoord3AprioriSigma;
       m_observationSolveSettings = other.m_observationSolveSettings;
       m_convergenceCriteria = other.m_convergenceCriteria;
       m_convergenceCriteriaThreshold = other.m_convergenceCriteriaThreshold;
       m_convergenceCriteriaMaximumIterations = other.m_convergenceCriteriaMaximumIterations;
       m_solveTargetBody = other.m_solveTargetBody;
       m_bundleTargetBody = other.m_bundleTargetBody;
+      m_cpCoordTypeReports = other.m_cpCoordTypeReports;
+      m_cpCoordTypeBundle = other.m_cpCoordTypeBundle;
       m_maximumLikelihood = other.m_maximumLikelihood;
       m_outputFilePrefix = other.m_outputFilePrefix;
     }
@@ -223,41 +232,60 @@ namespace Isis {
    * @param errorPropagation A boolean value indicating whether to use the
    *                         cholmod library's error propagation.
    * @param solveRadius A boolean value indicating whether to solve for radius.
-   * @param globalLatitudeAprioriSigma The global a priori sigma for latitude.
-   * @param globalLongitudeAprioriSigma The global a priori sigma for longitude.
-   * @param globalRadiusAprioriSigma The global a priori sigma for radius.
+   * @param coordType The type of coordinates used for control points
+   * @param globalPointCoord1AprioriSigma The global a priori sigma for latitude.
+   * @param globalPointCoord2AprioriSigma The global a priori sigma for longitude.
+   * @param globalPointCoord3AprioriSigma The global a priori sigma for radius.
    */
   void BundleSettings::setSolveOptions(bool solveObservationMode,
                                        bool updateCubeLabel,
                                        bool errorPropagation,
                                        bool solveRadius,
-                                       double globalLatitudeAprioriSigma,
-                                       double globalLongitudeAprioriSigma,
-                                       double globalRadiusAprioriSigma) {
+                                       SurfacePoint::CoordinateType coordTypeBundle,
+                                       SurfacePoint::CoordinateType coordTypeReports,
+                                       double globalPointCoord1AprioriSigma, 
+                                       double globalPointCoord2AprioriSigma, 
+                                       double globalPointCoord3AprioriSigma) {
     m_solveObservationMode = solveObservationMode;
     m_solveRadius = solveRadius;
     m_updateCubeLabel = updateCubeLabel;
-    m_errorPropagation = errorPropagation;
+    m_errorPropagation = errorPropagation;      
+    m_cpCoordTypeReports = coordTypeReports;
+    m_cpCoordTypeBundle = coordTypeBundle;
+    // m_cpCoordTypeBundle = SurfacePoint::Latitudinal;
 
-    if (globalLatitudeAprioriSigma > 0.0) { // otherwise, we leave as default Isis::Null
-      m_globalLatitudeAprioriSigma = globalLatitudeAprioriSigma;
+    if (globalPointCoord1AprioriSigma > 0.0) { // otherwise, we leave as default Isis::Null
+      m_globalPointCoord1AprioriSigma = globalPointCoord1AprioriSigma;
     }
     else {
-      m_globalLatitudeAprioriSigma = Isis::Null;
+      m_globalPointCoord1AprioriSigma = Isis::Null;
     }
 
-    if (globalLongitudeAprioriSigma > 0.0) {
-      m_globalLongitudeAprioriSigma = globalLongitudeAprioriSigma;
+    if (globalPointCoord2AprioriSigma > 0.0) {
+      m_globalPointCoord2AprioriSigma = globalPointCoord2AprioriSigma;
     }
     else {
-      m_globalLongitudeAprioriSigma = Isis::Null;
+      m_globalPointCoord2AprioriSigma = Isis::Null;
     }
 
-    if (m_solveRadius && globalRadiusAprioriSigma > 0.0) {
-      m_globalRadiusAprioriSigma = globalRadiusAprioriSigma;
+    // This is ugly.  *** TODO *** Revisit this section to try to find a cleaner solution.
+    // I think we will have to do similar checking other places.
+    // See pvlObject, save,   (DAC 03-29-2017)
+    if (coordTypeBundle == SurfacePoint::Latitudinal) {
+      if (m_solveRadius && globalPointCoord3AprioriSigma > 0.0) {
+        m_globalPointCoord3AprioriSigma = globalPointCoord3AprioriSigma;
+      }
+      else {
+      m_globalPointCoord3AprioriSigma = Isis::Null;
+      }
     }
-    else {
-      m_globalRadiusAprioriSigma = Isis::Null;
+    else if (coordTypeBundle == SurfacePoint::Rectangular) {
+      if (globalPointCoord3AprioriSigma > 0.0) {
+        m_globalPointCoord3AprioriSigma = globalPointCoord3AprioriSigma;
+      }
+      else {
+      m_globalPointCoord3AprioriSigma = Isis::Null;
+      }
     }
   }
 
@@ -275,7 +303,7 @@ namespace Isis {
       m_outlierRejectionMultiplier = multiplier;
     }
     else {
-      m_outlierRejectionMultiplier = 1.0;
+      m_outlierRejectionMultiplier = 3.0;
     }
   }
 
@@ -293,6 +321,33 @@ namespace Isis {
   }
 
 
+  /**
+   * Indicates the control point coordinate type for reports.
+   *
+   * This method returns the control point coordinate setting for reporting control points.
+   *
+   * @return @b SurfacePoint::CoordinateType Returns the control point coordinate type setting
+   *
+   */
+  SurfacePoint::CoordinateType BundleSettings::controlPointCoordTypeReports() const {
+    return (m_cpCoordTypeReports);
+  }
+
+
+  /**
+   * Indicates the control point coordinate type for the actual bundle adjust.
+   *
+   * This method returns the control point coordinate setting for performing the  bundle adjust.
+   *
+   * @return @b SurfacePoint::CoordinateType Returns the control point coordinate type setting
+   *
+   * @see BundleAdjust::errorPropagation()
+   */
+  SurfacePoint::CoordinateType BundleSettings::controlPointCoordTypeBundle() const {
+    return (m_cpCoordTypeBundle);
+  }
+
+
   /**
    * Indicates if the settings will allow the inverse correlation matrix to be created.
    *
@@ -395,35 +450,32 @@ namespace Isis {
 
 
   /**
-   * Retrieves the global a priori sigma latitude value for this bundle
-   * adjustment.
-   *
-   * @return @b double The global a priori sigma for latitude.
+   * Retrieves global a priori sigma for 1st coordinate of points for this bundle 
+   * 
+   * @return @b double The global a priori sigma for point coordinate 1.
    */
-  double BundleSettings::globalLatitudeAprioriSigma() const {
-    return m_globalLatitudeAprioriSigma;
+  double BundleSettings::globalPointCoord1AprioriSigma() const {
+    return m_globalPointCoord1AprioriSigma;
   }
 
 
   /**
-   * Retrieves the global a priori sigma longitude value for this bundle
-   * adjustment.
-   *
-   * @return @b double The global a priori sigma for longitude.
+   * Retrieves the global a priori sigma for 2nd coordinate of points for this bundle
+   * 
+   * @return @b double The global a priori sigma for point coordinate 2.
    */
-  double BundleSettings::globalLongitudeAprioriSigma() const {
-    return m_globalLongitudeAprioriSigma;
+  double BundleSettings::globalPointCoord2AprioriSigma() const {
+    return m_globalPointCoord2AprioriSigma;
   }
 
 
   /**
-   * Retrieves the global a priori sigma radius value for this bundle
-   * adjustment.
-   *
-   * @return @b double The global a priori sigma for radius.
+   * Retrieves the global a priori sigma 3rd coordinate of points for this bundle 
+   * 
+   * @return @b double The global a priori sigma for point coordinate 3.
    */
-  double BundleSettings::globalRadiusAprioriSigma() const {
-    return m_globalRadiusAprioriSigma;
+  double BundleSettings::globalPointCoord3AprioriSigma() const {
+    return m_globalPointCoord3AprioriSigma;
   }
 
 
@@ -439,29 +491,30 @@ namespace Isis {
 
 
   /**
-   * Retrieves solve settings for the observation corresponding to the given
-   * observation number.
+   * Retrieves solve settings for the observation corresponding to the given observation number. 
+   * If no corresponding settings object exists, return a new solve settings with no related 
+   * observation numbers.
    *
    * @param observationNumber The observation number associated with the
    *                          BundleObservationSolveSettings object to be accessed.
    *
    * @return @b BundleObservationSolveSettings The observation settings object that contains
    *                                           the observation number passed.
-   *
-   * @throw IException::Unknown "Unable to find BundleObservationSolveSettings
-   *                             for given observation number"
    */
   BundleObservationSolveSettings
       BundleSettings::observationSolveSettings(QString observationNumber) const {
 
+    BundleObservationSolveSettings defaultSolveSettings;
+
     for (int i = 0; i < numberSolveSettings(); i++) {
       if (m_observationSolveSettings[i].observationNumbers().contains(observationNumber)) {
         return m_observationSolveSettings[i];
       }
     }
-    QString msg = "Unable to find BundleObservationSolveSettings for observation number ["
-                  + observationNumber + "].";
-    throw IException(IException::Unknown, msg, _FILEINFO_);
+    return defaultSolveSettings;
+    //QString msg = "Unable to find BundleObservationSolveSettings for observation number ["
+    //              + observationNumber + "].";
+   // throw IException(IException::Unknown, msg, _FILEINFO_);
   }
 
 
@@ -488,6 +541,17 @@ namespace Isis {
   }
 
 
+  /**
+   * Retrieves solve settings for the observation corresponding to the given index.
+   *
+   * @return QList<BundleObservationSolveSettings> The QList of BundleObservationSolveSettings
+   *                              objects
+   */
+  QList<BundleObservationSolveSettings> BundleSettings::observationSolveSettings() const {
+    return m_observationSolveSettings;
+  } 
+
+
   // =============================================================================================//
   // ======================== Convergence Criteria ===============================================//
   // =============================================================================================//
@@ -953,6 +1017,9 @@ namespace Isis {
    *
    * @param stream The stream to write serialized XML output
    * @param project The project that contains the settings
+   * @internal
+   *   @history 2017-05-30 Debbie A. Cook - Added controlPointCoordType to the xml stream
+   *                           and made global coordinate names generic.
    */
   void BundleSettings::save(QXmlStreamWriter &stream, const Project *project) const {
     stream.writeStartElement("bundleSettings");
@@ -964,29 +1031,31 @@ namespace Isis {
     stream.writeStartElement("solveOptions");
     stream.writeAttribute("solveObservationMode", toString(solveObservationMode()));
     stream.writeAttribute("solveRadius", toString(solveRadius()));
+    stream.writeAttribute("controlPointCoordTypeReports", toString(controlPointCoordTypeReports()));
+    stream.writeAttribute("controlPointCoordTypeBundle", toString(controlPointCoordTypeBundle()));
     stream.writeAttribute("updateCubeLabel", toString(updateCubeLabel()));
     stream.writeAttribute("errorPropagation", toString(errorPropagation()));
     stream.writeAttribute("createInverseMatrix", toString(createInverseMatrix()));
     stream.writeEndElement();
 
     stream.writeStartElement("aprioriSigmas");
-    if (IsSpecial(globalLatitudeAprioriSigma())) {
-      stream.writeAttribute("latitude", "N/A");
+    if (IsSpecial(globalPointCoord1AprioriSigma())) {
+      stream.writeAttribute("pointCoord1", "N/A");
     }
     else {
-      stream.writeAttribute("latitude", toString(globalLatitudeAprioriSigma()));
+      stream.writeAttribute("pointCoord1", toString(globalPointCoord1AprioriSigma()));
     }
-    if (IsSpecial(globalLongitudeAprioriSigma())) {
-      stream.writeAttribute("longitude", "N/A");
+    if (IsSpecial(globalPointCoord2AprioriSigma())) {
+      stream.writeAttribute("pointCoord2", "N/A");
     }
     else {
-      stream.writeAttribute("longitude", toString(globalLongitudeAprioriSigma()));
+      stream.writeAttribute("pointCoord2", toString(globalPointCoord2AprioriSigma()));
     }
-    if (IsSpecial(globalRadiusAprioriSigma())) {
-      stream.writeAttribute("radius", "N/A");
+    if (IsSpecial(globalPointCoord3AprioriSigma())) {
+      stream.writeAttribute("pointCoord3", "N/A");
     }
     else {
-      stream.writeAttribute("radius", toString(globalRadiusAprioriSigma()));
+      stream.writeAttribute("pointCoord3", toString(globalPointCoord3AprioriSigma()));
     }
     stream.writeEndElement();
 
@@ -1072,6 +1141,10 @@ namespace Isis {
    * @param attributes The list of attributes for the tag.
    *
    * @return @b bool Indicates whether to continue reading the XML (usually true).
+   *
+   * @internal
+   *   @history 2017-05-30 Debbie A. Cook - Added controlPointCoordTypes to the pvl
+   *                           and made global coordinate names generic.
    */
   bool BundleSettings::XmlHandler::startElement(const QString &namespaceURI,
                                                 const QString &localName,
@@ -1093,6 +1166,18 @@ namespace Isis {
           m_xmlHandlerBundleSettings->m_solveRadius = toBool(solveRadiusStr);
         }
 
+        QString coordTypeReportsStr = attributes.value("controlPointCoordinateTypeReports");
+        if (!coordTypeReportsStr.isEmpty()) {
+          m_xmlHandlerBundleSettings->m_cpCoordTypeReports =
+            SurfacePoint::stringToCoordinateType(coordTypeReportsStr);
+        }
+
+        QString coordTypeBundleStr = attributes.value("controlPointCoordinateTypeBundle");
+        if (!coordTypeBundleStr.isEmpty()) {
+          m_xmlHandlerBundleSettings->m_cpCoordTypeBundle =
+            SurfacePoint::stringToCoordinateType(coordTypeBundleStr);
+        }
+
         QString updateCubeLabelStr = attributes.value("updateCubeLabel");
         if (!updateCubeLabelStr.isEmpty()) {
           m_xmlHandlerBundleSettings->m_updateCubeLabel = toBool(updateCubeLabelStr);
@@ -1110,38 +1195,38 @@ namespace Isis {
       }
       else if (localName == "aprioriSigmas") {
 
-        QString globalLatitudeAprioriSigmaStr = attributes.value("latitude");
-        m_xmlHandlerBundleSettings->m_globalLatitudeAprioriSigma = Isis::Null;
+        QString globalPointCoord1AprioriSigmaStr = attributes.value("pointCoord1");
+        m_xmlHandlerBundleSettings->m_globalPointCoord1AprioriSigma = Isis::Null;
         // TODO: why do I need to init this one and not other sigmas???
-        if (!globalLatitudeAprioriSigmaStr.isEmpty()) {
-          if (globalLatitudeAprioriSigmaStr == "N/A") {
-            m_xmlHandlerBundleSettings->m_globalLatitudeAprioriSigma = Isis::Null;
+        if (!globalPointCoord1AprioriSigmaStr.isEmpty()) {
+          if (globalPointCoord1AprioriSigmaStr == "N/A") {
+            m_xmlHandlerBundleSettings->m_globalPointCoord1AprioriSigma = Isis::Null;
           }
           else {
-            m_xmlHandlerBundleSettings->m_globalLatitudeAprioriSigma
-                = toDouble(globalLatitudeAprioriSigmaStr);
+            m_xmlHandlerBundleSettings->m_globalPointCoord1AprioriSigma
+                = toDouble(globalPointCoord1AprioriSigmaStr);
           }
         }
 
-        QString globalLongitudeAprioriSigmaStr = attributes.value("longitude");
-        if (!globalLongitudeAprioriSigmaStr.isEmpty()) {
-          if (globalLongitudeAprioriSigmaStr == "N/A") {
-            m_xmlHandlerBundleSettings->m_globalLongitudeAprioriSigma = Isis::Null;
+        QString globalPointCoord2AprioriSigmaStr = attributes.value("pointCoord2");
+        if (!globalPointCoord2AprioriSigmaStr.isEmpty()) {
+          if (globalPointCoord2AprioriSigmaStr == "N/A") {
+            m_xmlHandlerBundleSettings->m_globalPointCoord2AprioriSigma = Isis::Null;
           }
           else {
-            m_xmlHandlerBundleSettings->m_globalLongitudeAprioriSigma
-                = toDouble(globalLongitudeAprioriSigmaStr);
+            m_xmlHandlerBundleSettings->m_globalPointCoord2AprioriSigma
+                = toDouble(globalPointCoord2AprioriSigmaStr);
           }
         }
 
-        QString globalRadiusAprioriSigmaStr = attributes.value("radius");
-        if (!globalRadiusAprioriSigmaStr.isEmpty()) {
-          if (globalRadiusAprioriSigmaStr == "N/A") {
-            m_xmlHandlerBundleSettings->m_globalRadiusAprioriSigma = Isis::Null;
+        QString globalPointCoord3AprioriSigmaStr = attributes.value("radius");
+        if (!globalPointCoord3AprioriSigmaStr.isEmpty()) {
+          if (globalPointCoord3AprioriSigmaStr == "N/A") {
+            m_xmlHandlerBundleSettings->m_globalPointCoord3AprioriSigma = Isis::Null;
           }
           else {
-            m_xmlHandlerBundleSettings->m_globalRadiusAprioriSigma
-                = toDouble(globalRadiusAprioriSigmaStr);
+            m_xmlHandlerBundleSettings->m_globalPointCoord3AprioriSigma
+                = toDouble(globalPointCoord3AprioriSigmaStr);
           }
         }
       }
@@ -1158,7 +1243,7 @@ namespace Isis {
                 = toDouble(outlierRejectionMultiplierStr);
           }
           else {
-            m_xmlHandlerBundleSettings->m_outlierRejectionMultiplier = 1.0;
+            m_xmlHandlerBundleSettings->m_outlierRejectionMultiplier = 3.0;
           }
         }
       }
diff --git a/isis/src/control/objs/BundleSettings/BundleSettings.h b/isis/src/control/objs/BundleSettings/BundleSettings.h
index 3475474b7f40e779fc0247de3bc46206a3ebd750..644ef62ba448fe41e5101ad383801222e362b221 100644
--- a/isis/src/control/objs/BundleSettings/BundleSettings.h
+++ b/isis/src/control/objs/BundleSettings/BundleSettings.h
@@ -35,6 +35,7 @@
 #include "BundleObservationSolveSettings.h"
 #include "MaximumLikelihoodWFunctions.h"
 #include "SpecialPixel.h"
+#include "SurfacePoint.h"
 #include "XmlStackedHandler.h"
 
 class QDataStream;
@@ -101,7 +102,26 @@ namespace Isis {
    *   @history 2016-10-17 Jesse Mapel - Removed m_SCPVLFilename parameter in accordance with
    *                           USEPVL being removed from jigsaw.  References #4316.
    *   @history 2017-04-24 Ian Humphrey - Removed pvlObject(). Fixes #4797.
+   *   @history 2018-03-20 Ken Edmundson
+   *                           1) Temporarily set default for m_createInverseMatrix to false. This
+   *                              is for creating and displaying the correlation matrix, which is
+   *                              currently not working.
+   *                           2) commented out hdf5 header includes in cpp
+   *   @history 2018-06-28 Christopher Combs - Added observationSolveSettings() method to retrieve
+   *                            m_observationSolveSettings. Fixes #497.
    *
+   *   @history 2017-06-25 Debbie Cook - Added m_cpCoordTypeReports and m_cpCoordTypeBundle. 
+   *                           The 2nd type determines how control point coordinates are entered 
+   *                           into the the matrix and interpreted throughout the adjustment.  The 
+   *                           1st type determines the coordinate type of control points in reports.
+   *                           Added the new coordinate type as an argument to SetSolveOptions.  
+   *                           Changed GlobalAprioriSigmas names to more generic names:  Latitude to
+   *                           PointCoord1, Longitude to PointCoord2, and Radius to PointCoord3 so
+   *                           they can be used for either lat/lon/radius or x/y/z.  Also added 
+   *                           accessor methods, CoordTypeReports() & CoordTypeBundle()
+   *                           for the new coordinate type members.
+   *                           References #4649 and #501.
+   *  
    *   @todo Determine which XmlStackedHandlerReader constructor is preferred
    *   @todo Determine which XmlStackedHandler needs a Project pointer (see constructors)
    *   @todo Determine whether QList<BundleObservationSolveSettings> m_observationSolveSettings
@@ -147,15 +167,19 @@ namespace Isis {
                            bool updateCubeLabel = false,
                            bool errorPropagation = false,
                            bool solveRadius = false,
-                           double globalLatitudeAprioriSigma = Isis::Null,
-                           double globalLongitudeAprioriSigma = Isis::Null,
-                           double globalRadiusAprioriSigma = Isis::Null);
-      void setOutlierRejection(bool outlierRejection,
+                           SurfacePoint::CoordinateType coordTypeBundle = SurfacePoint::Latitudinal,
+                           SurfacePoint::CoordinateType coordTypeReports = SurfacePoint::Latitudinal,
+                           double globalPointCoord1AprioriSigma = Isis::Null, 
+                           double globalPointCoord2AprioriSigma = Isis::Null, 
+                           double globalPointCoord3AprioriSigma = Isis::Null); 
+      void setOutlierRejection(bool outlierRejection, 
                                double multiplier = 1.0);
       void setObservationSolveOptions(QList<BundleObservationSolveSettings> obsSolveSettingsList);
       void setCreateInverseMatrix(bool createMatrix);
 
       // accessors
+      SurfacePoint::CoordinateType controlPointCoordTypeReports() const;
+      SurfacePoint::CoordinateType controlPointCoordTypeBundle() const;
       bool createInverseMatrix() const;
       bool solveObservationMode() const;
       bool solveRadius() const;
@@ -163,13 +187,15 @@ namespace Isis {
       bool errorPropagation() const;
       bool outlierRejection() const;
       double outlierRejectionMultiplier() const;
-      double globalLatitudeAprioriSigma() const;
-      double globalLongitudeAprioriSigma() const;
-      double globalRadiusAprioriSigma() const;
+// These sigmas are either for planetocentric lat/lon/radius or body-fixed x/y/z
+      double globalPointCoord1AprioriSigma() const;
+      double globalPointCoord2AprioriSigma() const;
+      double globalPointCoord3AprioriSigma() const;
 
       int numberSolveSettings() const;
       BundleObservationSolveSettings observationSolveSettings(QString instrumentId) const;
       BundleObservationSolveSettings observationSolveSettings(int n) const;
+      QList<BundleObservationSolveSettings> observationSolveSettings() const; 
 
 
       //=====================================================================//
@@ -338,9 +364,9 @@ namespace Isis {
                                                 Defaults to 1, so no change if rejection = false.*/
 
       // Parameter Uncertainties (Weighting)
-      double m_globalLatitudeAprioriSigma;  //!< The global a priori sigma for latitude.
-      double m_globalLongitudeAprioriSigma; //!< The global a priori sigma for longitude.
-      double m_globalRadiusAprioriSigma;    //!< The global a priori sigma for radius.
+      double m_globalPointCoord1AprioriSigma;   //!< The global a priori sigma for latitude or X.
+      double m_globalPointCoord2AprioriSigma;   //!< The global a priori sigma for longitude or Y.
+      double m_globalPointCoord3AprioriSigma;   //!< The global a priori sigma for radius or Z.
 
       // QList of observation solve settings
       QList<BundleObservationSolveSettings> m_observationSolveSettings; //!<
@@ -371,7 +397,11 @@ namespace Isis {
       bool m_solveTargetBody; //!< Indicates whether to solve for target body.
       BundleTargetBodyQsp m_bundleTargetBody; /**< A pointer to the target body
                                                    settings and information.*/
-
+      // Control Points
+      SurfacePoint::CoordinateType m_cpCoordTypeReports;  /**< Indicates the coordinate type for
+                                                   outputting control points in reports.  */
+      SurfacePoint::CoordinateType m_cpCoordTypeBundle;     /**< Indicates the coordinate type used 
+                                                    for control points in the bundle adjustment */
       // Output Options
       QString m_outputFilePrefix;    /**< The prefix for all output files. If the user does not want
                                           output files to be written to the current directory, the
diff --git a/isis/src/control/objs/BundleSettings/BundleSettings.truth b/isis/src/control/objs/BundleSettings/BundleSettings.truth
index 29abea63bdc5a8b29e789e0b127615d58d8b4688..687aba81b7c8a774f3b89779d348b76238740e1c 100644
--- a/isis/src/control/objs/BundleSettings/BundleSettings.truth
+++ b/isis/src/control/objs/BundleSettings/BundleSettings.truth
@@ -4,8 +4,8 @@ Printing PVL group with settings from the default constructor...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -33,8 +33,8 @@ Testing copy constructor...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -62,8 +62,8 @@ Testing assignment operator to set this equal to itself...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -91,8 +91,8 @@ Testing assignment operator to create a new settings object...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -120,8 +120,8 @@ Testing mutator methods...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="Yes" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="1000.0" longitude="2000.0" radius="3000.0"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="Yes" controlPointCoordTypeReports="1" controlPointCoordTypeBundle="1" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="1000.0" pointCoord2="2000.0" pointCoord3="3000.0"/>
         <outlierRejectionOptions rejection="Yes" multiplier="4.0"/>
         <convergenceCriteriaOptions convergenceCriteria="ParameterCorrections" threshold="0.25" maximumIterations="26"/>
         <maximumLikelihoodEstimation>
@@ -170,8 +170,8 @@ Testing mutator methods...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="No" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -198,8 +198,8 @@ Testing mutator methods...
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="No" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -275,8 +275,8 @@ Serializing test XML object to file:
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="No" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -304,8 +304,8 @@ Testing XML: Object deserialized as (should match object above):
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="No" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="No" multiplier="N/A"/>
         <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
         <maximumLikelihoodEstimation/>
@@ -334,8 +334,8 @@ Serializing test XML object to file:
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="Yes" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="1000.0" longitude="2000.0" radius="3000.0"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="Yes" controlPointCoordTypeReports="1" controlPointCoordTypeBundle="1" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="1000.0" pointCoord2="2000.0" pointCoord3="3000.0"/>
         <outlierRejectionOptions rejection="Yes" multiplier="4.0"/>
         <convergenceCriteriaOptions convergenceCriteria="ParameterCorrections" threshold="0.25" maximumIterations="26"/>
         <maximumLikelihoodEstimation>
@@ -385,8 +385,8 @@ Testing XML: Object deserialized as (should match object above):
 <bundleSettings>
     <globalSettings>
         <validateNetwork>Yes</validateNetwork>
-        <solveOptions solveObservationMode="Yes" solveRadius="Yes" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="Yes"/>
-        <aprioriSigmas latitude="1000.0" longitude="2000.0" radius="3000.0"/>
+        <solveOptions solveObservationMode="Yes" solveRadius="Yes" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="Yes" errorPropagation="Yes" createInverseMatrix="No"/>
+        <aprioriSigmas pointCoord1="1000.0" pointCoord2="2000.0" pointCoord3="N/A"/>
         <outlierRejectionOptions rejection="Yes" multiplier="4.0"/>
         <convergenceCriteriaOptions convergenceCriteria="ParameterCorrections" threshold="0.25" maximumIterations="26"/>
         <maximumLikelihoodEstimation>
@@ -434,7 +434,6 @@ Testing XML: Object deserialized as (should match object above):
 
 
 Testing error throws...
-**ERROR** Unable to find BundleObservationSolveSettings for observation number [UnassociatedObservationNumber].
 **ERROR** Unable to find BundleObservationSolveSettings with index = [32].
 **ERROR** Unable to find BundleObservationSolveSettings with index = [-1].
 **PROGRAMMER ERROR** Unknown bundle convergence criteria [Pickles].
diff --git a/isis/src/control/objs/BundleSettings/unitTest.cpp b/isis/src/control/objs/BundleSettings/unitTest.cpp
index b8811df68fc3d583be0cfde31d8b88512443165a..a3b7ea89c0b743c18aa1135b87863bc8ba733e0b 100755
--- a/isis/src/control/objs/BundleSettings/unitTest.cpp
+++ b/isis/src/control/objs/BundleSettings/unitTest.cpp
@@ -47,6 +47,11 @@ void printXml(const T &);
   *                           most likely going to move to HDF5. Fixes #4327.
   *   @history 2017-04-24 Ian Humphrey - Removed pvlObject() and replaced with the XML save().
   *                           Fixes #4797.
+  *   @history 2018-05-24 Ken Edmundson - Updated truth data to indicate default value for
+  *                                       m_createInverseMatrix was changed from true to false.
+  *   @history 2018-06-04 Debbie A. Cook - (added to BundleXYZ branch on 2017-06-25) Updated to 
+  *                           reflect added argument for control pointcoordinate type.  References 
+  *                           #4649 and #501.
   *
   *   @todo Truth updated so that the name of the BundleObservationSolveSettings object is Null,
   *         this should be fixed as part of #4292.
@@ -166,8 +171,10 @@ int main(int argc, char *argv[]) {
     // reset all...
     // validate the network
     copySettings.setValidateNetwork(true);
+    // Assume for now the user interface will prevent any invalid coordinate types in the
     // set the solve options
-    copySettings.setSolveOptions(true, true, true, true, 1000.0, 2000.0, 3000.0);
+    copySettings.setSolveOptions(true, true, true, true, SurfacePoint::Rectangular,
+                                  SurfacePoint::Rectangular, 1000.0, 2000.0, 3000.0);
     // set outlier rejection
     copySettings.setOutlierRejection(true, 4.0);
     // create and fill the list of observation solve settings... then set
@@ -203,7 +210,7 @@ int main(int argc, char *argv[]) {
     // now for test coverage, call some more resets
     // SolveObservationMode = UpdateCubeLabel = ErrorPropagation = true and
     // SolveRadius = OutlierRejection = false
-    settings.setSolveOptions(true, true, true, false);
+    settings.setSolveOptions(true, true, true, false, SurfacePoint::Latitudinal);
     settings.setOutlierRejection(false);
     settings.setOutputFilePrefix("TestFilePrefix");
     printXml<BundleSettings>(settings);
diff --git a/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.cpp b/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.cpp
index 0b15dd80aeb6190b323a80908850e5cc63fbb5cd..779d82b5b16d6521fc21e75bd8917b70f52ad0e4 100755
--- a/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.cpp
+++ b/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.cpp
@@ -2,6 +2,7 @@
 
 #include <QDataStream>
 #include <QDebug>
+#include <QFile>
 #include <QList>
 #include <QString>
 #include <QStringList>
@@ -9,6 +10,7 @@
 #include <QXmlStreamWriter>
 
 #include "BundleResults.h"
+#include "ControlList.h"
 #include "ControlMeasure.h"
 #include "ControlNet.h"
 #include "ControlPoint.h"
@@ -38,23 +40,19 @@ namespace Isis {
                                          QList<ImageList *> imgList,
                                          QObject *parent) : QObject(parent) {
     m_id = new QUuid(QUuid::createUuid());
-
     m_runTime = "";
-    
-    m_name = m_runTime; 
-
-    m_controlNetworkFileName = new FileName(controlNetworkFileName);
-
+    m_name = m_runTime;
+    m_inputControlNetFileName = new FileName(controlNetworkFileName);
+    m_outputControl = NULL;
     m_settings = inputSettings;
-
     m_statisticsResults = new BundleResults(outputStatistics);
-
     m_images = new QList<ImageList *>(imgList);
+    m_adjustedImages = new QList<ImageList *>;
   }
 
 
   /**
-   * Constructor. Creates a BundleSolutionInfo.
+   * Constructor. Creates a BundleSolutionInfo from disk.
    *
    * @param project The current project
    * @param xmlReader An XML reader that's up to an <bundleSettings/> tag.
@@ -67,43 +65,29 @@ namespace Isis {
     m_id = new QUuid(QUuid::createUuid());
     m_runTime = "";
     m_name = m_runTime;
-    m_controlNetworkFileName = NULL;
+    m_inputControlNetFileName = NULL;
+    m_outputControl = NULL;
     m_statisticsResults = NULL;
     // what about the rest of the member data ? should we set defaults ??? CREATE INITIALIZE METHOD
     m_images = new QList<ImageList *>;
+    m_adjustedImages = new QList<ImageList *>;
 
     xmlReader->setErrorHandler(new XmlHandler(this, project));
     xmlReader->pushContentHandler(new XmlHandler(this, project));
   }
 
 
-  /**
-   * Constructor. Creates a BundleSolutionInfo.
-   *
-   * @param src BundleSolutionInfo where the settings and BundleResults are read from.
-   */
-  BundleSolutionInfo::BundleSolutionInfo(const BundleSolutionInfo &src)
-      : m_id(new QUuid(QUuid::createUuid())),
-        m_name(src.m_name),
-        m_runTime(src.m_runTime),
-        m_controlNetworkFileName(new FileName(src.m_controlNetworkFileName->expanded())),
-        m_settings(new BundleSettings(*src.m_settings)),
-        m_statisticsResults(new BundleResults(*src.m_statisticsResults)),
-        m_images(new QList<ImageList *>(*src.m_images)),
-        m_csvSavedImagesFilename(src.m_csvSavedImagesFilename),
-        m_csvSavedPointsFilename(src.m_csvSavedPointsFilename),
-        m_csvSavedResidualsFilename(src.m_csvSavedResidualsFilename) {
-  }
-
-
   /**
    * Destructor
    */
   BundleSolutionInfo::~BundleSolutionInfo() {
     delete m_id;
 
-    delete m_controlNetworkFileName;
-    m_controlNetworkFileName = NULL;
+    delete m_inputControlNetFileName;
+    m_inputControlNetFileName = NULL;
+
+    delete m_outputControl;
+    m_outputControl = NULL;
 
     delete m_statisticsResults;
     m_statisticsResults = NULL;
@@ -112,58 +96,66 @@ namespace Isis {
       delete m_images;
       m_images = NULL;
     }
+
+    // if (m_adjustedImages != NULL) {
+    //   qDeleteAll(*m_adjustedImages);
+    //   m_adjustedImages->clear();
+    //   delete m_adjustedImages;
+    //   m_adjustedImages = NULL;
+    // }
   }
 
 
   /**
-   * Creates an equal operator for BundleSolutionInfos.
-   *
-   * @param src the BundleSolutionInfo that we are comparing the current BundleSolutionInfo to.
+   * Returns bundleout text filename.
    *
-   * @return @b BundleSolutionInfo Reference to the current BundleSolutionInfo
+   * @return QString Bundleout text filename.
    */
-  BundleSolutionInfo &BundleSolutionInfo::operator=(const BundleSolutionInfo &src) {
-
-    if (&src != this) {
-
-      delete m_id;
-      m_id = new QUuid(QUuid::createUuid());
-
-      m_runTime = src.m_runTime;
-      
-      if (src.m_name == "" || src.m_name == src.m_runTime) {
-        m_name = m_runTime;
-      }
-      else {
-        m_name = src.m_name;
-      }
-
-      delete m_controlNetworkFileName;
-      m_controlNetworkFileName = new FileName(src.m_controlNetworkFileName->expanded());
-
-      m_settings = src.m_settings;
-
-      delete m_statisticsResults;
-      m_statisticsResults = new BundleResults(*src.m_statisticsResults);
-
-      delete m_images;
-      m_images = new QList<ImageList *>(*src.m_images);
-    }
-    return *this;
+  QString BundleSolutionInfo::savedBundleOutputFilename() {
+    return m_txtBundleOutputFilename;
   }
 
+
+  /**
+   * Returns filename of output bundle images csv file.
+   *
+   * @return QString filename of output bundle images csv file.
+   */
   QString BundleSolutionInfo::savedImagesFilename() {
     return m_csvSavedImagesFilename;
   }
 
+
+  /**
+   * Returns filename of output bundle points csv file.
+   *
+   * @return QString filename of output bundle points csv file.
+   */
   QString BundleSolutionInfo::savedPointsFilename() {
     return m_csvSavedPointsFilename;
   }
 
+
+  /**
+   * Returns filename of output bundle residuals csv file.
+   *
+   * @return QString filename of output bundle residuals csv file.
+   */
   QString BundleSolutionInfo::savedResidualsFilename() {
     return m_csvSavedResidualsFilename;
   }
 
+
+  /**
+   * Adds a list of images that were adjusted (their labels were updated).
+   *
+   * @param ImageList *images The list of images to add that had their labels updated.
+   */
+  void BundleSolutionInfo::addAdjustedImages(ImageList *images) {
+    m_adjustedImages->append(images);
+  }
+
+
   /**
    * Sets the stat results.
    *
@@ -177,6 +169,8 @@ namespace Isis {
 
 
   /**
+   * TODO: change description below to something more like english.
+   *
    * Change the on-disk file name for the control network used to be where the control network
    * ought to be in the given project.
    *
@@ -190,10 +184,30 @@ namespace Isis {
 
     //TODO do we need to close anything here?
 
-    FileName oldFileName(*m_controlNetworkFileName);
-    FileName newName(project->cnetRoot() + "/" +
-                     oldFileName.dir().dirName() + "/" + oldFileName.name());
-    *m_controlNetworkFileName = newName.expanded();
+    FileName oldInputFileName(*m_inputControlNetFileName);
+    FileName newInputFileName(project->cnetRoot() + "/" +
+                     oldInputFileName.dir().dirName() + "/" + oldInputFileName.name());
+    *m_inputControlNetFileName = newInputFileName.expanded();
+
+    FileName oldOutputFileName(m_outputControl->fileName());
+    FileName newOutputFileName(project->cnetRoot() + "/" +
+                     oldOutputFileName.dir().dirName() + "/" + oldOutputFileName.name());
+
+    if (m_outputControl) {
+      delete m_outputControl;
+    }
+    m_outputControl = new Control(newOutputFileName.expanded());
+  }
+
+
+  /**
+   * Returns the list of images that were adjusted after a bundle. This can potentially be an
+   * empty QList if no image labels were updated.
+   *
+   * @return QList<ImageList*> Returns the adjusted images (images with updated labels).
+   */
+  QList<ImageList *> BundleSolutionInfo::adjustedImages() const {
+    return *m_adjustedImages;
   }
 
 
@@ -240,19 +254,49 @@ namespace Isis {
 
 
   /**
-   * Returns the name of the control network.
+   * Returns the name of the input control network.
+   *
+   * @return @b QString The name of the input control network.
+   */
+  QString BundleSolutionInfo::inputControlNetFileName() const {
+    return m_inputControlNetFileName->expanded();
+  }
+
+
+  /**
+   * Returns the name of the output control network.
+   *
+   * @return @b QString The name of the output control network.
+   */
+  QString BundleSolutionInfo::outputControlNetFileName() const {
+    return m_outputControl->fileName();
+  }
+
+
+  /**
+   * Returns the name of the output control network.
    *
-   * @return @b QString The name of the control network.
+   * @return @b QString The name of the output control network.
    */
-  QString BundleSolutionInfo::controlNetworkFileName() const {
-    return m_controlNetworkFileName->expanded();
+  void BundleSolutionInfo::setOutputControl(Control *outputControl) {
+    m_outputControl = outputControl;
   }
 
 
   /**
-   * Returns the bundle settings.
+   * Returns bundle output Control object.
    *
-   * @return @b BundleSettingsQsp The bundle settings.
+   * @return Control* Pointer to bundle output Control object.
+   */
+  Control *BundleSolutionInfo::control() const {
+    return m_outputControl;
+  }
+
+
+  /**
+   * Returns bundle settings.
+   *
+   * @return BundleSettingsQsp Bundle settings.
    */
   BundleSettingsQsp BundleSolutionInfo::bundleSettings() {
     return m_settings;
@@ -277,7 +321,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Returns the images used in the bundle
    *
@@ -286,22 +330,22 @@ namespace Isis {
   QList<ImageList *> BundleSolutionInfo::imageList() {
     return *m_images;
   }
-  
-  
+
+
   /**
    * Sets the name of the bundle.
-   * 
+   *
    * @param name QString of the new name
    */
   void BundleSolutionInfo::setName(QString name) {
     m_name = name;
   }
-  
-  
-  /** 
-   * Returns the name of the bundle. The name defaults to the id, unless the name has been set using 
+
+
+  /**
+   * Returns the name of the bundle. The name defaults to the id, unless the name has been set using
    * setName()
-   * 
+   *
    * @return QString Name of the bundle
    */
   QString BundleSolutionInfo::name() const {
@@ -501,7 +545,7 @@ namespace Isis {
                   Isis::iTime::CurrentLocalTime().toLatin1().data());
     fpOut << buf;
     sprintf(buf, "\n               Network Filename: %s",
-                  m_controlNetworkFileName->expanded().toLatin1().data());
+                  m_inputControlNetFileName->expanded().toLatin1().data());
     fpOut << buf;
     sprintf(buf, "\n                     Network Id: %s",
                   m_statisticsResults->outputControlNet()->GetNetworkId().toLatin1().data());
@@ -544,6 +588,16 @@ namespace Isis {
       sprintf(buf, "\n              ERROR PROPAGATION: OFF");
     fpOut << buf;
 
+    (m_settings->controlPointCoordTypeReports() == SurfacePoint::Latitudinal) ?
+      sprintf(buf, "\n  CONTROL POINT COORDINATE TYPE FOR REPORTS: LATITUDINAL"):
+      sprintf(buf, "\n  CONTROL POINT COORDINATE TYPE FOR REPORTS: RECTANGULAR");
+    fpOut << buf;
+
+    (m_settings->controlPointCoordTypeBundle() == SurfacePoint::Latitudinal) ?
+      sprintf(buf, "\n  CONTROL POINT COORDINATE TYPE FOR BUNDLE: LATITUDINAL"):
+      sprintf(buf, "\n  CONTROL POINT COORDINATE TYPE FOR BUNDLE: RECTANGULAR");
+    fpOut << buf;
+
     if (m_settings->outlierRejection()) {
       sprintf(buf, "\n              OUTLIER REJECTION: ON");
       fpOut << buf;
@@ -559,6 +613,14 @@ namespace Isis {
       fpOut << buf;
     }
 
+    // Added April 5, 2017
+    sprintf(buf, "\n              CONTROL POINT COORDINATE TYPE FOR REPORTS:  %s",
+       SurfacePoint::coordinateTypeToString(m_settings->controlPointCoordTypeReports()).toLatin1().data());
+
+    // Added July 4, 2017
+    sprintf(buf, "\n              CONTROL POINT COORDINATE TYPE FOR BUNDLE:  %s",
+       SurfacePoint::coordinateTypeToString(m_settings->controlPointCoordTypeBundle()).toLatin1().data());
+
     sprintf(buf, "\n\nMAXIMUM LIKELIHOOD ESTIMATION\n============================\n");
     fpOut << buf;
 
@@ -674,21 +736,45 @@ namespace Isis {
     fpOut << buf;
 
     sprintf(buf, "\n\nINPUT: GLOBAL IMAGE PARAMETER UNCERTAINTIES\n===========================================\n");
+    QString coord1Str;
+    QString coord2Str;
+    QString coord3Str;
+    switch (m_settings->controlPointCoordTypeReports()) {
+      case SurfacePoint::Latitudinal:
+        coord1Str = "LATITUDE";
+        coord2Str = "LONGITUDE";
+        coord3Str = "RADIUS";  
+        break;
+      case SurfacePoint::Rectangular:
+        coord1Str = "       X";
+        coord2Str = "        Y";
+        coord3Str = "     Z";
+        break;
+      default:
+         IString msg ="Unknown surface point coordinate type enum ["
+           + toString(m_settings->controlPointCoordTypeReports()) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+        break;
+    }
+
+    // Coordinate 1 (latitude or point X)
     fpOut << buf;
-    (m_settings->globalLatitudeAprioriSigma() == Isis::Null) ?
-        sprintf(buf,"\n               POINT LATITUDE SIGMA: N/A"):
-        sprintf(buf,"\n               POINT LATITUDE SIGMA: %lf (meters)",
-                m_settings->globalLatitudeAprioriSigma());
+    (m_settings->globalPointCoord1AprioriSigma()  == Isis::Null) ?
+      sprintf(buf,"\n               POINT %s SIGMA: N/A", coord1Str.toLatin1().data()):
+      sprintf(buf,"\n               POINT %s SIGMA: %lf (meters)", coord1Str.toLatin1().data(),
+              m_settings->globalPointCoord1AprioriSigma());
+    // Coordinate 2 (longitude or point Y)
     fpOut << buf;
-    (m_settings->globalLongitudeAprioriSigma() == Isis::Null) ?
-        sprintf(buf,"\n              POINT LONGITUDE SIGMA: N/A"):
-        sprintf(buf,"\n              POINT LONGITUDE SIGMA: %lf (meters)",
-                m_settings->globalLongitudeAprioriSigma());
+    (m_settings->globalPointCoord2AprioriSigma() == Isis::Null) ?
+      sprintf(buf,"\n              POINT %s SIGMA: N/A", coord2Str.toLatin1().data()):
+      sprintf(buf,"\n              POINT %s SIGMA: %lf (meters)", coord2Str.toLatin1().data(),
+                m_settings->globalPointCoord2AprioriSigma());
+    // Coordinate 3 (radius or point Z)
     fpOut << buf;
-    (m_settings->globalRadiusAprioriSigma() == Isis::Null) ?
-        sprintf(buf,"\n                 POINT RADIUS SIGMA: N/A"):
-        sprintf(buf,"\n                 POINT RADIUS SIGMA: %lf (meters)",
-                m_settings->globalRadiusAprioriSigma());
+    (m_settings->globalPointCoord3AprioriSigma() == Isis::Null) ?
+      sprintf(buf,"\n                 POINT %s SIGMA: N/A", coord3Str.toLatin1().data()):
+      sprintf(buf,"\n                 POINT %s SIGMA: %lf (meters)", coord3Str.toLatin1().data(),
+                m_settings->globalPointCoord3AprioriSigma());
     fpOut << buf;
     (positionSolveDegree < 1 || positionSigmas[0] == Isis::Null) ?
         sprintf(buf,"\n          SPACECRAFT POSITION SIGMA: N/A"):
@@ -1079,6 +1165,8 @@ namespace Isis {
       return false;
     }
 
+    m_txtBundleOutputFilename = ofname;
+
     char buf[1056];
     BundleObservationQsp observation;
 
@@ -1159,39 +1247,52 @@ namespace Isis {
     if (berrorProp) {
       sprintf(buf, "\n\n\nPOINTS UNCERTAINTY SUMMARY\n==========================\n\n");
       fpOut << buf;
-      sprintf(buf, " RMS Sigma Latitude(m)%20.8lf\n",
-              m_statisticsResults->sigmaLatitudeStatisticsRms());
+
+      // Coordinate 1 (latitude or point x) summary
+      QString
+        coordName = surfacePointCoordName(m_settings->controlPointCoordTypeReports(),
+                                          SurfacePoint::One);
+      sprintf(buf, "RMS Sigma %s(m)%20.8lf\n", coordName.toLatin1().data(),
+              m_statisticsResults->sigmaCoord1StatisticsRms());
       fpOut << buf;
-      sprintf(buf, " MIN Sigma Latitude(m)%20.8lf at %s\n",
-              m_statisticsResults->minSigmaLatitudeDistance().meters(),
-              m_statisticsResults->minSigmaLatitudePointId().toLatin1().data());
+      sprintf(buf, "MIN Sigma %s(m)%20.8lf at %s\n", coordName.toLatin1().data(),
+              m_statisticsResults->minSigmaCoord1Distance().meters(),
+              m_statisticsResults->minSigmaCoord1PointId().toLatin1().data());
       fpOut << buf;
-      sprintf(buf, " MAX Sigma Latitude(m)%20.8lf at %s\n\n",
-              m_statisticsResults->maxSigmaLatitudeDistance().meters(),
-              m_statisticsResults->maxSigmaLatitudePointId().toLatin1().data());
+      sprintf(buf, "MAX Sigma %s(m)%20.8lf at %s\n\n", coordName.toLatin1().data(),
+              m_statisticsResults->maxSigmaCoord1Distance().meters(),
+              m_statisticsResults->maxSigmaCoord1PointId().toLatin1().data());
       fpOut << buf;
-      sprintf(buf, "RMS Sigma Longitude(m)%20.8lf\n",
-              m_statisticsResults->sigmaLongitudeStatisticsRms());
+
+      // Coordinate 2 (longitude or point y) summary
+      coordName = surfacePointCoordName(m_settings->controlPointCoordTypeReports(),
+                                        SurfacePoint::Two);
+      sprintf(buf, "RMS Sigma %s(m)%20.8lf\n", coordName.toLatin1().data(),
+              m_statisticsResults->sigmaCoord2StatisticsRms());
       fpOut << buf;
-      sprintf(buf, "MIN Sigma Longitude(m)%20.8lf at %s\n",
-              m_statisticsResults->minSigmaLongitudeDistance().meters(),
-              m_statisticsResults->minSigmaLongitudePointId().toLatin1().data());
+      sprintf(buf, "MIN Sigma %s(m)%20.8lf at %s\n", coordName.toLatin1().data(),
+              m_statisticsResults->minSigmaCoord2Distance().meters(),
+              m_statisticsResults->minSigmaCoord2PointId().toLatin1().data());
       fpOut << buf;
-      sprintf(buf, "MAX Sigma Longitude(m)%20.8lf at %s\n\n",
-              m_statisticsResults->maxSigmaLongitudeDistance().meters(),
-              m_statisticsResults->maxSigmaLongitudePointId().toLatin1().data());
+      sprintf(buf, "MAX Sigma %s(m)%20.8lf at %s\n\n", coordName.toLatin1().data(),
+              m_statisticsResults->maxSigmaCoord2Distance().meters(),
+              m_statisticsResults->maxSigmaCoord2PointId().toLatin1().data());
       fpOut << buf;
+
+      // Coordinate 3 (radius or point z) summary
+      coordName = surfacePointCoordName(m_settings->controlPointCoordTypeReports(),
+                                        SurfacePoint::Three);
       if ( m_settings->solveRadius() ) {
-        sprintf(buf, "   RMS Sigma Radius(m)%20.8lf\n",
-                m_statisticsResults->sigmaRadiusStatisticsRms());
+        sprintf(buf, "RMS Sigma %s(m)%20.8lf\n", coordName.toLatin1().data(),
+                m_statisticsResults->sigmaCoord3StatisticsRms());
         fpOut << buf;
-        sprintf(buf, "   MIN Sigma Radius(m)%20.8lf at %s\n",
-                m_statisticsResults->minSigmaRadiusDistance().meters(),
-                m_statisticsResults->minSigmaRadiusPointId().toLatin1().data());
+        sprintf(buf, "MIN Sigma %s(m)%20.8lf at %s\n", coordName.toLatin1().data(),
+                m_statisticsResults->minSigmaCoord3Distance().meters(),
+                m_statisticsResults->minSigmaCoord3PointId().toLatin1().data());
         fpOut << buf;
-        sprintf(buf, "   MAX Sigma Radius(m)%20.8lf at %s\n",
-                m_statisticsResults->maxSigmaRadiusDistance().meters(),
-                m_statisticsResults->maxSigmaRadiusPointId().toLatin1().data());
+        sprintf(buf, "MAX Sigma %s(m)%20.8lf at %s\n", coordName.toLatin1().data(),
+                m_statisticsResults->maxSigmaCoord3Distance().meters(),
+                m_statisticsResults->maxSigmaCoord3PointId().toLatin1().data());
         fpOut << buf;
       }
       else {
@@ -1205,11 +1306,20 @@ namespace Isis {
     }
 
     // output point summary data header
-    sprintf(buf, "\n\nPOINTS SUMMARY\n==============\n%103s"
+    if (m_settings->controlPointCoordTypeReports() == SurfacePoint::Latitudinal) {
+      sprintf(buf, "\n\nPOINTS SUMMARY\n==============\n%103s"
             "Sigma          Sigma              Sigma\n"
             "           Label         Status     Rays    RMS"
             "        Latitude       Longitude          Radius"
             "        Latitude       Longitude          Radius\n", "");
+    }
+    else {  // Must be Rectangular
+      sprintf(buf, "\n\nPOINTS SUMMARY\n==============\n%103s"
+            "Sigma          Sigma              Sigma\n"
+            "           Label         Status     Rays    RMS"
+            "         Point X            Point Y          Point Z"
+            "         Point X            Point Y          Point Z\n", "");
+    }
     fpOut << buf;
 
     int nPoints = m_statisticsResults->bundleControlPoints().size();
@@ -1230,9 +1340,9 @@ namespace Isis {
     for (int i = 0; i < nPoints; i++) {
       BundleControlPointQsp bundleControlPoint = m_statisticsResults->bundleControlPoints().at(i);
 
+      // Removed radiansToMeters argument 9/18/2018 DAC
       QString pointDetailString =
           bundleControlPoint->formatBundleOutputDetailString(berrorProp,
-                                                           m_statisticsResults->radiansToMeters(),
                                                            solveRadius);
       fpOut << (const char*)pointDetailString.toLatin1().data();
     }
@@ -1274,19 +1384,16 @@ namespace Isis {
 
     // print column headers
     if (m_settings->errorPropagation()) {
-      sprintf(buf, "Point,Point,Accepted,Rejected,Residual,3-d,3-d,3-d,Sigma,"
-              "Sigma,Sigma,Correction,Correction,Correction,Coordinate,"
-              "Coordinate,Coordinate\nID,,,,,Latitude,Longitude,Radius,"
-              "Latitude,Longitude,Radius,Latitude,Longitude,Radius,X,Y,Z\n"
-              "Label,Status,Measures,Measures,RMS,(dd),(dd),(km),(m),(m),(m),"
-              "(m),(m),(m),(km),(km),(km)\n");
+      sprintf(buf, ",,,,,3-d,3-d,3-d,Sigma,Sigma,Sigma,Correction,Correction,Correction,Coordinate,"
+              "Coordinate,Coordinate\nPoint,Point,Accepted,Rejected,Residual,Latitude,Longitude,"
+              "Radius,Latitude,Longitude,Radius,Latitude,Longitude,Radius,X,Y,Z\nLabel,Status,"
+              "Measures,Measures,RMS,(dd),(dd),(km),(m),(m),(m),(m),(m),(m),(km),(km),(km)\n");
     }
     else {
-      sprintf(buf, "Point,Point,Accepted,Rejected,Residual,3-d,3-d,3-d,"
-              "Correction,Correction,Correction,Coordinate,Coordinate,"
-              "Coordinate\n,,,,,Latitude,Longitude,Radius,Latitude,"
-              "Longitude,Radius,X,Y,Z\nLabel,Status,Measures,Measures,"
-              "RMS,(dd),(dd),(km),(m),(m),(m),(km),(km),(km)\n");
+      sprintf(buf, ",,,,,3-d,3-d,3-d,Correction,Correction,Correction,Coordinate,Coordinate,"
+              "Coordinate\nPoint,Point,Accepted,Rejected,Residual,Latitude,Longitude,Radius,"
+              "Latitude,Longitude,Radius,X,Y,Z\nLabel,Status,Measures,Measures,RMS,(dd),(dd),(km),"
+              "(m),(m),(m),(km),(km),(km)\n");
     }
     fpOut << buf;
 
@@ -1314,8 +1421,9 @@ namespace Isis {
       // point corrections and initial sigmas
       boost::numeric::ublas::bounded_vector< double, 3 > corrections = bundlecontrolpoint->
                                                                            corrections();
-      cor_lat_m = corrections[0]*m_statisticsResults->radiansToMeters();
-      cor_lon_m = corrections[1]*m_statisticsResults->radiansToMeters()*cos(dLat*Isis::DEG2RAD);
+      // Now use the local radius to convert radians to meters instead of the target body equatorial radius
+      cor_lat_m = bundlecontrolpoint->adjustedSurfacePoint().LatitudeToMeters(corrections[0]);
+      cor_lon_m = bundlecontrolpoint->adjustedSurfacePoint().LongitudeToMeters(corrections[1]);
       cor_rad_m  = corrections[2]*1000.0;
 
       if (bundlecontrolpoint->type() == ControlPoint::Fixed) {
@@ -1342,7 +1450,7 @@ namespace Isis {
                 numMeasures, numRejectedMeasures, dResidualRms, dLat, dLon, dRadius, dSigmaLat,
                 dSigmaLong, dSigmaRadius, cor_lat_m, cor_lon_m, cor_rad_m, dX, dY, dZ);
       }
-      else
+      else 
         sprintf(buf, "%s,%s,%d,%d,%6.2lf,%16.8lf,%16.8lf,%16.8lf,%16.8lf,%16.8lf,%16.8lf,%16.8lf,"
                      "%16.8lf,%16.8lf\n",
                 bundlecontrolpoint->id().toLatin1().data(), strStatus.toLatin1().data(),
@@ -1460,21 +1568,106 @@ namespace Isis {
    *
    * @param stream The stream to which the BundleSolutionInfo will be saved
    * @param project The project to which this BundleSolutionInfo will be saved
-   * @param newProjectRoot The location of the project root directory. This is not used.
+   * @param newProjectRoot The location of the project root directory.
    */
   void BundleSolutionInfo::save(QXmlStreamWriter &stream, const Project *project,
                                 FileName newProjectRoot) const {
 
+    // TODO: comment below not clear, why is this done?
+    // This is done for unitTest which has no Project
+    // SHOULD WE BE CREATING A SERIALIZED PROJECT AS INPUT TO THIS UNIT TEST?
+    QString relativePath;
+    QString relativeBundlePath;
+    FileName bundleSolutionInfoRoot;
+
+    if (project) {
+      bundleSolutionInfoRoot = FileName(Project::bundleSolutionInfoRoot(newProjectRoot.expanded()) +
+                                      "/" + runTime());
+      QString oldPath = project->bundleSolutionInfoRoot(project->projectRoot()) + "/" + runTime();
+      QString newPath = project->bundleSolutionInfoRoot(newProjectRoot.toString()) + "/" + runTime();
+      //  If project is being saved to new area, create directory and copy files
+      if (oldPath != newPath) {
+        //  Create project folder for BundleSolutionInfo
+        QDir bundleDir(newPath);
+        if (!bundleDir.mkpath(bundleDir.path())) {
+          throw IException(IException::Io,
+                           QString("Failed to create directory [%1]")
+                             .arg(bundleSolutionInfoRoot.path()),
+                           _FILEINFO_);
+        }
+        QString oldFile = oldPath + "/" + FileName(m_outputControl->fileName()).name();
+        QString newFile = newPath + "/" + FileName(m_outputControl->fileName()).name();
+        if (!QFile::copy(oldFile, newFile)) {
+          throw IException(IException::Io,
+                           QString("Failed to copy file [%1] to new file [%2]")
+                             .arg(m_outputControl->fileName()).arg(newFile),
+                           _FILEINFO_);
+        }
+        newFile = newPath + "/" + FileName(m_txtBundleOutputFilename).name();
+        if (!QFile::copy(m_txtBundleOutputFilename, newFile)) {
+          throw IException(IException::Io,
+                           QString("Failed to copy file [%1] to new file [%2]")
+                             .arg(m_txtBundleOutputFilename).arg(newFile),
+                           _FILEINFO_);
+        }
+        newFile = newPath + "/" + FileName(m_csvSavedImagesFilename).name();
+        if (!QFile::copy(m_csvSavedImagesFilename, newFile)) {
+          throw IException(IException::Io,
+                           QString("Failed to copy file [%1] to new file [%2]")
+                             .arg(m_csvSavedImagesFilename).arg(newFile),
+                           _FILEINFO_);        
+        }
+        newFile = newPath + "/" + FileName(m_csvSavedPointsFilename).name();
+        if (!QFile::copy(m_csvSavedPointsFilename, newFile)) {
+          throw IException(IException::Io,
+                           QString("Failed to copy file [%1] to new file [%2]")
+                             .arg(m_csvSavedPointsFilename).arg(newFile),
+                           _FILEINFO_);        
+        }
+        newFile = newPath + "/" + FileName(m_csvSavedResidualsFilename).name();
+        if (!QFile::copy(m_csvSavedResidualsFilename, newFile)) {
+          throw IException(IException::Io,
+                           QString("Failed to copy file [%1] to new file [%2]")
+                             .arg(m_csvSavedResidualsFilename).arg(newFile),
+                           _FILEINFO_);        
+        }
+      }
+
+      // Create relativePath
+      relativePath = m_inputControlNetFileName->expanded().remove(project->newProjectRoot());
+      // Get rid of any preceding "/" , but add on ending "/"
+      if (relativePath.startsWith("/")) {
+        relativePath.remove(0,1);
+      }
+
+      // Create relativeBundlePath for bundleSolutionInfo
+      relativeBundlePath = newPath.remove(project->newProjectRoot());
+      // Get rid of any preceding "/" , but add on ending "/"
+      if (relativeBundlePath.startsWith("/")) {
+        relativeBundlePath.remove(0,1);
+      }
+      relativeBundlePath += "/";
+    }
+
+    // TODO: so, we can do the stuff below if project is NULL?
+
     stream.writeStartElement("bundleSolutionInfo");
     // save ID, cnet file name, and run time to stream
     stream.writeStartElement("generalAttributes");
     stream.writeTextElement("id", m_id->toString());
     stream.writeTextElement("name", m_name);
     stream.writeTextElement("runTime", runTime());
-    stream.writeTextElement("fileName", m_controlNetworkFileName->expanded());
-    stream.writeTextElement("imagesCSV", m_csvSavedImagesFilename);
-    stream.writeTextElement("pointsCSV", m_csvSavedPointsFilename);
-    stream.writeTextElement("residualsCSV", m_csvSavedResidualsFilename);
+
+    stream.writeTextElement("inputFileName",
+                            relativePath);
+    stream.writeTextElement("bundleOutTXT",
+                            relativeBundlePath + FileName(m_txtBundleOutputFilename).name());
+    stream.writeTextElement("imagesCSV",
+                            relativeBundlePath + FileName(m_csvSavedImagesFilename).name());
+    stream.writeTextElement("pointsCSV",
+                            relativeBundlePath + FileName(m_csvSavedPointsFilename).name());
+    stream.writeTextElement("residualsCSV",
+                            relativeBundlePath + FileName(m_csvSavedResidualsFilename).name());
     stream.writeEndElement(); // end general attributes
 
     // save settings to stream
@@ -1483,18 +1676,22 @@ namespace Isis {
     // save statistics to stream
     m_statisticsResults->save(stream, project);
 
-    // save image lists to stream
-    if ( !m_images->isEmpty() ) {
-      stream.writeStartElement("imageLists");
-
-      FileName newResultsRoot(Project::bundleSolutionInfoRoot(newProjectRoot.expanded()) +
-                              "/" + runTime());
-      for (int i = 0; i < m_images->count(); i++) {
-        m_images->at(i)->save(stream, project, newResultsRoot);
+    if (project) {
+      // save adjusted images lists to stream
+      if (!m_adjustedImages->isEmpty()) {
+        stream.writeStartElement("imageLists");
+        for (int i = 0; i < m_adjustedImages->count(); i++) {
+          m_adjustedImages->at(i)->save(stream, project, bundleSolutionInfoRoot);
+        }
+        stream.writeEndElement();
       }
 
+      // save output control
+      stream.writeStartElement("outputControl");
+      m_outputControl->save(stream, project, relativeBundlePath);
       stream.writeEndElement();
     }
+
     stream.writeEndElement(); //end bundleSolutionInfo
   }
 
@@ -1557,10 +1754,18 @@ namespace Isis {
             BundleSettingsQsp(new BundleSettings(m_xmlHandlerProject, reader()));
       }
       else if (localName == "bundleResults") {
-        m_xmlHandlerBundleSolutionInfo->m_statisticsResults = new BundleResults(m_xmlHandlerProject, reader());
+        m_xmlHandlerBundleSolutionInfo->m_statisticsResults = new BundleResults(m_xmlHandlerProject,
+                                                                                reader());
       }
       else if (localName == "imageList") {
-        m_xmlHandlerBundleSolutionInfo->m_images->append(new ImageList(m_xmlHandlerProject, reader()));
+        m_xmlHandlerBundleSolutionInfo->m_adjustedImages->append(
+            new ImageList(m_xmlHandlerProject, reader()));
+      }
+      else if (localName == "outputControl") {
+        FileName outputControlPath = FileName(m_xmlHandlerProject->bundleSolutionInfoRoot() + "/"
+                                              + m_xmlHandlerBundleSolutionInfo->runTime());
+
+        m_xmlHandlerBundleSolutionInfo->m_outputControl = new Control(outputControlPath, reader());
       }
     }
     return true;
@@ -1579,6 +1784,12 @@ namespace Isis {
   bool BundleSolutionInfo::XmlHandler::endElement(const QString &namespaceURI,
                                                   const QString &localName,
                                                   const QString &qName) {
+    // This is done for unitTest which has no Project
+    QString projectRoot;
+    if (m_xmlHandlerProject) {
+      projectRoot = m_xmlHandlerProject->projectRoot() + "/";
+    }
+
     if (localName == "id") {
       // all constructors assign a Uuid - we need to give it a one from the XML
       assert(m_xmlHandlerBundleSolutionInfo->m_id);
@@ -1591,21 +1802,87 @@ namespace Isis {
     else if (localName == "runTime") {
       m_xmlHandlerBundleSolutionInfo->m_runTime = m_xmlHandlerCharacters;
     }
-    else if (localName == "fileName") {
-      assert(m_xmlHandlerBundleSolutionInfo->m_controlNetworkFileName == NULL);
-      m_xmlHandlerBundleSolutionInfo->m_controlNetworkFileName = new FileName(m_xmlHandlerCharacters);
+    else if (localName == "inputFileName") {
+      assert(m_xmlHandlerBundleSolutionInfo->m_inputControlNetFileName == NULL);
+      m_xmlHandlerBundleSolutionInfo->m_inputControlNetFileName = new FileName(
+        projectRoot + m_xmlHandlerCharacters);
+    }
+    else if (localName == "bundleOutTXT") {
+      m_xmlHandlerBundleSolutionInfo->m_txtBundleOutputFilename =
+        projectRoot + m_xmlHandlerCharacters;
     }
     else if (localName == "imagesCSV") {
-      m_xmlHandlerBundleSolutionInfo->m_csvSavedImagesFilename = m_xmlHandlerCharacters;
+      m_xmlHandlerBundleSolutionInfo->m_csvSavedImagesFilename = 
+        projectRoot + m_xmlHandlerCharacters;
     }
     else if (localName == "pointsCSV") {
-      m_xmlHandlerBundleSolutionInfo->m_csvSavedPointsFilename = m_xmlHandlerCharacters;
+      m_xmlHandlerBundleSolutionInfo->m_csvSavedPointsFilename =
+        projectRoot + m_xmlHandlerCharacters;
     }
     else if (localName == "residualsCSV") {
-      m_xmlHandlerBundleSolutionInfo->m_csvSavedResidualsFilename = m_xmlHandlerCharacters;
+      m_xmlHandlerBundleSolutionInfo->m_csvSavedResidualsFilename =
+        projectRoot + m_xmlHandlerCharacters;
     }
 
     m_xmlHandlerCharacters = "";
     return XmlStackedHandler::endElement(namespaceURI, localName, qName);
   }
+
+
+  /**
+   * Determine the control point coordinate name.
+   *
+   * @param type The control point coordinate type (see SurfacePoint.h)
+   * @param coordIdx The coordinate index (see SurfacePoint.h)
+   *
+   * @return @b QString Coordinate name
+   */
+  QString BundleSolutionInfo::surfacePointCoordName(SurfacePoint::CoordinateType type,
+                                                 SurfacePoint::CoordIndex coordIdx) const {
+    QString coordName;
+    switch (m_settings->controlPointCoordTypeReports()) {
+      case SurfacePoint::Latitudinal:
+        switch (coordIdx) {
+          case SurfacePoint::One:
+            coordName = " Latitude";
+            break;
+          case SurfacePoint::Two:
+            coordName = "Longitude";
+            break;
+          case SurfacePoint::Three:
+            coordName = "   Radius";
+            break;
+          default:
+            IString msg = "Unknown surface point index enum ["
+              + toString(coordIdx) + "].";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+            break;
+        }
+        break;
+      case SurfacePoint::Rectangular:
+        switch (coordIdx) {
+          case SurfacePoint::One:
+            coordName = "POINT X";
+            break;
+          case SurfacePoint::Two:
+            coordName = "POINT Y";
+            break;
+          case SurfacePoint::Three:
+            coordName = "POINT Z";
+            break;
+          default:
+            IString msg = "Unknown surface point index enum ["
+              + toString(coordIdx) + "].";
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+            break;
+        }
+        break;
+    default:
+      IString msg = "Unknown surface point coordinate type enum ["
+        + toString(m_settings->controlPointCoordTypeReports()) + "].";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+      break;
+    }
+    return coordName;
+  }
 }
diff --git a/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.h b/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.h
index 593568e91c77dfcc57e3371001d7a8d48a242c54..00303a8178c1997c19bfb616782309b02af0400a 100755
--- a/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.h
+++ b/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.h
@@ -27,6 +27,7 @@
 #include <QString>
 
 #include "BundleSettings.h"
+#include "SurfacePoint.h"
 
 #include "XmlStackedHandler.h"
 
@@ -36,6 +37,7 @@ class QXmlStreamWriter;
 
 namespace Isis {
   class BundleResults;
+  class Control;
   class FileName;
   class ImageList;
   class Project;  //TODO does xml stuff need project???
@@ -44,8 +46,14 @@ namespace Isis {
 
   /**
    * @brief Container class for BundleAdjustment results.
+   *
    * This class includes the settings used to run the bundle adjustment, the resulting statistics
    * values, and the name of the control network used.
+   *  NOTE: BundleSolutionInfo is derived from QObject as it has one slot (perhaps more signals
+   *       and slots in the future? As a child of QObject it should have no copy constructor or
+   *       assignment operator. See for example...
+   *
+   *       http://doc.qt.io/qt-5/qobject.html#no-copy-constructor
    *
    * @ingroup ControlNetworks
    *
@@ -106,6 +114,47 @@ namespace Isis {
    *                           Fixes #4804, #4837.
    *   @history 2017-07-11 Makayla Shepherd - Added bundle naming capabilities. Fixes #4855.
    *   @history 2017-07-28 Makayla Shepherd - Fixed the default naming tag. Fixes #5069.
+   *   @history 2017-08-09 Ian Humphrey - Added m_adjustedImages with setters and getters so the
+   *                           BundleSolutionInfo can know which images have been adjusted (Updated
+   *                           labels). References #4849.
+   *   @history 2017-10-30 Tracie Sucharski - In ::save method, if the newProjectRoot is different
+   *                           from the current projectRoot, save the cnet and csv files and
+   *                           create the directory structure.
+   *   @history 2017-12-20 Tracie Sucharski - Fixed bug which was saving the bundle adjust input
+   *                           control net rather than the output control net.  References #4804.
+   *   @history 2018-01-03 Tracie Sucharski - Changed serialization to use relative paths.
+   *                           Fixes #5104.
+   *   @history 2018-01-17 Tracie Sucharski - Added conditional code to check for null project in
+   *                           xml serialization to allow the unitTest to use xml serialization
+   *                           without having a project. References #5104.
+   *   @history 2018-03-21 Ken Edmundson - Added...
+   *                           1) member variable m_inputControlNetFileName, accessor method, and
+   *                              serialization support. Also added input control net filename to
+   *                              constructor.
+   *                           2) member variable m_outputControl, associated mutator/accessor, and
+   *                              serialization support.
+   *                           3) member variable m_txtBundleOutputFilename and associated accessor
+   *                              for bundleout.txt file.
+   *   @history 2018-03-23 Ken Edmundson - modified...
+   *                           1) removed serialization of output control filename
+   *                           2) serialization of output control to be more robust, ensuring that
+   *                              the control's id is added to project upon reading back in. Also
+   *                              ensures that an open cneteditor widget containing a
+   *                              bundlesolutioninfo's output control is serialized properly.
+   *   @history 2018-03-26 Ken Edmundson - modified save method to properly save output control
+   *                           network file.
+   *   @history 2018-05-22 Ken Edmundson - changed default and copy constructors and assignment
+   *                           operator to private to prevent developer from calling them. Done
+   *                           because BundleSolutionInfo is derived from QObject (see comment
+   *                           below). Removed copy constructor and assignment operator from cpp
+   *                           file.
+   *   @history 2018-06-01 Debbie A. Cook - ( Added 2018-02-21 to BundleXYZ branch) Added
+   *                           coordinate types to report and appropriate headings for columns based
+   *                           on the coordinate type.  Also added a utility method to return the
+   *                           coordinate name based on coordinate type and coordinate index.
+   *                           References #4649 and #501.
+   *   @history 2018-09-18 Debbie A. Cook - Removed radiansToMeters argument.   References
+   *                           #4649 and #501
    */
   class BundleSolutionInfo : public QObject {
     Q_OBJECT
@@ -118,20 +167,26 @@ namespace Isis {
       BundleSolutionInfo(Project *project,
                     XmlStackedHandlerReader *xmlReader,
                     QObject *parent = 0);  //TODO does xml stuff need project???
-      BundleSolutionInfo(const BundleSolutionInfo &src);
+      BundleSolutionInfo() = default;
+
       ~BundleSolutionInfo();
-      BundleSolutionInfo &operator=(const BundleSolutionInfo &src);
 
+      QString savedBundleOutputFilename();
       QString savedImagesFilename();
       QString savedPointsFilename();
       QString savedResidualsFilename();
 
+      void addAdjustedImages(ImageList *images);
       void setOutputStatistics(BundleResults statisticsResults);
+      void setOutputControl(Control *outputControl);
       void setRunTime(QString runTime);
       void setName(QString name);
 
+      QList<ImageList *> adjustedImages() const;
       QString id() const;
-      QString controlNetworkFileName() const;
+      QString inputControlNetFileName() const;
+      QString outputControlNetFileName() const;
+      Control *control() const;
       BundleSettingsQsp bundleSettings();
       BundleResults bundleResults();
       QList<ImageList *> imageList();
@@ -148,6 +203,9 @@ namespace Isis {
 
       void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
 
+      QString surfacePointCoordName(SurfacePoint::CoordinateType type,
+                                    SurfacePoint::CoordIndex coordInx) const;
+
     public slots:
       void updateFileName(Project *);
 
@@ -173,6 +231,8 @@ namespace Isis {
           virtual bool characters(const QString &ch);
           virtual bool endElement(const QString &namespaceURI, const QString &localName,
                                     const QString &qName);
+          QString surfacePointCoordName(SurfacePoint::CoordinateType type,
+                                        SurfacePoint::CoordIndex coordIdx) const;
 
         private:
           Q_DISABLE_COPY(XmlHandler);
@@ -183,27 +243,28 @@ namespace Isis {
       };
 
     private:
-      BundleSolutionInfo();
 
       //! A unique ID for this BundleSolutionInfo object (useful for others to reference this
       //! object when saving to disk).
       QUuid              *m_id;
-      QString             m_name; //!< The name of the bundle. Defaults to the id
-      QString             m_runTime; //!< The run time of the bundle adjust
-      FileName           *m_controlNetworkFileName; //!< The name of the control network
-      BundleSettingsQsp   m_settings; //!< The settings from the bundle adjust
-      BundleResults      *m_statisticsResults; //!< The results of the bundle adjust
-      QList<ImageList *> *m_images; //!< The list of images that were adjusted
-
-      // In theory the path in the BundlesSettings can change while running.  So we save the
+      QString             m_name;                        //!< Name of the bundle. Defaults to the id
+      QString             m_runTime;                     //!< Run time of the bundle adjustment
+      FileName           *m_inputControlNetFileName;     //!< Input control network file name
+      Control            *m_outputControl;               //!< Output control
+      BundleSettingsQsp   m_settings;                    //!< Bundle settings
+      BundleResults      *m_statisticsResults;           //!< Bundle statistical results
+      QList<ImageList *> *m_images;                      //!< Input image list
+      QList<ImageList *> *m_adjustedImages;              //!< Adjusted image list
+
+      // In theory the path in the BundleSettings can change while running. So we save the
       // filenames actually used when the most recent save of the file was done.
+      QString m_txtBundleOutputFilename;
       QString m_csvSavedImagesFilename;
       QString m_csvSavedPointsFilename;
       QString m_csvSavedResidualsFilename;
 
   }; // end BundleSolutionInfo class
 
-
   void setStringAttribute(int locationId, QString locationName,
                           QString attributeName, QString attributeValue);
   QString getStringAttribute(int locationId, QString locationName, QString attributeName);
diff --git a/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.truth b/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.truth
index 8bcf28baf2a7a29d516a7516b8135fdcff49aca3..e41ca66ecc109f930d77aa3aa854033fc7341d64 100644
--- a/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.truth
+++ b/isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.truth
@@ -1,12 +1,14 @@
 Unit test for BundleSolutionInfo...
 Serializing results from the settings/cnet/statistics constructor...
+Created new BundleSettings...
 
 <bundleSolutionInfo>
     <generalAttributes>
         
         <name></name>
         <runTime></runTime>
-        <fileName>cnetfile.net</fileName>
+        <inputFileName></inputFileName>
+        <bundleOutTXT></bundleOutTXT>
         <imagesCSV></imagesCSV>
         <pointsCSV></pointsCSV>
         <residualsCSV></residualsCSV>
@@ -14,8 +16,8 @@ Serializing results from the settings/cnet/statistics constructor...
     <bundleSettings>
         <globalSettings>
             <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+            <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+            <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
             <outlierRejectionOptions rejection="No" multiplier="N/A"/>
             <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
             <maximumLikelihoodEstimation/>
@@ -99,7 +101,8 @@ Serializing test XML object to file...
         
         <name></name>
         <runTime></runTime>
-        <fileName>cnetfile.net</fileName>
+        <inputFileName></inputFileName>
+        <bundleOutTXT></bundleOutTXT>
         <imagesCSV></imagesCSV>
         <pointsCSV></pointsCSV>
         <residualsCSV></residualsCSV>
@@ -107,8 +110,8 @@ Serializing test XML object to file...
     <bundleSettings>
         <globalSettings>
             <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+            <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+            <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
             <outlierRejectionOptions rejection="No" multiplier="N/A"/>
             <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
             <maximumLikelihoodEstimation/>
@@ -191,7 +194,8 @@ Testing XML: Object deserialized as (should match object above):
         
         <name></name>
         <runTime></runTime>
-        <fileName>cnetfile.net</fileName>
+        <inputFileName></inputFileName>
+        <bundleOutTXT></bundleOutTXT>
         <imagesCSV></imagesCSV>
         <pointsCSV></pointsCSV>
         <residualsCSV></residualsCSV>
@@ -199,281 +203,8 @@ Testing XML: Object deserialized as (should match object above):
     <bundleSettings>
         <globalSettings>
             <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
-            <outlierRejectionOptions rejection="No" multiplier="N/A"/>
-            <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
-            <maximumLikelihoodEstimation/>
-            <outputFileOptions fileNamePrefix=""/>
-        </globalSettings>
-        <observationSolveSettingsList>
-            <bundleObservationSolveSettings>
-                
-                <instrumentId></instrumentId>
-                <instrumentPointingOptions solveOption="AnglesOnly" numberCoefSolved="1" degree="2" solveDegree="2" solveTwist="Yes" solveOverExisting="No" interpolationType="3">
-                    <aprioriPointingSigmas>
-                        <sigma>N/A</sigma>
-                    </aprioriPointingSigmas>
-                </instrumentPointingOptions>
-                <instrumentPositionOptions solveOption="None" numberCoefSolved="0" degree="2" solveDegree="2" solveOverHermiteSpline="No" interpolationType="3">
-                    <aprioriPositionSigmas/>
-                </instrumentPositionOptions>
-            </bundleObservationSolveSettings>
-        </observationSolveSettingsList>
-    </bundleSettings>
-    <bundleResults>
-        <correlationMatrix correlationFileName="" covarianceFileName="">
-            <imagesAndParameters/>
-        </correlationMatrix>
-        <generalStatisticsValues>
-            <numberFixedPoints>0</numberFixedPoints>
-            <numberIgnoredPoints>0</numberIgnoredPoints>
-            <numberHeldImages>0</numberHeldImages>
-            <rejectionLimit>0.0</rejectionLimit>
-            <numberRejectedObservations>0</numberRejectedObservations>
-            <numberObservations>0</numberObservations>
-            <numberImageParameters>0</numberImageParameters>
-            <numberConstrainedPointParameters>0</numberConstrainedPointParameters>
-            <numberConstrainedImageParameters>0</numberConstrainedImageParameters>
-            <numberConstrainedTargetParameters>0</numberConstrainedTargetParameters>
-            <numberUnknownParameters>0</numberUnknownParameters>
-            <degreesOfFreedom>-1</degreesOfFreedom>
-            <sigma0>0.0</sigma0>
-            <converged>No</converged>
-        </generalStatisticsValues>
-        <rms>
-            <residuals x="0.0" y="0.0" xy="0.0"/>
-            <sigmas lat="0.0" lon="0.0" rad="0.0"/>
-            <imageResidualsLists>
-                <residualsList listSize="0"/>
-                <sampleList listSize="0"/>
-                <lineList listSize="0"/>
-            </imageResidualsLists>
-            <imageSigmasLists>
-                <xSigmas listSize="0"/>
-                <ySigmas listSize="0"/>
-                <zSigmas listSize="0"/>
-                <raSigmas listSize="0"/>
-                <decSigmas listSize="0"/>
-                <twistSigmas listSize="0"/>
-            </imageSigmasLists>
-        </rms>
-        <elapsedTime time="0.0" errorProp="0.0"/>
-        <minMaxSigmas>
-            <minLat value="1000000000000.0" pointId=""/>
-            <maxLat value="0.0" pointId=""/>
-            <minLon value="1000000000000.0" pointId=""/>
-            <maxLon value="0.0" pointId=""/>
-            <minRad value="1000000000000.0" pointId=""/>
-            <maxRad value="0.0" pointId=""/>
-        </minMaxSigmas>
-        <maximumLikelihoodEstimation numberModels="0" maximumLikelihoodIndex="0" maximumLikelihoodMedianR2Residuals="0.0">
-            <cumulativeProbabilityCalculator/>
-            <residualsCumulativeProbabilityCalculator/>
-        </maximumLikelihoodEstimation>
-    </bundleResults>
-</bundleSolutionInfo> 
-
-
-Testing copy constructor...
-
-<bundleSolutionInfo>
-    <generalAttributes>
-        
-        <name></name>
-        <runTime></runTime>
-        <fileName>cnetfile.net</fileName>
-        <imagesCSV></imagesCSV>
-        <pointsCSV></pointsCSV>
-        <residualsCSV></residualsCSV>
-    </generalAttributes>
-    <bundleSettings>
-        <globalSettings>
-            <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
-            <outlierRejectionOptions rejection="No" multiplier="N/A"/>
-            <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
-            <maximumLikelihoodEstimation/>
-            <outputFileOptions fileNamePrefix=""/>
-        </globalSettings>
-        <observationSolveSettingsList>
-            <bundleObservationSolveSettings>
-                
-                <instrumentId></instrumentId>
-                <instrumentPointingOptions solveOption="AnglesOnly" numberCoefSolved="1" degree="2" solveDegree="2" solveTwist="Yes" solveOverExisting="No" interpolationType="3">
-                    <aprioriPointingSigmas>
-                        <sigma>N/A</sigma>
-                    </aprioriPointingSigmas>
-                </instrumentPointingOptions>
-                <instrumentPositionOptions solveOption="None" numberCoefSolved="0" degree="2" solveDegree="2" solveOverHermiteSpline="No" interpolationType="3">
-                    <aprioriPositionSigmas/>
-                </instrumentPositionOptions>
-            </bundleObservationSolveSettings>
-        </observationSolveSettingsList>
-    </bundleSettings>
-    <bundleResults>
-        <correlationMatrix correlationFileName="" covarianceFileName="">
-            <imagesAndParameters/>
-        </correlationMatrix>
-        <generalStatisticsValues>
-            <numberFixedPoints>0</numberFixedPoints>
-            <numberIgnoredPoints>0</numberIgnoredPoints>
-            <numberHeldImages>0</numberHeldImages>
-            <rejectionLimit>0.0</rejectionLimit>
-            <numberRejectedObservations>0</numberRejectedObservations>
-            <numberObservations>0</numberObservations>
-            <numberImageParameters>0</numberImageParameters>
-            <numberConstrainedPointParameters>0</numberConstrainedPointParameters>
-            <numberConstrainedImageParameters>0</numberConstrainedImageParameters>
-            <numberConstrainedTargetParameters>0</numberConstrainedTargetParameters>
-            <numberUnknownParameters>0</numberUnknownParameters>
-            <degreesOfFreedom>-1</degreesOfFreedom>
-            <sigma0>0.0</sigma0>
-            <converged>No</converged>
-        </generalStatisticsValues>
-        <rms>
-            <residuals x="0.0" y="0.0" xy="0.0"/>
-            <sigmas lat="0.0" lon="0.0" rad="0.0"/>
-            <imageResidualsLists>
-                <residualsList listSize="0"/>
-                <sampleList listSize="0"/>
-                <lineList listSize="0"/>
-            </imageResidualsLists>
-            <imageSigmasLists>
-                <xSigmas listSize="0"/>
-                <ySigmas listSize="0"/>
-                <zSigmas listSize="0"/>
-                <raSigmas listSize="0"/>
-                <decSigmas listSize="0"/>
-                <twistSigmas listSize="0"/>
-            </imageSigmasLists>
-        </rms>
-        <elapsedTime time="0.0" errorProp="0.0"/>
-        <minMaxSigmas>
-            <minLat value="1000000000000.0" pointId=""/>
-            <maxLat value="0.0" pointId=""/>
-            <minLon value="1000000000000.0" pointId=""/>
-            <maxLon value="0.0" pointId=""/>
-            <minRad value="1000000000000.0" pointId=""/>
-            <maxRad value="0.0" pointId=""/>
-        </minMaxSigmas>
-        <maximumLikelihoodEstimation numberModels="0" maximumLikelihoodIndex="0" maximumLikelihoodMedianR2Residuals="0.0">
-            <cumulativeProbabilityCalculator/>
-            <residualsCumulativeProbabilityCalculator/>
-        </maximumLikelihoodEstimation>
-    </bundleResults>
-</bundleSolutionInfo> 
-
-
-Testing assignment operator to set this equal to itself...
-
-<bundleSolutionInfo>
-    <generalAttributes>
-        
-        <name></name>
-        <runTime></runTime>
-        <fileName>cnetfile.net</fileName>
-        <imagesCSV></imagesCSV>
-        <pointsCSV></pointsCSV>
-        <residualsCSV></residualsCSV>
-    </generalAttributes>
-    <bundleSettings>
-        <globalSettings>
-            <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
-            <outlierRejectionOptions rejection="No" multiplier="N/A"/>
-            <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
-            <maximumLikelihoodEstimation/>
-            <outputFileOptions fileNamePrefix=""/>
-        </globalSettings>
-        <observationSolveSettingsList>
-            <bundleObservationSolveSettings>
-                
-                <instrumentId></instrumentId>
-                <instrumentPointingOptions solveOption="AnglesOnly" numberCoefSolved="1" degree="2" solveDegree="2" solveTwist="Yes" solveOverExisting="No" interpolationType="3">
-                    <aprioriPointingSigmas>
-                        <sigma>N/A</sigma>
-                    </aprioriPointingSigmas>
-                </instrumentPointingOptions>
-                <instrumentPositionOptions solveOption="None" numberCoefSolved="0" degree="2" solveDegree="2" solveOverHermiteSpline="No" interpolationType="3">
-                    <aprioriPositionSigmas/>
-                </instrumentPositionOptions>
-            </bundleObservationSolveSettings>
-        </observationSolveSettingsList>
-    </bundleSettings>
-    <bundleResults>
-        <correlationMatrix correlationFileName="" covarianceFileName="">
-            <imagesAndParameters/>
-        </correlationMatrix>
-        <generalStatisticsValues>
-            <numberFixedPoints>0</numberFixedPoints>
-            <numberIgnoredPoints>0</numberIgnoredPoints>
-            <numberHeldImages>0</numberHeldImages>
-            <rejectionLimit>0.0</rejectionLimit>
-            <numberRejectedObservations>0</numberRejectedObservations>
-            <numberObservations>0</numberObservations>
-            <numberImageParameters>0</numberImageParameters>
-            <numberConstrainedPointParameters>0</numberConstrainedPointParameters>
-            <numberConstrainedImageParameters>0</numberConstrainedImageParameters>
-            <numberConstrainedTargetParameters>0</numberConstrainedTargetParameters>
-            <numberUnknownParameters>0</numberUnknownParameters>
-            <degreesOfFreedom>-1</degreesOfFreedom>
-            <sigma0>0.0</sigma0>
-            <converged>No</converged>
-        </generalStatisticsValues>
-        <rms>
-            <residuals x="0.0" y="0.0" xy="0.0"/>
-            <sigmas lat="0.0" lon="0.0" rad="0.0"/>
-            <imageResidualsLists>
-                <residualsList listSize="0"/>
-                <sampleList listSize="0"/>
-                <lineList listSize="0"/>
-            </imageResidualsLists>
-            <imageSigmasLists>
-                <xSigmas listSize="0"/>
-                <ySigmas listSize="0"/>
-                <zSigmas listSize="0"/>
-                <raSigmas listSize="0"/>
-                <decSigmas listSize="0"/>
-                <twistSigmas listSize="0"/>
-            </imageSigmasLists>
-        </rms>
-        <elapsedTime time="0.0" errorProp="0.0"/>
-        <minMaxSigmas>
-            <minLat value="1000000000000.0" pointId=""/>
-            <maxLat value="0.0" pointId=""/>
-            <minLon value="1000000000000.0" pointId=""/>
-            <maxLon value="0.0" pointId=""/>
-            <minRad value="1000000000000.0" pointId=""/>
-            <maxRad value="0.0" pointId=""/>
-        </minMaxSigmas>
-        <maximumLikelihoodEstimation numberModels="0" maximumLikelihoodIndex="0" maximumLikelihoodMedianR2Residuals="0.0">
-            <cumulativeProbabilityCalculator/>
-            <residualsCumulativeProbabilityCalculator/>
-        </maximumLikelihoodEstimation>
-    </bundleResults>
-</bundleSolutionInfo> 
-
-
-Testing assignment operator to create a new results object...
-
-<bundleSolutionInfo>
-    <generalAttributes>
-        
-        <name></name>
-        <runTime></runTime>
-        <fileName>cnetfile.net</fileName>
-        <imagesCSV></imagesCSV>
-        <pointsCSV></pointsCSV>
-        <residualsCSV></residualsCSV>
-    </generalAttributes>
-    <bundleSettings>
-        <globalSettings>
-            <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+            <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+            <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
             <outlierRejectionOptions rejection="No" multiplier="N/A"/>
             <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
             <maximumLikelihoodEstimation/>
@@ -555,7 +286,8 @@ Testing mutator methods...
         
         <name>xxx</name>
         <runTime>xxx</runTime>
-        <fileName>cnetfile.net</fileName>
+        <inputFileName></inputFileName>
+        <bundleOutTXT></bundleOutTXT>
         <imagesCSV></imagesCSV>
         <pointsCSV></pointsCSV>
         <residualsCSV></residualsCSV>
@@ -563,8 +295,8 @@ Testing mutator methods...
     <bundleSettings>
         <globalSettings>
             <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+            <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+            <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
             <outlierRejectionOptions rejection="No" multiplier="N/A"/>
             <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
             <maximumLikelihoodEstimation/>
@@ -657,7 +389,8 @@ Serializing test XML object to file...
         
         <name>xxx</name>
         <runTime>xxx</runTime>
-        <fileName>cnetfile.net</fileName>
+        <inputFileName></inputFileName>
+        <bundleOutTXT>bundleout.txt</bundleOutTXT>
         <imagesCSV>bundleout_images.csv</imagesCSV>
         <pointsCSV>bundleout_points.csv</pointsCSV>
         <residualsCSV>residuals.csv</residualsCSV>
@@ -665,8 +398,8 @@ Serializing test XML object to file...
     <bundleSettings>
         <globalSettings>
             <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+            <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+            <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
             <outlierRejectionOptions rejection="No" multiplier="N/A"/>
             <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
             <maximumLikelihoodEstimation/>
@@ -760,7 +493,8 @@ Testing XML: Object deserialized as (should match object above):
         
         <name>xxx</name>
         <runTime>xxx</runTime>
-        <fileName>cnetfile.net</fileName>
+        <inputFileName></inputFileName>
+        <bundleOutTXT>bundleout.txt</bundleOutTXT>
         <imagesCSV>bundleout_images.csv</imagesCSV>
         <pointsCSV>bundleout_points.csv</pointsCSV>
         <residualsCSV>residuals.csv</residualsCSV>
@@ -768,8 +502,8 @@ Testing XML: Object deserialized as (should match object above):
     <bundleSettings>
         <globalSettings>
             <validateNetwork>Yes</validateNetwork>
-            <solveOptions solveObservationMode="No" solveRadius="No" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
-            <aprioriSigmas latitude="N/A" longitude="N/A" radius="N/A"/>
+            <solveOptions solveObservationMode="No" solveRadius="No" controlPointCoordTypeReports="0" controlPointCoordTypeBundle="0" updateCubeLabel="No" errorPropagation="No" createInverseMatrix="No"/>
+            <aprioriSigmas pointCoord1="N/A" pointCoord2="N/A" pointCoord3="N/A"/>
             <outlierRejectionOptions rejection="No" multiplier="N/A"/>
             <convergenceCriteriaOptions convergenceCriteria="Sigma0" threshold="1.0e-10" maximumIterations="50"/>
             <maximumLikelihoodEstimation/>
diff --git a/isis/src/control/objs/BundleSolutionInfo/unitTest.cpp b/isis/src/control/objs/BundleSolutionInfo/unitTest.cpp
index 7b9c8932d2ccc8e388fc939aa0a83251c6490a23..2751b0a09081f88a1c8b260dd931fb16e4fef201 100755
--- a/isis/src/control/objs/BundleSolutionInfo/unitTest.cpp
+++ b/isis/src/control/objs/BundleSolutionInfo/unitTest.cpp
@@ -76,8 +76,11 @@ namespace Isis {
  * @internal
  *   @history 2015-09-03 Jeannie Backer - Commented out xml code test until we determine whether
  *                           we will keep this code.
- *   @history 2016-10-13 Ian Humphrey - Changed addnew call to addNew(). References #4293.
- *   @history 2017-04-24 Ian Humphrey - Replaced pvlObject() with XML save(). Fixes #4797.
+ *   @history 2016-10-13 Ian Humphrey -  Changed addnew call to addNew(). References #4293.
+ *   @history 2017-04-24 Ian Humphrey -  Replaced pvlObject() with XML save(). Fixes #4797.
+ *   @history 2018-05-24 Ken Edmundson - Removed testing for copy constructor and assignment
+ *                                       operator because these have been removed from
+ *                                       BundleSolutionInfo.
  */
 int main(int argc, char *argv[]) {
   Preference::Preferences(true);
@@ -90,6 +93,8 @@ int main(int argc, char *argv[]) {
 
     // create default settings and statistics objects to pass into results object
     BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings);
+    qDebug() << "Created new BundleSettings...";
+
     settings->setOutputFilePrefix("");
     FileName cnetFile("cnetfile.net");
     BundleResults statistics;
@@ -117,14 +122,18 @@ int main(int argc, char *argv[]) {
     ControlNet outNet;
     outNet.AddPoint(freePoint);
     outNet.AddPoint(fixedPoint);
-    BundleControlPointQsp freeBundleControlPoint(new BundleControlPoint(freePoint));
-    BundleControlPointQsp fixedBundleControlPoint(new BundleControlPoint(fixedPoint));
+    // Obsolete argument - now using local radius.
+    // double metersToRadians = 1./23.68;  // Use what BundleResults used
+    BundleControlPointQsp freeBundleControlPoint(
+                                                 new BundleControlPoint(settings, freePoint));
+    BundleControlPointQsp fixedBundleControlPoint(
+                                     new BundleControlPoint(settings, fixedPoint));
     QVector<BundleControlPointQsp> bundleControlPointVector;
     bundleControlPointVector.append(freeBundleControlPoint);
     bundleControlPointVector.append(fixedBundleControlPoint);
     Camera *camera = NULL;
     BundleImage bundleImage(camera,
-                            "TestImageSerialNumber",
+                            "Ignored",
                             "TestImageFileName");
     BundleObservationVector observationVector;
     QObject *parent = NULL;
@@ -132,16 +141,13 @@ int main(int argc, char *argv[]) {
                              "ObservationNumber1",
                              "Instrument1",
                              BundleSettingsQsp(new BundleSettings));
-
     statistics.setBundleControlPoints(bundleControlPointVector);
     statistics.setOutputControlNet(ControlNetQsp(new ControlNet(outNet)));
     statistics.setObservations(observationVector);
     QList<ImageList *> imgList;
     BundleSolutionInfo results(settings, cnetFile, statistics, imgList, parent);
-
     printXml(results);
 
-
     qDebug() << "";
     qDebug() << "Testing XML serialization 1: round trip serialization of BundleSolution object...";
     qDebug() << "Serializing test XML object to file...";
@@ -165,26 +171,12 @@ int main(int argc, char *argv[]) {
     qDebug() << "Testing XML: reading serialized BundleResults back in...";
     XmlStackedHandlerReader reader1;
     BundleSolutionInfoXmlHandlerTester bsFromXml1(project, &reader1, xmlFile1);
+    // Now manually set the control net in BundleSolutionInfo's BundleResults to
+    //  complete its initialization.  This seems awkward.
+    bsFromXml1.bundleResults().setOutputControlNet(ControlNetQsp(new ControlNet(outNet)));
     qDebug() << "Testing XML: Object deserialized as (should match object above):";
     printXml(bsFromXml1);  // Save comparison output to log file
 
-
-
-    qDebug() << "Testing copy constructor...";
-
-    BundleSolutionInfo copySolutionInfo(results);
-    printXml(copySolutionInfo);
-
-    qDebug() << "Testing assignment operator to set this equal to itself...";
-    results = results;
-    printXml(results);
-
-    qDebug() << "Testing assignment operator to create a new results object...";
-
-    BundleSolutionInfo assignmentOpSolutionInfo = results;
-    assignmentOpSolutionInfo = results;
-    printXml(assignmentOpSolutionInfo);
-
     qDebug() << "Testing mutator methods...";
     statistics.setRejectionLimit(0.5);
     results.setOutputStatistics(statistics);
@@ -212,8 +204,6 @@ int main(int argc, char *argv[]) {
     }
     qDebug() << "";
 
-
-
     Statistics rmsStats;
     rmsStats.SetValidRange(0, 100);
     rmsStats.AddData(0);
diff --git a/isis/src/control/objs/BundleUtilities/BundleControlPoint.cpp b/isis/src/control/objs/BundleUtilities/BundleControlPoint.cpp
index d437cf2a6d085015941d4446e92fd53ce872ba3a..01ebc9a490f5c8a19e95ca4af38058067feb1912 100644
--- a/isis/src/control/objs/BundleUtilities/BundleControlPoint.cpp
+++ b/isis/src/control/objs/BundleUtilities/BundleControlPoint.cpp
@@ -2,9 +2,15 @@
 
 #include <QDebug>
 
+// boost lib
+#include <boost/numeric/ublas/vector_proxy.hpp>
+
+// Isis lib
 #include "ControlMeasure.h"
 #include "Latitude.h"
+#include "LinearAlgebra.h"
 #include "Longitude.h"
+#include "SparseBlockMatrix.h"
 #include "SpecialPixel.h"
 
 namespace Isis {
@@ -13,11 +19,11 @@ namespace Isis {
   /**
    * Constructs a BundleControlPoint object from a ControlPoint. Only the 
    * non-ignored measures are added to the BundleControlPoint. 
-   *  
    * @param controlPoint Pointer to a ControlPoint that will be used to 
    *                     construct this BundleControlPoint.
    */
-  BundleControlPoint::BundleControlPoint(ControlPoint *controlPoint) {
+  BundleControlPoint::BundleControlPoint(const BundleSettingsQsp bundleSettings,
+                                         ControlPoint *controlPoint) {
     m_controlPoint = controlPoint;
 
     // setup vector of BundleMeasures for this control point
@@ -45,6 +51,12 @@ namespace Isis {
     m_adjustedSigmas[0] = Isis::Null;
     m_adjustedSigmas[1] = Isis::Null;
     m_adjustedSigmas[2] = Isis::Null;
+
+    // initialize coordinate type from settings
+    // m_coordType = SurfacePoint::Latitudinal;
+    m_coordTypeReports = bundleSettings->controlPointCoordTypeReports();
+    m_coordTypeBundle = bundleSettings->controlPointCoordTypeBundle();
+    setWeights(bundleSettings);
   }
 
 
@@ -75,7 +87,7 @@ namespace Isis {
 
     // sanity check
     clear();
-
+    
     m_controlPoint = src.m_controlPoint;
 
     int numMeasures = src.size();
@@ -88,6 +100,9 @@ namespace Isis {
     m_adjustedSigmas = src.m_adjustedSigmas;
     m_weights = src.m_weights;
     m_nicVector = src.m_nicVector;
+    m_coordTypeReports = src.m_coordTypeReports;
+    m_coordTypeBundle = src.m_coordTypeBundle;
+    // *** TODO *** Why is the cholmodQMatrix not copied? Ask Ken
   }
 
 
@@ -160,13 +175,11 @@ namespace Isis {
    * @param settings A QSharedPointer to BundleSettings object.
    * @param metersToRadians A double precision conversion factor.
    */
-  void BundleControlPoint::setWeights(const BundleSettingsQsp settings, double metersToRadians) {
-
-    double d;
+  void BundleControlPoint::setWeights(const BundleSettingsQsp settings) {
 
-    double globalLatitudeAprioriSigma = settings->globalLatitudeAprioriSigma();
-    double globalLongitudeAprioriSigma = settings->globalLongitudeAprioriSigma();
-    double globalRadiusAprioriSigma = settings->globalRadiusAprioriSigma();
+    double globalPointCoord1AprioriSigma = settings->globalPointCoord1AprioriSigma();
+    double globalPointCoord2AprioriSigma = settings->globalPointCoord2AprioriSigma();
+    double globalPointCoord3AprioriSigma = settings->globalPointCoord3AprioriSigma();
 
     if (m_controlPoint->GetType() == ControlPoint::Fixed) {
       m_weights[0] = 1.0e+50;
@@ -174,65 +187,74 @@ namespace Isis {
       m_weights[2] = 1.0e+50;
       // m_aprioriSigmas = Isis::Null by default
     }
+    
     if (m_controlPoint->GetType() == ControlPoint::Free) {
-      if (!IsSpecial(globalLatitudeAprioriSigma)) {
-        m_aprioriSigmas[0] = globalLatitudeAprioriSigma;
-        d = globalLatitudeAprioriSigma*metersToRadians;
-        m_weights[0] = 1.0/(d*d);
-      } // else m_aprioriSigma = Isis::Null
-        // m_weights = 0.0
-      if (!IsSpecial(globalLongitudeAprioriSigma)) {
-        m_aprioriSigmas[1] = globalLongitudeAprioriSigma;
-        d = globalLongitudeAprioriSigma*metersToRadians;
-        m_weights[1] = 1.0/(d*d);
+      // Global sigmas are temporary and should not be stored in the control net.  Currently
+      // global sigmas are always in meters.  Make sure unit of weights is 1/(var unit squared),
+      // where var is a value being solved for in the adjustment.  Latitude and longitude are in
+      // radians and everything else is in km.
+      if (!IsSpecial(globalPointCoord1AprioriSigma)) {
+        setSigmaWeightFromGlobals(globalPointCoord1AprioriSigma, 0);
       } // else m_aprioriSigma = Isis::Null
         // m_weights = 0.0
-      if (!settings->solveRadius()) {
+      if (!IsSpecial(globalPointCoord2AprioriSigma)) {
+        m_aprioriSigmas[1] = globalPointCoord2AprioriSigma;
+        setSigmaWeightFromGlobals(globalPointCoord2AprioriSigma, 1);
+      }// else m_aprioriSigma = Isis::Null
+       // m_weights = 0.0
+      if (m_coordTypeBundle == SurfacePoint::Latitudinal && !settings->solveRadius()) {
         m_weights[2] = 1.0e+50;
       }
       else {
-        if (!IsSpecial(globalRadiusAprioriSigma)) {
-          m_aprioriSigmas[2] = globalRadiusAprioriSigma;
-          d = globalRadiusAprioriSigma*0.001;
-          m_weights[2] = 1.0/(d*d);
+        if (!IsSpecial(globalPointCoord3AprioriSigma)) {
+          setSigmaWeightFromGlobals(globalPointCoord3AprioriSigma, 2); 
         }
       }
     }
     if (m_controlPoint->GetType() == ControlPoint::Constrained) {
-      if ( m_controlPoint->IsLatitudeConstrained() ) {
-        m_aprioriSigmas[0] = m_controlPoint->GetAprioriSurfacePoint().GetLatSigmaDistance().meters();
-        m_weights[0] = m_controlPoint->GetAprioriSurfacePoint().GetLatWeight();
+      // *** Be careful...Is m_aprioriSigmas an output (for reports) or bundle variable? ***
+
+      // Assuming the member variable sigmas are for output reports (internal use only) so use
+      //   the report coordinate type to calculate.  All point sigmas are in meters.  Radius weights
+      //   are in 1/km^2.  Make x/y/z weights the same because BundleAdjust works in km.
+      //   Weights and corrections go into the bundle so use bundle coordinate type.
+      if ( m_controlPoint->IsCoord1Constrained() ) {
+        m_aprioriSigmas[0] =
+          m_controlPoint->GetAprioriSurfacePoint().GetSigmaDistance
+                      (m_coordTypeReports, SurfacePoint::One).meters();
+        m_weights[0] =
+             m_controlPoint->GetAprioriSurfacePoint().GetWeight(m_coordTypeBundle, SurfacePoint::One);
       }
-      else if (!IsSpecial(globalLatitudeAprioriSigma)) {
-        m_aprioriSigmas[0] = globalLatitudeAprioriSigma;
-        d = globalLatitudeAprioriSigma*metersToRadians;
-        m_weights[0] = 1.0/(d*d);
+      else if (!IsSpecial(globalPointCoord1AprioriSigma)) {
+        setSigmaWeightFromGlobals(globalPointCoord1AprioriSigma, 0); 
       } // else not constrained and global sigma is Null, then  m_aprioriSigmas = Isis::Null
         // m_weights = 0.0
 
-      if ( m_controlPoint->IsLongitudeConstrained() ) {
-        m_aprioriSigmas[1] = m_controlPoint->GetAprioriSurfacePoint().GetLonSigmaDistance().meters();
-        m_weights[1] = m_controlPoint->GetAprioriSurfacePoint().GetLonWeight();
+      if ( m_controlPoint->IsCoord2Constrained() ) {
+        m_aprioriSigmas[1] =
+          m_controlPoint->GetAprioriSurfacePoint().GetSigmaDistance
+            (m_coordTypeReports, SurfacePoint::Two).meters();
+        m_weights[1] =
+          m_controlPoint->GetAprioriSurfacePoint().GetWeight(m_coordTypeBundle, SurfacePoint::Two);
       }
-      else if (!IsSpecial(globalLongitudeAprioriSigma)) {
-        m_aprioriSigmas[1] = globalLongitudeAprioriSigma;
-        d = globalLongitudeAprioriSigma*metersToRadians;
-        m_weights[1] = 1.0/(d*d);
+      else if (!IsSpecial(globalPointCoord2AprioriSigma)) {
+        setSigmaWeightFromGlobals(globalPointCoord2AprioriSigma, 1); 
       } // else not constrained and global sigma is Null, then  m_aprioriSigmas = Isis::Null
         // m_weights = 0.0
 
-      if (!settings->solveRadius()) {
+      if (m_coordTypeBundle == SurfacePoint::Latitudinal && !settings->solveRadius()) {
         m_weights[2] = 1.0e+50;
       }
       else {
-        if ( m_controlPoint->IsRadiusConstrained() ) {
-          m_aprioriSigmas[2] = m_controlPoint->GetAprioriSurfacePoint().GetLocalRadiusSigma().meters();
-          m_weights[2] = m_controlPoint->GetAprioriSurfacePoint().GetLocalRadiusWeight();
+        if ( m_controlPoint->IsCoord3Constrained() ) {
+          m_aprioriSigmas[2] =
+            m_controlPoint->GetAprioriSurfacePoint().GetSigmaDistance
+            (m_coordTypeReports, SurfacePoint::Three).meters();
+          m_weights[2] = m_controlPoint->GetAprioriSurfacePoint().GetWeight
+            (m_coordTypeBundle, SurfacePoint::Three);
         }
-        else if (!IsSpecial(globalRadiusAprioriSigma)) {
-          m_aprioriSigmas[2] = globalRadiusAprioriSigma;
-          d = globalRadiusAprioriSigma*0.001;
-          m_weights[2] = 1.0/(d*d);
+        else if (!IsSpecial(globalPointCoord3AprioriSigma)) {
+          setSigmaWeightFromGlobals(globalPointCoord3AprioriSigma, 2); 
         } // else not constrained and global sigma is Null, then  m_aprioriSigmas = Isis::Null
           // m_weights = 0.0
       }
@@ -240,6 +262,76 @@ namespace Isis {
   }
 
 
+  /**
+   * Sets the member sigmas and weights from a global sigma.. 
+   * 
+// *** TODO *** Should index be SurfacePoint::CoordIndex? 
+   * @param gSigma The global sigma to assign.
+   * @param index The index of the point coordinate being set (0, 1, or 2).
+   * @param cFactor The conversion factor applied to gSigma to match bundle variable units.
+   * 
+    * @see formatAprioriSigmaString() 
+   */
+  void BundleControlPoint::setSigmaWeightFromGlobals(double gSigma, int index) {    
+    m_aprioriSigmas[index] = gSigma;
+    
+    switch (index) {
+      case 0:
+        if (m_coordTypeBundle == SurfacePoint::Latitudinal) {
+          m_aprioriSigmas[index] = gSigma;
+          double sigmaRadians =
+            m_controlPoint->GetAprioriSurfacePoint().MetersToLatitude(gSigma);  // m to radians
+          if (sigmaRadians > DBL_EPSILON) {
+            m_weights[index] = 1. / (sigmaRadians*sigmaRadians);  // 1/radians^2
+          }
+        }
+        else if (m_coordTypeBundle == SurfacePoint::Rectangular) {
+          double sigmakm = gSigma * .001;  // km
+          if (sigmakm > DBL_EPSILON) {
+            m_weights[0] = 1./ (sigmakm*sigmakm); // 1/km^2
+          }
+        }
+        else {
+          IString msg ="Unknown surface point coordinate type enum ["
+            + toString(m_coordTypeBundle) + "]." ;
+          throw IException(IException::Programmer, msg, _FILEINFO_);
+        }
+        break;
+      case 1:  
+        // if (!IsSpecial(globalPointCoord2AprioriSigma)) {
+        if (m_coordTypeBundle == SurfacePoint::Latitudinal) {
+          double sigmaRadians =
+            m_controlPoint->GetAprioriSurfacePoint().MetersToLongitude(gSigma);  // m to radians
+          if (sigmaRadians > DBL_EPSILON) {
+            m_weights[1] = 1. / (sigmaRadians*sigmaRadians);  // 1/radians^2
+          }
+        }
+        else if (m_coordTypeBundle == SurfacePoint::Rectangular) {
+          double sigmakm = gSigma * 0.001;  // km
+          if (sigmakm > DBL_EPSILON) m_weights[1] = 1./ (sigmakm*sigmakm); // 1/km^2
+        }
+        else {
+          IString msg ="Unknown surface point coordinate type enum ["
+            + toString(m_coordTypeBundle) + "]." ;
+          throw IException(IException::Programmer, msg, _FILEINFO_);
+        } 
+        break;
+      
+      case 2:
+      // Coordinate 2 is either latitudinal radius or rectangular z, both in m
+      {
+        double sigmakm = gSigma * .001;  // km
+        m_weights[2] = 1./ (sigmakm*sigmakm); // 1/km^2
+        }
+        break;
+      
+      default:
+          IString msg ="Unknown coordinate index [" + toString(index) + "]." ;
+          throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+  }
+
+
   /**
    * Resets the number of rejected measures for this BundleControlPoint to zero.
    *
@@ -250,6 +342,73 @@ namespace Isis {
    }
 
 
+  /**
+   * Perform the matrix multiplication v2 = alpha ( Q x v1 ).
+   *
+   * @param alpha A constant multiplier.
+   * @param sparseNormals The sparse block normal equations matrix.
+   * @param v2 The output vector.
+   * @param Q A sparse block matrix.
+   * @param v1 A vector.
+   */
+  void BundleControlPoint::productAlphaAV(double alpha,
+                                    SparseBlockMatrix &sparseNormals,
+                                    LinearAlgebra::Vector &v1) {
+
+    QMapIterator< int, LinearAlgebra::Matrix * > Qit(m_cholmodQMatrix);
+
+    int subrangeStart, subrangeEnd;
+    
+    while ( Qit.hasNext() ) {
+      Qit.next();
+
+      int columnIndex = Qit.key();
+
+      subrangeStart = sparseNormals.at(columnIndex)->startColumn();
+      subrangeEnd = subrangeStart + Qit.value()->size2();
+      
+      m_nicVector += alpha * prod(*(Qit.value()),subrange(v1,subrangeStart,subrangeEnd));
+    }
+  }
+
+
+  /**
+   * Apply the parameter corrections to the bundle control point.
+   *
+   * @param imageSolution Image vector.
+   * @param factor The unit conversion factor to use on lat and lon rad or x/y/z km.
+   * @param target The BundleTargetBody.
+   */
+  void BundleControlPoint::applyParameterCorrections(LinearAlgebra::Vector imageSolution,
+                                               SparseBlockMatrix &sparseNormals,
+                                               const BundleTargetBodyQsp target) {
+    if (!isRejected()) {
+        
+      // subtract product of Q and nj from NIC
+      productAlphaAV(-1.0, sparseNormals, imageSolution);
+        
+      // update adjusted surface point appropriately for the coordinate type
+      switch (m_coordTypeBundle) {
+        case SurfacePoint::Latitudinal:
+          updateAdjustedSurfacePointLatitudinally(target);
+          break;
+        case SurfacePoint::Rectangular:
+          updateAdjustedSurfacePointRectangularly();
+          break;
+        default:
+            IString msg ="Unknown surface point coordinate type enum ["
+            + toString(m_coordTypeBundle) + "]." ;
+            throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
+        
+      // sum and save corrections
+      m_corrections(0) += m_nicVector[0];
+      m_corrections(1) += m_nicVector[1];
+      m_corrections(2) += m_nicVector[2];
+    }
+  }
+
+  
   /**
    * Accessor for the raw ControlPoint object used for this BundleControlPoint.
    * 
@@ -337,10 +496,37 @@ namespace Isis {
   }
 
 
-  // ??? why bounded vector ??? can we use linear algebra vector ??? 
+  /**
+   * Accesses BundleControlPoint's coordinate type for reports.
+   * 
+   * @return @b ControlPoint::CoordinateType The BundleControlPoint's coordinate type. 
+   *                                    See SurfacePoint for the options.
+   * 
+   * @see ControlPoint::getCoordType()
+   */
+  SurfacePoint::CoordinateType BundleControlPoint::coordTypeReports() const{
+    return m_coordTypeReports;
+  }
+
+
+  /**
+   * Accesses BundleControlPoint's control point coordinate type for the bundle adjustment.
+   * 
+   * @return @b ControlPoint::CoordinateType The BundleControlPoint's coordinate type. 
+   *                                    See SurfacePoint for the options.
+   * 
+   * @see ControlPoint::getCoordTypeBundle()
+   */
+  SurfacePoint::CoordinateType BundleControlPoint::coordTypeBundle() const{
+    return m_coordTypeBundle;
+  }
+
+
+// *** TODO *** Need to add bounded vectors to Linear Algebra class
   /**
    * Accesses the 3 dimensional ordered vector of correction values associated 
-   * with latitude, longitude, and radius. 
+   * with coord1, coord2, and coord 3 (latitude, longitude, and radius or X, Y, and Z. 
+   * A bounded vector is recommended because the size will always be 3.
    * 
    * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of correction values.
    */
@@ -350,20 +536,22 @@ namespace Isis {
 
 
   /**
-   * Accesses the 3 dimenstional ordered vector of apriori sigmas (apriori 
-   * latitude, apriori longitude, apriori radius). 
+   * Accesses the 3 dimensional ordered vector of apriori sigmas (apriori 
+   * coordinate1, apriori coordinate2, apriori coordinate3). 
    * 
    * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of apriori sigmas.
    */
   boost::numeric::ublas::bounded_vector< double, 3 > &BundleControlPoint::aprioriSigmas() {
     return m_aprioriSigmas;
+    // Be careful about units.  Latitude and longitude sigmas are in radians.  Radius and X/Y/Z are
+    // meters.
 
   }
 
 
   /**
-   * Accesses the 3 dimenstional ordered vector of adjusted sigmas (adjusted 
-   * latitude, adjusted longitude, adjusted radius). 
+   * Accesses the 3 dimensional ordered vector of adjusted sigmas (adjusted 
+   * coordinate1, adjusted coordinate2, adjusted coordinate3). 
    * 
    * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of adjusted sigmas.
    */
@@ -374,7 +562,7 @@ namespace Isis {
 
   /**
    * Accesses the 3 dimensional ordered vector of weight values associated 
-   * with latitude, longitude, and radius. 
+   * with coordinate1, coordinate2, and coordinate3. 
    * 
    * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of weight values.
    */
@@ -406,8 +594,12 @@ namespace Isis {
   /**
    * Formats an output summary string for this BundleControlPoint. This string 
    * includes ID, point type, number of rays from non-rejected measures, 
-   * residual RMS, adjusted latitude and longitude (in degrees), adjusted radius
-   * (in km), and the adjusted sigmas (for latitude, longitude and radius). 
+   * residual RMS, adjusted coordinate1, adjusted coordinate 2, and adjusted 
+   * coordinate 3 followed by the adjusted sigmas.  In the case of Latitudinal 
+   * coordinates, the coordinates will be adjusted latitude and longitude (in degrees), 
+   * the adjusted radius (in km), and the adjusted sigmas for latitude, longitude and 
+   * radius all in meters.  In the case of Rectangular coordinates, the coordinates 
+   * will be X, Y, Z (in km), and the adjusted sigmas for X, Y, and Z all in meters. 
    *  
    * @param errorPropagation Indicates whether error propagation was selected.
    * 
@@ -418,24 +610,32 @@ namespace Isis {
     int numRays        = numberOfMeasures(); // should this depend on the raw point, as written, or this->size()???
     int numGoodRays    = numRays - numberOfRejectedMeasures();
     double ResidualRms = residualRms();
-    double lat         = m_controlPoint->GetAdjustedSurfacePoint().GetLatitude().degrees();
-    double lon         = m_controlPoint->GetAdjustedSurfacePoint().GetLongitude().degrees();
-    double rad         = m_controlPoint->GetAdjustedSurfacePoint().GetLocalRadius().kilometers();
+
+    // Return generic set of control point coordinates as floating point values 
+    // Be careful because of the potential to confuse units.
+    SurfacePoint::CoordUnits units = SurfacePoint::Degrees;
+    if (m_coordTypeReports == SurfacePoint::Rectangular) units = SurfacePoint::Kilometers;
+    double cpc1         = m_controlPoint->GetAdjustedSurfacePoint().GetCoord(m_coordTypeReports,
+                                                  SurfacePoint::One, units);
+    double cpc2         = m_controlPoint->GetAdjustedSurfacePoint().GetCoord(m_coordTypeReports,
+                                                  SurfacePoint::Two, units);
+    double cpc3         = m_controlPoint->GetAdjustedSurfacePoint().GetCoord(m_coordTypeReports,
+                                                  SurfacePoint::Three, SurfacePoint::Kilometers);
 
     QString pointType = ControlPoint::PointTypeToString(type()).toUpper();
 
     QString output = QString("%1%2%3 of %4%5%6%7%8%9%10%11\n")
-                             .arg(id(), 16)
-                             .arg(pointType, 15)
-                             .arg(numGoodRays, 5)
-                             .arg(numRays)
-                             .arg(formatValue(ResidualRms, 6, 2))
-                             .arg(formatValue(lat, 16, 8)) // deg
-                             .arg(formatValue(lon, 16, 8)) // deg
-                             .arg(formatValue(rad, 16, 8)) // km
-                             .arg(formatLatitudeAdjustedSigmaString(16,8,errorPropagation))  // m
-                             .arg(formatLongitudeAdjustedSigmaString(16,8,errorPropagation)) // m
-                             .arg(formatRadiusAdjustedSigmaString(16,8,errorPropagation));   // m
+                   .arg(id(), 16)
+                   .arg(pointType, 15)
+                   .arg(numGoodRays, 5)
+                   .arg(numRays)
+                   .arg(formatValue(ResidualRms, 6, 2))
+                   .arg(formatValue(cpc1, 16, 8)) // deg            km
+                   .arg(formatValue(cpc2, 16, 8)) // deg   OR    km
+                   .arg(formatValue(cpc3, 16, 8)) // km            km
+                   .arg(formatCoordAdjustedSigmaString(SurfacePoint::One, 16, 8, errorPropagation))  // m
+                   .arg(formatCoordAdjustedSigmaString(SurfacePoint::Two, 16, 8, errorPropagation)) // m
+                   .arg(formatCoordAdjustedSigmaString(SurfacePoint::Three, 16, 8, errorPropagation));   // m
 
     return output;
   }
@@ -447,11 +647,52 @@ namespace Isis {
    * @param errorPropagation Indicates whether error propagation was selected.
    * @param RTM Conversion factor from radians to meters. Used to convert the 
    *            latitude and longitude corrections to meters.
+   * @param solveRadius A flag indicating to solve for each points individual radius.
+   *            When solveRadius is false, the point radius is heavily weighted
    * 
    * @return @b QString The formatted output detailed string.
    */
   QString BundleControlPoint::formatBundleOutputDetailString(bool errorPropagation,
-                                                             double RTM,
+                                                             bool solveRadius) const {
+    QString output;
+    
+    switch (m_coordTypeReports) {
+      case SurfacePoint::Latitudinal:
+        output = formatBundleLatitudinalOutputDetailString(errorPropagation, solveRadius);
+        break;
+      case SurfacePoint::Rectangular:
+        output = formatBundleRectangularOutputDetailString(errorPropagation);
+        break;
+      default:
+         IString msg ="Unknown surface point coordinate type enum [" + toString(m_coordTypeBundle) + "]." ;
+         throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    return output;
+  }
+     
+
+  /**
+   * Formats a detailed output string table for this Latitudinal BundleControlPoint. 
+   *  
+   * @param errorPropagation Indicates whether error propagation was selected.
+   * @param RTM Conversion factor from radians to meters. Used to convert the 
+   *            latitude and longitude corrections to meters.
+   * @param solveRadius A flag indicating to solve for each points individual radius.
+   *            When solveRadius is false, the point radius is heavily weighted
+   * 
+   * @return @b QString The formatted output detailed string.
+   * 
+   * @internal
+   *  @history 2017-08-24 Debbie A. Cook - Revised units of cor_rad to be km instead of meters
+   *                                                     when outputting latitudinal corrections in degrees.  Fixed
+   *                                                     coordinate type for rectPoint to be Displacement::Kilometers
+   *                                                     instead of Distance::Kilometers.  Corrected conversions
+   *                                                     of corrections in lat/longitudinal degrees to rectangular meters.
+   *                                                     Fixed output of radius corrections in km.  It was outputting
+   *                                                     Z corrections.
+   */
+  QString BundleControlPoint::formatBundleLatitudinalOutputDetailString(
+                                                             bool errorPropagation,
                                                              bool solveRadius) const {
 
     int numRays     = numberOfMeasures();
@@ -460,30 +701,77 @@ namespace Isis {
     double lon      = m_controlPoint->GetAdjustedSurfacePoint().GetLongitude().degrees();
     double rad      = m_controlPoint->GetAdjustedSurfacePoint().GetLocalRadius().kilometers();
 
-    // ??? corrections is always zero ??? never set in this class ???
+    // Use the local radius in meters, rad*1000., to convert radians to meters now instead of the
+    // target body equatorial radius DAC 09/17/2018
+    double rtm = rad * 1000.;
+
+    // Coordinate corrections are currently set in BundleAdjust::applyParameterCorrections in the
+    //  coordTypeBundle coordinates (radians for Latitudinal coordinates and km for Rectangular).
     // point corrections and initial sigmas
-    double cor_lat_dd = m_corrections(0) * RAD2DEG;                // lat correction, decimal degs
-    double cor_lon_dd = m_corrections(1) * RAD2DEG;                // lon correction, decimal degs
-    double cor_rad_m  = m_corrections(2) * 1000.0;                 // radius correction, meters
+    double cor_lat_dd = 0.;                // lat correction, decimal degs
+    double cor_lon_dd = 0.;               // lon correction, decimal degs
+    double cor_rad_km  = 0.;             // radius correction, kilometers
+    double cor_lat_m = 0.;                 // lat correction, meters
+    double cor_lon_m = 0.;                // lon correction, meters
+    double cor_rad_m  = 0.;              // radius correction, meters
+    double latInit = Isis::Null;
+    double lonInit = Isis::Null;
+    double radInit = Isis::Null;
 
+    if (m_coordTypeBundle == SurfacePoint::Rectangular) {
+      double x      = m_controlPoint->GetAdjustedSurfacePoint().GetX().kilometers();
+      double xCor = m_corrections(0);  // km
+      double y      = m_controlPoint->GetAdjustedSurfacePoint().GetY().kilometers();
+      double yCor = m_corrections(1);  // km
+      double z      = m_controlPoint->GetAdjustedSurfacePoint().GetZ().kilometers();
+      double zCor = m_corrections(2);  // km
+      
+      if (!IsSpecial(x) && !IsSpecial(y) && !IsSpecial(z)) {
+        SurfacePoint rectPoint(Displacement(x - xCor, Displacement::Kilometers),
+                              Displacement(y - yCor, Displacement::Kilometers),
+                              Displacement(z - zCor, Displacement::Kilometers));
+        latInit = rectPoint.GetLatitude().degrees();
+        lonInit = rectPoint.GetLongitude().degrees();
+        radInit = rectPoint.GetLocalRadius().kilometers();
+        if (!IsSpecial(lat)) {
+          cor_lat_dd = (lat - latInit); // degrees
+          cor_lat_m  =  cor_lat_dd * DEG2RAD * rtm;
+        }
+        if (!IsSpecial(lon)) {
+          cor_lon_dd = (lon - lonInit); // degrees
+          cor_lon_m  =  cor_lon_dd * DEG2RAD * rtm * cos(lat*DEG2RAD);  // lon corrections meters
+        }
+        if (!IsSpecial(rad)) {
+          cor_rad_km  =  rad - radInit;
+          cor_rad_m  =  cor_rad_km * 1000.;
+        }
+      }
+    }
+    else if (m_coordTypeBundle == SurfacePoint::Latitudinal) {
+      cor_lat_dd = m_corrections(0) * RAD2DEG;                // lat correction, decimal degs
+      cor_lon_dd = m_corrections(1) * RAD2DEG;               // lon correction, decimal degs
+      cor_rad_m  = m_corrections(2) * 1000.0;                   // radius correction, meters
 
-    double cor_lat_m = m_corrections(0) * RTM;                     // lat correction, meters
-    double cor_lon_m = m_corrections(1) * RTM * cos(lat*DEG2RAD);  // lon correction, meters
+      cor_lat_m = m_controlPoint->GetAdjustedSurfacePoint().LatitudeToMeters(m_corrections(0));
+      cor_lon_m = m_controlPoint->GetAdjustedSurfacePoint().LongitudeToMeters(m_corrections(1));  
+      cor_rad_km = m_corrections(2);
 
-    double latInit = Isis::Null;
-    if (!IsSpecial(lat)) {
-      latInit = lat - cor_lat_dd;
-    }
+      if (!IsSpecial(lat)) {
+        latInit = lat - cor_lat_dd;
+      }
 
+      if (!IsSpecial(lon)) {
+        lonInit = lon - cor_lon_dd;
+      }
 
-    double lonInit = Isis::Null;
-    if (!IsSpecial(lon)) {
-      lonInit = lon - cor_lon_dd;
+      if (!IsSpecial(rad)) {
+        radInit = rad - m_corrections(2); // km
+      }
     }
-
-    double radInit = Isis::Null;
-    if (!IsSpecial(rad)) {
-      radInit = rad - m_corrections(2); // km
+    else {
+      IString msg ="Unknown surface point coordinate type enum [" +
+        toString(m_coordTypeBundle) + "]." ;
+      throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
     QString pointType = ControlPoint::PointTypeToString(type()).toUpper();
@@ -504,29 +792,159 @@ namespace Isis {
                      "  (dd/dd/km)          (Meters)          (Meters)\n";
     output += labels;
 
+    SurfacePoint::CoordIndex idx = SurfacePoint::One;
     output += QString("  LATITUDE%1%2%3%4%5%6\n")
-                      .arg(formatValue(latInit, 17, 8))                               // deg
-                      .arg(formatValue(cor_lat_dd, 21, 8))                            // deg
-                      .arg(formatValue(cor_lat_m, 20, 8))                             // m 
-                      .arg(formatValue(lat, 20, 8))                                   // deg
-                      .arg(formatLatitudeAprioriSigmaString(18,8))                    // m
-                      .arg(formatLatitudeAdjustedSigmaString(18,8,errorPropagation)); // m 
-
+        .arg(formatValue(latInit, 17, 8))                                         // deg
+        .arg(formatValue(cor_lat_dd, 21, 8))                                 // deg
+        .arg(formatValue(cor_lat_m, 20, 8))                                  // m 
+        .arg(formatValue(lat, 20, 8))                                              // deg
+        .arg(formatCoordAprioriSigmaString(idx, 18,8, true))        // m
+        .arg(formatCoordAdjustedSigmaString(idx, 18,8,errorPropagation)); // m 
+
+    idx = SurfacePoint::Two;
     output += QString(" LONGITUDE%1%2%3%4%5%6\n")
-                      .arg(formatValue(lonInit, 17, 8))                                // deg
-                      .arg(formatValue(cor_lon_dd, 21, 8))                             // deg
-                      .arg(formatValue(cor_lon_m, 20, 8))                              // m
-                      .arg(formatValue(lon, 20, 8))                                    // deg
-                      .arg(formatLongitudeAprioriSigmaString(18,8))                    // m
-                      .arg(formatLongitudeAdjustedSigmaString(18,8,errorPropagation)); // m
-
+        .arg(formatValue(lonInit, 17, 8))                                         // deg
+        .arg(formatValue(cor_lon_dd, 21, 8))                                 // deg
+        .arg(formatValue(cor_lon_m, 20, 8))                                  // m
+        .arg(formatValue(lon, 20, 8))                                              // deg
+        .arg(formatCoordAprioriSigmaString(idx, 18,8, true))        // m
+        .arg(formatCoordAdjustedSigmaString(idx, 18,8,errorPropagation)); // m
+
+    idx = SurfacePoint::Three;
     output += QString("    RADIUS%1%2%3%4%5%6\n\n")
-                      .arg(formatValue(radInit, 17, 8))                             // km
-                      .arg(formatValue(m_corrections(2), 21, 8))                    // km
-                      .arg(formatValue(cor_rad_m, 20, 8))                           // m
-                      .arg(formatValue(rad, 20, 8))                                 // km
-                      .arg(formatRadiusAprioriSigmaString(18,8,solveRadius))        // m
-                      .arg(formatRadiusAdjustedSigmaString(18,8,errorPropagation)); // m
+         .arg(formatValue(radInit, 17, 8))                             // km
+         .arg(formatValue(cor_rad_km, 21, 8))                    // km
+         .arg(formatValue(cor_rad_m, 20, 8))                      // m
+         .arg(formatValue(rad, 20, 8))                                  // km
+         .arg(formatCoordAprioriSigmaString(idx, 18,8, solveRadius))               // m
+         .arg(formatCoordAdjustedSigmaString(idx, 18,8, errorPropagation));  // m
+
+    return output;
+  }
+     
+
+  /**
+   * Formats a detailed output string table for this Rectangular BundleControlPoint. 
+   *  
+   * @param errorPropagation Indicates whether error propagation was selected.
+   * 
+   * @return @b QString The formatted output detailed string.
+   * 
+   * @internal
+   *  @history 2017-08-24 Debbie A. Cook - Corrected units reported in comments to correctly report 
+   *                                                       km and also in label line.
+   */
+ QString BundleControlPoint::formatBundleRectangularOutputDetailString
+                                                        (bool errorPropagation) const {
+    int numRays     = numberOfMeasures();
+    int numGoodRays = numRays - numberOfRejectedMeasures();
+    double X         = m_controlPoint->GetAdjustedSurfacePoint().GetX().kilometers();
+    double Y         = m_controlPoint->GetAdjustedSurfacePoint().GetY().kilometers();
+    double Z         = m_controlPoint->GetAdjustedSurfacePoint().GetZ().kilometers();
+
+    // Coordinate corrections are currently set in applyParameterCorrections.  Units depend on
+    //  coordTypeBundle coordinates (radians for Latitudinal coordinates and km for Rectangular).
+    // point corrections and initial sigmas.....
+    double cor_X_m = 0.;                     // X correction, meters
+    double cor_Y_m = 0.;                    // Y correction, meters
+    double cor_Z_m = 0.;                    // Z correction, meters
+    double XInit = Isis::Null;
+    double YInit = Isis::Null;
+    double ZInit = Isis::Null;
+    
+    if (m_coordTypeBundle == SurfacePoint::Latitudinal) {
+      double lat      = m_controlPoint->GetAdjustedSurfacePoint().GetLatitude().degrees();
+      double latcor = m_corrections(0) * RAD2DEG;
+      double lon      = m_controlPoint->GetAdjustedSurfacePoint().GetLongitude().degrees();
+      double loncor = m_corrections(1) * RAD2DEG;
+      double rad      = m_controlPoint->GetAdjustedSurfacePoint().GetLocalRadius().kilometers();
+      double radcor = m_corrections(2);
+
+      if (!IsSpecial(lat) && !IsSpecial(lon) && !IsSpecial(rad)) {
+        SurfacePoint latPoint(Latitude(lat-latcor, Angle::Degrees),
+                              Longitude(lon-loncor, Angle::Degrees),
+                              Distance(rad-radcor, Distance::Kilometers));
+        XInit = latPoint.GetX().kilometers();
+        YInit = latPoint.GetY().kilometers();
+        ZInit = latPoint.GetZ().kilometers();
+        cor_X_m = Isis::Null;
+        if (!IsSpecial(X)) {
+          cor_X_m = (X - XInit); // kilometers
+        }
+        cor_Y_m = Isis::Null;
+        if (!IsSpecial(Y)) {
+          cor_Y_m = (Y - YInit); // kilometers
+        }
+        cor_Z_m = Isis::Null;
+        if (!IsSpecial(Z)) {
+          cor_Z_m = (Z - ZInit); // kilometers
+        }
+      }
+    }
+    else if  (m_coordTypeBundle == SurfacePoint::Rectangular) {
+      cor_X_m = m_corrections(0);                     // X correction, kilometers
+      cor_Y_m = m_corrections(1);                     // Y correction, kilometers
+      cor_Z_m = m_corrections(2);                    // Z correction, kilometers
+      if (!IsSpecial(X)) {
+        XInit = X - m_corrections(0); // km
+      }
+      if (!IsSpecial(Y)) {
+        YInit = Y - m_corrections(1); // km
+      }
+      if (!IsSpecial(Z)) {
+        ZInit = Z - m_corrections(2); // km
+      }
+    }
+    else {
+      IString msg ="Unknown surface point coordinate type enum [" +
+        toString(m_coordTypeBundle) + "]." ;
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    QString pointType = ControlPoint::PointTypeToString(type()).toUpper();
+
+    QString output;
+
+    output = QString(" Label: %1\nStatus: %2\n  Rays: %3 of %4\n")
+                        .arg(id())
+                        .arg(pointType)
+                        .arg(numGoodRays)
+                        .arg(numRays);
+
+    QString labels =
+                       "\n        Point         Initial              Total              Final        "
+                       "     Initial              Final\n"
+                       "   Coordinate         Value             Correction            Value         "
+                       "    Accuracy          Accuracy\n"
+                       "                    (km/km/km)             (km)           (km/km/km)         "
+                       " (Meters)          (Meters)\n";
+    output += labels;
+
+    SurfacePoint::CoordIndex idx = SurfacePoint::One;
+    output += QString(" BODY-FIXED-X%1%2%3%4%5\n")
+            .arg(formatValue(XInit, 17, 8))                                       // km
+            .arg(formatValue(cor_X_m, 20, 8))                                // km 
+            .arg(formatValue(X, 20, 8))                                           // km
+            .arg(formatCoordAprioriSigmaString(idx, 18,8, true))   // m
+            .arg(formatCoordAdjustedSigmaString(idx, 18,8,errorPropagation)); // m 
+
+    idx = SurfacePoint::Two;
+    output += QString(" BODY-FIXED-Y%1%2%3%4%5\n")
+            .arg(formatValue(YInit, 17, 8))                                        // km
+            .arg(formatValue(cor_Y_m, 20, 8))                                 // km
+            .arg(formatValue(Y, 20, 8))                                             // km
+            .arg(formatCoordAprioriSigmaString(idx, 18, 8,  true))  // m
+            .arg(formatCoordAdjustedSigmaString(idx, 18,8,errorPropagation)); // m
+
+    idx = SurfacePoint::Three;
+    output += QString(" BODY-FIXED-Z%1%2%3%4%5\n\n")
+            .arg(formatValue(ZInit, 17, 8))                                        // km
+            .arg(formatValue(cor_Z_m, 20, 8))                                 // km
+            .arg(formatValue(Z, 20, 8))                                             // km
+      // Set solveRadius to true to avoid limiting output information for Z.
+      // Set radius does not really apply to rectangular coordinates.
+            .arg(formatCoordAprioriSigmaString(idx, 18,8, true))            // m
+            .arg(formatCoordAdjustedSigmaString(idx, 18,8,errorPropagation)); // m
 
     return output;
   }
@@ -550,27 +968,30 @@ namespace Isis {
     return output;
   }
 
-
+  
   /**
    * Formats the apriori sigma value indicated by the given type code. If no 
    * sigma was set, then the string "N/A" will be returned. 
    *  
-   * @param type Integer code that indicates which apriori sigma value will be 
-   *             formatted. Latitude=0, Longitude=1, Radius=2.
+   * @param index CoordIndex Coordinate index One: Latitude or X, Two:  Longitude or Y,  
+   *                                 or Three: Radius or Z
    * @param fieldWidth The return string's field width.
    * @param precision The precision of the double to be saved off.
+   * @param solveRadius A flag indicating to solve for each points individual radius.
+   *            When solveRadius is false, the point radius is heavily weighted
    * 
    * @return @b QString The formatted value, as a string.
    */
-  QString BundleControlPoint::formatAprioriSigmaString(int version, int fieldWidth,
-                                                       int precision, bool solveRadius) const {
+  QString BundleControlPoint::formatAprioriSigmaString(SurfacePoint::CoordIndex index,
+                                                       int fieldWidth, int precision,
+                                                       bool solveRadius) const {
     QString aprioriSigmaStr;
     QString pointType = ControlPoint::PointTypeToString(type()).toUpper();
-    if (pointType == "CONSTRAINED"||!solveRadius) {
+    if (pointType == "CONSTRAINED" || !solveRadius) {
         pointType = "N/A";
     }
-    double sigma = m_aprioriSigmas[version];
-    if (IsSpecial(sigma)) { // if globalAprioriSigma <= 0 (including Isis::NUll), then m_aprioriSigmas = Null
+    double sigma = m_aprioriSigmas[int(index)];
+    if (IsSpecial(sigma)) { // if globalAprioriSigma <= 0 (including Isis::Null), then m_aprioriSigmas = Null
       aprioriSigmaStr = QString("%1").arg(pointType, fieldWidth);
     }
     else {
@@ -581,51 +1002,20 @@ namespace Isis {
 
 
   /**
-   * Formats the apriori latitude sigma value. 
-   *  
-   * @param fieldWidth The return string's field width.
-   * @param precision The precision of the double to be saved off.
-   * 
-   * @return @b QString The formatted apriori latitude sigma value, as a string.
-   *  
-   * @see formatAprioriSigmaString() 
-   */
-  QString BundleControlPoint::formatLatitudeAprioriSigmaString(int fieldWidth, 
-                                                               int precision) const {
-    return formatAprioriSigmaString(0, fieldWidth, precision, true);
-  }
-
-
-  /**
-   * Formats the apriori longitude sigma value. 
+   * Formats the apriori coordinate 1 (latitude or X) sigma value. 
    *  
    * @param fieldWidth The return string's field width.
    * @param precision The precision of the double to be saved off.
    * 
-   * @return @b QString The formatted apriori longitude sigma value, as a string.
+   * @return @b QString The formatted apriori coordinate 1 sigma value, as a string.
    *  
    * @see formatAprioriSigmaString() 
    */
-  QString BundleControlPoint::formatLongitudeAprioriSigmaString(int fieldWidth, 
-                                                                int precision) const {
-    return formatAprioriSigmaString(1, fieldWidth, precision, true);
-  }
-
-
-  /**
-   * Formats the apriori radius sigma value. 
-   *  
-   * @param fieldWidth The return string's field width.
-   * @param precision The precision of the double to be saved off.
-   * 
-   * @return @b QString The formatted apriori radius sigma value, as a string.
-   *  
-   * @see formatAprioriSigmaString() 
-   */
-  QString BundleControlPoint::formatRadiusAprioriSigmaString(int fieldWidth,
-                                                             int precision,
-                                                             bool solveRadius) const {
-    return formatAprioriSigmaString(2, fieldWidth, precision, solveRadius);
+QString BundleControlPoint::formatCoordAprioriSigmaString(SurfacePoint::CoordIndex index,
+                                                          int fieldWidth, 
+                                                          int precision,
+                                                          bool solveRadius) const {
+    return formatAprioriSigmaString(index, fieldWidth, precision, solveRadius);
   }
 
 
@@ -634,15 +1024,16 @@ namespace Isis {
    * propagation is false or the selected sigma type was set to Null, then only 
    * "N/A" will be returned. 
    *  
-   * @param type Integer code that indicates which apriori sigma value will be 
-   *             formatted. Latitude=0, Longitude=1, Radius=2.
+   * @param index CoordIndex  Coordinate index One: Latitude or X, Two:  Longitude or Y,  
+   *                                 or Three: Radius or Z
    * @param fieldWidth The return string's field width.
    * @param precision The precision of the double to be saved off.
    * @param errorPropagation Indicates whether error propagation was selected.
    * 
    * @return @b QString The formatted value, as a string.
    */
-  QString BundleControlPoint::formatAdjustedSigmaString(int type, int fieldWidth, int precision,
+  QString BundleControlPoint::formatAdjustedSigmaString(SurfacePoint::CoordIndex index,
+                                                        int fieldWidth, int precision,
                                                         bool errorPropagation) const {
     QString adjustedSigmaStr;
 
@@ -651,15 +1042,8 @@ namespace Isis {
     }
     else {
       double sigma = Isis::Null;
-      if (type == 0) {
-        sigma = m_controlPoint->GetAdjustedSurfacePoint().GetLatSigmaDistance().meters();
-      }
-      if (type == 1) {
-        sigma = m_controlPoint->GetAdjustedSurfacePoint().GetLonSigmaDistance().meters();
-      }
-      if (type == 2) {
-        sigma = m_controlPoint->GetAdjustedSurfacePoint().GetLocalRadiusSigma().meters();
-      }
+      sigma = adjustedSurfacePoint().GetSigmaDistance(m_coordTypeReports, index).meters();
+
       if (IsSpecial(sigma)) {
         adjustedSigmaStr = QString("%1").arg("N/A",fieldWidth);
       }
@@ -673,52 +1057,118 @@ namespace Isis {
 
 
   /**
-   * Formats the adjusted latitude sigma value. 
+   * Formats the adjusted coordinate sigma value. 
    *  
+   * @param index The coordinate index of the sigma to return.
    * @param fieldWidth The return string's field width.
    * @param precision The precision of the double to be saved off.
    * @param errorPropagation Indicates whether error propagation was selected.
    * 
-   * @return @b QString The formatted adjusted latitude sigma value, as a string.
+   * @return @b QString The formatted adjusted coordinate sigma value, as a string.
    *  
    * @see formatAdjustedSigmaString() 
    */
-  QString BundleControlPoint::formatLatitudeAdjustedSigmaString(int fieldWidth, int precision,
+QString BundleControlPoint::formatCoordAdjustedSigmaString(SurfacePoint::CoordIndex index,
+                                                                int fieldWidth, int precision,
                                                                 bool errorPropagation) const {
-    return formatAdjustedSigmaString(0, fieldWidth, precision, errorPropagation);
+    return formatAdjustedSigmaString(index, fieldWidth, precision, errorPropagation);
   }
 
 
   /**
-   * Formats the adjusted longitude sigma value. 
-   *  
-   * @param fieldWidth The return string's field width.
-   * @param precision The precision of the double to be saved off.
-   * @param errorPropagation Indicates whether error propagation was selected.
-   * 
-   * @return @b QString The formatted adjusted longitude sigma value, as a string.
-   *  
-   * @see formatAdjustedSigmaString() 
+   * Apply the parameter corrections to the bundle control point latitudinally.
+   *
+   * @param factor The unit conversion factor to use on lat & lon.  Radius is in km & converted to m
+   * @param target The BundleTargetBody.
    */
-  QString BundleControlPoint::formatLongitudeAdjustedSigmaString(int fieldWidth, int precision,
-                                                                 bool errorPropagation) const {
-    return formatAdjustedSigmaString(1, fieldWidth, precision, errorPropagation);
+  void BundleControlPoint::updateAdjustedSurfacePointLatitudinally
+               (const BundleTargetBodyQsp target) {
+      SurfacePoint surfacepoint = adjustedSurfacePoint();
+      double pointLat = surfacepoint.GetLatitude().degrees();
+      double pointLon = surfacepoint.GetLongitude().degrees();
+      double pointRad = surfacepoint.GetLocalRadius().meters();
+
+      // get point parameter corrections
+      double latCorrection = m_nicVector[0];
+      double lonCorrection = m_nicVector[1];
+      double radCorrection = m_nicVector[2];
+
+      // convert to degrees and apply
+      pointLat += RAD2DEG * latCorrection;
+      pointLon += RAD2DEG * lonCorrection;
+
+      // Make sure updated values are still in valid range(0 to 360 for lon and -90 to 90 for lat)
+      if (pointLat < -90.0) {
+        pointLat = -180.0 - pointLat;
+        pointLon = pointLon + 180.0;
+      }
+      if (pointLat > 90.0) {
+        pointLat = 180.0 - pointLat;
+        pointLon = pointLon + 180.0;
+      }
+      while (pointLon > 360.0) {
+        pointLon = pointLon - 360.0;
+      }
+      while (pointLon < 0.0) {
+        pointLon = pointLon + 360.0;
+      }
+
+      // convert to meters and apply
+      pointRad += 1000. * radCorrection;
+      
+      // ken testing - if solving for target body mean radius, set radius to current
+      // mean radius value
+      // Only allow radius options for Latitudinal coordinates
+      if (target && (target->solveMeanRadius() || target->solveTriaxialRadii()) ) {
+        if (target->solveMeanRadius()) {
+          surfacepoint.SetSphericalCoordinates(Latitude(pointLat, Angle::Degrees),
+                                               Longitude(pointLon, Angle::Degrees),
+                                               target->meanRadius());
+        }
+        else if (target->solveTriaxialRadii()) {
+            Distance localRadius = target->localRadius(Latitude(pointLat, Angle::Degrees),
+                                                   Longitude(pointLon, Angle::Degrees));
+            surfacepoint.SetSphericalCoordinates(Latitude(pointLat, Angle::Degrees),
+                                                 Longitude(pointLon, Angle::Degrees),
+                                                 localRadius);
+        }
+      }
+      else {
+        surfacepoint.SetSphericalCoordinates(Latitude(pointLat, Angle::Degrees),
+                                             Longitude(pointLon, Angle::Degrees),
+                                             Distance(pointRad, Distance::Meters));
+      }
+      // Reset the point now that it has been updated
+      setAdjustedSurfacePoint(surfacepoint);
   }
 
 
   /**
-   * Formats the adjusted radius sigma value. 
-   *  
-   * @param fieldWidth The return string's field width.
-   * @param precision The precision of the double to be saved off.
-   * @param errorPropagation Indicates whether error propagation was selected.
-   * 
-   * @return @b QString The formatted adjusted radius sigma value, as a string.
-   *  
-   * @see formatAdjustedSigmaString() 
+   * Apply the parameter corrections to the bundle control point rectangularly.
+   *
+   * @param factor The unit conversion factor to use on the coordinates.
    */
-  QString BundleControlPoint::formatRadiusAdjustedSigmaString(int fieldWidth, int precision,
-                                                              bool errorPropagation) const {
-    return formatAdjustedSigmaString(2, fieldWidth, precision, errorPropagation);
+  void BundleControlPoint::updateAdjustedSurfacePointRectangularly() {
+      SurfacePoint surfacepoint = adjustedSurfacePoint();
+      double pointX = surfacepoint.GetX().meters();
+      double pointY = surfacepoint.GetY().meters();
+      double pointZ = surfacepoint.GetZ().meters();
+
+      // get point parameter corrections
+      double XCorrection = m_nicVector[0];
+      double YCorrection = m_nicVector[1];
+      double ZCorrection = m_nicVector[2];
+
+      // Convert corrections to meters and apply
+      pointX += 1000. * XCorrection;
+      pointY += 1000. * YCorrection;
+      pointZ += 1000. * ZCorrection;
+    
+      surfacepoint.SetRectangularCoordinates(
+                                             Displacement(pointX, Displacement::Meters),
+                                             Displacement(pointY, Displacement::Meters),
+                                             Displacement(pointZ, Displacement::Meters));
+      // Reset the point now that it has been updated
+      setAdjustedSurfacePoint(surfacepoint);
   }
 }
diff --git a/isis/src/control/objs/BundleUtilities/BundleControlPoint.h b/isis/src/control/objs/BundleUtilities/BundleControlPoint.h
index 7d4e015a98df5e91f99b9eceb3dc083f7c242383..852164af04e4315cb76ebe4f23b28d824b8f3062 100644
--- a/isis/src/control/objs/BundleUtilities/BundleControlPoint.h
+++ b/isis/src/control/objs/BundleUtilities/BundleControlPoint.h
@@ -36,16 +36,18 @@
 namespace Isis {
 
   class ControlMeasure;
+  class LinearAlgebra;
+  class SparseBlockMatrix;
 
   /**
-   * This class holds information about a control point that BundleAdjust needs to run corretly.
+   * This class holds information about a control point that BundleAdjust needs to run correctly.
    * 
    * This class was created to extract functionality from BundleAdjust and wrap a ControlPoint
    * with the extra necessary information to correctly perform a bundle adjustment.
    *
    * Note that only non-ignored control points should be used to construct a BundleControlPoint.
    * Similarly, a BundleControlPoint should only contain non-ignored control measures.
-   * 
+   *
    * @author 2014-05-22 Ken Edmundson
    *
    * @internal
@@ -67,16 +69,55 @@ namespace Isis {
    *   @history 2016-10-27 Tyler Wilson - Modified formatRadiusAprioriSigmaString, formatAprioriSigmaString,
    *                          and formatBundleOutputDetailString to accept a third argument (bool solveRadius)
    *                          with a default value = false.  References #4317.
-   */
+   *   @history 2017-07-26 Debbie A. Cook - Added BundleSettings and metersToRadians as arguments 
+   *                           to constructor and moved setWeights call from BundleAdjust::init into 
+   *                           constructor.   Added m_bundleControlPointCoordinateType.  This option 
+   *                           determines how control point coordinates are entered into 
+   *                           BundleControlPoint, interpreted throughout the adjustment, and 
+   *                           output. The coordinate type needs to be in this class, because
+   *                           BundleControlPoints are created without a parent control net and added to 
+   *                           a control net later.  Made format methods generic in regards to coordinate type.
+   *                           Added utility method setSigmaWeightFromGlobals.
+   *                           Merged methods formatLatitudeAdjustedSigmaString, 
+   *                           formatLongitudeAdjustedSigmaString, and formatRadiusAdjustedSigmaString
+   *                           into a single generic coordinate method with an additional argument 
+   *                           for the coordinate index.  Did a similar merge for the family of  
+   *                           methods like formatLatitudeAprioriSigmaString.  Moved some of the
+   *                           functionality from BundleAdjust to this class as a new method 
+   *                           applyParameterCorrections.  Also had to move BundleAdjust method 
+   *                           productAlphaAV to this class to support applyParameterCorrections.
+   *                           References #4649 and #501.
+   *  @history 2017-08-24 Debbie A. Cook - Revised output units to be compatible with output from
+   *                           previous versions, corrected units throughout in comments and code.
+   *                           Reference #4649 and #501.
+   *  @history 2018-01-05 Debbie A. Cook - Added new members m_coordTypeReports and
+   *                           m_coordTypeBundle to copy method.  Reference #4649 and #501.
+   *  @history 2018-05-31 Debbie A. Cook - Moved code from BundleAdjust::applyParameterCorrections
+   *                           pertaining to updating the adjusted surface point and method productAlphaAv into new
+   *                           methods applyParameterCorrections, updateAdjustedSurfacePointLatitudinally, and
+   *                           updateAdjustedSurfacePointRectangularly in BundleControlPoint.  Reference 
+   *                           #4649 and #501.
+   *  @history 2018-09-28 Debbie A. Cook - Removed the metersToRadians argument from
+   *                           the constructor and from the setWeights method since we are now
+   *                           using the local radius of the point to convert lat/lon sigmas 
+   *                           from meters to radians.  References #4649 and #501.
+  */
   class BundleControlPoint : public QVector<BundleMeasureQsp> {
 
     public:
-      BundleControlPoint(ControlPoint *point); // default constructor
+      // default constructor
+      BundleControlPoint(BundleSettingsQsp bundleSettings,
+                         ControlPoint *point);
+      // copy constructor
       BundleControlPoint(const BundleControlPoint &src);
+
+      //destructor
       ~BundleControlPoint();
 
-      // copy
+      // equals operator
       BundleControlPoint &operator=(const BundleControlPoint &src);// ??? not implemented
+
+      // copy method
       void copy(const BundleControlPoint &src);
 
       // mutators
@@ -85,8 +126,17 @@ namespace Isis {
       void setAdjustedSurfacePoint(SurfacePoint surfacePoint);
       void setNumberOfRejectedMeasures(int numRejected);
       void setRejected(bool reject);
-      void setWeights(const BundleSettingsQsp settings, double metersToRadians);
+      void setWeights(const BundleSettingsQsp settings);
+      void setSigmaWeightFromGlobals(double gSigma, int index); 
+      void setSigmaWeightFromGlobals(double gSigma, int index, double cFactor); 
       void zeroNumberOfRejectedMeasures();
+      void productAlphaAV(double alpha,
+                          SparseBlockMatrix &sparseNormals,
+                          // boost::numeric::ublas::bounded_vector< double, 3 >  &v2,
+                          // SparseBlockRowMatrix                                &Q,
+                          LinearAlgebra::Vector                               &v1);
+      void applyParameterCorrections(LinearAlgebra::Vector imageSolution,
+           SparseBlockMatrix &sparseNormals, const BundleTargetBodyQsp target);
 
       // accessors
       ControlPoint *rawControlPoint() const;
@@ -97,6 +147,8 @@ namespace Isis {
       SurfacePoint adjustedSurfacePoint() const;
       QString id() const;
       ControlPoint::PointType type() const;
+      SurfacePoint::CoordinateType coordTypeReports() const;
+      SurfacePoint::CoordinateType coordTypeBundle() const;
       boost::numeric::ublas::bounded_vector< double, 3 > &corrections();
       boost::numeric::ublas::bounded_vector< double, 3 > &aprioriSigmas();
       boost::numeric::ublas::bounded_vector< double, 3 > &adjustedSigmas();
@@ -106,22 +158,25 @@ namespace Isis {
 
       // string format methods
       QString formatBundleOutputSummaryString(bool errorPropagation) const;
-      QString formatBundleOutputDetailString(bool errorPropagation, double RTM, bool solveRadius=false) const;
+      QString formatBundleOutputDetailString(bool errorPropagation, bool solveRadius=false) const;
+      QString formatBundleLatitudinalOutputDetailString(bool errorPropagation, 
+                                                        bool solveRadius=false) const;
+      QString formatBundleRectangularOutputDetailString(bool errorPropagation) const;
       QString formatValue(double value, int fieldWidth, int precision) const;
-      QString formatAprioriSigmaString(int type, int fieldWidth, int precision, bool solveRadius=false) const;
-      QString formatLatitudeAprioriSigmaString(int fieldWidth, int precision) const;
-      QString formatLongitudeAprioriSigmaString(int fieldWidth, int precision) const;
-      QString formatRadiusAprioriSigmaString(int fieldWidth, int precision, bool solveRadius=false) const;
-      QString formatAdjustedSigmaString(int type, int fieldWidth, int precision,
+      QString formatAprioriSigmaString(SurfacePoint::CoordIndex index, int fieldWidth,
+                                       int precision, bool solveRadius=false) const;
+      QString formatCoordAprioriSigmaString(SurfacePoint::CoordIndex index, int fieldWidth,
+                                            int precision, bool solveRadius=false) const;
+      QString formatAdjustedSigmaString(SurfacePoint::CoordIndex, int fieldWidth, int precision,
                                         bool errorPropagation) const;
-      QString formatLatitudeAdjustedSigmaString(int fieldWidth, int precision,
+      QString formatCoordAdjustedSigmaString(SurfacePoint::CoordIndex, int fieldWidth, int precision,
                                                 bool errorPropagation) const;
-      QString formatLongitudeAdjustedSigmaString(int fieldWidth, int precision,
-                                                 bool errorPropagation) const;
-      QString formatRadiusAdjustedSigmaString(int fieldWidth, int precision, 
-                                              bool errorPropagation) const;
 
     private:
+      // methods
+      void updateAdjustedSurfacePointLatitudinally(const BundleTargetBodyQsp target);
+      void updateAdjustedSurfacePointRectangularly();
+      
       //!< pointer to the control point object this represents
       ControlPoint *m_controlPoint;
 
@@ -137,6 +192,9 @@ namespace Isis {
       boost::numeric::ublas::bounded_vector<double, 3> m_nicVector;
       //! The CholMod matrix associated with this point
       SparseBlockRowMatrix m_cholmodQMatrix;
+      //! BundleControlPoint coordinate type
+      SurfacePoint::CoordinateType m_coordTypeReports;
+      SurfacePoint::CoordinateType m_coordTypeBundle;
   };
 
   // typedefs
diff --git a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.cpp b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.cpp
index 6fecb8fd7244297e8232239e1812cc21c702cd2c..7a70a70e63b2d7708b401f699bf6ca30ba91a030 100644
--- a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.cpp
+++ b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.cpp
@@ -259,6 +259,19 @@ namespace Isis {
   }
 
 
+  /**
+   * Removes an observation number from this solve settings. The observation is no longer
+   * associated with this solve settings.
+   *
+   * @param QString observationNumber The observation number to remove from this solve settings.
+   * @return bool Returns true if the observation number passed was actually removed; otherwise
+   *              returns false.
+   */
+  bool BundleObservationSolveSettings::removeObservationNumber(QString observationNumber) {
+    return m_observationNumbers.remove(observationNumber);
+  }
+
+
   /**
    * Returns a list of observation numbers associated with these solve settings.
    *
@@ -368,7 +381,7 @@ namespace Isis {
                                            bool solvePolynomialOverExisting,
                                            double anglesAprioriSigma,
                                            double angularVelocityAprioriSigma,
-                                           double angularAccelerationAprioriSigma) {
+                                           double angularAccelerationAprioriSigma,QList<double> * additionalPointingSigmas) {
 
     // automatically set the solve option and ck degree to the user entered values
     m_instrumentPointingSolveOption = option;
@@ -421,6 +434,16 @@ namespace Isis {
       }
     }
 
+    if (additionalPointingSigmas) {
+      for (int i=0;i < additionalPointingSigmas->count();i++) {         
+          m_anglesAprioriSigma.append(additionalPointingSigmas->value(i));
+      }
+    }
+
+
+
+
+
     m_solveTwist = solveTwist; // dependent on solve option???
 
     // Set the SpiceRotation interpolation type enum appropriately
@@ -609,14 +632,14 @@ namespace Isis {
    * @param velocityAprioriSigma A priori velocity sigma
    * @param accelerationAprioriSigma A priori acceleration sigma
    */
-  void BundleObservationSolveSettings::setInstrumentPositionSettings(
-                                           InstrumentPositionSolveOption option,
+  void BundleObservationSolveSettings::setInstrumentPositionSettings(InstrumentPositionSolveOption option,
                                            int spkDegree,
                                            int spkSolveDegree,
                                            bool positionOverHermite,
                                            double positionAprioriSigma,
                                            double velocityAprioriSigma,
-                                           double accelerationAprioriSigma) {
+                                           double accelerationAprioriSigma,
+                                           QList<double> *additionalPositionSigmas) {
     // automatically set the solve option and spk degree to the user entered values
     m_instrumentPositionSolveOption = option;
 
@@ -667,6 +690,12 @@ namespace Isis {
       }
     }
 
+    if (additionalPositionSigmas) {
+      for (int i=0;i < additionalPositionSigmas->count();i++) {
+          m_positionAprioriSigma.append(additionalPositionSigmas->value(i));
+      }
+    }
+
     // Set the SpicePosition interpolation type enum appropriately
     m_solvePositionOverHermiteSpline = positionOverHermite;
     if (m_solvePositionOverHermiteSpline) {
diff --git a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h
index fd570fee7c28eea9e0724afe066b11fb7575e26c..0598712498bea5cbc86bc3f6382738719ec0bbed 100644
--- a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h
+++ b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h
@@ -75,7 +75,13 @@ namespace Isis {
    *                           with these settings. Removed the setFromPvl() method. When re-
    *                           implemented, it should be put in jigsaw. References #4293.
    *   @history 2017-04-24 Ian Humphrey - Removed pvlObject(). Fixes #4797.
-   *
+   *   @history 2018-06-21 Ian Humphrey - Added removeObservationNumber() to be able to remove an
+   *                           observation number from a BundleObservationSolveSettings.
+   *                           References #497.
+   *   @history 2018-06-26 Tyler Wilson - Added support for adding an arbitrary number of
+   *                           additional apriori sigma values in setInstrumentPositionSettings/
+   *                           setInstrumentPointingSettings beyond position/velocity/acceleration.
+   *                           References #497.
    *
    *   @todo Figure out why solve degree and num coefficients does not match solve option.
    *   @todo Determine whether xml stuff needs a Project pointer.
@@ -99,6 +105,7 @@ class BundleObservationSolveSettings {
       void setInstrumentId(QString instrumentId);
       QString instrumentId() const;
       void addObservationNumber(QString observationNumber);
+      bool removeObservationNumber(QString observationNumber);
       QSet<QString> observationNumbers() const;
 
 
@@ -124,7 +131,8 @@ class BundleObservationSolveSettings {
                                          bool solvePolynomialOverExisting = false,
                                          double anglesAprioriSigma = -1.0,
                                          double angularVelocityAprioriSigma = -1.0,
-                                         double angularAccelerationAprioriSigma = -1.0);
+                                         double angularAccelerationAprioriSigma = -1.0,
+                                         QList<double> * additionalPointingSigmas=nullptr);
       InstrumentPointingSolveOption instrumentPointingSolveOption() const;
       bool solveTwist() const;
       int ckDegree() const;
@@ -155,7 +163,8 @@ class BundleObservationSolveSettings {
                                          bool positionOverHermite = false,
                                          double positionAprioriSigma = -1.0,
                                          double velocityAprioriSigma = -1.0,
-                                         double accelerationAprioriSigma = -1.0);
+                                         double accelerationAprioriSigma = -1.0,
+                                         QList<double> * additionalPositionSigmas=nullptr);
       InstrumentPositionSolveOption instrumentPositionSolveOption() const;
       int spkDegree() const;
       int spkSolveDegree() const;
diff --git a/isis/src/control/objs/BundleUtilities/BundleUtilities.truth b/isis/src/control/objs/BundleUtilities/BundleUtilities.truth
index d5a62b3853461203a91e148399e118ff5437dc9e..e898b234ac4a64243ba0482d2014fa3c0e4da886 100644
--- a/isis/src/control/objs/BundleUtilities/BundleUtilities.truth
+++ b/isis/src/control/objs/BundleUtilities/BundleUtilities.truth
@@ -547,7 +547,8 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 Testing BundleControlPoint...
-Create FreePoint with free point containing 2 measures... (note that first measure is ignored, second measure is not ignored)
+BCP test 1 - Create FreePoint with free point containing 2 measures (note that first measure is ignored, second measure is not ignored)
+     and no apriori or adjusted coordinate values or sigmas set...
 Type of BundleControlPoint 1: 2
 Set BundleControlPoint 1 to rejected - is rejected? "Yes"
 Set BundleControlPoint 1 to non-rejected - is rejected? "No"
@@ -583,22 +584,7 @@ Coordinate          Value             Correction          Correction
 
 
 
-Modify FreePoint - setAdjustedSurfacePoint(0,0,10) and addMeasure()
-       FreePoint           FREE    2 of 2  3.54      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
-
- Label: FreePoint
-Status: FREE
-  Rays: 2 of 2
-
-     Point         Initial               Total               Total              Final             Initial             Final
-Coordinate          Value             Correction          Correction            Value             Accuracy          Accuracy
-                 (dd/dd/km)           (dd/dd/km)           (Meters)           (dd/dd/km)          (Meters)          (Meters)
-  LATITUDE       0.00000000           0.00000000          0.00000000          0.00000000              FREE               N/A
- LONGITUDE       0.00000000           0.00000000          0.00000000          0.00000000              FREE               N/A
-    RADIUS       0.01000000           0.00000000          0.00000000          0.01000000               N/A               N/A
-
-
-Modify FreePoint - setWeights() - solveRadius=false
+BCP test 2 - Modify FreePoint - setAdjustedSurfacePoint(0,0,10) and addMeasure()
        FreePoint           FREE    2 of 2  3.54      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
  Label: FreePoint
@@ -623,7 +609,8 @@ qMatrix:
 
 Residual rms: 3.53553
 
-Modify FreePoint - setWeights() - solveRadius=true, apriori lat/lon/rad <= 0
+BCP test 3 - Create FreePoint - identical to previous, but with solveRadius=true
+ and apriori lat/lon/rad <= 0.  Test adding a measure to a BundleControlPoint.
        FreePoint           FREE    2 of 2  3.54      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
  Label: FreePoint
@@ -635,13 +622,14 @@ Coordinate          Value             Correction          Correction
                  (dd/dd/km)           (dd/dd/km)           (Meters)           (dd/dd/km)          (Meters)          (Meters)
   LATITUDE       0.00000000           0.00000000          0.00000000          0.00000000              FREE               N/A
  LONGITUDE       0.00000000           0.00000000          0.00000000          0.00000000              FREE               N/A
-    RADIUS       0.01000000           0.00000000          0.00000000          0.01000000               N/A               N/A
+    RADIUS       0.01000000           0.00000000          0.00000000          0.01000000              FREE               N/A
 
 
 aprioriSigmas:   "N/A" "N/A" "N/A"
-weights:         0 0 1e+50
+weights:         0 0 0
 
-Modify FreePoint - setWeights() - solveRadius=true, apriori lat/lon/rad > 0
+BCP test 4 - Create FreePoint - solveRadius=true, apriori lat/lon/rad > 0 
+                    from globals - coordinate type = Latitudinal
        FreePoint           FREE    2 of 2  3.54      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
  Label: FreePoint
@@ -663,7 +651,7 @@ Raw control point equal to original?     "Yes"
 Raw control point is rejected?           "No"
 Adjusted SurfacePoint (Lat, Lon, Rad) =  "0.0" "0.0" "10.0"
 
-Create FixedPoint from empty fixed point, adjusted surface point (90, 180, 10)...
+BCP test 5 - Create FixedPoint from empty fixed point, solveRadius = F adjusted surface point (90, 180, 10)...
       FixedPoint          FIXED    0 of 0  0.00     90.00000000    180.00000000      0.01000000             N/A             N/A             N/A
 
  Label: FixedPoint
@@ -678,7 +666,8 @@ Coordinate          Value             Correction          Correction
     RADIUS       0.01000000           0.00000000          0.00000000          0.01000000               N/A               N/A
 
 
-Modify FixedPoint - setWeights()
+BCP test 6 - Create FixedPoint from empty fixed point, solveRadius = True
+ adjusted surface point (90, 180, 10)...
       FixedPoint          FIXED    0 of 0  0.00     90.00000000    180.00000000      0.01000000             N/A             N/A             N/A
 
  Label: FixedPoint
@@ -690,28 +679,13 @@ Coordinate          Value             Correction          Correction
                  (dd/dd/km)           (dd/dd/km)           (Meters)           (dd/dd/km)          (Meters)          (Meters)
   LATITUDE      90.00000000           0.00000000          0.00000000         90.00000000             FIXED               N/A
  LONGITUDE     180.00000000           0.00000000          0.00000000        180.00000000             FIXED               N/A
-    RADIUS       0.01000000           0.00000000          0.00000000          0.01000000               N/A               N/A
+    RADIUS       0.01000000           0.00000000          0.00000000          0.01000000             FIXED               N/A
 
 
 aprioriSigmas:   "NULL" "NULL" "NULL"
 weights:         1e+50 1e+50 1e+50
 
-Create ConstrainedPoint from empty constrained point, surface point (0, 0, 10)...
-ConstrainedPoint    CONSTRAINED    0 of 0  0.00      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
-
- Label: ConstrainedPoint
-Status: CONSTRAINED
-  Rays: 0 of 0
-
-     Point         Initial               Total               Total              Final             Initial             Final
-Coordinate          Value             Correction          Correction            Value             Accuracy          Accuracy
-                 (dd/dd/km)           (dd/dd/km)           (Meters)           (dd/dd/km)          (Meters)          (Meters)
-  LATITUDE       0.00000000           0.00000000          0.00000000          0.00000000               N/A               N/A
- LONGITUDE       0.00000000           0.00000000          0.00000000          0.00000000               N/A               N/A
-    RADIUS       0.01000000           0.00000000          0.00000000          0.01000000               N/A               N/A
-
-
-Modify ConstrainedPoint - setWeights() - solveRadius=false
+BCP test 7 - Create ConstrainedPoint with solveRadius=false and adjusted surface point (0, 0, 10), no constraints set, coordType=Latitudinal ...
 ConstrainedPoint    CONSTRAINED    0 of 0  0.00      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
  Label: ConstrainedPoint
@@ -729,7 +703,8 @@ Coordinate          Value             Correction          Correction
 aprioriSigmas:   "NULL" "NULL" "NULL"
 weights:         0 0 1e+50
 
-Modify ConstrainedPoint - setWeights() - no constraints, solveRadius=true, apriori lat/lon/rad <= 0
+BCP test 8 - Create ConstrainedPoint - no constraints, solveRadius=true, apriori lat/lon/rad <= 0, 
+     and adjustedsurface point (0, 0, 10)
 ConstrainedPoint    CONSTRAINED    0 of 0  0.00      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
  Label: ConstrainedPoint
@@ -745,9 +720,9 @@ Coordinate          Value             Correction          Correction
 
 
 aprioriSigmas:   "NULL" "NULL" "NULL"
-weights:         0 0 1e+50
+weights:         0 0 0
 
-Modify ConstrainedPoint - setWeights() - no constraints, solveRadius=true, apriori lat/lon/rad > 0
+BCP test 9 - Create ConstrainedPoint - no constraints,  solveRadius=true, apriori lat/lon/rad > 0 (valid global sigmas)
 ConstrainedPoint    CONSTRAINED    0 of 0  0.00      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
  Label: ConstrainedPoint
@@ -766,8 +741,9 @@ aprioriSigmas:   "2.0" "3.0" "4.0"
 weights:         25 11.1111 62500
 
 
-Create ConstrainedPoint from constrained point with adjusted surface point (32, 120, 1000)...
-ConstrainedPoint    CONSTRAINED    0 of 0  0.00     32.00000000    120.00000000      1.00000000     28.65696503     36.78815890     38.45488734
+BCP test 10 - Create ConstrainedPoint from constrained point with adjusted  
+    pt (32, 120, 1000) & apriori pt with constraints from covar, solveRadius=F...
+ConstrainedPoint    CONSTRAINED    0 of 0  0.00     32.00000000    120.00000000      1.00000000     28.65696495     26.45751311     38.45488734
 
  Label: ConstrainedPoint
 Status: CONSTRAINED
@@ -776,13 +752,14 @@ Status: CONSTRAINED
      Point         Initial               Total               Total              Final             Initial             Final
 Coordinate          Value             Correction          Correction            Value             Accuracy          Accuracy
                  (dd/dd/km)           (dd/dd/km)           (Meters)           (dd/dd/km)          (Meters)          (Meters)
-  LATITUDE      32.00000000           0.00000000          0.00000000         32.00000000               N/A       28.65696503
- LONGITUDE     120.00000000           0.00000000          0.00000000        120.00000000               N/A       36.78815890
+  LATITUDE      32.00000000           0.00000000          0.00000000         32.00000000       28.65696494       28.65696495
+ LONGITUDE     120.00000000           0.00000000          0.00000000        120.00000000       26.45751311       26.45751311
     RADIUS       1.00000000           0.00000000          0.00000000          1.00000000               N/A       38.45488734
 
 
-Modify ConstrainedPoint - setWeights() - solveRadius=t, lat/lon/rad constrained
-ConstrainedPoint    CONSTRAINED    0 of 0  0.00     32.00000000    120.00000000      1.00000000     28.65696503     36.78815890     38.45488734
+BCP test 11 - Create ConstrainedPoint from constrained point with adjusted  surface pt (32, 120, 1000) 
+     & apriori pt with constraints from covar, solveRadius=T...
+ConstrainedPoint    CONSTRAINED    0 of 0  0.00     32.00000000    120.00000000      1.00000000     28.65696495     26.45751311     38.45488734
 
  Label: ConstrainedPoint
 Status: CONSTRAINED
@@ -791,15 +768,15 @@ Status: CONSTRAINED
      Point         Initial               Total               Total              Final             Initial             Final
 Coordinate          Value             Correction          Correction            Value             Accuracy          Accuracy
                  (dd/dd/km)           (dd/dd/km)           (Meters)           (dd/dd/km)          (Meters)          (Meters)
-  LATITUDE      32.00000000           0.00000000          0.00000000         32.00000000       28.65696495       28.65696503
- LONGITUDE     120.00000000           0.00000000          0.00000000        120.00000000       36.78815884       36.78815890
+  LATITUDE      32.00000000           0.00000000          0.00000000         32.00000000       28.65696494       28.65696495
+ LONGITUDE     120.00000000           0.00000000          0.00000000        120.00000000       26.45751311       26.45751311
     RADIUS       1.00000000           0.00000000          0.00000000          1.00000000       38.45488734       38.45488734
 
 
-aprioriSigmas:   "28.656964947064" "36.788158835093" "38.454887341483"
+aprioriSigmas:   "28.65696494252" "26.457513107566" "38.454887341483"
 weights:         1217.7 1027.41 676.234
 
-Create copy of FreePoint using copy constructor...
+BCP test 12 - Create copy of FreePoint using copy constructor...
        FreePoint           FREE    2 of 2  3.54      0.00000000      0.00000000      0.01000000             N/A             N/A             N/A
 
 Output for formatBundleOutputDetailString(...) with solveForRadius = false:
@@ -815,7 +792,7 @@ Coordinate          Value             Correction          Correction
     RADIUS       0.01000000           0.00000000          0.00000000          0.01000000        4.00000000               N/A
 
 
-Output for formatBundleOutputDetailString(...) with solveForRadius = true:
+BCP test 13 - Output for formatBundleOutputDetailString(...) with solveForRadius = true:
  Label: FreePoint
 Status: FREE
   Rays: 2 of 2
@@ -829,7 +806,7 @@ Coordinate          Value             Correction          Correction
 
 
 
-Overwrite existing object with FixedPoint information...
+BCP test 14 - Overwrite existing object with FixedPoint information...
       FixedPoint          FIXED    0 of 0  0.00     90.00000000    180.00000000      0.01000000             N/A             N/A             N/A
 
  Label: FixedPoint
@@ -845,6 +822,115 @@ Coordinate          Value             Correction          Correction
 
 
 
+BCP test 15 - Coordtype=Rect, Free, solveRad=F
+       FreePoint           FREE    1 of 1  3.54      0.01000000      0.00000000      0.00000000             N/A             N/A             N/A
+
+ Label: FreePoint
+Status: FREE
+  Rays: 1 of 1
+
+        Point         Initial              Total              Final             Initial              Final
+   Coordinate         Value             Correction            Value             Accuracy          Accuracy
+                    (km/km/km)             (km)           (km/km/km)          (Meters)          (Meters)
+ BODY-FIXED-X       0.01000000          0.00000000          0.01000000              FREE               N/A
+ BODY-FIXED-Y       0.00000000          0.00000000          0.00000000              FREE               N/A
+ BODY-FIXED-Z       0.00000000          0.00000000          0.00000000              FREE               N/A
+
+
+weights:         0 0 0
+
+BCP test 16 - Coordtype=Rect, Free, solveRad=T
+       FreePoint           FREE    1 of 1  3.54      0.01000000      0.00000000      0.00000000             N/A             N/A             N/A
+
+ Label: FreePoint
+Status: FREE
+  Rays: 1 of 1
+
+        Point         Initial              Total              Final             Initial              Final
+   Coordinate         Value             Correction            Value             Accuracy          Accuracy
+                    (km/km/km)             (km)           (km/km/km)          (Meters)          (Meters)
+ BODY-FIXED-X       0.01000000          0.00000000          0.01000000        2.00000000               N/A
+ BODY-FIXED-Y       0.00000000          0.00000000          0.00000000        3.00000000               N/A
+ BODY-FIXED-Z       0.00000000          0.00000000          0.00000000        4.00000000               N/A
+
+
+weights:         250000 111111 62500
+
+
+BCP test 17 - Coordtype=Rect, Fixed, solveRad=F
+      FixedPoint          FIXED    0 of 0  0.00      0.00000000      0.00000000      1.00000000             N/A             N/A             N/A
+
+ Label: FixedPoint
+Status: FIXED
+  Rays: 0 of 0
+
+        Point         Initial              Total              Final             Initial              Final
+   Coordinate         Value             Correction            Value             Accuracy          Accuracy
+                    (km/km/km)             (km)           (km/km/km)          (Meters)          (Meters)
+ BODY-FIXED-X       0.00000000          0.00000000          0.00000000             FIXED               N/A
+ BODY-FIXED-Y       0.00000000          0.00000000          0.00000000             FIXED               N/A
+ BODY-FIXED-Z       1.00000000          0.00000000          1.00000000             FIXED               N/A
+
+
+weights:         1e+50 1e+50 1e+50
+
+
+BCP test 18 - Create ConstrainedPoint with solveRadius=false and adjusted surface point (0, 0, 1000), no constraints set, and coordType = Rect ...
+ConstrainedPoint    CONSTRAINED    0 of 0  0.00      0.00000000      0.00000000      1.00000000             N/A             N/A             N/A
+
+ Label: ConstrainedPoint
+Status: CONSTRAINED
+  Rays: 0 of 0
+
+        Point         Initial              Total              Final             Initial              Final
+   Coordinate         Value             Correction            Value             Accuracy          Accuracy
+                    (km/km/km)             (km)           (km/km/km)          (Meters)          (Meters)
+ BODY-FIXED-X       0.00000000          0.00000000          0.00000000               N/A               N/A
+ BODY-FIXED-Y       0.00000000          0.00000000          0.00000000               N/A               N/A
+ BODY-FIXED-Z       1.00000000          0.00000000          1.00000000               N/A               N/A
+
+
+aprioriSigmas:   "NULL" "NULL" "NULL"
+weights:         0 0 0
+
+BCP test 19 - Create ConstrainedPoint with solveRadius=false and adjusted surface point (0, 0, 1000), valid globals, and coordType = Rect ...
+ConstrainedPoint    CONSTRAINED    0 of 0  0.00      0.00000000      0.00000000      1.00000000             N/A             N/A             N/A
+
+ Label: ConstrainedPoint
+Status: CONSTRAINED
+  Rays: 0 of 0
+
+        Point         Initial              Total              Final             Initial              Final
+   Coordinate         Value             Correction            Value             Accuracy          Accuracy
+                    (km/km/km)             (km)           (km/km/km)          (Meters)          (Meters)
+ BODY-FIXED-X       0.00000000          0.00000000          0.00000000        2.00000000               N/A
+ BODY-FIXED-Y       0.00000000          0.00000000          0.00000000        3.00000000               N/A
+ BODY-FIXED-Z       1.00000000          0.00000000          1.00000000        4.00000000               N/A
+
+
+aprioriSigmas:   "2.0" "3.0" "4.0"
+weights:         250000 111111 62500
+
+BCP test 20 - Create ConstrainedPoint from constrained point with adjusted  
+ pt (32, 120, 1000) & apriori pt from Test 10 with constraints from covar, solveRadius=F, 
+coordType=Rectangular...
+
+ConstrainedPoint    CONSTRAINED    0 of 0  0.00     -0.42402405      0.73443119      0.52991926     10.00000000     50.00000000     20.00000000
+
+ Label: ConstrainedPoint
+Status: CONSTRAINED
+  Rays: 0 of 0
+
+        Point         Initial              Total              Final             Initial              Final
+   Coordinate         Value             Correction            Value             Accuracy          Accuracy
+                    (km/km/km)             (km)           (km/km/km)          (Meters)          (Meters)
+ BODY-FIXED-X      -0.42402405          0.00000000         -0.42402405       10.00000000       10.00000000
+ BODY-FIXED-Y       0.73443119          0.00000000          0.73443119       50.00000000       50.00000000
+ BODY-FIXED-Z       0.52991926          0.00000000          0.52991926       20.00000000       20.00000000
+
+
+BCP test 21 - Test invalid coordinate type  
+
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
diff --git a/isis/src/control/objs/BundleUtilities/unitTest.cpp b/isis/src/control/objs/BundleUtilities/unitTest.cpp
index 4b3b7fad7906e1af132b5e9a7879e33f6f0130e6..e33ce93a3ef468c45cec738ee556b2a453b52b81 100755
--- a/isis/src/control/objs/BundleUtilities/unitTest.cpp
+++ b/isis/src/control/objs/BundleUtilities/unitTest.cpp
@@ -1,15 +1,3 @@
-#include <QByteArray>
-#include <QDebug>
-#include <QDataStream>
-#include <QFile>
-#include <QIODevice>
-#include <QString>
-#include <QXmlInputSource>
-#include <QXmlStreamWriter>
-
-#include <boost/numeric/ublas/symmetric.hpp>
-#include <boost/numeric/ublas/vector.hpp>
-
 #include "Angle.h"
 #include "BundleControlPoint.h"
 #include "BundleImage.h"
@@ -20,6 +8,7 @@
 #include "BundleSettings.h"
 #include "BundleTargetBody.h"
 #include "Camera.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "ControlMeasure.h"
 #include "Distance.h"
@@ -36,6 +25,18 @@
 #include "Target.h"
 #include "XmlStackedHandlerReader.h"
 
+#include <QByteArray>
+#include <QDebug>
+#include <QDataStream>
+#include <QFile>
+#include <QIODevice>
+#include <QString>
+#include <QXmlInputSource>
+#include <QXmlStreamWriter>
+
+#include <boost/numeric/ublas/symmetric.hpp>
+#include <boost/numeric/ublas/vector.hpp>
+
 using namespace std;
 using namespace Isis;
 
@@ -48,7 +49,27 @@ void printXml(const BundleObservationSolveSettings &);
  * @author 2014 Jeannie Backer
  *
  * @internal
+ *   @history 2018-07-03 Debbie A Cook - Removed target radii. References #5457.
  *   @history 2014-12-11 - Original version.
+ *   @history 2018-09-06 Debbie A. Cook - Merged dev into BundleXYZ branch 
+ *                               Original branch history entry on 2017-06-26 
+ *                               Updated to reflect changes made to BundleControlPoint. 
+ *                               Some tests were no longer valid and new tests were added to exercise 
+ *                               the new option of adjusting in Rectangular coordinates.  The
+ *                               Latitudinal covariance was being populated only along the diagonal 
+ *                               (using the latitudinal sigmas).  This produced inaccurate results.  
+ *                               Now it is created by converting  the rectangular covariance 
+ *                               matrix to latitudinal.  References #4649 and #501.
+ *   @history 2018 -09-06 Debbie A. Cook - Merged dev into BundleXYZ branch
+ *                               Original branch history entry on 2017-11-29 - Updated to reflect 
+ *                               changes made to units of covariance matrix in SurfacePoint methods 
+ *                               and removal of SurfacePoint::SetRadii method. 
+ *  @history 2018-09-28 Debbie A. Cook - Removed metersToRadians argument from
+ *                               constructor because we are now using the local radius instead of
+ *                               the target body equatorial radius to convert meters to radians.  To
+ *                               work, the apriori coordinates must be set.  Some of the tests do not
+ *                               require the apriori coordinates to be set, so those tests were
+ *                               modified.
  */
 namespace Isis {
   class XmlHandlerTester : public BundleObservationSolveSettings {
@@ -98,6 +119,16 @@ namespace Isis {
  *   @history 2016-12-01 Ian Humphrey - Added extra qDebug() stream so the "apply param
  *                           corrections successful?" string will be in the unitTest output.
  *   @history 2017-04-24 Ian Humphrey - Replaced pvlObject() with XML save(). Fixes #4797.
+ *   @history 2017-03-05 Debbie A. Cook - updated to conform to changes made to 
+ *                            BundleControlPointConstructor.  Fixed test 
+ *                             "Modify FreePoint - setWeights() - solveRadius=true, apriori lat/lon/rad <= 0"
+ *                             to output radius type as free instead of N/A under Inital Accuracy column and
+ *                             fixed weight value to be 0.  Corrections were made by creating a new contol
+ *                             point when the settings were changed instead of just calling setWeights.
+ *                             Deleted tests "Modified FreePoint - setWeights, "Modify FixedPoint -  
+ *                             setWeights() and ModifyConstrainedPoint - setWeights()" since 
+ *                             setWeights is always called in the constructor now.  References 
+ *                             #4649 and #501
  */
 int main(int argc, char *argv[]) {
   Preference::Preferences(true);
@@ -521,12 +552,12 @@ int main(int argc, char *argv[]) {
     catch (IException &e) {
       e.print();
     }
-
     qDebug() << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
     qDebug() << "";
     qDebug() << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
     qDebug() << "Testing BundleObservationVector...";
     qDebug() << "";
+    /*
     #if 0
     TEST COVERAGE (SCOPE) FOR THIS SOURCE FILE: 21%
     Need:
@@ -556,6 +587,7 @@ int main(int argc, char *argv[]) {
       9) getObsByCubeSerialNumber - map.contains(sn) == false
 
     #endif
+    */
     BundleObservationVector bov;
     BundleSettingsQsp bundleSettings = BundleSettingsQsp(new BundleSettings);
     // BundleObservation *obs1 = bov.addNew(bi2, "obs1", "InstrumentIdBOV", bundleSettings);
@@ -581,8 +613,11 @@ int main(int argc, char *argv[]) {
     #if 0
     TEST COVERAGE (SCOPE) FOR THIS SOURCE FILE: 100%
     #endif
-    qDebug() << "Create FreePoint with free point containing 2 measures..."
-        << "(note that first measure is ignored, second measure is not ignored)";
+    // #1 Test free point with default settings (solveRadius=false), apriori coordinates set, but no
+    //       sigmas (other settings: observation mode = false, update =false, errorProp = false)
+    qDebug() << "BCP test 1 - Create FreePoint with free point containing 2 measures "
+          "(note that first measure is ignored, second measure is not ignored)";
+    qDebug()  << "     and no apriori or adjusted coordinate values or sigmas set...";
     ControlPoint *freePoint = new ControlPoint("FreePoint");
     ControlMeasure *cm1 = new ControlMeasure;
     cm1->SetCubeSerialNumber("Ignored");
@@ -594,9 +629,10 @@ int main(int argc, char *argv[]) {
     cm2->SetCoordinate(1.0, 2.0);
     cm2->SetResidual(-3.0, 4.0);
     freePoint->Add(cm2);
-    BundleControlPoint bcp1(freePoint);
+// Moved these lines up from below (DAC 2-25-2017)
+    BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings);
+    BundleControlPoint bcp1(settings, freePoint);
     bool errorProp = false;
-    double radiansToMeters = 10.0;
 
     qDebug() << "Type of BundleControlPoint 1:" << bcp1.type();
 
@@ -613,18 +649,21 @@ int main(int argc, char *argv[]) {
     bcp1.zeroNumberOfRejectedMeasures();
     qDebug() << "Zero out number of rejected measures:" << bcp1.numberOfRejectedMeasures();
 
-    // ??? these print outs are not pretty... fix???
+    // ??? these print outs are not pretty... fix??? 
     qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
-    // ??? these print outs are not pretty... fix???
-    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
+    // ??? these print outs are not pretty... fix??? improved somewhat 6-9-2017
+    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp);
+    // Test free point.  Settings same, but errorProp = true)
     errorProp = true;
     // ??? these print outs are not pretty... fix???
     qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
     // ??? these print outs are not pretty... fix???
-    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
+    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp);
     qDebug() << "";
 
-    qDebug() << "Modify FreePoint - setAdjustedSurfacePoint(0,0,10) and addMeasure()";
+// #2 Same as test 1, but assign coordinate values (0., 0., 10.) to adjusted surface points of FREE 
+//       point with solve radius still false -- radius weight is fixed (1.0e+50).  Other coordinates are free
+    qDebug() << "BCP test 2 - Modify FreePoint - setAdjustedSurfacePoint(0,0,10) and addMeasure()";
     SurfacePoint sp1(Latitude(0.0, Angle::Degrees),
                      Longitude(0.0, Angle::Degrees),
                      Distance(10.0, Distance::Meters));
@@ -637,15 +676,23 @@ int main(int argc, char *argv[]) {
     // ??? these print outs are not pretty... fix???
     qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
     // ??? these print outs are not pretty... fix???
-    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
-
-    qDebug() << "Modify FreePoint - setWeights() - solveRadius=false";
-    // default solveRadius=false
-    BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings);
-    double metersToRadians = 1.0 / radiansToMeters;
-    bcp1.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
+    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp);
+
+    // Same but look at values of aprioriSigmas, weights, corrections, etc.
+    // qDebug() << "Modify FreePoint - setWeights() - solveRadius=false";
+    // Deleted summary and detail output here since it is duplicated now that the BCP and the
+    // constructor always calls setWeights now.;
+// Before the change, test2 checked default settings and default weights.  Omitted test checked
+// BCP creation using a blank settings (equivalent to no settings) and a setWeights call that only
+// specifies solveRadius to false, which is the same as the default.
+// default solveRadius=false
+
+    // These now commented lines were moved to before creation of bcp1 and
+    //   setWeights now happens in BundleControlPoint constructor (DAC 2-25-2017)
+    // BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings);
+    // double metersToRadians = 1.0 / radiansToMeters;
+    // bcp1.setWeights(settings, metersToRadians);
+    // qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
     boost::numeric::ublas::bounded_vector< double, 3 > aprioriSigmas = bcp1.aprioriSigmas();
     boost::numeric::ublas::bounded_vector< double, 3 > weights = bcp1.weights();
     //??? never set 000??? init to 1.0e+50???
@@ -671,14 +718,29 @@ int main(int argc, char *argv[]) {
 
     qDebug() << "Residual rms:" << bcp1.residualRms();
     qDebug() << "";
-
-    qDebug() << "Modify FreePoint - setWeights() - solveRadius=true, apriori lat/lon/rad <= 0";
-    settings->setSolveOptions(false, false, false, true, Isis::Null);
-    bcp1.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp1.aprioriSigmas();
-    weights = bcp1.weights();
+// end test 2
+
+    // #3 Test free point with solveRadius=true (default), no corrections or valid sigmas
+    qDebug() << "BCP test 3 - Create FreePoint - identical to previous, but with solveRadius=true";
+    qDebug() << " and apriori lat/lon/rad <= 0.  Test adding a measure to a BundleControlPoint.";
+//  Create a new BundleControlPoint like the previous one with settings to indicate radius is free
+    settings->setSolveOptions(false, false, false, true, SurfacePoint::Latitudinal,
+                              SurfacePoint::Latitudinal, Isis::Null);
+    BundleControlPoint bcp1a(settings, freePoint);
+    bcp1a.setAdjustedSurfacePoint(sp1);
+    BundleMeasure bcm1a = *(bcp1a.addMeasure(cm1));
+//  Note:  This test was abusing the setWeights method of BundleControlPoint.
+//  It was using setWeights to update bcp1 with new BundleSettings; in particular,
+//  it was changing the solveRadius bool from false to true.  This did not work
+//  properly because setWeights was designed to update weights after they were
+//  initialized by the constructor.  The radius weight was set to 1.0e+50 when bcp1
+//  was created with solveRadius set to false.  When setWeights was used to update
+//  the settings, the radius weight was not changed back.  setWeights should NOT
+//  be used to update BundleSettings.  This is likely only a test issue.
+    qDebug().noquote() << bcp1a.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp1a.formatBundleOutputDetailString(errorProp, true);
+    aprioriSigmas = bcp1a.aprioriSigmas();
+    weights = bcp1a.weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "N/A" : Isis::toString(aprioriSigmas[1]))
@@ -686,13 +748,19 @@ int main(int argc, char *argv[]) {
     qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
     qDebug() << "";
 
-    qDebug() << "Modify FreePoint - setWeights() - solveRadius=true, apriori lat/lon/rad > 0";
-    settings->setSolveOptions(false, false, false, true, 2.0, 3.0, 4.0);
-    bcp1.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp1.aprioriSigmas();
-    weights = bcp1.weights();
+// #4 Test with global sigmas now.  Everything else is the same as test #3.
+    qDebug() << "BCP test 4 - Create FreePoint - solveRadius=true, apriori lat/lon/rad > 0 ";
+    qDebug() << "                    from globals - coordinate type = Latitudinal";
+    settings->setSolveOptions(false, false, false, true, SurfacePoint::Latitudinal, 
+                              SurfacePoint::Latitudinal, 2.0, 3.0, 4.0);
+    freePoint->SetAprioriSurfacePoint(sp1); 
+    BundleControlPoint bcp1b(settings, freePoint);
+    bcp1b.setAdjustedSurfacePoint(sp1);
+    BundleMeasure bcm1b = *(bcp1b.addMeasure(cm1));
+    qDebug().noquote() << bcp1b.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp1b.formatBundleOutputDetailString(errorProp);
+    aprioriSigmas = bcp1b.aprioriSigmas();
+    weights = bcp1b.weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "N/A" : Isis::toString(aprioriSigmas[1]))
@@ -700,33 +768,43 @@ int main(int argc, char *argv[]) {
     qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
     qDebug() << "";
 
-    ControlPoint *cp = bcp1.rawControlPoint();
+    ControlPoint *cp = bcp1b.rawControlPoint();
     qDebug() << "Raw control point equal to original?    " << toString(*cp == *freePoint);
-    qDebug() << "Raw control point is rejected?          " << toString(bcp1.isRejected());
-    SurfacePoint sp = bcp1.adjustedSurfacePoint();
+    qDebug() << "Raw control point is rejected?          " << toString(bcp1b.isRejected());
+    SurfacePoint sp = bcp1b.adjustedSurfacePoint();
     qDebug() << "Adjusted SurfacePoint (Lat, Lon, Rad) = "
                << toString(sp.GetLatitude().degrees())
                << toString(sp.GetLongitude().degrees())
                << toString(sp.GetLocalRadius().meters());
     qDebug() << "";
 
-    qDebug() << "Create FixedPoint from empty fixed point, adjusted surface point (90, 180, 10)...";
+// Testing of Free point settings is complete
+
+//  Fixed point tests
+    qDebug() << "BCP test 5 - Create FixedPoint from empty fixed point, solveRadius = F"
+                            " adjusted surface point (90, 180, 10)...";
     ControlPoint *fixedPoint = new ControlPoint("FixedPoint");
     fixedPoint->SetType(ControlPoint::Fixed);
-    BundleControlPoint *bcp3 = new BundleControlPoint(fixedPoint);
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::Latitudinal,
+                              SurfacePoint::Latitudinal, Isis::Null);
+    BundleControlPoint *bcp3a = new BundleControlPoint(settings, fixedPoint);
     SurfacePoint sp2(Latitude(90.0, Angle::Degrees),
                      Longitude(180.0, Angle::Degrees),
                      Distance(10.0, Distance::Meters));
-    bcp3->setAdjustedSurfacePoint(sp2);
-    qDebug().noquote() << bcp3->formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp3->formatBundleOutputDetailString(errorProp, radiansToMeters);
-
-    qDebug() << "Modify FixedPoint - setWeights()";
-    bcp3->setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp3->formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp3->formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp3->aprioriSigmas();
-    weights = bcp3->weights();
+    bcp3a->setAdjustedSurfacePoint(sp2);
+    qDebug().noquote() << bcp3a->formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp3a->formatBundleOutputDetailString(errorProp);
+
+    qDebug() << "BCP test 6 - Create FixedPoint from empty fixed point, solveRadius = True";  
+    qDebug() << " adjusted surface point (90, 180, 10)...";
+settings->setSolveOptions(false, false, false, true, SurfacePoint::Latitudinal,
+                          SurfacePoint::Latitudinal, Isis::Null);
+    BundleControlPoint *bcp3b = new BundleControlPoint(settings, fixedPoint);
+    bcp3b->setAdjustedSurfacePoint(sp2);
+    qDebug().noquote() << bcp3b->formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp3b->formatBundleOutputDetailString(errorProp, true);
+    aprioriSigmas = bcp3b->aprioriSigmas();
+    weights = bcp3b->weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
@@ -734,21 +812,20 @@ int main(int argc, char *argv[]) {
     qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
     qDebug() << "";
 
-    qDebug() << "Create ConstrainedPoint from empty constrained point, surface point (0, 0, 10)...";
+// Testing of FixedPoint output completed
+
+// #7 ConstrainedPoint test with surface point with coordinates only.  SolveRadius is false.
+     qDebug() << "BCP test 7 - Create ConstrainedPoint with solveRadius=false and adjusted "
+                            "surface point (0, 0, 10), no constraints set, coordType=Latitudinal ...";
     ControlPoint *constrainedPoint = new ControlPoint("ConstrainedPoint");
     constrainedPoint->SetType(ControlPoint::Constrained);
-    BundleControlPoint bcp4(constrainedPoint);
-    bcp4.setAdjustedSurfacePoint(sp1);
-    qDebug().noquote() << bcp4.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
-
-    qDebug() << "Modify ConstrainedPoint - setWeights() - solveRadius=false";
     settings->setSolveOptions(false, false, false, false);
-    bcp4.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp4.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp4.aprioriSigmas();
-    weights = bcp4.weights();
+    BundleControlPoint bcp4a(settings, constrainedPoint);
+    bcp4a.setAdjustedSurfacePoint(sp1);
+    qDebug().noquote() << bcp4a.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp4a.formatBundleOutputDetailString(errorProp);
+    aprioriSigmas = bcp4a.aprioriSigmas();
+    weights = bcp4a.weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
@@ -756,14 +833,17 @@ int main(int argc, char *argv[]) {
     qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
     qDebug() << "";
 
-    qDebug() << "Modify ConstrainedPoint - setWeights() - no constraints, solveRadius=true, "
-                "apriori lat/lon/rad <= 0";
+// #8 ConstrainedPoint with no constraints, but solveRadius=true
+    qDebug() << "BCP test 8 - Create ConstrainedPoint - no constraints, solveRadius=true, "
+               "apriori lat/lon/rad <= 0, ";
+    qDebug() << "     and adjustedsurface point (0, 0, 10)";
     settings->setSolveOptions(false, false, false, true);
-    bcp4.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp4.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp4.aprioriSigmas();
-    weights = bcp4.weights();
+    BundleControlPoint bcp4b(settings, constrainedPoint);
+    bcp4b.setAdjustedSurfacePoint(sp1);
+    qDebug().noquote() << bcp4b.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp4b.formatBundleOutputDetailString(errorProp, true);
+    aprioriSigmas = bcp4b.aprioriSigmas();
+    weights = bcp4b.weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
@@ -771,59 +851,82 @@ int main(int argc, char *argv[]) {
     qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
     qDebug() << "";
 
-    qDebug() << "Modify ConstrainedPoint - setWeights() - no constraints, solveRadius=true, "
-                "apriori lat/lon/rad > 0";
-    settings->setSolveOptions(false, false, false, true, 2.0, 3.0, 4.0);
-    bcp4.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp4.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp4.aprioriSigmas();
-    weights = bcp4.weights();
+// #9 ConstrainedPoint with no constraints set, solveRadius=true, and valid global sigmas.
+    qDebug() << "BCP test 9 - Create ConstrainedPoint - no constraints,  solveRadius=true,"
+                " apriori lat/lon/rad > 0 (valid global sigmas)";
+    settings->setSolveOptions(false, false, false, true, SurfacePoint::Latitudinal,
+                               SurfacePoint::Latitudinal, 2.0, 3.0, 4.0);
+    constrainedPoint->SetAprioriSurfacePoint(sp1);
+    BundleControlPoint bcp4c(settings, constrainedPoint);
+    bcp4c.setAdjustedSurfacePoint(sp1);
+    qDebug().noquote() << bcp4c.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp4c.formatBundleOutputDetailString(errorProp);
+    aprioriSigmas = bcp4c.aprioriSigmas();
+    weights = bcp4c.weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
                << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
-    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    if (!IsSpecial(weights[0]) && !IsSpecial(weights[1]) && !IsSpecial(weights[2])) {
+      qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    }
+    else {
+      qDebug() << "weights:        NA";
+    }
+        
     qDebug() << "";
     qDebug() << "";
 
-    qDebug() << "Create ConstrainedPoint from constrained point with adjusted surface point "
-                "(32, 120, 1000)...";
+// #10 ConstrainedPoint with apriori and adjusted surface points fully set and solveRadius=F.
+    qDebug() << "BCP test 10 - Create ConstrainedPoint from constrained point with adjusted  ";
+    qDebug() << "    pt (32, 120, 1000) & apriori pt with constraints from covar, solveRadius=F...";
     SurfacePoint aprioriSurfPt;
-    aprioriSurfPt.SetRadii(Distance(1000.0, Distance::Meters),
-                           Distance(1000.0, Distance::Meters),
-                           Distance(1000.0, Distance::Meters));
     boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::upper> covar;
     covar.resize(3);
     covar.clear();
-    covar(0,0) = 100.0;
-    covar(1,1) = 2500.0;
-    covar(2,2) = 400.0;
+    covar(0,0) = 100.;
+    covar(1,1) = 2500.;
+    covar(2,2) = 400.;
     aprioriSurfPt.SetRectangular(Displacement(-424.024048, Displacement::Meters),
                                  Displacement(734.4311949, Displacement::Meters),
                                  Displacement(529.919264, Displacement::Meters), covar);
+// Extract the covar matrix converted to latitudinal coordinates now to use for test 10.
+// Usage note:  In order to get accurate results, the full correlation matrix should be
+// used as opposed to only setting the diagonal elements with the sigmas. 
+    boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::upper> covarLat(3);
+    covarLat.clear();
+    covarLat = aprioriSurfPt.GetSphericalMatrix();
+
+// These results match what is being set in adjusted surface point.  
+    Angle latSigma = aprioriSurfPt.GetLatSigma();
+    Angle lonSigma = aprioriSurfPt.GetLonSigma();
+    Distance localRad = aprioriSurfPt.GetLocalRadiusSigma();
     constrainedPoint->SetAprioriSurfacePoint(aprioriSurfPt);
-    BundleControlPoint bcp5(constrainedPoint);
+    settings->setSolveOptions(false, false, false, false);
+    BundleControlPoint bcp5a(settings, constrainedPoint);
     SurfacePoint adjustedSurfPt(constrainedPoint->GetAdjustedSurfacePoint());
-    adjustedSurfPt.SetSpherical(Latitude(32., Angle::Degrees),
+    adjustedSurfPt.SetSphericalCoordinates(Latitude(32., Angle::Degrees),
                                 Longitude(120., Angle::Degrees),
-                                Distance(1000., Distance::Meters),
-                                Angle(1.64192315,Angle::Degrees),
-                                Angle(1.78752107, Angle::Degrees),
-                                Distance(38.454887335682053718134171237789, Distance::Meters));
-    adjustedSurfPt.SetRadii(Distance(1000.0, Distance::Meters),
-                            Distance(1000.0, Distance::Meters),
-                            Distance(1000.0, Distance::Meters));
-    bcp5.setAdjustedSurfacePoint(adjustedSurfPt);
-    qDebug().noquote() << bcp5.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp5.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    qDebug() << "Modify ConstrainedPoint - setWeights() - solveRadius=t, lat/lon/rad constrained";
-    bcp5.setWeights(settings, metersToRadians);
-    qDebug().noquote() << bcp5.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp5.formatBundleOutputDetailString(errorProp, radiansToMeters);
-    aprioriSigmas = bcp5.aprioriSigmas(); // these values were verified by comparing against
+                                           Distance(1000., Distance::Meters));
+    adjustedSurfPt.SetSphericalMatrix(covarLat);
+                                // Angle(1.64192315,Angle::Degrees),
+                                // Angle(1.78752107, Angle::Degrees),
+                                // Distance(38.454887335682053718134171237789, Distance::Meters));
+    bcp5a.setAdjustedSurfacePoint(adjustedSurfPt);
+    qDebug().noquote() << bcp5a.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp5a.formatBundleOutputDetailString(errorProp);
+
+// #11 ConstrainedPoint with apriori and adjusted surface points fully set and solveRadius=T.
+    qDebug() << "BCP test 11 - Create ConstrainedPoint from constrained point with adjusted  surface"
+                " pt (32, 120, 1000) ";
+    qDebug() << "     & apriori pt with constraints from covar, solveRadius=T...";
+    settings->setSolveOptions(false, false, false, true);
+    BundleControlPoint bcp5b(settings, constrainedPoint);
+    qDebug().noquote() << bcp5b.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp5b.formatBundleOutputDetailString(errorProp);
+    aprioriSigmas = bcp5b.aprioriSigmas(); // these values were verified by comparing against
                                           // SurfacePoint truth data
-    weights = bcp5.weights();
+    weights = bcp5b.weights();
     qDebug() << "aprioriSigmas:  "
                << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
                << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
@@ -831,31 +934,138 @@ int main(int argc, char *argv[]) {
     qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
     qDebug() << "";
 
-    qDebug() << "Create copy of FreePoint using copy constructor...";
-    BundleControlPoint bcp2(bcp1);
+// #12 FreePoint - test copy constructor by copying bcp1b
+    qDebug() << "BCP test 12 - Create copy of FreePoint using copy constructor...";
+// Should we use bundleSettings or settings here?
+    BundleControlPoint bcp2(bcp1b);
     qDebug().noquote() << bcp2.formatBundleOutputSummaryString(errorProp);
     //solveForRadius = false by default in formatBundleDetailString
     qDebug() << "Output for formatBundleOutputDetailString(...) with solveForRadius = false:";
-    qDebug().noquote() << bcp2.formatBundleOutputDetailString(errorProp, radiansToMeters);
+    qDebug().noquote() << bcp2.formatBundleOutputDetailString(errorProp);
 
     //solveForRadius = true
-    qDebug() << "Output for formatBundleOutputDetailString(...) with solveForRadius = true:";
-    qDebug().noquote() << bcp2.formatBundleOutputDetailString(errorProp, radiansToMeters,true);
+    qDebug() << "BCP test 13 - Output for formatBundleOutputDetailString(...) with "
+                           "solveForRadius = true:";
+    qDebug().noquote() << bcp2.formatBundleOutputDetailString(errorProp, true);
 
     qDebug() << "";
 
-    qDebug() << "Overwrite existing object with FixedPoint information...";
-    bcp2.copy(*bcp3);
+    qDebug() << "BCP test 14 - Overwrite existing object with FixedPoint information...";
+    bcp2.copy(*bcp3b);
     qDebug().noquote() << bcp2.formatBundleOutputSummaryString(errorProp);
-    qDebug().noquote() << bcp2.formatBundleOutputDetailString(errorProp, radiansToMeters);
+    qDebug().noquote() << bcp2.formatBundleOutputDetailString(errorProp);
+    qDebug() << "";
+
+    qDebug() << "BCP test 15 - Coordtype=Rect, Free, solveRad=F";
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::Rectangular,
+                          SurfacePoint::Rectangular);
+    BundleControlPoint bcp1c(settings, freePoint);
+    qDebug().noquote() << bcp1c.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp1c.formatBundleOutputDetailString(errorProp);
+    weights = bcp1c.weights();
+    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    qDebug() << "";
+
+    qDebug() << "BCP test 16 - Coordtype=Rect, Free, solveRad=T";
+    settings->setSolveOptions(false, false, false, true, SurfacePoint::Rectangular,
+                              SurfacePoint::Rectangular, 2.0, 3.0, 4.0);
+    BundleControlPoint bcp1d(settings, freePoint);
+    qDebug().noquote() << bcp1d.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp1d.formatBundleOutputDetailString(errorProp);
+    weights = bcp1d.weights();
+    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    qDebug() << "";
+    qDebug() << "";
+
+    qDebug() << "BCP test 17 - Coordtype=Rect, Fixed, solveRad=F";
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::Rectangular,
+                              SurfacePoint::Rectangular, 2.0, 3.0, 4.0);
+    sp2.SetRectangular(Displacement(0.0, Displacement::Meters),
+                     Displacement(0.0, Displacement::Meters),
+                     Displacement(1000.0, Displacement::Meters));
+    BundleControlPoint *bcp3c = new BundleControlPoint(settings, fixedPoint);
+    bcp3c->setAdjustedSurfacePoint(sp2);
+    qDebug().noquote() << bcp3c->formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp3c->formatBundleOutputDetailString(errorProp);
+    weights = bcp3c->weights();
+    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    qDebug() << "";
     qDebug() << "";
+
+// #18 ConstrainedPoint test with surface point with coordinates only.  SolveRadius is false.
+     qDebug() << "BCP test 18 - Create ConstrainedPoint with solveRadius=false and adjusted "
+                            "surface point (0, 0, 1000), no constraints set, and coordType = Rect ...";
+    SurfacePoint sp3(Displacement(0.0, Displacement::Meters),
+                     Displacement(0.0, Displacement::Meters),
+                     Displacement(1000.0, Displacement::Meters));
+    ControlPoint *constrainedPointRect = new ControlPoint("ConstrainedPoint");
+    constrainedPointRect->SetType(ControlPoint::Constrained);
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::Rectangular,
+                          SurfacePoint::Rectangular);
+    BundleControlPoint bcp4d(settings, constrainedPointRect);
+    bcp4d.setAdjustedSurfacePoint(sp3);
+    qDebug().noquote() << bcp4d.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp4d.formatBundleOutputDetailString(errorProp);
+    aprioriSigmas = bcp4d.aprioriSigmas();
+    weights = bcp4d.weights();
+    qDebug() << "aprioriSigmas:  "
+               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
+               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
+               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
+    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    qDebug() << "";
+
+// #19 ConstrainedPoint test with surface point with coordinates only.  SolveRadius is false.
+     qDebug() << "BCP test 19 - Create ConstrainedPoint with solveRadius=false and adjusted "
+                            "surface point (0, 0, 1000), valid globals, and coordType = Rect ...";
+    // SurfacePoint sp3(Displacement(0.0, Displacement::Meters),
+    //                  Displacement(0.0, Displacement::Meters),
+    //                  Displacement(1000.0, Displacement::Meters));
+    // ControlPoint *constrainedPointRect = new ControlPoint("ConstrainedPoint");
+    // constrainedPointRect->SetType(ControlPoint::Constrained);
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::Rectangular,
+                              SurfacePoint::Rectangular, 2.0, 3.0, 4.0);
+    BundleControlPoint bcp4e(settings, constrainedPointRect);
+    bcp4e.setAdjustedSurfacePoint(sp3);
+    qDebug().noquote() << bcp4e.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp4e.formatBundleOutputDetailString(errorProp);
+    aprioriSigmas = bcp4e.aprioriSigmas();
+    weights = bcp4e.weights();
+    qDebug() << "aprioriSigmas:  "
+               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
+               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
+               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
+    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
+    qDebug() << "";
+
+// #20 ConstrainedPoint with apriori and adjusted surface points fully set and solveRadius=F.
+    qDebug() << "BCP test 20 - Create ConstrainedPoint from constrained point with adjusted  ";
+    qDebug() << " pt (32, 120, 1000) & apriori pt from Test 10 with constraints from covar, solveRadius=F, ";
+    qDebug() << "coordType=Rectangular...";
+    qDebug() << "";
+// This test uses an apriori surface point set with rectangular coordinates and sigmas.  The adjusted
+// surface point is set with latitudinal coordinates equivalent to the apriori surface point coordinates.
+// The covar for the adjusted surface point is generated from the apriori covar converted to latitudinal
+// coordinates.  Using just the sigmas to set the diagonal elements of the covar is not accurate.
+    constrainedPointRect->SetAprioriSurfacePoint(aprioriSurfPt);
+settings->setSolveOptions(false, false, false, false, SurfacePoint::Rectangular, SurfacePoint::Rectangular);
+    BundleControlPoint bcp5c(settings, constrainedPointRect);
+    bcp5c.setAdjustedSurfacePoint(adjustedSurfPt);
+    qDebug().noquote() << bcp5c.formatBundleOutputSummaryString(errorProp);
+    qDebug().noquote() << bcp5c.formatBundleOutputDetailString(errorProp);
+
+// #21 Test error condition - invalid BundleControlPoint coordinate type
+    qDebug() << "BCP test 21 - Test invalid coordinate type  ";
+    qDebug() << "";
+    settings->setSolveOptions(false, false, false, false, SurfacePoint::CoordinateType(3));
+
     qDebug() << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
     qDebug() << "";
     qDebug() << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
     qDebug() << "Testing BundleMeasure...";
 
     // TEST COVERAGE (SCOPE) FOR THIS SOURCE FILE: 86% //TODO update when SquishCoco works again
-    BundleMeasure bundleMeasure(cm2, bcp3);
+    BundleMeasure bundleMeasure(cm2, bcp3b);
 
     try {
       bundleMeasure.observationSolveSettings();
diff --git a/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.cpp b/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.cpp
deleted file mode 100644
index 2c9915c81b9f2d8ffb6f2ef8a8d18e6df346c9e0..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#include "IsisDebug.h"
-
-#include "ControlCubeGraphNode.h"
-
-#include <iostream>
-
-#include <QHash>
-#include <QString>
-
-#include "ControlMeasure.h"
-#include "ControlPoint.h"
-#include "IException.h"
-#include "IString.h"
-
-
-namespace Isis {
-  /**
-  * Create an empty SerialNumber object.
-  */
-  ControlCubeGraphNode::ControlCubeGraphNode(QString sn) {
-    nullify();
-
-    serialNumber = new QString(sn);
-    measures = new QHash<ControlPoint *, ControlMeasure *>;
-    connections = new QHash < ControlCubeGraphNode *, QList< ControlPoint * > >;
-  }
-
-
-  ControlCubeGraphNode::ControlCubeGraphNode(const ControlCubeGraphNode &other) {
-    nullify();
-
-    serialNumber = new QString(*other.serialNumber);
-    measures = new QHash<ControlPoint *, ControlMeasure *>;
-    connections = new QHash < ControlCubeGraphNode *, QList< ControlPoint * > >;
-
-    *measures = *other.measures;
-  }
-
-
-  void ControlCubeGraphNode::nullify() {
-    serialNumber = NULL;
-    measures = NULL;
-    connections = NULL;
-  }
-
-
-  /**
-   * Destroy a SerialNumber object.
-  */
-  ControlCubeGraphNode::~ControlCubeGraphNode() {
-    if (serialNumber) {
-      delete serialNumber;
-      serialNumber = NULL;
-    }
-
-    if (measures) {
-      delete measures;
-      measures = NULL;
-    }
-
-    if (connections) {
-      delete connections;
-      connections = NULL;
-    }
-  }
-
-
-  /**
-   * @param point The ControlPoint to check for
-   *
-   * @returns true if the point is contained, false otherwise
-   */
-  bool ControlCubeGraphNode::contains(ControlPoint *point) const {
-    return measures->contains(point);
-  }
-
-
-  /**
-   * Adds a measure
-   *
-   * @param measure The ControlMeasure to add
-   */
-  void ControlCubeGraphNode::addMeasure(ControlMeasure *measure) {
-    ASSERT(measure);
-
-    if (measure->GetCubeSerialNumber() != *serialNumber) {
-      QString msg = "Attempted to add Control Measure with Cube Serial Number ";
-      msg += "[" + measure->GetCubeSerialNumber() + "] does not match Serial ";
-      msg += "Number [" + *serialNumber + "]";
-      throw IException(IException::User, msg, _FILEINFO_);
-    }
-
-    measure->associatedCSN = this;
-    ASSERT(!measures->contains(measure->Parent()));
-    (*measures)[measure->Parent()] = measure;
-  }
-
-
-  void ControlCubeGraphNode::removeMeasure(ControlMeasure *measure) {
-
-    if (measures->remove(measure->Parent()) != 1) {
-      ASSERT(0);
-    }
-
-    measure->associatedCSN = NULL;
-  }
-
-
-  void ControlCubeGraphNode::addConnection(ControlCubeGraphNode *node,
-      ControlPoint *point) {
-    ASSERT(node);
-    ASSERT(point);
-
-    if (connections->contains(node)) {
-      if (!(*connections)[node].contains(point))
-        (*connections)[node].append(point);
-    }
-    else {
-      QList< ControlPoint * > newConnectionList;
-      newConnectionList.append(point);
-      (*connections)[node] = newConnectionList;
-    }
-  }
-
-
-  void ControlCubeGraphNode::removeConnection(ControlCubeGraphNode *node,
-      ControlPoint *point) {
-    ASSERT(node);
-    ASSERT(point);
-    ASSERT(connections);
-
-    if (connections->contains(node)) {
-      if ((*connections)[node].contains(point)) {
-        (*connections)[node].removeOne(point);
-        if (!(*connections)[node].size())
-          connections->remove(node);
-      }
-    }
-  }
-
-
-  int ControlCubeGraphNode::getMeasureCount() const {
-    return measures->size();
-  }
-
-
-  QString ControlCubeGraphNode::getSerialNumber() const {
-    return *serialNumber;
-  }
-
-
-  QList< ControlMeasure * > ControlCubeGraphNode::getMeasures() const {
-    return measures->values();
-  }
-
-
-  QList< ControlMeasure * > ControlCubeGraphNode::getValidMeasures() const {
-    QList< ControlMeasure * > validMeasures;
-
-    QList< ControlMeasure * > measureList = measures->values();
-    foreach(ControlMeasure * measure, measureList) {
-      if (!measure->IsIgnored())
-        validMeasures.append(measure);
-    }
-
-    return validMeasures;
-  }
-
-
-  QList< ControlCubeGraphNode * > ControlCubeGraphNode::getAdjacentNodes() const {
-    return connections->keys();
-  }
-
-
-  bool ControlCubeGraphNode::isConnected(ControlCubeGraphNode *other) const {
-    return connections->contains(other);
-  }
-
-
-  ControlMeasure *ControlCubeGraphNode::getMeasure(ControlPoint *point) {
-    if (!measures->contains(point)) {
-      QString msg = "point [";
-      msg += (QString) point->GetId();
-      msg += "] not found in the ControlCubeGraphNode";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    return (*measures)[point];
-  }
-
-
-  const ControlMeasure *ControlCubeGraphNode::getMeasure(
-    ControlPoint *point) const {
-    if (!measures->contains(point)) {
-      QString msg = "point [";
-      msg += (QString) point->GetId();
-      msg += "] not found in the ControlCubeGraphNode";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    return measures->value(point);
-  }
-
-
-  ControlMeasure *ControlCubeGraphNode::operator[](ControlPoint *point) {
-    return getMeasure(point);
-  }
-
-
-  const ControlMeasure *ControlCubeGraphNode::operator[](
-    ControlPoint *point) const {
-    return getMeasure(point);
-  }
-
-
-  const ControlCubeGraphNode &ControlCubeGraphNode::operator=(
-    ControlCubeGraphNode other) {
-    if (this == &other)
-      return *this;
-
-    if (serialNumber) {
-      delete serialNumber;
-      serialNumber = NULL;
-    }
-
-    if (measures) {
-      delete measures;
-      measures = NULL;
-    }
-
-    if (connections) {
-      delete connections;
-      connections = NULL;
-    }
-
-    serialNumber = new QString;
-    measures = new QHash< ControlPoint *, ControlMeasure *>;
-    connections = new QHash< ControlCubeGraphNode *, QList< ControlPoint * > >;
-
-    *serialNumber = *other.serialNumber;
-    *measures = *other.measures;
-    *connections = *other.connections;
-
-    return *this;
-  }
-
-
-  QString ControlCubeGraphNode::connectionsToString() const {
-    QHashIterator< ControlCubeGraphNode *, QList< ControlPoint * > > i(
-      *connections);
-
-    QStringList serials;
-    while (i.hasNext()) {
-      i.next();
-      QString line = "    " + (QString) i.key()->getSerialNumber();
-      line += " :  ";
-      for (int j = 0; j < i.value().size(); j++) {
-        line += (QString) i.value()[j]->GetId();
-        if (j != i.value().size() - 1)
-          line += ", ";
-      }
-      serials << line;
-    }
-    qSort(serials);
-
-    return serials.join("\n");
-  }
-
-}
diff --git a/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.h b/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.h
deleted file mode 100644
index 0a8d349696219da91c9889757d7176411bd5d346..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.h
+++ /dev/null
@@ -1,118 +0,0 @@
-#ifndef ControlCubeGraphNode_h
-#define ControlCubeGraphNode_h
-
-/**
- * @file
- * $Revision: 1.8 $
- * $Date: 2008/06/18 18:54:11 $
- *
- *   Unless noted otherwise, the portions of Isis written by the USGS are public
- *   domain. See individual third-party library and package descriptions for
- *   intellectual property information,user agreements, and related information.
- *
- *   Although Isis has been used by the USGS, no warranty, expressed or implied,
- *   is made by the USGS as to the accuracy and functioning of such software
- *   and related material nor shall the fact of distribution constitute any such
- *   warranty, and no responsibility is assumed by the USGS in connection
- *   therewith.
- *
- *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
- *   the Privacy &amp; Disclaimers page on the Isis website,
- *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.
- */
-
-#include <QObject>
-
-template< typename A, typename B > class QHash;
-template< typename T > class QList;
-
-class QString;
-
-namespace Isis {
-  class ControlMeasure;
-  class ControlPoint;
-
-  /**
-   * @brief Serial Number with added functionality for Control Networks
-   *
-   * This class is extends the Serial Number class in order to directly point
-   * between its associated measures in a Control Network and back.
-   *
-   * @ingroup ControlNetwork
-   *
-   * @author 2011-01-14 Travis Addair and Christopher Austin
-   *
-   * @see ControlPoint ControlMeasure
-   *
-   * @internal
-   *   @history 2011-01-14 Travis Addair and Christopher Austin - original
-   *                version
-   *   @history 2011-02-18 Eric Hyer - This class now also acts as a vertex
-   *                class for a graph where edges are the connections between
-   *                images.  This means that connections are stored to other
-   *                ControlCubeGraphNode objects who have measures which have
-   *                the same parent (point) as measures here.
-   *   @history 2011-02-22 Eric Hyer - Added isConnected() and
-   *                getAdjacentNodes methods
-   *   @history 2011-03-15 Eric Hyer - Connections handled more simply - fixed
-   *                connection related bugs
-   *   @history 2011-06-22 James Alexander Crough and Eric Hyer- Added 
-   *                getValidMeasures method.
-   *   @history 2011-07-29 Jai Rideout, Steven Lambright, and Eric Hyer - Made
-   *                           this inherit from QObject to get destroyed()
-   *                           signal
-   */
-  class ControlCubeGraphNode : public QObject {
-
-      Q_OBJECT
-
-    public:
-      explicit ControlCubeGraphNode(QString sn);
-      ControlCubeGraphNode(const ControlCubeGraphNode &other);
-      virtual ~ControlCubeGraphNode();
-
-      void addMeasure(ControlMeasure *measure);
-      void removeMeasure(ControlMeasure *measure);
-      void addConnection(ControlCubeGraphNode *, ControlPoint *);
-      void removeConnection(ControlCubeGraphNode *, ControlPoint *);
-
-      bool contains(ControlPoint *point) const;
-      QString getSerialNumber() const;
-      int getMeasureCount() const;
-      QList< ControlMeasure * > getMeasures() const;
-      QList< ControlMeasure * > getValidMeasures() const;
-      QList< ControlCubeGraphNode * > getAdjacentNodes() const;
-      bool isConnected(ControlCubeGraphNode *other) const;
-
-      ControlMeasure *getMeasure(ControlPoint *point);
-      const ControlMeasure *getMeasure(ControlPoint *point) const;
-      ControlMeasure *operator[](ControlPoint *point);
-      const ControlMeasure *operator[](ControlPoint *point) const;
-
-      const ControlCubeGraphNode &operator=(ControlCubeGraphNode);
-
-      QString connectionsToString() const;
-
-
-    private:
-      void nullify();
-
-
-    private:
-      QString *serialNumber;
-
-      //! ControlMeasures hashed by ControlPoint
-      QHash< ControlPoint *, ControlMeasure * > * measures;
-
-      /**
-       * Stores a list of ControlPoints which establish a conection to the
-       * ControlCubeGraphNode that the list is hashed by
-       */
-      QHash< ControlCubeGraphNode *, QList< ControlPoint * > > * connections;
-
-  };
-}
-
-#endif
diff --git a/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.truth b/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.truth
deleted file mode 100644
index 6c39428d06e80bf27e9e9a88ab81d100c0534612..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlCubeGraphNode/ControlCubeGraphNode.truth
+++ /dev/null
@@ -1,26 +0,0 @@
-Test adding first measure ...
-Key = Point1
-Value = measure with cube serial number Image1
-Successfully added measure
-
-Test adding second measure ...
-Key = Point1
-Value = measure with cube serial number Image2
-**USER ERROR** Attempted to add Control Measure with Cube Serial Number [Image2] does not match Serial Number [Image1].
-
-Test adding third measure ...
-Key = Point2
-Value = measure with cube serial number Image1
-Successfully added measure
-
-Test adding fourth measure ...
-Key = Point2
-Value = measure with cube serial number Image2
-**USER ERROR** Attempted to add Control Measure with Cube Serial Number [Image2] does not match Serial Number [Image1].
-
-Testing getMeasures method...
-   (Image1)
-   (Image1)
-
-Testing getValidMeasures method...
-   (Image1)
diff --git a/isis/src/control/objs/ControlCubeGraphNode/unitTest.cpp b/isis/src/control/objs/ControlCubeGraphNode/unitTest.cpp
deleted file mode 100644
index aec5a5baef32527113c8c7d9023e67bc4a09f978..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlCubeGraphNode/unitTest.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <iostream>
-#include <float.h>
-
-#include <QList>
-#include <QString>
-#include <QStringList>
-
-#include "ControlMeasure.h"
-#include "ControlPoint.h"
-#include "ControlCubeGraphNode.h"
-
-#include "ControlMeasureLogData.h"
-#include "IException.h"
-#include "Preference.h"
-
-using namespace std;
-using namespace Isis;
-
-
-int main() {
-  Preference::Preferences(true);
-
-  ControlCubeGraphNode graphNode("Image1");
-
-  ControlPoint point1("Point1");
-
-  ControlMeasure *measure1 = new ControlMeasure();
-  measure1->SetCubeSerialNumber("Image1");
-  measure1->SetCoordinate(1,2);
-  ControlMeasure *measure2 = new ControlMeasure();
-  measure2->SetCubeSerialNumber("Image2");
-
-  point1.Add(measure1);
-  point1.Add(measure2);
-
-  cout << "Test adding first measure ..." << endl;
-  cout << "Key = " << measure1->GetPointId().toStdString() << endl;
-  cout << "Value = measure with cube serial number " <<
-      measure1->GetCubeSerialNumber() << endl;
-  try {
-    graphNode.addMeasure(measure1);
-    cout << "Successfully added measure" << endl;
-  }
-  catch (IException &e) {
-    e.print();
-  }
-  cout << endl;
-
-  cout << "Test adding second measure ..." << endl;
-  cout << "Key = " << measure2->GetPointId().toStdString() << endl;
-  cout << "Value = measure with cube serial number " <<
-      measure2->GetCubeSerialNumber() << endl;
-  try {
-    graphNode.addMeasure(measure2);
-    cout << "Successfully added measure" << endl;
-  }
-  catch (IException &e) {
-    e.print();
-  }
-  cout << endl;
-
-  ControlPoint point2("Point2");
-
-  ControlMeasure *measure3 = new ControlMeasure();
-  measure3->SetCubeSerialNumber("Image1");
-  measure3->SetCoordinate(3,4);
-  ControlMeasure *measure4 = new ControlMeasure();
-  measure4->SetCubeSerialNumber("Image2");
-
-  point2.Add(measure3);
-  point2.Add(measure4);
-
-  cout << "Test adding third measure ..." << endl;
-  cout << "Key = " << measure3->GetPointId().toStdString() << endl;
-  cout << "Value = measure with cube serial number " <<
-      measure3->GetCubeSerialNumber() << endl;
-  try {
-    graphNode.addMeasure(measure3);
-    cout << "Successfully added measure" << endl;
-  }
-  catch (IException &e) {
-    e.print();
-  }
-  cout << endl;
-
-  cout << "Test adding fourth measure ..." << endl;
-  cout << "Key = " << measure4->GetPointId().toStdString() << endl;
-  cout << "Value = measure with cube serial number " <<
-      measure4->GetCubeSerialNumber() << endl;
-  try {
-    graphNode.addMeasure(measure4);
-    cout << "Successfully added measure" << endl;
-  }
-  catch (IException &e) {
-    e.print();
-  }
-  cout << endl;
-
-  cout << "Testing getMeasures method...\n";
-  QList< ControlMeasure * > measures = graphNode.getMeasures();
-  foreach (ControlMeasure * measure, measures) {
-    cout << "   (" << measure->GetCubeSerialNumber() << ")\n";
-  }
-
-  cout << "\nTesting getValidMeasures method...\n";
-  measures[0]->SetIgnored(true);
-  measures = graphNode.getValidMeasures();
-  foreach (ControlMeasure * measure, measures) {
-    cout << "   (" << measure->GetCubeSerialNumber() << ")\n";
-  }
-
-  return 0;
-}
-
diff --git a/isis/src/control/objs/ControlGraph/ControlGraph.cpp b/isis/src/control/objs/ControlGraph/ControlGraph.cpp
deleted file mode 100644
index c58e710b34959d504389590b645f61470f4360d3..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlGraph/ControlGraph.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-#include "IsisDebug.h"
-#include "ControlGraph.h"
-
-#include <iostream>
-#include <utility>
-
-#include <QHash>
-#include <QMap>
-#include <QString>
-#include <QVector>
-#include <QQueue>
-#include <QPair>
-
-#include "ControlMeasure.h"
-#include "ControlPoint.h"
-#include "GroupedStatistics.h"
-#include "ControlNet.h"
-#include "IException.h"
-#include "IString.h"
-
-
-
-namespace Isis {
-
-  /**
-   * construct a ControlGraph given a ControlNet
-   *
-   * @param someControlNet ControlNet to construct a ControlGraph from
-   */
-  ControlGraph::ControlGraph(ControlNet *someControlNet) {
-    cnet = someControlNet;
-    cubeIdToIndexHash = NULL;
-    cubeIndexToIdHash = NULL;
-    graph = NULL;
-    graph = new QMap< int, QPair< AdjacentCubeList, GroupedStatistics > >();
-
-    // cubeIdToIndexHash provides a way of assigning unique sequential indices
-    // to all of the Cube Serial numbers in the ControlNet, while
-    // cubeIndexToIdHash prvides a way to get the Cube Serial numbers back.
-    cubeIdToIndexHash = new QHash< QString, int >();
-    cubeIndexToIdHash = new QHash< int, QString >();
-    cubeIdToIndexHash->reserve(cnet->GetNumPoints() / 5);
-    cubeIndexToIdHash->reserve(cnet->GetNumPoints() / 5);
-
-    HashCubesAndPopulateGraph();
-
-    CalculateIslands();
-
-    if (islands->size())
-      connected = false;
-    else
-      connected = true;
-  }
-
-
-  /**
-   *  copy construct a ControlGraph object
-   *
-   *  @param other The ControlGraph to construct a copy of
-   */
-  ControlGraph::ControlGraph(const ControlGraph &other) {
-    cnet = other.cnet;
-
-    cubeIdToIndexHash = NULL;
-    cubeIndexToIdHash = NULL;
-    graph = NULL;
-    islands = NULL;
-
-    cubeIdToIndexHash = new QHash< QString, int >(*other.cubeIdToIndexHash);
-    cubeIndexToIdHash = new QHash< int, QString >(*other.cubeIndexToIdHash);
-    graph = new QMap< int, QPair< AdjacentCubeList, GroupedStatistics > >(
-      *other.graph);
-    islands = new QVector< QVector< int > >(*other.islands);
-
-    connected = other.connected;
-  }
-
-
-  /**
-   *  Destruct a ControlGraph
-   */
-  ControlGraph::~ControlGraph() {
-    cnet = NULL;
-
-    if (cubeIdToIndexHash) {
-      delete cubeIdToIndexHash;
-      cubeIdToIndexHash = NULL;
-    }
-
-    if (cubeIndexToIdHash) {
-      delete cubeIndexToIdHash;
-      cubeIndexToIdHash = NULL;
-    }
-
-    if (graph) {
-      delete graph;
-      graph = NULL;
-    }
-
-    if (islands) {
-      delete islands;
-      islands = NULL;
-    }
-  }
-
-
-  //! Returns true if this ControlGraph is connected or false otherwise
-  bool ControlGraph::IsConnected() const {
-    return connected;
-  }
-
-
-  /**
-   *  There can be 0 islands or 2 or more islands.  GetIslandCount will never
-   *  return 1 since 1 island is really just a connected graph (with 0 islands).
-   */
-  int ControlGraph::GetIslandCount() const {
-    return islands->size();
-  }
-
-
-  /**
-   *  @param island A list of all cubes that are on this island are desired
-   *
-   *  @returns A list of CubeSerialNumbers which are located on the given island
-   */
-  const QVector< QString > ControlGraph::GetCubesOnIsland(const int &island)
-  const {
-    if (connected) {
-      QString msg = "\n\nGetCubesOnIsland called on connected graph with no "
-                    "islands!!!\n\n";
-      throw IException(IException::Programmer, msg.toStdString(), _FILEINFO_);
-    }
-
-    ASSERT(islands->size() != 0);
-
-    if (island < 0 || island >= islands->size()) {
-      QString msg = "\n\nA list of cubes was requested from island " +
-                    QString::number(island) + "\nbut that island does not exist!!!"
-                    "\n\nThere are " + QString::number(islands->size()) + " islands "
-                    "numbered from 0 to " + QString::number(islands->size() - 1) + "\n\n";
-      throw IException(IException::Programmer, msg.toStdString(), _FILEINFO_);
-    }
-
-    QVector< QString > cubeList;
-    for (int i = 0; i < (*islands)[island].size(); i++) {
-      cubeList.push_back(cubeIndexToIdHash->value((*islands)[island][i]));
-    }
-
-    return cubeList;
-  }
-
-
-  /**
-   *  @returns A list of all CubeSerialNumbers in the given ControlNet
-   */
-  const QVector< QString > ControlGraph::GetCubeList() const {
-    QVector< QString > cubeList;
-
-    // for each key in the cubeIdToIndexHash add the key to a vector
-    QHash< QString, int >::const_iterator i = cubeIdToIndexHash->constBegin();
-    while (i != cubeIdToIndexHash->constEnd()) {
-      cubeList.push_back(i.key());
-      i++;
-    }
-
-    return cubeList;
-  }
-
-
-  /**
-   *  @param CubeSerialNumber The Serial number of the cube to get Statistics on
-   *
-   *  @returns Statistics for all measures associated with the given cube
-   */
-  const GroupedStatistics &ControlGraph::GetMeasureStats(const QString &
-      CubeSerialNumber) const {
-    return graph->find(cubeIdToIndexHash->value(CubeSerialNumber)).value()
-           .second;
-  }
-
-
-  /**
-   *  @param other The ControlGraph on the right side of the =
-   */
-  ControlGraph &ControlGraph::operator=(const ControlGraph &other) {
-    if (this == &other)
-      return *this;
-
-    if (cubeIdToIndexHash) {
-      delete cubeIdToIndexHash;
-      cubeIdToIndexHash = NULL;
-    }
-    if (cubeIndexToIdHash) {
-      delete cubeIndexToIdHash;
-      cubeIndexToIdHash = NULL;
-    }
-    if (graph) {
-      delete graph;
-      graph = NULL;
-    }
-    if (islands) {
-      delete islands;
-      islands = NULL;
-    }
-
-    cnet = other.cnet;
-    connected = other.connected;
-
-    cubeIdToIndexHash = new QHash< QString, int >(*other.cubeIdToIndexHash);
-    cubeIndexToIdHash = new QHash< int, QString >(*other.cubeIndexToIdHash);
-    graph = new QMap< int, QPair< AdjacentCubeList, GroupedStatistics > >(
-      *other.graph);
-    islands = new QVector< QVector< int > >(*other.islands);
-
-    return *this;
-  }
-
-
-  /**
-   * @param someControlNet The ControlNet to create a ControlGraph from
-   */
-  void ControlGraph::HashCubesAndPopulateGraph() {
-    // index assigned to last hashed cube (-1 means empty hash table)
-    int cubeIndex = -1;
-
-    // whats about to happen is this:
-    //
-    // for all ControlPoints in the given ControlNet
-    //   for each ControlMeasure (cube) in the ControlPoint
-    //     for all the other ControlMeasures (other cubes) in the ControlPoint
-    //       add connection from previous for loops cube to this for loops cube
-    //
-    // along the way as we encounter new cubes they are hashed.  Also, for all
-    // the measures encountered be the middle for loop statistics are saved.
-
-    for (int cpIndex = 0; cpIndex < cnet->GetNumPoints(); cpIndex++) {
-      if (!(*cnet)[cpIndex]->IsIgnored()) {
-        // use a reference for the current ControlPoint for clearity
-        const ControlPoint &curCtrlPoint = *(*cnet)[cpIndex];
-        for (int cmIndex = 0; cmIndex < curCtrlPoint.GetNumMeasures(); cmIndex++) {
-          // get current cube's serial number and hash if new
-          QString curCube = curCtrlPoint[cmIndex]->GetCubeSerialNumber();
-          if (!cubeIdToIndexHash->contains(curCube)) {
-            cubeIdToIndexHash->insert(curCube, ++cubeIndex);
-            cubeIndexToIdHash->insert(cubeIndex, curCube);
-          }
-          int curCubeIndex = cubeIdToIndexHash->value(curCube);
-
-          QMap < int, QPair< AdjacentCubeList, GroupedStatistics >
-          >::iterator graphIterator = graph->find(curCubeIndex);
-
-          // look for adjacent cubes
-          for (int cmIndex2 = 0; cmIndex2 < curCtrlPoint.GetNumMeasures(); cmIndex2++) {
-            if (cmIndex2 != cmIndex) {
-              // get adjacent cube's serial number and hash if new
-              QString adjacentCube = curCtrlPoint[cmIndex2]->GetCubeSerialNumber();
-              if (!cubeIdToIndexHash->contains(adjacentCube)) {
-                cubeIdToIndexHash->insert(adjacentCube, ++cubeIndex);
-                cubeIndexToIdHash->insert(cubeIndex, adjacentCube);
-              }
-              int adjCubeIndex = cubeIdToIndexHash->value(adjacentCube);
-
-              // add a connection from the current cube to the adjacent cube
-              if (graphIterator != graph->end()) {
-                graphIterator.value().first.AddConnection(adjCubeIndex, cpIndex,
-                    cmIndex2);
-              }
-              else {
-                AdjacentCubeList newCubeList(adjCubeIndex, cpIndex, cmIndex2);
-                GroupedStatistics cmStats;
-                graph->insert(curCubeIndex, qMakePair(newCubeList, cmStats));
-              }
-            }
-          } // of for all measures in cp
-
-          // save off statistics
-          if (graphIterator != graph->end()) {
-            QVector< QString > dataNames(cnet->GetPoint(cpIndex)->
-                                         GetMeasure(cmIndex)->GetMeasureDataNames());
-
-            for (int i = 0; i < dataNames.size(); i++)
-              graphIterator.value().second.AddStatistic(dataNames[i],
-                  cnet->GetPoint(cpIndex)->GetMeasure(cmIndex)->
-                  GetMeasureData(dataNames[i]));
-          } // of saving statistics
-        } // of for all measures in cp
-      } // of if not an igrored point
-    } // of for all ControlPoints in net
-  } // of HashCubesAndPopulateGraph
-
-
-  /**
-   *  Determines whether or not islands exist and calculates what they are if
-   *  present
-   */
-  void ControlGraph::CalculateIslands() {
-    // assume subgraphs exist! (check assumption at the very end of the method)
-
-    // A search list has a value for every cube, which defaults to false.
-    // A breadth-first search is used to test connectivity and works by setting
-    // each cubes cooresponding search list value to true as it is visited.
-    // At the end of the first round the true entries make up the first
-    // subgragh.  As they are added to the first subgraph they are removed from
-    // the search list.  The remaining false entries must have the breadth-first
-    // search done on them to determine the next subgraph(s).  This process
-    // continues until all entries in the search list are true (until all cubes
-    // have been visited)
-    QMap< int, bool > searchList;
-    for (int i = 0; i < graph->size(); i++)
-      searchList.insert(i, false);
-
-    // For each subgraph keep a list of the cubes in the subgraph.  This is
-    // represented by a 2d vector where the inner vectors are cubes within a
-    // subgraph and the outer vector is a list of subgraphs
-    islands = new QVector< QVector< int > >();
-
-    // keeps track of which itteration of the breadth-first search we are on and
-    // thus also which subgraph we are currently populating
-    int subgraphIndex = -1;
-
-    while (searchList.size()) {
-      // create a new subgraph
-      subgraphIndex++;
-      islands->push_back(QVector< int >());
-
-      // The queue used for breadth-first searching
-      QQueue< int > q;
-
-      // visit the first cube
-      searchList.begin().value() = true;
-      q.enqueue(searchList.begin().key());
-
-      // visit all cubes possible using the breadth-first approach
-      while (q.size()) {
-        int curVertex(q.dequeue());
-        QVector< int > adjacentVertices = graph->find(curVertex).value().first
-                                          .GetAdjacentCubes();
-
-        for (int i = 0; i < adjacentVertices.size(); i++) {
-          const int &curNeighbor = adjacentVertices[i];
-
-          ASSERT(searchList.find(curNeighbor) != searchList.end());
-
-          if (!searchList.find(curNeighbor).value()) {
-            searchList.find(curNeighbor).value() = true;
-            q.enqueue(curNeighbor);
-          }
-        }
-      } // end of breadth-first search
-
-      // add all true entries to the current subgraph
-      QMap< int, bool >::iterator i = searchList.begin();
-      while (i != searchList.end()) {
-        if (i.value()) {
-          (*islands)[subgraphIndex].push_back(i.key());
-        }
-        i++;
-      }
-
-      // remove all the true entries from the search list
-      for (int i = 0; i < (*islands)[subgraphIndex].size(); i++) {
-        searchList.remove((*islands)[subgraphIndex][i]);
-      }
-    }
-
-    // if there was only ever one subgraph created then the initial assumption
-    // was wrong!  There are no islands at all - this is a connected graph!
-    if (subgraphIndex == 0) {
-      islands->clear();
-    }
-  }
-
-
-  /**
-   *  Construct a new AdjacentCubeList given one initial adjacent connection.
-   *  An adjacent connection means both an adjacent vertex as well as the edge
-   *  that connects it.  The cubeIndex is the vertex.  The edge is a
-   *  ControlPoint - ControlMeasure combo.
-   *
-   *  @param cubeIndex First adjacent cube
-   *  @param cpIndex ControlPoint Index
-   *  @param cmIndex ControlMeasure Index
-   */
-  ControlGraph::AdjacentCubeList::AdjacentCubeList(const int &cubeIndex,
-      const int &cpIndex, const int &cmIndex) {
-    connections = NULL;
-
-    QVector< QPair< int, int > > firstEdge;
-    firstEdge.push_back(qMakePair(cpIndex, cmIndex));
-    connections = new QMap< int, QVector< QPair< int, int > > >();
-    connections->insert(cubeIndex, firstEdge);
-  }
-
-
-  /**
-   *  copy construct an AdjacentCubeList
-   *
-   *  @param other The AdjacentCubeList to construct a copy of
-   */
-  ControlGraph::AdjacentCubeList::AdjacentCubeList(const AdjacentCubeList &
-      other) {
-    connections = NULL;
-    connections = new QMap< int, QVector< QPair< int, int > > >(
-      *other.connections);
-  }
-
-
-  //! destruct an AdjacentCubeList
-  ControlGraph::AdjacentCubeList::~AdjacentCubeList() {
-    if (connections) {
-      delete connections;
-      connections = NULL;
-    }
-  }
-
-
-  /**
-   *  @returns A list of adjacent cubes!
-   */
-  const QVector< int > ControlGraph::AdjacentCubeList::GetAdjacentCubes() const {
-    // vector of adjacent cubes to be returned
-    QVector< int > adjacentCubes;
-
-    if (!connections)
-      return adjacentCubes;
-
-    QMap< int, QVector< QPair< int, int > > >::const_iterator i =
-      connections->constBegin();
-    while (i != connections->constEnd()) {
-      adjacentCubes.push_back(i.key());
-      i++;
-    }
-
-    return adjacentCubes;
-  }
-
-
-  /**
-   *  Adds a connection to an AdjacentCubeList.  A connection consists of a new
-   *  vertex as well as the edge that connects it.  The vertex is the cube index
-   *  and the edge is the ControlPoint - ControlMeasure combo.
-   *
-   *  @param cubeIndex Adjacent cube
-   *  @param cpIndex ControlPoint index
-   *  @param cmIndex ControlMeasure index
-   */
-  void ControlGraph::AdjacentCubeList::AddConnection(const int &cubeIndex,
-      const int &cpIndex, const int &cmIndex) {
-    QMap< int, QVector< QPair< int, int > > >::iterator i =
-      connections->find(cubeIndex);
-
-    // if the cube already exists in our list then just add another edge to it.
-    // otherwise we need to add the cube as well.
-    if (i != connections->end()) {
-      i.value().push_back(qMakePair(cpIndex, cmIndex));
-    }
-    else {
-      QVector< QPair< int, int > > firstEdge;
-      firstEdge.push_back(qMakePair(cpIndex, cmIndex));
-      connections->insert(cubeIndex, firstEdge);
-    }
-  }
-
-
-  /**
-   *  @param other The AdjacentCubeList on the right side of the =
-   */
-  ControlGraph::AdjacentCubeList &ControlGraph::AdjacentCubeList::operator=(
-    const AdjacentCubeList &other) {
-    if (connections) {
-      delete connections;
-      connections = NULL;
-    }
-
-    connections = new QMap< int, QVector< QPair< int, int > > >(
-      *other.connections);
-
-    return *this;
-  }
-}
diff --git a/isis/src/control/objs/ControlGraph/ControlGraph.h b/isis/src/control/objs/ControlGraph/ControlGraph.h
deleted file mode 100644
index 59a7a20926fd29f9c035d7b26557b36480816297..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlGraph/ControlGraph.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#ifndef ControlGraph_h
-#define ControlGraph_h
-
-/**
- * @file
- *   Unless noted otherwise, the portions of Isis written by the USGS are
- *   public domain. See individual third-party library and package descriptions
- *   for intellectual property information, user agreements, and related
- *   information.
- *
- *   Although Isis has been used by the USGS, no warranty, expressed or
- *   implied, is made by the USGS as to the accuracy and functioning of such
- *   software and related material nor shall the fact of distribution
- *   constitute any such warranty, and no responsibility is assumed by the
- *   USGS in connection therewith.
- *
- *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
- *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
- *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.
- */
-
-
-template< class A, class B > class QHash;
-template< class A, class B > class QMap;
-template< class A, class B > struct QPair;
-template< class A> class QVector;
-class QString;
-
-namespace Isis {
-  class ControlNet;
-  class GroupedStatistics;
-
-  /**
-   * @brief Control Network statistics and connectivity
-   *
-   * This class is used to store statistics on a Control Network
-   *
-   * This class is include safe meaning that includers of this class will only
-   * get this class.
-   *
-   * @ingroup ControlGraph
-   *
-   * @author 2009-09-23 Eric Hyer
-   *
-   * @see ControlNet ControlPoint ControlMeasure GroupedStatistics
-   *
-   * @internal
-   *   @history 2009-09-23 Eric Hyer Original version
-   *   @history 2009-10-15 Eric Hyer Added GetCubeList Method
-   *   @history 2010-10-26 Tracie Sucharski Added missing includes to cpp after
-   *                                       removing includes from ControlNet.h.
-   *   @history 2016-08-28 Kelvin Rodriguez Qpair now properly forward declared as a struct to
-   *                                       squash warnings in clang
-   */
-  class ControlGraph {
-    public:
-      ControlGraph(ControlNet *someControlNet);
-      ControlGraph(const ControlGraph &other);
-      ~ControlGraph();
-
-      bool IsConnected() const;
-      int GetIslandCount() const;
-      const QVector< QString > GetCubesOnIsland(const int &island) const;
-      const QVector< QString > GetCubeList() const;
-      const GroupedStatistics &GetMeasureStats(const QString &
-          CubeSerialNumber) const;
-
-      ControlGraph &operator=(const ControlGraph &other);
-
-    private:
-      // nested class forward declaration
-      class AdjacentCubeList;
-
-      void HashCubesAndPopulateGraph();
-      void CalculateIslands();
-
-      //! ControlNet to make a graph from
-      ControlNet *cnet;
-
-      //! Used to get an index from a cube serial number
-      QHash< QString, int > * cubeIdToIndexHash;
-
-      //! Used to get a cube serial number from an index
-      QHash< int, QString > * cubeIndexToIdHash;
-
-      /**
-       *  THE GRAPH!!  It is a map of cube indices to a pair.  The first pair
-       *  element is a list that contains not only all the cubes which are
-       *  adjacent to it (as indices also), but also the edges that make these
-       *  these connections.  The second pair element contains statistics on
-       *  this cube.
-       */
-      QMap< int, QPair< AdjacentCubeList, GroupedStatistics > > * graph;
-
-      /**
-       *  Stores the state of the graphs connectivity so that connectivity must
-       *  only be calculated once.
-       */
-      bool connected;
-
-      //! Stores a list of islands which are themselves a list of cube indices
-      QVector< QVector< int > > * islands;
-
-      /**
-       * @brief Control Graph nested class
-       *
-       * This class is used to store adjacent cube connections for ControlGraph
-       *
-       * @ingroup ControlGraph
-       *
-       * @author 2009-09-18 Eric Hyer
-       *
-       * @see ControlGraph
-       *
-       * @internal
-       *
-       */
-      class AdjacentCubeList {
-        public:
-          AdjacentCubeList(const int &cubeIndex, const int &cpIndex, const int
-                           & cmIndex);
-          AdjacentCubeList(const AdjacentCubeList &other);
-          ~AdjacentCubeList();
-
-          const QVector< int > GetAdjacentCubes() const;
-          void AddConnection(const int &cubeIndex, const int &cpIndex, const
-                             int &cmIndex);
-          AdjacentCubeList &operator=(const AdjacentCubeList &other);
-
-        private:
-          //! stores all edges or connections for an adjacent cube
-          QMap< int, QVector< QPair< int, int > > > * connections;
-      };
-  };
-};
-
-#endif
diff --git a/isis/src/control/objs/ControlGraph/ControlGraph.truth b/isis/src/control/objs/ControlGraph/ControlGraph.truth
deleted file mode 100644
index 5e8586d3fa58d77d501e7df04ce19e296e896a24..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlGraph/ControlGraph.truth
+++ /dev/null
@@ -1,39 +0,0 @@
-
-Unit Test for ControlGraph!!!
-
-building the following ControlNet for testing...
-
-  ControlPoint  |  Images
-----------------|--------------------------
-	0	|	A	B
-	1	|	A	B	C
-	2	|	A	B	C
-	3	|	B	C
-	4	|	B	C
-	5	|	D	E
-
-ControlNet built!
-
-constructing a ControlGraph...
-ControlGraph constructed!
-
-IsConnected() returns: false
-
-GetIslandCount returns: 2
-
-GetCubesOnIsland(0) returns:  A  B  C
-
-GetCubesOnIsland(1) returns:  D  E
-
-GetCubesOnIsland(42) returns:**PROGRAMMER ERROR** A list of cubes was requested from island 42
-but that island does not exist!!!
-
-There are 2 islands numbered from 0 to 1.
-
-GetCubeList() returns (NOTE: sorted in unittest):
-    A
-    B
-    C
-    D
-    E
-
diff --git a/isis/src/control/objs/ControlGraph/unitTest.cpp b/isis/src/control/objs/ControlGraph/unitTest.cpp
deleted file mode 100644
index f8e8b751f6fce85b36bcf5ba4507114dd5191574..0000000000000000000000000000000000000000
--- a/isis/src/control/objs/ControlGraph/unitTest.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-#include "ControlPoint.h"
-#include "ControlMeasure.h"
-#include "ControlNet.h"
-#include "IException.h"
-#include "Preference.h"
-#include "ControlGraph.h"
-
-#include <iostream>
-
-#include <QVector>
-
-
-using namespace std;
-using namespace Isis;
-
-int main() {
-  cerr << "\nUnit Test for ControlGraph!!!\n\n"
-       "building the following ControlNet for testing...\n\n";
-  Preference::Preferences(true);
-
-  // control point 0
-  ControlMeasure *cp0cm1 = new ControlMeasure;
-  cp0cm1->SetCubeSerialNumber("A");
-  ControlMeasure *cp0cm2 = new ControlMeasure;
-  cp0cm2->SetCubeSerialNumber("B");
-
-  ControlPoint *cp0 = new ControlPoint("0");
-  cp0->Add(cp0cm1);
-  cp0->Add(cp0cm2);
-
-
-  // control point 1
-  ControlMeasure *cp1cm1 = new ControlMeasure;
-  cp1cm1->SetCubeSerialNumber("A");
-  ControlMeasure *cp1cm2 = new ControlMeasure;
-  cp1cm2->SetCubeSerialNumber("B");
-  ControlMeasure *cp1cm3 = new ControlMeasure;
-  cp1cm3->SetCubeSerialNumber("C");
-
-  ControlPoint *cp1 = new ControlPoint("1");
-  cp1->Add(cp1cm1);
-  cp1->Add(cp1cm2);
-  cp1->Add(cp1cm3);
-
-
-  // control point 2
-  ControlMeasure *cp2cm1 = new ControlMeasure;
-  cp2cm1->SetCubeSerialNumber("A");
-  ControlMeasure *cp2cm2 = new ControlMeasure;
-  cp2cm2->SetCubeSerialNumber("B");
-  ControlMeasure *cp2cm3 = new ControlMeasure;
-  cp2cm3->SetCubeSerialNumber("C");
-
-  ControlPoint *cp2 = new ControlPoint("2");
-  cp2->Add(cp2cm1);
-  cp2->Add(cp2cm2);
-  cp2->Add(cp2cm3);
-
-
-  // control point 3
-  ControlMeasure *cp3cm1 = new ControlMeasure;
-  cp3cm1->SetCubeSerialNumber("B");
-  ControlMeasure *cp3cm2 = new ControlMeasure;
-  cp3cm2->SetCubeSerialNumber("C");
-
-  ControlPoint *cp3 = new ControlPoint("3");
-  cp3->Add(cp3cm1);
-  cp3->Add(cp3cm2);
-
-
-  // control point 4
-  ControlMeasure *cp4cm1 = new ControlMeasure;
-  cp4cm1->SetCubeSerialNumber("B");
-  ControlMeasure *cp4cm2 = new ControlMeasure;
-  cp4cm2->SetCubeSerialNumber("C");
-
-  ControlPoint *cp4 = new ControlPoint("4");
-  cp4->Add(cp4cm1);
-  cp4->Add(cp4cm2);
-
-
-  // control point 5
-  ControlMeasure *cp5cm1 = new ControlMeasure;
-  cp5cm1->SetCubeSerialNumber("D");
-  ControlMeasure *cp5cm2 = new ControlMeasure;
-  cp5cm2->SetCubeSerialNumber("E");
-
-  ControlPoint *cp5 = new ControlPoint("5");
-  cp5->Add(cp5cm1);
-  cp5->Add(cp5cm2);
-//  cp5.SetIgnore(true);
-
-
-  // now build controlnet
-  ControlNet cnet;
-  cnet.AddPoint(cp0);
-  cnet.AddPoint(cp1);
-  cnet.AddPoint(cp2);
-  cnet.AddPoint(cp3);
-  cnet.AddPoint(cp4);
-  cnet.AddPoint(cp5);
-
-  cerr << "  ControlPoint  |  Images\n"
-       "----------------|--------------------------";
-  for (int i = 0; i < cnet.GetNumPoints(); i++) {
-    cerr << "\n\t" << cnet[i]->GetId() << "\t|";
-    for (int j = 0; j < cnet[i]->GetNumMeasures(); j++) {
-      cerr << "\t" << cnet[i]->GetMeasure(j)->GetCubeSerialNumber();
-    }
-  }
-  cerr << "\n\nControlNet built!\n\n"
-       "constructing a ControlGraph...\n";
-
-  ControlGraph cg(&cnet);
-  cerr << "ControlGraph constructed!\n\n"
-       "IsConnected() returns: ";
-
-  if (cg.IsConnected())
-    cerr << "true\n\n";
-  else
-    cerr << "false\n\n";
-
-  cerr << "GetIslandCount returns: " << cg.GetIslandCount() << "\n\n"
-       "GetCubesOnIsland(0) returns:";
-  QVector< QString > cubesOnIsland = cg.GetCubesOnIsland(0);
-  for (int i = 0; i < cubesOnIsland.size(); i++)
-    cerr << "  " << cubesOnIsland[i].toStdString();
-
-  cerr << "\n\nGetCubesOnIsland(1) returns:";
-  cubesOnIsland = cg.GetCubesOnIsland(1);
-  for (int i = 0; i < cubesOnIsland.size(); i++)
-    cerr << "  " << cubesOnIsland[i].toStdString();
-
-  try {
-    cerr << "\n\nGetCubesOnIsland(42) returns:";
-    cubesOnIsland = cg.GetCubesOnIsland(42);
-  }
-  catch (IException &e) {
-    e.print();
-  }
-
-  cerr << "\nGetCubeList() returns (NOTE: sorted in unittest):\n";
-  QVector< QString > cubeList = cg.GetCubeList();
-
-  // We will sort the output since QHash's don't guarantee order, which could impact test results
-  QStringList sortedCubeList; 
-  for (int i = 0; i < cubeList.size(); i++) {
-    sortedCubeList << cubeList[i];
-  }
-  sortedCubeList.sort();
-  
-  for (int i = 0; i < sortedCubeList.size(); i++) {
-    cerr << "    " << sortedCubeList[i].toStdString() << "\n";
-  }
-
-  cerr << "\n";
-
-  return 0;
-}
diff --git a/isis/src/control/objs/ControlMeasure/ControlMeasure.cpp b/isis/src/control/objs/ControlMeasure/ControlMeasure.cpp
index 6b87dcdc9e1c3956c76208cc763e02d4a4cd53f8..aac404555bede0537ac0872579a088f294342f0f 100644
--- a/isis/src/control/objs/ControlMeasure/ControlMeasure.cpp
+++ b/isis/src/control/objs/ControlMeasure/ControlMeasure.cpp
@@ -30,7 +30,6 @@
 #include "ControlMeasureLogData.h"
 #include "ControlNet.h"
 #include "ControlPoint.h"
-#include "ControlCubeGraphNode.h"
 #include "IString.h"
 #include "iTime.h"
 #include "SpecialPixel.h"
@@ -84,13 +83,11 @@ namespace Isis {
     p_sampleResidual = other.p_sampleResidual;
     p_lineResidual = other.p_lineResidual;
     p_camera = other.p_camera;
-    associatedCSN = other.associatedCSN;
   }
 
 
   //! initialize pointers and other data to NULL
   void ControlMeasure::InitializeToNull() {
-
     // Previously these were initialized to 0.0 in the constructor.
     p_sample = Null;
     p_line = Null;
@@ -117,7 +114,6 @@ namespace Isis {
     p_measuredEphemerisTime = Null;
 
     parentPoint = NULL;
-    associatedCSN = NULL;
   }
 
 
@@ -145,7 +141,6 @@ namespace Isis {
       p_loggedData = NULL;
     }
 
-    associatedCSN = NULL;
   }
 
 
@@ -153,6 +148,7 @@ namespace Isis {
     if (IsEditLocked())
       return MeasureLocked;
     MeasureModified();
+
     p_aprioriLine = aprioriLine;
     return Success;
   }
@@ -163,6 +159,7 @@ namespace Isis {
     if (IsEditLocked())
       return MeasureLocked;
     MeasureModified();
+
     p_aprioriSample = aprioriSample;
     return Success;
   }
@@ -250,8 +247,10 @@ namespace Isis {
     if (IsEditLocked())
       return MeasureLocked;
     MeasureModified();
+
     p_sample = sample;
     p_line = line;
+
     SetType(type);
     return Success;
   }
@@ -365,9 +364,14 @@ namespace Isis {
     if (IsEditLocked())
       return MeasureLocked;
 
+
     bool oldStatus = p_ignore;
     p_ignore = newIgnoreStatus;
 
+    if (Parent()) {
+      Parent()->emitMeasureModified(this, IgnoredModified, oldStatus, p_ignore);
+    }
+
     // only update if there was a change in status
     if (oldStatus != p_ignore) {
       MeasureModified();
@@ -378,6 +382,7 @@ namespace Isis {
       }
     }
 
+
     return Success;
   }
 
@@ -406,8 +411,9 @@ namespace Isis {
    */
   ControlMeasure::Status ControlMeasure::SetResidual(double sampResidual,
       double lineResidual) {
-        
+
     MeasureModified();
+
     p_sampleResidual = sampResidual;
     p_lineResidual   = lineResidual;
     return Success;
@@ -428,6 +434,7 @@ namespace Isis {
     if (IsEditLocked())
       return MeasureLocked;
     MeasureModified();
+
     p_measureType = type;
     return Success;
   }
@@ -1030,32 +1037,31 @@ namespace Isis {
     p_dateTime = new QString;
     p_loggedData = new QVector<ControlMeasureLogData>();
 
-    *p_serialNumber = *other.p_serialNumber;
-    *p_chooserName = *other.p_chooserName;
-    *p_dateTime = *other.p_dateTime;
+    bool oldLock = p_editLock;
+    p_editLock = false;
+
+    p_sample = other.p_sample;
+    p_line = other.p_line;
     *p_loggedData = *other.p_loggedData;
 
-    p_measureType = other.p_measureType;
+    SetCubeSerialNumber(*other.p_serialNumber);
+    SetChooserName(*other.p_chooserName);
+    SetDateTime(*other.p_dateTime);
+    SetType(other.p_measureType);
     //  Call SetIgnored to update the ControlGraphNode.  However, SetIgnored
     //  will return if EditLock is true, so set to false temporarily.
-    p_editLock = false;
     SetIgnored(other.p_ignore);
-    p_editLock = other.p_editLock;
-    p_sample = other.p_sample;
-    p_line = other.p_line;
-    p_diameter = other.p_diameter;
-    p_aprioriSample = other.p_aprioriSample;
-    p_aprioriLine = other.p_aprioriLine;
-    p_sampleSigma = other.p_sampleSigma;
-    p_lineSigma = other.p_lineSigma;
-    p_sampleResidual = other.p_sampleResidual;
-    p_lineResidual = other.p_lineResidual;
-    p_camera = other.p_camera;
-    p_focalPlaneMeasuredX = other.p_focalPlaneMeasuredX;
-    p_focalPlaneMeasuredY = other.p_focalPlaneMeasuredY;
-    p_focalPlaneComputedX = other.p_focalPlaneComputedX;
-    p_focalPlaneComputedY = other.p_focalPlaneComputedY;
-    associatedCSN = other.associatedCSN;
+    SetDiameter(other.p_diameter);
+    SetAprioriSample(other.p_aprioriSample);
+    SetAprioriLine(other.p_aprioriLine);
+    SetSampleSigma(other.p_sampleSigma);
+    SetLineSigma(other.p_lineSigma);
+    SetResidual(other.p_sampleResidual, other.p_lineResidual);
+    SetCamera(other.p_camera);
+    SetFocalPlaneMeasured(other.p_focalPlaneMeasuredX, other.p_focalPlaneMeasuredY);
+    SetFocalPlaneComputed(other.p_focalPlaneComputedX, other.p_focalPlaneComputedY);
+    p_editLock = oldLock;
+    SetEditLock(other.p_editLock);
 
     return *this;
   }
diff --git a/isis/src/control/objs/ControlMeasure/ControlMeasure.h b/isis/src/control/objs/ControlMeasure/ControlMeasure.h
index 60959b396f1249d605d2e3844cbb4910d723315d..6c6b26a324685f6b1f276350acdb331c97c3304e 100644
--- a/isis/src/control/objs/ControlMeasure/ControlMeasure.h
+++ b/isis/src/control/objs/ControlMeasure/ControlMeasure.h
@@ -36,7 +36,6 @@ namespace Isis {
   class Camera;
   class ControlMeasureLogData;
   class ControlPoint;
-  class ControlCubeGraphNode;
   class PvlGroup;
   class PvlKeyword;
 
@@ -175,13 +174,23 @@ namespace Isis {
    *   @history 2018-01-05 Adam Goins - Added HasDateTime() and HasChooserName() methods to allow
    *                           to allow the value of these variables to be read without being
    *                           overriden if they're empty. (Getters override if they're empty).
+   *   @history 2018-01-26 Kristin Berry - Removed code related to now-unused ControlCubeGraphNode,
+   *                           as part of the switch to using the boost graph library.
+   *                           References #5434
+   *   @history 2018-06-15 Adam Goins & Jesse Mapel - Added the ModType enum, as well as a series
+   *                           of calls to parentNetwork()->emitPointModified() whenever a change
+   *                           is made to a Control Point or any of it's measures. This is done
+   *                           to allow for communication between the ControlNetVitals class
+   *                           and changes made to the Control Network that it is observing.
+   *                           Fixes #5435.
+   *  @history 2018-06-29 Adam Goins - Modified operator= to use setters when setting values
+   *                           so that the proper signals/slots are called. Fixes #5435.
    */
   class ControlMeasure : public QObject {
 
       Q_OBJECT
 
       friend class ControlPoint;
-      friend class ControlCubeGraphNode;
     public:
       /**
        * @brief Control network measurement types
@@ -224,6 +233,20 @@ namespace Isis {
         MeasureLocked
       };
 
+
+      /**
+       * @brief Control Measure Modification Types
+       *
+       *  This enum is designed to represent the different types of modifications that can be
+       *  made to a ControlMeasure.
+       *
+       * IgnoredModified means that the Control Measure had it's IGNORED flag changed.
+       *
+       */
+      enum ModType {
+        IgnoredModified
+      };
+
       enum DataField {
         AprioriLine        = 1,
         AprioriSample      = 2,
@@ -249,7 +272,6 @@ namespace Isis {
       ~ControlMeasure();
 
       ControlPoint *Parent() { return parentPoint; }
-      ControlCubeGraphNode *ControlSN() { return associatedCSN; }
 
       Status SetAprioriLine(double aprioriLine);
       Status SetAprioriSample(double aprioriSample);
@@ -333,7 +355,6 @@ namespace Isis {
 
     private: // data
       ControlPoint *parentPoint;  //!< Pointer to parent ControlPoint, may be null
-      ControlCubeGraphNode *associatedCSN;  //!< Pointer to the Serial Number
       // structure connecting measures in an image
 
       QString *p_serialNumber;
diff --git a/isis/src/control/objs/ControlNet/ControlNet.cpp b/isis/src/control/objs/ControlNet/ControlNet.cpp
index c605525846e42f432c520999984db94637596f60..c4ab2d53a8286e3886565421a7e1306c58483d3f 100644
--- a/isis/src/control/objs/ControlNet/ControlNet.cpp
+++ b/isis/src/control/objs/ControlNet/ControlNet.cpp
@@ -6,15 +6,15 @@
 #include <cmath>
 #include <sstream>
 
-#include <QtAlgorithms>
 #include <QDebug>
 #include <QMutex>
 #include <QMutexLocker>
 #include <QPair>
-#include <QQueue>
 #include <QScopedPointer>
 #include <QSet>
+#include <QStringList>
 #include <QTime>
+#include <QVariant>
 #include <QVector>
 
 #include <boost/numeric/ublas/symmetric.hpp>
@@ -25,7 +25,6 @@
 #include "ControlMeasure.h"
 #include "ControlNetVersioner.h"
 #include "ControlPoint.h"
-#include "ControlCubeGraphNode.h"
 #include "Distance.h"
 #include "FileName.h"
 #include "IException.h"
@@ -45,32 +44,31 @@ namespace Isis {
   void ControlNet::nullify() {
 
     points = NULL;
-    cubeGraphNodes = NULL;
     pointIds = NULL;
     m_mutex = NULL;
   }
 
   //!Creates an empty ControlNet object
-  ControlNet::ControlNet() {
-
+  ControlNet::ControlNet(SurfacePoint::CoordinateType coordType) {
+    
+  //! Creates an empty ControlNet object
+  // ControlNet::ControlNet() {
     nullify();
 
     points = new QHash< QString, ControlPoint * >;
-    cubeGraphNodes = new QHash< QString, ControlCubeGraphNode * >;
     pointIds = new QStringList;
 
     m_ownPoints = true;
     p_created = Application::DateTime();
     p_modified = Application::DateTime();
+    m_coordType = coordType;
   }
 
-
   ControlNet::ControlNet(const ControlNet &other) {
 
     nullify();
 
     points = new QHash< QString, ControlPoint * >;
-    cubeGraphNodes = new QHash< QString, ControlCubeGraphNode * >;
     pointIds = new QStringList;
 
     for (int cpIndex = 0; cpIndex < other.GetNumPoints(); cpIndex++) {
@@ -81,7 +79,6 @@ namespace Isis {
     m_ownPoints = true;
 
     p_targetName = other.p_targetName;
-    p_targetRadii = other.p_targetRadii;
     p_networkId = other.p_networkId;
     p_created = other.p_created;
     p_modified = other.p_modified;
@@ -89,6 +86,7 @@ namespace Isis {
     p_userName = other.p_userName;
     p_cameraMap = other.p_cameraMap;
     p_cameraList = other.p_cameraList;
+    m_coordType = other.m_coordType;
   }
 
 
@@ -98,16 +96,17 @@ namespace Isis {
    * @param ptfile Name of network file
    * @param progress A pointer to the progress of reading in the control points
    */
-  ControlNet::ControlNet(const QString &ptfile, Progress *progress) {
-
+  ControlNet::ControlNet(const QString &ptfile, Progress *progress,
+                         SurfacePoint::CoordinateType coordType) {
+    
     nullify();
 
     points = new QHash< QString, ControlPoint * >;
-    cubeGraphNodes = new QHash< QString, ControlCubeGraphNode * >;
     pointIds = new QStringList;
 
     m_ownPoints = true;
-
+    m_coordType = coordType;
+    
     try {
       ReadControl(ptfile, progress);
     }
@@ -128,13 +127,40 @@ namespace Isis {
     clear();
 
     delete points;
-    delete cubeGraphNodes;
     delete pointIds;
 
     nullify();
   }
 
 
+  /**
+   * This method is a wrapper to emit the measureModified() signal and is called whenever a change
+   * is made to a Control Measure.
+   *
+   * @param measure The ControlMeasure* that was modified.
+   * @param type The ControlMeasure::ModType indicating which modification occured.
+   * @param oldValue The oldValue before the change.
+   * @param newValue The new value that the change incorporated.
+   */
+  void ControlNet::emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue) {
+    emit measureModified(measure, type, oldValue, newValue);
+  }
+
+
+  /**
+   * This method is a wrapper to emit the pointModified() signal and is called whenever a change
+   * is made to a Control Point.
+   *
+   * @param point The ControlPoint* that was modified.
+   * @param type The ControlPoint::ModType indicating which modification occured.
+   * @param oldValue The oldValue before the change.
+   * @param newValue The new value that the change incorporated.
+   */
+  void ControlNet::emitPointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue) {
+    emit pointModified(point, type, oldValue, newValue);
+  }
+
+
  /**
   *  @brief Clear the contents of this object
   *
@@ -160,15 +186,8 @@ namespace Isis {
       points->clear();
     }
 
-    if (cubeGraphNodes) {
-      QHashIterator< QString, ControlCubeGraphNode * > i(*cubeGraphNodes);
-      while (i.hasNext()) {
-        i.next();
-        delete(*cubeGraphNodes)[i.key()];
-        (*cubeGraphNodes)[i.key()] = NULL;
-      }
-      cubeGraphNodes->clear();
-    }
+    m_vertexMap.clear();
+    m_controlGraph.clear();
 
     if (pointIds) {
       pointIds->clear();
@@ -237,13 +256,14 @@ namespace Isis {
    *                           parent prematurely to be able to set the radii
    *                           in ControlPoint.
    * @history 2017-12-21 Jesse Mapel - Modified to use the ControlNetVersioner.
-   *
+   * @history 2018-04-05 Adam Goins - Added a check to the versionedReader targetRadii
+   *                         group to set radii values to those ingested from the versioner
+   *                         if they exist. Otherwise, we call SetTarget with the targetname.
    */
   void ControlNet::ReadControl(const QString &filename, Progress *progress) {
 
     FileName cnetFileName(filename);
     ControlNetVersioner versionedReader(cnetFileName, progress);
-
     SetTarget( versionedReader.targetName() );
     p_networkId   = versionedReader.netId();
     p_userName    = versionedReader.userName();
@@ -338,38 +358,228 @@ namespace Isis {
 
     point->parentNetwork = this;
 
-    // notify control network of new (non-ignored) measures
-    foreach(ControlMeasure * measure, point->getMeasures()) {
-      measureAdded(measure);
-    }
+    // notify control network of new point
+    pointAdded(point);
+
     emit networkStructureModified();
   }
 
 
+ /**
+   * Adds a whole point to the control net graph.
+   *
+   * @throws IException::Programmer "NULL measure passed to ControlNet::pointAdded!"
+   * @throws IException::Programmer "Control measure with NULL parent passed to
+   *     ControlNet::pointAdded"
+   * @throws IException::Programmer "ControlNet does not contain the point."
+   */
+  void ControlNet::pointAdded(ControlPoint *point) {
+    if (!point) {
+      IString msg = "NULL point passed to "
+          "ControlNet::pointAdded!";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    if (!ContainsPoint(point->GetId())) {
+      QString msg = "ControlNet does not contain the point [";
+      msg += point->GetId() + "]";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    // Make sure there is a node for every measure
+    for (int i = 0; i < point->GetNumMeasures(); i++) {
+      QString sn = point->GetMeasure(i)->GetCubeSerialNumber();
+      // If the graph doesn't have the sn, add a node for it
+      if (!m_vertexMap.contains(sn)) {
+        Image newImage;
+        newImage.serial = sn;
+        ImageVertex newVertex = boost::add_vertex(newImage, m_controlGraph);
+        m_vertexMap.insert(sn, newVertex);
+        emit networkModified(GraphModified);
+      }
+    }
+
+    QList< ControlMeasure * > measures = point->getMeasures();
+    for(int i = 0; i < measures.size(); i++) {
+      ControlMeasure* measure = measures[i];
+      // Add the measure to the corresponding node
+      QString serial = measure->GetCubeSerialNumber();
+      m_controlGraph[m_vertexMap[serial]].measures[measure->Parent()] = measure;
+
+      // In this measure's node add connections to the other nodes reachable from
+      // its point
+      if (!point->IsIgnored() && !measure->IsIgnored()) {
+        for (int j = i + 1; j < measures.size(); j++) {
+          ControlMeasure *cm = measures[j];
+          if (!cm->IsIgnored()) {
+            QString sn = cm->GetCubeSerialNumber();
+            addEdge(serial, sn);
+          }
+        }
+      }
+    }
+    emit newPoint(point);
+  }
+
+
+  /**
+   * In the ControlNet graph: adds an edge between the verticies associated with the two serial
+   * numbers provided. Or, if the edge already exists, increments the strength of the edge.
+   *
+   * @param sourceSerial The first serial to be connected by the edge
+   * @param targetSerial The second serial number to be connected by the edge
+   *
+   * @return bool true if a new edge was added, false otherwise.
+  */
+  bool ControlNet::addEdge(QString sourceSerial, QString targetSerial) {
+    // If the edge doesn't already exist, this adds and returns the edge.
+    // If the edge already exists, this just returns it. (The use of a set
+    // forces the edges to be unique.)
+    ImageConnection connection;
+    bool edgeAdded;
+
+    boost::tie(connection, edgeAdded) = boost::add_edge(m_vertexMap[sourceSerial],
+                                                        m_vertexMap[targetSerial],
+                                                        m_controlGraph);
+    m_controlGraph[connection].strength++;
+    if (edgeAdded) {
+      emit networkModified(GraphModified);
+    }
+    return edgeAdded;
+  }
+
+
+  /**
+   * In the ControlNet graph, decrements the strength on the edge between the two serial numbers.
+   * This is called when the ControlMeasures that connect these images are deleted or ignored.
+   * If it is the last measure connecting two verticies (serial numbers) the edge is removed.
+   *
+   * @param sourceSerial The first serial number defining the end of the edge to have its strength
+   *                     decremented or be removed.
+   * @param targetSerial The second serial number defining the other end of the edge to have its
+   *                     strength decremented or be removed.
+   * @return bool true if the edge is removed, otherwise false
+   */
+  bool ControlNet::removeEdge(QString sourceSerial, QString targetSerial) {
+    ImageConnection connection;
+    bool edgeExists;
+    boost::tie(connection, edgeExists) = boost::edge(m_vertexMap[sourceSerial],
+                                                     m_vertexMap[targetSerial],
+                                                     m_controlGraph);
+    if (edgeExists) {
+      m_controlGraph[connection].strength--;
+      if (m_controlGraph[connection].strength <= 0) {
+        boost::remove_edge(m_vertexMap[sourceSerial],
+                           m_vertexMap[targetSerial],
+                           m_controlGraph);
+        emit networkModified(GraphModified);
+
+        return true;
+      }
+    }
+    return false;
+  }
+
+
   /**
-   * Updates the ControlCubeGraphNode for the measure's serial number to
-   * reflect the addition.  If there is currently no ControlCubeGraphNode for
-   * this measure's serial, then a new ControlCubeGraphNode is created with
+   * Used for verifying graph intergrity
+   *
+   * @returns A string representation of the ControlNet graph
+   */
+  QString ControlNet::GraphToString() const {
+    QString graphString;
+
+    QStringList images = GetCubeSerials();
+    images.sort();
+
+    QHash<QString, QStringList> imagePointIds;
+
+    foreach(QString imageSerial, images) {
+      QList<ControlPoint *> imagePoints = m_controlGraph[m_vertexMap[imageSerial]].measures.keys();
+      QStringList pointIds;
+      foreach(ControlPoint *point, imagePoints) {
+        if (!point->IsIgnored()) {
+          pointIds.append(point->GetId());
+        }
+      }
+      pointIds.sort();
+      imagePointIds.insert(imageSerial, pointIds);
+    }
+
+    foreach(QString imageSerial, images) {
+      QStringList adjacentImages = getAdjacentImages(imageSerial);
+      adjacentImages.sort();
+      foreach(QString adjacentSerial, adjacentImages) {
+        if (QString::compare(adjacentSerial, imageSerial) < 0) {
+          continue;
+        }
+
+        QStringList commonPoints;
+        QList<QString>::const_iterator imageIt = imagePointIds[imageSerial].cbegin();
+        QList<QString>::const_iterator adjacentIt = imagePointIds[adjacentSerial].cbegin();
+        while (imageIt != imagePointIds[imageSerial].cend() &&
+               adjacentIt != imagePointIds[adjacentSerial].cend()) {
+          int stringDiff = QString::compare(*imageIt, *adjacentIt);
+          if (stringDiff < 0) {
+            imageIt++;
+          }
+          else if(stringDiff == 0) {
+            commonPoints.append(*imageIt);
+            imageIt++;
+            adjacentIt++;
+          }
+          else {
+            adjacentIt++;
+          }
+        }
+
+        std::pair<ImageConnection, bool> result = boost::edge(m_vertexMap[imageSerial],
+                                                              m_vertexMap[adjacentSerial],
+                                                              m_controlGraph);
+        QString edgeStrength = "UNKNOWN";
+        if (result.second) {
+          edgeStrength = toString(m_controlGraph[result.first].strength);
+        }
+
+        graphString.append(imageSerial);
+        graphString.append(" ----(");
+        graphString.append(edgeStrength);
+        graphString.append(") [");
+        graphString.append(commonPoints.join(","));
+        graphString.append("]---- ");
+        graphString.append(adjacentSerial);
+        graphString.append("\n");
+      }
+    }
+
+    return graphString;
+   }
+
+
+   /**
+   * Updates the ControlNet graph for the measure's serial number to
+   * reflect the addition.  If there is currently no node for
+   * this measure's serial, then a new node is created with
    * this measure as its first.
    *
    * @param measure The measure added to the network.
    *
-   * @throws IException::Programmer "NULL measure passed to ControlNet::AddControlCubeGraphNode!"
+   * @throws IException::Programmer "NULL measure passed to ControlNet::measureAdded!"
    * @throws IException::Programmer "Control measure with NULL parent passed to
-   *     ControlNet::AddControlCubeGraphNode!"
+   *     ControlNet::measureAdded!"
    * @throws IException::Programmer "ControlNet does not contain the point."
    */
   void ControlNet::measureAdded(ControlMeasure *measure) {
     if (!measure) {
       IString msg = "NULL measure passed to "
-          "ControlNet::AddControlCubeGraphNode!";
+          "ControlNet::measureAdded!";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
     ControlPoint *point = measure->Parent();
     if (!point) {
       IString msg = "Control measure with NULL parent passed to "
-          "ControlNet::AddControlCubeGraphNode!";
+          "ControlNet::measureAdded!";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
@@ -378,19 +588,19 @@ namespace Isis {
       msg += point->GetId() + "]";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
+    // Add the measure to the corresponding node
+    QString serial = measure->GetCubeSerialNumber();
 
-    // make sure there is a node for every measure in this measure's parent
-    for (int i = 0; i < point->GetNumMeasures(); i++) {
-      QString sn = point->GetMeasure(i)->GetCubeSerialNumber();
-      if (!cubeGraphNodes->contains(sn)) {
-        cubeGraphNodes->insert(sn, new ControlCubeGraphNode(sn));
-      }
+    // If the graph doesn't have the sn, add a node for it
+    if (!m_vertexMap.contains(serial)) {
+      Image newImage;
+      newImage.serial = serial;
+      ImageVertex newVertex = boost::add_vertex(newImage, m_controlGraph);
+      m_vertexMap.insert(serial, newVertex);
+      emit networkModified(GraphModified);
     }
 
-    // add the measure to the corresponding node
-    QString serial = measure->GetCubeSerialNumber();
-    ControlCubeGraphNode *node = (*cubeGraphNodes)[serial];
-    node->addMeasure(measure);
+    m_controlGraph[m_vertexMap[serial]].measures[measure->Parent()] = measure;
 
     // in this measure's node add connections to the other nodes reachable from
     // its point
@@ -399,41 +609,80 @@ namespace Isis {
         ControlMeasure *cm = point->GetMeasure(i);
         if (!cm->IsIgnored()) {
           QString sn = cm->GetCubeSerialNumber();
-          ControlCubeGraphNode *neighborNode = (*cubeGraphNodes)[sn];
 
-          if (neighborNode != node) {
-            node->addConnection(neighborNode, point);
-            neighborNode->addConnection(node, point);
+
+          if (QString::compare(sn, serial) != 0) {
+            addEdge(serial, sn);
           }
         }
       }
     }
+    emit newMeasure(measure);
+  }
+
+
+  /**
+   * Update the ControlNet's internal structure when a ControlPoint is un-ignored.
+   *
+   * @param point A pointer to the un-ignored point.
+   */
+  void ControlNet::pointUnIgnored(ControlPoint *point) {
+    if (!point) {
+      IString msg = "NULL point passed to "
+          "ControlNet::pointUnIgnored!";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    QList< ControlMeasure * > validMeasures = point->getMeasures(true);
+
+    for (int i = 0; i < validMeasures.size(); i++) {
+      ControlMeasure *sourceMeasure = validMeasures[i];
+      QString sourceSerial = sourceMeasure->GetCubeSerialNumber();
+
+      if (!ValidateSerialNumber(sourceSerial)) {
+        QString msg = "Node does not exist for [";
+        msg += sourceSerial + "]";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
+
+      for(int j = i+1; j < validMeasures.size(); j++) {
+        ControlMeasure *targetMeasure = validMeasures[j];
+        QString targetSerial = targetMeasure->GetCubeSerialNumber();
+
+        if (!ValidateSerialNumber(targetSerial)) {
+          QString msg = "Node does not exist for [";
+          msg += targetSerial + "]";
+          throw IException(IException::Programmer, msg, _FILEINFO_);
+        }
+        addEdge(sourceSerial, targetSerial);
+      }
+    }
   }
 
 
   /**
-   * Updates the connections for the ControlCubeGraphNode associated with the
+   * Updates the connections for the ControlNet graph associated with the
    * measure's serial number to reflect the unignoration.
    *
    * @param measure The measure unignored from the network.
    *
-   * @throws IException::Programmer "NULL measure passed to ControlNet::AddControlCubeGraphNode!"
+   * @throws IException::Programmer "NULL measure passed to ControlNet::measureUnIgnored!"
    * @throws IException::Programmer "Control measure with NULL parent passed to
-   *     ControlNet::AddControlCubeGraphNode!"
+   *     ControlNet::measureUnIgnored!"
    * @throws IException::Programmer "ControlNet does not contain the point."
    * @throws IException::Programmer "Node does not exist for the cube serial number."
    */
   void ControlNet::measureUnIgnored(ControlMeasure *measure) {
     if (!measure) {
       IString msg = "NULL measure passed to "
-          "ControlNet::AddControlCubeGraphNode!";
+          "ControlNet::measureUnIgnored!";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
     ControlPoint *point = measure->Parent();
     if (!point) {
       IString msg = "Control measure with NULL parent passed to "
-          "ControlNet::AddControlCubeGraphNode!";
+          "ControlNet::measureUnIgnored!";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
@@ -443,10 +692,11 @@ namespace Isis {
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
-    // make sure there is a node for every measure in this measure's parent
+    // Make sure there is a node for every measure in this measure's parent
     for (int i = 0; i < point->GetNumMeasures(); i++) {
-      QString sn = point->GetMeasure(i)->GetCubeSerialNumber();
-      if (!cubeGraphNodes->contains(sn)) {
+      ControlMeasure *adjacentMeasure = point->GetMeasure(i);
+      QString sn = adjacentMeasure->GetCubeSerialNumber();
+      if (!adjacentMeasure->IsIgnored() && !m_vertexMap.contains(sn)) {
         QString msg = "Node does not exist for [";
         msg += measure->GetCubeSerialNumber() + "]";
         throw IException(IException::Programmer, msg, _FILEINFO_);
@@ -455,18 +705,16 @@ namespace Isis {
 
     if (!point->IsIgnored()) {
       QString serial = measure->GetCubeSerialNumber();
-      ControlCubeGraphNode *node = (*cubeGraphNodes)[serial];
 
-      // in this measure's node add connections to the other nodes reachable
+      // In this measure's node add connections to the other nodes reachable
       // from its point
       for (int i = 0; i < point->GetNumMeasures(); i++) {
         ControlMeasure *cm = point->GetMeasure(i);
         if (!cm->IsIgnored()) {
           QString sn = cm->GetCubeSerialNumber();
-          ControlCubeGraphNode *neighborNode = (*cubeGraphNodes)[sn];
-          if (neighborNode != node) {
-            node->addConnection(neighborNode, point);
-            neighborNode->addConnection(node, point);
+
+          if (QString::compare(sn, serial) != 0) {
+            addEdge(serial, sn);
           }
         }
       }
@@ -490,182 +738,128 @@ namespace Isis {
 
 
   /**
-   * Updates the ControlCubeGraphNode for this measure's serial number to
-   * reflect the deletion.  If this is the only measure left in the containing
-   * ControlCubeGraphNode, then the ControlCubeGraphNode is deleted as well.
+   * Updates the node for this measure's serial number to
+   * reflect the deletion.
    *
    * @param measure The measure removed from the network.
    */
   void ControlNet::measureDeleted(ControlMeasure *measure) {
     ASSERT(measure);
-
     QString serial = measure->GetCubeSerialNumber();
-    ASSERT(cubeGraphNodes->contains(serial));
-    ControlCubeGraphNode *node = (*cubeGraphNodes)[serial];
+    ASSERT(m_vertexMap.contains(serial));
 
-    // remove connections to and from this node
+    emit measureRemoved(measure);
+
+    // Remove connections to and from this node
     if (!measure->IsIgnored() && !measure->Parent()->IsIgnored()) {
       // Break connections
       measureIgnored(measure);
     }
 
-    // Remove the measure from the node.  If this caused the node to be empty,
-    // then delete the node.
-    node->removeMeasure(measure);
-    if (!node->getMeasureCount()) {
-      delete node;
-      node = NULL;
-      cubeGraphNodes->remove(serial);
+    // Remove the measure from the associated node.
+    // Conceptually, I think this belongs in measureIgnored, but it isn't done
+    // for the old graph.
+    m_controlGraph[m_vertexMap[serial]].measures.remove(measure->Parent());
+  }
+
+
+  /**
+   * Update the ControlNet's internal structure when a ControlPoint is ignored.
+   *
+   * @param point A pointer to the ignored point.
+   */
+  void ControlNet::pointIgnored(ControlPoint *point) {
+    if (!point) {
+      IString msg = "NULL point passed to "
+          "ControlNet::pointIgnored!";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    QList< ControlMeasure * > validMeasures = point->getMeasures(true);
+
+    for (int i = 0; i < validMeasures.size(); i++) {
+      ControlMeasure *sourceMeasure = validMeasures[i];
+      QString sourceSerial = sourceMeasure->GetCubeSerialNumber();
+
+      if (!ValidateSerialNumber(sourceSerial)) {
+        QString msg = "Node does not exist for [";
+        msg += sourceSerial + "]";
+        throw IException(IException::Programmer, msg, _FILEINFO_);
+      }
+
+      for(int j = i+1; j < validMeasures.size(); j++) {
+        ControlMeasure *targetMeasure = validMeasures[j];
+        QString targetSerial = targetMeasure->GetCubeSerialNumber();
+
+        if (!ValidateSerialNumber(targetSerial)) {
+          QString msg = "Node does not exist for [";
+          msg += targetSerial + "]";
+          throw IException(IException::Programmer, msg, _FILEINFO_);
+        }
+        removeEdge(sourceSerial, targetSerial);
+      }
     }
   }
 
 
+
+  /**
+   * Updates the edges in the ControlNet graph to reflect the ignored
+   * measure. If this was the last measure connecting one node to another,
+   * then the edge is deleted as well.
+   *
+   * @param measure The measure set to ignored from the network.
+   */
   void ControlNet::measureIgnored(ControlMeasure *measure) {
     if (!measure) {
       IString msg = "NULL measure passed to "
-          "ControlNet::AddControlCubeGraphNode!";
+          "ControlNet::measureIgnored!";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
     ControlPoint *point = measure->Parent();
     if (!point) {
       IString msg = "Control measure with NULL parent passed to "
-          "ControlNet::AddControlCubeGraphNode!";
+          "ControlNet::measureIgnored!";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
     QString serial = measure->GetCubeSerialNumber();
-    if (!cubeGraphNodes->contains(serial)) {
+    if (!ValidateSerialNumber(serial)) {
       QString msg = "Node does not exist for [";
       msg += serial + "]";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
 
-    ControlCubeGraphNode *node = (*cubeGraphNodes)[serial];
-
-    // remove connections to and from this node
+    // Decrement the edge strength for edges from this node
+    // Remove edge if the strength becomes 0.
     for (int i = 0; i < point->GetNumMeasures(); i++) {
-      QString sn = point->GetMeasure(i)->GetCubeSerialNumber();
-      if (cubeGraphNodes->contains(sn)) {
-        ControlCubeGraphNode *neighborNode = (*cubeGraphNodes)[sn];
-        if (node != neighborNode) {
-          neighborNode->removeConnection(node, point);
-          node->removeConnection(neighborNode, point);
+      ControlMeasure *adjacentMeasure = point->GetMeasure(i);
+      QString sn = adjacentMeasure->GetCubeSerialNumber();
+      if (!adjacentMeasure->IsIgnored() && m_vertexMap.contains(sn)) {
+        if (QString::compare(serial, sn) !=0) {
+          removeEdge(serial, sn);
         }
       }
     }
   }
 
 
-  void ControlNet::emitNetworkStructureModified() {
-    emit networkStructureModified();
-  }
-
-
   /**
-   * Random breadth-first search.  This meathod starts at a random serial, and
-   * returns a list with the start serial as well as any serial which is
-   * directly or indirectly connected to it.  The list returned will contain
-   * all the serials in the network if and only if the network is completely
-   * connected.  Otherwise, the list returned will be the entire island on
-   * which a random image resides.
+   * Sets the control point coordinate type 
    *
-   * @returns A List of connected graph nodes
+   * @param coordType Control point coordinate type
    */
-  QList< ControlCubeGraphNode * > ControlNet::RandomBFS(
-    QList< ControlCubeGraphNode * > nodes) const {
-    qsrand(42);
-    Shuffle(nodes);
-
-    // for keeping track of visited nodes
-    QMap< ControlCubeGraphNode *, bool > searchList;
-    for (int i = 0; i < nodes.size(); i++)
-      searchList.insert(nodes[i], false);
-
-    // for storing nodes as they are found
-    QSet< ControlCubeGraphNode * > results;
-
-    QQueue< ControlCubeGraphNode * > q;
-    q.enqueue(nodes[0]);
-    while (q.size()) {
-      ControlCubeGraphNode *curNode = q.dequeue();
-      if (!results.contains(curNode)) {
-        // add to results
-        results.insert(curNode);
-        searchList[curNode] = true;
-
-        // add all the neighbors to the queue
-        QList< ControlCubeGraphNode * > neighbors = curNode->getAdjacentNodes();
-        Shuffle(neighbors);
-        for (int i = 0; i < neighbors.size(); i++)
-          q.enqueue(neighbors[i]);
-      }
-    } // end of breadth-first search
-
-    return results.values();
+  void ControlNet::SetCoordType(SurfacePoint::CoordinateType coordType)  {
+    m_coordType = coordType;
   }
 
 
   /**
-   * Shuffles the QStrings in a QList< QString >
-   *
-   * @param list The list to be shuffled
+   * This method is a wrapper to emit the networkStructureModified() signal.
    */
-  void ControlNet::Shuffle(QList< ControlCubeGraphNode * > & list) const {
-    for (int i = list.size() - 1; i > 0; i--) {
-      // standard form is qrand() / (RAND_MAX + 1.0) * (max + 1 - min) + min
-      // min is always zero here so it is simplified to...
-      int j = (int)(qrand() / (RAND_MAX + 1.0) * (i + 1));
-      qSwap(list[j], list[i]);
-    }
-  }
-
-
-  /**
-   * Calculate the band width and critical edges needed by the adjacency matrix
-   * that could store cube connectivity if that matrix used the same ordering
-   * as is in the provided list.  Note that no adjacency matrices are ever used
-   * in this class!
-   *
-   * Critical edges are edges that contribute to band width.
-   *
-   * @param serials A list of cube serial numbers.
-   *
-   * @returns A QPair such that the first element is the needed bandwidth for
-   *          the serials how they are currently ordered in the list, and the
-   *          second element is the number of critical edges.
-   */
-  QPair< int, int > ControlNet::CalcBWAndCE(QList< QString > serials) const {
-
-    for (int i = 0; i < serials.size(); i++)
-      ASSERT(cubeGraphNodes->contains(serials[i]));
-
-    int bw = 0;
-    QList< int > colWidths;
-
-    for (int i = 0; i < serials.size(); i++) {
-      int colWidth = 0;
-      ControlCubeGraphNode *node1 = (*cubeGraphNodes)[serials[i]];
-      for (int j = 0; j < serials.size(); j++) {
-        if (i != j) {
-          ControlCubeGraphNode *node2 = (*cubeGraphNodes)[serials[j]];
-          int colDiff = abs(i - j);
-          if (node1->isConnected(node2) && colDiff > colWidth)
-            colWidth = colDiff;
-        }
-      }
-      colWidths.append(colWidth);
-      if (colWidth > bw)
-        bw = colWidth;
-    }
-
-    int criticalEdges = 0;
-    foreach(int width, colWidths) {
-      if (width == bw)
-        criticalEdges++;
-    }
-
-    return qMakePair(bw, criticalEdges);
+  void ControlNet::emitNetworkStructureModified() {
+    emit networkStructureModified();
   }
 
 
@@ -709,9 +903,11 @@ namespace Isis {
 
     // notify CubeSerialNumbers of the loss of this point
     foreach(ControlMeasure * measure, point->getMeasures()) {
-      measureDeleted(measure);
+      point->Delete(measure);
     }
 
+    emit pointDeleted(point);
+
     // delete point
     points->remove(pointId);
     pointIds->removeAt(pointIds->indexOf(pointId));
@@ -720,7 +916,6 @@ namespace Isis {
 
     if (!wasIgnored)
       emit networkStructureModified();
-
     return ControlPoint::Success;
   }
 
@@ -762,208 +957,35 @@ namespace Isis {
    * @returns A list of cube islands as serial numbers
    */
   QList< QList< QString > > ControlNet::GetSerialConnections() const {
-    QList< QList< QString > > islandStrings;
-    QList< QList< ControlCubeGraphNode * > > islands = GetNodeConnections();
-    for (int i = 0; i < islands.size(); i++) {
-      QList< QString > newIsland;
-      islandStrings.append(newIsland);
-      for (int j = 0; j < islands[i].size(); j++)
-        islandStrings[i].append(islands[i][j]->getSerialNumber());
-    }
-    return islandStrings;
-  }
 
+    VertexIndexMap indexMap;
+    VertexIndexMapAdaptor indexMapAdaptor(indexMap);
 
-  /**
-   * This method searches through all the cube serial numbers in the network.
-   * Serials which are connected to other serials through points are grouped
-   * together in the same lists.  The list containing the lists of strings is
-   * nothing more than a list of islands such that each island is a list of
-   * serials which are connected to each other.  If the control network is
-   * completely connected, then this list will only have one element (a list
-   * of all the serials in the network).
-   *
-   * @returns A list of cube islands as graph nodes
-   */
-  QList< QList< ControlCubeGraphNode * > > ControlNet::GetNodeConnections() const {
-    QList< ControlCubeGraphNode * > notYetFound = cubeGraphNodes->values();
-    QList< QList< ControlCubeGraphNode * > > islands;
-
-    do {
-      // extract an island from the nodes which are not yet found
-      QList< ControlCubeGraphNode * > island = RandomBFS(notYetFound);
-
-      // remove newly found nodes from notYetFound
-      for (int i = 0; i < island.size(); i++)
-        notYetFound.removeOne(island[i]);
-
-      // Add island to list of islands
-      islands.append(island);
-    }
-    while (notYetFound.size());
-
-    return islands;
-  }
-
-
-  /**
-   * This method uses Kruskal's Algorithm to construct a minimum spanning tree
-   * of the given island, with control measures acting as the edges between
-   * graph nodes.   Because measures do not directly connect graph nodes, but
-   * rather connect graph nodes to control points, points are considered
-   * "intermediate vertices".  When building the tree, we treat points like
-   * normal graph node vertices, but after the tree is built, we prune away any
-   * measures that, in conjunction with a point, form an "incomplete edge".
-   * Such an edge goes from a graph node to a point, but does not have another
-   * edge going from that point to another node.  Since the primary purpose of
-   * this tree is to evaluate image connectivity, such edges are unnecessary.
-   * A "complete edge" consists of two measures and a point, and connects two
-   * graph nodes, or images.
-   *
-   * The cost of each edge is determined by the provided less-than comparison
-   * function.  If a Control Measure is less-than another, it is said to have a
-   * lower cost, and is thus more likely to appear in the minimum spanning tree.
-   *
-   * Minimum spanning trees are constructed on islands, not networks, so it is
-   * important that the caller first retrieve the list of islands in the network
-   * from the GetNodeConnections() method before invoking this method.  Creating
-   * a minimum spanning tree for an entire network with multiple islands would
-   * be impractical, as this method does not account for the possibility that
-   * some nodes are disconnected in the input.
-   *
-   * A common usage of the minimum spanning tree is to measure the importance of
-   * a given measure or point to the overall connectivity of a network.  If a
-   * measurement is not in the MST, we do not need to worry about creating
-   * additional islands by removing it.
-   *
-   * It is important that the user choose their less-than function carefully.
-   * If a poor less-than function is used, then "bad" measures could end up in
-   * the MST while "good" measures are excluded, thus giving the user the false
-   * impression that a good measure can be safely deleted, while a bad measure
-   * must be preserved.  The application "cnetwinnow", for example, tries to
-   * remove as many measures with high residuals as possible without increasing
-   * the island count of the network, so its less-than function compares the
-   * residual magnitude of the two input measures.
-   *
-   * @param island The list of graph nodes forming the island to be minimized
-   * @param lessThan A comparison function telling us if one measure is better
-   *                 than another
-   *
-   * @return The set of all measures (edges) in the minimum spanning tree
-   */
-  QSet< ControlMeasure * > ControlNet::MinimumSpanningTree(
-      QList< ControlCubeGraphNode *> &island,
-      bool lessThan(const ControlMeasure *, const ControlMeasure *)) const {
-
-    // Kruskal's Algorithm
-    QSet< ControlMeasure * > minimumTree;
-
-    // We start with a map containing all the unconnected vertices (nodes and
-    // points), each its own single-element tree.  Our goal is join them all
-    // together into one tree connecting every vertex.  We map into the forest
-    // with point ID and serial number so the two types of vertices can share a
-    // common, nearly constant-time lookup interface.
-    QMap< QString, ControlVertex * > forest;
-
-    // Get a list of all the candidate edges on the island, and a set of their
-    // associated Control Points (to avoid duplication, as measures share common
-    // points).  Keep a count of how many measures in the MST are connected to
-    // each point, as we'll want to prune off points with only one such
-    // conenction.
-    QList< ControlMeasure * > edges;
-    QMap< ControlPoint *, int > uniquePoints;
-    for (int i = 0; i < island.size(); i++) {
-      // Add each graph node as a tree in the forest
-      ControlCubeGraphNode *node = island[i];
-      forest.insert(node->getSerialNumber(), new ControlVertex(node));
-
-      // Every graph node has a list of measures: these are our edges
-      QList< ControlMeasure * > measures = node->getMeasures();
-      for (int j = 0; j < measures.size(); j++) {
-        edges.append(measures[j]);
-
-        // Every measure has a point: these act as intermediate vertices.  We
-        // keep a count of how many edges in the MST come off this point.
-        // Points with less than 2 edges are considered incomplete, as they do
-        // not form a connection from one graph node to another, or a "complete
-        // edge"
-        uniquePoints.insert(measures[j]->Parent(), 0);
-      }
+    // Needed to use connected_componenets
+    QList< QString> serials = m_vertexMap.keys();
+    for (int i = 0; i < serials.size(); i++) {
+      boost::put(indexMapAdaptor, m_vertexMap[serials[i]], i);
     }
 
-    // Sort the edges in increasing cost with the provided less-than function
-    qSort(edges.begin(), edges.end(), lessThan);
-
-    // Add every unique point on the island as a tree in the forest
-    QList< ControlPoint * > pointList = uniquePoints.keys();
-    for (int i = 0; i < pointList.size(); i++) {
-      ControlPoint *point = pointList[i];
-      forest.insert(point->GetId(), new ControlVertex(point));
-    }
-
-    // Every time we join two trees together, we reduce the total number of
-    // trees by one, but our forest data structure is unchanged, so keep a
-    // record of the actual forest size to decrement manually as we go along
-    int trees = forest.size();
-
-    // Keep trying to join trees until there is only one tree remaining or we're
-    // out of edges to try
-    while (trees > 1 && edges.size() > 0) {
-      // Try to add our lowest-cost edge to the minimum spanning tree
-      ControlMeasure *leastEdge = edges.takeFirst();
-
-      // Each edge connects two vertices: a point and a graph node.  So grab the
-      // trees for each node and check that they're disjoint, and thus able to
-      // be joined.
-      QString pointId = leastEdge->Parent()->GetId();
-      ControlVertex *pointVertex = forest[pointId];
-
-      QString serialNum = leastEdge->ControlSN()->getSerialNumber();
-      ControlVertex *nodeVertex = forest[serialNum];
-
-      // When the edge joins two different trees (i.e., they have different
-      // roots), then add the edge to the minimum spanning tree and join the
-      // trees into one.  Otherwise, we have formed a cycle and should thus
-      // discard the edge.
-      if (pointVertex->getRoot() != nodeVertex->getRoot()) {
-        ControlVertex::join(pointVertex, nodeVertex);
-        trees--;
-        minimumTree.insert(leastEdge);
-        uniquePoints[pointVertex->getPoint()]++;
-      }
-    }
+    VertexIndexMap componentMap;
+    VertexIndexMapAdaptor componentAdaptor(componentMap);
+    int numComponents = boost::connected_components(m_controlGraph, componentAdaptor,
+                                                      boost::vertex_index_map(indexMapAdaptor));
 
-    // Prune edges that go from a graph node to a point, but not from that
-    // point to another graph node.  We care about image (graph node)
-    // connectivity, not point connectivity.  A complete edge consists of two
-    // measures and a point, so remove any incomplete edges.
-    QList< ControlMeasure * > unprunedEdges = minimumTree.values();
-    for (int i = 0; i < unprunedEdges.size(); i++) {
-      if (uniquePoints[unprunedEdges[i]->Parent()] < 2)
-        // The point this edge is connected to does not go on to another node,
-        // so prune it
-        minimumTree.remove(unprunedEdges[i]);
-    }
-
-    // Clean up our vertices.  This will not delete any of the points, measures,
-    // or graph nodes.  All of that is owned by the network.
-    QList< ControlVertex * > vertexList = forest.values();
-    for (int i = 0; i < vertexList.size(); i++) delete vertexList[i];
-
-    // Sanity check: an island with n > 1 nodes must, by definition, have an MST
-    // of e edges such that n <= e <= 2n
-    int n = island.size();
-    int e = minimumTree.size();
-    if (n > 1) {
-      if (e < n || e > 2 * n) {
-        IString msg = "An island of n = [" + IString(n) +
-          "] > 1 nodes must have a minimum spanning tree of e edges such that "
-          " n <= e <= 2n, but e = [" + IString(e) + "]";
-        throw IException(IException::Programmer, msg, _FILEINFO_);
-      }
+    QList< QList< QString > > islandStrings;
+    for (int i = 0; i < numComponents; i++) {
+      QList<QString> tempList;
+      islandStrings.append(tempList);
+    }
+    std::map<ImageVertex, size_t>::iterator it = componentMap.begin();
+    while(it != componentMap.end())
+    {
+      QString serial = m_controlGraph[it->first].serial;
+      int group = (int) it->second;
+      islandStrings[group].append(serial);
+      ++it;
     }
-
-    return minimumTree;
+    return islandStrings;
   }
 
 
@@ -971,36 +993,7 @@ namespace Isis {
    * @returns The total number of edges in the bi-directional graph for images
    */
   int ControlNet::getEdgeCount() const {
-    int total = 0;
-    foreach (ControlCubeGraphNode * node, *cubeGraphNodes) {
-      total += node->getAdjacentNodes().size();
-    }
-
-    return total;
-  }
-
-
-  /**
-   * Used for verifying graph intergrity
-   *
-   * @returns A string representation of the cube graph
-   */
-  QString ControlNet::CubeGraphToString() const {
-    QStringList serials;
-    QHashIterator < QString, ControlCubeGraphNode * > i(*cubeGraphNodes);
-    while (i.hasNext()) {
-      i.next();
-      serials << i.value()->getSerialNumber();
-    }
-    qSort(serials);
-
-    QString str;
-    for (int i = 0; i < serials.size(); i++) {
-      str += "  " + serials[i] + "\n"
-          + (*cubeGraphNodes)[serials[i]]->connectionsToString() + "\n";
-    }
-
-    return str;
+    return boost::num_edges(m_controlGraph);
   }
 
 
@@ -1013,30 +1006,46 @@ namespace Isis {
    * @returns A list of the Cube Serial Numbers in the ControlNet.
    */
   QList< QString > ControlNet::GetCubeSerials() const {
-    return cubeGraphNodes->keys();
+    return m_vertexMap.keys();
   }
 
 
   /**
-   * @returns A list of all the cube graph nodes in the network
+   * Does a check to ensure that the given serial number is contained within
+   * the network.
+   *
+   * @param serialNumber the cube serial number to validate
+   *
+   * @return @b bool If the serial number is contained in the network.
    */
-  QList< ControlCubeGraphNode * > ControlNet::GetCubeGraphNodes() {
-    return cubeGraphNodes->values();
+  bool ControlNet::ValidateSerialNumber(QString serialNumber) const {
+    return m_vertexMap.contains(serialNumber);
   }
 
 
   /**
-   * Does a check to ensure that the given serial number is contained within
-   * the network.  If it is not, then an exception is thrown
+   * Get all images connected to a given image by common control points.
    *
-   * @param serialNumber the cube serial number to validate
+   * @param serialNumber the serial number of the image to find images adjacent to.
+   *
+   * @returns @b QList<QString> The serial numbers of all adjacent images.
    */
-  void ControlNet::ValidateSerialNumber(QString serialNumber) const {
-    if (!cubeGraphNodes->contains(serialNumber)) {
-      IString msg = "Cube Serial Number [" + serialNumber + "] not found in "
+  QList< QString > ControlNet::getAdjacentImages(QString serialNumber) const {
+    if (!ValidateSerialNumber(serialNumber)) {
+      QString msg = "Cube Serial Number [" + serialNumber + "] not found in "
           "the network";
       throw IException(IException::Programmer, msg, _FILEINFO_);
     }
+
+    QList< QString > adjacentSerials;
+
+    AdjacencyIterator adjIt, adjEnd;
+    boost::tie(adjIt, adjEnd) = boost::adjacent_vertices(m_vertexMap[serialNumber], m_controlGraph);
+    for( ; adjIt != adjEnd; adjIt++) {
+      adjacentSerials.append(m_controlGraph[*adjIt].serial);
+    }
+
+    return adjacentSerials;
   }
 
 
@@ -1046,8 +1055,13 @@ namespace Isis {
    * @returns A list of all measures which are in a given cube
    */
   QList< ControlMeasure * > ControlNet::GetMeasuresInCube(QString serialNumber) {
-    ValidateSerialNumber(serialNumber);
-    return (*cubeGraphNodes)[serialNumber]->getMeasures();
+    if( !ValidateSerialNumber(serialNumber) ) {
+      IString msg = "Cube Serial Number [" + serialNumber + "] not found in "
+          "the network";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+
+    }
+    return m_controlGraph[m_vertexMap[serialNumber]].measures.values();
   }
 
 
@@ -1057,8 +1071,17 @@ namespace Isis {
    * @returns A list of all valid measures which are in a given cube
    */
   QList< ControlMeasure * > ControlNet::GetValidMeasuresInCube(QString serialNumber) {
-    ValidateSerialNumber(serialNumber);
-    return (*cubeGraphNodes)[serialNumber]->getValidMeasures();
+    QList< ControlMeasure * > validMeasures;
+
+    // Get measures in cube will validate this for us, so we don't need to re-check
+    QList< ControlMeasure * > measureList = GetMeasuresInCube(serialNumber);
+
+    foreach(ControlMeasure * measure, measureList) {
+      if (!measure->IsIgnored())
+        validMeasures.append(measure);
+    }
+
+    return validMeasures;
   }
 
 
@@ -1111,7 +1134,7 @@ namespace Isis {
       ControlPoint *point = this->GetPoint(i);
       if (point->IsIgnored()) continue;  //if the point is ignored then continue
 
-        //get the number of measures
+      // Get the number of measures
       int nObs = point->GetNumMeasures();
       for (int j=0;j<nObs;j++) {  //for every measure
         ControlMeasure *measure = point->GetMeasure(j);
@@ -1122,7 +1145,7 @@ namespace Isis {
       }
     }
 
-    //sort the measures
+    // Sort the measures
     ControlMeasureLessThanFunctor lessThan(statFunc);
     qSort(measures.begin(),measures.end(),lessThan);
 
@@ -1130,22 +1153,6 @@ namespace Isis {
   }
 
 
-  /**
-   * Essentially removes a cube from the networkid
-   *
-   * @param serialNumber The cube serial number to be removed from the network
-   */
-  void ControlNet::DeleteMeasuresWithId(QString serialNumber) {
-    ValidateSerialNumber(serialNumber);
-
-    ControlCubeGraphNode *csn = (*cubeGraphNodes)[serialNumber];
-    QList< ControlMeasure * > measures = csn->getMeasures();
-    foreach(ControlMeasure * measure, measures) {
-      measure->Parent()->Delete(measure);
-    }
-  }
-
-
   /**
    * Compute error for each point in the network
    *
@@ -1255,7 +1262,8 @@ namespace Isis {
    */
   ControlPoint *ControlNet::FindClosest(QString serialNumber,
       double sample, double line) {
-    if (!cubeGraphNodes->contains(serialNumber)) {
+
+    if (!ValidateSerialNumber(serialNumber)) {
       QString msg = "serialNumber [";
       msg += serialNumber;
       msg += "] not found in ControlNet";
@@ -1266,12 +1274,12 @@ namespace Isis {
     double minDist = SEARCH_DISTANCE;
     ControlPoint *closestPoint = NULL;
 
-    ControlCubeGraphNode *csn = (*cubeGraphNodes)[serialNumber];
-    QList< ControlMeasure * > measures = csn->getMeasures();
+    QList < ControlMeasure * > measures = m_controlGraph[m_vertexMap[serialNumber]].measures.values();
+
     for (int i = 0; i < measures.size(); i++) {
       ControlMeasure *measureToCheck = measures[i];
 
-      //Find closest line sample & return that controlpoint
+      // Find closest line sample & return that controlpoint
       double dx = fabs(sample - measureToCheck->GetSample());
       double dy = fabs(line - measureToCheck->GetLine());
 
@@ -1381,7 +1389,11 @@ namespace Isis {
    *                         returning a count of only valid measures (Ignore=False).
    */
   int ControlNet::GetNumberOfValidMeasuresInImage(const QString &serialNumber) {
-    return p_cameraValidMeasuresMap[serialNumber];
+    // If SetImage was called, use the map that has been populated with valid measures
+    if (p_cameraList.size() > 0) {
+      return p_cameraValidMeasuresMap[serialNumber];
+    }
+    return GetValidMeasuresInCube(serialNumber).size();
   }
 
 
@@ -1670,31 +1682,7 @@ namespace Isis {
    * @param target The name of the target of this Control Network
    */
   void ControlNet::SetTarget(const QString &target) {
-    QScopedPointer <QMutexLocker> locker;
-
-    if (m_mutex) {
-      locker.reset(new QMutexLocker(m_mutex));
-    }
-
     p_targetName = target;
-
-    p_targetRadii.clear();
-    try {
-      PvlGroup pvlRadii = Target::radiiGroup(target);
-      p_targetRadii.push_back(Distance(pvlRadii["EquatorialRadius"],
-                                       Distance::Meters));
-      // The method Projection::Radii does not provide the B radius
-      p_targetRadii.push_back(Distance(pvlRadii["EquatorialRadius"],
-                                       Distance::Meters));
-      p_targetRadii.push_back(Distance(pvlRadii["PolarRadius"],
-                                       Distance::Meters));
-    }
-    catch (IException &e) {
-      // Fill target radii vector will Null-valued distances
-      p_targetRadii.push_back(Distance());
-      p_targetRadii.push_back(Distance());
-      p_targetRadii.push_back(Distance());
-    }
   }
 
 
@@ -1706,84 +1694,26 @@ namespace Isis {
    *              group or NaifKeywords object).
    */
   void ControlNet::SetTarget(Pvl label) {
-    QScopedPointer <QMutexLocker> locker;
-
-    if (m_mutex) {
-      locker.reset(new QMutexLocker(m_mutex));
-    }
-
     PvlGroup mapping;
-    p_targetRadii.clear();
-    try {
-      if ( (label.hasObject("IsisCube") && label.findObject("IsisCube").hasGroup("Mapping"))
-           || label.hasGroup("Mapping") ) {
-        mapping = label.findGroup("Mapping", Pvl::Traverse);
-      }
-      // If radii values don't exist in the labels
-      // or if they are set to null,
-      // try to get target radii using the TargetName or NaifKeywords object values
-      Distance equatorialRadius, polarRadius;
-      if (!mapping.hasKeyword("EquatorialRadius")
-          || !mapping.hasKeyword("PolarRadius")) {
-
-        mapping = Target::radiiGroup(label, mapping);
-
-      }
-
-      equatorialRadius = Distance(mapping["EquatorialRadius"], Distance::Meters);
-      polarRadius      = Distance(mapping["PolarRadius"],      Distance::Meters);
-
-      p_targetRadii.push_back(equatorialRadius);
-      p_targetRadii.push_back(equatorialRadius);
-      p_targetRadii.push_back(polarRadius);
-    }
-    catch (IException &e) {
-      // leave equatorialRadius and polarRadius as Null-valued distances if this fails
-      p_targetRadii.push_back(Distance());
-      p_targetRadii.push_back(Distance());
-      p_targetRadii.push_back(Distance());
+    if ( (label.hasObject("IsisCube") && label.findObject("IsisCube").hasGroup("Mapping"))
+         || label.hasGroup("Mapping") ) {
+      mapping = label.findGroup("Mapping", Pvl::Traverse);
     }
 
     if (mapping.hasKeyword("TargetName")) {
       p_targetName = mapping["TargetName"][0];
     }
+    else if (label.hasObject("IsisCube")
+             && label.findObject("IsisCube").hasGroup("Instrument")
+             && label.findObject("IsisCube").findGroup("Instrument").hasKeyword("TargetName")) {
+      p_targetName = label.findObject("IsisCube").findGroup("Instrument").findKeyword("TargetName")[0];
+    }
     else {
       p_targetName = "";
     }
   }
 
 
-  /**
-   * Directly sets the target name and radii using the given information.
-   *
-   * @see Target::radiiGroup(Pvl, PvlGroup)
-   *
-   * @param target The name of the target for this Control Network
-   * @param target A 3-dimensional vector containing the A (equatorial major), B
-   *               (equatorial minor), and C (polar) triaxial radii values of
-   *               the target for this Control Network
-   *
-   */
-  void ControlNet::SetTarget(const QString &target,
-                             const QVector<Distance> &radii) {
-    QScopedPointer <QMutexLocker> locker;
-
-    if (m_mutex) {
-      locker.reset(new QMutexLocker(m_mutex));
-    }
-
-    if (radii.size() != 3) {
-      throw IException(IException::Unknown,
-                       "Unable to set target radii. The given list must have length 3.",
-                       _FILEINFO_);
-    }
-
-    p_targetName = target;
-    p_targetRadii = radii;
-
-  }
-
-
   /**
    * Set the user name of the control network.
    *
@@ -1810,8 +1740,8 @@ namespace Isis {
    */
   void ControlNet::swap(ControlNet &other) {
     std::swap(points, other.points);
-    std::swap(cubeGraphNodes, other.cubeGraphNodes);
     std::swap(pointIds, other.pointIds);
+    m_controlGraph.swap(other.m_controlGraph);
     std::swap(m_mutex, other.m_mutex);
     std::swap(p_targetName, other.p_targetName);
     std::swap(p_networkId, other.p_networkId);
@@ -1823,9 +1753,8 @@ namespace Isis {
     std::swap(p_cameraValidMeasuresMap, other.p_cameraValidMeasuresMap);
     std::swap(p_cameraRejectedMeasuresMap, other.p_cameraRejectedMeasuresMap);
     std::swap(p_cameraList, other.p_cameraList);
-    std::swap(p_targetRadii, other.p_targetRadii);
 
-    // points have parent pointers that need updated too...
+    // points have parent pointers that need to be updated too...
     QHashIterator< QString, ControlPoint * > i(*points);
     while (i.hasNext()) {
       i.next().value()->parentNetwork = this;
@@ -1835,6 +1764,24 @@ namespace Isis {
     while (i2.hasNext()) {
       i2.next().value()->parentNetwork = &other;
     }
+
+    m_vertexMap.clear();
+    VertexIterator v, vend;
+    for (boost::tie(v, vend) = vertices(m_controlGraph); v != vend; ++v) {
+      ImageVertex imVertex = *v;
+      QString serialNum = m_controlGraph[*v].serial;
+      m_vertexMap[serialNum] = imVertex;
+    }
+
+    other.m_vertexMap.clear();
+    VertexIterator v2, vend2;
+    for (boost::tie(v2, vend2) = vertices(other.m_controlGraph); v2 != vend2; ++v2) {
+      ImageVertex imVertex = *v2;
+      QString serialNum = other.m_controlGraph[*v2].serial;
+      other.m_vertexMap[serialNum] = imVertex;
+    }
+
+    emit networkModified(ControlNet::Swapped);
   }
 
 
@@ -1899,39 +1846,15 @@ namespace Isis {
   }
 
 
-  const ControlCubeGraphNode *ControlNet::getGraphNode(
-      QString serialNumber) const {
-    if (!cubeGraphNodes->contains(serialNumber)) {
-      IString msg = "Serial Number [" + serialNumber + "] does not exist in"
-          " the network.";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    return cubeGraphNodes->value(serialNumber);
-  }
-
-  ControlCubeGraphNode *ControlNet::getGraphNode(
-      QString serialNumber) {
-    if (!cubeGraphNodes->contains(serialNumber)) {
-      IString msg = "Serial Number [" + serialNumber + "] does not exist in"
-          " the network.";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
-    }
-
-    return cubeGraphNodes->value(serialNumber);
-  }
-
-
   /**
-   * Get the target radii
+   * Get the control point coordinate type (see the available types in SurfacePoint.h).
    *
-   * @returns the radii of the target body
+   * @returns the control point coordinate type
    */
-  std::vector<Distance> ControlNet::GetTargetRadii() {
-    return p_targetRadii.toStdVector();
+  SurfacePoint::CoordinateType ControlNet::GetCoordType() {
+    return m_coordType;
   }
 
-
   const ControlPoint *ControlNet::operator[](QString id) const {
     return GetPoint(id);
   }
diff --git a/isis/src/control/objs/ControlNet/ControlNet.h b/isis/src/control/objs/ControlNet/ControlNet.h
index f0ae6fb216e2f72cece5a7c2ada83e329fec14c1..ae1adb546386e46ab86f3ea4e733cb7084bc5dbf 100644
--- a/isis/src/control/objs/ControlNet/ControlNet.h
+++ b/isis/src/control/objs/ControlNet/ControlNet.h
@@ -20,21 +20,34 @@
  *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
  *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
  *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.
+ *   http://www.usgs.gov/privacy.html
  */
 
 // This is needed for the QVariant macro
 #include <QMetaType>
 #include <QObject> // parent class
 #include <QSharedPointer>
+#include "SurfacePoint.h"
 #include <QString>
 #include <QMap>
+#include <QVariant>
 #include <QVector>
+#include <QVariant>
+
+
+// Boost includes
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/connected_components.hpp>
+
+#include "ControlMeasure.h"
+#include "ControlPoint.h"
 
 template< typename A, typename B > class QHash;
 template< typename T > class QList;
 template< typename A, typename B > struct QPair;
 template< typename T > class QSet;
+
 class QMutex;
 class QString;
 
@@ -42,7 +55,6 @@ namespace Isis {
   class Camera;
   class ControlMeasure;
   class ControlPoint;
-  class ControlCubeGraphNode;
   class Distance;
   class Progress;
   class Pvl;
@@ -202,6 +214,10 @@ namespace Isis {
    *   @history 2017-08-09 Summer Stapleton - Added throw to caught exception for bad control net
    *                           import in constructor. Also removed p_invalid as it was no longer
    *                           being used anywhere. Fixes #5068.
+   *   @history 2017-08-30 Debbie A. Cook - Added an optional argument to the constructor 
+   *                           for the control point coordinate type.  At this point this value is only 
+   *                           stored in the active ControlNet.  It will be added to the stored 
+   *                           ControlNet at a later date.  References #4649 and #501.
    *   @history 2017-12-12 Kristin Berry - Updated to use QMap and QVector rather than std::map
    *                           and std::vector. Fixes #5259.
    *   @history 2017-12-18 Adam Goins - Added GetLastModified() accessor. References #5258.
@@ -211,6 +227,46 @@ namespace Isis {
    *   @history 2018-01-12 Adam Goins - Added Progress support back to Read methods.
    *   @history 2017-01-19 Jesse Mapel - Added a method to get all of the valid measures in an
    *                           image. Previously, this had to be done throug the graph.
+   *   @history 2018-01-26 Kristin Berry - Added pointAdded() function to eliminate redundant measure
+   *                           adds to the control network.
+   *   @history 2018-06-10 Kristin Berry - Removed unused methods and associated code:
+   *                           MinimumSpanningTree(), GetNodeConnections(), RandomBFS(), Shuffle(),
+   *                           CalcBWAndCE(), CubeGraphToString(), getGraphNode(). References #5434
+   *   @history 2018-06-10 Kristin Berry - Updated to use the boost graph library instead of our
+   *                           custom graph structure ControlCubeGraphNode.
+   *   @history 2018-04-05 Adam Goins - Added a check to the versionedReader targetRadii
+   *                           group to set radii values to those ingested from the versioner
+   *                           if they exist. Otherwise, we call SetTarget with the targetname.
+   *                           Fixes #5361.
+   *   @history 2018-06-06 Jesse Mapel - Added a method to get all adjacent images to ControlNet.
+   *                           Previously this functionality was only available through the
+   *                           ControlCubeGraphNode class. References #5434.
+   *   @history 2018-06-06 Jesse Mapel - Added a point ignored and un-ignored methods. This will
+   *                           prevent edge strengths getting incremented or decremented twice.
+   *                           References #5434.
+   *   @history 2018-06-15 Adam Goins & Jesse Mapel - Added the ModType enum, as well as a series
+   *                           of signals that are emitted whenever a change is made to a
+   *                           Control Point or any of it's measures, or to the network itself.
+   *                           These signals exist for the purpose of communication between the
+   *                           ControlNetVitals class, and the network that it is observing.
+   *                           Fixes #5435.
+   *  @history 2018-06-25 Kristin Berry - Updated GetNumberOfValidMeasuresInImage() to use
+   *                           GetValidMeasuresInCube() if SetImage has not yet been called to populate
+   *                           the p_cameraValidMeasuresMap.
+   *   @history 2018-06-25 Jesse Mapel - Fixed the incorrect signal being called when adding and
+   *                           removing measures. References #5435.
+   *   @history 2018-06-29 Kristin Berry - Added addEdge() and removeEdge() functions to make
+   *                           code cleaner.
+   *   @history 2018-06-25 Jesse Mapel - Fixed ignoring measures with ignored adjacent measures
+   *                           incorrectly modifying the edge between the two image vertices.
+   *   @history 2018-07-06 Jesse Mapel - Modified addEdge and removeEdge to always emit a graph
+   *                           modified signal if an edge is added or removed. Added graph
+   *                           modified signal when a vertex is added.
+   *   @history 2018-07-06 Jesse Mapel - Removed target radii from ControlNet objects because
+   *                           SurfacePoints now use their local radii to do sigma distance
+   *                           conversions instead of the target equatorial and polar radii.
+   *                           Fixes #5457.
+   *   @history 2018-07-22 Kristin Berry - Updated swap to include the graph and vertex map.
    */
   class ControlNet : public QObject {
       Q_OBJECT
@@ -219,9 +275,25 @@ namespace Isis {
       friend class ControlPoint;
 
     public:
-      ControlNet();
+
+      /**
+       *  @brief Control Point Modification Types
+       *
+       *  This enum is designed to represent the different types of modifications that can be
+       *  made to a ControlNet.
+       *
+       *  Swapped means the network was swapped with another network (ControlNet::Swap(ControlNet &other)).
+       *  GraphModified means that a vertice or edge was added/removed from the graph..
+       */
+      enum ModType {
+        Swapped,
+        GraphModified
+      };
+
+      ControlNet(SurfacePoint::CoordinateType = SurfacePoint::Latitudinal);
       ControlNet(const ControlNet &other);
-      ControlNet(const QString &filename, Progress *progress = 0);
+      ControlNet(const QString &filename, Progress *progress = 0,
+                 SurfacePoint::CoordinateType = SurfacePoint::Latitudinal);
 
       ~ControlNet();
 
@@ -238,19 +310,14 @@ namespace Isis {
       bool ContainsPoint(QString pointId) const;
 
       QList< QString > GetCubeSerials() const;
-      QList< ControlCubeGraphNode * > GetCubeGraphNodes();
+      QString GraphToString() const;
       QList< QList< QString > > GetSerialConnections() const;
-      QList< QList< ControlCubeGraphNode * > > GetNodeConnections() const;
-      QSet< ControlMeasure * > MinimumSpanningTree(
-          QList< ControlCubeGraphNode *> &island,
-          bool lessThan(const ControlMeasure *, const ControlMeasure *)) const;
       int getEdgeCount() const;
-      QString CubeGraphToString() const;
+      QList< QString > getAdjacentImages(QString serialNumber) const;
       QList< ControlMeasure * > GetMeasuresInCube(QString serialNumber);
       QList< ControlMeasure * > GetValidMeasuresInCube(QString serialNumber);
       QList< ControlMeasure * > sortedMeasureList(double(ControlMeasure::*statFunc)() const,
                                                   double min,double max);
-      void DeleteMeasuresWithId(QString serialNumber);
 
       void ComputeResiduals();
       void ComputeApriori();
@@ -260,9 +327,6 @@ namespace Isis {
       const ControlPoint *GetPoint(int index) const;
       ControlPoint *GetPoint(int index);
 
-      const ControlCubeGraphNode *getGraphNode(QString serialNumber) const;
-      ControlCubeGraphNode *getGraphNode(QString serialNumber);
-
       double AverageResidual();
       Isis::Camera *Camera(int index);
       QString CreatedDate() const;
@@ -289,7 +353,7 @@ namespace Isis {
       QString GetLastModified() const;
       QList< ControlPoint * > GetPoints();
       QList< QString > GetPointIds() const;
-      std::vector<Distance> GetTargetRadii();
+      SurfacePoint::CoordinateType GetCoordType();
 
       void SetCreatedDate(const QString &date);
       void SetDescription(const QString &newDescription);
@@ -302,9 +366,8 @@ namespace Isis {
       void SetTarget(const QString &target);
       void SetTarget(Pvl label);
       void SetTarget(const ControlNet &other);
-      void SetTarget(const QString &target,
-                     const QVector<Distance> &radii);
       void SetUserName(const QString &name);
+      void SetCoordType(SurfacePoint::CoordinateType coordType);
 
       void swap(ControlNet &other);
       ControlNet &operator=(const ControlNet &other);
@@ -317,24 +380,34 @@ namespace Isis {
 
     signals:
       void networkStructureModified();
+      void networkModified(ControlNet::ModType type);
+      void pointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue);
+      void measureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue);
+      void pointDeleted(ControlPoint *point);
+      void newPoint(ControlPoint *);
+      void newMeasure(ControlMeasure *);
+      void measureRemoved(ControlMeasure *);
+
+
 
     private:
       void nullify();
-      void ValidateSerialNumber(QString serialNumber) const;
+      bool ValidateSerialNumber(QString serialNumber) const;
       void measureAdded(ControlMeasure *measure);
       void measureDeleted(ControlMeasure *measure);
       void measureIgnored(ControlMeasure *measure);
       void measureUnIgnored(ControlMeasure *measure);
+      void pointIgnored(ControlPoint *point);
+      void pointUnIgnored(ControlPoint *point);
       void UpdatePointReference(ControlPoint *point, QString oldId);
       void emitNetworkStructureModified();
-
+      void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue);
+      void emitPointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue);
+      void pointAdded(ControlPoint *point);
+      bool addEdge(QString sourceSerial, QString targetSerial);
+      bool removeEdge(QString sourceSerial, QString targetSerial);
 
     private: // graphing functions
-      QList< ControlCubeGraphNode * > RandomBFS(QList <
-          ControlCubeGraphNode * > list) const;
-      void Shuffle(QList< ControlCubeGraphNode * > & list) const;
-      QPair< int, int > CalcBWAndCE(QList< QString > serials) const;
-
       /**
        * @author 2012-04-13 Orrin Thomas
        *
@@ -359,79 +432,47 @@ namespace Isis {
           double(ControlMeasure::*m_accessor)() const;
       };
 
+    private: // data
+      //! hash ControlPoints by ControlPoint Id
+      QHash< QString, ControlPoint * > * points;
 
-      /**
-       * Encapsulation of a vertex in a minimum spanning tree.  Can be either a
-       * Control Point or a Graph Node.  Each vertex is connected to another by
-       * a measure.  A vertex without a parent vertex is considered a root node,
-       * or the base of its own tree.
-       *
-       * @author ????-??-?? Unknown
-       *
-       * @internal
-       */
-      class ControlVertex {
-        public:
-          //! Construct a vertex from a Graph Node
-          ControlVertex(ControlCubeGraphNode *node) {
-            m_node = node;
-            m_point = NULL;
-            m_parent = NULL;
-          }
-
-          //! Construct a vertex from a Control Point
-          ControlVertex(ControlPoint *point) {
-            m_point = point;
-            m_node = NULL;
-            m_parent = NULL;
-          }
-
-          //! Does not own any of its private data
-          ~ControlVertex() {}
-
-          //! Set the parent vertex, removing the root node status.
-          void setParent(ControlVertex *v) { m_parent = v; }
-
-          //! Get the root node, or greatest ancestor
-          ControlVertex * getRoot() {
-            ControlVertex *current = this;
-            while (current->getParent() != NULL)
-              current = current->getParent();
-            return current;
-          }
-
-          //! Get the parent node.  A root node has no parent.
-          ControlVertex * getParent() { return m_parent; }
-
-          //! Get the node representation of this vertex
-          ControlCubeGraphNode * getNode() { return m_node; }
-
-          //! Get the point representation of this vertex
-          ControlPoint * getPoint() { return m_point; }
+      //! Used to define the verticies of the graph
+      struct Image {
+        QString serial; //! The serial number associated with the image
+        //! The measures on the image, hashed by pointers to their parent ControlPoints
+        QHash< ControlPoint *, ControlMeasure * > measures;
+      };
 
-          //! Join two nodes by setting one root to be the other's parent
-          static void join(ControlVertex *v1, ControlVertex *v2) {
-            v1->getRoot()->setParent(v2->getRoot());
-          }
+      //! Used to define the edges of the graph.
+      struct Connection {
+        Connection() : strength(0) {}
+        int strength;
+      };
 
-        private:
-          //! The possibly non-existant graph node
-          ControlCubeGraphNode *m_node;
+      //! Defines the graph type as an undirected graph that uses Images for verticies,
+      //! and Connections for edges. It is defined as an adjacency list with the edge list
+      //! represented by a set, the and vertex list represented by a list.
+      typedef boost::adjacency_list<boost::setS,
+                                    boost::listS,
+                                    boost::undirectedS,
+                                    Image,
+                                    Connection> Network;
 
-          //! The possibly non-existant control point
-          ControlPoint *m_point;
+      typedef Network::vertex_descriptor ImageVertex; //! Reprents the verticies of the graph
+      typedef Network::edge_descriptor ImageConnection; //! Represents the edges of the graph
 
-          //! The possibly non-existant parent vertex
-          ControlVertex *m_parent;
-      };
+      //! A map between an ImageVertex and its index
+      typedef std::map<ImageVertex, size_t> VertexIndexMap;
 
+      //! Converts VertexIndexMap into the appropriate form to be used by boost
+      typedef boost::associative_property_map<VertexIndexMap> VertexIndexMapAdaptor;
 
-    private: // data
-      //! hash ControlPoints by ControlPoint Id
-      QHash< QString, ControlPoint * > * points;
+      //! Iterates over adjacent verticies
+      typedef boost::graph_traits<Network>::adjacency_iterator AdjacencyIterator;
+      typedef boost::graph_traits<Network>::vertex_iterator VertexIterator;
 
-      //! hash ControlCubeGraphNodes by CubeSerialNumber
-      QHash< QString, ControlCubeGraphNode * > * cubeGraphNodes;
+      QHash<QString, ImageVertex> m_vertexMap; //! The serial number -> vertex hash used by the graph
+      Network m_controlGraph; //! The ControlNet graph
       QStringList *pointIds;
       QMutex *m_mutex;
 
@@ -446,9 +487,9 @@ namespace Isis {
       QMap<QString, int> p_cameraRejectedMeasuresMap; //!< A map from serialnumber to
       //!  #rejected measures
       QVector<Isis::Camera *> p_cameraList; //!< Vector of image number to camera
-      QVector<Distance> p_targetRadii;        //!< Radii of target body
 
-      bool m_ownPoints; //!< Specifies ownership of point list. True if owned by this object.
+      bool m_ownPoints; //!< Specifies ownership of point list. True if owned by this object. 
+      SurfacePoint::CoordinateType m_coordType; //!< The coordinate type of the control points
   };
 
   //! This typedef is for future implementation of target body
diff --git a/isis/src/control/objs/ControlNet/ControlNet.truth b/isis/src/control/objs/ControlNet/ControlNet.truth
index 13ef6e7272d3f04b3b627134210ad082582a58b9..92e2b06dd0e12be9b18618ad2d5854ea6928c8b6 100644
--- a/isis/src/control/objs/ControlNet/ControlNet.truth
+++ b/isis/src/control/objs/ControlNet/ControlNet.truth
@@ -1,125 +1,83 @@
 UnitTest for ControlNet ....
 
 ******* test cube connection graph ************
-  ALPHA
-    BRAVO :  p0
-  BRAVO
-    ALPHA :  p0
+testing ignoring measures..............................
+starting graph
+ALPHA ----(1) [p0]---- BRAVO
 
-  ALPHA
+ignore a measure
 
-  BRAVO
+un-ignore a measure
+ALPHA ----(1) [p0]---- BRAVO
 
+testing measure addition to point already in network...
+add point with only 1 measure
+ALPHA ----(1) [p0]---- BRAVO
 
-  ALPHA
-    BRAVO :  p0
-  BRAVO
-    ALPHA :  p0
+add a measure
+ALPHA ----(2) [p0,p1]---- BRAVO
 
-testing measure addition to point already in network...
-  ALPHA
-    BRAVO :  p0, p1
-    CHARLIE :  p1
-  BRAVO
-    ALPHA :  p0, p1
-    CHARLIE :  p1
-  CHARLIE
-    ALPHA :  p1
-    BRAVO :  p1
+add another measure
+ALPHA ----(2) [p0,p1]---- BRAVO
+ALPHA ----(1) [p1]---- CHARLIE
+BRAVO ----(1) [p1]---- CHARLIE
 
 testing setting point to ignored.......................
-  ALPHA
-    BRAVO :  p0
-  BRAVO
-    ALPHA :  p0
-  CHARLIE
+ignore p1
+ALPHA ----(1) [p0]---- BRAVO
 
-
-  ALPHA
-    BRAVO :  p0, p1
-    CHARLIE :  p1
-  BRAVO
-    ALPHA :  p0, p1
-    CHARLIE :  p1
-  CHARLIE
-    ALPHA :  p1
-    BRAVO :  p1
+un-ignore p1
+ALPHA ----(2) [p0,p1]---- BRAVO
+ALPHA ----(1) [p1]---- CHARLIE
+BRAVO ----(1) [p1]---- CHARLIE
 
 testing measure deletion & addition....................
-  ALPHA
-    BRAVO :  p1
-    CHARLIE :  p1
-  BRAVO
-    ALPHA :  p1
-    CHARLIE :  p1
-  CHARLIE
-    ALPHA :  p1
-    BRAVO :  p1
+ALPHA ----(1) [p1]---- BRAVO
+ALPHA ----(1) [p1]---- CHARLIE
+BRAVO ----(1) [p1]---- CHARLIE
 
-  ALPHA
-    BRAVO :  p1
-    CHARLIE :  p1
-    DELTA :  p0
+ALPHA ----(1) [p1]---- BRAVO
+ALPHA ----(1) [p1]---- CHARLIE
+ALPHA ----(1) [p0]---- DELTA
+BRAVO ----(1) [p1]---- CHARLIE
+
+testing FindClosest....................
+Closest Point ID: p1
+
+testing getAdjacentImages....................
+Adjacent Images: 
   BRAVO
-    ALPHA :  p1
-    CHARLIE :  p1
   CHARLIE
-    ALPHA :  p1
-    BRAVO :  p1
   DELTA
-    ALPHA :  p0
 
 testing point deletion.................................
-  ALPHA
-    DELTA :  p0
-  DELTA
-    ALPHA :  p0
+ALPHA ----(1) [p0]---- DELTA
 
 ******* Done testing cube graph ***************
 
 
 testing GetCubeSerials... (NOTE: unittest sorts the results)
   ALPHA
+  BRAVO
+  CHARLIE
   DELTA
 
 testing set target.................................
-Set target/radii directly. Invalid radii.
-**ERROR** Unable to set target radii. The given list must have length 3.
-
-Set target/radii directly. Valid radii.
-        TargetName = SomethingStrange
-        TargetRadii = (3.14159, 1.5708, 2.71828)
-
-Set target/radii using empty PVL.
+Set target using empty PVL.
         TargetName = 
-        TargetRadii = (-1.79769e+308, -1.79769e+308, -1.79769e+308)
 
-Set target/radii using PVL with no PolarRadius.
+Set target using actual PVL.
 Group = Mapping
-  TargetName       = Mars
-  EquatorialRadius = Null
+  TargetName = Mars
 End_Group
 End
         TargetName = Mars
-        TargetRadii = (3.39619e+06, 3.39619e+06, 3.3762e+06)
-
-Set target/radii using PVL containing both radii.
-Group = Mapping
-  TargetName       = Mars
-  EquatorialRadius = 6.0
-  PolarRadius      = 1.0
-End_Group
-End
-        TargetName = Mars
-        TargetRadii = (6, 6, 1)
 
 Set empty target.
         TargetName = 
-        TargetRadii = (-1.79769e+308, -1.79769e+308, -1.79769e+308)
 
 Set Mars target.
         TargetName = Mars
-        TargetRadii = (3.39619e+06, 3.39619e+06, 3.3762e+06)
 
 Test adding control points with identical id numbers ...
 **PROGRAMMER ERROR** ControlPoint must have unique Id.
@@ -169,7 +127,7 @@ Object = ControlNetwork
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
 
-    # AprioriLatitudeSigma = 97324.497783569 <meters>  AprioriLongitudeSigma = 124939.57715415 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -184,7 +142,7 @@ Object = ControlNetwork
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
 
-    # AdjustedLatitudeSigma = 97324.497783569 <meters>  AdjustedLongitudeSigma = 124939.57715415 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
@@ -364,45 +322,23 @@ Writing ControlNet to temp2.bin in binary format
 Reading ControlNet from temp2.bin
 Diffing temp.bin and temp2.bin
 Read/Write of binary files OK.
-Testing GetCubeGraphNodes
     ALPHA
+    BRAVO
+    CHARLIE
     DELTA
+ALPHA ----(1) [p0]---- DELTA
 
-Testing getGraphNode: ALPHA
 
-Testing getEdgeCount: 2
+Testing getEdgeCount: 1
+Getting measures in cube with SN: ALPHA: 
+Serial Number: ALPHA
+Testing GetSerialConnections
 
-Testing GetNodeConnections()
+Testing GetSerialConnections()
   Island Count = 2
 
-Testing MinimumSpanningTree()
-  Tree Count = 2
-  Graph Node Count = 5
-  Measure Count = 9
-  Island Count == 2 == MST Count
-
-  Minimum Spanning Tree 0
-    Nodes = 4
-    Included Measures = 5
-      m1 (ALPHA -> p1, residual = 1.41421)
-      m2 (BETA -> p1, residual = 2.82843)
-      m3 (GAMMA -> p1, residual = 4.24264)
-      m6 (DELTA -> p3, residual = 4.24264)
-      m7 (ALPHA -> p3, residual = 5.65685)
-    Excluded Measures = 3
-      m4 (GAMMA -> p2, residual = 1.41421)
-      m5 (DELTA -> p2, residual = 11.3137)
-      m8 (ALPHA -> p4, residual = 1.41421)
-
-  Minimum Spanning Tree 1
-    Nodes = 1
-    Included Measures = 0
-    Excluded Measures = 1
-      m9 (EPSILON -> p5, residual = 1.41421)
-
 Testing take() functionality to take owernship of the points in a ControlNet:
 Original control net number of points: 1
 Number of points taken out: 1
 Now there should be zero points in the original control net. There are: 0
 And zero pointIDs in the original control net. There are: 0
-And zero cubeGraphNodes in the original control net. There are: 0
diff --git a/isis/src/control/objs/ControlNet/unitTest.cpp b/isis/src/control/objs/ControlNet/unitTest.cpp
index b172f0d36c8b09659a75ff6d929aa17fc317993e..15c46c9c80bf9eb51b9450ed3ee13d1a7c46b478 100644
--- a/isis/src/control/objs/ControlNet/unitTest.cpp
+++ b/isis/src/control/objs/ControlNet/unitTest.cpp
@@ -5,12 +5,13 @@
 #include <sstream>
 #include <ctime>
 
+#include <QHash>
 #include <QList>
 #include <QSet>
 #include <QString>
+#include <QStringList>
 #include <QVector>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
 #include "ControlMeasureLogData.h"
 #include "ControlNet.h"
@@ -26,11 +27,13 @@ using namespace std;
 using namespace Isis;
 
 /**
- * Unit test for ControlNet class 
- *  
+ * Unit test for ControlNet class
+ *
  * @author ????-??-?? Unknown
  * @internal
  *   @history 2016-05-11 Jeannie Backer - Added tests for setTarget methods.
+ *   @history 2018-05-29 Kristin Berry - Removed code related to unused, removed methods. Ref #5434.
+ *                                       Added tests for untested methods.
  */
 bool lessThan(const ControlMeasure *m1, const ControlMeasure *m2) {
   return m1->GetResidualMagnitude() < m2->GetResidualMagnitude();
@@ -143,72 +146,16 @@ void testConnectivity() {
   net.AddPoint(p4);
   net.AddPoint(p5);
 
-  cout << "\nTesting GetNodeConnections()\n";
-  QList< QList< ControlCubeGraphNode * > > islands = net.GetNodeConnections();
-  if (islands[0].contains(m9->ControlSN())) islands.swap(0, 1);
-  cout << "  " << "Island Count = " << islands.size() << endl;
-
-  cout << "\nTesting MinimumSpanningTree()\n";
-  QList< QSet< ControlMeasure * > > spanningTrees;
-  int nodeCount = 0;
-  for (int i = 0; i < islands.size(); i++) {
-    spanningTrees.append(net.MinimumSpanningTree(islands[i], lessThan));
-    nodeCount += islands[i].size();
-  }
-
-  cout << "  " << "Tree Count = " << spanningTrees.size() << endl;
-  cout << "  " << "Graph Node Count = " << nodeCount << endl;
+  std::cout << "Getting measures in cube with SN: ALPHA: " << std::endl;
+  QList< ControlMeasure *> measures = net.GetMeasuresInCube("ALPHA");
+  std::cout << "Serial Number: " << measures[0]->GetCubeSerialNumber() << std::endl;
 
-  QList< QMap< QString, ControlMeasure * > > includedMaps;
-  QList< QMap< QString, ControlMeasure * > > excludedMaps;
-  for (int i = 0; i < spanningTrees.size(); i++) {
-    includedMaps.append(QMap< QString, ControlMeasure * >());
-    excludedMaps.append(QMap< QString, ControlMeasure * >());
-  }
+  std::cout << "Testing GetSerialConnections" << std::endl;
+  net.GetSerialConnections();
 
-  int measureCount = 0;
-  for (int p = 0; p < net.GetNumPoints(); p++) {
-    ControlPoint *point = net.GetPoint(p);
-    for (int m = 0; m < point->GetNumMeasures(); m++) {
-      ControlMeasure *measure = point->GetMeasure(m);
-      measureCount++;
-      for (int i = 0; i < spanningTrees.size(); i++) {
-        if (islands[i].contains(measure->ControlSN())) {
-          if (spanningTrees[i].contains(measure))
-            includedMaps[i].insert(measureNames[measure], measure);
-          else
-            excludedMaps[i].insert(measureNames[measure], measure);
-        }
-      }
-    }
-  }
-  cout << "  " << "Measure Count = " << measureCount << endl;
-
-  int includedMeasures = 0;
-  for (int i = 0; i < spanningTrees.size(); i++) {
-    QSet< ControlMeasure * > measures = spanningTrees[i];
-    includedMeasures += measures.size();
-  }
-
-  if (islands.size() != spanningTrees.size()) {
-    cout << "  " << "Island Count == " << islands.size() << " != " <<
-      spanningTrees.size() << " == MST Count" << endl;
-  }
-  else {
-    cout << "  " << "Island Count == " << islands.size() <<
-      " == MST Count" << endl;
-
-    for (int i = 0; i < spanningTrees.size(); i++) {
-      cout << "\n  " << "Minimum Spanning Tree " << i << endl;
-
-      cout << "    " << "Nodes = " << islands[i].size() << endl;
-      cout << "    " << "Included Measures = " << includedMaps[i].size() << endl;
-      printMeasures(includedMaps[i].values(), measureNames);
-
-      cout << "    " << "Excluded Measures = " << excludedMaps[i].size() << endl;
-      printMeasures(excludedMaps[i].values(), measureNames);
-    }
-  }
+cout << "\nTesting GetSerialConnections()\n";
+QList< QList< QString > > islands = net.GetSerialConnections();
+cout << "  " << "Island Count = " << islands.size() << endl;
 }
 
 
@@ -231,11 +178,15 @@ int main() {
   net.AddPoint(p0);
 
   // test ignoring of measures
-  cout << net.CubeGraphToString() << "\n";
+  cout << "testing ignoring measures..............................\n";
+  cout << "starting graph\n";
+  cout << net.GraphToString() << "\n";
+  cout << "ignore a measure\n";
   p0m1->SetIgnored(true);
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
+  cout << "un-ignore a measure\n";
   p0m1->SetIgnored(false);
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
 
   // add another point - testing case where measures are added to points which
   // are already added to a net.
@@ -249,39 +200,66 @@ int main() {
   p1m1->SetCubeSerialNumber("BRAVO");
   ControlMeasure *p1m2 = new ControlMeasure;
   p1m2->SetCubeSerialNumber("CHARLIE");
+  cout << "add point with only 1 measure\n";
+  cout << net.GraphToString() << "\n";
+  cout << "add a measure\n";
   p1->Add(p1m1);
+  cout << net.GraphToString() << "\n";
+  cout << "add another measure\n";
   p1->Add(p1m2);
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
 
   // test ignoring of point
   cout << "testing setting point to ignored.......................\n";
+  cout << "ignore p1\n";
   p1->SetIgnored(true);
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
+  cout << "un-ignore p1\n";
   p1->SetIgnored(false);
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
 
   // test measure deletion
   cout << "testing measure deletion & addition....................\n";
   p0->Delete(p0m1);
   p0m1 = NULL;
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
   p0m0 = new ControlMeasure;
   p0m0->SetCubeSerialNumber("DELTA");
   p0->Add(p0m0);
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
+
+  // test FindClosest()
+  cout << "testing FindClosest....................\n";
+  p1m0->SetCoordinate(1.0, 1.0);
+  p0m0->SetCoordinate(1.0, 2.0);
+
+  ControlPoint *closestPoint = net.FindClosest("ALPHA", 1.0,1.0);
+  cout << "Closest Point ID: " << closestPoint->GetId() << endl << endl;
+
+  // test getAdjacentImages()
+  cout << "testing getAdjacentImages....................\n";
+
+  QStringList adjacentSerials = net.getAdjacentImages("ALPHA");
+  // We cannot gaurantee order on this list, so sort it for testing purposes
+  adjacentSerials.sort();
+  cout << "Adjacent Images: " << endl;
+  foreach(QString serial, adjacentSerials) {
+    cout << "  " << serial << endl;
+  }
+  cout << endl;
 
   // test point deletion
   cout << "testing point deletion.................................\n";
   net.DeletePoint(p1);
   p1 = NULL;
-  cout << net.CubeGraphToString() << "\n";
+  cout << net.GraphToString() << "\n";
 
   cout << "******* Done testing cube graph ***************\n\n\n";
 
   cout << "testing GetCubeSerials... (NOTE: unittest sorts the results)\n";
   QList< QString > serials = net.GetCubeSerials();
-  
-  // Let's sort the data since GetCubeSerials relies on a QHash 
+
+  // Let's sort the data since GetCubeSerials relies on a QHash
   QStringList sortedSerials(serials);
   sortedSerials.sort();
 
@@ -294,76 +272,30 @@ int main() {
 
   cout << "testing set target.................................\n";
 
-  cout << "Set target/radii directly. Invalid radii." << endl;
-  QVector<Distance> targetRadii;
-  try {
-    cn1.SetTarget("Fail", targetRadii);
-  }
-  catch (IException &e) {
-    e.print();
-  }
-  cout << endl;
-  cout << "Set target/radii directly. Valid radii." << endl;
-  targetRadii += Distance(Isis::PI, Distance::Meters);
-  targetRadii += Distance(Isis::HALFPI, Distance::Meters);
-  targetRadii += Distance(Isis::E, Distance::Meters);
-  cn1.SetTarget("SomethingStrange", targetRadii);
-  vector<Distance> targRad = cn1.GetTargetRadii();
-  cout << "        TargetName = " << cn1.GetTarget() << endl;
-  cout << "        TargetRadii = (" << targRad[0].meters() << ", " 
-                                    << targRad[1].meters() << ", "
-                                    << targRad[2].meters() << ")" << endl;
-  cout << endl;
-  cout << "Set target/radii using empty PVL." << endl;
+  cout << "Set target using empty PVL." << endl;
   Pvl label;
-  // no mapping group, (i.e. target name empty, no equatorial radius)
-  // catch exception and set radii to nulls
+  // no mapping group, (i.e. target name empty)
   cn1.SetTarget(label);
-  targRad = cn1.GetTargetRadii();
   cout << "        TargetName = " << cn1.GetTarget() << endl;
-  cout << "        TargetRadii = (" << targRad[0].meters() << ", " 
-                                    << targRad[1].meters() << ", "
-                                    << targRad[2].meters() << ")" << endl;
   cout << endl;
-  cout << "Set target/radii using PVL with no PolarRadius." << endl;
+
+  cout << "Set target using actual PVL." << endl;
   label += PvlGroup("Mapping");
   PvlGroup &mapping = label.findGroup("Mapping");
   mapping += PvlKeyword("TargetName", "Mars");
-  mapping += PvlKeyword("EquatorialRadius", "");
   cout << label << endl;
   cn1.SetTarget(label);
-  targRad = cn1.GetTargetRadii();
   cout << "        TargetName = " << cn1.GetTarget() << endl;
-  cout << "        TargetRadii = (" << targRad[0].meters() << ", " 
-                                    << targRad[1].meters() << ", "
-                                    << targRad[2].meters() << ")" << endl;
-  cout << endl;
-  cout << "Set target/radii using PVL containing both radii." << endl;
-  mapping.addKeyword(PvlKeyword("EquatorialRadius", "6.0"), PvlContainer::Replace);
-  mapping.addKeyword(PvlKeyword("PolarRadius", "1.0"), PvlContainer::Replace);
-  cout << label << endl;
-  cn1.SetTarget(label);
-  targRad = cn1.GetTargetRadii();
-  cout << "        TargetName = " << cn1.GetTarget() << endl;
-  cout << "        TargetRadii = (" << targRad[0].meters() << ", " 
-                                    << targRad[1].meters() << ", "
-                                    << targRad[2].meters() << ")" << endl;
   cout << endl;
+
   cout << "Set empty target." << endl;
   cn1.SetTarget("");
-  targRad = cn1.GetTargetRadii();
   cout << "        TargetName = " << cn1.GetTarget() << endl;
-  cout << "        TargetRadii = (" << targRad[0].meters() << ", " 
-                                    << targRad[1].meters() << ", "
-                                    << targRad[2].meters() << ")" << endl;
   cout << endl;
+
   cout << "Set Mars target." << endl;
   cn1.SetTarget("Mars");
-  targRad = cn1.GetTargetRadii();
   cout << "        TargetName = " << cn1.GetTarget() << endl;
-  cout << "        TargetRadii = (" << targRad[0].meters() << ", " 
-                                    << targRad[1].meters() << ", "
-                                    << targRad[2].meters() << ")" << endl;
   cout << endl;
 
   cn1.SetTarget("Mars");
@@ -531,108 +463,97 @@ int main() {
   remove("temp.bin");
   remove("temp2.bin");
 
-  cout << "Testing GetCubeGraphNodes\n";
-
-  QList< ControlCubeGraphNode * > graphnodes = net.GetCubeGraphNodes();
+  QList< QString > graphSNs = net.GetCubeSerials();
   // Use this to sort the output
-  QList<QString> sortedSNs;
-  foreach ( ControlCubeGraphNode * node, graphnodes ) {
-    sortedSNs.append(node->getSerialNumber());
-  }
-  sort(sortedSNs.begin(), sortedSNs.end());
-  foreach ( QString sn, sortedSNs ) {
+  sort(graphSNs.begin(), graphSNs.end());
+  foreach ( QString sn, graphSNs ) {
     cout << "    " << sn << "\n";
   }
-  
-  cout << "\nTesting getGraphNode: "
-       << net.getGraphNode("ALPHA")->getSerialNumber() << "\n";
-       
+
+  cout << net.GraphToString() << endl;
   cout << "\nTesting getEdgeCount: " << net.getEdgeCount() << "\n";
 
   testConnectivity();
 
   cout << "\nTesting take() functionality to take owernship of the points in a ControlNet:" << endl;
 
-  cout << "Original control net number of points: " << QString::number(net.GetNumPoints()) << endl; 
+  cout << "Original control net number of points: " << QString::number(net.GetNumPoints()) << endl;
+
+  QList<ControlPoint*> points = net.take();
 
-  QList<ControlPoint*> points = net.take(); 
-  
-  cout << "Number of points taken out: " << QString::number(points.length()) << endl; 
-  
-  cout << "Now there should be zero points in the original control net. There are: " 
-       << QString::number(net.GetNumPoints()) << endl; 
+  cout << "Number of points taken out: " << QString::number(points.length()) << endl;
 
-  cout << "And zero pointIDs in the original control net. There are: " 
-       << QString::number(net.GetPointIds().length()) << endl; 
+  cout << "Now there should be zero points in the original control net. There are: "
+       << QString::number(net.GetNumPoints()) << endl;
 
-  cout << "And zero cubeGraphNodes in the original control net. There are: " 
-       << QString::number(net.GetCubeGraphNodes().length()) << endl; 
+  cout << "And zero pointIDs in the original control net. There are: "
+       << QString::number(net.GetPointIds().length()) << endl;
 
-  //system("cat unitTest.output | grep -v DateTime > temp.output; mv temp.output unitTest.output");
+    //system("cat unitTest.output | grep -v DateTime > temp.output; mv temp.output unitTest.output");
   //system("cat unitTest.output | sed -r s/`date +%Y-%m-%dT`\\[0-9:\\]\\{8\\}/2010-08-27T17:10:06/g > temp.output; mv temp.output unitTest.output");
 
   return 0;
-#if 0
-
-  // -------------------------------------------------------------------------
-  // Testing the google protocol buffer methods added to the ControlNet class
-  // SLA 6/30/09
-  // -------------------------------------------------------------------------
-
-  cout << "Enter input cnet: ";
-  string inNet;
-  cin >> inNet;
-  string outFile;
-  cout << "Enter output file (directory & prefix, no extension): ";
-  cin >> outFile;
-
-  ControlNet *cn1 = new ControlNet;
-  cout << "Speed Test for ControlNet ...." << endl << endl;
-  cout << "\nReading from the ascii file....    " << inNet << endl;
-  std::clock_t start = std::clock();
-//  cn1.ReadControl("/work1/tsucharski/protobuf/isis/nets/cnet.net");
-//  cn1->ReadControl("/work1/tsucharski/protobuf/isis/nets/pntreg2.net");
-//  cn1->ReadControl("/work1/tsucharski/protobuf/isis/nets/pntreg_combinedparts.net");
-  cn1->ReadControl(inNet);
-  std::cout << ((std::clock() - start) / (double)CLOCKS_PER_SEC) << " seconds \n";
-
-  cout << "\nWriting to the binary file...." << endl;
-  start = std::clock();
-//  cn1.WritePB("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/cnet.bin");
-//  cn1->WritePB("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg2.bin");
-//  cn1->WritePB("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg_combinedparts.bin");
-  cn1->WritePB(outFile + ".bin");
-  std::cout << ((std::clock() - start) / (double)CLOCKS_PER_SEC) << " seconds \n";
-  delete cn1;
-
-//  ControlNet cn2;
-  ControlNet *cn2 = new ControlNet;
-
-  cout << "\nReading from the binary file...." << endl;
-  std::clock_t start2 = std::clock();
-//  cn2.ReadPBControl("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/cnet.bin");
-//  cn2->ReadPBControl("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg2.bin");
-//  cn2->ReadPBControl("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg_combinedparts.bin");
-  cn2->ReadPBControl(outFile + ".bin");
-  std::cout << ((std::clock() - start2) / (double)CLOCKS_PER_SEC) << " seconds \n";
-
-//  apLat = (*cn2)[2].AprioriLatitude();
-//  cout<<"binaryNet AprioriLatitude = "<<apLat<<endl;
-
-//cout << "\nConverting the binary to Pvl...." << endl;
-//std::clock_t start2 = std::clock();
-//cn1.ConvertBinToPvl();
-//std::cout<< ( ( std::clock() - start2 ) / (double)CLOCKS_PER_SEC ) <<" seconds \n";
-
-
-
-  cout << "\nWriting to the Pvl file...." << endl;
-  std::clock_t start3 = std::clock();
-//  cn2.Write("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/cnet.pvl");
-//  cn2->Write("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg2.pvl");
-//  cn2->Write("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg_combinedparts.pvl");
-  cn2->Write(outFile + ".pvl");
-  std::cout << ((std::clock() - start3) / (double)CLOCKS_PER_SEC) << " seconds \n";
-
-#endif
+  #if 0
+
+    // -------------------------------------------------------------------------
+    // Testing the google protocol buffer methods added to the ControlNet class
+    // SLA 6/30/09
+    // -------------------------------------------------------------------------
+
+    cout << "Enter input cnet: ";
+    string inNet;
+    cin >> inNet;
+    string outFile;
+    cout << "Enter output file (directory & prefix, no extension): ";
+    cin >> outFile;
+
+    ControlNet *cn1 = new ControlNet;
+    cout << "Speed Test for ControlNet ...." << endl << endl;
+    cout << "\nReading from the ascii file....    " << inNet << endl;
+    std::clock_t start = std::clock();
+  //  cn1.ReadControl("/work1/tsucharski/protobuf/isis/nets/cnet.net");
+  //  cn1->ReadControl("/work1/tsucharski/protobuf/isis/nets/pntreg2.net");
+  //  cn1->ReadControl("/work1/tsucharski/protobuf/isis/nets/pntreg_combinedparts.net");
+    cn1->ReadControl(inNet);
+    std::cout << ((std::clock() - start) / (double)CLOCKS_PER_SEC) << " seconds \n";
+
+    cout << "\nWriting to the binary file...." << endl;
+    start = std::clock();
+  //  cn1.WritePB("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/cnet.bin");
+  //  cn1->WritePB("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg2.bin");
+  //  cn1->WritePB("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg_combinedparts.bin");
+    cn1->WritePB(outFile + ".bin");
+    std::cout << ((std::clock() - start) / (double)CLOCKS_PER_SEC) << " seconds \n";
+    delete cn1;
+
+  //  ControlNet cn2;
+    ControlNet *cn2 = new ControlNet;
+
+    cout << "\nReading from the binary file...." << endl;
+    std::clock_t start2 = std::clock();
+  //  cn2.ReadPBControl("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/cnet.bin");
+  //  cn2->ReadPBControl("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg2.bin");
+  //  cn2->ReadPBControl("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg_combinedparts.bin");
+    cn2->ReadPBControl(outFile + ".bin");
+    std::cout << ((std::clock() - start2) / (double)CLOCKS_PER_SEC) << " seconds \n";
+
+  //  apLat = (*cn2)[2].AprioriLatitude();
+  //  cout<<"binaryNet AprioriLatitude = "<<apLat<<endl;
+
+  //cout << "\nConverting the binary to Pvl...." << endl;
+  //std::clock_t start2 = std::clock();
+  //cn1.ConvertBinToPvl();
+  //std::cout<< ( ( std::clock() - start2 ) / (double)CLOCKS_PER_SEC ) <<" seconds \n";
+
+
+
+    cout << "\nWriting to the Pvl file...." << endl;
+    std::clock_t start3 = std::clock();
+  //  cn2.Write("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/cnet.pvl");
+  //  cn2->Write("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg2.pvl");
+  //  cn2->Write("/work1/tsucharski/protobuf/isis/nets/testMultiMsgs/pntreg_combinedparts.pvl");
+    cn2->Write(outFile + ".pvl");
+    std::cout << ((std::clock() - start3) / (double)CLOCKS_PER_SEC) << " seconds \n";
+
+  #endif
 }
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0002.proto b/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0002.proto
index f0ecd89ab97f72de4655b63a2093c6e073f268cf..935a450620a2fd92cd03269e6588a7f1b5ff5f7a 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0002.proto
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0002.proto
@@ -1,6 +1,10 @@
-// 2017-12-11 Kristin Berry - Separated header and point into separate files. 
-
 // Protocol buffer header descriptor for Isis3 Control Networks
+//
+// 2017-12-11 Kristin Berry - Separated header and point into separate files.
+// 2018-06-13 Jesse Mapel - Added flag to indicate it is a protobuf 2 file
+
+syntax="proto2";
+
 package Isis;
 
 message ControlNetFileHeaderV0002 {
@@ -13,4 +17,3 @@ message ControlNetFileHeaderV0002 {
   optional string userName     = 6;
   repeated int32  pointMessageSizes = 7 [packed = true];
 }
-
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0005.proto b/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0005.proto
index d04e6ca50192996502979d04aff06a18883fe063..873eaea75c775d4b9cff905b23a1fb8c46130508 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0005.proto
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetFileHeaderV0005.proto
@@ -1,4 +1,9 @@
 // Protocol buffer header descriptor for Isis3 Control Networks
+//
+// 2018-06-13 Jesse Mapel - Added flag to indicate it is a protobuf 2 file
+
+syntax="proto2";
+
 package Isis;
 
 message ControlNetFileHeaderV0005 {
@@ -9,6 +14,6 @@ message ControlNetFileHeaderV0005 {
   optional string lastModified = 4;
   optional string description  = 5;
   optional string userName     = 6;
-  optional int32  numPoints    = 7; 
+  optional int32  numPoints    = 7;
+  repeated double targetRadii = 10;
 }
-
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetFileProtoV0001.proto b/isis/src/control/objs/ControlNetVersioner/ControlNetFileProtoV0001.proto
index fa04643b87e9be3d4c8d024f1a9c9f8e3b7e8b06..1a5de0b431b405d925e845d353ba6b4d3b574a52 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetFileProtoV0001.proto
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetFileProtoV0001.proto
@@ -1,6 +1,9 @@
 // Protocol buffer descriptor for ISIS3 ControlNet class hierarchy
 //
 // 2017-12-11 Kristin Berry - Separated top-level messages into different files
+// 2018-06-13 Jesse Mapel - Added flag to indicate it is a protobuf 2 file
+
+syntax="proto2";
 
 package Isis;
 
@@ -132,4 +135,3 @@ message ControlNetFileProtoV0001 {
 
   optional PBNetCubes netcubes = 9;
 }
-
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetLogDataProtoV0001.proto b/isis/src/control/objs/ControlNetVersioner/ControlNetLogDataProtoV0001.proto
index 2726a9f952e1e2f40aeab10893dcc74818b292bd..57bce985fed1740d98a6294e1ad23b5364cfc6f6 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetLogDataProtoV0001.proto
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetLogDataProtoV0001.proto
@@ -1,6 +1,9 @@
 // Protocol buffer descriptor for ISIS3 ControlNet class hierarchy
 //
 // 2017-12-11 Kristin Berry - Separated top-level messages into different files
+// 2018-06-13 Jesse Mapel - Added flag to indicate it is a protobuf 2 file
+
+syntax="proto2";
 
 package Isis;
 
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.cpp b/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.cpp
index f02c607873ca0537c9562ce24ad9341501adb3cd..60f8bf47bff5d8aad77ed8694aee52237ab3e8ba 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.cpp
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.cpp
@@ -202,24 +202,10 @@ namespace Isis {
     network += PvlKeyword("Created", m_header.created);
     network += PvlKeyword("LastModified", m_header.lastModified);
     network += PvlKeyword("Description", m_header.description);
-    // optionally add username to output?
 
     // This is the Pvl version we're converting to
     network += PvlKeyword("Version", "5");
 
-    //  Get Target Radii from naif kernel
-    PvlGroup pvlRadii;
-    QString target = (QString)network.findKeyword("TargetName",Pvl::Traverse);
-    if ( target != "" ) {
-      try {
-        NaifStatus::CheckErrors();
-        pvlRadii = Target::radiiGroup(target);
-      }
-      catch (IException) {
-        // leave pvlRadii empty if target is not recognized by NAIF
-      }
-    }
-
     foreach (ControlPoint *controlPoint, m_points) {
       PvlObject pvlPoint("ControlPoint");
 
@@ -236,7 +222,7 @@ namespace Isis {
       }
 
       if ( controlPoint->GetId().isEmpty() ) {
-        QString msg = "Unbable to write control net to PVL file. "
+        QString msg = "Unable to write control net to PVL file. "
                       "Invalid control point has no point ID value.";
         throw IException(IException::Unknown, msg, _FILEINFO_);
       }
@@ -333,6 +319,7 @@ namespace Isis {
 
         if ( aprioriCovarianceMatrix.size1() > 0 ) {
 
+          // Matrix units are meters squared
           PvlKeyword matrix("AprioriCovarianceMatrix");
           matrix += toString(aprioriCovarianceMatrix(0, 0));
           matrix += toString(aprioriCovarianceMatrix(0, 1));
@@ -341,25 +328,20 @@ namespace Isis {
           matrix += toString(aprioriCovarianceMatrix(1, 2));
           matrix += toString(aprioriCovarianceMatrix(2, 2));
 
-          if ( pvlRadii.hasKeyword("EquatorialRadius") && pvlRadii.hasKeyword("PolarRadius") ) {
-
-            aprioriSurfacePoint.SetRadii( Distance(pvlRadii["EquatorialRadius"], Distance::Meters),
-                                          Distance(pvlRadii["EquatorialRadius"], Distance::Meters),
-                                          Distance(pvlRadii["PolarRadius"], Distance::Meters) );
-
-            if ( aprioriSurfacePoint.GetLatSigmaDistance().meters() != Isis::Null
-                 && aprioriSurfacePoint.GetLonSigmaDistance().meters() != Isis::Null
-                 && aprioriSurfacePoint.GetLocalRadiusSigma().meters() != Isis::Null ) {
+          // *** TODO *** What do we do in the case of bundled in rectangular coordinates?
+          // For now we do nothing.
+          if ( aprioriSurfacePoint.GetLatSigmaDistance().meters() != Isis::Null
+               && aprioriSurfacePoint.GetLonSigmaDistance().meters() != Isis::Null
+               && aprioriSurfacePoint.GetLocalRadiusSigma().meters() != Isis::Null ) {
 
-              QString sigmas = "AprioriLatitudeSigma = "
+            QString sigmas = "AprioriLatitudeSigma = "
               + toString(aprioriSurfacePoint.GetLatSigmaDistance().meters())
               + " <meters>  AprioriLongitudeSigma = "
               + toString(aprioriSurfacePoint.GetLonSigmaDistance().meters())
               + " <meters>  AprioriRadiusSigma = "
               + toString(aprioriSurfacePoint.GetLocalRadiusSigma().meters())
               + " <meters>";
-              matrix.addComment(sigmas);
-            }
+            matrix.addComment(sigmas);
           }
 
           // If the covariance matrix has a value, add it to the PVL point.
@@ -375,15 +357,17 @@ namespace Isis {
         }
       }
 
-      if ( controlPoint->IsLatitudeConstrained() ) {
+      // Deal with the generalization here.  *** TODO ***
+      // Once we have a coordinate type in the header, we should specify the correct coordinate
+      if ( controlPoint->IsCoord1Constrained() ) {
         pvlPoint += PvlKeyword("LatitudeConstrained", "True");
       }
 
-      if ( controlPoint->IsLongitudeConstrained() ) {
+      if ( controlPoint->IsCoord2Constrained() ) {
         pvlPoint += PvlKeyword("LongitudeConstrained", "True");
       }
 
-      if ( controlPoint->IsRadiusConstrained() ) {
+      if ( controlPoint->IsCoord2Constrained() ) {
         pvlPoint += PvlKeyword("RadiusConstrained", "True");
       }
 
@@ -424,26 +408,19 @@ namespace Isis {
           matrix += toString(adjustedCovarianceMatrix(1, 2));
           matrix += toString(adjustedCovarianceMatrix(2, 2));
 
-          if ( pvlRadii.hasKeyword("EquatorialRadius") && pvlRadii.hasKeyword("PolarRadius") ) {
-
-            adjustedSurfacePoint.SetRadii(Distance(pvlRadii["EquatorialRadius"], Distance::Meters),
-                                          Distance(pvlRadii["EquatorialRadius"], Distance::Meters),
-                                          Distance(pvlRadii["PolarRadius"], Distance::Meters) );
-
-            if ( adjustedSurfacePoint.GetLatSigmaDistance().meters() != Isis::Null
-                 && adjustedSurfacePoint.GetLonSigmaDistance().meters() != Isis::Null
-                 && adjustedSurfacePoint.GetLocalRadiusSigma().meters() != Isis::Null ) {
+          if ( adjustedSurfacePoint.GetLatSigmaDistance().meters() != Isis::Null
+               && adjustedSurfacePoint.GetLonSigmaDistance().meters() != Isis::Null
+               && adjustedSurfacePoint.GetLocalRadiusSigma().meters() != Isis::Null ) {
 
             QString sigmas = "AdjustedLatitudeSigma = "
-                             + toString(adjustedSurfacePoint.GetLatSigmaDistance().meters())
-                             + " <meters>  AdjustedLongitudeSigma = "
-                             + toString(adjustedSurfacePoint.GetLonSigmaDistance().meters())
-                             + " <meters>  AdjustedRadiusSigma = "
-                             + toString(adjustedSurfacePoint.GetLocalRadiusSigma().meters())
-                             + " <meters>";
+              + toString(adjustedSurfacePoint.GetLatSigmaDistance().meters())
+              + " <meters>  AdjustedLongitudeSigma = "
+              + toString(adjustedSurfacePoint.GetLonSigmaDistance().meters())
+              + " <meters>  AdjustedRadiusSigma = "
+              + toString(adjustedSurfacePoint.GetLocalRadiusSigma().meters())
+              + " <meters>";
 
             matrix.addComment(sigmas);
-            }
           }
           // If the covariance matrix has a value, add it to the PVL point.
           if ( adjustedCovarianceMatrix(0, 0) != 0.0
@@ -716,6 +693,7 @@ namespace Isis {
       try {
         PvlObject pointObject = network.object(objectIndex);
         ControlPointV0002 point(pointObject);
+
         m_points.append( createPoint(point) );
 
         if (progress) {
@@ -1170,6 +1148,7 @@ namespace Isis {
   void ControlNetVersioner::readProtobufV0005(const Pvl &header,
                                               const FileName netFile,
                                               Progress *progress) {
+
     // read the header protobuf object
     const PvlObject &protoBufferInfo = header.findObject("ProtoBuffer");
     const PvlObject &protoBufferCore = protoBufferInfo.findObject("Core");
@@ -1278,7 +1257,7 @@ namespace Isis {
 
         uint32_t size;
         pointCodedInStream.ReadRaw(reinterpret_cast<char *>(&size), sizeof(size));
-        
+
         size = lsb.Uint32_t(&size);
 
         CodedInputStream::Limit oldPointLimit = pointCodedInStream.PushLimit(size);
@@ -1357,6 +1336,7 @@ namespace Isis {
    * @return @b ControlPoint* The ControlPoint constructed from the given point.
    */
   ControlPoint *ControlNetVersioner::createPoint(ControlPointV0003 &point) {
+
     ControlPointFileEntryV0002 protoPoint = point.pointData();
     ControlPoint *controlPoint = new ControlPoint;
 
@@ -1522,18 +1502,10 @@ namespace Isis {
       controlPoint->SetAdjustedSurfacePoint(adjustedSurfacePoint);
     }
 
-    if ( m_header.equatorialRadius.isValid() && m_header.polarRadius.isValid() ) {
-      SurfacePoint aprioriSurfacePoint = controlPoint->GetAprioriSurfacePoint();
-      SurfacePoint adjustedSurfacePoint = controlPoint->GetAdjustedSurfacePoint();
-      aprioriSurfacePoint.SetRadii(m_header.equatorialRadius,
-                                   m_header.equatorialRadius,
-                                   m_header.polarRadius);
-      adjustedSurfacePoint.SetRadii(m_header.equatorialRadius,
-                                    m_header.equatorialRadius,
-                                    m_header.polarRadius);
-      controlPoint->SetAdjustedSurfacePoint(adjustedSurfacePoint);
-      controlPoint->SetAprioriSurfacePoint(aprioriSurfacePoint);
-    }
+    SurfacePoint aprioriSurfacePoint = controlPoint->GetAprioriSurfacePoint();
+    SurfacePoint adjustedSurfacePoint = controlPoint->GetAdjustedSurfacePoint();
+    controlPoint->SetAdjustedSurfacePoint(adjustedSurfacePoint);
+    controlPoint->SetAprioriSurfacePoint(aprioriSurfacePoint);
 
     // adding measure information
     for (int m = 0 ; m < protoPoint.measures_size(); m++) {
@@ -1669,18 +1641,6 @@ namespace Isis {
     if ( m_header.targetName.startsWith("MRO/") ) {
       m_header.targetName = "Mars";
     }
-
-    if ( !m_header.targetName.isEmpty() ) {
-      try {
-        // attempt to get target radii values...
-        PvlGroup pvlRadii = Target::radiiGroup(m_header.targetName);
-        m_header.equatorialRadius.setMeters(pvlRadii["EquatorialRadius"]);
-        m_header.polarRadius.setMeters(pvlRadii["PolarRadius"]);
-       }
-       catch (IException &e) {
-         // do nothing
-       }
-    }
   }
 
 
@@ -1753,7 +1713,6 @@ namespace Isis {
       netInfo += PvlKeyword("LastModified", protobufHeader.lastmodified().c_str());
       netInfo += PvlKeyword("Description", protobufHeader.description().c_str());
       netInfo += PvlKeyword("NumberOfPoints", toString(numPoints));
-
       netInfo += PvlKeyword("NumberOfMeasures", toString(numMeasures));
       netInfo += PvlKeyword("Version", "5");
       protoObj.addGroup(netInfo);
@@ -1959,14 +1918,15 @@ namespace Isis {
         }
       }
       // this might be redundant... determined by covariance matrix???
-      if ( controlPoint->IsLatitudeConstrained() ) {
-        protoPoint.set_latitudeconstrained(controlPoint->IsLatitudeConstrained());
+      // *** TODO *** Address the generalized coordinates and the constraint differences
+      if ( controlPoint->IsCoord1Constrained() ) {
+        protoPoint.set_latitudeconstrained(controlPoint->IsCoord1Constrained());
       }
-      if ( controlPoint->IsLongitudeConstrained() ) {
-        protoPoint.set_longitudeconstrained(controlPoint->IsLongitudeConstrained());
+      if ( controlPoint->IsCoord2Constrained() ) {
+        protoPoint.set_longitudeconstrained(controlPoint->IsCoord2Constrained());
       }
-      if ( controlPoint->IsRadiusConstrained() ) {
-        protoPoint.set_radiusconstrained(controlPoint->IsRadiusConstrained());
+      if ( controlPoint->IsCoord3Constrained() ) {
+        protoPoint.set_radiusconstrained(controlPoint->IsCoord3Constrained());
       }
 
       SurfacePoint adjustedSurfacePoint = controlPoint->GetAdjustedSurfacePoint();
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.h b/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.h
index 14f15a7e01179b3b1e34dcaae323059ea7448e04..4623cfff02c423923bb436c441a20781e409cdf7 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.h
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.h
@@ -399,10 +399,29 @@ namespace Isis {
    *                           Target::GetRadii calls to speed up createPoint().
    *   @history 2018-01-12 Adam Goins - Added Progress during reads.
    *   @history 2018-01-24 Jesse Mapel - Fixed c++11 build warnings.
+   *                         
    *   @history 2018-01-27 Jesse Mapel - Fixed some documentation formatting. Added a section
    *                           describing the different file format versions.
    *   @history 2018-01-30 Adam Goins - Ensured point sizes are written/read as lsb by using
    *                           EndianSwapper.
+   *   @history 2018-02-25 Debbie A. Cook - Generalized calls to 
+   *                           ControlPoint::IsLatitudeConstrained to IsCoord1Constained 
+   *                           and added or updated a few comments. *** TODO *** make sure
+   *                           the new methods are fully functional for either coordinate type
+   *                           once the new header keyword is added.
+   *   @history 2018-03-28 Adam Goins - Added targetRadii groups to the header. Changed the
+   *                           versioner to write these values out in a targetRadii group for
+   *                           both binary V0005 and PvlV0005 networks. Fixes #5361.
+   *   @history 2018-04-05 Adam Goins - Added hasTargetRadii() and targetRadii() to the versioner
+   *                           so that these values can be grabbed from a ControlNet on read.
+   *                           Also Fixes #5361.
+   *   @history 2018-06-01 Debbie A. Cook - (added to BundleXYZ 2018-02-25)
+   *                           Generalized calls to ControlPoint::IsLatitudeConstrained to 
+   *                           IsCoord1Constained and added or updated a few comments.
+   *                           *** TODO *** make sure the new methods are fully functional
+   *                           for either coordinate type once the new header keyword is added.
+   *                           
+   *   @history 2018-07-03 Jesse Mapel - Removed target radii from versioner. References #5457.
    */
   class ControlNetVersioner {
 
@@ -467,16 +486,6 @@ namespace Isis {
         QString description;
         //! The name of the user or program that last modified the control network
         QString userName;
-        /**
-         * The equatorial radius of the target body
-         * used to convert from spherical to rectangular coordinates
-         */
-        Distance equatorialRadius;
-        /**
-         * The equatorial radius of the target body
-         * used to convert from spherical to rectangular coordinates
-         */
-        Distance polarRadius;
       };
 
       //! Typedef for consistent naming of containers for version 2
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.truth b/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.truth
index f0d2e7d37abc644e989032217714a236f7bb04a7..6c6270e6fef815572d380763f9044905e29faa6d 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.truth
+++ b/isis/src/control/objs/ControlNetVersioner/ControlNetVersioner.truth
@@ -2,16 +2,13 @@ Test ControlNetVersioner
 Reading: $control/testData/unitTest_ControlNetVersioner_PvlNetwork2_PvlV0001.net...
 
 Read network...
-Reading Control Points...
-0% Processed
**I/O ERROR** Reading the control network [unitTest_ControlNetVersioner_PvlNetwork2_PvlV0001.net] failed.
-**I/O ERROR** Failed to initialize control point at index [0].
-**I/O ERROR** Unable to get target body radii for [] when calculating covariance matrix.
+Write the network and re-read it...
+After reading and writing to a binary form does Pvl match?
+Reading/Writing control network is consistent
 
 Reading: $control/testData/unitTest_ControlNetVersioner_PvlNetwork3_PvlV0001.net...
 
 Read network...
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Converted directly to Pvl:
 Object = ControlNetwork
   NetworkId    = Null
@@ -66,8 +63,6 @@ Reading/Writing control network is consistent
 Reading: $control/testData/unitTest_ControlNetVersioner_PvlNetwork1_PvlV0001.net...
 
 Read network...
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Converted directly to Pvl:
 Object = ControlNetwork
   NetworkId    = TestNet01
@@ -122,8 +117,6 @@ Reading/Writing control network is consistent
 Reading: $control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net...
 
 Read network...
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Converted directly to Pvl:
 Object = ControlNetwork
   NetworkId    = Test
@@ -154,7 +147,7 @@ Object = ControlNetwork
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
 
-    # AprioriLatitudeSigma = 97324.497783569 <meters>  AprioriLongitudeSigma = 124939.57715415 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -169,7 +162,7 @@ Object = ControlNetwork
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
 
-    # AdjustedLatitudeSigma = 97324.497783569 <meters>  AdjustedLongitudeSigma = 124939.57715415 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
@@ -310,17 +303,13 @@ Read network...
 Reading: $control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net...
 
 Read network...
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Write the network and re-read it...
 After reading and writing to a binary form does Pvl match?
 Reading/Writing control network is consistent
 
-Reading: $control/testData/unitTest_ControlNetVersioner_PvlNetwork4_PvlV0003.pvl...
+Reading: $control/testData/unitTest_ControlNetVersioner_PvlNetwork8_PvlV0005.pvl...
 
 Read network...
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Converted directly to Pvl:
 Object = ControlNetwork
   NetworkId    = LUNAE_PALUS_THEMIS_DIR
@@ -357,7 +346,7 @@ Object = ControlNetwork
     # AdjustedRadius = 3394325.2138031 <meters>
     AdjustedZ                = 829595.31268436 <meters>
 
-    # AdjustedLatitudeSigma = 100.13842019954 <meters>  AdjustedLongitudeSigma = 106.48711145076 <meters>  AdjustedRadiusSigma = 0.099947528407384 <meters>
+    # AdjustedLatitudeSigma = 100.08343601321 <meters>  AdjustedLongitudeSigma = 100.07117311087 <meters>  AdjustedRadiusSigma = 0.099947528407384 <meters>
     AdjustedCovarianceMatrix = (8096.6118516192, 3791.9236705506,
                                 -1072.6708105639, 2516.0772474838,
                                 2117.9301543094, 9418.2547424025)
@@ -453,7 +442,7 @@ Object = ControlNetwork
     # AdjustedRadius = 3397378.3342506 <meters>
     AdjustedZ                = 93324.42152629 <meters>
 
-    # AdjustedLatitudeSigma = 56.560713922924 <meters>  AdjustedLongitudeSigma = 56.546411110445 <meters>  AdjustedRadiusSigma = 0.099943774867249 <meters>
+    # AdjustedLatitudeSigma = 56.58050463946 <meters>  AdjustedLongitudeSigma = 56.523513347564 <meters>  AdjustedRadiusSigma = 0.099943774867249 <meters>
     AdjustedCovarianceMatrix = (2621.8486551013, 1225.183985133,
                                 -35.999329178353, 575.49833284641,
                                 80.485341554024, 3198.9240672187)
@@ -564,8 +553,20 @@ The conversion methods for pvl->bin and bin->pvl are correct.
 Reading: $control/testData/unitTest_ControlNetVersioner_PvlNetwork5_PvlV0003.pvl...
 
 Read network...
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
+Write the network and re-read it...
+After reading and writing to a binary form does Pvl match?
+Reading/Writing control network is consistent
+
+Reading: $control/testData/PvlNet_TestNetwork1_V2.net...
+
+Read network...
+Write the network and re-read it...
+After reading and writing to a binary form does Pvl match?
+Reading/Writing control network is consistent
+
+Reading: $control/testData/PvlNet_TestNetwork2_V3.net...
+
+Read network...
 Write the network and re-read it...
 After reading and writing to a binary form does Pvl match?
 Reading/Writing control network is consistent
@@ -600,15 +601,9 @@ Reading/Writing control network is consistent
 
 Test writing from ControlNet objects
 
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Adding Control Points to Network...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 Test reading version 1 protobuf network
 
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 Take all of the control points and delete them.
   1 point taken
   2 points taken
@@ -617,8 +612,6 @@ Take all of the control points and delete them.
 
 Test reading version 5 protobuf network
 
-Reading Control Points...
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
 
 Test writing with invalid target
 
@@ -628,23 +621,23 @@ Test reading a random PVL file
 **I/O ERROR** Reading the control network [equirectangular.map] failed.
 **I/O ERROR** Could not determine the control network file type.
 
-Test reading a PVL files with missing header information
+Test reading a PVL file with missing header information
 
 **I/O ERROR** Reading the control network [unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV1.net] failed.
 **I/O ERROR** Missing required header information.
-**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [/usgs/cpkgs/isis3/data/control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV1.net].
+**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV1.net].
 **I/O ERROR** Reading the control network [unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV2.net] failed.
 **I/O ERROR** Missing required header information.
-**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [/usgs/cpkgs/isis3/data/control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV2.net].
+**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV2.net].
 **I/O ERROR** Reading the control network [unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV3.net] failed.
 **I/O ERROR** Missing required header information.
-**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [/usgs/cpkgs/isis3/data/control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV3.net].
+**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV3.net].
 **I/O ERROR** Reading the control network [unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV4.net] failed.
 **I/O ERROR** Missing required header information.
-**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [/usgs/cpkgs/isis3/data/control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV4.net].
+**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV4.net].
 **I/O ERROR** Reading the control network [unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV5.net] failed.
 **I/O ERROR** Missing required header information.
-**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [/usgs/cpkgs/isis3/data/control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV5.net].
+**ERROR** PVL Keyword [TargetName] does not exist in [Object = ControlNetwork] in file [control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV5.net].
 
 Test reading a protobuf file with a bad version number
 
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0002.proto b/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0002.proto
index a911e609acf876ede1ed0a461d78b7672e4d65ba..7f2b7ac6ff3e5c72708479ecddc36397d8ddeff5 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0002.proto
+++ b/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0002.proto
@@ -1,10 +1,14 @@
-// 2011-06-07 Tracie Sucharski/Debbie Cook - Changed PointType 
+// Protocol buffer control point descriptor for Isis3 Control Networks
+//
+// 2011-06-07 Tracie Sucharski/Debbie Cook - Changed PointType
 //                    Ground  ---->  Fixed
-//                    Tie     ---->  Free          
+//                    Tie     ---->  Free
 //
-// 2017-12-11 Kristin Berry - Separated header and point into separate files. 
+// 2017-12-11 Kristin Berry - Separated header and point into separate files.
+// 2018-06-13 Jesse Mapel - Added flag to indicate it is a protobuf 2 file
+
+syntax="proto2";
 
-// Protocol buffer control point descriptor for Isis3 Control Networks
 package Isis;
 
 message ControlPointFileEntryV0002 {
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0005.proto b/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0005.proto
index c177b4da09a9e393dba6094c1dae3f941ac9ed10..5a2078118cd738e1dd3a663643efc8e51420311b 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0005.proto
+++ b/isis/src/control/objs/ControlNetVersioner/ControlPointFileEntryV0005.proto
@@ -1,4 +1,9 @@
 // Protocol buffer control point descriptor for Isis3 Control Networks
+//
+// 2018-06-13 Jesse Mapel - Added flag to indicate it is a protobuf 2 file
+
+syntax="proto2";
+
 package Isis;
 
 message ControlPointFileEntryV0005 {
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.cpp b/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.cpp
index 764952534bafa34803e3b20b0abecc4e65ccea28..4d63de49749e0e41df1f6d27b47045169542e417 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.cpp
+++ b/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.cpp
@@ -36,8 +36,7 @@ namespace Isis {
    * Create a ControlPointV0001 object from a version 1 control point Pvl object
    *
    * @param pointObject The control point and its measures in a Pvl object
-   * @param targetName The name of the target used to get the body radii when converting from
-   *                   lat/lon to x/y/z.
+   * @param targetName The name of the target 
    */
   ControlPointV0001::ControlPointV0001(PvlObject &pointObject, const QString targetName)
       : m_pointData(new ControlNetFileProtoV0001_PBControlPoint),
@@ -228,29 +227,8 @@ namespace Isis {
     }
 
     // Copy the covariance matrices
-    // Sometimes they are not stored in version 1 Pvls so we compute them from a combination
-    // of the surface point sigmas and the target radii.
-
-    // We have to do this because Target::radiiGroup calls NAIF routines,
-    // but doesn't check for errors.
-    NaifStatus::CheckErrors();
-    PvlGroup radii;
-    try {
-     radii = Target::radiiGroup(targetName);
-    }
-    catch (IException &e) {
-     try {
-       NaifStatus::CheckErrors();
-     }
-     catch (IException &) {
-       // pass to the outer catch
-     }
-     QString msg = "Unable to get target body radii for [" + targetName
-                   + "] when calculating covariance matrix.";
-     throw IException(e, IException::Io, msg, _FILEINFO_);
-    }
-    Distance equatorialRadius(radii["EquatorialRadius"], Distance::Meters);
-    Distance polarRadius(radii["PolarRadius"], Distance::Meters);
+    // Sometimes they are not stored in version 1 Pvls so we compute them from the
+    // surface point sigmas using the local radius to convert to/from angular units.
 
     // Add the Apriori Covariance Matrix
     if ( pointObject.hasKeyword("AprioriCovarianceMatrix") ) {
@@ -300,7 +278,6 @@ namespace Isis {
       }
 
       SurfacePoint aprioriPoint;
-      aprioriPoint.SetRadii(equatorialRadius, equatorialRadius, polarRadius);
       aprioriPoint.SetRectangular( Displacement(m_pointData->apriorix(), Displacement::Meters),
                                    Displacement(m_pointData->aprioriy(), Displacement::Meters),
                                    Displacement(m_pointData->aprioriz(), Displacement::Meters) );
@@ -360,7 +337,6 @@ namespace Isis {
       }
 
       SurfacePoint adjustedPoint;
-      adjustedPoint.SetRadii(equatorialRadius, equatorialRadius, polarRadius);
       adjustedPoint.SetRectangular( Displacement(m_pointData->adjustedx(), Displacement::Meters),
                                     Displacement(m_pointData->adjustedy(), Displacement::Meters),
                                     Displacement(m_pointData->adjustedz(), Displacement::Meters) );
@@ -546,7 +522,7 @@ namespace Isis {
         try {
           value = toDouble(dataKeyword[0]);
         }
-        catch (IException e) {
+        catch (IException &e) {
           QString msg = "Invalid control measure log data value [" + dataKeyword[0] + "]";
           throw IException(e, IException::Io, msg, _FILEINFO_);
         }
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.h b/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.h
index 0fe4e6e89683c364be1a73e1be617ccfa930e629..a2caa40dca4574e72a082f37dd9617333fa19d1b 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.h
+++ b/isis/src/control/objs/ControlNetVersioner/ControlPointV0001.h
@@ -65,6 +65,13 @@ namespace Isis {
    *   @history 2017-12-21 Adam Goins - Changed Pvl constructor to take PvlObject.
    *   @history 2017-12-21 Jesse Mapel - Improved documentation.
    *   @history 2017-01-27 Jesse Mapel - More documentation improvements.
+   *   @history 2018-06-28 Debbie A Cook - Removed all calls to obsolete method
+   *                                                   SurfacePoint::SetRadii.  References #5457.
+   *   @history 2018-07-11 Debbie A Cook - Removed obsolete tests for failure
+   *                                                   due to missing target radii.  SurfacePoint
+   *                                                   now uses the local radius of the point to 
+   *                                                   convert sigmas to target radii are no longer
+   *                                                   used.  References #5457
    */
   class ControlPointV0001 {
     public:
diff --git a/isis/src/control/objs/ControlNetVersioner/ControlPointV0002.cpp b/isis/src/control/objs/ControlNetVersioner/ControlPointV0002.cpp
index 7ad11df692d70039ac4c57812ab1799d76e7dc4b..a4d088bea90b06dc5dab7e13061631aff442a9c8 100644
--- a/isis/src/control/objs/ControlNetVersioner/ControlPointV0002.cpp
+++ b/isis/src/control/objs/ControlNetVersioner/ControlPointV0002.cpp
@@ -199,21 +199,23 @@ namespace Isis {
       if (group.hasKeyword("Sample")) {
         double value = toDouble(group["Sample"][0]);
         measure.mutable_measurement()->set_sample(value);
+        group.deleteKeyword("Sample");
       }
       if (group.hasKeyword("Line")) {
         double value = toDouble(group["Line"][0]);
         measure.mutable_measurement()->set_line(value);
+        group.deleteKeyword("Line");
       }
       if (group.hasKeyword("SampleResidual")) {
         double value = toDouble(group["SampleResidual"][0]);
         measure.mutable_measurement()->set_sampleresidual(value);
+        group.deleteKeyword("SampleResidual");
       }
       if (group.hasKeyword("LineResidual")) {
         double value = toDouble(group["LineResidual"][0]);
         measure.mutable_measurement()->set_lineresidual(value);
+        group.deleteKeyword("LineResidual");
       }
-
-
       if (group.hasKeyword("Reference")) {
         if (group["Reference"][0].toLower() == "true") {
           m_pointData->set_referenceindex(groupIndex);
@@ -294,7 +296,7 @@ namespace Isis {
         try {
           value = toDouble(dataKeyword[0]);
         }
-        catch (IException e) {
+        catch (IException &e) {
           QString msg = "Invalid control measure log data value [" + dataKeyword[0] + "]";
           throw IException(e, IException::Io, msg, _FILEINFO_);
         }
diff --git a/isis/src/control/objs/ControlNetVersioner/unitTest.cpp b/isis/src/control/objs/ControlNetVersioner/unitTest.cpp
index d5b60a8c13942d278c401e5f98d50bc1c05e890c..7992c9d7b11176a72919ea01570512c36bc2bbd4 100644
--- a/isis/src/control/objs/ControlNetVersioner/unitTest.cpp
+++ b/isis/src/control/objs/ControlNetVersioner/unitTest.cpp
@@ -16,55 +16,115 @@ using namespace Isis;
 
 void TestNetwork(const QString &filename, Progress *progress, bool printNetwork = true, bool pvlInput = false);
 
+/** 
+ * Unit test for ControlNetVersioner class
+ *  
+ * @author ????-??-?? Unknown 
+ *  
+ *  @internal
+ *   @history 2018-06-06 Jeannie Backer - Removed file paths from error message written to
+ *                           test output.
+ *  
+ */
 int main(int argc, char *argv[]) {
   Preference::Preferences(true);
   Progress *testProgress = new Progress();
-  std::cout << "Test ControlNetVersioner";
-
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork2_PvlV0001.net", testProgress);     // No target
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork3_PvlV0001.net", testProgress);     // Really odd keywords with target
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork1_PvlV0001.net", testProgress);     // Another set of odd keywords
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net", testProgress); // Binary V1
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_BadNetwork_ProtoV0001.net", testProgress);    // Corrupted (based off of oldNetwork2.net)
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net", testProgress, false);  // Binary V2
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork4_PvlV0003.pvl", testProgress, true, true); // Network with rejected jigsaw points
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork5_PvlV0003.pvl", testProgress, false, false); // Network full of weird test cases (based on PvlNetwork4)
+  cout << "Test ControlNetVersioner";
+
+  // No target                                                  
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork2_PvlV0001.net", 
+              testProgress, false); // no print network here because the datetimes will change
+
+  // Really odd keywords with target                            
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork3_PvlV0001.net", 
+              testProgress);               
+
+  // Another set of odd keywords                                
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork1_PvlV0001.net", 
+              testProgress);               
+
+  // Binary V1                                                  
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net", 
+              testProgress);           
+
+  // Corrupted (based off of oldNetwork2.net)                   
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_BadNetwork_ProtoV0001.net", 
+              testProgress);              
+
+  // Binary V2                                                  
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net", 
+              testProgress, 
+              false);    
+
+  // Network with rejected jigsaw points                        
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork8_PvlV0005.pvl", 
+              testProgress, 
+              true, 
+              true);   
+
+  // Network full of weird test cases (based on PvlNetwork4)    
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork5_PvlV0003.pvl", 
+              testProgress,
+              false, 
+              false);
+
+  // Test Network 1 created for code coverage.
+  TestNetwork("$control/testData/PvlNet_TestNetwork1_V2.net", 
+              testProgress, 
+              false, 
+              false); 
+
+  // Test Network 2 created for code coverage.
+  TestNetwork("$control/testData/PvlNet_TestNetwork2_V3.net", 
+              testProgress, 
+              false, 
+              false); 
 
   // Re-test each version without progress
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork3_PvlV0001.net", 0, false);
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net", 0, false);
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net", 0, false);
-  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork4_PvlV0003.pvl", 0, false);
-
-  std::cout << std::endl << "Test writing from ControlNet objects" << std::endl << std::endl;
-  ControlNet *binaryV2Net = new ControlNet("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net",
-                                           testProgress);
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork3_PvlV0001.net", 
+              0, 
+              false);
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net", 
+              0, 
+              false);
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net", 
+              0, 
+              false);
+  TestNetwork("$control/testData/unitTest_ControlNetVersioner_PvlNetwork4_PvlV0003.pvl", 
+              0, 
+              false);
+
+  cout << endl << "Test writing from ControlNet objects" << endl << endl;
+  QString cnetv2 = "$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net";
+  ControlNet *binaryV2Net = new ControlNet(cnetv2,testProgress);
   ControlNetVersioner *binV2Versioner = new ControlNetVersioner(binaryV2Net);
   binV2Versioner->write("./binaryV2tmp.net");
   remove("./binaryV2tmp.net");
   delete binV2Versioner;
   binV2Versioner = NULL;
 
-  std::cout << std::endl << "Test reading version 1 protobuf network" << std::endl << std::endl;
-  ControlNetVersioner *binV1Versioner = new ControlNetVersioner(FileName("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net"), testProgress);
-  std::cout << "Take all of the control points and delete them." << std::endl;
+  cout << endl << "Test reading version 1 protobuf network" << endl << endl;
+  QString cnetv1 = "$control/testData/unitTest_ControlNetVersioner_ProtoNetwork1_ProtoV0001.net";
+  ControlNetVersioner *binV1Versioner = new ControlNetVersioner(FileName(cnetv1), testProgress);
+  cout << "Take all of the control points and delete them." << endl;
   int pointsTaken = 0;
   ControlPoint *readPoint = binV1Versioner->takeFirstPoint();
   while (readPoint != NULL) {
     pointsTaken++;
-    std::cout << "  " << pointsTaken << (pointsTaken > 1 ? " points taken" : " point taken") << std::endl;
+    cout << "  " << pointsTaken << (pointsTaken > 1 ? " points taken" : " point taken") << endl;
     delete readPoint;
     readPoint = binV1Versioner->takeFirstPoint();
   }
   delete binV1Versioner;
   binV1Versioner = NULL;
 
-  std::cout << std::endl << "Test reading version 5 protobuf network" << std::endl << std::endl;
-  ControlNetVersioner *binV5Versioner = new ControlNetVersioner(FileName("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork3_ProtoV0005.net"), testProgress);
+  cout << endl << "Test reading version 5 protobuf network" << endl << endl;
+  QString cnetv5 = "$control/testData/unitTest_ControlNetVersioner_ProtoNetwork3_ProtoV0005.net";
+  ControlNetVersioner *binV5Versioner = new ControlNetVersioner(FileName(cnetv5), testProgress);
   delete binV5Versioner;
   binV5Versioner = NULL;
 
-  std::cout << std::endl << "Test writing with invalid target" << std::endl << std::endl;
+  cout << endl << "Test writing with invalid target" << endl << endl;
   try {
     binaryV2Net->SetTarget("INVALID_TARGET_NAME");
     binV2Versioner = new ControlNetVersioner(binaryV2Net);
@@ -77,7 +137,7 @@ int main(int argc, char *argv[]) {
     }
   }
 
-  std::cout << std::endl << "Test reading a random PVL file" << std::endl << std::endl;
+  cout << endl << "Test reading a random PVL file" << endl << endl;
   try {
     ControlNetVersioner invalidVersioner("$base/templates/maps/equirectangular.map");
   }
@@ -85,49 +145,68 @@ int main(int argc, char *argv[]) {
     e.print();
   }
 
-  std::cout << std::endl << "Test reading a PVL files with missing header information" << std::endl << std::endl;
+  cout << endl << "Test reading a PVL file with missing header information" << endl << endl;
+  QString badCnetName = "";
   try {
-    ControlNetVersioner invalidVersionerV1("$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV1.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV1.net";
+    ControlNetVersioner invalidVersionerV1(badCnetName);
   }
   catch (IException &e) {
-    e.print();
+    QString message = e.toString();
+    cout << message.replace(QRegExp("file.*control/testData"), "file [control/testData");
+    cout << endl;
   }
   try {
-    ControlNetVersioner invalidVersionerV2("$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV2.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV2.net";
+    ControlNetVersioner invalidVersionerV2(badCnetName);
   }
   catch (IException &e) {
-    e.print();
+    QString message = e.toString();
+    cout << message.replace(QRegExp("file.*control/testData"), "file [control/testData");
+    cout << endl;
   }
   try {
-    ControlNetVersioner invalidVersionerV3("$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV3.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV3.net";
+    ControlNetVersioner invalidVersionerV3(badCnetName);
   }
   catch (IException &e) {
-    e.print();
+    QString message = e.toString();
+    cout << message.replace(QRegExp("file.*control/testData"), "file [control/testData");
+    cout << endl;
   }
   try {
-    ControlNetVersioner invalidVersionerV4("$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV4.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV4.net";
+    ControlNetVersioner invalidVersionerV4(badCnetName);
   }
   catch (IException &e) {
-    e.print();
+    QString message = e.toString();
+    cout << message.replace(QRegExp("file.*control/testData"), "file [control/testData");
+    cout << endl;
   }
   try {
-    ControlNetVersioner invalidVersionerV5("$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV5.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_PvlNetwork_BadHeaderV5.net";
+    ControlNetVersioner invalidVersionerV5(badCnetName);
   }
   catch (IException &e) {
-    e.print();
+    QString message = e.toString();
+    cout << message.replace(QRegExp("file.*control/testData"), "file [control/testData");
+    cout << endl;
   }
 
-  std::cout << std::endl << "Test reading a protobuf file with a bad version number" << std::endl << std::endl;
+  cout << endl << "Test reading a protobuf file with a bad version number" << endl << endl;
   try {
-    ControlNetVersioner invalidVersioner("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork_BadVersion.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_ProtoNetwork_BadVersion.net";
+    ControlNetVersioner invalidVersioner(badCnetName);
   }
   catch (IException &e) {
     e.print();
   }
 
-  std::cout << std::endl << "Test reading a protobuf file with no version number" << std::endl << std::endl;
+  cout << endl << "Test reading a protobuf file with no version number" << endl << endl;
   try {
-    ControlNetVersioner invalidVersioner("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork_NoVersion.net");
+    badCnetName = "$control/testData/unitTest_ControlNetVersioner_ProtoNetwork_NoVersion.net";
+    ControlNetVersioner invalidVersioner(badCnetName);
+
   }
   catch (IException &e) {
     e.print();
@@ -136,8 +215,19 @@ int main(int argc, char *argv[]) {
   delete binaryV2Net;
 }
 
+
+/**
+ * Runs various test on the given network. 
+ *  
+ * @param filename Name of the control network file.
+ * @param progress 
+ * @param printNetwork Indicates whether to print the network as 
+ *                     a PVL.
+ * @param pvlInput Indicates whether the given network is in PVL
+ *                 format.
+ */
 void TestNetwork(const QString &filename, Progress *progress, bool printNetwork, bool pvlInput) {
-  std::cout << "\nReading: " << filename << "...\n";
+  cout << "\nReading: " << filename << "...\n";
   FileName networkFileName(filename);
 
   ControlNetVersioner *test = NULL;
@@ -151,20 +241,20 @@ void TestNetwork(const QString &filename, Progress *progress, bool printNetwork,
     //   convert to Pvl, then update, then convert to binary, and back to pvl.
     //   The reason for the intermediate Pvl is described in
     //   ControlNetVersioner.h.
-    std::cout << "\nRead network..." << std::endl;
+    cout << "\nRead network..." << endl;
     test = new ControlNetVersioner(networkFileName, progress);
 
     if(printNetwork) {
-      std::cout << "Converted directly to Pvl:" << std::endl;
+      cout << "Converted directly to Pvl:" << endl;
       Pvl pvlVersion(test->toPvl());
 
-      // std::cout does not support this operation on a pvl
-      std::cout << pvlVersion << std::endl;
+      // cout does not support this operation on a pvl
+      cout << pvlVersion << endl;
       pvlVersion.write("./tmp.pvl");
     }
 
     // Test the latest binary read/write and Pvl conversion
-    std::cout << "Write the network and re-read it..." << std::endl;
+    cout << "Write the network and re-read it..." << endl;
     test->write( FileName("./tmp") );
     try {
       test2 = new ControlNetVersioner( FileName("./tmp") );
@@ -174,32 +264,32 @@ void TestNetwork(const QString &filename, Progress *progress, bool printNetwork,
       throw;
     }
 
-    std::cout << "After reading and writing to a binary form does Pvl match?" << std::endl;
+    cout << "After reading and writing to a binary form does Pvl match?" << endl;
 
     if(printNetwork) {
       Pvl pvlVersion2(test2->toPvl());
       pvlVersion2.write("./tmp2.pvl");
       if(system("cmp ./tmp.pvl ./tmp2.pvl")) {
-        std::cout << "Reading/Writing results in Pvl differences!" << std::endl;
+        cout << "Reading/Writing results in Pvl differences!" << endl;
       }
       else {
-        std::cout << "Conversion to Pvl stays consistent" << std::endl;
+        cout << "Conversion to Pvl stays consistent" << endl;
       }
     }
 
     test2->write(FileName("./tmp2"));
     if(system("cmp ./tmp ./tmp2")) {
-      std::cout << "Reading/Writing control network results in binary differences!" << std::endl;
+      cout << "Reading/Writing control network results in binary differences!" << endl;
     }
     else {
-      std::cout << "Reading/Writing control network is consistent" << std::endl;
+      cout << "Reading/Writing control network is consistent" << endl;
     }
 
     if (pvlInput) {
 
       ControlNetVersioner *cNet2 = NULL;
 
-      std::cout << "Check conversions between the binary format and the pvl format." << std::endl;
+      cout << "Check conversions between the binary format and the pvl format." << endl;
       /*
        * When the input is a pvl, ./tmp is the binary form of the initial input. (pvl1->bin1)
        * Furthermore, ./tmp.pvl is the first binary conversion reverted back to pvl.
@@ -231,14 +321,14 @@ void TestNetwork(const QString &filename, Progress *progress, bool printNetwork,
 
         //if the binary files are different.
         if(system("diff -EbB --suppress-common-lines ./tmp ./tmpCNet2")){
-          std::cout << "The conversion from binary to pvl is incorrect." << std::endl;
+          cout << "The conversion from binary to pvl is incorrect." << endl;
         }
         else {
-          std::cout << "The conversion from pvl to binary is incorrect." << std::endl;
+          cout << "The conversion from pvl to binary is incorrect." << endl;
         }
       }
       else {
-        std::cout << "The conversion methods for pvl->bin and bin->pvl are correct." << std::endl;
+        cout << "The conversion methods for pvl->bin and bin->pvl are correct." << endl;
       }
 
       remove("./tmpCNet2");
@@ -257,7 +347,7 @@ void TestNetwork(const QString &filename, Progress *progress, bool printNetwork,
   catch(IException &e) {
     QStringList errors = e.toString().split("\n");
     errors.removeLast();
-    std::cout << errors.join("\n") << std::endl;
+    cout << errors.join("\n") << endl;
   }
 
   if(test) {
diff --git a/isis/src/control/objs/ControlNetVitals/ControlNetVitals.cpp b/isis/src/control/objs/ControlNetVitals/ControlNetVitals.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9f6b66f80ca202be898aa77b750cd0d01aba3427
--- /dev/null
+++ b/isis/src/control/objs/ControlNetVitals/ControlNetVitals.cpp
@@ -0,0 +1,909 @@
+#include "ControlNetVitals.h"
+
+#include <QDateTime>
+#include <QList>
+#include <QPair>
+#include <QVariant>
+
+#include "IException.h"
+#include "IString.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
+#include "ControlMeasure.h"
+
+namespace Isis {
+
+
+  /**
+   *  Constructs a ControlNetVitals object from a ControlNet.
+   *  once complete, it calls the validate() method to evaluate the current status
+   *  of the newly ingested Control Network.
+   *
+   *  @param cnet The Control Network that we will be tracking vitals for.
+   */
+  ControlNetVitals::ControlNetVitals(ControlNet *cnet) {
+    m_controlNet = cnet;
+
+    initializeVitals();
+
+    connect(cnet, SIGNAL(networkModified(ControlNet::ModType)),
+            this, SLOT(validateNetwork(ControlNet::ModType)));
+
+    connect(cnet, SIGNAL(newPoint(ControlPoint*)),
+            this, SLOT(addPoint(ControlPoint*)));
+    connect(cnet, SIGNAL(pointModified(ControlPoint *, ControlPoint::ModType, QVariant, QVariant)),
+            this, SLOT(pointModified(ControlPoint *, ControlPoint::ModType, QVariant, QVariant)));
+    connect(cnet, SIGNAL(pointDeleted(ControlPoint*)),
+            this, SLOT(deletePoint(ControlPoint*)));
+
+    connect(cnet, SIGNAL(newMeasure(ControlMeasure*)),
+            this, SLOT(addMeasure(ControlMeasure*)));
+    connect(cnet, SIGNAL(measureModified(ControlMeasure *, ControlMeasure::ModType, QVariant, QVariant)),
+            this, SLOT(measureModified(ControlMeasure *, ControlMeasure::ModType, QVariant, QVariant)));
+    connect(cnet, SIGNAL(measureRemoved(ControlMeasure*)),
+            this, SLOT(deleteMeasure(ControlMeasure*)));
+
+    validate();
+  }
+
+
+  /**
+   *  This will initialize all necessary values and set up the point measure and
+   *  image measure QMaps appropriately.
+   *
+   */
+  void ControlNetVitals::initializeVitals() {
+
+    m_islandList = m_controlNet->GetSerialConnections();
+
+    m_numPoints = 0;
+    m_numPointsIgnored = 0;
+    m_numPointsLocked = 0;
+    m_numMeasures = m_controlNet->GetNumMeasures();
+
+    m_pointMeasureCounts.clear();
+    m_imageMeasureCounts.clear();
+    m_pointTypeCounts.clear();
+
+    m_pointTypeCounts.insert(ControlPoint::Free, 0);
+    m_pointTypeCounts.insert(ControlPoint::Constrained, 0);
+    m_pointTypeCounts.insert(ControlPoint::Fixed, 0);
+
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      addPoint(point);
+    }
+
+    foreach(QString serial, m_controlNet->GetCubeSerials()) {
+      int numValidMeasures = m_controlNet->GetNumberOfValidMeasuresInImage(serial);
+      if ( !m_imageMeasureCounts.contains(numValidMeasures) ) {
+        m_imageMeasureCounts.insert(numValidMeasures, 1);
+      }
+      else {
+        m_imageMeasureCounts[numValidMeasures]++;
+      }
+    }
+  }
+
+
+  /**
+   *  This method is designed to be called whenever a modification is made to the network,
+   *  or any of it's control points or measures. It receives all of the components that
+   *  make up the history entry (the comment, the ID of what was modified, oldValue, newValue)
+   *  and emits them along with a timestamp of when the modification was made.
+   *
+   *  The historyEntry() will pass these values on to the listening SLOT in the health monitor
+   *  widget so that it can be displayed in the history table.
+   *
+   *  @param entry The history comment that includes what modification was made.
+   *  @param id The ID of the object modified. This can be a point id, measure serial, or net id.
+   *  @param oldValue The oldValue the object had before the modification.
+   *  @param newValue The newValue the object had after its modification.
+   */
+  void ControlNetVitals::emitHistoryEntry(QString entry, QString id, QVariant oldValue, QVariant newValue) {
+    emit historyEntry(entry, id, oldValue, newValue, QDateTime::currentDateTime().toString());
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the newPoint() signal emitted from a ControlNetwork
+   *  whenever a new point has been added. It observes the Control Point and increments the
+   *  appropriate internal counters to reflect the addition of this new point.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  Unlike deletePoint(), this method does modify counters based on measures
+   *  because the ControlNet does not emit separate measureAdded signals for
+   *  efficiency reasons.
+   *
+   *  @param point The ControlPoint being added to the network.
+   */
+  void ControlNetVitals::addPoint(ControlPoint *point) {
+
+    emitHistoryEntry("Control Point Added", point->GetId(), "", "");
+    m_numPoints++;
+
+    if (point->IsIgnored()) {
+      m_numPointsIgnored++;
+      return;
+    }
+
+    if (point->IsEditLocked()) {
+      m_numPointsLocked++;
+    }
+
+    m_pointTypeCounts[point->GetType()]++;
+
+    int numValidMeasures = point->GetNumValidMeasures();
+    if ( !m_pointMeasureCounts.contains(numValidMeasures) ) {
+      m_pointMeasureCounts.insert(numValidMeasures, 1);
+    }
+
+    else {
+      m_pointMeasureCounts[numValidMeasures]++;
+    }
+
+    m_numMeasures = m_controlNet->GetNumMeasures();
+    validate();
+  }
+
+
+  /**
+   *  This SLOT is designed to receive a signal emitted from the Control Network
+   *  whenever a modification is made to a Control Point. This SLOT receives the
+   *  ControlPoint that was modified, as well with the ControlPoint::ModType enum
+   *  indicating what type of modification was made to the Control Point.
+   *
+   *  We then increment or decrement the appropriate internal counters based on which type
+   *  of modification was made to the Control Point.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  @param point The Control Point that was modified in the observed Control Network.
+   *  @param type The type of modification that was made to the Control Point.
+   *  @param oldValue The old value (if any) of whatever modification was made to the Control Point.
+   *  @param newValue The new value (if any) of whatever modification was made to the Control Point.
+   */
+  void ControlNetVitals::pointModified(ControlPoint *point, ControlPoint::ModType type,
+                                       QVariant oldValue, QVariant newValue) {
+
+    QString historyEntry;
+
+    switch(type) {
+      case ControlPoint::EditLockModified:
+
+        historyEntry = "Point Edit Lock Modified";
+
+        if (oldValue.toBool()) {
+          m_numPointsLocked--;
+        }
+
+        if (newValue.toBool()) {
+          m_numPointsLocked++;
+        }
+
+        emitHistoryEntry( historyEntry, point->GetId(),
+                          oldValue, newValue );
+
+        break;
+
+      case ControlPoint::IgnoredModified:
+
+        historyEntry = "Point Ignored Modified";
+
+        if (oldValue.toBool()) {
+          m_numPointsIgnored--;
+          if (point->IsEditLocked()) {
+            m_numPointsLocked++;
+          }
+          m_pointTypeCounts[point->GetType()]++;
+          int numValidMeasures = point->GetNumValidMeasures();
+          if ( !m_pointMeasureCounts.contains(numValidMeasures) ) {
+            m_pointMeasureCounts.insert(numValidMeasures, 1);
+          }
+          else {
+            m_pointMeasureCounts[numValidMeasures]++;
+          }
+        }
+
+        if (newValue.toBool()) {
+          m_numPointsIgnored++;
+          if (point->IsEditLocked()) {
+            m_numPointsLocked--;
+          }
+          m_pointTypeCounts[point->GetType()]--;
+          int numValidMeasures = point->GetNumValidMeasures();
+          if ( --m_pointMeasureCounts[numValidMeasures] < 1 ) {
+            m_pointMeasureCounts.remove(numValidMeasures);
+          }
+        }
+
+        emitHistoryEntry( historyEntry, point->GetId(),
+                          oldValue, newValue );
+
+        break;
+
+      case ControlPoint::TypeModified:
+
+        historyEntry = "Point Type Modified";
+
+        m_pointTypeCounts[ControlPoint::PointType(oldValue.toInt())]--;
+        m_pointTypeCounts[ControlPoint::PointType(newValue.toInt())]++;
+
+        emitHistoryEntry( historyEntry, point->GetId(),
+                          ControlPoint::PointTypeToString(ControlPoint::PointType(oldValue.toInt())),
+                          ControlPoint::PointTypeToString(ControlPoint::PointType(newValue.toInt())) );
+
+        break;
+
+      default:
+        // no operation
+        break;
+    }
+
+    validate();
+
+  }
+
+
+  /**
+   *  This method is designed to return the Control Point with the associated point id
+   *  from the Control Network.
+   *
+   *  @param id The Point ID of the control point to be fetched.
+   *  @return The Control Point with the associated point id.
+   */
+  ControlPoint* ControlNetVitals::getPoint(QString id) {
+    return m_controlNet->GetPoint(id);
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the removePoint() signal emitted by a Control Network
+   *  whenever a point is deleted. It observes the to-be deleted point and decrements the
+   *  appropriate internal counters to reflect the removal of this point.
+   *
+   *  This does not modify any counters based on the measures in the point
+   *  because separate measureDeleted signals will be emitted by the ControlNet.
+   *  addPoint does add modify counters based on measures because ControlNet does
+   *  not emit separate measureAdded signals for efficiency reasons.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  @param point The Control Point being deleted from the Control Network.
+   */
+  void ControlNetVitals::deletePoint(ControlPoint *point) {
+
+    emitHistoryEntry("Control Point Deleted", point->GetId(), "", "");
+    m_numPoints--;
+
+    if (point->IsIgnored()) {
+      m_numPointsIgnored--;
+      validate();
+      return;
+    }
+    if (point->IsEditLocked()) {
+      m_numPointsLocked--;
+    }
+
+    m_pointTypeCounts[point->GetType()]--;
+
+    int numValidMeasures= point->GetNumValidMeasures();
+    if ( --m_pointMeasureCounts[numValidMeasures] < 1 ) {
+      m_pointMeasureCounts.remove(numValidMeasures);
+    }
+
+    validate();
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the newMeasure() signal emitted by a Control Network
+   *  whenever a measure is added to one of it's Control Points.
+   *  It grabs the parent Control Point of the Measure and decrements the pointMeasureCount QMap
+   *  at the old measure count for the Control Point and increments the pointMeasureCount at the
+   *  new measure count for the Control Point to reflect the addition of this measure.
+   *
+   *  This does not modify any counters based on the measures in the point
+   *  because separate measureDeleted signals will be emitted by the ControlNet.
+   *  addPoint does add modify counters based on measures because ControlNet does
+   *  not emit separate measureAdded signals for efficiency reasons.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  @param measure The Control Measure being added to a Control Point in the network.
+   */
+  void ControlNetVitals::addMeasure(ControlMeasure *measure) {
+    emitHistoryEntry("Control Measure Added", measure->GetCubeSerialNumber(), "", "");
+
+    m_numMeasures++;
+
+    addMeasureToCounts(measure);
+
+    validate();
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the measureModified() signal emitted by a Control Network
+   *  whenever a measure is modified in one of it's Control Points. This SLOT receives the
+   *  ControlMeasure that was modified, as well with the ControlMeasure::ModType enum
+   *  indicating what type of modification was made to the Control Measure. The appropriate methods
+   *  are called depending on which modification was made.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  @param point The Control Measure that was modified in the observed Control Network.
+   *  @param type The type of modification that was made to the Control Measure.
+   *  @param oldValue The old value (if any) of whatever modification was made to the Control Measure.
+   *  @param newValue The new value (if any) of whatever modification was made to the Control Measure.
+   */
+  void ControlNetVitals::measureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue) {
+
+    QString historyEntry;
+
+    switch (type) {
+      case ControlMeasure::IgnoredModified:
+
+        historyEntry = "Measure Ignored Modified";
+
+        if ( !oldValue.toBool() && newValue.toBool() ) {
+          return removeMeasureFromCounts(measure);
+        }
+        else if ( oldValue.toBool() && !newValue.toBool() ) {
+          return addMeasureToCounts(measure);
+        }
+        break;
+
+      default:
+        // No operation.
+        break;
+    }
+
+    ControlNetVitals::emitHistoryEntry(historyEntry, measure->GetCubeSerialNumber(), "", "");
+    validate();
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the measureRemoved() signal emitted by a Control Network
+   *  whenever a Control Measure is deleted. It observes the to-be deleted point and decrements the
+   *  appropriate internal counters to reflect the removal of this Control Measure.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  @param point The Control Measure being deleted from a Control Point in the Control Network.
+   */
+  void ControlNetVitals::deleteMeasure(ControlMeasure *measure) {
+
+    emitHistoryEntry("Control Measure Deleted", measure->GetCubeSerialNumber(), "", "");
+
+    m_numMeasures--;
+
+    removeMeasureFromCounts(measure);
+
+    validate();
+  }
+
+
+  /**
+   * Add a measure to the internal counters
+   *
+   * @param measure The measure to add
+   */
+   void ControlNetVitals::addMeasureToCounts(ControlMeasure *measure) {
+     ControlPoint *point = measure->Parent();
+     if (point) {
+       // By this time, the measure has been added to its parent point, so the
+       // old count is the current count minus one.
+       int numValidMeasures = point->GetNumValidMeasures();
+       if ( --m_pointMeasureCounts[numValidMeasures] < 1 ) {
+         m_pointMeasureCounts.remove(numValidMeasures);
+       }
+       if ( !m_pointMeasureCounts.contains(numValidMeasures + 1) ) {
+         m_pointMeasureCounts.insert(numValidMeasures + 1, 1);
+       }
+       else {
+         m_pointMeasureCounts[numValidMeasures + 1]++;
+       }
+     }
+
+     QString serial = measure->GetCubeSerialNumber();
+     int numValidMeasures = m_controlNet->GetNumberOfValidMeasuresInImage(serial);
+     if ( --m_imageMeasureCounts[numValidMeasures - 1] < 1 ) {
+       m_imageMeasureCounts.remove(numValidMeasures);
+     }
+     if ( !m_imageMeasureCounts.contains(numValidMeasures) ) {
+       m_imageMeasureCounts.insert(numValidMeasures, 1);
+     }
+     else {
+       m_imageMeasureCounts[numValidMeasures]++;
+     }
+   }
+
+
+   /**
+    * Remove a measure from the internal counters
+    *
+    * @param measure The measure to remove
+    */
+    void ControlNetVitals::removeMeasureFromCounts(ControlMeasure *measure) {
+      ControlPoint *point = measure->Parent();
+      if (point) {
+        // By this time, the measure is still a valid measure in the parent control point.
+        int numValidMeasures = point->GetNumValidMeasures();
+
+        if ( --m_pointMeasureCounts[numValidMeasures] < 1 ) {
+          m_pointMeasureCounts.remove(numValidMeasures);
+        }
+        if ( !m_pointMeasureCounts.contains(numValidMeasures - 1) ) {
+          m_pointMeasureCounts.insert(numValidMeasures - 1, 1);
+        }
+        else {
+          m_pointMeasureCounts[numValidMeasures - 1]++;
+        }
+      }
+
+      QString serial = measure->GetCubeSerialNumber();
+      int numValidMeasures = m_controlNet->GetNumberOfValidMeasuresInImage(serial);
+
+      if ( --m_imageMeasureCounts[numValidMeasures] < 1 ) {
+        m_imageMeasureCounts.remove(numValidMeasures);
+      }
+
+      if ( !m_imageMeasureCounts.contains(numValidMeasures - 1) ) {
+        m_imageMeasureCounts.insert(numValidMeasures - 1, 1);
+      }
+      else {
+        m_imageMeasureCounts[numValidMeasures - 1]++;
+      }
+    }
+
+
+  /**
+   *  This SLOT is designed to intercept the networkModified() signal emitted by a Control Network
+   *  whenever a modification is made to the network. This SLOT receives the ControlNet::ModType
+   *  enum indicating what type of modication was made to the Control Network. It then acts
+   *  based on what type of change was made.
+   *
+   *  Once complete, we then call the validate() method to re-validate the status and
+   *  details of the Control Network.
+   *
+   *  @param point The type of modification that was made to the observed Control Network.
+   */
+  void ControlNetVitals::validateNetwork(ControlNet::ModType type) {
+
+    QString historyEntry;
+
+    switch (type) {
+      case ControlNet::Swapped:
+        emitHistoryEntry("Control Net Swapped", m_controlNet->GetNetworkId(), "", "");
+        initializeVitals();
+        break;
+      case ControlNet::GraphModified:
+        emitHistoryEntry("Control Net Graph Modified", m_controlNet->GetNetworkId(), "", "");
+        m_islandList = m_controlNet->GetSerialConnections();
+        break;
+      default:
+        // No operation.
+        break;
+    }
+    validate();
+  }
+
+
+  /**
+   *  De-constructor
+   */
+  ControlNetVitals::~ControlNetVitals() {
+  }
+
+
+  /**
+   *  This method is designed to return true if islands exist in the ControlNet Graph
+   *  and False otherwise.
+   *
+   *  @return True if islands exist, False otherwise.
+   */
+  bool ControlNetVitals::hasIslands() {
+    return numIslands() > 1;
+  }
+
+
+  /**
+   *  This method is designed to return the number of islands that exist in the
+   *  ControlNet Graph.
+   *
+   *  @return The number of islands present in the ControlNet Graph.
+   */
+  int ControlNetVitals::numIslands() {
+    return m_islandList.size();
+  }
+
+
+  /**
+   *  This method is designed to return a QList containing each island present in the ControlNet.
+   *
+   *  Each island is composed of another QList containing the cube serials for all cubes in that island.
+   *
+   *  @return A QList containing a QList of cube serials for each island present in the Control Net.
+   */
+  const QList< QList<QString> > &ControlNetVitals::getIslands() {
+    return m_islandList;
+  }
+
+
+  /**
+   *  This method is designed to return the number of points in the Control Network.
+   *
+   *  @return The number of points in the Control Network.
+   */
+  int ControlNetVitals::numPoints() {
+    return m_numPoints;
+  }
+
+
+  /**
+   *  This method is designed to return the number of ignored points in the Control Network.
+   *
+   *  @return The number of ignored points in the Control Network.
+   */
+  int ControlNetVitals::numIgnoredPoints() {
+    return m_numPointsIgnored;
+  }
+
+
+  /**
+   *  This method is designed to return the number of edit locked points in the Control Network.
+   *
+   *  @return The number of edit locked points in the Control Network.
+   */
+  int ControlNetVitals::numLockedPoints() {
+    return m_numPointsLocked;
+  }
+
+
+  /**
+   *  This method is designed to return the number of fixed points in the Control Network.
+   *
+   *  @return The number of fixed points in the Control Network.
+   */
+  int ControlNetVitals::numFixedPoints() {
+    return m_pointTypeCounts[ControlPoint::Fixed];
+  }
+
+
+  /**
+   *  This method is designed to return the number of constrained points in the Control Network.
+   *
+   *  @return The number of constrained points in the Control Network.
+   */
+  int ControlNetVitals::numConstrainedPoints() {
+    return m_pointTypeCounts[ControlPoint::Constrained];
+  }
+
+
+  /**
+   *  This method is designed to return the number of free points in the Control Network.
+   *
+   *  @return The number of free points in the Control Network.
+   */
+  int ControlNetVitals::numFreePoints() {
+    return m_pointTypeCounts[ControlPoint::Free];
+  }
+
+
+  /**
+   *  This method is designed to return the number of points that fall below a measure threshold.
+   *
+   *  For instance, a measure threshold of 3 would return all points with less than 3 measures.
+   *
+   *  @param num The number of measures a point needs to have to meet the threshold.
+   *  @return The number of points with number of measures less than the threshold.
+   */
+  int ControlNetVitals::numPointsBelowMeasureThreshold(int num) {
+    int count = 0;
+
+    QMap<int, int>::const_iterator i = m_pointMeasureCounts.constBegin();
+    while (i != m_pointMeasureCounts.constEnd()) {
+      if (i.key() >= num ) {
+        break;
+      }
+      count += i.value();
+      ++i;
+    }
+
+    return count;
+  }
+
+
+  /**
+   *  This method is designed to return the number of images in the Control Network.
+   *
+   *  @return The number of images in the Control Network.
+   */
+  int ControlNetVitals::numImages() {
+    return m_controlNet->GetCubeSerials().size();
+  }
+
+
+  /**
+   *  This method is designed to return the number of measures in the Control Network.
+   *
+   *  @return The number of measures in the Control Network.
+   */
+  int ControlNetVitals::numMeasures() {
+    return m_numMeasures;
+  }
+
+
+  /**
+   *  This method is designed to return the number of images that fall below a measure threshold.
+   *
+   *  For instance, a measure threshold of 3 would return all images with less than 3 measures.
+   *
+   *  @param num The number of measures an image needs to have to meet the threshold.
+   *  @return The number of images with number of measures less than the threshold.
+   */
+  int ControlNetVitals::numImagesBelowMeasureThreshold(int num) {
+    int count = 0;
+
+    QMap<int, int>::const_iterator i = m_imageMeasureCounts.constBegin();
+    while (i != m_imageMeasureCounts.constEnd()) {
+      if (i.key() >= num ) {
+        break;
+      }
+      count += i.value();
+      ++i;
+    }
+    return count;
+  }
+
+
+  // REFACTOR
+  /**
+   *  This method is designed to return the number of images that fall below a hull tolerance.
+   *
+   *  For instance, a tolerance of .75 would return all images with a hull tolerance of < 75%.
+   *
+   *  @param num The number of measures an image needs to have to meet the threshold.
+   *  @return The number of images with number of measures less than the threshold.
+   */
+  int ControlNetVitals::numImagesBelowHullTolerance(int tolerance) {
+    return 0;
+  }
+
+
+  /**
+   *  This method is designed to return all cube serials present in the Control Network.
+   *
+   *  @return A QList<QString> containing all cube serials in the Control Network.
+   */
+  QList<QString> ControlNetVitals::getCubeSerials() {
+    return m_controlNet->GetCubeSerials();
+  }
+
+
+  /**
+   *  This method is designed to return all points in the Control Network.
+   *
+   *  @return A QList<ControlPoint*> containing all points in the Control Network.
+   */
+  QList<ControlPoint*> ControlNetVitals::getAllPoints() {
+    return m_controlNet->GetPoints();
+  }
+
+
+  /**
+   *  This method is designed to return all ignored points in the Control Network.
+   *
+   *  @return A QList<ControlPoint*> containing all ignored points in the Control Network.
+   */
+  QList<ControlPoint*> ControlNetVitals::getIgnoredPoints() {
+    QList<ControlPoint*> ignoredPoints;
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      if (point->IsIgnored()) ignoredPoints.append(point);
+    }
+    return ignoredPoints;
+  }
+
+
+  /**
+   *  This method is designed to return all edit locked points in the Control Network.
+   *
+   *  @return A QList<ControlPoint*> containing all edit locked points in the Control Network.
+   */
+  QList<ControlPoint*> ControlNetVitals::getLockedPoints() {
+    QList<ControlPoint*> lockedPoints;
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      if (!point->IsIgnored() && point->IsEditLocked()) lockedPoints.append(point);
+    }
+    return lockedPoints;
+  }
+
+
+  /**
+   *  This method is designed to return all fixed points in the Control Network.
+   *
+   *  @return A QList<ControlPoint*> containing all fixed points in the Control Network.
+   */
+  QList<ControlPoint*> ControlNetVitals::getFixedPoints() {
+    QList<ControlPoint*> fixedPoints;
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      if (!point->IsIgnored() && point->GetType() == ControlPoint::Fixed) fixedPoints.append(point);
+    }
+    return fixedPoints;
+  }
+
+
+  /**
+   *  This method is designed to return all constrained points in the Control Network.
+   *
+   *  @return A QList<ControlPoint*> containing all constrained points in the Control Network.
+   */
+  QList<ControlPoint*> ControlNetVitals::getConstrainedPoints() {
+    QList<ControlPoint*> constrainedPoints;
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      if (!point->IsIgnored() && point->GetType() == ControlPoint::Constrained) constrainedPoints.append(point);
+    }
+    return constrainedPoints;
+  }
+
+
+  /**
+   *  This method is designed to return all free points in the Control Network.
+   *
+   *  @return A QList<ControlPoint*> containing all free points in the Control Network.
+   */
+  QList<ControlPoint*> ControlNetVitals::getFreePoints() {
+    QList<ControlPoint*> freePoints;
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      if (!point->IsIgnored() && point->GetType() == ControlPoint::Free) freePoints.append(point);
+    }
+    return freePoints;
+  }
+
+
+  /**
+   *  This method is designed to return all points that fall below a measure threshold.
+   *
+   *  For instance, a measure threshold of 3 would return all points with less than 3 measures.
+   *
+   *  @param num The number of measures a point needs to have to meet the threshold.
+   *  @return All of points with number of measures less than the threshold.
+   */
+  QList<ControlPoint*> ControlNetVitals::getPointsBelowMeasureThreshold(int num) {
+    QList<ControlPoint*> belowThreshold;
+    foreach(ControlPoint* point, m_controlNet->GetPoints()) {
+      if (!point->IsIgnored() && point->GetNumMeasures() < num) belowThreshold.append(point);
+    }
+    return belowThreshold;
+  }
+
+
+  /**
+   *  This method is designed to return a QList containing cube serials for all images
+   *  that fall below a measure threshold.
+   *
+   *  For instance, a measure threshold of 3 would return all images with less than 3 measures.
+   *
+   *  @param num The number of measures an image needs to have to meet the threshold.
+   *  @return A QList<QString> containing all images with number of measures less than the threshold.
+   */
+  QList<QString> ControlNetVitals::getImagesBelowMeasureThreshold(int num) {
+    QList<QString> imagesBelowThreshold;
+    foreach(QString serial, m_controlNet->GetCubeSerials()) {
+      if (m_controlNet->GetValidMeasuresInCube(serial).size() < num) {
+        imagesBelowThreshold.append(serial);
+      }
+    }
+    return imagesBelowThreshold;
+  }
+
+
+  /**
+   *  This method is designed to return a QList containing cube serials for all images
+   *  that fall below a convex hull tolerance threshold.
+   *
+   *  For instance, a tolerance of .75 would return all images with a hull tolerance less than 75%.
+   *
+   *  @param num The hull tolerance (decimal percent) an image needs to meet the threshold.
+   *  @return A QList<QString> containing all images with a hull tolerance below the threshold.
+   */
+  QList<QString> ControlNetVitals::getImagesBelowHullTolerance(int num) {
+    QList<QString> list;
+    return list;
+  }
+
+
+  /**
+   *  This method is designed to return the current status of the network.
+   *
+   *  The possible values are "Healthy!", "Weak!", "Broken!"
+   *
+   *  @return A QString indicating the status of the Control Network.
+   */
+  QString ControlNetVitals::getStatus() {
+    return m_status;
+  }
+
+
+  /**
+   *  This method is designed to return details for the status of the network.
+   *
+   *  This QString could contain several details if the status is weak, if more than one
+   *  factor contribute to the weakness of the network. Details are separated by newline '\n'
+   *  in the QString.
+   *
+   *  @return A QString containing details for the status of the Control Network.
+   */
+  QString ControlNetVitals::getStatusDetails() {
+    return m_statusDetails;
+  }
+
+
+  /**
+   *  This method is designed to return networkId of the observed Control Network.
+   *
+   *  It is a wrapper for the ControlNet::GetNetworkId() call of the observed Control Network.
+   *
+   *  @return A QString containing the NetworkId of the Control Network.
+   */
+  QString ControlNetVitals::getNetworkId() {
+    return m_controlNet->GetNetworkId();
+  }
+
+
+  /**
+   *  This method is designed to evaluate the current vitals of the network to determine
+   *  if any weaknesses are present and update the status of the network.
+   *
+   *  The network status is split into 3 states: Healthy, Weak, and Broken.
+   *
+   *  Healthy - A network is healthy if there are no weaknesses found and it is not broken.
+   *  Weak    - A network is weak if it has points that fall below the measure threshold,
+   *            A network is weak if it has images that fall below the measure threshold,
+   *            A network is weak if it has images that fall below a Convex Hull tolerance.
+   *  Broken  - A network is broken if it has more than 1 island.
+   */
+  void ControlNetVitals::validate() {
+
+    QString status = "";
+    QString details = "";
+    if (hasIslands()) {
+      status = "Broken!";
+      details = "This network has " + toString(numIslands()) + " islands.";
+    }
+    else {
+
+      if (numPointsBelowMeasureThreshold() > 0) {
+        status = "Weak!";
+        details += "This network has " + toString(numPointsBelowMeasureThreshold()) + " point(s) with less than 3 measures\n";
+      }
+
+      if (numImagesBelowMeasureThreshold() > 0) {
+        status = "Weak!";
+        details += "This network has " + toString(numImagesBelowMeasureThreshold()) + " image(s) with less than 3 measures\n";
+      }
+
+      if (numImagesBelowHullTolerance() > 0) {
+        status = "Weak!";
+        details += "This network has " + toString(numImagesBelowHullTolerance()) + " image(s) below the Convex Hull Tolerance of 75%\n";
+      }
+
+      if (status.isEmpty()) {
+        status = "Healthy!";
+        details = "This network is healthy.";
+      }
+    }
+    m_status = status;
+    m_statusDetails = details;
+    emit networkChanged();
+  }
+
+}
diff --git a/isis/src/control/objs/ControlNetVitals/ControlNetVitals.h b/isis/src/control/objs/ControlNetVitals/ControlNetVitals.h
new file mode 100644
index 0000000000000000000000000000000000000000..b0528c100e887df9bbf218d8c02ce85448760dc5
--- /dev/null
+++ b/isis/src/control/objs/ControlNetVitals/ControlNetVitals.h
@@ -0,0 +1,167 @@
+#ifndef ControlNetVitals_h
+#define ControlNetVitals_h
+/**
+ * @file
+ * $Revision: 1.2 $
+ * $Date: 2010/06/28 17:15:01 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc/documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include <QStringList>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
+
+namespace Isis {
+  class ControlNet;
+
+
+  /**
+  *
+  *  @brief ControlNetVitals
+  *
+  *  This class is designed to represent the health of a control network.
+  *  It utilizes signals and slots to listen for changes in an observed Control Network and
+  *  re-evaluates the health of a network whenever a change is made.
+  *  It tracks several statistics, and is intended to be the back-end for the ControlHealthMonitorWidget
+  *  that is located in IPCE.
+  *
+  *  The ControlNetVitals class keeps track of several member variables that are a running counter
+  *  for network statistics in regard to the health of the observed network. It creates these
+  *  variables upon intialization and references these internal variables when returning certain
+  *  statistics about a Control Network that can't be accessed by wrapper methods for the network itself.
+  *  It then listens for specific signals to be emitted whenever a change is made to the network
+  *  to update it's internal counters with respect to that change.
+  *
+  *  @author 2018-05-28 Adam Goins
+  *
+  *  @internal
+  *    @history 2018-05-28 Adam Goins - Initial Creation.
+  *    @history 2018-06-14 Adam Goins & Jesse Maple - Refactored method calls and Signal/Slot usage.
+  *    @history 2018-06-15 Adam Goins - Added documentation.
+  *    @history 2018-06-25 Kristin Berry - Fixed problem with getImagesBelowMeasureThreshold().size()
+  *                            not matching numImagesBelowMeasureThreshold(). Fixed a similar
+  *                            problem with numPointsBelowMeasureThreshold().
+  *    @history 2018-07-03 Jesse Mapel - Fixed deleting control points not properly updating the
+  *                            point counters.
+  */
+  class ControlNetVitals : public QObject {
+    Q_OBJECT
+
+    public:
+      ControlNetVitals(ControlNet *net);
+      virtual ~ControlNetVitals();
+
+      void initializeVitals();
+
+      bool hasIslands();
+      int numIslands();
+      const QList< QList<QString> > &getIslands();
+
+      ControlPoint *getPoint(QString id);
+
+      int numPoints();
+      int numIgnoredPoints();
+      int numLockedPoints();
+      int numFixedPoints();
+      int numConstrainedPoints();
+      int numFreePoints();
+      int numPointsBelowMeasureThreshold(int num=3);
+
+      int numImages();
+      int numMeasures();
+      int numImagesBelowMeasureThreshold(int num=3);
+      int numImagesBelowHullTolerance(int tolerance=75);
+
+      QList<QString> getCubeSerials();
+      QList<ControlPoint*> getAllPoints();
+      QList<ControlPoint*> getIgnoredPoints();
+      QList<ControlPoint*> getLockedPoints();
+      QList<ControlPoint*> getFixedPoints();
+      QList<ControlPoint*> getConstrainedPoints();
+      QList<ControlPoint*> getFreePoints();
+      QList<ControlPoint*> getPointsBelowMeasureThreshold(int num=3);
+
+      QList<QString> getImagesBelowMeasureThreshold(int num=3);
+      QList<QString> getImagesBelowHullTolerance(int num=75);
+
+      QString getNetworkId();
+      QString getStatus();
+      QString getStatusDetails();
+
+      void emitHistoryEntry(QString entry, QString id, QVariant oldValue, QVariant newValue);
+
+    signals:
+      void networkChanged();
+      void historyEntry(QString, QString, QVariant, QVariant, QString);
+
+    public slots:
+      void validate();
+      void validateNetwork(ControlNet::ModType);
+      void addPoint(ControlPoint *);
+      void pointModified(ControlPoint *, ControlPoint::ModType, QVariant, QVariant);
+      void deletePoint(ControlPoint *);
+      void addMeasure(ControlMeasure *);
+      void measureModified(ControlMeasure *, ControlMeasure::ModType, QVariant, QVariant);
+      void deleteMeasure(ControlMeasure *);
+
+
+    private:
+      void addMeasureToCounts(ControlMeasure *measure);
+      void removeMeasureFromCounts(ControlMeasure *measure);
+
+      //! The Control Network that the vitals class is observing.
+      ControlNet *m_controlNet;
+
+      //! The string representing the status of the net. Healthy, Weak, or Broken.
+      QString m_status;
+      //! The string providing details into the status of the network.
+      QString m_statusDetails;
+
+      //! A QList containing every island in the net. Each island consists of a QList containing
+      //! All cube serials for that island.
+      QList< QList< QString > > m_islandList;
+
+      //! The measureCount maps track how many points/images have how many measures.
+      //! For instance, if I wanted to know how many points have 3 measures I would query
+      //! the m_pointMeasureCounts with a key of 3 and it would return how many points
+      //! have 3 measures.
+      QMap<int, int> m_pointMeasureCounts;
+      //! The same is true for imageMeasureCounts, except for images.
+      QMap<int, int> m_imageMeasureCounts;
+
+      //! The pointTypeCounts operates in the same fashion as the above two, except
+      //! that the key would be the ControlPoint::PointType you're searching for.
+      //! For instance, if I wanted to know how many points were fixed I would query
+      //! This map at key ControlPoint::Fixed and it would return how many fixed points there are.
+      QMap<ControlPoint::PointType, int> m_pointTypeCounts;
+
+      //! The number of points in the network.
+      int m_numPoints;
+      //! The number of ignored points in the network.
+      int m_numPointsIgnored;
+      //! The number of edit locked points in the network.
+      int m_numPointsLocked;
+      //! The number of measures in the network.
+      int m_numMeasures;
+  };
+};
+
+#endif
diff --git a/isis/src/control/objs/ControlNetVitals/ControlNetVitals.truth b/isis/src/control/objs/ControlNetVitals/ControlNetVitals.truth
new file mode 100644
index 0000000000000000000000000000000000000000..622e95ba5ae334564e92bdacdd5e1a2eff00579e
--- /dev/null
+++ b/isis/src/control/objs/ControlNetVitals/ControlNetVitals.truth
@@ -0,0 +1,86 @@
+Testing Control Net Vitals 
+
+Loading Network
+Calculating Network Vitals
+Network ID: "LROC_NAC_LRPAIR_AUTO"
+Network Status: "Weak!"
+Status Details: "This network has 4 image(s) with less than 3 measures\n"
+Network has additional islands? no
+Number of islands in network: 1
+Serials in island  0
+   "LRO/1/274847978:28626/NACL"
+   "LRO/1/274847978:28626/NACR"
+   "LRO/1/274868345:16174/NACR"
+   "LRO/1/274888710:05688/NACR"
+   "LRO/1/274909074:43699/NACR"
+   "LRO/1/277164494:04377/NACR"
+   "LRO/1/277184863:36490/NACR"
+   "LRO/1/277205233:08310/NACR"
+   "LRO/1/277225597:08310/NACL"
+   "LRO/1/277245961:32558/NACL"
+   "LRO/1/277266323:25349/NACL"
+   "LRO/1/285452254:35179/NACL"
+   "LRO/1/290182186:06999/NACL"
+   "LRO/1/290182186:06999/NACR"
+   "LRO/1/292537538:63360/NACR"
+   "LRO/1/300686942:48419/NACL"
+   "LRO/1/300700514:53662/NACL"
+   "LRO/1/300700514:53662/NACR"
+   "LRO/1/300714095:63575/NACL"
+   "LRO/1/300714095:63575/NACR"
+   "LRO/1/300727653:10001/NACL"
+   "LRO/1/300727653:10001/NACR"
+   "LRO/1/300741228:63823/NACR"
+   "LRO/1/305389100:01888/NACL"
+   "LRO/1/305409449:44487/NACL"
+   "LRO/1/305409449:44487/NACR"
+   "LRO/1/305423011:64885/NACL"
+   "LRO/1/305423011:64885/NACR"
+   "LRO/1/305443365:16554/NACL"
+   "LRO/1/305443365:16554/NACR"
+   "LRO/1/305450184:05413/NACL"
+   "LRO/1/305450184:05413/NACR"
+   "LRO/1/305456931:43507/NACR"
+   "LRO/1/305463753:22535/NACL"
+   "LRO/1/305463753:22535/NACR"
+Number of images in network: 35
+Number of points in network: 75
+Number of measures in network: 651
+Number of ignored points in network: 0
+Number of editlocked points in network: 0
+Number of fixed points in network: 0
+Number of constrained points in network: 0
+Number of free points in network: 75
+Number of points without measures: 0
+Number of points with less than 3 measures: 0
+Number of images without measures: 0
+Number of images with less than 2 measures: 1
+Number of images with less 75 percent hull coverage: 0
+Testing getters...
+
+Testing signal/slots...
+Setting type to Free...
+Free points incremented correctly
+Setting type to Constrained...
+Constrained points incremented correctly
+Setting type to Fixed...
+Fixed points incremented correctly
+Locking the point...
+Locking the point works appropriately.
+Ignoring Point...
+Number of Ignored Points increments correctly.
+Ignored point no longer contributes to it's point type statistic correctly.
+Unignoring Point...
+Adding a measure...
+Measure added correctly.
+Setting ignored...
+Measure ignored correctly.
+Deleting Measure...
+Measure deleted correctly.
+Deleting point...
+Point deleted correctly.
+Adding dummy point...
+Deleting dummy point...
+Point deleted correctly
+Swapping Control Net...
+Net swapped correctly.
diff --git a/isis/src/control/objs/ControlGraph/Makefile b/isis/src/control/objs/ControlNetVitals/Makefile
similarity index 100%
rename from isis/src/control/objs/ControlGraph/Makefile
rename to isis/src/control/objs/ControlNetVitals/Makefile
diff --git a/isis/src/control/objs/ControlNetVitals/unitTest.cpp b/isis/src/control/objs/ControlNetVitals/unitTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..18f5967e8f5c6b63ac88caf24b0505bf143b02f8
--- /dev/null
+++ b/isis/src/control/objs/ControlNetVitals/unitTest.cpp
@@ -0,0 +1,196 @@
+#include <string>
+#include <iostream>
+
+#include <QDebug>
+#include <QString>
+#include <QStringList>
+
+#include "ControlNetVitals.h"
+#include "FileName.h"
+#include "IException.h"
+#include "Preference.h"
+
+using namespace Isis;
+using namespace std;
+
+/**
+ * Unit test for ControlNetVitals class 
+ *  
+ * @author 2018-06-18 Adam Goins
+ * @internal
+ *   @history 2018-06-22 Kristin Berry - Upated after fix to numImagesBelowMeasureThreshold()
+ */
+int main() {
+  try {
+    Preference::Preferences(true);
+
+    qDebug() << "Testing Control Net Vitals" << endl;
+
+    qDebug() << "Loading Network";
+
+    QString testNetFile("$control/testData/unitTest_ControlNetVersioner_ProtoNetwork2_ProtoV0002.net");
+    ControlNet *testNet = new ControlNet(testNetFile);
+
+    qDebug() << "Calculating Network Vitals";
+
+    ControlNetVitals netVitals(testNet);
+
+    qDebug() << "Network ID:" << netVitals.getNetworkId();
+    qDebug() << "Network Status:" << netVitals.getStatus();
+    qDebug() << "Status Details:" << netVitals.getStatusDetails();
+
+    qDebug() << "Network has additional islands?" << (netVitals.hasIslands() ? "yes" : "no");
+    qDebug() << "Number of islands in network:" << netVitals.numIslands();
+    QList< QList<QString> > islandLists = netVitals.getIslands();
+    for (int islandIndex = 0; islandIndex < islandLists.size(); islandIndex++) {
+      QStringList islandSerials(islandLists[islandIndex]);
+      islandSerials.sort();
+      qDebug() << "Serials in island " << islandIndex;
+      foreach(QString serial, islandSerials) {
+        qDebug() << "  " << serial;
+      }
+    }
+
+    int numImages       = netVitals.numImages();
+    int numPoints       = netVitals.numPoints();
+    int numMeasures     = netVitals.numMeasures();
+    int numIgnored      = netVitals.numIgnoredPoints();
+    int numFixed        = netVitals.numFixedPoints();
+    int numFree         = netVitals.numFreePoints();
+    int numLockedPoints = netVitals.numLockedPoints();
+    int numConstrained  = netVitals.numConstrainedPoints();
+    int pointsWithoutMeasures = netVitals.numPointsBelowMeasureThreshold(1);
+    int pointsBelowMeasures   = netVitals.numPointsBelowMeasureThreshold(3);
+    int imagesWithoutMeasures = netVitals.numImagesBelowMeasureThreshold(1);
+    int imagesBelowMeasures   = netVitals.numImagesBelowMeasureThreshold(2);
+    int numImagesBelowHull    = netVitals.numImagesBelowHullTolerance();
+
+
+    qDebug() << "Number of images in network:" << numImages;
+    qDebug() << "Number of points in network:" << numPoints;
+    qDebug() << "Number of measures in network:" << numMeasures;
+    qDebug() << "Number of ignored points in network:" << numIgnored;
+    qDebug() << "Number of editlocked points in network:" << numLockedPoints;
+    qDebug() << "Number of fixed points in network:" << numFixed;
+    qDebug() << "Number of constrained points in network:" << numConstrained;
+    qDebug() << "Number of free points in network:" << numFree;
+    qDebug() << "Number of points without measures:" << pointsWithoutMeasures;
+    qDebug() << "Number of points with less than 3 measures:" << pointsBelowMeasures;
+    qDebug() << "Number of images without measures:" << imagesWithoutMeasures;
+    qDebug() << "Number of images with less than 2 measures:" << imagesBelowMeasures;
+    qDebug() << "Number of images with less 75 percent hull coverage:" << numImagesBelowHull;
+
+    qDebug() << "Testing getters...";
+    assert(numImages == netVitals.getCubeSerials().size());
+    assert(numPoints == netVitals.getAllPoints().size());
+    assert(numIgnored == netVitals.getIgnoredPoints().size());
+    assert(numLockedPoints == netVitals.getLockedPoints().size());
+    assert(numFixed == netVitals.getFixedPoints().size());
+    assert(numConstrained == netVitals.getConstrainedPoints().size());
+    assert(numFree == netVitals.getFreePoints().size());
+    assert(pointsWithoutMeasures == netVitals.getPointsBelowMeasureThreshold(1).size());
+    assert(pointsBelowMeasures == netVitals.getPointsBelowMeasureThreshold(3).size());
+    assert(imagesWithoutMeasures == netVitals.getImagesBelowMeasureThreshold(1).size());
+    assert(imagesBelowMeasures == netVitals.getImagesBelowMeasureThreshold(2).size());
+    assert(numImagesBelowHull == netVitals.getImagesBelowHullTolerance().size());
+
+    qDebug() << "\nTesting signal/slots...";
+    ControlPoint *testPoint = new ControlPoint;
+    testPoint->SetEditLock(true);
+    testNet->AddPoint(testPoint);
+    numPoints++;
+    assert( netVitals.numPoints() == testNet->GetNumPoints() );
+    testPoint->SetEditLock(false);
+
+    qDebug() << "Setting type to Free...";
+    testPoint->SetType(ControlPoint::Free);
+    assert(netVitals.numFreePoints() == numFree + 1);
+    qDebug() << "Free points incremented correctly";
+
+    qDebug() << "Setting type to Constrained...";
+    testPoint->SetType(ControlPoint::Constrained);
+    assert(netVitals.numConstrainedPoints() == numConstrained + 1);
+    qDebug() << "Constrained points incremented correctly";
+
+    qDebug() << "Setting type to Fixed...";
+    testPoint->SetType(ControlPoint::Fixed);
+    assert(netVitals.numFixedPoints() == numFixed + 1);
+    qDebug() << "Fixed points incremented correctly";
+
+    qDebug() << "Locking the point...";
+    testPoint->SetEditLock(true);
+    assert(netVitals.numLockedPoints() == numLockedPoints + 1);
+    testPoint->SetEditLock(true);
+    assert(netVitals.numLockedPoints() == numLockedPoints + 1);
+    testPoint->SetEditLock(false);
+    assert(netVitals.numLockedPoints() == numLockedPoints);
+    testPoint->SetEditLock(false);
+    assert(netVitals.numLockedPoints() == numLockedPoints);
+    qDebug() << "Locking the point works appropriately.";
+
+    qDebug() << "Ignoring Point...";
+    testPoint->SetIgnored(true);
+
+    assert(netVitals.numIgnoredPoints() == numIgnored + 1);
+    qDebug() << "Number of Ignored Points increments correctly.";
+
+    assert(netVitals.numFixedPoints() == numFixed);
+    qDebug() << "Ignored point no longer contributes to it's point type statistic correctly.";
+
+    qDebug() << "Unignoring Point...";
+    testPoint->SetIgnored(false);
+
+    qDebug() << "Adding a measure...";
+    ControlMeasure *newMeasure = new ControlMeasure();
+    newMeasure->SetCubeSerialNumber("Hey.test");
+    testPoint->Add(newMeasure);
+    assert(netVitals.numMeasures() == numMeasures + 1);
+    qDebug() << "Measure added correctly.";
+    qDebug() << "Setting ignored...";
+
+    newMeasure->SetIgnored(true);
+    newMeasure->SetIgnored(true);
+    assert(testNet->GetNumValidMeasures() == numMeasures);
+    qDebug() << "Measure ignored correctly.";
+    newMeasure->SetIgnored(false);
+    newMeasure->SetIgnored(false);
+
+
+    qDebug() << "Deleting Measure...";
+    testPoint->Delete(newMeasure);
+    assert(netVitals.numMeasures() == numMeasures);
+    qDebug() << "Measure deleted correctly.";
+
+    qDebug() << "Deleting point...";
+    testPoint->SetEditLock(false);
+    testNet->DeletePoint(testPoint);
+    assert(netVitals.numPoints() == --numPoints);
+    qDebug() << "Point deleted correctly.";
+
+    qDebug() << "Adding dummy point...";
+    ControlPoint *newPoint = new ControlPoint;
+    testNet->AddPoint(newPoint);
+    assert(netVitals.numPoints() == ++numPoints);
+
+    qDebug() << "Deleting dummy point...";
+    newPoint->SetIgnored(true);
+    testNet->DeletePoint(newPoint);
+    assert(netVitals.numPoints() == --numPoints);
+    qDebug() << "Point deleted correctly";
+
+    qDebug() << "Swapping Control Net...";
+    ControlNet net;
+    testNet->swap(net);
+
+    assert(netVitals.numPoints() == 0);
+    qDebug() << "Net swapped correctly.";
+
+    delete testNet;
+    testNet = NULL;
+
+  }
+  catch(IException &e) {
+    qDebug() << "ControlNetVitals unit test failed!" << endl;
+    e.print();
+  }
+}
diff --git a/isis/src/control/objs/ControlPoint/ControlPoint.cpp b/isis/src/control/objs/ControlPoint/ControlPoint.cpp
index 04df89eae32ecb2cad8503fd845a05d73809ae92..80fa615662ba34894c2deba7bb6725a026ac6cfd 100644
--- a/isis/src/control/objs/ControlPoint/ControlPoint.cpp
+++ b/isis/src/control/objs/ControlPoint/ControlPoint.cpp
@@ -108,7 +108,6 @@ namespace Isis {
   }
 
 
-
   /**
    * Construct a control point with given Id
    *
@@ -192,7 +191,7 @@ namespace Isis {
   *                         It was also decided that when importing old
   *                         networks that contain Sigmas, the sigmas will not
   *                         be imported , due to conflicts with the units of
-  *                         the sigmas,we cannot get accurate x,y,z sigams from
+  *                         the sigmas,we cannot get accurate x,y,z sigmas from
   *                         the lat,lon,radius sigmas without the covariance
   *                         matrix.
   * @history 2010-09-28 Tracie Sucharski, Added back the conversion methods
@@ -285,6 +284,15 @@ namespace Isis {
     ValidateMeasure(serialNumber);
     ControlMeasure *cm = (*measures)[serialNumber];
 
+    // notify parent network of the change
+    if (parentNetwork) {
+      parentNetwork->measureDeleted(cm);
+
+      if (!IsIgnored() && !cm->IsIgnored()) {
+        parentNetwork->emitNetworkStructureModified();
+      }
+    }
+
     if (cm->IsEditLocked()) {
       return ControlMeasure::MeasureLocked;
     }
@@ -304,15 +312,6 @@ namespace Isis {
       referenceMeasure = NULL;
     }
 
-    // notify parent network of the change
-    if (parentNetwork) {
-      parentNetwork->measureDeleted(cm);
-
-      if (!IsIgnored() && !cm->IsIgnored()) {
-        parentNetwork->emitNetworkStructureModified();
-      }
-    }
-
     delete cm;
     cm = NULL;
 
@@ -322,6 +321,22 @@ namespace Isis {
   }
 
 
+  /**
+   * This method is a wrapper to emit the measureModified() signal in the parent network
+   * is called whenever a change is made to a Control Measure.
+   *
+   * @param measure The ControlMeasure* that was modified.
+   * @param type The ControlMeasure::ModType indicating which modification occured.
+   * @param oldValue The oldValue before the change.
+   * @param newValue The new value that the change incorporated.
+   */
+  void ControlPoint::emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType modType, QVariant oldValue, QVariant newValue) {
+    if (parentNetwork) {
+      parentNetwork->emitMeasureModified(measure, modType, oldValue, newValue);
+    }
+  }
+
+
   /**
    * Remove a measurement from the control point, deleting reference measure
    * is allowed.
@@ -497,6 +512,9 @@ namespace Isis {
    *   point to be modified.
    */
   ControlPoint::Status ControlPoint::SetEditLock(bool lock) {
+    if (parentNetwork) {
+      parentNetwork->emitPointModified(this, ControlPoint::EditLockModified, editLock, lock);
+    }
     editLock = lock;
     return Success;
   }
@@ -636,17 +654,13 @@ namespace Isis {
     if (oldStatus != ignore) {
       PointModified();
       if (parentNetwork) {
-        foreach(ControlMeasure * cm, measures->values()) {
-          if (!cm->IsIgnored()) {
-            if (ignore) {
-              parentNetwork->measureIgnored(cm);
-            }
-            else {
-              parentNetwork->measureUnIgnored(cm);
-            }
-          }
+        if (ignore) {
+          parentNetwork->pointIgnored(this);
         }
-        parentNetwork->emitNetworkStructureModified();
+        else {
+          parentNetwork->pointUnIgnored(this);
+        }
+        parentNetwork->emitPointModified(this, ControlPoint::IgnoredModified, oldStatus, ignore);
       }
     }
 
@@ -669,6 +683,7 @@ namespace Isis {
    */
   ControlPoint::Status ControlPoint::SetAdjustedSurfacePoint(
     SurfacePoint newSurfacePoint) {
+
     PointModified();
     adjustedSurfacePoint = newSurfacePoint;
     return Success;
@@ -693,6 +708,10 @@ namespace Isis {
     if (editLock) {
       return PointLocked;
     }
+    if (parentNetwork) {
+      parentNetwork->emitPointModified(this, ControlPoint::TypeModified, type, newType);
+    }
+
     PointModified();
     type = newType;
     return Success;
@@ -751,22 +770,33 @@ namespace Isis {
    */
   ControlPoint::Status ControlPoint::SetAprioriSurfacePoint(
     SurfacePoint aprioriSP) {
+    SurfacePoint::CoordinateType coordType = SurfacePoint::Latitudinal;
     if (parentNetwork) {
-      std::vector<Distance> targetRadii = parentNetwork->GetTargetRadii();
-      aprioriSurfacePoint.SetRadii(targetRadii[0], targetRadii[1], targetRadii[2]);
+      coordType = parentNetwork->GetCoordType();
     }
     if (editLock) {
       return PointLocked;
     }
-    if (aprioriSP.GetLatSigma().isValid()) {
-      constraintStatus.set(LatitudeConstrained);
-    }
-    if (aprioriSP.GetLonSigma().isValid()) {
-      constraintStatus.set(LongitudeConstrained);
-    }
-    if (aprioriSP.GetLocalRadiusSigma().isValid()) {
-      constraintStatus.set(RadiusConstrained);
-    }
+      // ***TBD*** Does it make sense to try to do a generic check here? The
+      // data types are different (angles vs distance) so for now do a switch.
+    switch (coordType) {
+      case SurfacePoint::Latitudinal:
+        if (aprioriSP.GetLatSigma().isValid())
+          constraintStatus.set(Coord1Constrained);
+        if (aprioriSP.GetLonSigma().isValid())
+          constraintStatus.set(Coord2Constrained);
+        if (aprioriSP.GetLocalRadiusSigma().isValid())
+          constraintStatus.set(Coord3Constrained);
+        break;
+      case SurfacePoint::Rectangular:
+        if (aprioriSP.GetXSigma().isValid())
+          constraintStatus.set(Coord1Constrained);
+        if (aprioriSP.GetYSigma().isValid())
+          constraintStatus.set(Coord2Constrained);
+        if (aprioriSP.GetZSigma().isValid())
+          constraintStatus.set(Coord3Constrained);
+      }
+
     PointModified();
     aprioriSurfacePoint = aprioriSP;
     return Success;
@@ -839,6 +869,9 @@ namespace Isis {
    *                               points, which are already left unchanged by
    *                               ComputeApriori. If a free point is editLocked
    *                               the editLock will be ignored by this method.
+   *  @history 2017-04-25 Debbie A. Cook - change constraint status calls
+   *                               to use generic coordinate names (Coord1, Coord2,
+   *                               and Coord3).
    *
    * @return Status Success or PointLocked
    */
@@ -848,7 +881,7 @@ namespace Isis {
     // Don't goof with fixed points.  The lat/lon is what it is ... if
     // it exists!
     // 2013-11-12 KLE I think this check should include points with any
-    // number of constrained coordinates???
+    // number of constrained coordinates???  I agree DAC.  *** TODO ***
     if (GetType() == Fixed) {
       if (!aprioriSurfacePoint.Valid()) {
         QString msg = "ControlPoint [" + GetId() + "] is a fixed point ";
@@ -927,9 +960,9 @@ namespace Isis {
     // constrained coordinates > 1" ???
     else if (GetType() == Fixed
         || NumberOfConstrainedCoordinates() == 3
-        || IsLatitudeConstrained()
-        || IsLongitudeConstrained()
-        || IsRadiusConstrained()) {
+        || IsCoord1Constrained()
+        || IsCoord2Constrained()
+        || IsCoord3Constrained()) {
 
       // Initialize the adjusted x/y/z to the a priori coordinates
       adjustedSurfacePoint = aprioriSurfacePoint;
@@ -937,6 +970,7 @@ namespace Isis {
       return Success;
     }
 
+    // Beyond this point, we assume the point is free ***TODO*** confirm this
     // Did we have any measures?
     if (goodMeasures == 0) {
       QString msg = "ControlPoint [" + GetId() + "] has no measures which "
@@ -944,7 +978,7 @@ namespace Isis {
       throw IException(IException::User, msg, _FILEINFO_);
     }
 
-    // Compute the averages
+    // Compute the averages if all coordinates are free
     //if (NumberOfConstrainedCoordinates() == 0) {
     if (GetType() == Free || NumberOfConstrainedCoordinates() == 0) {
       double avgX = xB / goodMeasures;
@@ -958,14 +992,6 @@ namespace Isis {
         Displacement((avgY*scale), Displacement::Kilometers),
         Displacement((avgZ*scale), Displacement::Kilometers));
     }
-    // Since we are not solving yet for x,y,and z in the bundle directly,
-    // longitude must be constrained.  This constrains x and y as well.
-    else {
-      aprioriSurfacePoint.SetRectangular(
-        aprioriSurfacePoint.GetX(),
-        aprioriSurfacePoint.GetY(),
-        Displacement((zB / goodMeasures), Displacement::Kilometers));
-    }
 
     adjustedSurfacePoint = aprioriSurfacePoint;
     SetAprioriSurfacePointSource(SurfacePointSource::AverageOfMeasures);
@@ -1024,7 +1050,7 @@ namespace Isis {
       double cuLine;
       CameraFocalPlaneMap *fpmap = m->Camera()->FocalPlaneMap();
 
-      // Map the lat/lon/radius of the control point through the Spice of the
+      // Map the coordinates of the control point through the Spice of the
       // measurement sample/line to get the computed sample/line.  This must be
       // done manually because the camera will compute a new time for line scanners,
       // instead of using the measured time.
@@ -1179,7 +1205,7 @@ namespace Isis {
       Camera *cam = m->Camera();
       double cudx, cudy;
 
-      // Map the lat/lon/radius of the control point through the Spice of the
+      // Map the coordinates of the control point through the Spice of the
       // measurement sample/line to get the computed undistorted focal plane
       // coordinates (mm if not radar).  This works for radar too because in
       // the undistorted focal plane, y has not been set to 0 (set to 0 when
@@ -1559,16 +1585,16 @@ namespace Isis {
     return constraintStatus.any();
   }
 
-  bool ControlPoint::IsLatitudeConstrained() {
-    return constraintStatus[LatitudeConstrained];
+  bool ControlPoint::IsCoord1Constrained() {
+    return constraintStatus[Coord1Constrained];
   }
 
-  bool ControlPoint::IsLongitudeConstrained() {
-    return constraintStatus[LongitudeConstrained];
+  bool ControlPoint::IsCoord2Constrained() {
+    return constraintStatus[Coord2Constrained];
   }
 
-  bool ControlPoint::IsRadiusConstrained() {
-    return constraintStatus[RadiusConstrained];
+  bool ControlPoint::IsCoord3Constrained() {
+    return constraintStatus[Coord3Constrained];
   }
 
   int ControlPoint::NumberOfConstrainedCoordinates() {
@@ -1917,6 +1943,7 @@ namespace Isis {
   const ControlPoint &ControlPoint::operator=(const ControlPoint &other) {
 
     if (this != &other) {
+      bool oldLock = editLock;
       editLock = false;
       for (int i = cubeSerials->size() - 1; i >= 0; i--) {
         (*measures)[cubeSerials->at(i)]->SetEditLock(false);
@@ -1936,23 +1963,27 @@ namespace Isis {
         }
       }
 
-      id             = other.id;
-      chooserName    = other.chooserName;
-      dateTime       = other.dateTime;
-      type           = other.type;
-      invalid        = other.invalid;
-      editLock       = other.editLock;
-      jigsawRejected = other.jigsawRejected;
-      referenceExplicitlySet = other.referenceExplicitlySet;
-      ignore         = other.ignore;
-      aprioriSurfacePointSource      = other.aprioriSurfacePointSource;
-      aprioriSurfacePointSourceFile  = other.aprioriSurfacePointSourceFile;
-      aprioriRadiusSource            = other.aprioriRadiusSource;
-      aprioriRadiusSourceFile        = other.aprioriRadiusSourceFile;
-      aprioriSurfacePoint            = other.aprioriSurfacePoint;
-      adjustedSurfacePoint = other.adjustedSurfacePoint;
+      invalid = other.invalid;
+      referenceExplicitlySet   = other.referenceExplicitlySet;
       numberOfRejectedMeasures = other.numberOfRejectedMeasures;
-      constraintStatus = other.constraintStatus;
+      constraintStatus         = other.constraintStatus;
+
+      SetId(other.id);
+      SetChooserName(other.chooserName);
+      SetDateTime(other.dateTime);
+      SetType(other.type);
+      SetRejected(other.jigsawRejected);
+      SetIgnored(other.ignore);
+      SetAprioriSurfacePointSource(other.aprioriSurfacePointSource);
+      SetAprioriSurfacePointSourceFile(other.aprioriSurfacePointSourceFile);
+      SetAprioriRadiusSource(other.aprioriRadiusSource);
+      SetAprioriRadiusSourceFile(other.aprioriRadiusSourceFile);
+      SetAprioriSurfacePoint(other.aprioriSurfacePoint);
+      SetAdjustedSurfacePoint(other.adjustedSurfacePoint);
+
+      // Set edit lock last so the it doesn't interfere with copying the other fields over.
+      editLock = oldLock;
+      SetEditLock(other.editLock);
     }
 
     return *this;
@@ -2089,6 +2120,7 @@ namespace Isis {
   /**
    * Set jigsaw rejected flag for all measures to false
    * and set the jigsaw rejected flag for the point itself to false
+   *
    */
   void ControlPoint::ClearJigsawRejected() {
     int nmeasures = measures->size();
diff --git a/isis/src/control/objs/ControlPoint/ControlPoint.h b/isis/src/control/objs/ControlPoint/ControlPoint.h
index f2c00adb101cb1a14eece562084ed2a76e87dc1a..89fe54ff292e00620f773a8eb66b9251c814adb6 100644
--- a/isis/src/control/objs/ControlPoint/ControlPoint.h
+++ b/isis/src/control/objs/ControlPoint/ControlPoint.h
@@ -29,6 +29,7 @@
 #include <QObject>
 #include <QString>
 
+#include "ControlMeasure.h"
 #include "SurfacePoint.h"
 
 template< typename A, typename B > class QHash;
@@ -36,7 +37,6 @@ template< typename A, typename B > class QHash;
 class QStringList;
 
 namespace Isis {
-  class ControlMeasure;
   class ControlNet;
   class ControlPointFileEntryV0002;
   class Latitude;
@@ -335,6 +335,9 @@ namespace Isis {
    *   @history 2015-11-05 Kris Becker - invalid flag was not properly
    *                           initialized in ControlPointFileEntryV0002
    *                           constructor (Merged by Kristin Berry. Fixes #2392)
+   *   @history 2017-05-25 Debbie A. Cook - coordType to SetPrioriSurfacePoint with a default of
+   *                            Latitudinal.  Changed LatitudeConstrained to Coord1Constrained, etc.
+   *                            References #4649 and #501.
    *   @history 2017-12-18 Kristin Berry - Added convenience methods:
    *                            HasAprioriSurfacePointSourceFile(), HasAprioriRadiusSourceFile(),
    *                            HasRefMeasure().
@@ -343,6 +346,19 @@ namespace Isis {
    *   @history 2018-01-05 Adam Goins - Added HasDateTime() and HasChooserName() methods to allow
    *                           to allow the value of these variables to be read without being
    *                           overriden if they're empty. (Getters override if they're empty).
+   *   @history 2018-06-06 Jesse Mapel - Modified setIgnored to use new pointIgnored and
+   *                           pointUnIgnored methods. References #5434.
+   *   @history 2018-06-15 Adam Goins & Jesse Mapel - Added the ModType enum, as well as a series
+   *                           of calls to parentNetwork()->emitPointModified() whenever a change
+   *                           is made to a Control Point or any of it's measures. This is done
+   *                           to allow for communication between the ControlNetVitals class
+   *                           and changes made to the Control Network that it is observing.
+   *                           Fixes #5435.
+   *  @history 2018-06-29 Adam Goins - Modified to operator= method to use setters when copying
+   *                           one Control Point to another so that the proper signals get called.
+   *                           Fixes #5435.
+   *   @history 2018-06-30 Debbie A. Cook Removed all calls to obsolete method
+   *                           SurfacePoint::SetRadii.  References #5457.
    */
   class ControlPoint : public QObject {
 
@@ -406,18 +422,25 @@ namespace Isis {
        * coordinates in the SurfacePoint
        */
       enum ConstraintStatus {
-        /**
-         * This is the status of constrained coordinates in the SurfacePoint.
-         * @todo We will eventually need to deal with rectangular
-         *             coordinates as well, but for now BundleAdjust uses spherical
-         *             coordinates only.
-         */
-        LatitudeConstrained = 0,
-        LongitudeConstrained = 1,
-        RadiusConstrained = 2,
-//      XConstrained = 3,
-//      YConstrained = 4,
-//      ZConstrained = 5;
+        Coord1Constrained = 0,
+        Coord2Constrained = 1,
+        Coord3Constrained = 2
+      };
+
+      /**
+       *  @brief Control Point Modification Types
+       *
+       *  This enum is designed to represent the different types of modifications that can be
+       *  made to a ControlPoint.
+       *
+       *  EditLockModified means that the Control Point had it's edit lock flag changed.
+       *  IgnoredModified means that the Control Measure had it's ignored flag changed.
+       *  TypeModified means that the ControlPoint::PointType for this control point was modified.
+       */
+      enum ModType {
+        EditLockModified,
+        IgnoredModified,
+        TypeModified
       };
 
       // This stuff input to jigsaw
@@ -504,14 +527,15 @@ namespace Isis {
       QString GetId() const;
       bool IsIgnored() const;
       bool IsValid() const;
+      // Can we get rid of this? It doesn't appear to be used anywhere.  *** ToDo ***
       bool IsInvalid() const;
       bool IsFixed() const;
       bool HasAprioriCoordinates();
 
       bool IsConstrained();
-      bool IsLatitudeConstrained();
-      bool IsLongitudeConstrained();
-      bool IsRadiusConstrained();
+      bool IsCoord1Constrained();
+      bool IsCoord2Constrained();
+      bool IsCoord3Constrained();
       int NumberOfConstrainedCoordinates();
 
       static QString PointTypeToString(PointType type);
@@ -546,6 +570,9 @@ namespace Isis {
       int IndexOfRefMeasure() const;
       bool IsReferenceExplicit() const;
       QString GetReferenceSN() const;
+      void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType modType, QVariant oldValue, QVariant newValue);
+
+
 
       Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const;
       Statistics GetStatistic(long dataType) const;
@@ -639,7 +666,7 @@ namespace Isis {
 
       /**
        * This stores the constraint status of the a priori SurfacePoint
-       *   @todo Eventually add x, y, and z
+       *   @todo Eventually add x, y, and z.  Instead we made generic coordinates
        */
       std::bitset<6> constraintStatus;
 
diff --git a/isis/src/control/objs/ControlPoint/ControlPoint.truth b/isis/src/control/objs/ControlPoint/ControlPoint.truth
index d1afe89eb26da325609b4552ba1a6099134bad72..8c984954b8c503147c4445f24b6af7dab639d6be 100644
--- a/isis/src/control/objs/ControlPoint/ControlPoint.truth
+++ b/isis/src/control/objs/ControlPoint/ControlPoint.truth
@@ -34,6 +34,8 @@ Object = ControlNetwork
 
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
+
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -47,6 +49,8 @@ Object = ControlNetwork
 
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
+
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
@@ -108,6 +112,8 @@ Object = ControlNetwork
 
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
+
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -121,6 +127,8 @@ Object = ControlNetwork
 
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
+
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
@@ -201,6 +209,8 @@ Object = ControlNetwork
 
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
+
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -214,6 +224,8 @@ Object = ControlNetwork
 
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
+
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
@@ -290,6 +302,8 @@ Object = ControlNetwork
 
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
+
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -303,6 +317,8 @@ Object = ControlNetwork
 
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
+
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
@@ -380,6 +396,8 @@ Object = ControlNetwork
 
     # AprioriRadius = 999.99999984142 <meters>
     AprioriZ                 = 529.919264 <meters>
+
+    # AprioriLatitudeSigma = 28.65696494252 <meters>  AprioriLongitudeSigma = 26.457513107566 <meters>  AprioriRadiusSigma = 38.454887341483 <meters>
     AprioriCovarianceMatrix  = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
     LatitudeConstrained      = True
     LongitudeConstrained     = True
@@ -393,6 +411,8 @@ Object = ControlNetwork
 
     # AdjustedRadius = 999.99999984142 <meters>
     AdjustedZ                = 529.919264 <meters>
+
+    # AdjustedLatitudeSigma = 28.65696494252 <meters>  AdjustedLongitudeSigma = 26.457513107566 <meters>  AdjustedRadiusSigma = 38.454887341483 <meters>
     AdjustedCovarianceMatrix = (100.0, 0.0, 0.0, 2500.0, 0.0, 400.0)
 
     Group = ControlMeasure
diff --git a/isis/src/control/objs/ControlPoint/unitTest.cpp b/isis/src/control/objs/ControlPoint/unitTest.cpp
index 9a108b0a10f6fd94323ad9a0e9b41d78e3ef1acc..6ad1b08a340231c5d0a07e431a2b6dd3644317ed 100644
--- a/isis/src/control/objs/ControlPoint/unitTest.cpp
+++ b/isis/src/control/objs/ControlPoint/unitTest.cpp
@@ -15,7 +15,7 @@ using namespace std;
 using namespace boost::numeric::ublas;
 using namespace Isis;
 
-void printPoint(ControlPoint &p);
+void printPoint(ControlPoint &p, bool = false);
 
 /**
   * @brief Test ControlPoint object for accuracy and correct behavior.
@@ -34,7 +34,7 @@ void printPoint(ControlPoint &p);
   * @history 2017-12-21 Kristin Berry - Added tests for newly added accessor methods.
   * @history 2018-01-04 Adam Goins - Replaced QDebug with std::cout. Removed commented out code for
   *                         Removed accessor methods.
-  */
+ */
 int main() {
   Preference::Preferences(true);
 
@@ -266,7 +266,7 @@ int main() {
   }
 }
 
-void printPoint(Isis::ControlPoint &p) {
+void printPoint(Isis::ControlPoint &p, bool testRect) {
   bool wasLocked = p.IsEditLocked();
   p.SetEditLock(false);
   p.SetChooserName("cnetref");
@@ -314,4 +314,19 @@ void printPoint(Isis::ControlPoint &p) {
   cout << "Printing point:\n" << tmp << "\nDone printing point." << std::endl;
   std::cout << std::endl;
   remove("./tmp.net");
+
+  // Add test with coordinate type set to Rectangular *** TBD *** Add test once
+  //  changes are made to the protocol buffer.
+  if (testRect) {
+    ControlNet recNet;
+    recNet.AddPoint(copyPoint);
+    recNet.SetNetworkId("Identifier");
+    recNet.SetCreatedDate("Yesterday");
+    recNet.SetModifiedDate("Yesterday");
+    recNet.Write("./tmpR.net", true);
+    Pvl tmpR("./tmpR.net");
+    cout << "Printing rectangular net point:\n" << tmp << "\nDone printing point."
+         << endl << endl;
+    remove("./tmpR.net");
+  }
 }
diff --git a/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.cpp b/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.cpp
index ef797f1c4f30299670192995b4b71d834cc9ad8f..0a49bdfce535b598ca38c03afc16f302fde224c5 100644
--- a/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.cpp
+++ b/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.cpp
@@ -6,10 +6,10 @@
 #include <math.h>
 #include <stdio.h>
 
-#include "IException.h"
-#include "IString.h"
+#include "IException.h"
+#include "IString.h"
 
-namespace Isis {
+namespace Isis {
   /** 
    * Sets up a maximumlikelihood estimation function with Huber model and default tweaking
    * constant
@@ -49,7 +49,7 @@ namespace Isis {
                                                            double tweakingConstant) {
     // choose Model and define the tweaking constant
     setModel(modelSelection, tweakingConstant);
-  }
+  }
 
   MaximumLikelihoodWFunctions::MaximumLikelihoodWFunctions(
       const MaximumLikelihoodWFunctions &other)
@@ -57,7 +57,7 @@ namespace Isis {
         m_tweakingConstant(other.m_tweakingConstant) {
   }
 
-
+
   MaximumLikelihoodWFunctions::~MaximumLikelihoodWFunctions() {
   } // empty destructor
 
@@ -131,8 +131,8 @@ namespace Isis {
   void MaximumLikelihoodWFunctions::setModel(Model modelSelection, double tweakingConstant) { 
     // choose Model and define the tweaking constant
     m_model = modelSelection;
-    setTweakingConstant(tweakingConstant);
-  }
+    setTweakingConstant(tweakingConstant);
+  }
 
 
 
@@ -147,32 +147,32 @@ namespace Isis {
    */
   void MaximumLikelihoodWFunctions::setTweakingConstant(double tweakingConstant) { 
     // leave model type unaltered and change tweaking constant
-    if (tweakingConstant <= 0.0) {
-      IString msg = "Maximum likelihood estimation tweaking constants must be > 0.0";
-      throw IException(IException::Programmer, msg, _FILEINFO_);
+    if (tweakingConstant <= 0.0) {
+      IString msg = "Maximum likelihood estimation tweaking constants must be > 0.0";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
     }
     m_tweakingConstant = tweakingConstant;
-  }
+  }
+
 
 
-
-  /** 
+  /** 
    *  Returns the current tweaking constant
-   */
-  double MaximumLikelihoodWFunctions::tweakingConstant() const {
-    return m_tweakingConstant;
-  }
-
-
-
-  /** 
+   */
+  double MaximumLikelihoodWFunctions::tweakingConstant() const {
+    return m_tweakingConstant;
+  }
+
+
+
+  /** 
    * This provides the scalar for the weight (not the scaler for the square
    * root of the weight, which is generally more useful)
-   *
-   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
+   *
+   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
    *                                   iteration divided by the standard deviation (sigma) of that
    *                                   measure
-   * @return double the scaler adjustment to the weight for the measure 
+   * @return double the scaler adjustment to the weight for the measure 
    *                nominal weight = 1 /sigma/sigma and weight' = scaler/sigma/sigma
    */
   double MaximumLikelihoodWFunctions::weightScaler(double residualZScore) {  
@@ -192,18 +192,18 @@ namespace Isis {
       return 1.0;  // default to prevent nonsense from being returned, 
                    // but the program should never reach this line
     }
-  }
+  }
 
 
-
-  /** 
+
+  /** 
    * This provides the scaler to the sqrt of the weight, which is very useful for building normal 
    * equations.
-   *
-   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
+   *
+   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
    *                                   iteration divided by the standard deviation (sigma) of that
    *                                   measure
-   * @return double the scaler adjustment to the sqrt of the weight for the measure 
+   * @return double the scaler adjustment to the sqrt of the weight for the measure 
    *         nominal sqrt(weight) = 1 /sigma and sqrt(weight') = scaler/sigma
    */
   double MaximumLikelihoodWFunctions::sqrtWeightScaler(double residualZScore) {
@@ -215,18 +215,18 @@ namespace Isis {
                    //    (thus this saves some time)
     }
     return sqrt(scaler);
-  }
+  }
 
 
-
-  /** 
+
+  /** 
    * Huber maximum likelihood estimation function evaluation.  For details, see documentation of the 
    * enum, MaximumLikelihoodWFunctions::Model 
-   *
-   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
+   *
+   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
    *                                   iteration divided by the standard deviation (sigma) of that
    *                                   measure
-   * @return double the scaler adjustment to the weight for the measure 
+   * @return double the scaler adjustment to the weight for the measure 
    *         nominal weight = 1 /sigma/sigma and weight' = scaler/sigma/sigma
    */
   double MaximumLikelihoodWFunctions::huber(double residualZScore) {
@@ -237,18 +237,18 @@ namespace Isis {
     else {
       return m_tweakingConstant/fabs(residualZScore);
     }
-  }
+  }
 
 
-
-  /** 
+
+  /** 
    * Modified Huber maximum likelihood estimation function evaluation.  For 
    * details see documentation of enum Model 
-   *
-   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
+   *
+   * @param[in] double residualZScore, this the residual of a particulare measure in a particular 
    *                                   iteration divided by the standard deviation (sigma) of that
    *                                   measure
-   * @return double the scaler adjustment to the weight for the measure 
+   * @return double the scaler adjustment to the weight for the measure 
    *         nominal weight = 1 /sigma/sigma and weight' = scaler/sigma/sigma
    */
   double MaximumLikelihoodWFunctions::huberModified(double residualZScore) {
@@ -277,10 +277,10 @@ namespace Isis {
     // welsch weight function
     double weightFactor = residualZScore / m_tweakingConstant;
     return exp(-(weightFactor)*(weightFactor));
-  }
-
+  }
+
+
 
-
   /** 
    * Modified Huber maximum likelihood estimation function evaluation. 
    * For details, see documentation of enum Model.
@@ -303,17 +303,17 @@ namespace Isis {
       return 0.0;
     }
   }
-
 
 
-  /** 
+
+  /** 
    * Suggest a quantile of the probility distribution of the residuals to use as the tweaking 
    * constants based on the maximum likelihood estimation model being used.
-   *
+   *
    * @return double quantile [0,1] the value pretaining to this quantile (in the probility 
    *         distribution of the residuals) should be used as the tweaking constant.
    */
-  double MaximumLikelihoodWFunctions::tweakingConstantQuantile() {  
+  double MaximumLikelihoodWFunctions::tweakingConstantQuantile() {  
     // returns which quantile of the sqaured residuals is recommended to use as the tweaking 
     // constants, this varies as a function of the model being employed desired quantiles for
     // various models,  these parameters are estimated based on inspection of the fucntions and
@@ -343,7 +343,7 @@ namespace Isis {
    *  
    * @param model Enumerated value for a MaximumLikelihoodWFunctions model.
    * @return QString label for the enumeration.  
-   */
+   */
   QString MaximumLikelihoodWFunctions::modelToString(MaximumLikelihoodWFunctions::Model model) {
     if (model == MaximumLikelihoodWFunctions::Huber)              return "Huber";
     else if (model == MaximumLikelihoodWFunctions::HuberModified) return "HuberModified";
@@ -360,10 +360,9 @@ namespace Isis {
     if (modelName.compare("HUBER", Qt::CaseInsensitive) == 0) {
       return Huber;
     }
-    else if (modelName.compare("HUBER_MODIFIED", Qt::CaseInsensitive) == 0) {
-      return HuberModified;
-    }
-    else if (modelName.compare("HUBERMODIFIED", Qt::CaseInsensitive) == 0) {
+    else if (modelName.compare("HUBER_MODIFIED", Qt::CaseInsensitive) == 0 ||
+             modelName.compare("HUBERMODIFIED", Qt::CaseInsensitive) == 0 ||
+             modelName.compare("HUBER MODIFIED", Qt::CaseInsensitive) == 0) {
       return HuberModified;
     }
     else if (modelName.compare("WELSCH", Qt::CaseInsensitive) == 0) {
@@ -451,5 +450,5 @@ namespace Isis {
     modelEnum = (MaximumLikelihoodWFunctions::Model)modelInteger;
     return stream;
   }
-
-}// end namespace Isis
+
+}// end namespace Isis
diff --git a/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.h b/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.h
index 6be0bc535955b5a5a08bbb0ad9703b94febc10cd..f31ee3a0eb2885dc8d473780ac2f453026519a76 100644
--- a/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.h
+++ b/isis/src/control/objs/MaximumLikelihoodWFunctions/MaximumLikelihoodWFunctions.h
@@ -58,6 +58,8 @@ namespace Isis {
    *                           methods.
    *   @history 2014-09-19 Jeannie Backer - Removed bugs. Added documentation. Cleaned
    *                           duplicate code.
+   *   @history 2018-06-29 Christopher Combs - Added extra HuberModified case to stringToModel(). 
+   *                           Fixes #5446.
    */
   class MaximumLikelihoodWFunctions {
   public:
diff --git a/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp b/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp
index c0e6181d81ff803b478886c4e176ee19015a3ee7..8048ce141692b4366fafaadfddda9ff3d22ec8e4 100644
--- a/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp
+++ b/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp
@@ -26,10 +26,11 @@
 
 using namespace std;
 
-
+#include <QDebug>
 #include <QString>
 #include <QStringList>
 #include <QCoreApplication>
+#include <QSqlDatabase>
 
 #include "DatabaseFactory.h"
 #include "DbAccess.h"
@@ -69,8 +70,10 @@ namespace Isis {
   DatabaseFactory::DatabaseFactory() : _defProfName(""),  _profiles(),
     _defDatabase(""), _dbList() {
 
-//  Checks the existance of the Qt application core.  This is required in order
-//  ensure database driver plugins are loaded - if they exist.
+    // insure the drivers are being loaded
+    loadDrivers();
+    //  Checks the existance of the Qt application core.  This is required in order
+    //  ensure database driver plugins are loaded - if they exist.
     QCoreApplication *cApp = QCoreApplication::instance();
     if(cApp == 0) {
       static char **argv = 0;
@@ -367,6 +370,8 @@ namespace Isis {
    */
   QSqlDatabase DatabaseFactory::create(const QString &driver,
                                        const QString &dbname) {
+
+
     // Check driver availability
     if(!isDriverAvailable(driver)) {
       QString mess = "Driver [" + driver + "] for database [" + dbname
@@ -555,8 +560,7 @@ namespace Isis {
       dbDrivers.add("SQLite", "QSQLITE");
     }
 
-    //  That's it
-    return (dbDrivers);
+    return dbDrivers;
   }
 
   /**
@@ -570,6 +574,8 @@ namespace Isis {
    */
   void DatabaseFactory::loadDrivers() {
     //  Currently relying on Qt plugins - but that could change
+    // Hack to insure drivers are being loaded correctly
+    QSqlDatabase::drivers();
     return;
   }
 
diff --git a/isis/src/database/objs/SqlRecord/unitTest.cpp b/isis/src/database/objs/SqlRecord/unitTest.cpp
index c2d76d80114d5ab380b85348f3f53f7a5eacc139..13fd088a5daca2f88e464846b476e3801de0b94c 100644
--- a/isis/src/database/objs/SqlRecord/unitTest.cpp
+++ b/isis/src/database/objs/SqlRecord/unitTest.cpp
@@ -1,6 +1,8 @@
 #include "Database.h"
 
 #include <QFile>
+#include <QSqlDatabase>
+#include <QDebug>
 
 #include "FileName.h"
 #include "SqlQuery.h"
@@ -12,7 +14,6 @@ using namespace Isis;
 
 int main(int argc, char *argv[]) {
   Isis::Preference::Preferences(true);
-
   // SQLite
   FileName dbfile("$TEMPORARY/test.db");
   Database testdb("testdb", "SQLite");
diff --git a/isis/src/dev/Makefile b/isis/src/dev/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6d2b3727025ae72c62fe568187d8340cba50a233
--- /dev/null
+++ b/isis/src/dev/Makefile
@@ -0,0 +1,2 @@
+include $(ISISROOT)/make/isismake.cat
+
diff --git a/isis/src/dev/README.md b/isis/src/dev/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ecb4d0837ec6dbeca9dabf1bac402807df15e2d
--- /dev/null
+++ b/isis/src/dev/README.md
@@ -0,0 +1,5 @@
+# Please Note:
+
+The applications in this directory are meant only to be used for camera 
+development. They are not guaranteed to be stable and are not supported for
+general public use. Use at your own risk!
diff --git a/isis/src/dev/apps/Makefile b/isis/src/dev/apps/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..381219893122eb5737084b3de80de2bd2d298df6
--- /dev/null
+++ b/isis/src/dev/apps/Makefile
@@ -0,0 +1 @@
+include $(ISISROOT)/make/isismake.appstree
diff --git a/isis/src/dev/apps/camcoeffs/Makefile b/isis/src/dev/apps/camcoeffs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/dev/apps/camcoeffs/assets/output.txt b/isis/src/dev/apps/camcoeffs/assets/output.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8904b421f6590928e017395ee0c46dfe4dbbbe63
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/assets/output.txt
@@ -0,0 +1,6 @@
+Results
+  INS-41219_TRANSX = (0.2589180702, -0.0069999992, 3.3598e-06)
+  INS-41219_TRANSY = (-59.9867757282, 3.3598e-06, -0.0069999992)
+  INS-41219_TRANSS = (32.875172540392, -142.85719209406, -0.068567378407362)
+  INS-41219_TRANSL = (-8569.5245899736, -0.068567378407362, -142.85719209406)
+End_Group
diff --git a/isis/src/dev/apps/camcoeffs/camcoeffs.cpp b/isis/src/dev/apps/camcoeffs/camcoeffs.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..989ab9d8e1b3939fa5b72d1b135482414522cc77
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/camcoeffs.cpp
@@ -0,0 +1,185 @@
+#include "Isis.h"
+
+#include <string>
+#include <cmath>
+
+#include "IException.h"
+
+using namespace std;
+using namespace Isis;
+
+void IsisMain() {
+  UserInterface &ui = Application::GetUserInterface();
+
+  double eq1[] = {
+    ui.GetDouble("XCONSTCOEF"),
+    ui.GetDouble("XSAMPLECOEF"),
+    ui.GetDouble("XLINECOEF"),
+  };
+  double eq2[] = {
+    ui.GetDouble("YCONSTCOEF"),
+    ui.GetDouble("YSAMPLECOEF"),
+    ui.GetDouble("YLINECOEF"),
+  };
+
+  double res1[3] = {0.0, 0.0, 0.0};
+  double res2[3] = {0.0, 0.0, 0.0};
+
+  bool solutionFound = false;
+
+  /**
+   * Do this loop in order to shorten the number of solutions we have
+   *  to program in. This halves the number of cases by saying "What if equation 1
+   *  is really equation 2, and equation 2 is really equation 1?" The solution
+   *  will also be flipped, which is handled if order becomes 1.
+   *
+   *  order = 0 means the equations are in their original form, order = 1 means
+   *  they were swapped.
+   */
+  for(int order = 0; !solutionFound && order < 2; order++) {
+    double A = eq1[0];
+    double B = eq1[1];
+    double C = eq1[2];
+    double D = eq2[0];
+    double E = eq2[1];
+    double F = eq2[2];
+
+    if(order == 1) {
+      A = eq2[0];
+      B = eq2[1];
+      C = eq2[2];
+      D = eq1[0];
+      E = eq1[1];
+      F = eq1[2];
+    }
+
+    solutionFound = true;
+
+    // These are used to test solution dependencies, they become zero if the
+    //   equations are parallel and thus unsolvable
+    double denomX = (F == 0) ? 0.0 : B - (E * C / F);
+    double denomY = (E == 0) ? 0.0 : C - (F * B / E);
+    if(B != 0 && E != 0 && F != 0 && denomX != 0 && denomY != 0) {
+      /**
+       * Input Equations:
+       * X = A + BS + CL
+       * Y = D + ES + FL
+       *
+       * Dependencies:
+       *   B != 0, E != 0, F != 0, (B-EC/F) != 0, (C-FB/E) != 0
+       *
+       * Inverses:
+       * S = ((DC/F-A)/(B-EC/F)) + (1/(B-EC/F))X + ((-C/F)/(B-EC/F))Y
+       * L = (DB/E-A)/(C-FB/E) + (1/(C-FB/E))X + ((-B/E)/(C-FB/E))Y
+       */
+      res1[0] = (D * C / F - A) / denomX;
+      res1[1] = 1.0 / denomX;
+      res1[2] = -(C / F) / denomX;
+      res2[0] = (D * B / E - A) / denomY;
+      res2[1] = 1.0 / denomY;
+      res2[2] = (-B / E) / denomY;
+    }
+    else if(C != 0 && E != 0 && B == 0) {
+      /**
+       * Input Equations:
+       * X = A + CL
+       * Y = D + ES + FL
+       *
+       * Dependencies:
+       *   C != 0, E != 0, B == 0
+       *
+       * Inverses:
+       * S = ((FA)/(CE) - D/E) + (-F/(CE))X + (1/E)Y
+       * L = (-A/C) + (1/C)X + 0.0Y
+       */
+      res1[0] = (F * A) / (C * E) - D / E;
+      res1[1] = -F / (C * E);
+      res1[2] = 1.0 / E;
+      res2[0] = -A / C;
+      res2[1] = 1.0 / C;
+      res2[2] = 0.0;
+    }
+    else {
+      solutionFound = false;
+    }
+
+    // If we found a swapped sol'n, the x coefficient is really
+    // the y coefficient at this point. The constants are correct.
+    if(order == 1 && solutionFound) {
+      double tmp = res1[1];
+      res1[1] = res1[2];
+      res1[2] = tmp;
+
+      tmp = res2[1];
+      res2[1] = res2[2];
+      res2[2] = tmp;
+    }
+  }
+
+  if(!solutionFound) {
+    throw IException(IException::Unknown, "Not enough information", _FILEINFO_);
+  }
+
+  QString inEquationX = "X = " + toString(eq1[0]);
+  inEquationX += " + " + toString(eq1[1]) + "S";
+  inEquationX += " + " + toString(eq1[2]) + "L";
+  QString inEquationY = "Y = " + toString(eq2[0]);
+  inEquationY += " + " + toString(eq2[1]) + "S";
+  inEquationY += " + " + toString(eq2[2]) + "L";
+  QString outEquationS = "S = " + toString(res1[0]);
+  outEquationS += " + " + toString(res1[1]) + "X";
+  outEquationS += " + " + toString(res1[2]) + "Y";
+  QString outEquationL = "L = " + toString(res2[0]);
+  outEquationL += " + " + toString(res2[1]) + "X";
+  outEquationL += " + " + toString(res2[2]) + "Y";
+
+  // check....
+  /*
+  double rndS = 12;
+  double rndL = 534;
+
+  double x = eq1[0] + rndS*eq1[1] + rndL*eq1[2];
+  double y = eq2[0] + rndS*eq2[1] + rndL*eq2[2];
+  double s = res1[0] + x*res1[1] + y*res1[2];
+  double l = res2[0] + x*res2[1] + y*res2[2];
+
+  if(fabs(rndS - s) > 1E-12 || fabs(rndL - l) > 1E-12) {
+    std::cerr << "Equation Fails!" << std::endl;
+    std::cerr << "Differences: " << fabs(rndS - s) << "," << fabs(rndL - l) << std::endl;
+  }
+  */
+
+  PvlGroup res("Results");
+
+  if(ui.WasEntered("IAKCODE")) {
+    PvlKeyword naifFormatX("INS" + ui.GetString("IAKCODE") + "_TRANSX");
+    naifFormatX += toString(eq1[0]);
+    naifFormatX += toString(eq1[1]);
+    naifFormatX += toString(eq1[2]);
+    PvlKeyword naifFormatY("INS" + ui.GetString("IAKCODE") + "_TRANSY");
+    naifFormatY += toString(eq2[0]);
+    naifFormatY += toString(eq2[1]);
+    naifFormatY += toString(eq2[2]);
+    PvlKeyword naifFormatS("INS" + ui.GetString("IAKCODE") + "_ITRANSS");
+    naifFormatS += toString(res1[0]);
+    naifFormatS += toString(res1[1]);
+    naifFormatS += toString(res1[2]);
+    PvlKeyword naifFormatL("INS" + ui.GetString("IAKCODE") + "_ITRANSL");
+    naifFormatL += toString(res2[0]);
+    naifFormatL += toString(res2[1]);
+    naifFormatL += toString(res2[2]);
+
+    res += naifFormatX;
+    res += naifFormatY;
+    res += naifFormatS;
+    res += naifFormatL;
+  }
+  else {
+    res += PvlKeyword("EquationX", inEquationX);
+    res += PvlKeyword("EquationY", inEquationY);
+    res += PvlKeyword("EquationS", outEquationS);
+    res += PvlKeyword("EquationL", outEquationL);
+  }
+
+  Application::Log(res);
+}
diff --git a/isis/src/dev/apps/camcoeffs/camcoeffs.xml b/isis/src/dev/apps/camcoeffs/camcoeffs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0847260a0b7b492040eeece1e3133eecb82a9378
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/camcoeffs.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="camcoeffs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd"> 
+  <brief>
+    This program calculates TRANSX,TRANSY from TRANSS, TRANSL for iak kernels
+  </brief>
+
+  <description>
+      <strong>
+        This application is for camera development and is not supported for general public use.
+      </strong>
+
+      This program outputs the exact IAK Kernel keywords that should be added to the kernel. The
+      TRANSX,TRANSY keywords are the result of the input (no processing done, this should be known information).
+      These values were provides as parameters to this program. The TRANSS,TRANSL keywords are calculated based on
+      the TRANSX,TRANSY keywords and are the result of this program. The keywords can be copied directly into the
+      pertinent IAK kernel.      
+  </description>
+
+  <category>
+    <categoryItem>System</categoryItem>
+  </category>
+
+  <history>
+    <change name="Steven Lambright" date="2008-07-16">
+      Original Version
+    </change>
+  </history>
+
+  <groups>
+    <group name="IAK">
+      <parameter name="IAKCODE">
+        <type>string</type>
+        <internalDefault>Output Equations</internalDefault>
+        <brief>
+          The IAK code of the TRANS values
+        </brief>
+        <description>
+          This IAK code of the TRANS values, a negative number (such as -41210) is expected.
+        </description>
+      </parameter>
+    </group>
+    <group name="Coefficients">
+      <parameter name="XCONSTCOEF">
+        <type>double</type>
+        <brief>
+          Focal Plane X Constant Coefficient
+        </brief>
+        <description>
+          This is the first value in the TRANSY keyword, which represents the focal plane X constant coefficient.
+        </description>
+      </parameter>
+      <parameter name="XSAMPLECOEF">
+        <type>double</type>
+        <brief>
+          Focal Plane X Sample Coefficient
+        </brief>
+        <description>
+          This is the second value in the TRANSY keyword, which represents the focal plane X sample coefficient.
+        </description>
+      </parameter>
+      <parameter name="XLINECOEF">
+        <type>double</type>
+        <brief>
+          Focal Plane X Line Coefficient
+        </brief>
+        <description>
+          This is the third value in the TRANSY keyword, which represents the focal plane X line coefficient.
+        </description>
+      </parameter>
+      <parameter name="YCONSTCOEF">
+        <type>double</type>
+        <brief>
+          Focal Plane Y Constant Coefficient
+        </brief>
+        <description>
+          This is the first value in the TRANSY keyword, which represents the focal plane Y constant coefficient.
+        </description>
+      </parameter>
+      <parameter name="YSAMPLECOEF">
+        <type>double</type>
+        <brief>
+          Focal Plane Y Sample Coefficient
+        </brief>
+        <description>
+          This is the second value in the TRANSY keyword, which represents the focal plane Y sample coefficient.
+        </description>
+      </parameter>
+      <parameter name="YLINECOEF">
+        <type>double</type>
+        <brief>
+          Focal Plane Y Line Coefficient
+        </brief>
+        <description>
+          This is the third value in the TRANSY keyword, which represents the focal plane Y line coefficient.
+        </description>
+      </parameter>
+    </group>
+  </groups>
+
+  <examples>
+    <example>
+      <brief>Getting the TRANSX,TRANSY keywords for an IAK Kernel</brief>  
+      <description>
+        This example shows how to get the TRANSX,TRANSY keywords for an IAK 
+        Kernel when given the TRANSS, TRANSL keywords
+      </description>
+      <terminalInterface>
+        <commandLine>
+          iakcode=-41219 xc=0.2589180702 xs=-0.0069999992 xl=0.0000033598 yc=-59.9867757282 ys=0.0000033598 yl=-0.0069999992
+        </commandLine>
+        <description>
+          This is a typical run
+        </description>
+      </terminalInterface>
+      <dataFiles>
+        <dataFile path="assets/output.txt">
+          <brief>The Output</brief>
+          <description>
+            This program outputs the exact IAK Kernel keywords that should be added to the kernel. The
+            TRANSX,TRANSY keywords are the result of the input (no processing done, this should be known information).
+            These values were provides as parameters to this program. The TRANSS,TRANSL keywords are calculated based on
+            the TRANSX,TRANSY keywords and are the result of this program. The keywords can be copied directly into the
+            pertinent IAK kernel.
+          </description>
+        </dataFile>
+      </dataFiles>
+    </example>
+  </examples>
+</application>
diff --git a/isis/src/dev/apps/camcoeffs/tsts/Makefile b/isis/src/dev/apps/camcoeffs/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/dev/apps/camcoeffs/tsts/default/Makefile b/isis/src/dev/apps/camcoeffs/tsts/default/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7912c159e560cdaee037e6fe19f444e613a8f20b
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/tsts/default/Makefile
@@ -0,0 +1,15 @@
+APPNAME = camcoeffs
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) XCONSTCOEF=0 XSAMPLECOEF=4 XLINECOEF=0 \
+		YCONSTCOEF=0 YSAMPLECOEF=0 YLINECOEF=2 > $(OUTPUT)/simple.txt;
+	$(APPNAME) XCONSTCOEF=0 XSAMPLECOEF=0 XLINECOEF=4 \
+		YCONSTCOEF=0 YSAMPLECOEF=2 YLINECOEF=0 > $(OUTPUT)/simple2.txt;
+	$(APPNAME) XCONSTCOEF=10 XSAMPLECOEF=1 XLINECOEF=4 \
+		YCONSTCOEF=5 YSAMPLECOEF=2 YLINECOEF=0 > $(OUTPUT)/missingLineCoef.txt;
+	$(APPNAME) XCONSTCOEF=10 XSAMPLECOEF=1 XLINECOEF=0 \
+		YCONSTCOEF=5 YSAMPLECOEF=2 YLINECOEF=4 > $(OUTPUT)/missingLineCoef2.txt;
+	$(APPNAME) XCONSTCOEF=10 XSAMPLECOEF=1 XLINECOEF=6 \
+		YCONSTCOEF=5 YSAMPLECOEF=2 YLINECOEF=4 > $(OUTPUT)/complicated.txt;
diff --git a/isis/src/dev/apps/camcoeffs/tsts/naifFormat/Makefile b/isis/src/dev/apps/camcoeffs/tsts/naifFormat/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..04f15f656caa918408954c4c323eee8d5b72fc1c
--- /dev/null
+++ b/isis/src/dev/apps/camcoeffs/tsts/naifFormat/Makefile
@@ -0,0 +1,9 @@
+APPNAME = camcoeffs
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) IAKCODE=-41219 XCONSTCOEF=0.2589180702 \
+		XSAMPLECOEF=-0.0069999992 XLINECOEF=0.0000033598 \
+		YCONSTCOEF=-59.9867757282 YSAMPLECOEF=0.0000033598 \
+		YLINECOEF=-0.0069999992 > $(OUTPUT)/naif.txt;
diff --git a/isis/src/dev/apps/camdev/Makefile b/isis/src/dev/apps/camdev/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/dev/apps/camdev/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/dev/apps/camdev/camdev.cpp b/isis/src/dev/apps/camdev/camdev.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..05ea262494c0eda061c5f48eeffcb632db011b96
--- /dev/null
+++ b/isis/src/dev/apps/camdev/camdev.cpp
@@ -0,0 +1,761 @@
+#include "Isis.h"
+
+#include <cmath>
+
+#include "Angle.h"
+#include "Camera.h"
+#include "CameraDistortionMap.h"
+#include "CameraFocalPlaneMap.h"
+#include "Cube.h"
+#include "CubeManager.h"
+#include "Distance.h"
+#include "FileName.h"
+#include "IException.h"
+#include "iTime.h"
+#include "Longitude.h"
+#include "ProjectionFactory.h"
+#include "ProcessByBrick.h"
+#include "ProcessByLine.h"
+#include "SpecialPixel.h"
+#include "TProjection.h"
+
+using namespace std;
+using namespace Isis;
+
+// Global variables
+Camera *cam;
+TProjection *proj;
+int nbands;
+bool noCamera;
+
+bool dn;
+bool ra;
+bool declination;
+bool planetocentricLatitude;
+bool planetographicLatitude;
+bool positiveEast360Longitude;
+bool positiveEast180Longitude;
+bool positiveWest360Longitude;
+bool positiveWest180Longitude;
+bool bodyFixedX;
+bool bodyFixedY;
+bool bodyFixedZ;
+bool localRadius;
+bool pixelResolution;
+bool lineResolution;
+bool sampleResolution;
+bool detectorResolution;
+bool spacecraftPositionX;
+bool spacecraftPositionY;
+bool spacecraftPositionZ;
+bool spacecraftAzimuth;
+bool slantDistance;
+bool targetCenterDistance;
+bool subSpacecraftLatitude;
+bool subSpacecraftLongitude;
+bool subSpacecraftGroundAzimuth;
+bool spacecraftAltitude;
+bool offnadirAngle;
+bool sunPositionX;
+bool sunPositionY;
+bool sunPositionZ;
+bool sunAzimuth;
+bool solarDistance;
+bool subSolarLatitude;
+bool subSolarLongitude;
+bool subSolarGroundAzimuth;
+bool phase; 
+bool emission;
+bool incidence;
+bool localEmission;
+bool localIncidence;
+bool northAzimuth;
+bool distortedFocalPlaneX;
+bool distortedFocalPlaneY;
+bool undistortedFocalPlaneX;
+bool undistortedFocalPlaneY;
+bool undistortedFocalPlaneZ;
+bool ephemerisTime;
+bool UTC;
+bool localSolarTime;
+bool solarLongitude;
+bool morphologyRank;
+bool albedoRank;
+
+
+
+void camdevDN(Buffer &in, Buffer &out);
+void camdev(Buffer &out);
+
+
+// Function to create a keyword with same values of a specified count
+template <typename T> PvlKeyword makeKey(const QString &name, 
+                                         const int &nvals, 
+                                         const T &value);
+
+// Structure containing new mosaic planes
+struct MosData {
+  MosData() :  m_morph(Null), m_albedo(Null) {  }
+  double m_morph;
+  double m_albedo;
+};
+
+// Computes the special MORPHOLOGYRANK and ALBEDORANK planes
+MosData *getMosaicIndicies(Camera &camera, MosData &md);
+// Updates BandBin keyword
+void UpdateBandKey(const QString &keyname, PvlGroup &bb, const int &nvals, 
+                   const QString &default_value = "Null");
+
+
+
+void IsisMain() {
+  UserInterface &ui = Application::GetUserInterface();
+
+  // Get the camera information if this is not a mosaic. Otherwise, get the
+  // projection information
+  Process p1;
+  Cube *icube = p1.SetInputCube("FROM", OneBand);
+  if (ui.GetString("SOURCE") == "CAMERA") {
+    noCamera = false;
+  }
+  else {
+    noCamera = true;
+  }
+
+  if(noCamera) {
+    try {
+      proj = (TProjection *) icube->projection();
+    }
+    catch(IException &e) {
+      QString msg = "Mosaic files must contain mapping labels";
+      throw IException(e, IException::User, msg, _FILEINFO_);
+    }
+  } 
+  else {
+    try {
+      cam = icube->camera();
+    }
+    catch(IException &e) {
+      QString msg = "If " + FileName(ui.GetFileName("FROM")).name() + " is a mosaic, make sure the SOURCE "
+      "option is set to PROJECTION";
+      throw IException(e, IException::User, msg, _FILEINFO_);
+    }
+  }
+
+  // We will be processing by brick.
+  ProcessByBrick p;
+
+  // Find out which bands are to be created
+  nbands = 0;
+  ra = false;
+  declination = false;
+  planetographicLatitude = false;
+  positiveEast180Longitude = false;
+  positiveWest360Longitude = false;
+  positiveWest180Longitude = false;
+  bodyFixedX = false;
+  bodyFixedY = false;
+  bodyFixedZ = false;
+  localRadius = false;
+  lineResolution = false;
+  sampleResolution = false;
+  detectorResolution = false;
+  spacecraftPositionX = false;
+  spacecraftPositionY = false;
+  spacecraftPositionZ = false;
+  spacecraftAzimuth = false;
+  slantDistance = false;
+  targetCenterDistance = false;
+  subSpacecraftLatitude = false;
+  subSpacecraftLongitude = false;
+  subSpacecraftGroundAzimuth = false;
+  spacecraftAltitude = false;
+  offnadirAngle = false;
+  sunPositionX = false;
+  sunPositionY = false;
+  sunPositionZ = false;
+  sunAzimuth = false;
+  solarDistance = false;
+  subSolarLatitude = false;
+  subSolarLongitude = false;
+  subSolarGroundAzimuth = false;  
+  phase = false;
+  emission = false;
+  incidence = false;
+  localEmission = false;
+  localIncidence = false;
+  northAzimuth = false;
+  distortedFocalPlaneX = false;
+  distortedFocalPlaneY = false;
+  undistortedFocalPlaneX = false;
+  undistortedFocalPlaneY = false;
+  undistortedFocalPlaneZ = false;
+  ephemerisTime = false;
+  UTC = false;
+  localSolarTime = false;
+  solarLongitude = false;  
+  morphologyRank = false;
+  albedoRank = false;  
+  
+  
+  if (!noCamera) {
+    if ((ra = ui.GetBoolean("RADEC"))) nbands++;
+    if ((declination = ui.GetBoolean("RADEC"))) nbands++;
+    if ((planetographicLatitude = ui.GetBoolean("PLANETOGRAPHICLATITUDE"))) nbands++;
+    if ((positiveEast180Longitude = ui.GetBoolean("POSITIVEEAST180LONGITUDE"))) nbands++;
+    if ((positiveWest360Longitude = ui.GetBoolean("POSITIVEWEST360LONGITUDE"))) nbands++;
+    if ((positiveWest180Longitude = ui.GetBoolean("POSITIVEWEST180LONGITUDE"))) nbands++;
+    if ((bodyFixedX = ui.GetBoolean("BODYFIXED"))) nbands++;
+    if ((bodyFixedY = ui.GetBoolean("BODYFIXED"))) nbands++;
+    if ((bodyFixedZ = ui.GetBoolean("BODYFIXED"))) nbands++;
+    if ((localRadius = ui.GetBoolean("LOCALRADIUS"))) nbands++;
+    if ((lineResolution = ui.GetBoolean("LINERESOLUTION"))) nbands++;
+    if ((sampleResolution = ui.GetBoolean("SAMPLERESOLUTION"))) nbands++;
+    if ((detectorResolution = ui.GetBoolean("DETECTORRESOLUTION"))) nbands++;
+    if ((spacecraftPositionX = ui.GetBoolean("SPACECRAFTPOSITION"))) nbands++;
+    if ((spacecraftPositionY = ui.GetBoolean("SPACECRAFTPOSITION"))) nbands++;
+    if ((spacecraftPositionZ = ui.GetBoolean("SPACECRAFTPOSITION"))) nbands++;
+    if ((spacecraftAzimuth = ui.GetBoolean("SPACECRAFTAZIMUTH"))) nbands++;
+    if ((slantDistance = ui.GetBoolean("SLANTDISTANCE"))) nbands++;
+    if ((targetCenterDistance = ui.GetBoolean("TARGETCENTERDISTANCE"))) nbands++;
+    if ((subSpacecraftLatitude = ui.GetBoolean("SUBSPACECRAFTLATITUDE"))) nbands++;
+    if ((subSpacecraftLongitude = ui.GetBoolean("SUBSPACECRAFTLONGITUDE"))) nbands++;
+    if ((subSpacecraftGroundAzimuth = ui.GetBoolean("SUBSPACECRAFTGROUNDAZIMUTH"))) nbands++;
+    if ((spacecraftAltitude = ui.GetBoolean("SPACECRAFTALTITUDE"))) nbands++;
+    if ((offnadirAngle = ui.GetBoolean("OFFNADIRANGLE"))) nbands++;
+    if ((sunPositionX = ui.GetBoolean("SUNPOSITION"))) nbands++;
+    if ((sunPositionY = ui.GetBoolean("SUNPOSITION"))) nbands++;
+    if ((sunPositionZ = ui.GetBoolean("SUNPOSITION"))) nbands++;
+    if ((sunAzimuth = ui.GetBoolean("SUNAZIMUTH"))) nbands++;
+    if ((solarDistance = ui.GetBoolean("SOLARDISTANCE"))) nbands++;
+    if ((subSolarLatitude = ui.GetBoolean("SUBSOLARLATITUDE"))) nbands++;
+    if ((subSolarLongitude = ui.GetBoolean("SUBSOLARLONGITUDE"))) nbands++;
+    if ((subSolarGroundAzimuth = ui.GetBoolean("SUBSOLARGROUNDAZIMUTH"))) nbands++;    
+    if ((phase = ui.GetBoolean("PHASE"))) nbands++;
+    if ((incidence = ui.GetBoolean("INCIDENCE"))) nbands++;
+    if ((emission = ui.GetBoolean("EMISSION"))) nbands++;
+    if ((localEmission = ui.GetBoolean("LOCALEMISSION"))) nbands++;
+    if ((localIncidence = ui.GetBoolean("LOCALINCIDENCE"))) nbands++;
+    if ((northAzimuth = ui.GetBoolean("NORTHAZIMUTH"))) nbands++;    
+    if ((distortedFocalPlaneX = ui.GetBoolean("DISTORTEDFOCALPLANE"))) nbands++;
+    if ((distortedFocalPlaneY = ui.GetBoolean("DISTORTEDFOCALPLANE"))) nbands++;
+    if ((undistortedFocalPlaneX = ui.GetBoolean("UNDISTORTEDFOCALPLANE"))) nbands++;
+    if ((undistortedFocalPlaneY = ui.GetBoolean("UNDISTORTEDFOCALPLANE"))) nbands++;
+    if ((undistortedFocalPlaneZ = ui.GetBoolean("UNDISTORTEDFOCALPLANE"))) nbands++;
+    if ((ephemerisTime = ui.GetBoolean("EPHEMERISTIME"))) nbands++;
+    if ((UTC = ui.GetBoolean("UTC"))) nbands++;
+    if ((localSolarTime = ui.GetBoolean("LOCALSOLARTIME"))) nbands++;
+    if ((solarLongitude = ui.GetBoolean("SOLARLONGITUDE"))) nbands++;   
+    if ((morphologyRank = ui.GetBoolean("MORPHOLOGYRANK"))) nbands++; 
+    if ((albedoRank = ui.GetBoolean("ALBEDORANK"))) nbands++;
+    
+  }
+  if((dn = ui.GetBoolean("DN"))) nbands++;
+  if((planetocentricLatitude = ui.GetBoolean("PLANETOCENTRICLATITUDE"))) nbands++;
+  if((positiveEast360Longitude = ui.GetBoolean("POSITIVEEAST360LONGITUDE"))) nbands++;
+  if((pixelResolution = ui.GetBoolean("PIXELRESOLUTION"))) nbands++;
+
+  if(nbands < 1) {
+    QString message = "At least one parameter must be entered"
+                     "[PHASE, EMISSION, INCIDENCE, LATITUDE, LONGITUDE...]";
+    throw IException(IException::User, message, _FILEINFO_);
+  }
+
+  // If outputting a a dn band, retrieve the orignal values for the filter name from the input cube,
+  // if it exists.  Otherwise, the default will be "DN"
+  QString bname = "DN";
+  if ( dn && icube->hasGroup("BandBin") ) {
+    PvlGroup &mybb = icube->group("BandBin");
+    if ( mybb.hasKeyword("Name") ) {
+      bname = mybb["Name"][0];
+    }
+    else if ( mybb.hasKeyword("FilterName") ) {
+      bname = mybb["FilterName"][0];
+    }
+  }
+
+  // Create a bandbin group for the output label
+  PvlKeyword name("Name");
+  if (dn) name += bname;
+  if (ra) name += "Right Ascension";
+  if (declination) name += "Declination";
+  if (planetocentricLatitude) name += "Planetocentric Latitude";
+  if (planetographicLatitude) name += "Planetographic Latitude";
+  if (positiveEast360Longitude) name += "Positive East 360 Longitude";
+  if (positiveEast180Longitude) name += "Positive East 180 Longitude";
+  if (positiveWest360Longitude) name += "Positive West 360 Longitude";
+  if (positiveWest180Longitude) name += "Positive West 180 Longitude";
+  if (bodyFixedX) name += "Body Fixed X";
+  if (bodyFixedY) name += "Body Fixed Y";
+  if (bodyFixedZ) name += "Body Fixed Z";
+  if (localRadius) name += "Local Radius";
+  if (pixelResolution) name += "Pixel Resolution";
+  if (lineResolution) name += "Line Resolution";
+  if (sampleResolution) name += "Sample Resolution";
+  if (detectorResolution) name += "Detector Resolution";  
+  if (spacecraftPositionX) name += "Spacecraft Position X";
+  if (spacecraftPositionY) name += "Spacecraft Position Y";
+  if (spacecraftPositionZ) name += "Spacecraft Position Z";
+  if (spacecraftAzimuth) name += "Spacecraft Azimuth";
+  if (slantDistance) name += "Slant Distance";
+  if (targetCenterDistance) name += "Target Center Distance";
+  if (subSpacecraftLatitude) name += "Sub Spacecraft Latitude";
+  if (subSpacecraftLongitude) name += "Sub Spacecraft Longitude";
+  if (subSpacecraftGroundAzimuth) name += "Sub Spacecraft Ground Azimuth";
+  if (spacecraftAltitude) name += "Spacecraft Altitude";
+  if (offnadirAngle) name += "OffNadir Angle";
+  if (sunPositionX) name += "Sun Position X";
+  if (sunPositionY) name += "Sun Position Y";
+  if (sunPositionZ) name += "Sun Position Z";
+  if (sunAzimuth) name += "Sun Azimuth";
+  if (solarDistance) name += "Solar Distance";
+  if (subSolarLatitude) name += "Sub Solar Latitude";
+  if (subSolarLongitude) name += "Sub Solar Longitude";
+  if (subSolarGroundAzimuth) name += "Sub Solar Ground Azimuth";
+  if (phase) name += "Phase Angle";
+  if (incidence) name += "Incidence Angle";
+  if (emission) name += "Emission Angle";
+  if (localEmission) name += "Local Emission Angle";
+  if (localIncidence) name += "Local Incidence Angle";
+  if (northAzimuth) name += "North Azimuth";
+  if (distortedFocalPlaneX) name += "Distorted Focal Plane X";
+  if (distortedFocalPlaneY) name += "Distorted Focal Plane Y";
+  if (undistortedFocalPlaneX) name += "Undistorted Focal Plane X";
+  if (undistortedFocalPlaneY) name += "Undistorted Focal Plane Y";
+  if (undistortedFocalPlaneZ) name += "Undistorted Focal Plane Z";
+  if (ephemerisTime) name += "Ephemeris Time";
+  if (UTC) name += "Coordinated Universal Time";
+  if (localSolarTime) name += "Local Solar Time";
+  if (solarLongitude) name += "Solar Longitude";
+  if (morphologyRank) name += "morphologyRank";
+  if (albedoRank) name += "albedoRank";
+  
+  
+
+
+  // Create the output cube.  Note we add the input cube to expedite propagation
+  // of input cube elements (label, blobs, etc...).  It will be cleared
+  // prior to systematic processing only if the DN option is not selected.
+  // If DN is chosen by the user, then we propagate the input buffer with a 
+  // different function - one that accepts both input and output buffers.
+  (void) p.SetInputCube("FROM", OneBand);
+  Cube *ocube = p.SetOutputCube("TO", icube->sampleCount(), 
+                                icube->lineCount(), nbands);
+  p.SetBrickSize(64, 64, nbands);
+
+  if (dn) {
+    // Process with input and output buffers
+    p.StartProcess(camdevDN);
+  }
+  else {
+    // Toss the input file as stated above
+    p.ClearInputCubes();
+
+    // Start the processing
+    p.StartProcess(camdev);
+  }
+
+  // Add the bandbin group to the output label.  If a BandBin group already
+  // exists, remove all existing keywords and add the keywords for this app.
+  // Otherwise, just put the group in.
+  PvlObject &cobj = ocube->label()->findObject("IsisCube");
+  if(!cobj.hasGroup("BandBin")) {
+    cobj.addGroup(PvlGroup("BandBin"));
+  }
+
+  PvlGroup &bb = cobj.findGroup("BandBin");
+  bb.addKeyword(name, PvlContainer::Replace);
+  int nvals = name.size();
+  UpdateBandKey("Center", bb, nvals, "1.0");
+
+  if ( bb.hasKeyword("OriginalBand") ) {
+    UpdateBandKey("OriginalBand", bb, nvals, "1.0");
+  }
+
+  if ( bb.hasKeyword("Number") ) {
+    UpdateBandKey("Number", bb, nvals, "1.0");
+  }
+
+  UpdateBandKey("Width", bb, nvals, "1.0");
+
+
+
+  p.EndProcess();
+}
+
+
+//  This propagates the input plane to the output plane, then passes it off to
+//  the general routine
+void camdevDN(Buffer &in, Buffer &out) {
+  for (int i = 0 ; i < in.size() ; i++) {
+    out[i] = in[i];
+  }
+  camdev(out);
+}
+
+
+//  Computes all the geometric properties for the output buffer.  Certain
+//  knowledge of the buffers size is assumed below, so ensure the buffer
+//  is still of the expected size.
+void camdev(Buffer &out) {
+
+
+  // If the DN option is selected, it is already added by the camdevDN
+  // function.  We must compute the offset to start at the second band.
+  int skipDN = (dn) ? 64 * 64   :  0;
+
+  for(int i = 0; i < 64; i++) {
+    for(int j = 0; j < 64; j++) {
+
+      MosData mosd, *p_mosd(0);  // For special mosaic angles
+
+      int index = i * 64 + j + skipDN;
+      double samp = out.Sample(index);
+      double line = out.Line(index);
+
+      bool isGood=false;
+      if (noCamera) {
+        isGood = proj->SetWorld(samp, line);
+      }
+      else {
+        isGood = cam->SetImage(samp, line);
+      }
+
+      if (isGood) {
+        if (ra) {
+          out[index] = cam->RightAscension();
+          index += 64 * 64;
+        }
+        if (declination) {
+          out[index] = cam->Declination();
+          index += 64 * 64;
+        }
+        if(planetocentricLatitude) {
+          if(noCamera) {
+            out[index] = proj->UniversalLatitude();
+          }
+          else {
+            out[index] = cam->UniversalLatitude();
+          }
+          index += 64 * 64;
+        }
+        if (!noCamera) {
+          if (planetographicLatitude) {
+            Distance radii[3];
+            cam->radii(radii);
+            double ocentricLat; 
+            ocentricLat = cam->UniversalLatitude();
+            out[index] = TProjection::ToPlanetographic(ocentricLat, radii[0].kilometers(), 
+                                                 radii[2].kilometers());
+            index += 64 * 64;
+          }
+        }
+        double pe360Lon, pw360Lon;
+        if (positiveEast360Longitude) {
+          if(noCamera) {
+            pe360Lon = proj->UniversalLongitude();
+          }
+          else {
+            pe360Lon = cam->UniversalLongitude();
+          }
+          out[index] = pe360Lon;
+          index += 64 * 64;
+        }
+        if (!noCamera) {
+          pe360Lon = cam->UniversalLongitude();
+          pw360Lon = TProjection::ToPositiveWest(pe360Lon, 360);
+          if (positiveEast180Longitude) {
+            out[index] = TProjection::To180Domain(pe360Lon);
+            index += 64 * 64;
+          }
+          if (positiveWest360Longitude) {
+            out[index] = pw360Lon;
+            index += 64 * 64;
+          }
+          if (positiveWest180Longitude) {
+            out[index] = TProjection::To180Domain(pw360Lon);
+            index += 64 * 64;
+          }
+        }
+        //If bodyFixedX is true, Y and Z are true as well so compute them all
+        if (bodyFixedX) {
+          double pB[3];
+          cam->Coordinate(pB);
+          out[index] = pB[0];
+          index += 64 * 64;
+          out[index] = pB[1];
+          index += 64 * 64;
+          out[index] = pB[2];
+          index += 64 * 64;
+        }
+        if (localRadius) {
+          out[index] = cam->LocalRadius().meters();
+          index += 64 * 64;
+        }
+        if (pixelResolution) {
+          if (noCamera) {
+            out[index] = proj->Resolution();
+          }
+          else {
+            out[index] = cam->PixelResolution();
+          }
+          index += 64 * 64;
+        }
+        if(lineResolution) {
+          out[index] = cam->LineResolution();
+          index += 64 * 64;
+        }
+        if(sampleResolution) {
+          out[index] = cam->SampleResolution();
+          index += 64 * 64;
+        }
+        if(detectorResolution) {
+          out[index] = cam->DetectorResolution();
+          index += 64 * 64;
+        }
+        //If spacecraftPositionX is true, Y and Z are true as well so compute them all
+        if(spacecraftPositionX) {
+          double spB[3];
+          cam->instrumentPosition(spB);
+          out[index] = spB[0];
+          index += 64 * 64;
+          out[index] = spB[1];
+          index += 64 * 64;
+          out[index] = spB[2];
+          index += 64 * 64;
+        }
+        if(spacecraftAzimuth) {
+          out[index] = cam->SpacecraftAzimuth();
+          index += 64 * 64;
+        }
+        if(slantDistance) {
+          out[index] = cam->SlantDistance();
+          index += 64 * 64;
+        }
+        if(targetCenterDistance) {
+          out[index] = cam->targetCenterDistance();
+          index += 64 * 64;
+        }
+        if(!noCamera) {
+          double ssplat, ssplon;
+          ssplat = 0.0; 
+          ssplon = 0.0;
+          cam->subSpacecraftPoint(ssplat, ssplon);
+          if(subSpacecraftLatitude) {
+            out[index] = ssplat;
+            index += 64 * 64;
+          }
+          if(subSpacecraftLongitude) {
+            out[index] = ssplon;
+            index += 64 * 64;
+          }
+          if(subSpacecraftGroundAzimuth) {
+            out[index] = cam->GroundAzimuth(cam->UniversalLatitude(),
+                cam->UniversalLongitude(), ssplat, ssplon);
+            index += 64 * 64;
+          }
+        }
+        if(spacecraftAltitude) {
+          out[index] = cam->SpacecraftAltitude();
+          index += 64 * 64;
+        }
+        if(offnadirAngle) {
+          out[index] = cam->OffNadirAngle();
+          index += 64 * 64;
+        }
+        //If sunPositionX is true, Y and Z are true as well so compute them all
+        if(sunPositionX) {
+          double sB[3];
+          cam->sunPosition(sB);
+          out[index] = sB[0];
+          index += 64 * 64;
+          out[index] = sB[1];
+          index += 64 * 64;
+          out[index] = sB[2];
+          index += 64 * 64;
+        }
+        if(sunAzimuth) {
+          out[index] = cam->SunAzimuth();
+          index += 64 * 64;
+        }
+        if(solarDistance) {
+          out[index] = cam->SolarDistance();
+          index += 64 * 64;
+        }
+        if(!noCamera) {
+          double sslat, sslon;
+          sslat = 0.0;
+          sslon = 0.0;
+          cam->subSolarPoint(sslat, sslon);
+          if(subSolarLatitude) {
+            out[index] = sslat;
+            index += 64 * 64;
+          }
+          if(subSolarLongitude) {
+            out[index] = sslon;
+            index += 64 * 64;
+          }
+          if(subSolarGroundAzimuth) {
+            out[index] = cam->GroundAzimuth(cam->UniversalLatitude(),
+                cam->UniversalLongitude(), sslat, sslon);
+            index += 64 * 64;
+          }
+        }
+        if(phase) {
+          out[index] = cam->PhaseAngle();
+          index += 64 * 64;
+        }
+        if(incidence) {
+          out[index] = cam->IncidenceAngle();
+          index += 64 * 64;
+        }
+        if(emission) {
+          out[index] = cam->EmissionAngle();
+          index += 64 * 64;
+        }
+        if(localEmission || localIncidence) {
+          Angle phase;
+          Angle incidence;
+          Angle emission;
+          bool success;
+          cam->LocalPhotometricAngles(phase, incidence, emission, success);
+
+          if (localEmission) {
+            out[index] = emission.degrees();
+            index += 64 * 64;
+          }
+
+          if (localIncidence) {
+            out[index] = incidence.degrees();
+            index += 64 * 64;
+          }
+        }        
+        if(northAzimuth) {
+          out[index] = cam->NorthAzimuth();
+          index += 64 * 64;
+        }
+        //If distortedFocalPlaneX is true, Y is true as well so compute both
+        if(distortedFocalPlaneX) {
+          CameraFocalPlaneMap *focalPlaneMap = cam->FocalPlaneMap();
+          out[index] = focalPlaneMap->FocalPlaneX();
+          index += 64 * 64;
+          out[index] = focalPlaneMap->FocalPlaneY();
+          index += 64 * 64;
+        }
+        //If undistortedFocalPlaneX is true, Y and Z are true as well so compute them all
+        if(undistortedFocalPlaneX) {
+          CameraDistortionMap *distortedMap = cam->DistortionMap();
+          out[index] = distortedMap->UndistortedFocalPlaneX();
+          index += 64 * 64;
+          out[index] = distortedMap->UndistortedFocalPlaneY();
+          index += 64 * 64;
+          out[index] = distortedMap->UndistortedFocalPlaneZ();
+          index += 64 * 64;
+        }
+        if(ephemerisTime) {
+          out[index] = cam->time().Et();
+          index += 64 * 64;
+        }
+        if(UTC) {
+          QString utcDouble = cam->time().UTC();
+          out[index] = utcDouble.toDouble();
+          index += 64 * 64;
+        }
+        if(localSolarTime) {
+          out[index] = cam->LocalSolarTime();
+          index += 64 * 64;
+        }
+        if(solarLongitude) {
+          out[index] = cam->solarLongitude().degrees();
+          index += 64 * 64;
+        }
+        // Special Mosaic indexes
+        if (morphologyRank) {
+          if (!p_mosd) { p_mosd = getMosaicIndicies(*cam, mosd); }
+          out[index] = mosd.m_morph;
+          index += 64 * 64;
+        }
+
+        if (albedoRank) {
+          if (!p_mosd) { p_mosd = getMosaicIndicies(*cam, mosd); }
+          out[index] = mosd.m_albedo;
+          index += 64 * 64;
+        }
+      }
+      // Trim outerspace
+      else {
+        for(int b = (skipDN) ? 1 : 0; b < nbands; b++) {
+          out[index] = Isis::NULL8;
+          index += 64 * 64;
+        }
+      }
+    }
+  }
+}
+
+
+// Function to create a keyword with same values of a specified count
+template <typename T>
+  PvlKeyword makeKey(const QString &name, const int &nvals,
+                     const T &value) {
+    PvlKeyword key(name);
+    for (int i = 0 ; i < nvals ; i++) {
+      key += value;
+    }
+    return (key);
+  }
+
+
+// Computes the special morphologyRank and albedoRank planes
+MosData *getMosaicIndicies(Camera &camera, MosData &md) {
+  const double Epsilon(1.0E-8);
+  Angle myphase;
+  Angle myincidence;
+  Angle myemission;
+  bool mysuccess;
+  camera.LocalPhotometricAngles(myphase, myincidence, myemission, mysuccess);
+  if (!mysuccess) {
+    myemission.setDegrees(camera.EmissionAngle());
+    myincidence.setDegrees(camera.IncidenceAngle());
+  }
+  double res = camera.PixelResolution();
+  if (fabs(res) < Epsilon) res = Epsilon;
+
+  md = MosData();  // Nullifies the data
+  if (myemission.isValid()) {
+    // Compute morphologyRank
+    double cose = cos(myemission.radians());
+    if (fabs(cose) < Epsilon) cose = Epsilon;
+    // Convert resolution to units of KM
+    md.m_morph = (res / 1000.0) / cose;
+
+    if (myincidence.isValid()) {
+      // Compute albedoRank
+      double cosi = cos(myincidence.radians());
+      if (fabs(cosi) < Epsilon) cosi = Epsilon;
+      //  Convert resolution to KM
+      md.m_albedo = (res / 1000.0 ) * ( (1.0 / cose) + (1.0 / cosi) );
+    }
+  }
+
+  return (&md);
+}
+
+
+//  Updates existing BandBin keywords with additional values to ensure
+//  label compilancy (which should support Camera models).  It checks for the
+//  existance of the keyword and uses its (assumed) first value to set nvals
+//  values to a constant.  If the keyword doesn't exist, it uses the default
+//  value.
+void UpdateBandKey(const QString &keyname, PvlGroup &bb, const int &nvals,
+                   const QString &default_value) {
+
+  QString defVal(default_value);
+  if ( bb.hasKeyword(keyname) ) {
+    defVal = bb[keyname][0];
+  }
+
+  bb.addKeyword(makeKey(keyname, nvals, defVal), PvlContainer::Replace);
+  return;
+}
+
diff --git a/isis/src/dev/apps/camdev/camdev.xml b/isis/src/dev/apps/camdev/camdev.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0666b7ebbab31456583e50a80d658f07a1a636e7
--- /dev/null
+++ b/isis/src/dev/apps/camdev/camdev.xml
@@ -0,0 +1,883 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="camdev" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+
+  <brief>
+    Creates photometric and geometric information bands for an image cube
+  </brief>
+
+  <description>
+  <p>
+    <strong>
+      This application is for camera development and is not supported for general public use.
+    </strong>
+
+    This program, camdev, creates backplane bands that contain photometric, geometric, and 
+    spacecraft instrument information for an image file.  The parameter options
+    range from photometric angles (incidence, emission, and phase) to various 
+    <def line="Azimuth">azimuth</def> angles, and options based on spatial 
+    (latitude, longitude, and resolution) information. This program will
+    not work on <def>Level1</def> images without a camera model, or on mosaics.  
+    The input image pixels are not propagated to the output file unless the 
+    user selects the "DN" option. The following is a partial list of how users have made use of 
+    band output:
+    <ul>
+      <li>Evaluate the individual bands in order to establish subsequent 
+          image processing steps</li> 
+      <li>Specify as input to other ISIS3 programs such as fx and photomet</li>
+      <li>Demonstrate the result of each selected option</li>
+      <li>Determine how the images are mosaicked together after the 
+          Level2 images are created from the Level1 images with backplanes </li>
+    </ul>
+  </p>
+  <p>
+    All ISIS3 applications default to the following geometric reference if a camera model exists:
+    <ul>
+      <li>Longitude Domain = 360, longitude range reported from 0 to 360</li>
+      <li>Latitude System = Ocentric</li>
+      <li>Longitude Direction = East, longitude increases to the east</li>
+    </ul>
+  </p>
+  <p>
+    There are instances where the local emission angle and the local incidence angle will have 
+    values over 90 degrees.  ISIS allows the computation of emission and incidence angles greater 
+    than 90 degrees.   This feature allows representation of viewing and illumination conditions 
+    where there is actual target body surface data beyond the limb or deep terminator boundary 
+    areas.  Applications such as photomet that applies photometric functions honor the 90 degree 
+    boundary.    Applications such as photrim can be applied to the camdev output to replace the 
+    angle values above 90 degrees to NULL.  There are certain processes that need these data, 
+    therefore it is allowed. 
+  </p>
+  <p>
+    This program requires a <def>Level1</def> file that has a successful 
+    "<i>spiceinit</i>" applied to it, or a <def>Level2</def> image 
+    cube file.  For every valid input pixel, an output pixel is computed 
+    based on either the <def>SPICE</def> information, or the 
+    <def link="Map Projection">map projected</def> spatial information, 
+    or a pre-defined equation.   
+  </p>
+  <p> 
+    The parameters "morphology" and "albedo" are specifically designed to be used
+    by the ISIS3 mosaic programs.  A mosaic program will automatically compare 
+    two pixel values to determine how each pixel is mosaicked into an output 
+    file, which depends on whether a morphology-based or an albedo-based 
+    product is desired.  The program computes a 
+    <def link="Digital Number">DN</def> value for every input pixel based on 
+    the formulas listed below and outputs the value to a backplane band.  
+    These backplane bands are used by the ISIS3 mosaic programs.  The following are 
+    equations for "morphology" and "albedo" options:
+  <blockquote>
+  <dl>
+    <dt>  Morphology </dt>
+    <dd>Equation = <def>PixelResolution</def>/cos(<def>EmissionAngle</def>)</dd>
+    <dt>  Albedo </dt>
+    <dd>Equation = PixelResolution * [(1/cos(<def>EmissionAngle</def>)) +
+    (1/cos(<def>IncidenceAngle</def>))]</dd>
+  </dl>
+  </blockquote>
+  </p>  
+  <p>
+    All the options in <i>camdev</i> are applicable if the input file is a Level1 
+    image and has a camera model associated with the file.  If the input file 
+    is a map-projected Level2 image, only a few options are appropriate 
+    and available for selection. <br /><br />
+ 
+    The following options are available for Level1 images that contain a camera model:
+     <ul>
+     <li>DN</li>
+     <li>RADEC</li>
+     <li>PLANETOCENTRICLATITUDE</li>
+     <li>PLANETOGRAPHICLATITUDE</li>
+     <li>POSITIVEEAST360LONGITUDE</li>
+     <li>POSITIVEEAST180LONGITUDE</li>
+     <li>POSITIVEWEST360LONGITUDE</li>
+     <li>POSITIVEWEST180LONGITUDE</li>
+     <li>BODYFIXED</li>
+     <li>LOCALRADIUS</li>
+     <li>PIXELRESOLUTION</li>
+     <li>LINERESOLUTION</li>
+     <li>SAMPLERESOLUTION</li>
+     <li>DETECTORRESOLUTION</li>
+     <li>SPACECRAFTPOSITION</li>
+     <li>SPACECRAFTAZIMUTH</li>
+     <li>SLANTDISTANCE</li>
+     <li>TARGETCENTERDISTANCE</li>
+     <li>SUBSPACECRAFTLATITUDE</li>
+     <li>SUBSPACECRAFTLONGITUDE</li>
+     <li>SUBSPACECRAFTGROUNDAZIMUTH</li>
+     <li>SPACECRAFTALTITUDE</li>
+     <li>OFFNADIRANGLE</li>
+     <li>SUNPOSITION</li>
+     <li>SUNAZIMUTH</li>
+     <li>SOLARDISTANCE</li>
+     <li>SUBSOLARLATITUDE</li>
+     <li>SUBSOLARLONGITUDE</li>
+     <li>SUBSOLARGROUNDAZIMUTH</li>
+     <li>PHASE</li>
+     <li>EMISSION</li>
+     <li>INCIDENCE</li>
+     <li>LOCALEMISSION</li>
+     <li>LOCALINCIDENCE</li>
+     <li>NORTHAZIMUTH</li>
+     <li>DISTORTEDFOCALPLANE</li>
+     <li>UNDISTORTEDFOCALPLANE</li>
+     <li>EPHEMERISTIME</li>
+     <li>UTC</li>
+     <li>LOCALSOLARTIME</li>
+     <li>SOLARLONGITUDE</li>
+     <li>MORPHOLOGYRANK</li>
+     <li>ALBEDORANK</li>
+     </ul>
+    The following options are available for Level2 images:
+     <ul>
+     <li>DN</li>
+     <li>RADEC</li>
+     <li>PLANETOCENTRICLATITUDE</li>
+     <li>POSITIVEEAST360LONGITUDE</li>
+     <li>PIXELRESOLUTION</li>
+     <li>DISTORTEDFOCALPLANE</li>
+     <li>UNDISTORTEDFOCALPLANE</li>
+     <li>EPHEMERISTIME</li>
+     <li>UTC</li>
+     <li>SPACECRAFTPOSITION</li>
+     </ul>
+  </p>
+  <p>
+    The BandBin group keywords are updated in the labels of the output cube 
+    file. The keyword "Name" within the BandBin group,
+    shown below, is populated with the name of each option selected by the 
+    user as bands.  These bands can be referenced by their names in 
+    applications such as 
+    "<i>mapmos</i>"
+    and 
+    "<i>qview</i>." 
+    <blockquote>
+    <pre>
+    <b>Example:</b>
+    
+    camdev from=EW0131773041G_cal.cub to=EW0131773041G_cal.pho.cub morph=true dn=true
+     
+    <b>Sample of image label:</b>
+    
+    Group = Dimensions
+      Samples = 1024
+      Lines   = 1024
+      <b>Bands   = 7 </b>  
+    End_Group
+    <b>
+    Group = BandBin
+      Name   = ("750 BW 5", "Phase Angle", "Emission Angle", "Incidence Angle",
+        	Latitude, Longitude, Morphology)
+      Number = (7, 7, 7, 7, 7, 7, 7)
+      Center = (748.7, 748.7, 748.7, 748.7, 748.7, 748.7, 748.7)
+      Width  = (5.1, 5.1, 5.1, 5.1, 5.1, 5.1, 5.1)
+    End_Group
+    </b>
+    
+    Note:  The first band retained the BandBin Name value from the input file.
+    The program has "Phase Angle," "Emission Angle," "Incidence Angle,"
+    "Latitude," and "Longitude" options pre-selected.
+    </pre>
+   </blockquote>
+  </p>
+  <p>
+    If the backplane bands generated by camdev are used in the mosaic 
+    programs and the mosaic requires the input image pixel, the "DN" 
+    parameter name must be set to "true" in camdev.  When backplane 
+    bands are used in the
+    "<i>fx</i>" 
+    or 
+    "<i>photomet</i>" 
+    program, it is not necessary to propagate the input image to the output 
+    file.
+  </p>
+  </description>
+
+  <oldName>
+    <item>lev1geoplane</item>
+    <item>levgeoplane</item>
+    <item>geoback</item>
+  </oldName>
+
+  <seeAlso>
+    <applications>
+      <item>spiceinit</item>
+      <item>mapmos</item>
+      <item>qview</item>
+      <item>fx</item>
+      <item>photomet</item>
+      <item>automos</item>
+      <item>phocube</item>
+    </applications>
+  </seeAlso>
+
+  <liens>
+    <item>Add resolution to possible outputs</item>
+    <item>Convert to a IsisProcessBySpectra when it gets written</item>
+  </liens>
+
+  <history>
+    <change name="Makayla Shepherd" date="2015-09-22">
+      Original version.
+    </change>
+    <change name="Kaj Williams" date="2017-06-09">
+      Renamed albedo to albedoRank, renamed morph (or morphology) to morphRank (or morphologyRank). Ref #4008.
+    </change>
+  </history>
+
+  <category>
+    <categoryItem>Radiometric and Photometric Correction</categoryItem>
+    <categoryItem>Cameras</categoryItem>
+  </category>
+
+  <groups>
+    <group name="Files">
+      <parameter name="FROM">
+        <type>cube</type>
+        <fileMode>input</fileMode>
+        <brief>
+          Input cube file
+        </brief>
+        <description>
+          This is the input filename.  The input image cube can be a <def>Level1</def>
+          or <def>Level2</def> file.  For a Level1 image, spiceinit 
+          must be successfully applied before running camdev.
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+
+      <parameter name="TO">
+        <type>cube</type>
+        <pixelType>real</pixelType>
+        <fileMode>output</fileMode>
+        <brief>
+          Output cube file
+        </brief>
+        <description>
+          This is the output file name.  The cube file will contain a band for
+          each of the selected options.  The BandBin Group in the image labels 
+          of the output cube file will be updated with the "Name" keyword 
+          containing the output band names (options) in the order that they are 
+          stacked within the cube.
+        </description>
+      </parameter>
+
+      <parameter name="SOURCE">
+        <type>string</type>
+        <brief>Specifies the source of the geometric information</brief>
+        <default><item>CAMERA</item></default>
+        <description>
+          Specifies whether the geometric information will be obtained from the
+          camera model or from the map projection.  If this parameter is set to CAMERA, 
+          all band options are available for the user to select. If this 
+          parameter is set to PROJECTION, then only DN, LATITUDE, LONGITUDE, and 
+          PIXELRESOLUTION band options are available and all other options 
+          will be greyed out. If the user sets this parameter to CAMERA and 
+          the input file does not contain a camera model or SPICE information, 
+          then an error message will occur.
+        </description>
+        <list>
+          <option value="CAMERA">
+            <brief>Get the geometric information from camera model</brief>
+            <description>
+              The geometric information is obtained from a camera model and 
+              all band options are available for selection.
+            </description>
+          </option>
+          <option value="PROJECTION">
+            <brief>Get the geometric information based on map projection information</brief>
+            <description>
+              The geometric information is obtained based on the label 
+              keyword values stored under the "Mapping" group in the image 
+              labels.  Only DN, LATITUDE, LONGITUDE, and PIXELRESOLUTION 
+              band options are available.
+            </description>
+            <exclusions>
+              <item>PLANETOGRAPHICLATITUDE</item>
+              <item>POSITIVEEAST180LONGITUDE</item>
+              <item>POSITIVEWEST360LONGITUDE</item>
+              <item>POSITIVEWEST180LONGITUDE</item>
+              <item>BODYFIXED</item>
+              <item>LOCALRADIUS</item>
+              <item>LINERESOLUTION</item>
+              <item>SAMPLERESOLUTION</item>
+              <item>DETECTORRESOLUTION</item>
+              <item>SPACECRAFTAZIMUTH</item>
+              <item>SLANTDISTANCE</item>
+              <item>TARGETCENTERDISTANCE</item>
+              <item>SUBSPACECRAFTLATITUDE</item>
+              <item>SUBSPACECRAFTLONGITUDE</item>
+              <item>SUBSPACECRAFTGROUNDAZIMUTH</item>
+              <item>SPACECRAFTALTITUDE</item>
+              <item>OFFNADIRANGLE</item>
+              <item>SUNPOSITION</item>
+              <item>SUNAZIMUTH</item>
+              <item>SOLARDISTANCE</item>
+              <item>SUBSOLARLATITUDE</item>
+              <item>SUBSOLARLONGITUDE</item>
+              <item>SUBSOLARGROUNDAZIMUTH</item>
+              <item>PHASE</item>
+              <item>EMISSION</item>
+              <item>INCIDENCE</item>
+              <item>LOCALEMISSION</item>
+              <item>LOCALINCIDENCE</item>
+              <item>NORTHAZIMUTH</item>
+              <item>LOCALSOLARTIME</item>
+              <item>SOLARLONGITUDE</item>
+              <item>MORPHOLOGYRANK</item>
+              <item>ALBEDORANK</item>
+            </exclusions>
+          </option>
+        </list>
+      </parameter>
+    </group>
+
+    <group name="Photometry">
+      <parameter name="DN">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Propagate the input pixel to the output file</brief>
+        <description>
+          This parameter specifies whether the input image pixel value 
+          (<def link="Digital Number">DN</def>) will be propagated to 
+          the output file.  The DN parameter must be set to "true," 
+          if the output product created is expected to contain the input 
+          image information.
+        </description>
+      </parameter>
+      <parameter name="RADEC">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create bands for Right Ascention and Declination</brief>
+        <description>
+          If this parameter is true, the <def>Right Ascension</def>, and the 
+          <def>Declination</def> will be calculated for every pixel and each will be placed into
+          their respective bands in the output cube. The output cube labels will contain 
+          "Right Ascension" and "Declination" in the BandBin group, in the band sequence of the 
+          output file. Right Ascension and Declination are in degrees.
+        </description>
+      </parameter>
+      <parameter name="PLANETOCENTRICLATITUDE">
+        <type>boolean</type>
+        <default><item>TRUE</item></default>
+        <brief>Create a Planetocentic Latitude band</brief>
+        <description>
+	  If this parameter is true, the <def>Planetocentric Latitude</def> value will be computed for 
+          every pixel and placed in a band in the output cube.  The output cube 
+          labels will contain "Planetocentric Latitude" in the BandBin group, in band sequence
+          of the output file. Planetocentric Latitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="PLANETOGRAPHICLATITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Planetographic Latitude band</brief>
+        <description>
+	  If this parameter is true, the <def>Planetographic Latitude</def> value will be computed for 
+          every pixel and placed in a band in the output cube.  The output cube 
+          labels will contain "Planetographic Latitude" in the BandBin group, in band sequence
+          of the output file. Planetographic Latitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="POSITIVEEAST360LONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Positive East 360 Longitude band</brief>
+        <description>
+	  If this parameter is true, the <def>Positive East 360 Longitude</def> value will be computed for 
+          every pixel placed in a band in the output cube.  The output cube 
+          labels will contain "Positive East 360 Longitude" in the BandBin group, in band 
+          sequence of the output file. Positive East 360 Longitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="POSITIVEEAST180LONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Positive East 180 Longitude band</brief>
+        <description>
+          If this parameter is true, the <def>Positive East 180 Longitude</def> value will be computed for 
+          every pixel placed in a band in the output cube.  The output cube 
+          labels will contain "Positive East 180 Longitude" in the BandBin group, in band 
+          sequence of the output file. Positive East 180 Longitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="POSITIVEWEST360LONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Positive West 360 Longitude band</brief>
+        <description>
+          If this parameter is true, the <def>Positive West 360 Longitude</def> value will be computed for 
+          every pixel placed in a band in the output cube.  The output cube 
+          labels will contain "Positive West 360 Longitude" in the BandBin group, in band 
+          sequence of the output file. Positive West 360 Longitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="POSITIVEWEST180LONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Positive West 180 Longitude band</brief>
+        <description>
+          !If this parameter is true, the <def>Positive West 180 Longitude</def> value will be computed for 
+          every pixel placed in a band in the output cube.  The output cube 
+          labels will contain "Positive West 180 Longitude" in the BandBin group, in band 
+          sequence of the output file. Positive West 180 Longitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="BODYFIXED">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create bands for the X, Y, and Z Body Fixed Coordinates</brief>
+        <description>
+          If this parameter is true, the <def>Body Fixed Coordinates</def> will be calculated for
+          every pixel and the values for X, Y, and Z will each be placed into their own bands in 
+          the output cube. The output cube labels will contain "Body Fixed X", "Body Fixed Y", 
+          and "Body Fixed Z" in the BandBin group, in the band sequence of the output file. 
+          Body Fixed Coordinates are in kilometers.
+        </description>
+      </parameter>
+      <parameter name="LOCALRADIUS">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Local Radius band</brief>
+        <description>
+          If this parameter is true, the <def>Local Radius</def> will be calculated for
+          every pixel and the values for X, Y, and Z will each be placed in a band in  
+          the output cube. The output cube labels will contain "Local Radius" in the BandBin group, 
+          in the band sequence of the output file. Local Radius is in meters.
+        </description>
+      </parameter>
+      <parameter name="PIXELRESOLUTION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Pixel Resolution band</brief>
+        <description>
+          If this parameter is true, the <def>Pixel Resolution</def>
+          will be computed for every pixel and placed in a band in the output 
+          cube.  The output cube labels will contain "Pixel Resolution" in the 
+          BandBin group, in band sequence of the output file. PixelResolution 
+          is in meters.
+        </description>
+      </parameter>
+      <parameter name="LINERESOLUTION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Line Resolution band</brief>
+        <description>
+          If this parameter is true, the <def>Line Resolution</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Line Resolution" in the BandBin 
+          group, in band sequence of the output file. LineResolution is in meters.
+        </description>
+      </parameter>
+      <parameter name="SAMPLERESOLUTION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Sample Resolution band</brief>
+        <description>
+          If this parameter is true, the <def>Sample Resolution</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Sample Resolution" in the 
+          BandBin group, in band sequence of the output file. SampleResolution 
+          is in meters.
+       </description>
+      </parameter>
+      <parameter name="DETECTORRESOLUTION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Detector Resolution band</brief>
+        <description>
+          If this parameter is true, the <def>Detector Resolution</def> will be 
+          computed for every pixel and placed in a band in the output cube.  The 
+          output cube labels will contain "Detector Resolution" in the BandBin 
+          group, in band sequence of the output file. DetectorResolution is 
+          in millimeters.
+        </description>
+      </parameter>
+      <parameter name="SPACECRAFTPOSITION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create bands for the X, Y, and Z Spacecraft Position</brief>
+        <description>
+          If this parameter is true, the <def>Spacecraft Position</def> will be calculated for
+          every pixel and the values for X, Y, and Z will each be placed into their own bands in 
+          the output cube. The output cube labels will contain "Spacecraft Position X", 
+          "Spacecraft Position Y", and "Spacecraft Position Z" in the BandBin group, in the band 
+          sequence of the output file. Spacecraft Position is in body-fixed frame kilometer units.
+        </description>
+      </parameter>
+      <parameter name="SPACECRAFTAZIMUTH">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Spacecraft Azimuth band</brief>
+        <description>
+          If this parameter is true, the <def>Spacecraft Azimuth</def>  will 
+          be computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Spacecraft Azimuth" in the 
+          BandBin group, in band sequence of the output file. SpacecraftAzimuth 
+          is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SLANTDISTANCE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Slant Distance band</brief>
+        <description>
+          If this parameter is true, the <def>Slant Distance</def> will be calculated for
+          every pixel and place in a band in the output cube. The output cube labels will contain 
+          "Slant Distance", in the BandBin group, in the band sequence of the output file. 
+          Slant Distance is reported in kilometers.
+        </description>
+      </parameter>
+      <parameter name="TARGETCENTERDISTANCE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Target Center Distance band</brief>
+        <description>
+          If this parameter is true, the <def>Target Center Distance</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Target Center Distance" in the BandBin 
+          group, in band sequence of the output file. Target Center Distance is 
+          in kilometers.
+        </description>
+      </parameter>
+      <parameter name="SUBSPACECRAFTLATITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a SubSpacecraft Latitude band</brief>
+        <description>
+          If this parameter is true, the <def>SubSpacecraft Latitude</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "SubSpacecraft Laitiude" in the BandBin 
+          group, in band sequence of the output file. SubSpacecraft Latitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SUBSPACECRAFTLONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a SubSpacecraft Longitude band</brief>
+        <description>
+          If this parameter is true, the <def>SubSpacecraft Longitude</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "SubSpacecraft Longitude" in the BandBin 
+          group, in band sequence of the output file. SubSpacecraft Longitude is 
+          in degrees.
+        </description>
+      </parameter>
+      <parameter name="SPACECRAFTALTITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Spacecraft Altitude band</brief>
+        <description>
+          If this parameter is true, the <def>Spacecraft Altitude</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Spacecraft Altitude" in the BandBin 
+          group, in band sequence of the output file. Spacecraft Altitude is 
+          in kilometers.
+        </description>
+      </parameter>
+      <parameter name="OFFNADIRANGLE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create an Off Nadir Angle band</brief>
+        <description>
+          If this parameter is true, the <def>Off Nadir Angle</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Off Nadir Angle" in the BandBin 
+          group, in band sequence of the output file. Off Nadir Angle is 
+          in degrees.
+        </description>
+      </parameter>
+      <parameter name="SUBSPACECRAFTGROUNDAZIMUTH">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a SubSpacecraft Ground Azimuth band</brief>
+        <description>
+          If this parameter is true, the <def>SubSpacecraft Ground Azimuth</def>
+          will be computed for every pixel and placed in a band in the output 
+          cube. The output cube labels  will contain "SubSpacecraft Ground
+          Azimuth" in the BandBin group, in band sequence of the output file. 
+          SubSpacecraftGround Azimuth is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SUNPOSITION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create bands for the X, Y, and Z of the Sun Position</brief>
+        <description>
+          If this parameter is true, the <def>Sun Position</def> will be calculated for
+          every pixel and the values for X, Y, and Z will each be placed into their own bands in 
+          the output cube. The output cube labels will contain "Sun Position X", 
+          "Sun Position Y", and "Sun Position Z" in the BandBin group, in the band 
+          sequence of the output file. Sun Position is in kilometers.
+        </description>
+      </parameter>
+      <parameter name="SUNAZIMUTH">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Sun Azimuth band</brief>
+        <description>
+          If this parameter is true, the <def>Sun Azimuth</def> will be computed 
+          for every pixel and placed in a band in the output cube.  The output 
+          cube labels will contain "Sun Azimuth" in the BandBin group, in band 
+          sequence of the output file. SunAzimuth is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SOLARDISTANCE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Solar Distance band</brief>
+        <description>
+          If this parameter is true, the <def>Solar Distance</def> will be computed 
+          for every pixel and placed in a band in the output cube.  The output 
+          cube labels will contain "Solar Distance" in the BandBin group, in band 
+          sequence of the output file. Solar Distance is in astronomical units.
+        </description>
+      </parameter>
+      <parameter name="SUBSOLARLATITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a SubSolar Latitude band</brief>
+        <description>
+          If this parameter is true, the <def>SubSolar Latitude</def> will be computed 
+          for every pixel and placed in a band in the output cube.  The output 
+          cube labels will contain "SubSolar Latitude" in the BandBin group, in band 
+          sequence of the output file. SubSolar Latitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SUBSOLARLONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a SubSolar Longitude band</brief>
+        <description>
+          If this parameter is true, the <def>SubSolar Longitude</def> will be computed 
+          for every pixel and placed in a band in the output cube.  The output 
+          cube labels will contain "SubSolar Longitude" in the BandBin group, in band 
+          sequence of the output file. SubSolar Longitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SUBSOLARGROUNDAZIMUTH">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a SubSolar Ground Azimuth band</brief>
+        <description>
+          If this parameter is true, the <def>SubSolar Ground Azimuth</def>
+          will be computed for every pixel and placed in a band in the output 
+          cube.  The output cube labels will contain "Sub Solar Ground Azimuth"  
+          in the BandBin group, in band sequence of the output file.  
+          SubSolarGroundAzimuth is in degrees.
+        </description>
+      </parameter>
+      <parameter name="PHASE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Phase Angle band</brief>
+        <description>
+          If this parameter is true, the <def>Phase Angle</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Phase Angle" in the BandBin
+          group, in band sequence of the output file. Phase angles are in degrees.
+        </description>
+      </parameter>
+      <parameter name="EMISSION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create an Emission Angle band</brief>
+        <description>
+          If this parameter is true, the <def>Emission Angle</def> will be 
+          computed  for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Emission Angle" in the BandBin
+          group, in band sequence of the output file. Emission angles are in degrees. There are 
+          certain cases where the emission angle is over 90 degrees. This is allowed as there 
+          are processes that need these data. See main description for details.
+        </description>
+      </parameter>
+      <parameter name="INCIDENCE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create an Incidence Angle band</brief>
+        <description>
+          If this parameter is true, the <def>Incidence Angle</def> will be 
+          computed for every pixel and placed in a band in the output cube.  
+          The output cube labels will contain "Incidence Angle" in the BandBin
+          group, in band sequence of the output file. Incidence angles are in degrees. There are 
+          certain cases where the incidence angle is over 90 degrees. This is allowed as there 
+          are processes that need these data. See main description for details.
+        </description>
+      </parameter>
+      <parameter name="LOCALEMISSION">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Local Emission Angle band</brief>
+        <description>
+          If this parameter is true, the <def link="local emission angle"
+          >Local Emission Angle</def>  will be computed for every pixel 
+          and placed in a band in the output cube.  The output cube labels 
+          will contain "Local Emission Angle" in the BandBin group, in band
+          sequence of the output file. LocalEmissionAngle is in degrees. There are certain
+          cases where the local emission angle is over 90 degrees. This is allowed as there 
+          are processes that need these data. See main description for details.
+        </description>
+      </parameter>
+      <parameter name="LOCALINCIDENCE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Local Incidence Angle band</brief>
+        <description>
+          If this parameter is true, the <def link="Local Incidence Angle">Local 
+          Incidence Angle</def> will be computed for every pixel and placed in 
+          a band in the output cube.  The output cube labels will contain 
+          "Local Incidence Angle" in the BandBin group, in band sequence  
+          of the output file. LocalIncidenceAngle is in degrees. There are certain
+          cases where the local incidence angle is over 90 degrees. This is allowed as there 
+          are processes that need these data. See main description for details.
+         </description>
+      </parameter>
+      <parameter name="NORTHAZIMUTH">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a North Azimuth band</brief>
+        <description>
+          If this parameter is true, the <def>North Azimuth</def> will be 
+          computed for every pixel and placed in a band in the output cube.  The 
+          output cube labels will contain "North  Azimuth" in the BandBin group,
+          in band sequence of the output file. NorthAzimuth is in degrees.
+        </description>
+      </parameter>
+      <parameter name="DISTORTEDFOCALPLANE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create bands for the X, and Y of the Distorted Focal Plane</brief>
+        <description>
+          If this parameter is true, the <def>Distorted Focal Plane</def> will be calculated for
+          every pixel and the values for X, and Y will each be placed into their own bands in 
+          the output cube. The output cube labels will contain "Distorted Focal Plane X", 
+          and "Distorted Focal Plane Y" in the BandBin group, in the 
+          band sequence of the output file. Distorted Focal Plane is in millimeters.
+        </description>
+      </parameter>
+      <parameter name="UNDISTORTEDFOCALPLANE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create bands for the X, Y, and Z of the Undistorted Focal Plane</brief>
+        <description>
+          If this parameter is true, the <def>Undistorted Focal Plane</def> will be calculated for
+          every pixel and the values for X, Y, and Z will each be placed into their own bands in 
+          the output cube. The output cube labels will contain "Undistorted Focal Plane X", 
+          "Undistorted Focal Plane Y", and "Undistorted Focal Plane Z" in the BandBin group, in the 
+          band sequence of the output file. Undistorted Focal Plane is in millimeters.
+        </description>
+      </parameter>
+      <parameter name="EPHEMERISTIME">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create an Ephemeris Time band</brief>
+        <description>
+          If this parameter is true, the <def>Ephemeris Time</def> will be 
+          computed for every pixel and placed in a band in the output cube.  The 
+          output cube labels will contain "Ephemeris Time" in the BandBin group,
+          in band sequence of the output file. Ephemeris is in seconds. 
+        </description>
+      </parameter>
+      <parameter name="UTC">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create an UTC band</brief>
+        <description>
+          If this parameter is true, the <def>UTC</def> will be 
+          computed for every pixel and placed in a band in the output cube.  The 
+          output cube labels will contain "UTC" in the BandBin group,
+          in band sequence of the output file. UTC format consists of year, month, day, hour,
+          minutes, and seconds, and is output in string format.
+        </description>
+      </parameter>
+      <parameter name="LOCALSOLARTIME">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Local Solar Time band</brief>
+        <description>
+          If this parameter is true, the <def>Local Solar Time</def> will be 
+          computed for every pixel and placed in a band in the output cube.  The 
+          output cube labels will contain "Local Solar Time" in the BandBin group,
+          in band sequence of the output file. Local Solar Time is in degrees.
+        </description>
+      </parameter>
+      <parameter name="SOLARLONGITUDE">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create a Solar Longitude band</brief>
+        <description>
+          If this parameter is true, the <def>Solar Longitude</def> will be 
+          computed for every pixel and placed in a band in the output cube.  The 
+          output cube labels will contain "Solar Longitude" in the BandBin group,
+          in band sequence of the output file. Solar Longitude is in degrees.
+        </description>
+      </parameter>
+      <parameter name="MORPHOLOGYRANK">
+         <type>boolean</type>
+         <default><item>FALSE</item></default>
+         <brief>Create a Morphology rank band, used for ranking images based on favorable local emission angles.</brief>
+         <description>
+           <p>
+             This band is computed from the <def link="Pixel Resolution">pixel resolution</def>
+             and <def link="Emission Angle">emission angle</def> using the following formula:<br />  
+             <br />MorphologyRank = PixelResolution / cos(EmissionAngle)<br /> <br />
+             The resulting output band can be used by <i>automos</i> to create a 
+             morphologyRank-based mosaic product.  This option uses the 
+             <def link="Local Emission Angle">local emission angle</def> if the input file
+             is initialized (spiceinit) with an elevation model (DEM); otherwise, it  
+             uses the default calculation (from the ellipsoid).  All computed cosines are 
+             tested for zero.  If the result is zero, then the value is set to a constant 
+             value very close to zero.
+           </p>
+           <p>
+             <dl>
+             <dt>
+               Append the following parameters to the <i>automos</i> command line to utilize this backplane band:
+             </dt>
+             <dd>
+               <b>priority=band type=keyword keyname=Name keyvalue=morphologyRank criteria=lesser</b>.
+             </dd>
+             </dl>  
+             See <i>automos</i> documentation for further details.
+           </p>
+         </description>
+      </parameter>
+      <parameter name="ALBEDORANK">
+        <type>boolean</type>
+        <default><item>FALSE</item></default>
+        <brief>Create an Albedo rank band, used for ranking images based on favorable emission and incidence angles.</brief>
+        <description>
+          <p>
+            This band is computed from the <def link="Pixel Resolution">pixel resolution</def>, 
+            <def link="Incidence Angle">incidence angle</def> and <def link="Emission Angle">emission angle</def> 
+            using the following formula:<br /><br /> 
+            AlbedoRank = PixelResolution * [(1 / cos(EmissionAngle)) + (1 / cos(IncidenceAngle))]<br /><br />
+            The resulting output band can be used by <i>automos</i> to create an albedoRank-based
+            mosaic product.  This option always uses the  
+            <def link="Local Emission Angle">local emission angle</def>  and 
+            <def link="Local Incidence Angle">local incidence angle</def> if the input file
+            is initialized (spiceinit) with an elevation model (DEM); otherwise, it  
+            uses the default calculation (from the ellipsoid).  All computed cosines are 
+            tested for zero.  If the result is zero, then the value is set to a constant 
+            value very close to zero.
+          </p>
+          <p>
+            <dl>
+            <dt>
+              Append the following parameters to the <i>automos</i> command line to utilize this backplane band:
+            </dt>
+            <dd>
+            <b>priority=band type=keyword keyname=Name keyvalue=albedoRank 
+              criteria=lesser</b>.  
+            </dd>
+            </dl>  
+            See <i>automos</i> documentation for further details.
+          </p>
+        </description>
+      </parameter>
+     </group>
+   </groups>
+  
+</application>
diff --git a/isis/src/dev/apps/camdev/tsts/Makefile b/isis/src/dev/apps/camdev/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/dev/apps/camdev/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/dev/apps/camdev/tsts/all/Makefile b/isis/src/dev/apps/camdev/tsts/all/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6e9579fe1480cf5c02244055f2c023ea48d64015
--- /dev/null
+++ b/isis/src/dev/apps/camdev/tsts/all/Makefile
@@ -0,0 +1,53 @@
+APPNAME = camdev
+
+# 1.52587890625e-05
+all_camdev_bands.cub.TOLERANCE = .0000153
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	 $(APPNAME) from=$(INPUT)/camdevInput.cub \
+	  to=$(OUTPUT)/all_camdev_bands.cub \
+	  dn=yes \
+	  radec=yes \
+	  planetographiclatitude=yes \
+	  positiveeast360longitude=yes \
+	  positiveeast180longitude=yes \
+	  positivewest360longitude=yes \
+	  positivewest180longitude=yes \
+	  bodyfixed=yes \
+	  localradius=yes \
+	  pixelresolution=yes \
+	  lineresolution=yes \
+	  sampleresolution=yes \
+	  detectorresolution=yes \
+	  spacecraftposition=yes \
+	  spacecraftazimuth=yes \
+	  slantdistance=yes \
+	  targetcenterdistance=yes \
+	  subspacecraftlatitude=yes \
+	  subspacecraftlongitude=yes \
+	  spacecraftaltitude=yes \
+	  offnadirangle=yes \
+	  subspacecraftgroundazimuth=yes \
+	  sunposition=yes \
+	  sunazimuth=yes \
+	  solardistance=yes \
+	  subsolarlatitude=yes \
+	  subsolarlongitude=yes \
+	  subsolargroundazimuth=yes \
+	  phase=yes \
+	  emission=yes \
+	  incidence=yes \
+	  localemission=yes \
+	  localincidence=yes \
+	  northazimuth=yes \
+	  distortedfocalplane=yes \
+	  undistortedfocalplane=yes \
+	  ephemeristime=yes \
+	  utc=yes \
+	  localsolartime=yes \
+	  solarlongitude=yes \
+	  morphology=yes \
+	  albedo=yes > /dev/null; 
+	  $(RM) print.prt > /dev/null;
\ No newline at end of file
diff --git a/isis/src/dev/apps/camdev/tsts/projected/Makefile b/isis/src/dev/apps/camdev/tsts/projected/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d0f7851be5601e839697fb0aee12d6a968eb5a0e
--- /dev/null
+++ b/isis/src/dev/apps/camdev/tsts/projected/Makefile
@@ -0,0 +1,21 @@
+APPNAME = camdev
+
+# 1.52587890625e-05
+camdev_projected_bands.cub.TOLERANCE = .0000153
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	 $(APPNAME) from=$(INPUT)/camdevProjectedInput.cub \
+	  to=$(OUTPUT)/camdev_projected_bands.cub \
+	  source=projection \
+	  dn=yes \
+	  radec=yes \
+	  positiveeast360longitude=yes \
+	  pixelresolution=yes \
+	  spacecraftposition=yes \
+	  distortedfocalplane=yes \
+	  undistortedfocalplane=yes \
+	  ephemeristime=yes \
+	  utc=yes > /dev/null;
+	  $(RM) print.prt > /dev/null;
\ No newline at end of file
diff --git a/isis/src/dev/apps/camtest/Makefile b/isis/src/dev/apps/camtest/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/dev/apps/camtest/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/dev/apps/camtest/camtest.cpp b/isis/src/dev/apps/camtest/camtest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4484d7054e8d66b935f8169c0f6bcd690ad2710f
--- /dev/null
+++ b/isis/src/dev/apps/camtest/camtest.cpp
@@ -0,0 +1,203 @@
+#include "Isis.h"
+#include "ProcessByLine.h"
+#include "Camera.h"
+#include "SpecialPixel.h"
+#include "Pvl.h"
+
+using namespace std;
+using namespace Isis;
+
+// Globals and prototypes
+
+//void doIt(Buffer &in, Buffer &out);
+
+enum OutputType {
+  Lat,
+  Lon,
+  Err,
+  Samp,
+  Line
+};
+
+/**
+ * Functor for collecting camera statistics.
+ * 
+ * @author 2016-11-16 Jesse Mapel
+ * @internal
+ *   @history 2016-11-16 Original Version.
+ */
+class CamTestFunctor {
+public:
+  CamTestFunctor() {};
+  ~CamTestFunctor() {};  
+  void setCamera(Camera* cam);
+  void setOutType(OutputType outType);
+  void setResults(Statistics* results);
+  void operator()(Buffer &in, Buffer &out) const;
+  
+private:
+  Camera* m_cam;
+  OutputType m_outType;
+  Statistics* m_resultsStats;
+};
+
+void IsisMain() {
+  UserInterface &ui = Application::GetUserInterface();
+
+  ProcessByBrick p;
+
+  // Open the input cube
+  Cube *iCube = p.SetInputCube("FROM");
+  Camera *cam = iCube->camera();
+  p.SetOutputCube("TO");
+  
+  // Set to process by line
+  p.SetBrickSize(iCube->sampleCount(), 1, 1);
+  
+  IString format = ui.GetString("FORMAT");
+
+  OutputType outFormat = Lat;
+  if (format == "LAT") {
+    outFormat = Lat;
+  }
+  else if (format == "LON") {
+    outFormat = Lon;
+  }
+  else if (format == "ERR") {
+    outFormat = Err;
+  }
+  else if (format == "SAMP") {
+    outFormat = Samp;
+  }
+  else if (format == "LINE") {
+    outFormat = Line;
+  }
+
+  // Create process functor
+  CamTestFunctor func;
+  func.setCamera(cam);
+  func.setOutType(outFormat);
+  Statistics resultsStats;
+  func.setResults(&resultsStats);
+  
+  p.ProcessCube(func, false);
+  
+  // Collect results
+  PvlGroup results = PvlGroup("CamTestResults");
+  results += PvlKeyword("FailedConversionsToLatLong", toString(resultsStats.LrsPixels()));
+  results += PvlKeyword("FailedConversionsToSampleLine", toString(resultsStats.HrsPixels()));
+  results += PvlKeyword("SuccessfulConversions", toString(resultsStats.ValidPixels()));
+  if (outFormat == Err) {
+    results += PvlKeyword("Average", toString(resultsStats.Average()));
+    results += PvlKeyword("StandardDeviation", toString(resultsStats.StandardDeviation()));
+    results += PvlKeyword("Minimum", toString(resultsStats.Minimum()));
+    results += PvlKeyword("Maximum", toString(resultsStats.Maximum()));
+  }
+  
+  // Log output results
+  Application::Log(results);
+  
+  p.EndProcess();
+}
+
+// Functor Definitions
+  
+void CamTestFunctor::setCamera(Camera* cam) {
+  m_cam = cam;
+}
+
+void CamTestFunctor::setOutType(OutputType outType) {
+  m_outType = outType;
+}
+
+void CamTestFunctor::setResults(Statistics* resultsStats) {
+  m_resultsStats = resultsStats;
+}
+
+void CamTestFunctor::operator()(Buffer &in, Buffer &out) const {
+  if (in.Line() == 1) {
+    m_cam->SetBand(in.Band());
+  }
+
+  double line = in.Line();
+  for (int samp = 0; samp < in.SampleDimension(); samp++) {
+    double sample = in.Sample(samp);
+    if (!m_cam->SetImage(sample, line)) {
+      out[samp] = Lrs;
+      continue;
+    }
+
+    if (m_outType == Lat) {
+      out[samp] = m_cam->UniversalLatitude();
+    }
+    else if (m_outType == Lon) {
+      out[samp] = m_cam->UniversalLongitude();
+    }
+    else {
+      if (!m_cam->SetUniversalGround(m_cam->UniversalLatitude(), m_cam->UniversalLongitude())) {
+        out[samp] = Hrs;
+        continue;
+      }
+
+
+      if (m_outType == Samp) {
+        out[samp] = m_cam->Sample();
+      }
+      else if (m_outType == Line) {
+        out[samp] = m_cam->Line();
+      }
+      else {
+        double deltaS = m_cam->Sample() - sample;
+        double deltaL = m_cam->Line()   - line;
+        out[samp] = sqrt(deltaS * deltaS + deltaL * deltaL);
+      }
+
+    }
+  }
+  
+  m_resultsStats->AddData(out.DoubleBuffer(), out.size());
+}
+/* Old Processing Routine
+// Line processing routine
+void doIt(Buffer &in, Buffer &out) {
+  if(in.Line() == 1) {
+    cam->SetBand(in.Band());
+  }
+
+  double line = in.Line();
+  for(int samp = 0; samp < in.SampleDimension(); samp++) {
+    double sample = in.Sample(samp);
+    if(!cam->SetImage(sample, line)) {
+      out[samp] = Lrs;
+      continue;
+    }
+
+    if(OutputFormat == Lat) {
+      out[samp] = cam->UniversalLatitude();
+    }
+    else if(OutputFormat == Lon) {
+      out[samp] = cam->UniversalLongitude();
+    }
+    else {
+      if(!cam->SetUniversalGround(cam->UniversalLatitude(), cam->UniversalLongitude())) {
+        out[samp] = Hrs;
+        continue;
+      }
+
+
+      if(OutputFormat == Samp) {
+        out[samp] = cam->Sample();
+      }
+      else if(OutputFormat == Line) {
+        out[samp] = cam->Line();
+      }
+      else {
+        double deltaS = cam->Sample() - sample;
+        double deltaL = cam->Line()   - line;
+        out[samp] = sqrt(deltaS * deltaS + deltaL * deltaL);
+      }
+
+    }
+  }
+}
+*/
\ No newline at end of file
diff --git a/isis/src/dev/apps/camtest/camtest.xml b/isis/src/dev/apps/camtest/camtest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..127f220fd3ca4740af28fbe2ffb1ff98e0c0fb53
--- /dev/null
+++ b/isis/src/dev/apps/camtest/camtest.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="camtest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+  <brief>Perform basic camera accuracy tests</brief>
+
+  <description>
+      <strong>
+        This application is for camera development and is not supported for general public use.
+      </strong>
+
+      This program will do basic tests for new camera models.  There are calls 
+      to SetImage(sample, line) and SetUniversalGround(lat, lon) that are used 
+      to test translations from image coordinates to geometric coordinates and 
+      back.  Either one of these calls can fail and are indicated by unique 
+      special pixel values.  If a call to SetImage(sample, line) fails, the 
+      output image is set to the Low Representation Saturation (Lrs) special 
+      value.  Failures in calls to SetUniversalGround(lat, lon) are set to High 
+      Representation Saturation (Hrs) value.  The number of pixels for which
+      SetImage(sample, line) fails is output as FailedConversionsToLatLong.
+      The number of pixels for which SetImage(sample, line) succeeded but then
+      SetUniversalGround(lat, lon) failed is output as
+      FailedConversionsToSampleLine.  If ERROR is chosen for FORMAT, then
+      statistics on the error will also be output.
+    </description>
+
+  <category>
+    <categoryItem>System</categoryItem>
+  </category>
+
+  <history>
+    <change name="Steven Lambright" date="2009-02-06">
+      Original Version
+    </change>
+    <change name="Steven Lambright" date="2009-06-11">
+      Now tests the center of each pixel instead
+        of edges - this upset pushframe tests a lot and
+        produced inaccurate results.
+    </change>
+      <change name="Kris Becker" date="2011-02-16">
+          Corrected a bug where the sample was off by one (used as a 0-based 
+          index instead of 1-based);  Set failures in calls to SetImage (Lrs) 
+          and SetUniversalGround (Hrs) to special pixel values so they are 
+          distinguishable.  Documented this behaviour.
+      </change>
+      <change name="Jesse Mapel" date="2016-03-25">
+	Now outputs statistics on the number of failed calls to SetImage and
+	SetUniversalGround.  For FROMAT=ERROR, statistics on the
+	error are also output.
+      </change>
+  </history>
+
+  <groups>
+    <group name="Files">
+      <parameter name="FROM">
+        <type>cube</type>
+        <fileMode>input</fileMode>
+        <brief>
+          Input cube
+        </brief>
+        <description>
+  	      The cube which needs to be tested
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+
+      <parameter name="TO">
+        <type>cube</type>
+        <pixelType>real</pixelType>
+        <fileMode>output</fileMode>
+        <brief>
+          Output cube
+        </brief>
+        <description>
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+    </group>
+
+    <group name="Options">
+      <parameter name="FORMAT">
+        <type>string</type>
+        <brief>Units of the output cube</brief>
+        <description>
+        </description>
+        <default>
+          <item>ERR</item>
+        </default>
+        <list>
+          <option value="LAT">
+            <brief>Output latitudes</brief>
+            <description>Output is latitudes; NULL if SetImage(samp,line) failed</description>
+          </option>
+          <option value="LON">
+            <brief>Output universal longitudes</brief>
+            <description>Output is universal longitudes; NULL if SetImage(samp,line) failed</description>
+          </option>
+          <option value="ERR">
+            <brief>Output sample/line errors</brief>
+            <description>
+              SetImage(s,l) will return a (lat,lon). This (lat,lon) will be passed into SetUniversalGround(lat,lon).
+              The output is the distance from the input (sample,line) and the resulting (sample,line) after the
+              SetUniversalGround(lat,lon) call. This tests how accurate the camera model converts l,s->lat,lon->l,s
+            </description>
+          </option>
+          <option value="SAMP">
+            <brief>Output sample</brief>
+            <description>
+              SetImage(s,l) will return a (lat,lon). This (lat,lon) will be passed into SetUniversalGround(lat,lon).
+              The output is the resulting sample after the
+              SetUniversalGround(lat,lon) call.
+            </description>
+          </option>
+          <option value="LINE">
+            <brief>Output sample</brief>
+            <description>
+              SetImage(s,l) will return a (lat,lon). This (lat,lon) will be passed into SetUniversalGround(lat,lon).
+              The output is the resulting line after the
+              SetUniversalGround(lat,lon) call.
+            </description>
+          </option>
+        </list>
+      </parameter>
+    </group>
+  </groups>
+</application>
diff --git a/isis/src/dev/apps/camtest/tsts/Makefile b/isis/src/dev/apps/camtest/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/dev/apps/camtest/tsts/dummy/Makefile b/isis/src/dev/apps/camtest/tsts/dummy/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..c9005c3a648d5d24233509a857d7f11687e07cd0
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/dummy/Makefile
@@ -0,0 +1,8 @@
+APPNAME = camtest
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	echo "This program has a dummy test to prevent " \
+	     "errors on camera model changes, and because" \
+	     "this program is only for internal testing." > $(OUTPUT)/truth.txt;
diff --git a/isis/src/dev/apps/camtest/tsts/error/Makefile b/isis/src/dev/apps/camtest/tsts/error/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8b6b8c885fe412c004c63d121bd7238b31092ba5
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/error/Makefile
@@ -0,0 +1,19 @@
+APPNAME = camtest
+
+camtestTruth.cub.TOLERANCE = 1.0e-10
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \
+	  to= $(OUTPUT)/camtestTruth.cub \
+	  format="ERR" \
+	  -log=$(OUTPUT)/results.pvl > /dev/null; \
+	  FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \
+	  STARTLINE=`expr "$$FIRST" - 1`; \
+	  `cat $(OUTPUT)/results.pvl  | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \
+	  LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \
+	  ENDLINE=`expr "$$LASTLINE" + 1`; \
+	  EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \
+	  `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \
+	  $(RM) $(OUTPUT)/temp.pvl;
diff --git a/isis/src/dev/apps/camtest/tsts/latitude/Makefile b/isis/src/dev/apps/camtest/tsts/latitude/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..c1510a900cb6f289ded0568695617bca64b6e4df
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/latitude/Makefile
@@ -0,0 +1,17 @@
+APPNAME = camtest
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \
+	  to= $(OUTPUT)/camtestTruth.cub \
+	  format="LAT" \
+	  -log=$(OUTPUT)/results.pvl > /dev/null; \
+	  FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \
+	  STARTLINE=`expr "$$FIRST" - 1`; \
+	  `cat $(OUTPUT)/results.pvl  | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \
+	  LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \
+	  ENDLINE=`expr "$$LASTLINE" + 1`; \
+	  EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \
+	  `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \
+	  $(RM) $(OUTPUT)/temp.pvl;
diff --git a/isis/src/dev/apps/camtest/tsts/line/Makefile b/isis/src/dev/apps/camtest/tsts/line/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e266fbd7264295f2922057488e1a576228ab946f
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/line/Makefile
@@ -0,0 +1,18 @@
+APPNAME = camtest
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \
+	  to= $(OUTPUT)/camtestTruth.cub \
+	  format="LINE" \
+	  -log=$(OUTPUT)/results.pvl > /dev/null; \
+	  FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \
+	  STARTLINE=`expr "$$FIRST" - 1`; \
+	  `cat $(OUTPUT)/results.pvl  | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \
+	  LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \
+	  ENDLINE=`expr "$$LASTLINE" + 1`; \
+	  EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \
+	  `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \
+	  $(RM) $(OUTPUT)/temp.pvl;
+
diff --git a/isis/src/dev/apps/camtest/tsts/longitude/Makefile b/isis/src/dev/apps/camtest/tsts/longitude/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e1baa2e3ab4d0b5c602b1a8e45d0e34791a4b1cb
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/longitude/Makefile
@@ -0,0 +1,18 @@
+APPNAME = camtest
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \
+	  to= $(OUTPUT)/camtestTruth.cub \
+	  format="LON" \
+	  -log=$(OUTPUT)/results.pvl > /dev/null; \
+	  FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \
+	  STARTLINE=`expr "$$FIRST" - 1`; \
+	  `cat $(OUTPUT)/results.pvl  | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \
+	  LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \
+	  ENDLINE=`expr "$$LASTLINE" + 1`; \
+	  EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \
+	  `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \
+	  $(RM) $(OUTPUT)/temp.pvl;
+
diff --git a/isis/src/dev/apps/camtest/tsts/sample/Makefile b/isis/src/dev/apps/camtest/tsts/sample/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..ed195ab9479a4131e79e507757af4e6a46065a15
--- /dev/null
+++ b/isis/src/dev/apps/camtest/tsts/sample/Makefile
@@ -0,0 +1,18 @@
+APPNAME = camtest
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \
+	  to= $(OUTPUT)/camtestTruth.cub \
+	  format="SAMP" \
+	  -log=$(OUTPUT)/results.pvl > /dev/null; \
+	  FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \
+	  STARTLINE=`expr "$$FIRST" - 1`; \
+	  `cat $(OUTPUT)/results.pvl  | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \
+	  LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \
+	  ENDLINE=`expr "$$LASTLINE" + 1`; \
+	  EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \
+	  `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \
+	  $(RM) $(OUTPUT)/temp.pvl;
+
diff --git a/isis/src/dev/apps/m3loc2net/Makefile b/isis/src/dev/apps/m3loc2net/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/dev/apps/m3loc2net/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/dev/apps/m3loc2net/m3loc2net.cpp b/isis/src/dev/apps/m3loc2net/m3loc2net.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3f923128ef6a43621cbb1f86837e1e9335a1ebec
--- /dev/null
+++ b/isis/src/dev/apps/m3loc2net/m3loc2net.cpp
@@ -0,0 +1,129 @@
+#include "Isis.h"
+
+#include "Brick.h"
+#include "Camera.h"
+#include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
+#include "Cube.h"
+#include "Distance.h"
+#include "ID.h"
+#include "IException.h"
+#include "Latitude.h"
+#include "Longitude.h"
+#include "Progress.h"
+#include "SerialNumber.h"
+#include "SpecialPixel.h"
+#include "SurfacePoint.h"
+#include "UserInterface.h"
+
+using namespace std;
+using namespace Isis;
+
+void IsisMain() {
+
+  UserInterface &ui = Application::GetUserInterface();
+
+  ControlNet cnet;
+  if (ui.WasEntered("NETWORKID")) {
+    cnet.SetNetworkId(ui.GetString("NETWORKID"));
+  }
+  if (ui.WasEntered("DESCRIPTION")) {
+    cnet.SetDescription(ui.GetString("DESCRIPTION"));
+  }
+  cnet.SetUserName(Application::Name());
+
+  QString filename = ui.GetFileName("FROM");
+  Cube inputCube;
+  inputCube.open(filename, "r");
+
+  QString locFilename = ui.GetFileName("LOC");
+  Cube locCube;
+  locCube.open(locFilename, "r");
+
+  if (inputCube.label()->hasKeyword("TargetName", PvlObject::Traverse)) {
+    PvlGroup inst = inputCube.label()->findGroup("Instrument", PvlObject::Traverse);
+    QString targetName = inst["TargetName"];
+    cnet.SetTarget(targetName);
+  }
+  else {
+    QString msg = "Input cube does not have target.";
+    throw IException(IException::User, msg, _FILEINFO_);
+  }
+
+  //  Create serial number list
+  QString serialNumber = SerialNumber::Compose(inputCube);
+
+  int sampInc = ui.GetInteger("SAMPLEINC");
+  int lineInc = ui.GetInteger("LINEINC");
+
+  // Set up an automatic id generator for the point ids
+  ID pointId = ID(ui.GetString("POINTID"));
+
+//Progress gridStatus;
+//
+//int maxSteps = (inputCube.sampleCount() / sampInc + 1) * (inputCube.lineCount() / lineInc + 1)+100;
+//
+//if (maxSteps > 0) {
+//  gridStatus.SetMaximumSteps(maxSteps);
+//  gridStatus.SetText("Creating Ground Points");
+//  gridStatus.CheckStatus();
+//}
+
+  //  Set up brick to read a line from the LOC file
+  Brick locBrick(locCube, locCube.sampleCount(), 1, 3);
+
+  for (int line = 0; line < inputCube.lineCount(); line += lineInc) {
+    locBrick.SetBasePosition(1, line + 1, 1);
+    locCube.read(locBrick);
+    for (int samp = 0; samp < inputCube.sampleCount(); samp += sampInc) {
+      qDebug()<<"samp : line = "<<samp<<" : "<<line;
+      ControlPoint *point = new ControlPoint(pointId.Next());
+      point->SetId(pointId.Next());
+      point->SetType(ControlPoint::Fixed);
+      double lon = locBrick.at(samp);
+      double lat = locBrick.at(locCube.sampleCount() + samp);
+      double radius = locBrick.at((locCube.sampleCount() * 2) + samp);
+
+      if (!IsValidPixel(lon) || !IsValidPixel(lat) || !IsValidPixel(radius)) {
+        continue;
+      }
+
+      try {
+        SurfacePoint pt(Latitude(lat, Angle::Degrees),
+                        Longitude(lon, Angle::Degrees),
+                        Distance(radius, Distance::Meters));
+        point->SetAprioriSurfacePoint(pt);
+      }
+      catch (IException &e) {
+        continue;
+      }
+
+      ControlMeasure *measure = new ControlMeasure;
+      measure->SetCubeSerialNumber(serialNumber);
+      measure->SetCoordinate(samp + 1, line + 1);
+      measure->SetType(ControlMeasure::Candidate);
+      measure->SetDateTime();
+      measure->SetChooserName(Application::Name());
+      point->Add(measure);
+
+      cnet.AddPoint(point);
+
+      //  Make sure last sample is always included
+      if ((samp != (inputCube.sampleCount() - 1)) && ((samp + sampInc) >= inputCube.sampleCount())) {
+        samp = inputCube.sampleCount() - sampInc - 1;
+        qDebug()<<"lastSamp = "<<samp;
+      }
+ 
+//      gridStatus.CheckStatus();
+    }
+    //  Make sure last line is always included
+    if ((line != (inputCube.lineCount() - 1)) && ((line + lineInc) >= inputCube.lineCount())) {
+      line = inputCube.lineCount() - lineInc - 1;
+      qDebug()<<"lastLine = "<<line;
+    }
+  }
+
+  cnet.Write(ui.GetFileName("ONET"));
+}
+
diff --git a/isis/src/dev/apps/m3loc2net/m3loc2net.xml b/isis/src/dev/apps/m3loc2net/m3loc2net.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03a81a56f7ea6dd9ff7423c2c4c77ef6ca76d992
--- /dev/null
+++ b/isis/src/dev/apps/m3loc2net/m3loc2net.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="m3loc2net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+
+  <brief>
+    Creates a control network containing ground points either using a Chandrayaan LOC file
+    or the image camera for lat/lon/radii values.
+  </brief>
+
+  <description>
+    <p>
+      <strong>
+        This application is for camera development and is not supported for general public use.
+      </strong>
+
+      This program creates a control network containing ground points using
+      either the Chandrayaan LOC file or the image camera for latitute, longitude
+      and radii values.
+    </p>
+  </description>
+
+<category>
+  <categoryItem>Control Networks</categoryItem>
+</category>
+
+<history>
+  <change name="Tracie Sucharski" date="2013-07-19">
+    Original version
+  </change>
+  <change name="Tracie Sucharski" date="2014-04-17">
+    Make sure control points are always included for last line and last sample in cube.
+  </change>
+</history>
+
+<groups>
+  <group name="Files">
+    <parameter name="FROM">
+      <type>cube</type>
+      <brief>
+        Level 1 cube
+      </brief>
+      <description>
+        Ground point will be created for this cube
+      </description>
+      <filter>
+        *.cub
+      </filter>
+    </parameter>
+    <parameter name="LOC">
+      <type>cube</type>
+      <brief>
+        Chandrayaan M3 Location cube
+      </brief>
+      <description>
+        Chandrayaan M3 Location cube containing 3 bands:  Longitude, Latitude, Radius
+      </description>
+      <filter>
+        *.cub
+      </filter>
+    </parameter>
+    <parameter name="ONET">
+      <type>filename</type>
+      <fileMode>output</fileMode>
+      <brief>
+      Output control network
+      </brief>
+      <description>
+      This file will contain the control network that is created.
+      </description>
+    </parameter>
+  </group>
+
+  <group name="Control Point Spacing">
+    <parameter name="SAMPLEINC">
+      <type>integer</type>
+      <brief>
+        Sample Increment
+      </brief>
+      <description>
+        Sample Increment
+      </description>
+    </parameter>
+    <parameter name="LINEINC">
+      <type>integer</type>
+      <brief>
+        Line  Increment
+      </brief>
+      <description>
+        Line Increment
+      </description>
+    </parameter>
+  </group>
+
+  <group name="Control Net Information">
+    <parameter name="NETWORKID">
+      <type>string</type>
+      <brief>
+        Name of this control network
+      </brief>
+      <description>
+        The ID or name of the control network that is created. This string
+        should be unique.
+      </description>
+      <internalDefault>
+      No Id
+      </internalDefault>
+    </parameter>
+
+    <parameter name="POINTID">
+      <type>string</type>
+      <brief>
+        The pattern to be used to create point ids
+      </brief>
+      <description>
+        A string with one and only one set of question marks ("?").
+        This string will be used to create unique IDs for each control
+        point created by this program. The question marks will be replaced
+        with a number beginning with zero. For example the pattern
+        "User????" would create point IDs "User0001" through
+        "User9999". Note: Make sure there are enough "?"s for all the
+        control points that may be created during this run. If all question
+        marks are exausted the program will throw an error.
+      </description>
+    </parameter>
+
+    <parameter name="DESCRIPTION">
+      <type>string</type>
+      <brief>
+        The description of the network
+      </brief>
+      <description>
+        A string describing the purpose of this control network. For
+        example, a description might be "LROC NAC MareSmythii GRID NETWORK".
+        This description indicates that the control network is for the LROC
+        mission using the narrow angle camera instrument, and the feature of
+        interest is Mare Smythii. The description string can be literally
+        anything, but it is helpful to make it something that is descriptive
+        of the control network.
+      </description>
+      <internalDefault>
+      No Description
+      </internalDefault>
+    </parameter>
+  </group>
+</groups>
+</application>
diff --git a/isis/src/dev/apps/m3loc2net/tsts/Makefile b/isis/src/dev/apps/m3loc2net/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/dev/apps/m3loc2net/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/dev/apps/m3loc2net/tsts/dummy/Makefile b/isis/src/dev/apps/m3loc2net/tsts/dummy/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..3b53d5ae8e4f9d52991b3164bdae835c79a880df
--- /dev/null
+++ b/isis/src/dev/apps/m3loc2net/tsts/dummy/Makefile
@@ -0,0 +1,6 @@
+APPNAME = m3loc2net
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	echo "This program has a dummy test for now " > $(OUTPUT)/truth.txt;
diff --git a/isis/src/docsys/build/ApiChanges.xsl b/isis/src/docsys/build/ApiChanges.xsl
index db4967d4ae6ce5dcc8740e26673dae0329106c06..22cd520aa2a6d57c0e105bb380bd3926811147ce 100644
--- a/isis/src/docsys/build/ApiChanges.xsl
+++ b/isis/src/docsys/build/ApiChanges.xsl
@@ -106,7 +106,7 @@
       <type>HTML</type>
 
       <source>
-        <filename>ParameterChanges.html</filename>
+        <filename>ApiChanges.html</filename>
       </source>
     </file>
   </files>
diff --git a/isis/src/docsys/build/Installation.xsl b/isis/src/docsys/build/Installation.xsl
index 3aa6dce7d288fb4de476da528c20cb1e77dc7d42..903869d97b249f76d1ad631f86981a64a0cc3407 100644
--- a/isis/src/docsys/build/Installation.xsl
+++ b/isis/src/docsys/build/Installation.xsl
@@ -103,12 +103,16 @@ Deborah Lee Soltesz
           </tr>
         </table>
 
-
       <p>
       See the <a href="../documents/InstallGuide/index.html">ISIS 3 Installation Guide</a>
       for instructions on downloading and installing ISIS 3.
       </p>
 
+      <p>
+      See the <a href="../documents/LegacyInstallGuide/index.html">Legacy ISIS 3 Installation Guide</a>
+      for instructions on downloading and installing versions of ISIS3 3.5.2 and earlier. 
+      </p>
+
       <p>
         Refer to the <a href="http://isis.astrogeology.usgs.gov/Isis2/isis-bin/installation.cgi">ISIS 2 Installation Guide</a>
       for instructions on downloading and installing ISIS 2.
diff --git a/isis/src/docsys/build/menu.xsl b/isis/src/docsys/build/menu.xsl
index 27f7dbca6d840558a881ecbd05ba2e8da26e94c0..a4d607b8a583d15824d78a34fdfafcb0757644f9 100644
--- a/isis/src/docsys/build/menu.xsl
+++ b/isis/src/docsys/build/menu.xsl
@@ -81,11 +81,11 @@ Deborah Lee Soltesz
     </div>
 
 
-    <hr/>
-        <h2>Search</h2>
+    <!-- <hr/>
+        <h2>Search</h2> -->
 
         <!-- search -->
-        <form name="seek1" method="get" action="http://search.usgs.gov/query.html" target="_top" style="padding-top:0px;margin-top:0px;">
+        <!-- <form name="seek1" method="get" action="http://search.usgs.gov/query.html" target="_top" style="padding-top:0px;margin-top:0px;">
           <table  style="width:150px;" align="center">
           <tr valign="top">
           <td>
@@ -118,9 +118,8 @@ Deborah Lee Soltesz
           </td>
           </tr>
           </table>
-        </form>
+        </form> -->
 
   </xsl:template>
 
 </xsl:stylesheet>
-
diff --git a/isis/src/docsys/documents/InstallGuide/InstallGuide.xml b/isis/src/docsys/documents/InstallGuide/InstallGuide.xml
index e6baa9a4d41bab1e0d40dfaae9f7ad4f78507746..f473584fd568eb0f6cad4cd55d294d76a00fd621 100644
--- a/isis/src/docsys/documents/InstallGuide/InstallGuide.xml
+++ b/isis/src/docsys/documents/InstallGuide/InstallGuide.xml
@@ -22,334 +22,187 @@ you must <em>not</em> upgrade the ISIS Data Files!!!
 </p>
 </div>
 -->
+  <h2>Overview</h2>
 
-        <h2>Overview</h2>
-
-        <h3>Operating System Requirements</h3>
-        <p>ISIS runs on many UNIX variants. ISIS does not run on MS Windows. The UNIX variants supported are listed here:</p>
-        <ul>
-         <li>Ubuntu</li>
-         <li>RHEL</li>
-         <li>Debian</li>
-         <li>Fedora</li>
-         <li>MacOSX</li>
-        </ul>
-
-         <h3>Hardware Requirements</h3>
-         <p>Here are the minimum hardware requirements</p>
-         <ul>
-         <li>64-bit (x86) processors</li>
-         <lI>2 GB memory</lI>
-         <li>10 GB to 180 GB disk space for ISIS installation</li>
-         <li>10 GB to many TB disk space for processing images</li>
-         <li>A quality graphics card</li>
-         </ul>
-	 <p>Note: More processors, memory, disk storage, and an additional graphcis card (to support the use of two monitors at
-	 one time) may be useful depending on the complexity of your processing requirements
-	 </p>
-
-         <h3>Mission Requirements</h3>
-         <p>ISIS supports many planetary missions; in fact, over 40 different instruments including some
-         flown as early
-         as the 1960s.  Ancillary data are required to process images from these instruments.  For example, translation
-         definition files to help convert from PDS format to ISIS cubes, dark current and flat file images for radiometric
-         calibration, and large quantities of SPICE files (spacecraft pointing and position) for map projecting images.
-         If you plan to work with data
-         from all missions, then the download will require about 180 GB for all the ancillary data.  However, most of this
-         volume is taken up by SPICE files.  We have a SPICE Web service that can be used in lieu of downloading all of the
-         SPICE files which can reduce the download size to 10 GB.  When downloading ISIS, you will have the option of
-         choosing which mission data to acquire as well as if you only want the translation and calibration files and not
-         SPICE files.
-         </p>
-
-         <h3>DTM Requirements</h3>
-         <p>ISIS strength lies in its capabilities for planetary cartography.
-         The image orthorectification process is improved if a digital
-         terrain model (DTM) is used.  The DTMs can be quite large and take some time to download.  They exist for
-         many planetary bodies (e.g., the Moon, Mars, etc.). Therefore, there are options for selecting which DTMs to download
-         if you are only working with a particular target body.
-         </p>
+  <p>
+    This installation guide is for ISIS3 users interested in installing ISIS3 (3.6.0)+ through conda.  
+    If you are a developer, we refer you to our <a href="https://github.com/USGS-Astrogeology/ISIS3">GitHub repository.</a>
+  </p>
 
-         <h2>Installation</h2>
 
-        <h3>Recommended Installation Process</h3>
-        <p>
-          ISIS 3 now features a downloadable Java-based installer.  The installer provides user options for choosing which mission
-          packages and target DEMs (e.g. Mars, Moon) to download. It also includes the sizes of the packages.   During the installation process,
-	  you can choose to use the ISIS SPICE Web service which will eliminate the need to download most of theSPICE data for a mission.
-        </p>
-        <p>
-          To run the installer, download the isisInstall.sh Bashscript from the link below and execute it.  This script will automatically fetch the most recent version of the installer and
-          launch it.  Depending on
-          your browser, you may need to right-click and select "Save Link As..."
-          to download:
+  <h3>ISIS3 Installation With Conda</h3>
+    <ol>
+      <li>Download either the Anaconda or Miniconda installation script for your OS platform.  Anaconda is a much larger distribtion of packages supporting scientific python, while Miniconda is a minimal installation and not as large: 
+      <a href="https://www.anaconda.com/download">Anaconda installer</a>, <a href="https://conda.io/miniconda.html">Miniconda installer</a></li>
+      <li>Open a terminal window in the directory where you downloaded the script, and run the following commands.  In this example, we chose to do a full install of Anaconda, and our OS is Linux-based.  Your file name may be different depending on your environment.</li>
         <pre>
-          <a href="assets/isisInstall.sh" target="_blank">Installation Script</a>
+          chmod +x Anaconda3-5.2.0-Linux-x86_64.sh
+          ./Anaconda3-5.2.0-Linux-x86_64.sh          
         </pre>
-          After downloading the script, open a terminal in the directory where
-          the script was installed.  Give the installation script executable
-          permissions and run it by typing the following:
-          <pre>
-            chmod +x isisInstall.sh
-            ./isisInstall.sh
-          </pre>
-          For additional options and help, give the script the <i>-h</i> option:
-          <pre>
-            ./isisInstall.sh -h
-          </pre>
-          This script has been written with the goal of never needing to be
-          updated.  However, after downloading and setting $ISISROOT, the latest
-          version of the installation script can be obtained at the following
-          location on your local machine:
-          <pre>
-            $ISISROOT/src/docsys/documents/InstallGuide/assets/isisInstall.sh
-          </pre>
-        </p>
-
-        <h3>Alternate Installation Process</h3>
-        <p>
-          If you are familiar with the UNIX rsync command and prefer to use the old installation information
-          follow this link:
-          <a href="#rsyncInstallation">Rsync Installation</a>
-        </p>
-
-
-
-       <h2>FAQs</h2>
-       <h3>I cannot connect to the rsync server</h3>
-       <p>
-         This is one of the biggest issues with downloading ISIS.  Most problems stem from a firewall restriction on
-         the user's side.   USGS has opened the rsync port to allow access to our server.  Your institution likely has
-         a firewall and may not allow the access to our rsync server.  Start by making sure you can connect to our
-         rsync server.  Type the following command:
-          <pre>
-            rsync isisdist.wr.usgs.gov::
-
-            or
-
-            rsync isisdist.astrogeology.usgs.gov::
-          </pre>
-          This should list the packages available for download.  If you do not receive this list then 1) either both of our servers
-          are down or 2) your firewall does not allow access.  In the former case please post a message on our
-          <a href="https://isis.astrogeology.usgs.gov/fixit">ISIS support board</a>.  In the latter case, see your local
-          system administrator.  </p>
-
-          <p>
-          You can also try an alternative port number that we have setup (port 80).  This is the
-          standard http port which is open through most firewalls.  However, some institutes have appliances that examine
-          this traffic and if it doesn't appear to look like web content disconnects or is so slow the download would take forever.
-       </p>
-       <p>
-          Example use of port 80:
-         <pre>rsync -azv --delete --partial --port=80 isisdist.astrogeology.usgs.gov::x86-64_linux_RHEL/isis .</pre>
-       </p>
-
-       <p>
-       If you are still running into problems you can try a different network path.  For example, you can try your home network to see if
-       you can make connections to our rsync server.
-    </p>
-
-
-    <h3>How do I know if the rsync commands were successful?</h3>
-    <p>
-      Unfortunately rsync sometimes hangs or does not complete because of dropped network connections.  The drops can happen
-      on your end, our end, or anywhere in between.  Keep rerunning rsync until the command completes.
-    </p>
-
-    <h3>How do I get updates to ISIS?</h3>
-    <p>
-    Just rerun the rsync commands or GUI installer (which uses rsync) again.  Rsync only acquires files that have changed or do not
-    exist in you installation.  The update process will typically be much faster than the original download.
-    </p>
-
-    <h3>How often do you update ISIS?</h3>
-    <p>
-      We update our mission data areas often (sometime nightly) as new SPICE files are provided by the active missions.  Our binaries (application programs) are updated
-      on a quarterly schedule.
-    </p>
-
-
-    <h3>How do I install ISIS 2?</h3>
-    <p>
-         If you are looking for ISIS 2, please
-        <a href="http://isis.astrogeology.usgs.gov/Isis2/isis-bin/installation.cgi">refer to the ISIS 2 Installation
-        Guide</a> for instructions on downloading and installing ISIS 2.
-    </p>
-
-        <p>
-        ISIS 3 and ISIS 2 will have collisions of executable names (e.g.,
-        pds2isis exists in both systems).  It is best to remove initializations
-        of ISIS 2 from your local startup file (e.g., .cshrc) otherwise you may get unpredictable
-        results.
-        </p>
-
-
-        <h3>When will a Windows version be available?</h3>
-            <p>
-                Currently we have limited software development staff to support and modify ISIS, which implies directly running on a native Windows
-                environment is not something that will happen in the near future.
-             </p>
-
-
-
-             <h3>What operating systems have been dropped?</h3>
-             <p>
-               As operating systems and hardware age security flaws are no longer patched and new APIs are not upgraded, which stunts the growth of ISIS on those systems.
-               Therefore we no longer build ISIS on the following platforms:
-               <pre>
-                 Linux SUSE 9.X, 10.X, 11.X, SLES 11
-                 Debian 7
-                 Ubuntu 12.04
-                 RedHat Enterprise 3, 4, 5, 6
-                 Mac OSX with the Power PC processor
-                 Mac OSX 10.4, 10.5, 10.6, 10.8
-                 Sun OS
-               </pre>
-             </p>
-
-
-
-             <h3>I just can not get ISIS installed.  What can I do?</h3>
-             <p>
-               If you encounter problems, we monitor our discussion
-               board daily and will respond to any questions as soon as we can.  But, first, please check the discussion board
-	       as others may have posted the problem with similar issues to you.
-             </p>
-             <p>
-               <a href="https://isis.astrogeology.usgs.gov/fixit">ISIS Support Center</a>
-             </p>
-
-
-
-
-
-        <A NAME="rsyncInstallation">  </A>
-        <h2>Manual Installation</h2>
-        <h3>Create a Download Directory</h3>
-
-
-        <p>
-            We suggest you install ISIS 3 in a work area. Change your current working directory to
-            where you want ISIS 3 installed and create a directory named isis3.
-            The rsync commands in the next step will place all of ISIS and the SPICE
-            kernels under this directory.
-
-            Example:
-       <pre>
-        $ cd /work1
-        $ mkdir isis3
-        $ cd isis3
-       </pre>
-
-        </p>
-
-        <p>
-          <span style="font-size:120%; color:red; font-weight:bold">Warning:<i>
-           You must be in the correct directory as shown above, and you
-           must type the below rsync commands correctly. If you do not, you could
-           remove files not associated with ISIS.  That is ... you could remove
-           personal files on your computer.   Please research and understand
-           the rsync command, especially the --delete option.
-            </i></span>
-        </p>
-
+        This will start the Anaconda installer which will guide you through the installation process.
+      <li>After the installation has finished, open up a bash prompt in your terminal window.</li>
+      <li>Create a new environment for your ISIS3 installation:
+        <pre>
+          #Add the following channels to the Anaconda installation
+          conda config --add channels conda-forge, usgs-astrogeology
+          
 
-        <h3>Choosing an Rsync Server</h3>
+          #Create a new conda environment to install ISIS3 in
+          conda create -n isis3
 
-        <p>
-          We are distributing ISIS 3 using two rsync servers. If the "rsync"
-          command is not available on your system please see your system
-          administrator. To download ISIS 3, follow the example for your hardware
-          and operating system combination.
-          <strong><i>Make sure to include the period "." at the end of the "rsync"
-          commands - if you do not, you will only get a list of available
-          downloads from the rsync server.</i></strong>
-        </p>
-        <p>
-          We have two rsync servers and suggest using the first server for a faster
-          connection.
-         </p>
-        <ul>
-          <li>100Mbit/sec - isisdist.astrogeology.usgs.gov</li>
-          <li>10Mbit/sec - isisdist.wr.usgs.gov</li>
-        </ul>
-        <p>
-          All of the example commands below use the faster server name. If you prefer to use
-	  the slower server, substitute the faster server name for the slower name in the command.
-        </p>
+          #Activate the environment
+          source activate isis3
 
+          #Download the ISIS3 version
+          conda install -c usgs-astrogeology isis3
+          
+          #Execute the ISIS3 variable initialization script with default arguments.
+          #This script prepares default values for:  $ISISROOT/$ISIS3DATA/$ISIS3TESTDATA
 
+          python $CONDA_PREFIX/scripts/isis3VarInit.py
 
-        <h3>Downloading the ISIS Binaries (Required)</h3>
-        <p>
-        Choose the rsync command for your operating system.  Don't forget to type the "space period"
-        at the end of the rsync command line or you will only get a listing of the files.
-        </p>
+         Executing this script with no arguments will result in $ISIS3DATA=$CONDA_PREFIX/data, 
+         and $ISIS3TESTDATA=$CONDA_PREFIX/testdata.  The user can specify different directories
+         for both of these optional values:
 
-<pre>
-        <b>
-        <u>Example for MacOSX 10.11 64-bit Intel compatible systems:</u>
-        </b>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_darwin_OSX/isis .
-</pre>
+         ./$CONDA_PREFIX/scripts/isis3VarInit --data-dir=[path to data directory]  --test-dir=[path to test data directory]
 
-<pre>
-        <b>
-        <u>Example for Fedora 21 Linux x86 64-bit Intel compatible systems:</u>
-        </b>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_FEDORA/isis .
-</pre>
 
-<pre>
-        <b>
-        <u>Example for Ubuntu 14.04 Linux x86 64-bit Intel compatible systems:</u>
-        </b>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_UBUNTU/isis .
-</pre>
+          #Run the source activate command a second time to process the changes:
 
-<pre>
-        <b>
-        <u>Example for Debian 8 Linux x86 64-bit Intel compatible systems:</u>
-        </b>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_DEBIAN/isis .
-</pre>
+          source activate isis3
 
-<pre>
-        <b>
-        <u>Example for RHEL 7 Linux x86 64-bit Intel compatible systems:</u>
-        </b>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_RHEL/isis .
-</pre>
-
-
-<h3>Full Data Download</h3>
-
-<p>
-    If you have the disk space and network speed, you may want to download all of the ISIS data areas which
-    includes all missions supported by ISIS.   This takes over 130 GB of disk space!  If you only have a 10 Mbps
-    network connection it will take nearly two days to download.  If you want to acquire only certain mission data
-     <a href="#MissionSpecific">click here</a>.   To download all ISIS 3 data files continue reading.
-</p>
-<p>
-    Remember to use the following command from the same directory you ran the previous rsync
-    command. In the example it was "/work1/isis3".
-</p>
-      <pre>
+        </pre>
+      </li>
+    </ol>
+  <h3>Operating System Requirements</h3>
+  <p>ISIS3 runs on many UNIX variants. ISIS does not run natively on MS Windows,
+     although it has been successfully run on Windows 10 using the Windows
+     Subsystem for Linux (WSL).  Instructions for doing this can be found
+     <a href="#RunningOnWindows">here.</a>
+
+    The UNIX variants ISIS3 has been successfully built on are:</p>
+    <ul>
+      <li>Ubuntu 18.04 LTS</li>
+      <li>Mac OS X 10.13.6 High Sierra</li>     
+      <li>Fedora 28</li>
+    </ul>
+
+<p>
+    ISIS3 may be run on other Linux or macOS operating systems then those listed above,
+    but it has not been tested and is not supported.
+</p>
+   <h3>Hardware Requirements</h3>
+   <p>Here are the minimum hardware requirements</p>
+    <ul>
+      <li>64-bit (x86) processors</li>
+      <li>2 GB RAM</li>
+      <li>2.5 GB of disk space for ISIS3 binaries</li>
+      <li>10 GB to 510 GB disk space for ISIS3 data</li>
+      <li>10 GB to many TB disk space for processing images</li>
+      <li>A quality graphics card</li>
+    </ul>
+
+
+<A NAME="RunningOnWindows"> </A>
+<h3>Running ISIS3 on Windows 10</h3>
+  <ul>
+    <li><a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10">Installing the Windows Subsystem for Linux</a></li>
+    <li><a href="http://planetarygis.blogspot.com/2017/07/isis3-on-windows-10-bash.html">Instructions for using the Windows
+      Subsystem for Linux (WSL) to run ISIS3</a></li>
+  </ul>
+  <p>
+  While the ISIS3 development team has not examined these
+  instructions for correctness or completeness, they appear to have
+  successfully worked for a number of ISIS3 users within the USGS who run Windows.
+  Thanks for these instructions are directed towards Trent Hare who maintains an
+  excellent and thoughtful blog on <a href="http://planetarygis.blogspot.com/">Planetary GIS Science.</a>
+  </p>
+
+<A NAME="RunningOnWindowsWithSSH"> </A>
+<h3>Setting Up X11 forwarding on Windows with Putty and Xming</h3>
+<p>
+Some ISIS3 users prefer to run ISIS3 in Windows, but SSH into a computer
+that is running ISIS3 and has enabled X11 forwarding.  This requires the
+installation of an X server on Windows.  Below are links to two popular choices
+in Astrogeology.
+</p>
+  <ul>
+    <li><a href="https://sourceforge.net/projects/xming/">Xming X server for Windows</a></li>
+    <li><a href="https://sourceforge.net/projects/vcxsrv/">VcXsrv Windows X Server</a></li>
+  </ul>
+<p>
+Additionally, a Windows SSH client is required to create an SSH connection.  PuTTY
+is a popular choice and may be downloaded below.
+</p>
+<ul>
+    <li><a href="https://www.putty.org/">PuTTY - an SSH and telnet client for the Windows platform.</a></li>
+</ul>
+
+   <h3>Mission Requirements</h3>
+   <p>ISIS3 supports many planetary missions; in fact, over 40 different instruments including some
+   flown as early as the 1960s.  Ancillary data are required to process images from these instruments.  For example, translation
+   definition files to help convert from PDS format to ISIS cubes, dark current and flat file images for radiometric
+   calibration, and large quantities of SPICE files (spacecraft pointing and position) for map projecting images.
+   If you plan to work with data from all missions, then the download will require about 180 GB for all the ancillary data.
+   However, most of this volume is taken up by SPICE files.  We have a SPICE Web service that can be used in lieu of downloading all of the
+   SPICE files which can reduce the download size to 10 GB.  When downloading ISIS, you will have the option of
+   choosing which mission data to acquire as well as if you only want the translation and calibration files and not
+   SPICE files.
+   </p>
+
+   <h3>DTM Requirements</h3>
+   <p>The strength of ISIS3 lies in its capabilities for planetary cartography.
+   The image orthorectification process is improved if a digital
+   terrain model (DTM) is used.  The DTMs can be quite large and take some time to download.  They exist for
+   many planetary bodies (e.g., the Moon, Mars, etc.). Therefore, there are options for selecting which DTMs to download
+   if you are only working with a particular target body.
+   </p>
+
+<p>To build and compile ISIS3 requires following the instructions listed below, which are given on
+   the GitHub wiki page for the ISIS3 project:
+  <ul>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#getting-started-with-github">Getting Started With GitHub</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#building-isis3">Building ISIS3 With cmake</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#new-environmental-variable-meanings">New ISIS3 environmental variables and their meanings</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#custom-data-and-test-data-directories">Custom data and test directories</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#cleaning-builds">Cleaning builds</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#building-individual-isis3-applicationsobjects">Building individual applications/objects</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#building-isis3-documentation">Building ISIS3 documentation</a></li>
+    <li><a href="https://github.com/USGS-Astrogeology/ISIS3/wiki/Building-ISIS3-with-cmake#problems">What to do if you encounter any problems</a></li>
+  </ul>
+</p>
+
+
+<h3>Full ISIS3 Data Download</h3>
+
+<p>
+    Mission data is hosted on rsync servers and not through conda channels like the ISIS3 distribution.
+    This requires using the rsync command from within a terminal window within your Unix distribution, or
+    from within WSL if running Windows 10.   Downloading all mission data requires over 130 GB of disk space.
+    If you want to acquire only certain mission data <a href="#MissionSpecific">click here</a>.
+    To download all ISIS3 data files, continue reading.
+</p>
+<p>
+    To download all ISIS3 data (approximately 180 GB), enter the following commands at the command prompt:
+
+</p>
+      <pre>      
+      cd $ISIS3DATA
       rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data .
       </pre>
 <p>
  Note:  The above command downloads all ISIS data including the required base data area and all of the optional mission
- data areas.  After completing this step, skip to the <a href="#UnixEnvironment">Unix Environment Setup</a>.  If you chose
- not to download everything at once then continue below.
+ data areas.
 </p>
 
 
  <A NAME="MissionSpecific"> </A>
 
-        <h3>Partial Download of ISIS 3 Base Data (Required)</h3>
+        <h3>Partial Download of ISIS3 Base Data (Required)</h3>
         <p>
             The base data area is separate from the source code. This data area is
-            crucial to ISIS 3 and must be downloaded.
+            crucial to ISIS3 and must be downloaded.
         </p>
 <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/base data/
@@ -402,24 +255,31 @@ you must <em>not</em> upgrade the ISIS Data Files!!!
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo16 data/
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo17 data/
         </pre>
+
+        <A NAME="CassiniMission"> </A>
 <p>
   Cassini Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/cassini data/
         </pre>
+        <A NAME="ChandrayaanMission"> </A>
 <p>
   Chandrayaan Mission (kernels can be excluded):
 </p>
         <pre>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/chan1 data/
+        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/chandrayaan1 data/
         </pre>
+
+        <A NAME="ClementineMission"> </A>
 <p>
   Clementine Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/clementine1 data/
         </pre>
+
+          <A NAME="DawnMission"> </A>
 <p>
   Dawn Mission (kernels can be excluded):
 </p>
@@ -429,94 +289,117 @@ you must <em>not</em> upgrade the ISIS Data Files!!!
 <p>
   ExoMars Trace Gas Orbiter Mission (kernels can be excluded):
 </p>
+        <A NAME="TGOMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/tgo data/
         </pre>
 <p>
   Galileo Mission (kernels can be excluded):
 </p>
+        <A NAME="GalileoMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/galileo data/
         </pre>
 <p>
   Hayabusa Mission (kernels can be excluded):
 </p>
+        <A NAME="HayabusaMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/hayabusa data/
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/hayabusa2 data/
         </pre>
-<p>
-  Ideal Mission (kernels can be excluded):
-</p>
-        <pre>
-        rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/ideal data/
-        </pre>
+
 <p>
   Juno Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/juno data/
         </pre>
+
+        <A NAME="KaguyaMission"> </A>
 <p>
   Kaguya Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/kaguya data/
         </pre>
+
+        <A NAME="LunarOrbiterMission"> </A>
 <p>
   Lunar Orbiter Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/lo data/
         </pre>
+        <A NAME="LunarReconnaissanceOrbiterMission"> </A>
 <p>
   Lunar Reconnaissance Orbiter Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/lro data/
         </pre>
+
+        <A NAME="MarsExplorationRoverMission"> </A>
 <p>
   Mars Exploration Rover Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mer data/
         </pre>
+        <A NAME="Mariner10Mission"> </A>
+
 <p>
   Mariner10 Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mariner10 data/
         </pre>
+
+        <A NAME="MessengerMission"> </A>
+
 <p>
   Messenger Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/messenger data/
         </pre>
+
+        <A NAME="MarsExpressMission"> </A>
+
 <p>
   Mars Express Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mex data/
         </pre>
+
+        <A NAME="MarsGlobalSurveyorMission"> </A>
+
 <p>
   Mars Global Surveyor Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mgs data/
         </pre>
+
+        <A NAME="MarsReconnaissanceOrbiterMission"> </A>
+
 <p>
   Mars Reconnaissance Orbiter Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mro data/
         </pre>
+
+        <A NAME="MarsOdysseyMission"> </A>
 <p>
   Mars Odyssey Mission (kernels can be excluded):
 </p>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/odyssey data/
         </pre>
+
+        <A NAME="NearMission"> </A>
 <p>
   Near Mission (kernels can be excluded):
 </p>
@@ -526,36 +409,42 @@ you must <em>not</em> upgrade the ISIS Data Files!!!
 <p>
   New Horizons Mission (kernels can be excluded):
 </p>
+        <A NAME="NewHorizonsMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/newhorizons data/
         </pre>
 <p>
   Odyssey Mission (kernels can be excluded):
 </p>
+        <A NAME="OdysseyMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/odyssey data/
         </pre>
 <p>
   Rolo Mission (kernels can be excluded):
 </p>
+        <A NAME="RoloMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/rolo data/
         </pre>
 <p>
   Rosetta Mission (kernels can be excluded):
 </p>
+       <A NAME="RosettaMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/rosetta data/
         </pre>
 <p>
   Smart1 Mission (kernels can be excluded):
 </p>
+        <A NAME="Smart1Mission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/smart1 data/
         </pre>
 <p>
   Viking Mission (kernels can be excluded):
 </p>
+        <A NAME="VikingMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/viking1 data/
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/viking2 data/
@@ -563,82 +452,26 @@ you must <em>not</em> upgrade the ISIS Data Files!!!
 <p>
   Voyager Mission (kernels can be excluded):
 </p>
+        <A NAME="VoyagerMission"> </A>
         <pre>
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/voyager1 data/
         rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/voyager2 data/
         </pre>
 
+<h2>Installing older versions of ISIS</h2>
+    <h3>How do I install ISIS2?</h3>
+    <p>
+         If you are looking for ISIS2, please
+        <a href="http://isis.astrogeology.usgs.gov/Isis2/isis-bin/installation.cgi">refer to the ISIS 2 Installation
+        Guide</a> for instructions on downloading and installing ISIS 2.
+    </p>
 
-        <h2>Example ISIS 3 Download</h2>
-        <p>
-          This is an example of downloading ISIS onto a RedHat 7 system using
-          tcsh as your shell.
-        </p>
-        <pre>
-          $ cd /work
-          $ mkdir isis3
-          $ cd isis3
-          $ rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_RHEL7/isis .
-          $ rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/base data/
-          **now pick your missions without kernels**
-          **example MRO**
-          $ rsync -azv --delete --partial --exclude='kernels' isisdist.astrogeology.usgs.gov::isis3data/data/mro data/
-          **example LRO**
-          $ rsync -azv --delete --partial --exclude='kernels' isisdist.astrogeology.usgs.gov::isis3data/data/lro data/
-          for csh users edit your .cshrc and add
-          setenv ISISROOT /work/isis3/isis
-          source $ISISROOT/scripts/isis3Startup.csh
-        </pre>
-
-        <A NAME="UnixEnvironment"> </A>
-
-        <h2>UNIX Environment Setup</h2>
-        <p>
-            ISIS 3 needs to know where all its pieces are located. We use an
-            environment variable called "ISISROOT" to do this. Unix commands must
-            be put into your startup shell scripts.  Assuming you installed ISIS in
-            the directory /work1/isis3 add the following commands to your startup
-            script:
-        </p>
-
-        <p>
-            for C shells:
-        </p>
-<pre>
-        setenv ISISROOT /work1/isis3/isis
-</pre>
-
-        <p>
-            for Bourne shells:
-        </p>
-<pre>
-        ISISROOT=/work1/isis3/isis
-        export ISISROOT
-</pre>
-
-        <p>
-            Run the startup script for ISIS. This script assumes you installed
-            the ISIS 3 data area in the same directory you installed the ISIS 3
-            package. If you did not do this, you will need to modify the script to
-	    indicatethe proper location.
-        </p>
-
-        <p>
-            for C shells:
-        </p>
-<pre>
-        source $ISISROOT/scripts/isis3Startup.csh
-</pre>
-
-        <p>
-            for Bourne shells:
-        </p>
-<pre>
-        . $ISISROOT/scripts/isis3Startup.sh
-</pre>
-
-
-
+<h3>How do I install ISIS3.5.2 or earlier?</h3>
+    <p>
+         If you are looking for a version of ISIS3 prior to 3.6.0, please
+        <a href="../../documents/LegacyInstallGuide/index.html">refer to the Legacy ISIS3 Installation
+        Guide</a> for instructions on downloading and installing ISIS3, versions prior to 3.6.0.
+    </p>
 
       </body>
 
@@ -659,39 +492,19 @@ you must <em>not</em> upgrade the ISIS Data Files!!!
   </audience>
 
   <history>
-    <change name="Deborah Lee Soltesz" date="2004-03-24">Added missing flags to rsync command</change>
-    <change name="Stuart C. Sides" date="2005-09-27">Updated for ISIS 3.0.8</change>
-    <change name="Stuart C. Sides" date="2006-05-12">Updated for ISIS 3.0.18</change>
-    <change name="Jeff Anderson" date="2006-10-30">Remove references to beta version</change>
-    <change name="Jac Shinaman" date="2007-01-18">Updated for ISIS 3.1.5 - Mac OS X</change>
-    <change name="Steven Koechle" date="2008-04-09">Added rsync options for data </change>
-    <change name="Stuart sides" date="2008-09-22">Updated for 3.1.17</change>
-    <change name="Stuart Sides" date="2010-03-18">Updated for release 3.2.0</change>
-    <change name="Steven Lambright" date="2010-06-25">Updated for release 3.2.1</change>
-    <change name="Jai Rideout" date="2011-04-15">Added rsync partial option to rsync commands and added new mission-specific sections</change>
-    <change name="Jai Rideout and Steven Lambright" date="2012-02-06">Updated documentation to be clearer, per Trent Hare's recommendations. References #692.</change>
-    <change name="Travis Addair" date="2012-03-14">Added Java installer section</change>
-    <change name="Steven Lambright and Stuart Sides" date="2012-05-21">Updated for release 3.4.0</change>
-    <change name="Steven Lambright" date="2012-08-14">Replaced Open Suse with SLES</change>
-    <change name="Jeff Anderson" date="2012-08-24">Reorganized document format</change>
-    <change name="Steven Lambright and Mathew Eis" date="2013-01-09">Updated Mac OSX support to reflect new versions: 10.7 and 10.8</change>
-    <change name="Steven Lambright" date="2013-02-12">Updated Fedora support to reflect version upgrade: 16 to 18</change>
-    <change name="Stuart Sides" date="2013-06-23">Updated for latest OSX, RHEL, and Debian versions</change>
-    <change name="Kristin Berry" date="2014-01-19">Updated for latest RHEL version and removed references to SUSE and SLES support. </change>
-    <change name="Ian Humphrey" date="2016-02-26">Updated for latest Fedora version (Fedora21).</change>
-    <change name="Adam Paquette" date="2016-06-24">Updated links to the support center.</change>
-    <change name="Ian Humphrey" date="2017-01-25">Updated instructions for new supported systems.</change>
-    <change name="Summer Stapleton" date="2017-12-29">Updated SPICE Web Service mission information to include newer missions.</change>
+    <change name="Kristin Berry" date="2018-08-28">Original Version</change>
+    <change name ="Tyler Wilson along with the ASC Development Team" date="2018-09-26">Updated version to incorporate installation through Conda</change>
   </history>
 
+
   <bibliography>
-    <title>Installing ISIS</title>
-    <brief>Downloading and installing ISIS 3</brief>
+     <title>Installing ISIS</title>
+    <brief>Downloading and installing ISIS3</brief>
     <description>
-      This document describes how to download and install a
-      binary version of ISIS.
+      This document describes how to download/compile and install a
+      binary version of ISIS3 as well
     </description>
-    <author>Stuart Sides</author>
-    <date>2004-03-10</date>
+    <author>ASC Development Team</author>
+    <date>2018-08-28</date>
   </bibliography>
 </documentation>
diff --git a/isis/src/docsys/documents/LegacyInstallGuide/LegacyInstallGuide.xml b/isis/src/docsys/documents/LegacyInstallGuide/LegacyInstallGuide.xml
new file mode 100644
index 0000000000000000000000000000000000000000..36950f49b0faf87e2f250e68ef6aa2a9a3dbd2ce
--- /dev/null
+++ b/isis/src/docsys/documents/LegacyInstallGuide/LegacyInstallGuide.xml
@@ -0,0 +1,658 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<documentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Documentation/documentation.xsd">
+  <files>
+
+    <!-- HTML FILE -->
+    <file primary="true">
+      <body>
+
+<!--  This block is used for notes and warnings, modify it or comment it out, do NOT delete it. -->
+<!-- <div style="border: 4px solid red; padding: 5px ; background-color: gold;">
+<div style="font-style: allcaps; font-weight: bold;">Upgrade Notes</div>
+<p>
+2007-07-19
+</p>
+<p>
+If you are upgrading to version 3.1.12, you <em>must</em>
+download the latest ISIS Data Files!!!
+</p>
+<p>
+If you are <em>not</em> upgrading to 3.1.12,
+you must <em>not</em> upgrade the ISIS Data Files!!!
+</p>
+</div>
+-->
+
+        <h2>Overview</h2>
+
+        <h3>Operating System Requirements</h3>
+        <p>ISIS runs on many UNIX variants. ISIS does not run on MS Windows. The UNIX variants supported are listed here:</p>
+        <ul>
+         <li>Ubuntu</li>
+         <li>RHEL</li>
+         <li>Debian</li>
+         <li>Fedora</li>
+         <li>MacOSX</li>
+        </ul>
+
+         <h3>Hardware Requirements</h3>
+         <p>Here are the minimum hardware requirements</p>
+         <ul>
+         <li>64-bit (x86) processors</li>
+         <lI>2 GB memory</lI>
+         <li>10 GB to 180 GB disk space for ISIS installation</li>
+         <li>10 GB to many TB disk space for processing images</li>
+         <li>A quality graphics card</li>
+         </ul>
+	 <p>Note: More processors, memory, disk storage, and an additional graphcis card (to support the use of two monitors at
+	 one time) may be useful depending on the complexity of your processing requirements
+	 </p>
+
+         <h3>Mission Requirements</h3>
+         <p>ISIS supports many planetary missions; in fact, over 40 different instruments including some
+         flown as early
+         as the 1960s.  Ancillary data are required to process images from these instruments.  For example, translation
+         definition files to help convert from PDS format to ISIS cubes, dark current and flat file images for radiometric
+         calibration, and large quantities of SPICE files (spacecraft pointing and position) for map projecting images.
+         If you plan to work with data
+         from all missions, then the download will require about 180 GB for all the ancillary data.  However, most of this
+         volume is taken up by SPICE files.  We have a SPICE Web service that can be used in lieu of downloading all of the
+         SPICE files which can reduce the download size to 10 GB.  When downloading ISIS, you will have the option of
+         choosing which mission data to acquire as well as if you only want the translation and calibration files and not
+         SPICE files.
+         </p>
+
+         <h3>DTM Requirements</h3>
+         <p>ISIS strength lies in its capabilities for planetary cartography.
+         The image orthorectification process is improved if a digital
+         terrain model (DTM) is used.  The DTMs can be quite large and take some time to download.  They exist for
+         many planetary bodies (e.g., the Moon, Mars, etc.). Therefore, there are options for selecting which DTMs to download
+         if you are only working with a particular target body.
+         </p>
+
+	 <A NAME="rsyncInstallation">  </A>
+         <h2>Installation</h2>
+
+	 <h3>Create a Download Directory</h3>
+
+	 <p>
+	     We suggest you install ISIS 3 in a work area. Change your current working directory to
+	     where you want ISIS 3 installed and create a directory named isis3.
+	     The rsync commands in the next step will place all of ISIS and the SPICE
+	     kernels under this directory.
+
+	     Example:
+	<pre>
+	 $ cd /work1
+	 $ mkdir isis3
+	 $ cd isis3
+	</pre>
+
+	 </p>
+
+	 <p>
+	   <span style="font-size:120%; color:red; font-weight:bold">Warning:<i>
+	    You must be in the correct directory as shown above, and you
+	    must type the below rsync commands correctly. If you do not, you could
+	    remove files not associated with ISIS.  That is ... you could remove
+	    personal files on your computer.   Please research and understand
+	    the rsync command, especially the --delete option.
+	     </i></span>
+	 </p>
+
+
+	 <h3>Choosing an Rsync Server</h3>
+
+	 <p>
+	   We are distributing ISIS 3 using two rsync servers. If the "rsync"
+	   command is not available on your system please see your system
+	   administrator. To download ISIS 3, follow the example for your hardware
+	   and operating system combination.
+	   <strong><i>Make sure to include the period "." at the end of the "rsync"
+	   commands - if you do not, you will only get a list of available
+	   downloads from the rsync server.</i></strong>
+	 </p>
+	 <p>
+	   We have two rsync servers and suggest using the first server for a faster
+	   connection.
+	  </p>
+	 <ul>
+	   <li>100Mbit/sec - isisdist.astrogeology.usgs.gov</li>
+	   <li>10Mbit/sec - isisdist.wr.usgs.gov</li>
+	 </ul>
+	 <p>
+	   All of the example commands below use the faster server name. If you prefer to use
+	   the slower server, substitute the faster server name for the slower name in the command.
+	 </p>
+
+
+
+	 <h3>Downloading the ISIS Binaries (Required)</h3>
+	 <p>
+	 Choose the rsync command for your operating system.  Don't forget to type the "space period"
+	 at the end of the rsync command line or you will only get a listing of the files.
+	 </p>
+
+ <pre>
+	 <b>
+	 <u>Example for MacOSX 10.11 64-bit Intel compatible systems:</u>
+	 </b>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_darwin_OSX/isis .
+ </pre>
+
+ <pre>
+	 <b>
+	 <u>Example for Fedora 25 Linux x86 64-bit Intel compatible systems:</u>
+	 </b>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_FEDORA/isis .
+ </pre>
+
+ <pre>
+	 <b>
+	 <u>Example for Ubuntu 14.04 Linux x86 64-bit Intel compatible systems:</u>
+	 </b>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_UBUNTU/isis .
+ </pre>
+
+ <pre>
+	 <b>
+	 <u>Example for Debian 8 Linux x86 64-bit Intel compatible systems:</u>
+	 </b>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_DEBIAN/isis .
+ </pre>
+
+ <pre>
+	 <b>
+	 <u>Example for RHEL 7 Linux x86 64-bit Intel compatible systems:</u>
+	 </b>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_RHEL/isis .
+ </pre>
+
+
+ <h3>Full Data Download</h3>
+
+ <p>
+     If you have the disk space and network speed, you may want to download all of the ISIS data areas which
+     includes all missions supported by ISIS.   This takes over 130 GB of disk space!  If you only have a 10 Mbps
+     network connection it will take nearly two days to download.  If you want to acquire only certain mission data
+      <a href="#MissionSpecific">click here</a>.   To download all ISIS 3 data files continue reading.
+ </p>
+ <p>
+     Remember to use the following command from the same directory you ran the previous rsync
+     command. In the example it was "/work1/isis3".
+ </p>
+       <pre>
+       rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data .
+       </pre>
+ <p>
+  Note:  The above command downloads all ISIS data including the required base data area and all of the optional mission
+  data areas.  After completing this step, skip to the <a href="#UnixEnvironment">Unix Environment Setup</a>.  If you chose
+  not to download everything at once then continue below.
+ </p>
+
+
+  <A NAME="MissionSpecific"> </A>
+
+	 <h3>Partial Download of ISIS 3 Base Data (Required)</h3>
+	 <p>
+	     The base data area is separate from the source code. This data area is
+	     crucial to ISIS 3 and must be downloaded.
+	 </p>
+ <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/base data/
+ </pre>
+
+ <h3>Partial Download of Mission Specific Data</h3>
+
+
+	 <p>
+	   There are many missions supported by ISIS.  If you are only working with a few missions
+	   then you should download only those specific data areas.    One way you can save time and space is to not download the SPICE data
+	   for the mission you need.  If you chose download the SPICE data, read the next section about the SPICE Web Service that
+	   provides instructions for excluding the SPICE kernels.  Otherwise <a href="#ApolloMission">jump</a> to the mission
+	   specific sections.
+	  </p>
+
+
+ <h3>ISIS SPICE Web Service</h3>
+
+ <p>
+   ISIS can now use a service to retrieve the SPICE data for all instruments ISIS supports
+   via the internet. To use this service instead of your local SPICE data, click the WEB check box in
+   the spiceinit program GUI or type spiceinit web=yes at the command line. Using the ISIS SPICE Web
+   Service will significantly reduce the size of the downloads from our data area.
+
+   If you want to use this new service, without having to download all the SPICE data, add the
+   following argument to the mission-specific rsync command:
+  </p>
+ <pre>
+	     --exclude='kernels'
+ </pre>
+	 <p>
+	   For example: rsync -azv <strong>--exclude='kernels'</strong> --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/cassini data/
+	 </p>
+
+	 <span style="font-size:120%; color:red; font-weight:bold">
+	   WARNING: Some instruments require mission data to be present for calibration, which may
+	   not be supported by the SPICE Web Server exclusively, and some programs that are designed
+	   to run an image from ingestion through the mapping phase do not have an option to use the
+	   SPICE Web Service. For information specific to an instrument, see the documentation for
+	   radiometric callobration programs.
+	 </span>
+
+	   <A NAME="ApolloMission"> </A>
+ <p>
+   Apollo Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo15 data/
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo16 data/
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo17 data/
+	 </pre>
+ <p>
+   Cassini Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/cassini data/
+	 </pre>
+ <p>
+   Chandrayaan Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/chandrayaan1 data/
+	 </pre>
+ <p>
+   Clementine Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/clementine1 data/
+	 </pre>
+ <p>
+   Dawn Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/dawn data/
+	 </pre>
+ <p>
+   ExoMars Trace Gas Orbiter Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/tgo data/
+	 </pre>
+ <p>
+   Galileo Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/galileo data/
+	 </pre>
+ <p>
+   Hayabusa Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/hayabusa data/
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/hayabusa2 data/
+	 </pre>
+ <p>
+   Ideal Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/ideal data/
+	 </pre>
+ <p>
+   Juno Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/juno data/
+	 </pre>
+ <p>
+   Kaguya Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/kaguya data/
+	 </pre>
+ <p>
+   Lunar Orbiter Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/lo data/
+	 </pre>
+ <p>
+   Lunar Reconnaissance Orbiter Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/lro data/
+	 </pre>
+ <p>
+   Mars Exploration Rover Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mer data/
+	 </pre>
+ <p>
+   Mariner10 Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mariner10 data/
+	 </pre>
+ <p>
+   Messenger Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/messenger data/
+	 </pre>
+ <p>
+   Mars Express Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mex data/
+	 </pre>
+ <p>
+   Mars Global Surveyor Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mgs data/
+	 </pre>
+ <p>
+   Mars Reconnaissance Orbiter Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mro data/
+	 </pre>
+ <p>
+   Mars Odyssey Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/odyssey data/
+	 </pre>
+ <p>
+   Near Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/near data/
+	 </pre>
+ <p>
+   New Horizons Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/newhorizons data/
+	 </pre>
+ <p>
+   Odyssey Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/odyssey data/
+	 </pre>
+ <p>
+   Rolo Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/rolo data/
+	 </pre>
+ <p>
+   Rosetta Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/rosetta data/
+	 </pre>
+ <p>
+   Smart1 Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/smart1 data/
+	 </pre>
+ <p>
+   Viking Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/viking1 data/
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/viking2 data/
+	 </pre>
+ <p>
+   Voyager Mission (kernels can be excluded):
+ </p>
+	 <pre>
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/voyager1 data/
+	 rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/voyager2 data/
+	 </pre>
+
+       <h2>FAQs</h2>
+       <h3>I cannot connect to the rsync server</h3>
+       <p>
+         This is one of the biggest issues with downloading ISIS.  Most problems stem from a firewall restriction on
+         the user's side.   USGS has opened the rsync port to allow access to our server.  Your institution likely has
+         a firewall and may not allow the access to our rsync server.  Start by making sure you can connect to our
+         rsync server.  Type the following command:
+          <pre>
+            rsync isisdist.wr.usgs.gov::
+
+            or
+
+            rsync isisdist.astrogeology.usgs.gov::
+          </pre>
+          This should list the packages available for download.  If you do not receive this list then 1) either both of our servers
+          are down or 2) your firewall does not allow access.  In the former case please post a message on our
+          <a href="https://isis.astrogeology.usgs.gov/fixit">ISIS support board</a>.  In the latter case, see your local
+          system administrator.  </p>
+
+          <p>
+          You can also try an alternative port number that we have setup (port 80).  This is the
+          standard http port which is open through most firewalls.  However, some institutes have appliances that examine
+          this traffic and if it doesn't appear to look like web content disconnects or is so slow the download would take forever.
+       </p>
+       <p>
+          Example use of port 80:
+         <pre>rsync -azv --delete --partial --port=80 isisdist.astrogeology.usgs.gov::x86-64_linux_RHEL/isis .</pre>
+       </p>
+
+       <p>
+       If you are still running into problems you can try a different network path.  For example, you can try your home network to see if
+       you can make connections to our rsync server.
+    </p>
+
+
+    <h3>How do I know if the rsync commands were successful?</h3>
+    <p>
+      Unfortunately rsync sometimes hangs or does not complete because of dropped network connections.  The drops can happen
+      on your end, our end, or anywhere in between.  Keep rerunning rsync until the command completes.
+    </p>
+
+    <h3>How do I get updates to ISIS?</h3>
+    <p>
+    Just rerun the rsync commands again.  Rsync only acquires files that have changed or do not
+    exist in you installation.  The update process will typically be much faster than the original download.
+    </p>
+
+    <h3>How often do you update ISIS?</h3>
+    <p>
+      We update our mission data areas often (sometime nightly) as new SPICE files are provided by the active missions.  Our binaries (application programs) are updated
+      on a quarterly schedule.
+    </p>
+
+
+    <h3>How do I install ISIS 2?</h3>
+    <p>
+         If you are looking for ISIS 2, please
+        <a href="http://isis.astrogeology.usgs.gov/Isis2/isis-bin/installation.cgi">refer to the ISIS 2 Installation
+        Guide</a> for instructions on downloading and installing ISIS 2.
+    </p>
+
+        <p>
+        ISIS 3 and ISIS 2 will have collisions of executable names (e.g.,
+        pds2isis exists in both systems).  It is best to remove initializations
+        of ISIS 2 from your local startup file (e.g., .cshrc) otherwise you may get unpredictable
+        results.
+        </p>
+
+
+        <h3>When will a Windows version be available?</h3>
+            <p>
+                Currently we have limited software development staff to support and modify ISIS, which implies directly running on a native Windows
+                environment is not something that will happen in the near future.
+             </p>
+
+
+
+             <h3>What operating systems have been dropped?</h3>
+             <p>
+               As operating systems and hardware age security flaws are no longer patched and new APIs are not upgraded, which stunts the growth of ISIS on those systems.
+               Therefore we no longer build ISIS on the following platforms:
+               <pre>
+                 Linux SUSE 9.X, 10.X, 11.X, SLES 11
+                 Debian 7
+                 Ubuntu 12.04
+                 RedHat Enterprise 3, 4, 5, 6
+                 Mac OSX with the Power PC processor
+                 Mac OSX 10.4, 10.5, 10.6, 10.8
+                 Sun OS
+               </pre>
+             </p>
+
+
+
+             <h3>I just can not get ISIS installed.  What can I do?</h3>
+             <p>
+               If you encounter problems, we monitor our discussion
+               board daily and will respond to any questions as soon as we can.  But, first, please check the discussion board
+	       as others may have posted the problem with similar issues to you.
+             </p>
+             <p>
+               <a href="https://isis.astrogeology.usgs.gov/fixit">ISIS Support Center</a>
+             </p>
+
+        <h2>Example ISIS 3 Download</h2>
+        <p>
+          This is an example of downloading ISIS onto a RedHat 7 system using
+          tcsh as your shell.
+        </p>
+        <pre>
+          $ cd /work
+          $ mkdir isis3
+          $ cd isis3
+          $ rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::x86-64_linux_RHEL7/isis .
+          $ rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/base data/
+          **now pick your missions without kernels**
+          **example MRO**
+          $ rsync -azv --delete --partial --exclude='kernels' isisdist.astrogeology.usgs.gov::isis3data/data/mro data/
+          **example LRO**
+          $ rsync -azv --delete --partial --exclude='kernels' isisdist.astrogeology.usgs.gov::isis3data/data/lro data/
+          for csh users edit your .cshrc and add
+          setenv ISISROOT /work/isis3/isis
+          source $ISISROOT/scripts/isis3Startup.csh
+        </pre>
+
+        <A NAME="UnixEnvironment"> </A>
+
+        <h2>UNIX Environment Setup</h2>
+        <p>
+            ISIS 3 needs to know where all its pieces are located. We use an
+            environment variable called "ISISROOT" to do this. Unix commands must
+            be put into your startup shell scripts. There are two different
+            ways to achieve this depending on what shell you are using. If you are
+            unsure what kind of shell you are using, type the following command
+            in the terminal:
+            <pre>
+                echo $SHELL
+            </pre>
+            It is important to note that tsch is a C shell and bash is a Bourne shell.
+            Assuming you installed ISIS in the directory /work1/isis3 add the following
+            commands to your startup script:
+        </p>
+
+        <p>
+            for C shells:
+        </p>
+<pre>
+        setenv ISISROOT /work1/isis3/isis
+</pre>
+
+        <p>
+            for Bourne shells:
+        </p>
+<pre>
+        ISISROOT=/work1/isis3/isis
+        export ISISROOT
+</pre>
+
+        <p>
+            Run the startup script for ISIS. This script assumes you installed
+            the ISIS 3 data area in the same directory you installed the ISIS 3
+            package. If you did not do this, you will need to modify the script to
+	           indicate the proper location.
+        </p>
+
+        <p>
+            for C shells:
+        </p>
+<pre>
+        source $ISISROOT/scripts/isis3Startup.csh
+</pre>
+
+        <p>
+            for Bourne shells:
+        </p>
+<pre>
+        . $ISISROOT/scripts/isis3Startup.sh
+</pre>
+
+
+
+
+      </body>
+
+      <type>HTML</type>
+
+      <source>
+        <filename>index.html</filename>
+      </source>
+    </file>
+  </files>
+
+  <category>
+    <categoryItem>technicaldoc</categoryItem>
+  </category>
+
+  <audience>
+    <target>administrator</target>
+  </audience>
+
+  <history>
+    <change name="Deborah Lee Soltesz" date="2004-03-24">Added missing flags to rsync command</change>
+    <change name="Stuart C. Sides" date="2005-09-27">Updated for ISIS 3.0.8</change>
+    <change name="Stuart C. Sides" date="2006-05-12">Updated for ISIS 3.0.18</change>
+    <change name="Jeff Anderson" date="2006-10-30">Remove references to beta version</change>
+    <change name="Jac Shinaman" date="2007-01-18">Updated for ISIS 3.1.5 - Mac OS X</change>
+    <change name="Steven Koechle" date="2008-04-09">Added rsync options for data </change>
+    <change name="Stuart sides" date="2008-09-22">Updated for 3.1.17</change>
+    <change name="Stuart Sides" date="2010-03-18">Updated for release 3.2.0</change>
+    <change name="Steven Lambright" date="2010-06-25">Updated for release 3.2.1</change>
+    <change name="Jai Rideout" date="2011-04-15">Added rsync partial option to rsync commands and added new mission-specific sections</change>
+    <change name="Jai Rideout and Steven Lambright" date="2012-02-06">Updated documentation to be clearer, per Trent Hare's recommendations. References #692.</change>
+    <change name="Travis Addair" date="2012-03-14">Added Java installer section</change>
+    <change name="Steven Lambright and Stuart Sides" date="2012-05-21">Updated for release 3.4.0</change>
+    <change name="Steven Lambright" date="2012-08-14">Replaced Open Suse with SLES</change>
+    <change name="Jeff Anderson" date="2012-08-24">Reorganized document format</change>
+    <change name="Steven Lambright and Mathew Eis" date="2013-01-09">Updated Mac OSX support to reflect new versions: 10.7 and 10.8</change>
+    <change name="Steven Lambright" date="2013-02-12">Updated Fedora support to reflect version upgrade: 16 to 18</change>
+    <change name="Stuart Sides" date="2013-06-23">Updated for latest OSX, RHEL, and Debian versions</change>
+    <change name="Kristin Berry" date="2014-01-19">Updated for latest RHEL version and removed references to SUSE and SLES support. </change>
+    <change name="Ian Humphrey" date="2016-02-26">Updated for latest Fedora version (Fedora21).</change>
+    <change name="Adam Paquette" date="2016-06-24">Updated links to the support center.</change>
+    <change name="Ian Humphrey" date="2017-01-25">Updated instructions for new supported systems.</change>
+    <change name="Summer Stapleton" date="2017-12-29">Updated SPICE Web Service mission information to include newer missions.</change>
+    <change name="Kaitlyn Lee" date="2018-04-04">Added information about tsch being a C shell and bash being a Bourne shell
+      and how to tell what shell a user is using to the UNIX Enviroment Setup section. Fixes #5372.</change>
+    <change name="Ian Humphrey" date="2018-04-06">Updated for latest supported Fedora version (Fedora25).</change>
+    <change name="Kristin Berry and Adam Goins" date="2018-08-28">Removed references to deprecated Java-based installer and split off into a new Legacy ISIS3 installation instructions page. </change>
+  </history>
+
+  <bibliography>
+    <title>Installing Legacy Versions of ISIS3</title> 
+    <brief>Downloading and installing ISIS 3 versions 3.5.2.0 and earlier</brief>
+    <description>
+      This document describes how to download and install a
+      binary version of ISIS.
+    </description>
+    <author>Stuart Sides</author>
+    <date>2004-03-10</date>
+  </bibliography>
+</documentation>
diff --git a/isis/src/hayabusa/apps/amica2isis/amica2isis.cpp b/isis/src/hayabusa/apps/amica2isis/amica2isis.cpp
index 61f4d01afba7d5e95f34b788c5be961a7fde3d2f..a63d2121e558a4cd8bd1966faefb6b0167fe1c40 100644
--- a/isis/src/hayabusa/apps/amica2isis/amica2isis.cpp
+++ b/isis/src/hayabusa/apps/amica2isis/amica2isis.cpp
@@ -103,25 +103,30 @@ void IsisMain ()
   // Create a PVL to store the translated labels in
   Pvl outLabel;
 
-  // Translate the BandBin group
-  FileName transFile (transDir + "amicaBandBin.trn");
-  PvlToPvlTranslationManager bandBinXlater (label, transFile.expanded());
-  bandBinXlater.Auto(outLabel);
+  // Translate the Instrument group
+  FileName transFile = transDir + "amicaInstrument.trn";
+  PvlToPvlTranslationManager instrumentXlater (label, transFile.expanded());
+  instrumentXlater.Auto(outLabel);
 
   // Translate the Archive group
   transFile = transDir + "amicaArchive.trn";
   PvlToPvlTranslationManager archiveXlater (label, transFile.expanded());
   archiveXlater.Auto(outLabel);
 
-  // Translate the Instrument group
-  transFile = transDir + "amicaInstrument.trn";
-  PvlToPvlTranslationManager instrumentXlater (label, transFile.expanded());
-  instrumentXlater.Auto(outLabel);
+  // Translate the BandBin group
+  transFile = transDir + "amicaBandBin.trn";
+  PvlToPvlTranslationManager bandBinXlater (label, transFile.expanded());
+  bandBinXlater.Auto(outLabel);
+
+  // Translate the Kernels group
+  transFile = transDir + "amicaKernels.trn";
+  PvlToPvlTranslationManager kernelsXlater (label, transFile.expanded());
+  kernelsXlater.Auto(outLabel);
 
   //  Create YearDoy keyword in Archive group
   iTime stime(outLabel.findGroup("Instrument", Pvl::Traverse)["StartTime"][0]);
   PvlKeyword yeardoy("YearDoy", toString(stime.Year()*1000 + stime.DayOfYear()));
-  (void) outLabel.findGroup("Archive", Pvl::Traverse).addKeyword(yeardoy);
+  outLabel.findGroup("Archive", Pvl::Traverse).addKeyword(yeardoy);
 
 
   //  Update target if user specifies it
@@ -130,16 +135,22 @@ void IsisMain ()
     igrp["TargetName"] = target;
   }
 
+  QString units = "";
+  if (outLabel.findGroup("BandBin", Pvl::Traverse).hasKeyword("Unit")) {
+    units = outLabel.findGroup("BandBin", Pvl::Traverse).findKeyword("Unit")[0].toLower();
+  }
+  else {
+    units = "nanometers";
+  }
+  outLabel.findGroup("BandBin", Pvl::Traverse).findKeyword("Center").setUnits(units);
+  outLabel.findGroup("BandBin", Pvl::Traverse).findKeyword("Width").setUnits(units);
+
   // Write the BandBin, Archive, and Instrument groups
   // to the output cube label
-  outcube->putGroup(outLabel.findGroup("BandBin",Pvl::Traverse));
-  outcube->putGroup(outLabel.findGroup("Archive",Pvl::Traverse));
   outcube->putGroup(outLabel.findGroup("Instrument",Pvl::Traverse));
-
-  // Use the HAYABUSA_AMICA frame code rather than HAYABUSA_AMICA_IDEAL
-  PvlGroup kerns("Kernels");
-  kerns += PvlKeyword("NaifFrameCode","-130102");
-  outcube->putGroup(kerns);
+  outcube->putGroup(outLabel.findGroup("Archive",Pvl::Traverse));
+  outcube->putGroup(outLabel.findGroup("BandBin",Pvl::Traverse));
+  outcube->putGroup(outLabel.findGroup("Kernels",Pvl::Traverse));
 
   // Now write the FITS augmented label as the original label
   OriginalLabel oldLabel(label);
diff --git a/isis/src/hayabusa/apps/amicacal/amicacal.cpp b/isis/src/hayabusa/apps/amicacal/amicacal.cpp
index aa0bb340703f52592253013d1a850ac5c60c04d7..8ceecb5fae70be5ccccc15db3e7c721f47c760b8 100644
--- a/isis/src/hayabusa/apps/amicacal/amicacal.cpp
+++ b/isis/src/hayabusa/apps/amicacal/amicacal.cpp
@@ -295,6 +295,7 @@ void IsisMain() {
 
   g_timeRatio = g_tvct / (g_exposureTime + g_tvct);
   g_darkCurrent = g_d0 * exp(g_d1 * g_temperature);
+  g_calibrationScale = 1.0;
   QString g_units = "DN";
 
   if ( !sunDistanceAU(startTime, target, g_solarDist) ) {
@@ -303,7 +304,12 @@ void IsisMain() {
                       _FILEINFO_);
   }
 
-  if ( QString::compare(g_iofCorrection, "dn", Qt::CaseInsensitive) != 0 ) {
+  //  Add DN/S as an output option
+  if ( QString::compare(g_iofCorrection, "dn/s", Qt::CaseInsensitive) == 0 ) {
+      g_calibrationScale = 1.0 / g_exposureTime;
+      g_units = "DN/S";
+  }
+  else if ( QString::compare(g_iofCorrection, "dn", Qt::CaseInsensitive) != 0 ) {
     /* Note - this radiance calibration scaling factor is applied to both radiance and iof
      * 
      * Units of RADIANCE
@@ -776,10 +782,8 @@ void calibrate(vector<Buffer *>& in, vector<Buffer *>& out) {
     imageOut[i] = pow(imageOut[i], g_gamma) + g_L0 * imageOut[i] * exp(g_L1 * imageOut[i]);
 
 
-    // 3) DARK Current - Currently negligible and removed
-#if 0
+    // 3) DARK Current
       imageOut[i] = imageOut[i] - g_darkCurrent;
-#endif
 
     // 4) HOT Pixel Removal
 
diff --git a/isis/src/hayabusa/apps/amicacal/amicacal.xml b/isis/src/hayabusa/apps/amicacal/amicacal.xml
index 2efdee260d3469b38181f6eb003aef73a1d123f1..8aa504ca2d0d1a811225269501a229071b0558de 100644
--- a/isis/src/hayabusa/apps/amicacal/amicacal.xml
+++ b/isis/src/hayabusa/apps/amicacal/amicacal.xml
@@ -536,11 +536,15 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica
     </change>
     <change name="Jeannie Backer" date="2017-11-28 ">
        Updated radiance calibration to divide by exposure duration, as done with reflectance. 
-       Updated amicaCalibration????.trn file with latest radiance scale factor for sz 
-       (value provided by L. LeCorre, PSI).
+       Updated amicaCalibration????.trn file with latest radiance scale factor for zs
+       (value provided by L. Le Corre, PSI).
        Updated to use filter V solar flux on all calculations. 
        Brought code closer to ISIS3 coding standards. Fixes #5243
     </change>
+    <change name="Lucille Le Corre" date="2018-01-30">
+        Added DN/S as an output option. Apply dark current current as it was disabled
+        in earlier versions.
+    </change>
   </history>
 
   <groups>
@@ -641,6 +645,15 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica
             </description>
           </option>
 
+          <option value="DN/S">
+            <brief>
+              Convert to DN/S units 
+            </brief> 
+            <description>
+                Raw DNs are divided by the exposure time, in seconds.
+            </description>
+          </option>
+
           <option value="RADIANCE">
             <brief>
               Convert to radiance unit
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/Makefile b/isis/src/hayabusa/apps/hyb1pds4gen/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.cpp b/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c652cebe9769db471c9b6ca4899a71a5b814f18c
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.cpp
@@ -0,0 +1,163 @@
+#include "Isis.h"
+
+#include <QDomDocument>
+#include <QDomElement>
+#include <QString>
+
+#include "Application.h"
+#include "Cube.h"
+#include "ExportDescription.h"
+#include "FileName.h"
+#include "Process.h"
+#include "ProcessExportPds.h"
+#include "ProcessExportPds4.h"
+#include "Pvl.h"
+#include "PvlKeyword.h"
+#include "PvlToXmlTranslationManager.h"
+
+using namespace std;
+using namespace Isis;
+
+void generateCSVOutput(Pvl &inputCubeLabel);
+
+void IsisMain() {
+  UserInterface &ui = Application::GetUserInterface();
+
+  // Check if input file is indeed, a cube
+  if (ui.GetFileName("FROM").right(3) != "cub") {
+    QString msg = "Input file [" + ui.GetFileName("FROM") +
+                  "] does not appear to be a cube";
+    throw  IException(IException::User, msg, _FILEINFO_);
+  }
+
+  // Setup the process and set the input cube
+  ProcessExportPds4 process;
+  Cube *inputCube = process.SetInputCube("FROM");
+  Pvl *inputLabel = inputCube->label();
+  generateCSVOutput(*inputLabel);
+  QString logicalId = ui.GetString("PDS4LOGICALIDENTIFIER");
+  process.setLogicalId(logicalId);
+
+  QString translationFile = "$hayabusa/translations/";
+  PvlGroup instGroup = inputLabel->findObject("IsisCube").findGroup("Instrument");
+  if (instGroup["InstrumentId"][0].compare("NIRS", Qt::CaseInsensitive) == 0) {
+
+    process.setImageType(ProcessExportPds4::BinSetSpectrum);
+    QDomDocument &pdsLabel = process.StandardPds4Label();
+
+    translationFile += "nirsPds4Export.trn";
+    PvlToXmlTranslationManager xlator(*(inputLabel), translationFile);
+    xlator.Auto(pdsLabel);
+
+    ProcessExportPds4::translateUnits(pdsLabel);
+
+  } 
+  else { // AMICA
+
+    QDomDocument &pdsLabel = process.StandardPds4Label();
+
+    translationFile += "amicaPds4Export.trn";
+    PvlToXmlTranslationManager xlator(*(inputLabel), translationFile);
+    xlator.Auto(pdsLabel);
+
+    /*
+     * Add additional pds label data here
+     */
+    QStringList xmlPath;
+    xmlPath << "Product_Observational" 
+            << "Observation_Area" 
+            << "Discipline_Area" 
+            << "img:Imaging" 
+            << "img:Subframe_Parameters";
+    if (instGroup.hasKeyword("FirstLine") && instGroup.hasKeyword("LastLine")) {
+  
+      int lines = (int) instGroup["LastLine"] - (int) instGroup["FirstLine"];
+      QDomElement baseElement = pdsLabel.documentElement();
+      QDomElement subframeParametersElement = process.getElement(xmlPath, baseElement);
+  
+      QDomElement linesElement = pdsLabel.createElement("img:lines");
+      PvlToXmlTranslationManager::setElementValue(linesElement, toString(lines));
+      subframeParametersElement.appendChild(linesElement);
+  
+    }
+  
+    if (instGroup.hasKeyword("FirstSample") && instGroup.hasKeyword("LastSample")) {
+      int samples = (int) instGroup["LastSample"] - (int) instGroup["FirstSample"];
+      QDomElement baseElement = pdsLabel.documentElement();
+      QDomElement subframeParametersElement = process.getElement(xmlPath, baseElement);
+  
+      QDomElement samplesElement = pdsLabel.createElement("img:samples");
+      PvlToXmlTranslationManager::setElementValue(samplesElement, toString(samples));
+      subframeParametersElement.appendChild(samplesElement);
+    }
+  
+    double radianceScalingFactor = 1.0;
+    if (instGroup.hasKeyword("RadianceScaleFactor")) {
+      radianceScalingFactor *= (double)instGroup["RadianceScaleFactor"];
+    }
+    if (instGroup.hasKeyword("RadianceStandard")) {
+      radianceScalingFactor *= (double)instGroup["RadianceStandard"];
+    }
+    xmlPath[4] = "img:Radiometric_Correction_Parameters";
+    QDomElement baseElement = pdsLabel.documentElement();
+    QDomElement radiometricParametersElement = process.getElement(xmlPath, baseElement);
+    QDomElement radianceFactorElement = pdsLabel.createElement("img:radiance_scaling_factor_WO_units");
+    PvlToXmlTranslationManager::setElementValue(radianceFactorElement, toString(radianceScalingFactor));
+    radiometricParametersElement.appendChild(radianceFactorElement);
+
+    ProcessExportPds4::translateUnits(pdsLabel);
+  }
+
+  QString outFile = ui.GetFileName("TO");
+  process.WritePds4(outFile);
+
+  return;
+}
+
+
+/**
+ * Write extra values to an output CSV formatted file.
+ */
+void generateCSVOutput(Pvl &inputCubeLabel) {
+  if (inputCubeLabel.findObject("IsisCube").hasGroup("Instrument")) {
+    UserInterface &ui = Application::GetUserInterface();
+    // Create the vars for holding the info
+    QString keys;
+    QString values;
+    const QString delimeter = ",";
+
+    // Output the result
+    fstream outFile;//QFile???
+    QString outputImage = ui.GetAsString("TO");
+    FileName imgOutput(outputImage);
+    FileName csvOutput = imgOutput.removeExtension().setExtension("csv");
+    
+    PvlGroup instGroup = inputCubeLabel.findObject("IsisCube").findGroup("Instrument");
+    if (instGroup["InstrumentId"][0].compare("amica", Qt::CaseInsensitive) == 0) {
+      if (inputCubeLabel.findObject("IsisCube").hasGroup("RadiometricCalibration")) {
+        outFile.open(csvOutput.expanded().toLatin1().data(), std::ios::out);
+        PvlGroup radiometricGroup = inputCubeLabel.findObject("IsisCube").findGroup("RadiometricCalibration");
+        outFile << "RadiometricCalibrationUnits"
+                << delimeter
+                << "RadianceStandard"
+                << delimeter
+                << "RadianceScaleFactor"
+                << endl;
+        outFile << radiometricGroup["Units"][0]
+                << delimeter
+                << radiometricGroup["RadianceStandard"][0]
+                << delimeter
+                << radiometricGroup["RadianceScaleFactor"][0]
+                << endl;
+        outFile.close();
+      }
+    }
+    else { // NIRS
+      outFile.open(csvOutput.expanded().toLatin1().data(), std::ios::out);
+      outFile << "IntegrationTime" << endl;
+      outFile << instGroup["IntegrationTime"][0] << endl;
+      outFile.close();
+    }
+  }
+}
+
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.xml b/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a5227aebf1583a5b4f0495c150382f4080620b67
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="hyb1pds4gen" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+
+  <brief>
+    Convert Hayabusa1 image from from ISIS3 cube to PDS4 format
+  </brief>
+
+  <description>
+   This programs exports an ISIS3 Haybusa cube to a PDS4 product. 
+   If available, Instrument and  Mapping information will be written to the detached 
+   output PDS4 formatted xml label file.
+    <p>
+       Note that not all require keyword values in the generated PDS4 labels can be determined automatically
+       by ISIS3. Some must be updated by the user (by opening up the xml label output by this
+       application and editing it with a text editor) for the generated label to be PDS4 compliant. 
+       The values UNK (unknown) and TBD (to be determined) are used as placeholders in 
+       the generated label. 
+       TBD are PDS4 required values and must be replaced by the user for the output label to be PDS4 compliant. 
+       Some of these TBDs can only be replaced with one of several specific enumerated values to meet compliancy. 
+       These possible values can be found in the 
+       <a href="https://pds.jpl.nasa.gov/pds4/doc/im/current/index_1900.html">PDS4 Information Model Specification</a> 
+       in the Value/Class column of the table for the associated tag or in the index at the end of the document. 
+       Searching this page for the name of the field you need to determine a value for is recommended. 
+    </p>
+    
+    <p>
+      For example: For a cube with map-projected data, ISIS3 will populate planar_coordinate 
+      encoding_method with a value on its own, but if it did not and instead had "TBD", we would find at 
+      <a href="https://pds.jpl.nasa.gov/pds4/doc/im/current/index_1900.html#attribute_cart_planar_coordinate_information_cart_planar_coordinate_encoding_method">planar_coordinate_coding_method</a> 
+      that there are 3 possible values: 'Coordinate Pair', 'Distance and Bearing', 'Row and Column'.
+    </p>
+    
+    <p>
+      Not everything is in the  
+      <a href="https://pds.jpl.nasa.gov/pds4/doc/im/current/index_1900.html">PDS4 Information Model Specification</a>
+       at this time, so if the information about a tag is not in there, it may be necessary to find
+        the options in the appropriate schematron file (.sch) available at: 
+        <a href="https://pds.jpl.nasa.gov/pds4/schema/released/">PDS4 Released Schema</a>. 
+        For the previous example, the same information can be found in the 
+        <a href="https://pds.jpl.nasa.gov/pds4/cart/v1/PDS4_CART_1700.sch">PDS4 Cartography schematron file </a>.
+    </p>
+    
+    <p>
+      UNK  is used as a placeholder if any value can be used and still be a valid PDS4-formatted 
+      xml header. UNKs can, but are not required to be, replaced by the user with
+      better information. 
+    </p>
+
+  </description>
+
+  <category>
+    <categoryItem>Import and Export</categoryItem>
+  </category>
+
+
+  <history>
+    <change name="Jeannie Backer" date="2018-05-20">
+      Original version
+    </change>
+  </history>
+
+  <groups>
+    <group name="Files">
+      <parameter name="FROM">
+        <type>cube</type>
+        <fileMode>input</fileMode>
+        <brief>
+          Input cube to be converted
+        </brief>
+        <description>
+          The cube to be converted to pds format.
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+
+      <parameter name="TO">
+        <type>filename</type>
+        <fileMode>output</fileMode>
+        <brief>
+          Output pds image
+        </brief>
+        <description>
+          The resulting pds file. For PDS4, a detached label of the same name with the file extension .xml 
+          will be created in the same directory.
+        </description>
+        <filter>
+          *.img
+        </filter>
+      </parameter>
+    </group>
+
+    <group name="Keywords">
+      <parameter name="PDS4LOGICALIDENTIFIER">
+        <type>string</type>
+        <brief>
+          String value for the PDS4 logical_identifier keyword.
+        </brief>
+        <description>
+          This value is used to set the required PDS4 value, logical_identifier. It should be a
+          6-part colon separated string of the form 
+          <b>urn:space_agency:archiving_agency:pds_approved_bundle_id:pds_approved_collection_id:product_id</b>.
+          Note that space_agency is generally "nasa" and archiving_agency is generally "pds".
+        </description>
+      </parameter>
+    </group>
+
+  </groups>
+
+</application>
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/tsts/Makefile b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/tsts/amicaitokawa2diof/Makefile b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/amicaitokawa2diof/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..89c597f073a76888054fd7485931d67e61737f69
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/amicaitokawa2diof/Makefile
@@ -0,0 +1,23 @@
+APPNAME = hyb1pds4gen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/corrected_iof_st_2459265790_w.cub \
+	           to=$(OUTPUT)/corrected_iof_st_2459265790_w.img \
+	           pds4logical="urn:nasa:pds:mybundle:mycollection:myproduct" > /dev/null;
+	# Remove parts of output that can occur in any order and convert to txt for comparison
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	       $(OUTPUT)/corrected_iof_st_2459265790_w.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\<description>Created PDS4 output product from ISIS cube.*<+\<description>Created PDS4 output product from ISIS cube.<+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/corrected_iof_st_2459265790_w.xmlLabel.txt;
+
+	$(RM) $(OUTPUT)/corrected_iof_st_2459265790_w.xml;# > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel1.txt;# > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel2.txt;# > /dev/null; 
+
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/tsts/mars/Makefile b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/mars/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..0b1b503430cd70afcd36930214e546dcfa3448cc
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/mars/Makefile
@@ -0,0 +1,25 @@
+APPNAME = hyb1pds4gen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/st_0515854093_p.cub \
+		   to=$(OUTPUT)/st_0515854093_p.img \
+		   pds4logical="urn:nasa:pds:mybundle:mycollection:myproduct" \
+		   > /dev/null;
+
+	# Remove parts of output that can occur in any order and convert to txt for comparison
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	       $(OUTPUT)/st_0515854093_p.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\<description>Created PDS4 output product from ISIS cube.*<+\<description>Created PDS4 output product from ISIS cube.<+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/st_0515854093_p.xmlLabel.txt;
+
+	$(RM) $(OUTPUT)/st_0515854093_p.xml > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel1.txt > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel2.txt > /dev/null; 
+
diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/tsts/nirsitokawa3drefl/Makefile b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/nirsitokawa3drefl/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..1151e37f02eaf5725dd9178dc038d45b5e1c113f
--- /dev/null
+++ b/isis/src/hayabusa/apps/hyb1pds4gen/tsts/nirsitokawa3drefl/Makefile
@@ -0,0 +1,25 @@
+APPNAME = hyb1pds4gen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/2392975548_lvl3_0.refl.cub \
+		   to=$(OUTPUT)/2392975548_lvl3_0.refl.img \
+		   pds4logical="urn:jaxa:pds:mybundle:mycollection:myproduct" \
+		   > /dev/null;
+
+	# Remove parts of output that can occur in any order and convert to txt for comparison
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	       $(OUTPUT)/2392975548_lvl3_0.refl.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\<description>Created PDS4 output product from ISIS cube.*<+\<description>Created PDS4 output product from ISIS cube.<+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/2392975548_lvl3_0.refl.xmlLabel.txt;
+
+	$(RM) $(OUTPUT)/2392975548_lvl3_0.refl.xml > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel1.txt > /dev/null; 
+	$(RM) $(OUTPUT)/tempLabel2.txt > /dev/null; 
+
diff --git a/isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp b/isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp
index 76e504969d064314939d568811a1737291745059..e213c4c01be4509bafd2ca2a47b175c096ef6d58 100644
--- a/isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp
+++ b/isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp
@@ -124,52 +124,55 @@ void IsisMain() {
 
   PvlGroup dataDir(Preference::Preferences().findGroup("DataDirectory", Pvl::Traverse));
   QString transDir = (QString) dataDir["hayabusa"] + "/translations/";
-  QString instrumentTrans = transDir + "nirsInstrument.trn";
-  QString archiveTrans = transDir + "nirsArchive.trn";
-
   Pvl newLabel;
 
-  Isis::PvlToPvlTranslationManager instXlater(label, instrumentTrans);
+  QString instTrans = transDir + "nirsInstrument.trn";
+  Isis::PvlToPvlTranslationManager instXlater(label, instTrans);
   instXlater.Auto(newLabel);
 
-  Isis::PvlToPvlTranslationManager archXlater(label, archiveTrans);
+  QString archTrans = transDir + "nirsArchive.trn";
+  Isis::PvlToPvlTranslationManager archXlater(label, archTrans);
   archXlater.Auto(newLabel);
 
+  QString bandTrans = transDir + "nirsBandBin.trn";
+  Isis::PvlToPvlTranslationManager bandXlater(label, bandTrans);
+  bandXlater.Auto(newLabel);
+
+  QString kernTrans = transDir + "nirsKernels.trn";
+  Isis::PvlToPvlTranslationManager kernXlater(label, kernTrans);
+  kernXlater.Auto(newLabel);
+
   // Create the bandbin group
   // The following equation is from:
   // Abe et al., 2004. Characteristics and current status of near infrared
   // spectrometer for Hayabusa mission. Lunar & Planet. Sci. XXXV, 1724.
-  PvlGroup bandBinGroup("BandBin");
   PvlKeyword filterNumber("FilterNumber");
   PvlKeyword center("Center");
-  for (int i = 1; i <= 64; i++) {
-    filterNumber += toString( i );
-    center += toString( 2.27144 - 0.02356 * (65 - i) );
+  for (int channelNumber = 1; channelNumber <= 64; channelNumber++) {
+    filterNumber += toString( channelNumber );
+    center += toString( 2.27144 - 0.02356 * (65 - channelNumber) );
   }
-  bandBinGroup += filterNumber;
-  bandBinGroup += center;
-
-  // Create the Kernels group
-  PvlGroup kerns("Kernels");
-  kerns += PvlKeyword("NaifFrameCode","-130200");
+  newLabel.findGroup("BandBin", Pvl::Traverse).addKeyword(filterNumber);
+  newLabel.findGroup("BandBin", Pvl::Traverse).addKeyword(center);
+  newLabel.findGroup("BandBin", Pvl::Traverse).findKeyword("Width").setUnits("micrometers");
 
   //  Create YearDoy keyword in Archive group
   iTime stime(newLabel.findGroup("Instrument", Pvl::Traverse)["StartTime"][0]);
   PvlKeyword yeardoy("YearDoy", toString(stime.Year()*1000 + stime.DayOfYear()));
-  (void) newLabel.findGroup("Archive", Pvl::Traverse).addKeyword(yeardoy);
+  newLabel.findGroup("Archive", Pvl::Traverse).addKeyword(yeardoy);
 
   // Add the instrument, band bin, archive, mission data, and kernels
   // groups to the output cube labels
   reflectanceCube->putGroup( newLabel.findGroup("Instrument", Pvl::Traverse) );
-  reflectanceCube->putGroup( bandBinGroup );
+  reflectanceCube->putGroup( newLabel.findGroup("BandBin", Pvl::Traverse) );
   reflectanceCube->putGroup( newLabel.findGroup("Archive", Pvl::Traverse) );
   reflectanceCube->putGroup( newLabel.findGroup("MissionData", Pvl::Traverse) );
-  reflectanceCube->putGroup( kerns );
+  reflectanceCube->putGroup( newLabel.findGroup("Kernels", Pvl::Traverse) );
   stdevCube->putGroup( newLabel.findGroup("Instrument", Pvl::Traverse) );
-  stdevCube->putGroup( bandBinGroup );
+  stdevCube->putGroup( newLabel.findGroup("BandBin", Pvl::Traverse) );
   stdevCube->putGroup( newLabel.findGroup("Archive", Pvl::Traverse) );
   stdevCube->putGroup( newLabel.findGroup("MissionData", Pvl::Traverse) );
-  stdevCube->putGroup( kerns );
+  stdevCube->putGroup( newLabel.findGroup("Kernels", Pvl::Traverse) );
 
   // Attach the original fits label and detached label
   OriginalLabel originalFits(label);
diff --git a/isis/src/hayabusa2/apps/hyb2onccal/hyb2onccal.cpp b/isis/src/hayabusa2/apps/hyb2onccal/hyb2onccal.cpp
index abca84562edafd8583c6638f667567aced5c8ba7..a46b7356aa8d4103ac9093a11e5cec04c7021754 100644
--- a/isis/src/hayabusa2/apps/hyb2onccal/hyb2onccal.cpp
+++ b/isis/src/hayabusa2/apps/hyb2onccal/hyb2onccal.cpp
@@ -60,7 +60,6 @@ static AlphaCube *alpha(0);
 
 QString g_filter = "";
 static QString g_target ="";
-static const int g_Hayabusa2NaifCode = -130;
 static Pvl g_configFile;
 
 //Bias calculation variables
diff --git a/isis/src/juno/apps/junocam2isis/junocam2isis.cpp b/isis/src/juno/apps/junocam2isis/junocam2isis.cpp
index b593686592c5628b99fb20bd1a4d72ea764f482b..bac45bad14b828da73aa0faa4e949f8319c01983 100644
--- a/isis/src/juno/apps/junocam2isis/junocam2isis.cpp
+++ b/isis/src/juno/apps/junocam2isis/junocam2isis.cpp
@@ -27,8 +27,10 @@ using namespace Isis;
 void translateLabel(Pvl &inputLabel, Pvl &outputLabel);
 void processFramelets(Buffer &in);
 void processFullFrames(Buffer &in);
+void openNextCube(int index);
 
 QList<Cube *> g_outputCubes;
+QList<QString> g_outputCubeFileNames;
 int g_frameletLines = 0;
 QStringList g_filterList;
 QList<int> g_filterOffsetList; 
@@ -125,6 +127,8 @@ void IsisMain() {
                                      + ".cub");
       fullFrameCube->create(fullFrameCubeFileName.expanded());
       g_outputCubes.append(fullFrameCube);
+      fullFrameCube->close();
+      g_outputCubeFileNames.append(fullFrameCubeFileName.expanded());
       allCubesListWriter << fullFrameCubeFileName.baseName() << ".cub\n";
     }
     progress.CheckStatus();
@@ -141,7 +145,10 @@ void IsisMain() {
     for (int i = 0; i < numFullFrames; i++) {
       progress.CheckStatus();
       for (int j = 0; j < outputLabel.findObject("IsisCube").groups(); j++) {
-        g_outputCubes[i]->putGroup(outputLabel.findObject("IsisCube").group(j));
+        if (!g_outputCubes[i]->isOpen()) {
+          g_outputCubes[i]->open(g_outputCubeFileNames[i], "rw");
+        }
+        g_outputCubes[i]->putGroup(outputLabel.findObject("IsisCube").group(j)); 
       }
       // Update the labels
       Pvl *fullFrameLabel = g_outputCubes[i]->label();
@@ -163,7 +170,6 @@ void IsisMain() {
     progress.CheckStatus();
   }
   else { 
-
     // Process individual framelets: For now, keep processing the "old" way.
     int numSubimages = importPds.Lines() / g_frameletLines;
     int frameletsPerFilter = numSubimages / g_filterList.size();
@@ -184,6 +190,7 @@ void IsisMain() {
     Progress progress;
     progress.SetText("Setting up output framelet cubes.");
     progress.SetMaximumSteps(numSubimages);
+
     for (int i = 0; i < numSubimages; i++) {
       progress.CheckStatus();
       Cube *frameletCube = new Cube();
@@ -196,10 +203,12 @@ void IsisMain() {
                                     + "_" + g_filterList[filterIndex] 
                                     + "_" + frameletNumString 
                                     + ".cub");
-      frameletCube->create(frameletCubeFileName.expanded());
 
+      frameletCube->create(frameletCubeFileName.expanded());
       g_outputCubes.append(frameletCube);
-
+      frameletCube->close();
+      g_outputCubeFileNames.append(frameletCubeFileName.expanded());
+      
       QFile filterListFile(outputBaseName + "_" + g_filterList[filterIndex] + ".lis");
       if ( (frameletNumber == 1 && !filterListFile.open(QFile::WriteOnly | QFile::Text))
            || (frameletNumber > 1 && !filterListFile.open(QFile::Append | QFile::Text)) ) {
@@ -212,6 +221,7 @@ void IsisMain() {
       filterListWriter << frameletCubeFileName.baseName() << ".cub\n";
       filterListFile.close();
     }
+
     progress.CheckStatus();
     allCubesListFile.close();
 
@@ -224,7 +234,12 @@ void IsisMain() {
     progress.SetText("Updating labels of output cubes.");
     progress.SetMaximumSteps(numSubimages);
     for (int i = 0; i < numSubimages; i++) {
-      // fix labels
+      // re-open cube
+      QString cubeFileName = g_outputCubes[i]->fileName(); 
+      if ( !g_outputCubes[i]->isOpen() ) {
+        g_outputCubes[i]->open(g_outputCubeFileNames[i], "rw"); 
+      }
+      // fromeix labels
       progress.CheckStatus();
       for (int j = 0; j < outputLabel.findObject("IsisCube").groups(); j++) {
         g_outputCubes[i]->putGroup(outputLabel.findObject("IsisCube").group(j));
@@ -349,6 +364,20 @@ void translateLabel(Pvl &inputLabel, Pvl &outputLabel) {
 
 }
 
+/**
+ * Opens cube from g_outputCubes at provided index, closes cube at index-1 (last cube) 
+ */
+void openNextCube(int nextCubeIndex) {
+  if (nextCubeIndex >= 1) {
+    if (g_outputCubes[nextCubeIndex-1]->isOpen()) {
+      g_outputCubes[nextCubeIndex - 1]->close(); 
+    }
+  }
+  if (!g_outputCubes[nextCubeIndex]->isOpen()) {
+    g_outputCubes[nextCubeIndex]->open(g_outputCubeFileNames[nextCubeIndex], "rw"); 
+  }
+}
+
 
 /**
  * Separates each of the individual frames into their own file. 
@@ -359,6 +388,12 @@ void processFramelets(Buffer &in) {
   // get the index for the correct output cube
   int outputCube = (in.Line() - 1) / g_frameletLines % g_outputCubes.size();
 
+  // When we move to a new framlet, close the old cube and open the next one to avoid
+  // having too many cubes open and hitting the open file limit. 
+  if( ((in.Line() - 1) % g_frameletLines) == 0 ) {
+    openNextCube(outputCube);
+  }
+
   LineManager mgr(*g_outputCubes[outputCube]);
   int outputCubeLineNumber = (in.Line()-1) % g_frameletLines + 1;
   mgr.SetLine(outputCubeLineNumber, 1);
@@ -379,6 +414,12 @@ void processFullFrames(Buffer &in) {
   // get the index for the correct output cube
   int outputCube = (in.Line() - 1) / g_fullFrameLines % g_outputCubes.size();
 
+  // When we move to a new framlet, close the old cube and open the next one to avoid
+  // having too many cubes open and hitting the open file limit. 
+  if( ((in.Line() - 1) % g_fullFrameLines) == 0 ) {
+    openNextCube(outputCube);
+  }
+
   LineManager mgr(*g_outputCubes[outputCube]);
   
   int outputCubeLineNumber = ((in.Line()-1) % g_fullFrameLines);
diff --git a/isis/src/juno/apps/junocam2isis/junocam2isis.xml b/isis/src/juno/apps/junocam2isis/junocam2isis.xml
index 0b3618e9582620dae1c46e9ccc5d9cf5b856c599..b984d970c3753d9088b0234464a93d7fe22246a7 100644
--- a/isis/src/juno/apps/junocam2isis/junocam2isis.xml
+++ b/isis/src/juno/apps/junocam2isis/junocam2isis.xml
@@ -7,15 +7,15 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica
 
   <description>
     <p>
-      This program converts a PDS formatted JunoCam image to an ISIS3 
+      This program converts a PDS formatted JunoCam image to an ISIS3
       <def link="Cube">cube</def> format.
      </p>
 
      <p>
-     PDS-formatted JunoCam images contain several framelets and filters in the same image. 
-     For ease in processing with ISIS3, by default one input JunoCam image is converted to several output 
-     ISIS3 cubes and associated lists of cubes. There is one output cube for each framelet of the 
-     PDS formatted JunoCam image, each of which is named with the prefix specified with the "TO" 
+     PDS-formatted JunoCam images contain several framelets and filters in the same image.
+     For ease in processing with ISIS3, by default one input JunoCam image is converted to several output
+     ISIS3 cubes and associated lists of cubes. There is one output cube for each framelet of the
+     PDS formatted JunoCam image, each of which is named with the prefix specified with the "TO"
      user parameter, the filter name, and the 0-indexed framelet number. In the following example,
      if the input image "JunoCamTest.IMG" had 2 framelets for each filter (Red, Blue, Green,
      and Methane), and the following command was run:
@@ -54,7 +54,7 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica
 
      <p>
      If the FULLCCD parameter is set to yes, instead of outputting one ISIS3 Cube per filter and
-     framelet, junocam2isis will output one ISIS3 Cube for each original observation and will 
+     framelet, junocam2isis will output one ISIS3 Cube for each original observation and will
      contain all the filters that were part of that observation. If the above example was modified
      changed to set the FULLCCD parameter to true,
      </p>
@@ -80,14 +80,21 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica
     <change name="Kris Becker and Kristin Berry" date="2017-08-12">
       Added FULLCCD parameter which provides the ability to create images with
       the framelet set in a single composite output file. Updated labels and
-      documentation. 
+      documentation.
     </change>
     <change name="Jesse Mapel" date="2017-08-21">
       Added two examples, one for the filter mode and one for the full CCD mode.
     </change>
+    <change name="Kaitlyn Lee" date="2018-02-07">
+      Added missionItem under category to classify the program under Juno.
+    </change>
+    <change name="Kristin Berry" date="2018-03-27">
+      Fixed problem with having too many open files. See #5232 for more information. 
+    </change>
   </history>
 
   <category>
+    <missionItem>Juno</missionItem>
     <categoryItem>Import and Export</categoryItem>
   </category>
 
diff --git a/isis/src/juno/objs/JunoCamera/JunoCamera.cpp b/isis/src/juno/objs/JunoCamera/JunoCamera.cpp
index 3fbb754ec474c68d79728d9fbda49d81e4415121..f7c098c86486cc50eb85315b126d6b0cb2acda68 100644
--- a/isis/src/juno/objs/JunoCamera/JunoCamera.cpp
+++ b/isis/src/juno/objs/JunoCamera/JunoCamera.cpp
@@ -48,7 +48,7 @@ namespace Isis {
 
     m_spacecraftNameLong = "Juno";
     m_spacecraftNameShort = "Juno";
-    
+
     NaifStatus::CheckErrors();
 
     // Set up the camera characteristics
@@ -73,7 +73,7 @@ namespace Isis {
       detMap->SetDetectorSampleSumming(summing);
       detMap->SetDetectorLineSumming(summing);
     }
-    
+
     // Juno codes
     int junoCode = naifIkCode();
     QString juno = toString(junoCode);
@@ -111,7 +111,7 @@ namespace Isis {
 
     // get start et for this frame, in seconds
     double frameStartEt = observationStartEt + startTimeBias + (frameNumber - 1)
-                             * (exposureDur + interFrameDelay + interFrameDelayBias);
+                             * (interFrameDelay + interFrameDelayBias);
     // Set start time to center of exposure time to ensure the proper SPICE data is cached.
     setTime(frameStartEt + exposureDur / 2.0);
 
@@ -123,24 +123,24 @@ namespace Isis {
   /**
    * Destroys the JunoCamera object.
    */
-  JunoCamera::~JunoCamera() { 
+  JunoCamera::~JunoCamera() {
   }
 
 
   /**
    * Returns the shutter open and close times.  The user should pass in the
    * ExposureDuration keyword value, converted from milliseconds to seconds, and
-   * the SpacecraftClockCount keyword value, converted to ephemeris time. The 
-   * StartTime keyword value from the labels represents the shutter open time of 
-   * the observation. This method uses the FramingCamera class implementation, 
-   * returning the given time value as the shutter open and the sum of the time 
+   * the SpacecraftClockCount keyword value, converted to ephemeris time. The
+   * StartTime keyword value from the labels represents the shutter open time of
+   * the observation. This method uses the FramingCamera class implementation,
+   * returning the given time value as the shutter open and the sum of the time
    * value and exposure duration as the shutter close.
-   * 
+   *
    * @param exposureDuration Exposure duration value from the labels, converted
    *                         to seconds.
-   * @param time The SpacecraftClockCount value from the labels, converted to 
+   * @param time The SpacecraftClockCount value from the labels, converted to
    *             ephemeris time
-   * 
+   *
    * @return @b pair < @b iTime, @b iTime > The first value is the shutter
    *         open time and the second is the shutter close time.
    */
@@ -152,9 +152,9 @@ namespace Isis {
 
 
   /**
-   * Retrieves the CK frame ID for the JunoCam instrument. 
-   *  
-   * @return @b int The appropriate instrument code for the "Camera-matrix" 
+   * Retrieves the CK frame ID for the JunoCam instrument.
+   *
+   * @return @b int The appropriate instrument code for the "Camera-matrix"
    *                Kernel Frame ID.
    */
   int JunoCamera::CkFrameId() const {
@@ -162,9 +162,9 @@ namespace Isis {
   }
 
 
-  /** 
-    * Retrieves the J2000 CK Reference ID for the JunoCam instrument. 
-    * 
+  /**
+    * Retrieves the J2000 CK Reference ID for the JunoCam instrument.
+    *
     * @return @b int The appropriate instrument code for the "Camera-matrix"
     *                Kernel Reference ID.
     */
@@ -184,10 +184,10 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
     * Retrieves the J2000 SPK Reference ID for the JunoCam instrument.
-    *  
-    * @return @b int The appropriate instrument code for the Spacecraft 
+    *
+    * @return @b int The appropriate instrument code for the Spacecraft
     *                Kernel Reference ID.
     */
   int JunoCamera::SpkReferenceId() const {
diff --git a/isis/src/juno/objs/JunoCamera/JunoCamera.h b/isis/src/juno/objs/JunoCamera/JunoCamera.h
index 142edd90c4ddaded2286a737382a35b65ae54372..a61108f25c785899452562f9d814fbe212dbca9a 100644
--- a/isis/src/juno/objs/JunoCamera/JunoCamera.h
+++ b/isis/src/juno/objs/JunoCamera/JunoCamera.h
@@ -34,20 +34,22 @@ namespace Isis {
    * framing instrument. This is
    * also a more flexible camera model since it will make controlling the
    * individual framelets alot easier.
-   * 
+   *
    * @ingroup SpiceInstrumentsAndCameras
    * @ingroup Juno
    * @author 2017-07-22 Jeannie Backer
    *
    * @internal
-   *   @history 2017-07-22 Jeannie Backer - Original version. 
+   *   @history 2017-07-22 Jeannie Backer - Original version.
+   *   @history 2018-04-25 Jesse Mapel - Modified frame start calculation to not
+   *                           use exposure duration. Fixes #5236.
    */
   class JunoCamera : public FramingCamera {
     public:
       JunoCamera(Cube &cube);
       ~JunoCamera();
 
-      virtual std::pair <iTime, iTime> ShutterOpenCloseTimes(double time, 
+      virtual std::pair <iTime, iTime> ShutterOpenCloseTimes(double time,
                                                              double exposureDuration);
       virtual int CkFrameId() const;
       virtual int CkReferenceId() const;
diff --git a/isis/src/lro/apps/lromakeflat/lromakeflat.cpp b/isis/src/lro/apps/lromakeflat/lromakeflat.cpp
index 7c8062ef26afbc133dfb5fdf9f25cdd7339bbfeb..edea5a44b55c8dbf165338dfac4a6321b1150c8e 100644
--- a/isis/src/lro/apps/lromakeflat/lromakeflat.cpp
+++ b/isis/src/lro/apps/lromakeflat/lromakeflat.cpp
@@ -2,9 +2,9 @@
  * @Brief This application creates three flatfield (Sensitivity Non-Uniformity Matrix) cubes used for calibration
  *
  * This application creates three flatfield (Sensitivity Non-Uniformity Matrix) cubes used for calibration.
- * The cubes consist of median, mean, and standard deviation values per pixel. Process varies for the three 
- * cameras this application can be used for but general pixel stacking column approach is the same. The 
- * three camera types are line-scan, push-frame, and framing. Invalid pixel values are changed to Isis::Null. 
+ * The cubes consist of median, mean, and standard deviation values per pixel. Process varies for the three
+ * cameras this application can be used for but general pixel stacking column approach is the same. The
+ * three camera types are line-scan, push-frame, and framing. Invalid pixel values are changed to Isis::Null.
  *
  * The application uses a two step process.
  *
@@ -12,19 +12,19 @@
  *
  * The first part of the process is to stack cube pixels at their respective pixel locations.
  *
- * These stacked pixels are processed to produce the median, mean, and standard deviation values for the 
- * pixel location, and to toss out invalid pixel values.  Normalization can also be done at this time if 
- * images were not normalized prior. The mean is used to normalize images. 
+ * These stacked pixels are processed to produce the median, mean, and standard deviation values for the
+ * pixel location, and to toss out invalid pixel values.  Normalization can also be done at this time if
+ * images were not normalized prior. The mean is used to normalize images.
  *
  * Step #2 - PROCESSING STACKED PIXEL COLUMNS AND TRANSFERRING TO SNU
  *
- * Once pixels have been stacked into pixel columns mean and median averages, and standard devation for that 
+ * Once pixels have been stacked into pixel columns mean and median averages, and standard devation for that
  * pixel location is saved to the SNU matrix (flatfield cubes).
  *
  * Mean
  *  -The summed pixels are divided by the number of pixels.
- * Standard Deviation 
- *  -The mean average is used to calculate the standard deviation. 
+ * Standard Deviation
+ *  -The mean average is used to calculate the standard deviation.
  * Median
  *  -The pixel column is sorted and the median is obtained.
  *
@@ -91,7 +91,7 @@ vector < PvlObject > g_excludedDetails;
    *
    * Computes flatfield image for linescan, pushbroom, and framing
    * Cameras
-   * 
+   *
    * @throws IException::User "Only single band images accepted"
    * @throws IException::User "User selected lines value exceeds number of lines in cube"
    * @throws IException::Programmer "Could not write to output cube"
@@ -100,7 +100,7 @@ vector < PvlObject > g_excludedDetails;
    *
    * @internal
    *   @history 2016-08-17 Victor Silva - New app for lroc adapted from makeflat app
-   *                         
+   *
    */
 void IsisMain() {
 
@@ -115,7 +115,7 @@ void IsisMain() {
   int cubeWidthPixels = 0, frameHeightLines = 0, framesPerCube, frameLineCount;
 
   // Setup Sensitivity Non-uniformity Matrix cubes (flatfielding matrix) and line managers
-  Cube *oStdevCube = NULL, *oMedianCube = NULL, *oMeanCube = NULL; 
+  Cube *oStdevCube = NULL, *oMedianCube = NULL, *oMeanCube = NULL;
   LineManager *oStdevlineMgr = NULL, *oMeanLineMgr = NULL, *oMedianLineMgr = NULL;
 
   // Get some info from first cube in list
@@ -144,7 +144,7 @@ void IsisMain() {
     oLineCount = 1;
     frameLineCount = abs(ui.GetInteger("NUMLINES"));
     if (iLineCount != frameLineCount) {
-      string err = "User selected lines value (" + IString(frameLineCount) + 
+      string err = "User selected lines value (" + IString(frameLineCount) +
          ") exceeds number of lines in cube (" + IString(iLineCount) + ". \n";
       throw IException(IException::User, err, _FILEINFO_);
     }
@@ -192,7 +192,7 @@ void IsisMain() {
       tmp2.open(g_list[listIndex].toString());
       // Only run for cubes with one band
       if (tmp2.bandCount() != 1) {
-        string err = "Warning: This cube has too many bands(" + IString(tmp2.bandCount()) + 
+        string err = "Warning: This cube has too many bands(" + IString(tmp2.bandCount()) +
           " and will be excluded). Only single band images accepted. \n";
         cerr << err << endl;
         exclude(listIndex, err);
@@ -201,7 +201,7 @@ void IsisMain() {
       }
       // Reset frame for every cube in list
       int frame = 0;
-      // Cube line has to match oLine as we are slicing the cubes one line at a time to stack pixels 
+      // Cube line has to match oLine as we are slicing the cubes one line at a time to stack pixels
       for (long cubeLine = oLine; cubeLine <= iLineCount; cubeLine = cubeLine + frameLineCount) {
         LineManager cubeMgr(tmp2);
         cubeMgr.SetLine(cubeLine);
@@ -211,7 +211,7 @@ void IsisMain() {
         for (int column = 0; column < g_sampleCount; column++) {
           pixelVal = cubeMgr[column];
           int frameIndex = listIndex * framesPerCube + frame;
-          // If frame avg is zero, will cause div/zero error. Set pixel to 0? nil?  
+          // If frame avg is zero, will cause div/zero error. Set pixel to 0? nil?
           (normMatrix[listIndex][frame])? pixelVal = (pixelVal/(normMatrix[listIndex][frame])):pixelVal = Isis::Null;
           pixelMatrix[column][frameIndex] = pixelVal;
         }
@@ -239,7 +239,7 @@ void IsisMain() {
       oMeanCube->write(*oMeanLineMgr);
       oMedianCube->write(*oMedianLineMgr);
     }
-    catch (IException e) {
+    catch (IException &e) {
       //cout << "It's no use at this point. Just go. Leave me here. I'll only slow you down.";
       string err = "Could not write to output cube " + IString(FileName(ui.GetFileName("TO")).expanded()) + ".\n";
       throw IException(IException::Programmer, err, _FILEINFO_);
@@ -298,7 +298,7 @@ void IsisMain() {
  * @param int frameHeight size of frame in rows
  * @param long frameLineCount number of lines to make a frame
  * @param long iLineCount number of lines total in cube
- * 
+ *
  * @throws IException::User "This selection will yield less than 1 pixel (width). This is not enough to normalize."
  * @throws IException::User "This percentage will yield less than 1 line. This is not enough to normalize."
  *
@@ -306,7 +306,7 @@ void IsisMain() {
  *
  * @internal
  *   @history 2016-08-17 Victor Silva - New app for lroc adapted from makeflat app
- *   
+ *
  */
 void getCubeListNormalization(Matrix2d &matrix, int cubeWidth, int frameHeight, long frameLineCount, long iLineCount) {
 
@@ -362,11 +362,11 @@ void getCubeListNormalization(Matrix2d &matrix, int cubeWidth, int frameHeight,
 
 
 /**
- * @brief This function returns the median, mean, and standard deviation for a vector 
+ * @brief This function returns the median, mean, and standard deviation for a vector
  *        of valid pixels
  *
- * It will return Isis::Null if it doesn't find any valid pixels. The function builds 
- * a vector of valid pixels. It also calculates the mean and standard deviation of the 
+ * It will return Isis::Null if it doesn't find any valid pixels. The function builds
+ * a vector of valid pixels. It also calculates the mean and standard deviation of the
  * vector. The function also sorts the vector and finds the median. If there are an even
  * number of valid pixels, it will average (mean) the two middle pixels and return
  * that average as the median. It does not return the median pixel but rather its
@@ -414,7 +414,7 @@ void getVectorStats(vector<double> &inVec, double &mean, double &median, double
       sum = 0;
       vector <double> v2;
       for(int i = 0; i < v_size; i++ ){
-        if( (abs(tempMean - v1[i])) <= (tempStdev * g_numStdevs) ){  
+        if( (abs(tempMean - v1[i])) <= (tempStdev * g_numStdevs) ){
           v2.push_back(v1[i]);
           sum += v1[i];
         }
@@ -440,10 +440,10 @@ void getVectorStats(vector<double> &inVec, double &mean, double &median, double
           median = double(v2[medianIndex]);
         }
         v2.clear();
-      } 
+      }
       v1.clear();
-    } 
-  } 
+    }
+  }
 }
 
 
@@ -502,4 +502,3 @@ void exclude(int listIndex, int frame, string reason){
     g_excludedDetails.push_back(exclusion);
   }
 }
-
diff --git a/isis/src/lro/apps/lronacpho/lronacpho.xml b/isis/src/lro/apps/lronacpho/lronacpho.xml
index a3bd28c4af51a4ded4bdeaf49c5475386aa7a712..4f1b951b2343e64c9db6b657bbdb1da9485be969 100644
--- a/isis/src/lro/apps/lronacpho/lronacpho.xml
+++ b/isis/src/lro/apps/lronacpho/lronacpho.xml
@@ -104,6 +104,7 @@
       incidence angle greater than 90 degrees is set to the ISIS special Null 
       pixel value.  And, of course, any ISIS special pixel encountered on input 
       is propagated to the output TO file without modification.
+     <b>Function is only valid for phase angles between 15 and 65 degrees.</b>
     </p>
   </description>
 
diff --git a/isis/src/lro/objs/MiniRF/unitTest.cpp b/isis/src/lro/objs/MiniRF/unitTest.cpp
index 9b51dfa52c273dfa9abfcc5121519006a253c7bb..6df40494326f2d09f6a5b040a4355060cf82d870 100644
--- a/isis/src/lro/objs/MiniRF/unitTest.cpp
+++ b/isis/src/lro/objs/MiniRF/unitTest.cpp
@@ -2,17 +2,17 @@
  * @file
  *
  *   Unless noted otherwise, the portions of Isis written by the USGS are public
- *   domain. See individual third-party library and package descriptions for 
+ *   domain. See individual third-party library and package descriptions for
  *   intellectual property information,user agreements, and related information.
  *
  *   Although Isis has been used by the USGS, no warranty, expressed or implied,
- *   is made by the USGS as to the accuracy and functioning of such software 
- *   and related material nor shall the fact of distribution constitute any such 
- *   warranty, and no responsibility is assumed by the USGS in connection 
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
  *   therewith.
  *
  *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see 
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
  *   the Privacy &amp; Disclaimers page on the Isis website,
  *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
  *   http://www.usgs.gov/privacy.html.
@@ -42,14 +42,14 @@ int main(void) {
     // and "Longitude off by: " values directly into these variables.
     double knownLat = 85.5973879396895398;
     double knownLon = 264.7361454607174664;
-    
-    Cube c("$chan1/testData/FSR_CDR_LV1_01801_0R.cub", "r");
+
+    Cube c("$chandrayaan1/testData/FSR_CDR_LV1_01801_0R.cub", "r");
     Camera *cam = Isis::CameraFactory::Create(c);
-    cout << "FileName: " << FileName(c.fileName()).name() << endl;
+    cout << "FileName: " << FileName( c.fileName() ).name() << endl;
     cout << "CK Frame: " << cam->instrumentRotation()->Frame() << endl << endl;
     cout.setf(std::ios::fixed);
     cout << setprecision(9);
-    
+
     // Test all four corners to make sure the conversions are right
     cout << "For upper left corner ..." << endl;
     TestLineSamp(cam, 1.0, 1.0);
@@ -67,7 +67,7 @@ int main(void) {
     double line = cam->Lines() / 2;
     cout << "For center pixel position ..." << endl;
 
-    if(!cam->SetImage(samp, line)) {
+    if( !cam->SetImage(samp, line) ) {
       std::cout << "ERROR" << std::endl;
       return 0;
     }
@@ -85,20 +85,20 @@ int main(void) {
     else {
       cout << setprecision(16) << "Longitude off by: " << cam->UniversalLongitude() - knownLon << endl;
     }
-    
+
     cout << endl << "RightAscension = " << cam->RightAscension() << endl;
-    cout << "Declination = " << cam->Declination() << endl;     
+    cout << "Declination = " << cam->Declination() << endl;
 
     Cube c2("$lro/testData/LSZ_04970_1CD_XKU_71S272_V1.reduced.cub", "r");
     Camera *cam2 = CameraFactory::Create(c2);
-    
+
     // Test name methods
     cout << endl << endl << "Testing name methods ..." << endl;
     cout << "Spacecraft Name Long: " << cam->spacecraftNameLong() << endl;
     cout << "Spacecraft Name Short: " << cam->spacecraftNameShort() << endl;
     cout << "Instrument Name Long: " << cam->instrumentNameLong() << endl;
     cout << "Instrument Name Short: " << cam->instrumentNameShort() << endl << endl;
-    
+
     cout << "Spacecraft Name Long: " << cam2->spacecraftNameLong() << endl;
     cout << "Spacecraft Name Short: " << cam2->spacecraftNameShort() << endl;
     cout << "Instrument Name Long: " << cam2->instrumentNameLong() << endl;
@@ -106,52 +106,52 @@ int main(void) {
 
     // Test kernel ID messages
     cout << endl << "Kernel ID error messages: " << endl;
-    try{ 
-      cam->CkFrameId(); 
+    try{
+      cam->CkFrameId();
     }
-    catch(IException e){
-       e.print(); 
+    catch(IException &e){
+       e.print();
     }
-    try{ 
-      cam->CkReferenceId(); 
+    try{
+      cam->CkReferenceId();
     }
-    catch (IException e){ 
-      e.print(); 
+    catch (IException &e){
+      e.print();
     }
-    try{ 
-      cam->SpkTargetId(); 
+    try{
+      cam->SpkTargetId();
     }
-    catch (IException e){ 
-      e.print(); 
+    catch (IException &e){
+      e.print();
     }
-    try{ 
-      cam->SpkReferenceId(); 
+    try{
+      cam->SpkReferenceId();
     }
-    catch (IException e){
-       e.print(); 
+    catch (IException &e){
+       e.print();
     }
 
    // Test a Level-2 image
-    cout << endl << "Testing a Level-2 cube: " << endl << endl; 
+    cout << endl << "Testing a Level-2 cube: " << endl << endl;
 
     Cube c3("$lro/testData/LSB_00291_1CD_XIU_89S206_V1_c2m.cub", "r");
+
     Camera *cam3 = CameraFactory::Create(c3);
 
-    // Just test the center pixel to make sure the Camera still works on Level-2 
+    // Just test the center pixel to make sure the Camera still works on Level-2
     // images
-    
+
     cout << "For a central pixel position ..." << endl;
-    samp = 2014; 
-    line = 1026; 
+    samp = 2014;
+    line = 1026;
 
-    if (!cam3->SetImage(samp, line)) {
+    if ( !cam3->SetImage(samp, line) ) {
       cout << "ERROR" << endl;
       return 0;
     }
     else {
-      cout << "SetImage succeeded." << endl; 
+      cout << "SetImage succeeded." << endl;
     }
-
   }
   catch(Isis::IException &e) {
     e.print();
@@ -162,7 +162,7 @@ void TestLineSamp(Isis::Camera *cam, double samp, double line) {
   bool success = cam->SetImage(samp, line);
 
   if(success) {
-    success = cam->SetUniversalGround(cam->UniversalLatitude(), cam->UniversalLongitude());
+    success = cam->SetUniversalGround( cam->UniversalLatitude(), cam->UniversalLongitude() );
   }
 
   if(success) {
@@ -178,4 +178,3 @@ void TestLineSamp(Isis::Camera *cam, double samp, double line) {
     cout << "DeltaLine = ERROR" << endl << endl;
   }
 }
-
diff --git a/isis/src/messenger/apps/mdis2isis/tsts/default/Makefile b/isis/src/messenger/apps/mdis2isis/tsts/default/Makefile
index 80515c496843889aa2937c2d7c46a072ab52548b..365f692e8fdad49f1f547baaa202a192a343ad84 100644
--- a/isis/src/messenger/apps/mdis2isis/tsts/default/Makefile
+++ b/isis/src/messenger/apps/mdis2isis/tsts/default/Makefile
@@ -10,9 +10,9 @@ commands:
 	  to=$(OUTPUT)/mdis2isisTruth.pvl> /dev/null
 	$(APPNAME) from=$(INPUT)/EN0089569526M.IMG \
 	  to=$(OUTPUT)/mdis2isisLutTruth.cub > /dev/null
-	catlab from=$(OUTPUT)/mdis2isisTruth.cub \
+	catlab from=$(OUTPUT)/mdis2isisLutTruth.cub \
 	  to=$(OUTPUT)/mdis2isisLutTruth.pvl> /dev/null
 	$(APPNAME) from=$(INPUT)/EN0131771763M.IMG \
 	  to=$(OUTPUT)/mdis2isisStrangeLabelTruth.cub > /dev/null
-	catlab from=$(OUTPUT)/mdis2isisTruth.cub \
+	catlab from=$(OUTPUT)/mdis2isisStrangeLabelTruth.cub \
 	  to=$(OUTPUT)/mdis2isisStrangeLabelTruth.pvl> /dev/null
diff --git a/isis/src/mex/apps/hrsc2isis/hrsc2isis.cpp b/isis/src/mex/apps/hrsc2isis/hrsc2isis.cpp
index bcca4c96fee79f643f08662f7a981e41869b4c01..8e8eab9ea86dddaa46a97032dda211f5253c672e 100644
--- a/isis/src/mex/apps/hrsc2isis/hrsc2isis.cpp
+++ b/isis/src/mex/apps/hrsc2isis/hrsc2isis.cpp
@@ -93,7 +93,7 @@ void IsisMain() {
     }
   }
 
-  catch (IException e) {
+  catch (IException &e) {
       QString msg = "File cannot be read by hrsc2isis, use pds2isis.";
       throw IException(e, IException::User, msg, _FILEINFO_);
   }
diff --git a/isis/src/mgs/apps/mocuncompress/CheckSum.cpp b/isis/src/mgs/apps/mocuncompress/CheckSum.cpp
index 29d8ffbca0b003b7ff0d16628aa6f761b11aee16..654d1c47b850e214e6551e1adaf7af3484206f6c 100644
--- a/isis/src/mgs/apps/mocuncompress/CheckSum.cpp
+++ b/isis/src/mgs/apps/mocuncompress/CheckSum.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -47,7 +54,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 #include "fs.h"
 #include "CheckSum.h"
 
-uint8 CS8EAC(register uint8 *d, register uint32 l)
+uint8 CS8EAC(uint8 *d, uint32 l)
 {
   /*
   * Compute the eight bit end-around-carry checksum of a data vector.
@@ -91,7 +98,7 @@ uint32 cs = 0;
 }
 
 #if defined(TEST)
-uint8 tcs8eac(d, l)register uint8 *d;
+uint8 tcs8eac(d, l)uint8 *d;
 uint32 l;
 {
   /*
@@ -106,7 +113,7 @@ uint32 cs = 0;
 }
 #endif
 
-void CS8EACA1(register uint8 *dat, uint32 len)
+void CS8EACA1(uint8 *dat, uint32 len)
 {
   /*
   * Apply type 1 CS8EAC checksum to dat.
@@ -122,7 +129,7 @@ void CS8EACA1(register uint8 *dat, uint32 len)
   *(uint8 *)&dat[len-1] = t;
 }
 
-void CS8EACA2(register uint8 *dat, uint32 len)
+void CS8EACA2(uint8 *dat, uint32 len)
 {
   /*
   * Apply type 2 CS8EAC checksum to dat.
@@ -138,7 +145,7 @@ void CS8EACA2(register uint8 *dat, uint32 len)
   *(uint8 *)&dat[len-1] = 0xff - t;
 }
 
-unsigned int CS8EACC1(register uint8 *dat, unsigned int len)
+unsigned int CS8EACC1(uint8 *dat, unsigned int len)
 {
   /*
   * Check type 1 checksum.
@@ -156,7 +163,7 @@ unsigned int CS8EACC1(register uint8 *dat, unsigned int len)
   return rv;
 }
 
-unsigned int CS8EACC2(register uint8 *dat, unsigned int len)
+unsigned int CS8EACC2(uint8 *dat, unsigned int len)
 {
   /*
   * Check type 2 checksum.
@@ -174,7 +181,7 @@ unsigned int CS8EACC2(register uint8 *dat, unsigned int len)
   return rv;
 }
 
-uint16 CS16EAC(register uint8 *d, uint32 len)
+uint16 CS16EAC(uint8 *d, uint32 len)
 {
   /*
   * Compute the sixteen bit end-around-carry checksum of a data vector.
@@ -229,7 +236,7 @@ uint16 t;
 }
 
 #if defined(TEST)
-uint16 tcs16eac(d, l)register uint8 *d;
+uint16 tcs16eac(d, l)uint8 *d;
 uint32 l;
 {
   /*
@@ -247,7 +254,7 @@ uint32 cs = 0;
 }
 #endif
 
-void CS16EACA1(register uint8 *dat, uint32 len)
+void CS16EACA1(uint8 *dat, uint32 len)
 {
   /*
   * Apply type 1 CS16EAC checksum to dat.
@@ -265,7 +272,7 @@ void CS16EACA1(register uint8 *dat, uint32 len)
   /* *(uint16*)&(dat[len-2]) = t; */
 }
 
-void CS16EACA2(register uint8 *dat, uint32 len)
+void CS16EACA2(uint8 *dat, uint32 len)
 {
   /*
   * Apply type 2 CS16EAC checksum to dat.
@@ -284,7 +291,7 @@ void CS16EACA2(register uint8 *dat, uint32 len)
   /* *(uint16*)&(dat[len-2]) = t; */
 }
 
-unsigned int CS16EACC1(register uint8 *dat, unsigned int len)
+unsigned int CS16EACC1(uint8 *dat, unsigned int len)
 {
   /*
   * Check type 1 checksum.
@@ -305,7 +312,7 @@ unsigned int CS16EACC1(register uint8 *dat, unsigned int len)
   return rv;
 }
 
-unsigned int CS16EACC2(register uint8 *dat, unsigned int len)
+unsigned int CS16EACC2(uint8 *dat, unsigned int len)
 {
   /*
   * Check type 2 checksum.
@@ -323,7 +330,7 @@ unsigned int CS16EACC2(register uint8 *dat, unsigned int len)
   return rv;
 }
 
-unsigned int ParityOf(register uint8 *d, register uint32 l)
+unsigned int ParityOf(uint8 *d, uint32 l)
 {
   /*
   * Compute parity of data vector.
diff --git a/isis/src/mgs/apps/mocuncompress/decompNONE.cpp b/isis/src/mgs/apps/mocuncompress/decompNONE.cpp
index 055ee7e994518f76aca08109d4b14f69f7e7a3dd..15e9230bf34c895a294e0d8f302a2ac2f23f15d7 100644
--- a/isis/src/mgs/apps/mocuncompress/decompNONE.cpp
+++ b/isis/src/mgs/apps/mocuncompress/decompNONE.cpp
@@ -46,7 +46,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 #include "decompNONE.h"
 
-void decompNONE(register uint8 *curLine, register uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
+void decompNONE(uint8 *curLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
 {
 uint32 bitCount;
 uint8 *data;
diff --git a/isis/src/mgs/apps/mocuncompress/decompNONE.h b/isis/src/mgs/apps/mocuncompress/decompNONE.h
index 58cfbdf95e0b4d972d9ed05cba75ae05ff1d0e65..379e91c6fd00e59c65aca5ce5019faeea3d82c3b 100644
--- a/isis/src/mgs/apps/mocuncompress/decompNONE.h
+++ b/isis/src/mgs/apps/mocuncompress/decompNONE.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)decompNONE.h  1.1 10/04/99
 
 #define decompNONE_h
 
-extern void decompNONE(register uint8 *curLine, register uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
+extern void decompNONE(uint8 *curLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/decompSYNC.cpp b/isis/src/mgs/apps/mocuncompress/decompSYNC.cpp
index 186e5d09f6ca304c74b3602eeaa7264e6c5e55f1..04e8f1ad5b34c106f759f491cd0dd0ce0119639c 100644
--- a/isis/src/mgs/apps/mocuncompress/decompSYNC.cpp
+++ b/isis/src/mgs/apps/mocuncompress/decompSYNC.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+================================================== 
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -46,7 +53,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 #include "decompSYNC.h"
 
-void decompSYNC(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint16 sync, BITSTRUCT *bitStuff)
+void decompSYNC(uint8 *curLine, uint8 *prevLine, uint32 size, uint16 sync, BITSTRUCT *bitStuff)
 {
 uint32 count;    /* Pixel counter */
 uint8 *scan;    /* Pixel copying pointer */
diff --git a/isis/src/mgs/apps/mocuncompress/decompSYNC.h b/isis/src/mgs/apps/mocuncompress/decompSYNC.h
index a815213634fb8ac09fbc32a8a6f90f5806a47be2..2481b2dbb3ef855d01264d26ecbe3d1640f3f6ca 100644
--- a/isis/src/mgs/apps/mocuncompress/decompSYNC.h
+++ b/isis/src/mgs/apps/mocuncompress/decompSYNC.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)decompSYNC.h  1.1 10/04/99
 
 #define decompSYNC_h
 
-extern void decompSYNC(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint16 sync, BITSTRUCT *bitStuff);
+extern void decompSYNC(uint8 *curLine, uint8 *prevLine, uint32 size, uint16 sync, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/decompXPRED.cpp b/isis/src/mgs/apps/mocuncompress/decompXPRED.cpp
index f70eee0102064b7407f5635259cbb044275e8bb3..4c88e2cf63509c449ffecc83f9ae4e4a6f5a3efa 100644
--- a/isis/src/mgs/apps/mocuncompress/decompXPRED.cpp
+++ b/isis/src/mgs/apps/mocuncompress/decompXPRED.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -46,7 +53,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 #include "decompXPRED.h"
 
-void decompXPRED(register uint8 *curLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
+void decompXPRED(uint8 *curLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
 {
 uint8 prev;    /* Previous pixel */
 uint32 bitCount;
diff --git a/isis/src/mgs/apps/mocuncompress/decompXPRED.h b/isis/src/mgs/apps/mocuncompress/decompXPRED.h
index 6ff3334d2d20755730943fe464d3560a6a701373..3440307b7bc8f53a1740d78da15a0a127ae8475e 100644
--- a/isis/src/mgs/apps/mocuncompress/decompXPRED.h
+++ b/isis/src/mgs/apps/mocuncompress/decompXPRED.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)decompXPRED.h  1.1 10/04/99
 
 #define decompXPRED_h
 
-extern void decompXPRED(register uint8 *curLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
+extern void decompXPRED(uint8 *curLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.cpp b/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.cpp
index c8f554a3e6b79346c90f868a257bde59371130c6..78d0f7aaa13bac383b1d97afd4e09acc64ed5f19 100644
--- a/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.cpp
+++ b/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -46,7 +53,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 #include "decompXPREDYPRED.h"
 
-void decompXPREDYPRED(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
+void decompXPREDYPRED(uint8 *curLine, uint8 *prevLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
 {
 uint8 prevDiff;  /* Previous vertical difference */
 uint32 bitCount;
diff --git a/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.h b/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.h
index 09d246920fd9399a8ba897d2174dd0798a84ac11..76e880d2f8f10047b8b4903512a0019aab457353 100644
--- a/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.h
+++ b/isis/src/mgs/apps/mocuncompress/decompXPREDYPRED.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)decompXPREDYPRED.h  1.1 10/04/99
 
 #define decompXPREDYPRED_h
 
-extern void decompXPREDYPRED(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
+extern void decompXPREDYPRED(uint8 *curLine, uint8 *prevLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/decompYPRED.cpp b/isis/src/mgs/apps/mocuncompress/decompYPRED.cpp
index 9e6169b6f3a3530be48f099261c24d792fad439f..0ada2ae259314553a25780b4f18d07e18ac9646c 100644
--- a/isis/src/mgs/apps/mocuncompress/decompYPRED.cpp
+++ b/isis/src/mgs/apps/mocuncompress/decompYPRED.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -46,7 +53,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 #include "decompYPRED.h"
 
-void decompYPRED(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
+void decompYPRED(uint8 *curLine, uint8 *prevLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff)
 {
 uint32 bitCount;
 uint8 *data;
diff --git a/isis/src/mgs/apps/mocuncompress/decompYPRED.h b/isis/src/mgs/apps/mocuncompress/decompYPRED.h
index 3db94c4a9ee4ff25fdff0a0f4423abcdca37e6e7..ee44ab82748245bdc1ab878263d88100b4f20d31 100644
--- a/isis/src/mgs/apps/mocuncompress/decompYPRED.h
+++ b/isis/src/mgs/apps/mocuncompress/decompYPRED.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)decompYPRED.h  1.1 10/04/99
 
 #define decompYPRED_h
 
-extern void decompYPRED(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
+extern void decompYPRED(uint8 *curLine, uint8 *prevLine, uint32 size, uint8 *code, uint8 *left, uint8 *right, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/initBlock.cpp b/isis/src/mgs/apps/mocuncompress/initBlock.cpp
index 26ee68509d518b9248463699a742d8d9cc578a6a..a644632c658e981d02da7919e88489315da8a2fa 100644
--- a/isis/src/mgs/apps/mocuncompress/initBlock.cpp
+++ b/isis/src/mgs/apps/mocuncompress/initBlock.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -58,7 +65,7 @@ extern void exit();
 
 BITTREE *encodeTrees[MAXCODES];
 
-static uint32 bitReverse(register uint32 num)
+static uint32 bitReverse(uint32 num)
 {
 uint32 rev;
 uint32 i;
diff --git a/isis/src/mgs/apps/mocuncompress/invFwht16x16.cpp b/isis/src/mgs/apps/mocuncompress/invFwht16x16.cpp
index 60edef177f5a17369708fe2bd9dbbfebe3f915f6..8addf0df3df99a37a297f83cdd8225fe163d01c8 100644
--- a/isis/src/mgs/apps/mocuncompress/invFwht16x16.cpp
+++ b/isis/src/mgs/apps/mocuncompress/invFwht16x16.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -125,7 +132,7 @@ int32 t0,t1,t2,t3,t4;      \
     out[(oi)*(o3)] = t0;        \
   }
 
-static void invFwht16_row(register int32 *in, register int32 *out)
+static void invFwht16_row(int32 *in, int32 *out)
 {
   /*
   * This function does a 16 point, one dimensional inverse WHT on 16, 32
@@ -160,7 +167,7 @@ int32 *tmp;    /* Register pointer to the temporary storage */
   BUTTERFLY4(tmp, 1, 3, 7, 11, 15, out, 1, 8, 11, 9, 10);
 }
 
-static void invFwht16_col(register int32 *in, register int32 *out)
+static void invFwht16_col(int32 *in, int32 *out)
 {
   /*
   * This function does a 16 point, one dimensional inverse WHT on 16, 32
@@ -196,7 +203,7 @@ int32 *tmp;    /* Register pointer to the temporary storage */
   BUTTERFLY4(tmp, 1, 3, 7, 11, 15, out, 16, 8, 11, 9, 10);
 }
 
-void invFwht16x16(register int16 *in, register int16 *out)
+void invFwht16x16(int16 *in, int16 *out)
 {
   /*
   * This function does a "sequency" ordered WHT on a 16 x 16 array of data
diff --git a/isis/src/mgs/apps/mocuncompress/invFwht16x16.h b/isis/src/mgs/apps/mocuncompress/invFwht16x16.h
index edfc05ee612e77d80a7119afbc25cedfb51bd88c..a58fe392d9c741fce77db3cd4fb3e6e7db4b6d72 100644
--- a/isis/src/mgs/apps/mocuncompress/invFwht16x16.h
+++ b/isis/src/mgs/apps/mocuncompress/invFwht16x16.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)invFwht16x16.h  1.1 10/04/99
 
 #define invFwht16x16_h
 
-extern void invFwht16x16(register int16 *in, register int16 *out);
+extern void invFwht16x16(int16 *in, int16 *out);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.cpp b/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.cpp
index 589297c1618b6e427ce336580a97d3996088b064..ee869dee1842fcbe83f8104319899873b7dfe58f 100644
--- a/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.cpp
+++ b/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -62,7 +69,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 #include "predictiveDecompressor.h"
 
-void predictiveDecompressor(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint8 type, uint8 *code, uint8 *left, uint8 *right, uint16 sync, BITSTRUCT *bitStuff)
+void predictiveDecompressor(uint8 *curLine, uint8 *prevLine, uint32 size, uint8 type, uint8 *code, uint8 *left, uint8 *right, uint16 sync, BITSTRUCT *bitStuff)
 {
   /*
   * This function produces a single line of decompressed data from data
diff --git a/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.h b/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.h
index a2b6a5d64a47550d5845c6dda048728d55634e99..46d266b1d2e0cef7d4575c112fb4fee52ad83bc6 100644
--- a/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.h
+++ b/isis/src/mgs/apps/mocuncompress/predictiveDecompressor.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)predictiveDecompressor.h  1.1 10/04/99
 
 #define predictiveDecompressor_h
 
-extern void predictiveDecompressor(register uint8 *curLine, register uint8 *prevLine, register uint32 size, uint8 type, uint8 *code, uint8 *left, uint8 *right, uint16 sync, BITSTRUCT *bitStuff);
+extern void predictiveDecompressor(uint8 *curLine, uint8 *prevLine, uint32 size, uint8 type, uint8 *code, uint8 *left, uint8 *right, uint16 sync, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/readBits.cpp b/isis/src/mgs/apps/mocuncompress/readBits.cpp
index 8b39f6b399b96d33758579dd321d789e7beb9631..264789f8b3020214abb13fc70f99df551ba2422f 100644
--- a/isis/src/mgs/apps/mocuncompress/readBits.cpp
+++ b/isis/src/mgs/apps/mocuncompress/readBits.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -101,7 +108,7 @@ BITSTRUCT *initBits(uint8 *data, int len)
 }
 #endif
 
-uint32 readBits(register uint8 bitCount, register BITSTRUCT *bitStuff)
+uint32 readBits(uint8 bitCount, BITSTRUCT *bitStuff)
 {
 uint32 bitQueue;
 uint32 bitQueueCount;
diff --git a/isis/src/mgs/apps/mocuncompress/readBits.h b/isis/src/mgs/apps/mocuncompress/readBits.h
index d3413eae2274d0253b1f7ba4ac68eb85a7c69444..6e5699584b44007ad775e09621aad32aa7c7103e 100644
--- a/isis/src/mgs/apps/mocuncompress/readBits.h
+++ b/isis/src/mgs/apps/mocuncompress/readBits.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -66,6 +73,6 @@ struct bitStruct {
 };
 
 extern BITSTRUCT *initBits(uint8 *data, int len);
-extern uint32 readBits(register uint8 bitCount, register BITSTRUCT *bitStuff);
+extern uint32 readBits(uint8 bitCount, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/readGroups.cpp b/isis/src/mgs/apps/mocuncompress/readGroups.cpp
index 24c665bf6659ce7f56d3c96d9e24689922c73201..0ac4819690c466c186113e280e4035fdd4133e5c 100644
--- a/isis/src/mgs/apps/mocuncompress/readGroups.cpp
+++ b/isis/src/mgs/apps/mocuncompress/readGroups.cpp
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -55,7 +62,7 @@ Copyright (C) 1999 Malin Space Science Systems.  All Rights Reserved.
 
 extern void exit();
 
-uint32 *readGroups(register uint32 numBlocks, register BITSTRUCT *bitStuff)
+uint32 *readGroups(uint32 numBlocks, BITSTRUCT *bitStuff)
 {
 uint32 block;
   uint32 *groups;
diff --git a/isis/src/mgs/apps/mocuncompress/readGroups.h b/isis/src/mgs/apps/mocuncompress/readGroups.h
index d74f08e51f05cdd0df4457906385d17f43088c8e..f96e2ba22a30d8d0ea6e8819b682eb9a5dc0eca3 100644
--- a/isis/src/mgs/apps/mocuncompress/readGroups.h
+++ b/isis/src/mgs/apps/mocuncompress/readGroups.h
@@ -1,4 +1,11 @@
 /*
+
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
+
 NOTICE
 
 The software accompanying this notice (the "Software") is provided to you
@@ -44,6 +51,6 @@ SCCSID @(#)readGroups.h  1.1 10/04/99
 
 #define readGroups_h
 
-extern uint32 *readGroups(register uint32 numBlocks, register BITSTRUCT *bitStuff);
+extern uint32 *readGroups(uint32 numBlocks, BITSTRUCT *bitStuff);
 
 #endif
diff --git a/isis/src/mgs/apps/mocuncompress/readmocisis.cpp b/isis/src/mgs/apps/mocuncompress/readmocisis.cpp
index 5565a63062b19ff78bcc38c89ee74065d8b04e7c..65d8503eae84bd270fdb7853fe039b55576d73b6 100644
--- a/isis/src/mgs/apps/mocuncompress/readmocisis.cpp
+++ b/isis/src/mgs/apps/mocuncompress/readmocisis.cpp
@@ -28,6 +28,11 @@ Changing from "gets" to "fgets" also required a check
 to make sure there was no '\n' at the end of the input
 string.
 ==================================================
+==================================================
+2018-OCT-19 Kaitlyn Lee - US Geological Survey
+
+Removed the register keyword because it is deprecated in C++17. 
+==================================================
 
 
 NOTICE
@@ -104,7 +109,7 @@ static int mbr = 0;
 
 byte *decode(struct msdp_header h, byte *data, int datlen, int *len, int mbr);
 void init_output(struct msdp_header h);
-extern unsigned int CS8EACC2(register unsigned char *dat, unsigned int len);
+extern unsigned int CS8EACC2(unsigned char *dat, unsigned int len);
 
 #define FRAGSIZE (256*1024)
 
diff --git a/isis/src/mro/apps/hical/GainChannelNormalize.h b/isis/src/mro/apps/hical/GainChannelNormalize.h
index 05300ce6920ca13a521d6b201a5d83ee04a0becd..1e08c32bacfebb0d2af85542c3d68c379ff22aef 100644
--- a/isis/src/mro/apps/hical/GainChannelNormalize.h
+++ b/isis/src/mro/apps/hical/GainChannelNormalize.h
@@ -63,7 +63,7 @@ namespace Isis {
       virtual ~GainChannelNormalize() { }
 
     private:
-      double   _normalizer;
+      double _normalizer;
 
       void init(const HiCalConf &conf) {
         _history.clear();
@@ -72,7 +72,7 @@ namespace Isis {
 
         double bin = ToDouble(prof("Summing"));
         double tdi = ToDouble(prof("Tdi"));
-        double _normalizer = 128.0 / tdi / (bin*bin);
+        _normalizer = 128.0 / tdi / (bin*bin);
         _history.add("ModeNormalizer["+ToString(_normalizer)+"]");
 
         HiVector z = loadCsv("Gains", conf, prof, 0);
diff --git a/isis/src/mro/apps/hical/ZeroDark.h b/isis/src/mro/apps/hical/ZeroDark.h
index 85999079e49af97bb2820a93ac7c97a5446eb552..74b57b5a9d6b88eea680ee8306c6e928e62520d9 100644
--- a/isis/src/mro/apps/hical/ZeroDark.h
+++ b/isis/src/mro/apps/hical/ZeroDark.h
@@ -81,8 +81,6 @@ namespace Isis {
     private:
       int _tdi;
       int _bin;
-      int _ccd;
-      int _channel;
 
       HiVector _BM;
       HiVector _slope;
diff --git a/isis/src/mro/apps/hijitreg/HiJitCube.cpp b/isis/src/mro/apps/hijitreg/HiJitCube.cpp
index e09d2477109dcaacd1057fb348801261682d6cc9..7c2f8707765d02989a1af6508bd57decc0112598 100644
--- a/isis/src/mro/apps/hijitreg/HiJitCube.cpp
+++ b/isis/src/mro/apps/hijitreg/HiJitCube.cpp
@@ -281,7 +281,7 @@ namespace Isis {
                         jdata.summing);
       }
     }
-    catch(Exception hiExc) {
+    catch(Exception &hiExc) {
       ostringstream msg;
       msg << "Summing mode (" << jdata.summing
           << ") is illegal (must be > 0) or CPMM number (" << jdata.cpmmNumber
diff --git a/isis/src/mro/apps/hijitreg/Instrument.cpp b/isis/src/mro/apps/hijitreg/Instrument.cpp
index 19bdebb3c7418490b8f592a0f5100156afa1953e..1d0bdf11d917170a3ea7a50c63950d516894d0f8 100644
--- a/isis/src/mro/apps/hijitreg/Instrument.cpp
+++ b/isis/src/mro/apps/hijitreg/Instrument.cpp
@@ -390,7 +390,8 @@ namespace UA {
       unsigned int  CPMM,
       unsigned int  binning
     )
-    throw(Out_of_Range, Invalid_Argument) {
+    {
+
       if (CPMM >= CCDS) {
         ostringstream
         message;
@@ -414,7 +415,7 @@ namespace UA {
       return
         (int)rint(CCD_FOCAL_PLANE_X_OFFSETS_MM[CPMM]
                   / (CCD_PIXEL_SIZE_MM * binning));
-    }
 
+  }
   }   //  namespace HiRISE
 }   //  namespace UA
diff --git a/isis/src/mro/apps/hijitreg/Instrument.hh b/isis/src/mro/apps/hijitreg/Instrument.hh
index ced9c3e5a5395cea5b397464d4ecf105a7e8f02a..9f9792f785f7ce4cb186a36e3268c863efcd3657 100644
--- a/isis/src/mro/apps/hijitreg/Instrument.hh
+++ b/isis/src/mro/apps/hijitreg/Instrument.hh
@@ -41,7 +41,7 @@ namespace HiRISE
 	characterize the MRO HiRISE instrument.
 <p>
 @author		Bradford Castalia, UA/PIRL
-$Revision: 1.1.1.1 $ 
+$Revision: 1.1.1.1 $
 */
 
 class Instrument
@@ -96,7 +96,7 @@ static const unsigned int
 /**	CPMM numbers associated with each CCD, indexed by CCD sensor array number.
 
 	<b>N.B.</b>: All other arrays in this Instrument class are indexed by
-	CPMM number. 
+	CPMM number.
 
 	@see	#CCD_BY_CPMM
 */
@@ -146,7 +146,7 @@ static const double
 	CCD_FOCAL_PLANE_Y_OFFSETS_MM[];
 
 //!	CCD detector pixel size in millimeters.
-static const double 
+static const double
 	CCD_PIXEL_SIZE_MM;
 
 
@@ -278,7 +278,7 @@ static const char* const
 //!	Exposure operation setup time.
 static const double
 	EXPOSURE_SETUP_MICROS;
-	
+
 //!	Engineering_Header Delta_Line_Time maximum valid value.
 static const unsigned int
 	DELTA_LINE_TIME_MAX;
@@ -399,8 +399,7 @@ static unsigned int calibration_lines_minimum
 	@see	#BINNING_FACTORS
 */
 static int focal_plane_x_offset
-	(unsigned int CPMM, unsigned int binning = 1) 
-	throw (Out_of_Range, Invalid_Argument);
+	(unsigned int CPMM, unsigned int binning = 1) ;
 
 };	//	class Instrument
 
diff --git a/isis/src/mro/objs/HiEqualization/HiEqualization.truth b/isis/src/mro/objs/HiEqualization/HiEqualization.truth
index e949d480534f18c51f590894981209e20df4dbf9..4b02ed7f12615bdc57f1e62b55fba9c80ac7b634 100644
--- a/isis/src/mro/objs/HiEqualization/HiEqualization.truth
+++ b/isis/src/mro/objs/HiEqualization/HiEqualization.truth
@@ -1,12 +1,5 @@
 UnitTest for Equalization
-Calculating Statistics for Cube 1 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Cube 2 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Calculating Statistics for Cube 3 of 3
-0% Processed
10% Processed
20% Processed
30% Processed
40% Processed
50% Processed
60% Processed
70% Processed
80% Processed
90% Processed
100% Processed
-Working
-0% Processed
sample 1, line 1: 0.16620928 => 0.161970674
+sample 1, line 1: 0.16620928 => 0.161970674
 sample 2, line 2: 0.161111355 => 0.157309096
 sample 3, line 3: 0.164566368 => 0.160468383
 sample 4, line 4: 0.171671703 => 0.166965551
@@ -106,7 +99,7 @@ sample 97, line 97: 0.156481415 => 0.153075448
 sample 98, line 98: 0.150948763 => 0.148016353
 sample 99, line 99: 0.147832736 => 0.145167037
 sample 100, line 100: 0.144577995 => 0.142190879
-10% Processed
sample 101, line 101: 0.138603449 => 0.136727714
+sample 101, line 101: 0.138603449 => 0.136727714
 sample 102, line 102: 0.142611519 => 0.14039272
 sample 103, line 103: 0.14621155 => 0.143684613
 sample 104, line 104: 0.149713024 => 0.146886385
@@ -206,7 +199,7 @@ sample 197, line 197: 0.176667094 => 0.17153337
 sample 198, line 198: 0.172792345 => 0.167990273
 sample 199, line 199: 0.171201423 => 0.166535523
 sample 200, line 200: 0.173187748 => 0.168351832
-20% Processed
sample 201, line 201: 0.168358847 => 0.163936253
+sample 201, line 201: 0.168358847 => 0.163936253
 sample 202, line 202: 0.166011795 => 0.161790092
 sample 203, line 203: 0.16612713 => 0.161895555
 sample 204, line 204: 0.16969347 => 0.16515664
@@ -306,7 +299,7 @@ sample 297, line 297: 0.179480344 => 0.174105825
 sample 298, line 298: 0.177870646 => 0.172633906
 sample 299, line 299: 0.1695344 => 0.165011186
 sample 300, line 300: 0.16488871 => 0.160763135
-30% Processed
sample 301, line 301: 0.171055213 => 0.166401827
+sample 301, line 301: 0.171055213 => 0.166401827
 sample 302, line 302: 0.171164289 => 0.166501567
 sample 303, line 303: 0.174704581 => 0.169738835
 sample 304, line 304: 0.175130039 => 0.170127877
@@ -406,7 +399,7 @@ sample 397, line 397: 0.168082193 => 0.163683277
 sample 398, line 398: 0.166490138 => 0.162227492
 sample 399, line 399: 0.166037127 => 0.161813256
 sample 400, line 400: 0.164545715 => 0.160449498
-40% Processed
sample 401, line 401: 0.164601609 => 0.160500608
+sample 401, line 401: 0.164601609 => 0.160500608
 sample 402, line 402: 0.174808666 => 0.169834011
 sample 403, line 403: 0.176068768 => 0.170986256
 sample 404, line 404: 0.174545437 => 0.169593312
@@ -506,7 +499,7 @@ sample 497, line 497: 0.176156849 => 0.171066798
 sample 498, line 498: 0.174539849 => 0.169588203
 sample 499, line 499: 0.169797525 => 0.165251789
 sample 500, line 500: 0.172798708 => 0.167996091
-50% Processed
sample 501, line 501: 0.171124846 => 0.1664655
+sample 501, line 501: 0.171124846 => 0.1664655
 sample 502, line 502: 0.174631655 => 0.169672151
 sample 503, line 503: 0.173571244 => 0.168702503
 sample 504, line 504: 0.172836587 => 0.168030728
@@ -606,7 +599,7 @@ sample 597, line 597: 0.174650535 => 0.169689414
 sample 598, line 598: 0.174621865 => 0.169663199
 sample 599, line 599: 0.170287207 => 0.165699557
 sample 600, line 600: 0.169411018 => 0.164898365
-60% Processed
sample 601, line 601: 0.172852635 => 0.168045403
+sample 601, line 601: 0.172852635 => 0.168045403
 sample 602, line 602: 0.176255673 => 0.171157164
 sample 603, line 603: 0.180278659 => 0.174835809
 sample 604, line 604: 0.177931324 => 0.17268939
@@ -706,7 +699,7 @@ sample 697, line 697: 0.174384505 => 0.169446154
 sample 698, line 698: 0.167686999 => 0.16332191
 sample 699, line 699: 0.162870169 => 0.158917367
 sample 700, line 700: 0.159793079 => 0.156103655
-70% Processed
sample 701, line 701: 0.164305687 => 0.160230015
+sample 701, line 701: 0.164305687 => 0.160230015
 sample 702, line 702: 0.164364234 => 0.16028355
 sample 703, line 703: 0.169419527 => 0.164906145
 sample 704, line 704: 0.169667512 => 0.165132904
@@ -806,7 +799,7 @@ sample 797, line 797: 0.174418762 => 0.16947748
 sample 798, line 798: 0.167700335 => 0.163334105
 sample 799, line 799: 0.166206956 => 0.161968548
 sample 800, line 800: 0.164843291 => 0.160721604
-80% Processed
sample 801, line 801: 0.164374098 => 0.160292571
+sample 801, line 801: 0.164374098 => 0.160292571
 sample 802, line 802: 0.169387564 => 0.164876918
 sample 803, line 803: 0.166204065 => 0.161965905
 sample 804, line 804: 0.16649957 => 0.162236117
@@ -906,7 +899,7 @@ sample 897, line 897: 0.172779784 => 0.167978787
 sample 898, line 898: 0.176126704 => 0.171039233
 sample 899, line 899: 0.174488574 => 0.169541316
 sample 900, line 900: 0.173281893 => 0.168437919
-90% Processed
sample 901, line 901: 0.171034217 => 0.166382629
+sample 901, line 901: 0.171034217 => 0.166382629
 sample 902, line 902: 0.169418395 => 0.16490511
 sample 903, line 903: 0.172947735 => 0.168132362
 sample 904, line 904: 0.169351965 => 0.164844366
@@ -1006,9 +999,7 @@ sample 997, line 997: 0.171204329 => 0.16653818
 sample 998, line 998: 0.169736981 => 0.165196428
 sample 999, line 999: 0.170407265 => 0.16580934
 sample 1000, line 1000: 0.171169341 => 0.166506187
-100% Processed
-Working
-0% Processed
sample 1, line 1: 0.182812035 => 0.179221331
+sample 1, line 1: 0.182812035 => 0.179221331
 sample 2, line 2: 0.179389775 => 0.176085162
 sample 3, line 3: 0.177746713 => 0.174579455
 sample 4, line 4: 0.177981526 => 0.174794638
@@ -1108,7 +1099,7 @@ sample 97, line 97: 0.169308081 => 0.166846268
 sample 98, line 98: 0.16769138 => 0.165364718
 sample 99, line 99: 0.166088611 => 0.163895936
 sample 100, line 100: 0.171259224 => 0.168634301
-10% Processed
sample 101, line 101: 0.175982967 => 0.172963153
+sample 101, line 101: 0.175982967 => 0.172963153
 sample 102, line 102: 0.171000078 => 0.168396819
 sample 103, line 103: 0.166052654 => 0.163862985
 sample 104, line 104: 0.16292946 => 0.161000881
@@ -1208,7 +1199,7 @@ sample 197, line 197: 0.177664682 => 0.174504282
 sample 198, line 198: 0.174510717 => 0.171613979
 sample 199, line 199: 0.166369274 => 0.164153137
 sample 200, line 200: 0.16597268 => 0.163789696
-20% Processed
sample 201, line 201: 0.167627811 => 0.165306464
+sample 201, line 201: 0.167627811 => 0.165306464
 sample 202, line 202: 0.169413924 => 0.166943263
 sample 203, line 203: 0.172884494 => 0.170123703
 sample 204, line 204: 0.176018983 => 0.172996158
@@ -1308,7 +1299,7 @@ sample 297, line 297: 0.172839344 => 0.170082327
 sample 298, line 298: 0.177610964 => 0.174455054
 sample 299, line 299: 0.180804357 => 0.177381489
 sample 300, line 300: 0.180980101 => 0.177542542
-30% Processed
sample 301, line 301: 0.176169053 => 0.173133683
+sample 301, line 301: 0.176169053 => 0.173133683
 sample 302, line 302: 0.175937772 => 0.172921736
 sample 303, line 303: 0.172528476 => 0.169797447
 sample 304, line 304: 0.172631666 => 0.169892011
@@ -1408,7 +1399,7 @@ sample 397, line 397: 0.166112632 => 0.163917948
 sample 398, line 398: 0.175954938 => 0.172937467
 sample 399, line 399: 0.175895229 => 0.17288275
 sample 400, line 400: 0.167666927 => 0.165342309
-40% Processed
sample 401, line 401: 0.164464951 => 0.162408009
+sample 401, line 401: 0.164464951 => 0.162408009
 sample 402, line 402: 0.170888871 => 0.168294908
 sample 403, line 403: 0.174233288 => 0.171359742
 sample 404, line 404: 0.174361914 => 0.171477616
@@ -1508,7 +1499,7 @@ sample 497, line 497: 0.176007941 => 0.17298604
 sample 498, line 498: 0.176364005 => 0.173312337
 sample 499, line 499: 0.174231946 => 0.171358513
 sample 500, line 500: 0.172652155 => 0.169910787
-50% Processed
sample 501, line 501: 0.17275238 => 0.170002634
+sample 501, line 501: 0.17275238 => 0.170002634
 sample 502, line 502: 0.17771022 => 0.174546013
 sample 503, line 503: 0.177655816 => 0.174496157
 sample 504, line 504: 0.177895993 => 0.174716256
@@ -1608,7 +1599,7 @@ sample 597, line 597: 0.184463039 => 0.180734316
 sample 598, line 598: 0.185977384 => 0.182122067
 sample 599, line 599: 0.189134851 => 0.185015579
 sample 600, line 600: 0.19568938 => 0.191022169
-60% Processed
sample 601, line 601: 0.186045453 => 0.182184445
+sample 601, line 601: 0.186045453 => 0.182184445
 sample 602, line 602: 0.172556654 => 0.169823269
 sample 603, line 603: 0.170877561 => 0.168284544
 sample 604, line 604: 0.170918807 => 0.168322342
@@ -1708,7 +1699,7 @@ sample 697, line 697: 0.16131115 => 0.159517856
 sample 698, line 698: 0.165939093 => 0.163758917
 sample 699, line 699: 0.164314419 => 0.162270061
 sample 700, line 700: 0.167756408 => 0.16542431
-70% Processed
sample 701, line 701: 0.167883039 => 0.165540355
+sample 701, line 701: 0.167883039 => 0.165540355
 sample 702, line 702: 0.170933396 => 0.168335711
 sample 703, line 703: 0.172538891 => 0.169806992
 sample 704, line 704: 0.167772278 => 0.165438854
@@ -1808,7 +1799,7 @@ sample 797, line 797: 0.177703977 => 0.174540292
 sample 798, line 798: 0.179282069 => 0.17598646
 sample 799, line 799: 0.175907671 => 0.172894152
 sample 800, line 800: 0.167647794 => 0.165324776
-80% Processed
sample 801, line 801: 0.167788818 => 0.165454011
+sample 801, line 801: 0.167788818 => 0.165454011
 sample 802, line 802: 0.165952355 => 0.16377107
 sample 803, line 803: 0.16433005 => 0.162284386
 sample 804, line 804: 0.169376209 => 0.166908701
@@ -1908,7 +1899,7 @@ sample 897, line 897: 0.178297192 => 0.175083916
 sample 898, line 898: 0.177695453 => 0.174532481
 sample 899, line 899: 0.172647476 => 0.169906499
 sample 900, line 900: 0.179547042 => 0.176229282
-90% Processed
sample 901, line 901: 0.177690983 => 0.174528384
+sample 901, line 901: 0.177690983 => 0.174528384
 sample 902, line 902: 0.174424261 => 0.17153475
 sample 903, line 903: 0.177742183 => 0.174575304
 sample 904, line 904: 0.179332823 => 0.176032971
@@ -2008,9 +1999,7 @@ sample 997, line 997: 0.171008334 => 0.168404384
 sample 998, line 998: 0.166309893 => 0.16409872
 sample 999, line 999: 0.169255733 => 0.166798296
 sample 1000, line 1000: 0.166010484 => 0.16382434
-100% Processed
-Working
-0% Processed
sample 1, line 1: 0.170323357 => 0.170323357
+sample 1, line 1: 0.170323357 => 0.170323357
 sample 2, line 2: 0.164306805 => 0.164306805
 sample 3, line 3: 0.162822366 => 0.162822366
 sample 4, line 4: 0.164420396 => 0.164420396
@@ -2110,7 +2099,7 @@ sample 97, line 97: 0.162874922 => 0.162874922
 sample 98, line 98: 0.166240945 => 0.166240945
 sample 99, line 99: 0.162782207 => 0.162782207
 sample 100, line 100: 0.16430378 => 0.16430378
-10% Processed
sample 101, line 101: 0.164308757 => 0.164308757
+sample 101, line 101: 0.164308757 => 0.164308757
 sample 102, line 102: 0.164751962 => 0.164751962
 sample 103, line 103: 0.16880317 => 0.16880317
 sample 104, line 104: 0.17477797 => 0.17477797
@@ -2210,7 +2199,7 @@ sample 197, line 197: 0.177521482 => 0.177521482
 sample 198, line 198: 0.17464754 => 0.17464754
 sample 199, line 199: 0.168858349 => 0.168858349
 sample 200, line 200: 0.168763071 => 0.168763071
-20% Processed
sample 201, line 201: 0.170202658 => 0.170202658
+sample 201, line 201: 0.170202658 => 0.170202658
 sample 202, line 202: 0.171712726 => 0.171712726
 sample 203, line 203: 0.173168987 => 0.173168987
 sample 204, line 204: 0.174885616 => 0.174885616
@@ -2310,7 +2299,7 @@ sample 297, line 297: 0.176327765 => 0.176327765
 sample 298, line 298: 0.170275554 => 0.170275554
 sample 299, line 299: 0.167201772 => 0.167201772
 sample 300, line 300: 0.168800533 => 0.168800533
-30% Processed
sample 301, line 301: 0.168865234 => 0.168865234
+sample 301, line 301: 0.168865234 => 0.168865234
 sample 302, line 302: 0.170254886 => 0.170254886
 sample 303, line 303: 0.171726778 => 0.171726778
 sample 304, line 304: 0.170273721 => 0.170273721
@@ -2410,7 +2399,7 @@ sample 397, line 397: 0.176273867 => 0.176273867
 sample 398, line 398: 0.173250675 => 0.173250675
 sample 399, line 399: 0.17029731 => 0.17029731
 sample 400, line 400: 0.168970942 => 0.168970942
-40% Processed
sample 401, line 401: 0.168715209 => 0.168715209
+sample 401, line 401: 0.168715209 => 0.168715209
 sample 402, line 402: 0.17029646 => 0.17029646
 sample 403, line 403: 0.165744022 => 0.165744022
 sample 404, line 404: 0.167311385 => 0.167311385
@@ -2510,7 +2499,7 @@ sample 497, line 497: 0.168961734 => 0.168961734
 sample 498, line 498: 0.168770298 => 0.168770298
 sample 499, line 499: 0.165745974 => 0.165745974
 sample 500, line 500: 0.164367974 => 0.164367974
-50% Processed
sample 501, line 501: 0.164207265 => 0.164207265
+sample 501, line 501: 0.164207265 => 0.164207265
 sample 502, line 502: 0.165743053 => 0.165743053
 sample 503, line 503: 0.165769503 => 0.165769503
 sample 504, line 504: 0.162997246 => 0.162997246
@@ -2610,7 +2599,7 @@ sample 597, line 597: 0.176245555 => 0.176245555
 sample 598, line 598: 0.177674174 => 0.177674174
 sample 599, line 599: 0.173448801 => 0.173448801
 sample 600, line 600: 0.171779886 => 0.171779886
-60% Processed
sample 601, line 601: 0.168718517 => 0.168718517
+sample 601, line 601: 0.168718517 => 0.168718517
 sample 602, line 602: 0.170350373 => 0.170350373
 sample 603, line 603: 0.171897545 => 0.171897545
 sample 604, line 604: 0.168713942 => 0.168713942
@@ -2710,7 +2699,7 @@ sample 697, line 697: 0.161231935 => 0.161231935
 sample 698, line 698: 0.1597929 => 0.1597929
 sample 699, line 699: 0.156822756 => 0.156822756
 sample 700, line 700: 0.157033846 => 0.157033846
-70% Processed
sample 701, line 701: 0.16123125 => 0.16123125
+sample 701, line 701: 0.16123125 => 0.16123125
 sample 702, line 702: 0.164272338 => 0.164272338
 sample 703, line 703: 0.167264834 => 0.167264834
 sample 704, line 704: 0.170565531 => 0.170565531
@@ -2810,7 +2799,7 @@ sample 797, line 797: 0.167244986 => 0.167244986
 sample 798, line 798: 0.170357391 => 0.170357391
 sample 799, line 799: 0.16599384 => 0.16599384
 sample 800, line 800: 0.165732875 => 0.165732875
-80% Processed
sample 801, line 801: 0.168748334 => 0.168748334
+sample 801, line 801: 0.168748334 => 0.168748334
 sample 802, line 802: 0.165874347 => 0.165874347
 sample 803, line 803: 0.165732637 => 0.165732637
 sample 804, line 804: 0.164250776 => 0.164250776
@@ -2910,7 +2899,7 @@ sample 897, line 897: 0.174769744 => 0.174769744
 sample 898, line 898: 0.174800545 => 0.174800545
 sample 899, line 899: 0.17759122 => 0.17759122
 sample 900, line 900: 0.173365772 => 0.173365772
-90% Processed
sample 901, line 901: 0.173750341 => 0.173750341
+sample 901, line 901: 0.173750341 => 0.173750341
 sample 902, line 902: 0.176197603 => 0.176197603
 sample 903, line 903: 0.171810925 => 0.171810925
 sample 904, line 904: 0.17200999 => 0.17200999
@@ -3010,4 +2999,3 @@ sample 997, line 997: 0.174820468 => 0.174820468
 sample 998, line 998: 0.17191419 => 0.17191419
 sample 999, line 999: 0.173492506 => 0.173492506
 sample 1000, line 1000: 0.176331282 => 0.176331282
-100% Processed
diff --git a/isis/src/newhorizons/apps/leisa2isis/tsts/calib/Makefile b/isis/src/newhorizons/apps/leisa2isis/tsts/calib/Makefile
index 0cd8e14cdf7921823f180ad6338f0f0f11c18563..4ff6edd56a87a177b6a80d13cb079172390a4055 100644
--- a/isis/src/newhorizons/apps/leisa2isis/tsts/calib/Makefile
+++ b/isis/src/newhorizons/apps/leisa2isis/tsts/calib/Makefile
@@ -19,77 +19,4 @@ commands:
 	  quality=$(OUTPUT)/lsb_0034933739_0x53c_sci_1_Quality.cub\
 	  > /dev/null;
 	catlab from=$(OUTPUT)/lsb_0034933739_0x53c_sci_1_Quality.cub > \
-	  $(OUTPUT)/lsb_0034933739_0x53c_sci_1_Quality.pvl;
-	# Test for the calibration error image name
-	LC_CTYPE=C && LANG=C && $(SED) 's+XTENSION+XTEN-ION+g' \
-	  $(INPUT)/lsb_0034933739_0x53c_sci_1.fit > $(OUTPUT)/temp.fit
-	if [ `$(APPNAME) \
-	  from=$(OUTPUT)/temp.fit \
-	  to=$(OUTPUT)/junk.cub \
-	  errormap=$(OUTPUT)/errormap.cub \
-	  >& $(OUTPUT)/temp.txt` ]; then \
-	  true; \
-	fi;
-	$(SED) 's/\[.*\/\(temp.fit\)\]/[\1]/' < $(OUTPUT)/temp.txt > $(OUTPUT)/error_error-xtension-key.txt;
-	$(RM) $(OUTPUT)/temp.txt $(OUTPUT)/temp.fit;
-	# Test for the calibration error image extension name
-	LC_CTYPE=C && LANG=C && $(SED) 's+EXTNAME+EXzNAME+g' \
-	  $(INPUT)/lsb_0034933739_0x53c_sci_1.fit > $(OUTPUT)/temp.fit
-	if [ `$(APPNAME) \
-	  from=$(OUTPUT)/temp.fit \
-	  to=$(OUTPUT)/junk.cub \
-	  errormap=$(OUTPUT)/errormap.cub \
-	  >& $(OUTPUT)/temp.txt` ]; then \
-	  true; \
-	fi;
-	$(SED) 's/\[.*\/\(temp.fit\)\]/[\1]/' < $(OUTPUT)/temp.txt > $(OUTPUT)/error_error-extname-key.txt;
-	$(RM) $(OUTPUT)/temp.txt $(OUTPUT)/temp.fit;
-	# Test for the calibration error image extension name incorrect
-	LC_CTYPE=C && LANG=C && $(SED) 's+EXTNAME = '"'"'ERRORMAP+EXTNAME = '"'"'ERRxRMAP+g' \
-	  $(INPUT)/lsb_0034933739_0x53c_sci_1.fit > $(OUTPUT)/temp.fit
-	if [ `$(APPNAME) \
-	  from=$(OUTPUT)/temp.fit \
-	  to=$(OUTPUT)/junk.cub \
-	  errormap=$(OUTPUT)/errormap.cub \
-	  >& $(OUTPUT)/temp.txt` ]; then \
-	  true; \
-	fi;
-	$(SED) 's/\[.*\/\(temp.fit\)\]/[\1]/' < $(OUTPUT)/temp.txt > $(OUTPUT)/error_error-extname-value.txt;
-	$(RM) $(OUTPUT)/temp.txt $(OUTPUT)/temp.fit;
-	# Test for the calibration quality image name
-	LC_CTYPE=C && LANG=C && $(SED) 's+XTENSION+XTEN-ION+g' \
-	  $(INPUT)/lsb_0034933739_0x53c_sci_1.fit > $(OUTPUT)/temp.fit
-	if [ `$(APPNAME) \
-	  from=$(OUTPUT)/temp.fit \
-	  to=$(OUTPUT)/junk.cub \
-	  quality=$(OUTPUT)/quality.cub \
-	  >& $(OUTPUT)/temp.txt` ]; then \
-	  true; \
-	fi;
-	$(SED) 's/\[.*\/\(temp.fit\)\]/[\1]/' < $(OUTPUT)/temp.txt > $(OUTPUT)/error_quality-xtension-key.txt;
-	$(RM) $(OUTPUT)/temp.txt $(OUTPUT)/temp.fit;
-	# Test for the calibration quality image extension name
-	LC_CTYPE=C && LANG=C && $(SED) 's+EXTNAME+EXzNAME+g' \
-	  $(INPUT)/lsb_0034933739_0x53c_sci_1.fit > $(OUTPUT)/temp.fit
-	if [ `$(APPNAME) \
-	  from=$(OUTPUT)/temp.fit \
-	  to=$(OUTPUT)/junk.cub \
-	  quality=$(OUTPUT)/quality.cub \
-	  >& $(OUTPUT)/temp.txt` ]; then \
-	  true; \
-	fi;
-	$(SED) 's/\[.*\/\(temp.fit\)\]/[\1]/' < $(OUTPUT)/temp.txt > $(OUTPUT)/error_quality-extname-key.txt;
-	$(RM) $(OUTPUT)/temp.txt $(OUTPUT)/temp.fit;
-	# Test for the calibration quality image extension name incorrect
-	LC_CTYPE=C && LANG=C && $(SED) 's+EXTNAME = '"'"'QUALITY+EXTNAME = '"'"'QUAxITY+g' \
-	  $(INPUT)/lsb_0034933739_0x53c_sci_1.fit > $(OUTPUT)/temp.fit
-	if [ `$(APPNAME) \
-	  from=$(OUTPUT)/temp.fit \
-	  to=$(OUTPUT)/junk.cub \
-	  quality=$(OUTPUT)/quality.cub \
-	  >& $(OUTPUT)/temp.txt` ]; then \
-	  true; \
-	fi;
-	$(SED) 's/\[.*\/\(temp.fit\)\]/[\1]/' < $(OUTPUT)/temp.txt > $(OUTPUT)/error_quality-extname-value.txt;
-	$(RM) $(OUTPUT)/temp.txt $(OUTPUT)/temp.fit;
-
+	  $(OUTPUT)/lsb_0034933739_0x53c_sci_1_Quality.pvl;
\ No newline at end of file
diff --git a/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.cpp b/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.cpp
index 080a167f50b54229646ed714896335989b5d91de..9e0c8001c8745027e6ee66b72e706679ac652928 100644
--- a/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.cpp
+++ b/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.cpp
@@ -2,17 +2,17 @@
  * @file
  *
  *   Unless noted otherwise, the portions of Isis written by the USGS are public
- *   domain. See individual third-party library and package descriptions for 
+ *   domain. See individual third-party library and package descriptions for
  *   intellectual property information,user agreements, and related information.
  *
  *   Although Isis has been used by the USGS, no warranty, expressed or implied,
- *   is made by the USGS as to the accuracy and functioning of such software 
- *   and related material nor shall the fact of distribution constitute any such 
- *   warranty, and no responsibility is assumed by the USGS in connection 
+ *   is made by the USGS as to the accuracy and functioning of such software
+ *   and related material nor shall the fact of distribution constitute any such
+ *   warranty, and no responsibility is assumed by the USGS in connection
  *   therewith.
  *
  *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see 
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
  *   the Privacy &amp; Disclaimers page on the Isis website,
  *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
  *   http://www.usgs.gov/privacy.html.
@@ -39,8 +39,8 @@ namespace Isis {
   /**
    * Constructs an OSIRIS-REx Camera Model using the image labels. This model supports MapCam,
    * PolyCam, and SamCam images.
-   *  
-   * @param lab Pvl label from an Osiris Rex MapCam image. 
+   *
+   * @param lab Pvl label from an Osiris Rex MapCam image.
    */
   OsirisRexOcamsCamera::OsirisRexOcamsCamera(Cube &cube) : FramingCamera(cube) {
 
@@ -74,9 +74,11 @@ namespace Isis {
 
     Pvl &lab = *cube.label();
     PvlGroup inst = lab.findGroup("Instrument", Pvl::Traverse);
+
     QString ikCode = toString(frameCode);
-    if (inst.hasKeyword("PolyCamFocusPositionNaifId")) {
-      if (QString::compare("NONE", inst["PolyCamFocusPositionNaifId"], Qt::CaseInsensitive) != 0) {
+    if (inst.hasKeyword("PolyCamFocusPositionNaifId") && frameCode == -64360) {
+      if (QString::compare("NONE", inst["PolyCamFocusPositionNaifId"],
+                           Qt::CaseInsensitive) != 0) {
         ikCode = inst["PolyCamFocusPositionNaifId"][0];
       }
     }
@@ -112,7 +114,7 @@ namespace Isis {
         Spice::getDouble("INS" + ikCode + "_CCD_CENTER", 1) + 1.0);
 
     // Setup distortion map
-    OsirisRexDistortionMap *distortionMap = new OsirisRexDistortionMap(this); 
+    OsirisRexDistortionMap *distortionMap = new OsirisRexDistortionMap(this);
 
     // Different distortion model for each instrument and filter
     PvlGroup bandBin = lab.findGroup("BandBin", Pvl::Traverse);
@@ -135,37 +137,37 @@ namespace Isis {
 
 
   /**
-   * The frame ID for the spacecraft (or instrument) used by the Camera-matrix 
-   * Kernel. For this camera model, the spacecraft frame is used, represented 
-   * by the frame ID -64000. 
-   *  
-   * @return @b int The appropriate code for the Camera-matrix Kernel. 
+   * The frame ID for the spacecraft (or instrument) used by the Camera-matrix
+   * Kernel. For this camera model, the spacecraft frame is used, represented
+   * by the frame ID -64000.
+   *
+   * @return @b int The appropriate code for the Camera-matrix Kernel.
    */
-  int OsirisRexOcamsCamera::CkFrameId() const { 
-    return -64000; 
+  int OsirisRexOcamsCamera::CkFrameId() const {
+    return -64000;
   }
 
 
   /**
-   * The frame ID for the reference coordinate system used by the Camera-matrix 
-   * Kernel. For this mission, the reference frame J2000, represented by the 
-   * frame ID 1. 
+   * The frame ID for the reference coordinate system used by the Camera-matrix
+   * Kernel. For this mission, the reference frame J2000, represented by the
+   * frame ID 1.
    *
-   * @return @b int The appropriate reference frame ID code for the 
+   * @return @b int The appropriate reference frame ID code for the
    *         Camera-matrix Kernel.
    */
-  int OsirisRexOcamsCamera::CkReferenceId() const { 
-    return 1; 
+  int OsirisRexOcamsCamera::CkReferenceId() const {
+    return 1;
   }
 
 
-  /** 
+  /**
    * The reference frame ID for the Spacecraft Kernel is 1, representing J2000.
    *
    * @return @b int The appropriate frame ID code for the Spacecraft Kernel.
    */
-  int OsirisRexOcamsCamera::SpkReferenceId() const { 
-    return 1; 
+  int OsirisRexOcamsCamera::SpkReferenceId() const {
+    return 1;
   }
 
 
diff --git a/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.h b/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.h
index 0c113b120266a24e95ecad898e823fc974f7978a..d006ab193ff8007857ee38cca90c5b235e5cb467 100644
--- a/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.h
+++ b/isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.h
@@ -1,8 +1,8 @@
 #ifndef OsirisRexOcamsCamera_h
 #define OsirisRexOcamsCamera_h
-/** 
- * @file 
- *  
+/**
+ * @file
+ *
  *   Unless noted otherwise, the portions of Isis written by the USGS are public
  *   domain. See individual third-party library and package descriptions for
  *   intellectual property information,user agreements, and related information.
@@ -26,12 +26,12 @@
 
 namespace Isis {
   /**
-   * This class models the behavior and attributes of the OSIRIS-REx Cameras:  Mapping Camera, 
-   * PolyMath Camera, and Sample Camera. 
+   * This class models the behavior and attributes of the OSIRIS-REx Cameras:  Mapping Camera,
+   * PolyMath Camera, and Sample Camera.
    *
    * @ingroup SpiceInstrumentsAndCameras
    * @ingroup Osiris Rex
-   *  
+   *
    * @author  2014-04-02 Janet Barrett
    *
    * @internal
@@ -49,6 +49,8 @@ namespace Isis {
    *                           the Instrument group for focus position specific values (such ase
    *                           focal length) and we read NaifFrameId from the Kernels group the
    *                           instrument frame code. Fixes #5127
+   *   @history 2018-03-27 Jesse Mapel - Changed to only replace the IK code with the PolyCam focus
+   *                                     setting ID if the image is a PolyCam image. Fixes #5213.
    *
    */
   class OsirisRexOcamsCamera : public FramingCamera {
@@ -56,7 +58,7 @@ namespace Isis {
       OsirisRexOcamsCamera(Cube &cube);
       ~OsirisRexOcamsCamera();
 
-      virtual std::pair <iTime, iTime> ShutterOpenCloseTimes(double time, 
+      virtual std::pair <iTime, iTime> ShutterOpenCloseTimes(double time,
                                                              double exposureDuration);
 
       virtual int CkFrameId() const;
diff --git a/isis/src/qisis/apps/cneteditor/main.cpp b/isis/src/qisis/apps/cneteditor/main.cpp
index eb14ee5096183dbfbcf532e24baaa9c867e5078c..66ec01dbfbc1b5e41ab41af30b2e4638734df3c3 100644
--- a/isis/src/qisis/apps/cneteditor/main.cpp
+++ b/isis/src/qisis/apps/cneteditor/main.cpp
@@ -1,5 +1,7 @@
 #include "IsisDebug.h"
 
+#include <iostream>
+
 #include "CnetEditorWindow.h"
 #include "QIsisApplication.h"
 
@@ -7,6 +9,10 @@ using namespace Isis;
 
 int main(int argc, char ** argv)
 {
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
   QIsisApplication app(argc, argv);
   CnetEditorWindow window;
   window.show();
diff --git a/isis/src/qisis/apps/ipce/IpceMainWindow.cpp b/isis/src/qisis/apps/ipce/IpceMainWindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6d875a7c7d000c4334d0efa53233c5792a4198b6
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/IpceMainWindow.cpp
@@ -0,0 +1,940 @@
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "IpceMainWindow.h"
+
+#include <QApplication>
+#include <QBrush>
+#include <QColor>
+#include <QDebug>
+#include <QDesktopWidget>
+#include <QDockWidget>
+#include <QMap>
+#include <QMapIterator>
+#include <QMdiArea>
+#include <QObject>
+#include <QRect>
+#include <QRegExp>
+#include <QStringList>
+#include <QtWidgets>
+#include <QSettings>
+#include <QSize>
+#include <QStatusBar>
+#include <QStringList>
+#include <QDateTime>
+#include <QTreeView>
+#include <QVariant>
+#include <QTabWidget>
+
+
+#include "AbstractProjectItemView.h"
+#include "ControlHealthMonitorView.h"
+#include "Directory.h"
+#include "FileName.h"
+#include "IException.h"
+#include "IString.h"
+#include "JigsawRunWidget.h"
+#include "MosaicSceneWidget.h"
+#include "ProgressWidget.h"
+#include "Project.h"
+#include "ProjectItemModel.h"
+#include "ProjectItemTreeView.h"
+#include "OpenProjectWorkOrder.h"
+#include "SensorInfoWidget.h"
+#include "TargetInfoWidget.h"
+#include "TemplateEditorWidget.h"
+#include "ViewSubWindow.h"
+
+namespace Isis {
+  /**
+   * Construct the main window. This will create a Directory, the menus, and the dock areas.
+   *
+   * @param parent The Qt-relationship parent widget (usually NULL in this case)
+   *
+   * @internal
+   *   @history 2016-11-09 Tyler Wilson - Moved the if-block which loads a project from the
+   *                             command line from the start of the constructor to the end
+   *                             because if there were warnings and errors, they were not
+   *                             being output to the Warnings widget since the project is loaded
+   *                             before the GUI is constructed.  Fixes #4488
+   *   @history 2016-11-09 Ian Humphrey - Added default readSettings() call to load initial
+   *                           default project window state. References #4358.
+   */
+  IpceMainWindow::IpceMainWindow(QWidget *parent) :
+      QMainWindow(parent) {
+    m_maxThreadCount = -1;
+
+    QWidget *centralWidget = new QWidget;
+    centralWidget->setAutoFillBackground(true);
+    QPalette p = centralWidget->palette();
+    p.setBrush(QPalette::Window, QBrush(Qt::Dense6Pattern));
+    centralWidget->setPalette(p);
+    setCentralWidget(centralWidget);
+
+    setTabPosition(Qt::LeftDockWidgetArea, QTabWidget::South);
+
+    // This was causing some buggy behavior, but this is what we would ultimately like.
+    // Allows a user to undock a group of tabs.
+    //setDockOptions(GroupedDragging | AllowTabbedDocks);
+
+    setDockNestingEnabled(true);
+
+    //  Set the splitter frames to a reasonable color/size for resizing the docks.
+    setStyleSheet("QMainWindow::separator {background: black; width: 3; height: 3px;}");
+
+    try {
+      m_directory = new Directory(this);
+      connect(m_directory, SIGNAL( newWidgetAvailable(QWidget *) ),
+              this, SLOT( addView(QWidget *) ) );
+
+      connect(m_directory, SIGNAL(closeView(QWidget *)),
+              this, SLOT(removeView(QWidget *)));
+
+      connect(m_directory, SIGNAL( directoryCleaned() ),
+              this, SLOT( removeAllViews() ) );
+      connect(m_directory->project(), SIGNAL(projectLoaded(Project *)),
+              this, SLOT(readSettings(Project *)));
+      connect(m_directory->project(), SIGNAL(projectSaved(Project *)),
+              this, SLOT(writeSettings(Project *)));
+      connect(m_directory, SIGNAL( newWarning() ),
+              this, SLOT( raiseWarningTab() ) );
+    }
+    catch (IException &e) {
+      throw IException(e, IException::Programmer,
+          "Could not create Directory.", _FILEINFO_);
+    }
+
+    m_projectDock = new QDockWidget("Project", this, Qt::SubWindow);
+    m_projectDock->setObjectName("projectDock");
+    m_projectDock->setFeatures(QDockWidget::DockWidgetMovable |
+                              QDockWidget::DockWidgetFloatable);
+    m_projectDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+    ProjectItemTreeView *projectTreeView = m_directory->addProjectItemTreeView();
+    projectTreeView->setInternalModel( m_directory->model() );
+    projectTreeView->treeView()->expandAll();
+    projectTreeView->installEventFilter(this);
+
+    m_projectDock->setWidget(projectTreeView);
+    addDockWidget(Qt::LeftDockWidgetArea, m_projectDock, Qt::Horizontal);
+
+    m_warningsDock = new QDockWidget("Warnings", this, Qt::SubWindow);
+    m_warningsDock->setObjectName("m_warningsDock");
+    m_warningsDock->setFeatures(QDockWidget::DockWidgetClosable |
+                         QDockWidget::DockWidgetMovable |
+                         QDockWidget::DockWidgetFloatable);
+    m_warningsDock->setWhatsThis(tr("This shows notices and warnings from all operations "
+                          "on the current project."));
+    m_warningsDock->setAllowedAreas(Qt::BottomDockWidgetArea);
+    m_directory->setWarningContainer(m_warningsDock);
+    addDockWidget(Qt::BottomDockWidgetArea, m_warningsDock);
+
+    QDockWidget *historyDock = new QDockWidget("History", this, Qt::SubWindow);
+    historyDock->setObjectName("historyDock");
+    historyDock->setFeatures(QDockWidget::DockWidgetClosable |
+                         QDockWidget::DockWidgetMovable |
+                         QDockWidget::DockWidgetFloatable);
+    historyDock->setWhatsThis(tr("This shows all operations performed on the current project."));
+    historyDock->setAllowedAreas(Qt::BottomDockWidgetArea);
+    m_directory->setHistoryContainer(historyDock);
+    tabifyDockWidget(m_warningsDock, historyDock);
+
+    historyDock->raise();
+
+    setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
+    setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
+    setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea);
+    setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
+
+    statusBar()->showMessage("Ready");
+    statusBar()->addWidget(m_directory->project()->progress());
+
+    foreach (QProgressBar *progressBar, m_directory->progressBars()) {
+      statusBar()->addWidget(progressBar);
+    }
+
+    // Read default app settings.  NOTE: This must be completed before initializing actions in order
+    // to read the recent projects from the config file.
+    readSettings(m_directory->project() );
+
+    initializeActions();
+    createMenus();
+    createToolBars();
+
+    QCoreApplication::setApplicationName("ipce");
+    QStringList args = QCoreApplication::arguments();
+
+    if (args.count() == 2) {
+      OpenProjectWorkOrder *workorder = new OpenProjectWorkOrder(m_directory->project());
+      workorder->execute();
+    }
+  }
+  
+
+  /**
+   * This is connected from Directory's newWidgetAvailable signal
+   *
+   * @param[in] newWidget (QWidget *)
+   */
+  void IpceMainWindow::addView(QWidget *newWidget, Qt::DockWidgetArea area,
+                               Qt::Orientation orientation) {
+
+    // JigsawRunWidget is already a QDockWidget, and no modifications need to be made to it
+    if (qobject_cast<JigsawRunWidget *>(newWidget)) {
+      splitDockWidget(m_projectDock, (QDockWidget*)newWidget, Qt::Vertical);
+
+      // Save view docks for cleanup during a project close
+      m_specialDocks.append((QDockWidget *)newWidget);
+      return;
+    }
+
+    QDockWidget *dock = new QDockWidget(newWidget->windowTitle(), this);
+    dock->setWidget(newWidget);
+    dock->setObjectName(newWidget->objectName());
+    dock->setAttribute(Qt::WA_DeleteOnClose);
+    dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable |
+                      QDockWidget::DockWidgetFloatable);
+
+    if ( qobject_cast<SensorInfoWidget *>(newWidget) ||
+         qobject_cast<TargetInfoWidget *>(newWidget) ||
+         qobject_cast<ControlHealthMonitorView *>(newWidget) ||
+         qobject_cast<TemplateEditorWidget *>(newWidget)) {
+      dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+      splitDockWidget(m_projectDock, dock, Qt::Vertical);
+
+      // Save view docks for cleanup during a project close
+      m_specialDocks.append(dock);
+    }
+    else {
+      // Desired behavior of docking views:
+      // First regular view (footprint,cubeDisplay) is added to the right of the "special" views
+      // (project, sensor, jigsaw, controlHealth).  Adding additional "regular" views are tabbed
+      // with the last "regular" view which was added.
+      // The following logic not guaranteed to work as intended. If user moves one of the "special"
+      // views such as sensor from below the project dock to the right of the project, the following
+      // will put the new dock to the right of the moved "special" dock instead of tabbing.  The only
+      // way to possibly ensure the intended functionality would be to check for the position of the
+      // last added dock and either add or tabify depending on location.  This might also allow the
+      // docks to be kept in a single list instead of m_specialDocks & m_viewDocks.
+      if (m_viewDocks.count() == 0) {
+        addDockWidget(Qt::RightDockWidgetArea, dock, Qt::Horizontal);
+      }
+      else {
+        tabifyDockWidget(m_viewDocks.last(), dock);
+        dock->show();
+        dock->raise();
+      }
+
+      // Save view docks for cleanup during a project close
+      m_viewDocks.append(dock);
+    }
+
+    // When dock widget is destroyed, make sure the view it holds is also destroyed
+    connect(dock, SIGNAL(destroyed(QObject *)), newWidget, SLOT(deleteLater()));
+    // The list of dock widgets needs cleanup as each view is destroyed
+    connect(dock, SIGNAL(destroyed(QObject *)), this, SLOT(cleanupViewDockList(QObject *)));
+
+    // Only emit the signal when one view is added just for simplicity; behavior would not change
+    // if this was emitted after every addition.
+    if (m_viewDocks.size() == 1) {
+      emit enableViewActions(true);
+    }
+  }
+
+
+  /**
+   * Cleans up m_viewDocks when a view is closed (object is destroyed).
+   *
+   * @param view QObject* The dock widget to remove from the m_viewDocks
+   */
+  void IpceMainWindow::cleanupViewDockList(QObject *obj) {
+
+    QDockWidget *dock = static_cast<QDockWidget *>(obj);
+    if (dock) {
+      m_viewDocks.removeAll(dock);
+      m_specialDocks.removeAll(dock);
+    }
+
+    if (m_viewDocks.size() == 0) {
+      emit enableViewActions(false);
+    }
+  }
+
+
+  /**
+   * This slot is connected from Directory::closeView(QWidget *) signal.  It will close the given
+   * view and delete the view.
+   *
+   * @param view QWidget* The view to close.
+   */
+  void IpceMainWindow::removeView(QWidget *view) {
+
+    QDockWidget *parentDock = qobject_cast<QDockWidget *>(view->parent());
+    removeDockWidget(parentDock);
+    delete parentDock;
+  }
+
+
+  /**
+   * Removes All Views in main window, connected to directory signal directoryCleaned()
+   */
+  void IpceMainWindow::removeAllViews() {
+    setWindowTitle("ipce");
+    foreach (QDockWidget *dock, m_viewDocks) {
+      if (dock) {
+        removeDockWidget(dock);
+        delete dock;
+      }
+    }
+
+    foreach (QDockWidget *dock, m_specialDocks) {
+      if (dock) {
+        removeDockWidget(dock);
+        m_specialDocks.removeAll(dock);
+        delete dock;
+      }
+    }
+    m_viewDocks.clear();
+    m_specialDocks.clear();
+    emit enableViewActions(false);
+}
+
+
+  /**
+   * Cleans up the directory.
+   */
+  IpceMainWindow::~IpceMainWindow() {
+    m_directory->deleteLater();
+  }
+
+
+  /**
+   * This is needed so that the project clean flag is not set to false when move and resize events
+   * are emitted from ipce.cpp when IpceMainWindow::show() is called.
+   * The non-spontaneous or internal QShowEvent is only emitted once from ipce.cpp, so the project
+   * clean flag can be reset.
+   *
+   * @param event QShowEvent*
+   *
+   */
+  void IpceMainWindow::showEvent(QShowEvent *event) {
+    if (!event->spontaneous()) {
+      m_directory->project()->setClean(true);
+    }
+  }
+
+
+  /**
+   * Filters out events from views so they can be handled by the main
+   * window. Filters out DragEnter Drop and ContextMenu events from
+   * views.
+   *
+   * @param[in] watched (QObject *) The object being filtered.
+   * @param[in] event (QEvent *) The event that may be filtered.
+   */
+  bool IpceMainWindow::eventFilter(QObject *watched, QEvent *event) {
+    if ( AbstractProjectItemView *view = qobject_cast<AbstractProjectItemView *>(watched) ) {
+      if (event->type() == QEvent::DragEnter) {
+        return true;
+      }
+      else if (event->type() == QEvent::Drop) {
+        return true;
+      }
+      else if (event->type() == QEvent::ContextMenu) {
+        QMenu contextMenu;
+
+        QList<QAction *> viewActions = view->contextMenuActions();
+
+        if ( !viewActions.isEmpty() ) {
+          foreach (QAction *action, viewActions) {
+            if (action) {
+              contextMenu.addAction(action);
+            }
+            else {
+              contextMenu.addSeparator();
+            }
+          }
+          contextMenu.addSeparator();
+        }
+
+        QList<QAction *> workOrders = m_directory->supportedActions( view->currentItem() );
+
+        if ( !workOrders.isEmpty() ) {
+          foreach (QAction *action, workOrders) {
+            contextMenu.addAction(action);
+          }
+          contextMenu.addSeparator();
+        }
+
+        contextMenu.exec( static_cast<QContextMenuEvent *>(event)->globalPos() );
+
+        return true;
+      }
+    }
+
+    return QMainWindow::eventFilter(watched, event);
+  }
+
+
+  /**
+   * This method takes the max thread count setting and asks
+   * QtConcurrent to respect it.
+   */
+  void IpceMainWindow::applyMaxThreadCount() {
+    if (m_maxThreadCount <= 1) {
+      // Allow QtConcurrent to use every core and starve the GUI thread
+      QThreadPool::globalInstance()->setMaxThreadCount(QThread::idealThreadCount());
+    }
+    else {
+      // subtract 1 to account for the GUI thread
+      QThreadPool::globalInstance()->setMaxThreadCount(m_maxThreadCount - 1);
+    }
+  }
+
+
+  /**
+   * Initializes the internal lists of actions of the main window for
+   * use in the menus and toolbars.
+   */
+  void IpceMainWindow::initializeActions() {
+    QAction *exitAction = new QAction("E&xit", this);
+    exitAction->setIcon( QIcon::fromTheme("window-close") );
+    connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));
+    m_fileMenuActions.append(exitAction);
+    m_permToolBarActions.append(exitAction);
+
+    QAction *tabViewsAction = new QAction("Tab Views", this);
+    connect( tabViewsAction, SIGNAL(triggered()), this, SLOT(tabViews()) );
+    connect( this, SIGNAL(enableViewActions(bool)), tabViewsAction, SLOT(setEnabled(bool)) );
+    m_viewMenuActions.append(tabViewsAction);
+    tabViewsAction->setDisabled(true);  // Disabled on default, until a view is added
+
+    QAction *tileViewsAction = new QAction("Tile Views", this);
+    connect( tileViewsAction, SIGNAL(triggered()), this, SLOT(tileViews()) );
+    connect( this, SIGNAL(enableViewActions(bool)), tileViewsAction, SLOT(setEnabled(bool)) );
+    m_viewMenuActions.append(tileViewsAction);
+    tileViewsAction->setDisabled(true); // Disabled on default, until a view is added
+
+    QAction *undoAction = m_directory->undoAction();
+    undoAction->setShortcut(Qt::Key_Z | Qt::CTRL);
+
+    QAction *redoAction = m_directory->redoAction();
+    redoAction->setShortcut(Qt::Key_Z | Qt::CTRL | Qt::SHIFT);
+
+    m_editMenuActions.append(undoAction);
+    m_editMenuActions.append(redoAction);
+
+    QAction *threadLimitAction = new QAction("Set Thread &Limit", this);
+    connect(threadLimitAction, SIGNAL(triggered()),
+            this, SLOT(configureThreadLimit()));
+
+    m_settingsMenuActions.append(m_directory->project()->userPreferenceActions());
+    m_settingsMenuActions.append(threadLimitAction);
+
+    QAction *activateWhatsThisAct = new QAction("&What's This", this);
+    activateWhatsThisAct->setShortcut(Qt::SHIFT | Qt::Key_F1);
+    activateWhatsThisAct->setIcon(
+        QPixmap(FileName("$base/icons/contexthelp.png").expanded()));
+    activateWhatsThisAct->setToolTip("Activate What's This and click on parts "
+        "this program to see more information about them");
+    connect(activateWhatsThisAct, SIGNAL(triggered()), this, SLOT(enterWhatsThisMode()));
+
+    m_helpMenuActions.append(activateWhatsThisAct);
+  }
+
+
+  /**
+   * Creates and fills the application menus of the menu bar.
+   */
+  void IpceMainWindow::createMenus() {
+
+    m_fileMenu = menuBar()->addMenu(tr("&File"));
+    m_fileMenu->setObjectName("fileMenu");
+    // Get Directory FileMenu actions
+    foreach ( QAction *action, m_directory->fileMenuActions() ) {
+      m_fileMenu->addAction(action);
+    }
+    m_fileMenu->addSeparator();
+    // Get FileMenu actions from the ipceMainWindow, Exit is the only action
+    foreach ( QAction *action, m_fileMenuActions ) {
+      m_fileMenu->addAction(action);
+    }
+
+    m_projectMenu = menuBar()->addMenu(tr("&Project"));
+    m_projectMenu->setObjectName("projectMenu");
+    //  Get Project menu actions from Directory
+    foreach ( QAction *action, m_directory->projectMenuActions() ) {
+      m_projectMenu->addAction(action);
+    }
+    // Allow tool tips to be displayed for the project menu's actions (e.g. "Bundle Adjustment")
+    // This is a work around for Qt's what this text not working on disabled actions
+    // (even though the Qt documentation says it should work on disabled QAction's).
+    m_projectMenu->setToolTipsVisible(true);
+
+    m_editMenu = menuBar()->addMenu(tr("&Edit"));
+    m_editMenu->setObjectName("editMenu");
+    m_editMenu->addSeparator();
+    // Get Edit menu actions from Directory
+    foreach ( QAction *action, m_directory->editMenuActions() ) {
+      m_editMenu->addAction(action);
+    }
+    // Get Edit menu actions from IpceMainWindow
+    foreach ( QAction *action, m_editMenuActions ) {
+      m_editMenu->addAction(action);
+    }
+
+    m_viewMenu = menuBar()->addMenu("&View");
+    m_viewMenu->setObjectName("viewMenu");
+    // Get View menu actions from Directory
+    foreach ( QAction *action, m_directory->viewMenuActions() ) {
+      m_viewMenu->addAction(action);
+    }
+    m_viewMenu->addSeparator();
+    // Get View menu actions from IpceMainWindow
+    foreach ( QAction *action, m_viewMenuActions ) {
+      m_viewMenu->addAction(action);
+    }
+
+    m_settingsMenu = menuBar()->addMenu("&Settings");
+    m_settingsMenu->setObjectName("settingsMenu");
+    // Get Settings menu actions from Directory
+    foreach ( QAction *action, m_directory->settingsMenuActions() ) {
+      m_settingsMenu->addAction(action);
+    }
+    m_settingsMenu->addSeparator();
+    // Get Settings menu actions from IpceMainWindow
+    foreach ( QAction *action, m_settingsMenuActions ) {
+      m_settingsMenu->addAction(action);
+    }
+
+    m_helpMenu = menuBar()->addMenu("&Help");
+    m_helpMenu->setObjectName("helpMenu");
+    // Get Help menu actions from Directory
+    foreach ( QAction *action, m_directory->helpMenuActions() ) {
+      m_helpMenu->addAction(action);
+    }
+    m_helpMenu->addSeparator();
+    // Get Help menu actions from IpceMainWindow
+    foreach ( QAction *action, m_helpMenuActions ) {
+      m_helpMenu->addAction(action);
+    }
+  }
+
+
+  /**
+   * Create the tool bars and populates them with QActions from several sources. Actions are taken
+   * from an internal list of QActions and the Directory.
+   */
+  void IpceMainWindow::createToolBars() {
+    m_permToolBar = new QToolBar(this);
+    QSize iconSize(25, 45);
+    m_permToolBar->setIconSize(iconSize);
+    m_permToolBar->setObjectName("PermanentToolBar");
+    addToolBar(m_permToolBar);
+
+    foreach ( QAction *action, m_directory->permToolBarActions() ) {
+      m_permToolBar->addAction(action);
+    }
+
+    foreach (QAction *action, m_permToolBarActions) {
+      m_permToolBar->addAction(action);
+    }
+  }
+
+
+  /**
+   * Writes the global settings like recent projects and thread count.
+   */
+  void IpceMainWindow::writeGlobalSettings(Project *project) {
+
+    QString appName = QApplication::applicationName();
+
+    QSettings globalSettings(FileName("$HOME/.Isis/" + appName + "/ipce.config").expanded(),
+        QSettings::NativeFormat);
+
+    // If no config file exists and a user immediately opens a project,
+    // the project's geometry will be saved as a default for when ipce is
+    // opened again. Previously, the ipce's default size was small,
+    // until a user opened ipce (but not a project) and resized to how they
+    // wanted it to be sized, then closed ipce.
+    if (project->isTemporaryProject() || !globalSettings.contains("geometry")) {
+      globalSettings.setValue("geometry", QVariant(geometry()));
+    }
+
+    globalSettings.setValue("maxThreadCount", m_maxThreadCount);
+    globalSettings.setValue("maxRecentProjects",m_maxRecentProjects);
+
+    globalSettings.beginGroup("recent_projects");
+    QStringList keys = globalSettings.allKeys();
+    QMap<QString,QString> recentProjects;
+
+    foreach (QString key,keys) {
+      recentProjects[key]=globalSettings.value(key).toString();
+    }
+
+    QList<QString> projectPaths = recentProjects.values();
+
+    if (keys.count() >= m_maxRecentProjects) {
+
+      //Clear out the recent projects before repopulating this group
+      globalSettings.remove("");
+
+      //If the currently open project is a project that has been saved and is not within the current
+      //list of recently open projects, then remove the oldest project from the list.
+      if (!project->projectRoot().contains("tmpProject") &&
+          !projectPaths.contains(project->projectRoot()) ) {
+        QString s=keys.first();
+        recentProjects.remove( s );
+      }
+
+      //If the currently open project is already contained within the list,
+      //then remove the earlier reference.
+      if (projectPaths.contains(project->projectRoot())) {
+        QString key = recentProjects.key(project->projectRoot());
+        recentProjects.remove(key);
+
+      }
+
+      QMap<QString,QString>::iterator i;
+
+      //Iterate through the recentProjects QMap and set the <key,val> pairs.
+      for (i=recentProjects.begin();i!=recentProjects.end();i++) {
+          globalSettings.setValue(i.key(),i.value());
+      }
+
+      //Get a unique time value for generating a key
+      long t0 = QDateTime::currentMSecsSinceEpoch();
+
+      QString projName = project->name();
+      QString t0String=QString::number(t0);
+
+      //Save the project location
+      if (!project->projectRoot().contains("tmpProject") ) {
+              globalSettings.setValue(t0String+"%%%%%"+projName,project->projectRoot());
+      }
+    }
+
+    //The numer of recent open projects is less than m_maxRecentProjects
+    else {
+
+      long t0 = QDateTime::currentMSecsSinceEpoch();
+      QString projName = project->name();
+      QString t0String=QString::number(t0);
+
+      if (!project->isTemporaryProject() &&
+          !projectPaths.contains( project->projectRoot())) {
+        globalSettings.setValue(t0String+"%%%%%"+projName,project->projectRoot());
+      }
+    }
+    globalSettings.endGroup();
+    globalSettings.sync();
+  }
+
+
+  /**
+   * Write the window positioning and state information out to a
+   * config file. This allows us to restore the settings when we
+   * create another main window (the next time this program is run).
+   *
+   * The state will be saved according to the currently loaded project and its name.
+   *
+   * When no project is loaded (i.e. the default "Project" is open), the config file used is
+   * $HOME/.Isis/$APPNAME/ipce.config.
+   * When a project, ProjectName, is loaded, the config file used is
+   * project->projectRoot()/ipce.config.
+   *
+   * @param[in] project Pointer to the project that is currently loaded (default is "Project")
+   *
+   * @internal
+   *   @history 2016-11-09 Ian Humphrey - Settings are now written according to the loaded project.
+   *                           References #4358.
+   *   @history 2017-10-17 Tyler Wilson Added a [recent projects] group for the saving and
+   *                           restoring of recently opened projects.  References #4492.
+   *   @history Kaitlyn Lee 2018-07-09 - Added the value "maximized" in the project settings
+   *                           so that a project remembers if it was in fullscreen when saved.
+   *                           Fixes #5175.
+   */
+  void IpceMainWindow::writeSettings(Project *project) {
+
+    // Ensure that we are not using a NULL pointer
+    if (!project) {
+      QString msg = "Cannot write settings with a NULL Project pointer.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+    QSettings projectSettings(FileName(project->newProjectRoot() + "/ipce.config").expanded(),
+        QSettings::NativeFormat);
+
+    projectSettings.setValue("geometry", QVariant(geometry()));
+    projectSettings.setValue("windowState", saveState());
+    projectSettings.setValue("maximized", isMaximized());
+    projectSettings.sync();
+  }
+
+
+  /**
+   * Read the window positioning and state information from the config file.
+   *
+   * When running ipce without opening a project, the config file read is
+   * $HOME/.Isis/$APPNAME/ipce.config
+   * When running ipce and opening a project (ProjectName), the config file read is
+   * project->projectRoot()/ipce.config
+   *
+   * @param[in] project (Project *) The project that was loaded.
+   *
+   * @internal
+   *   @history Ian Humphrey - Settings are now read on a project name basis. References #4358.
+   *   @history Tyler Wilson 2017-11-02 - Settings now read recent projects.  References #4492.
+   *   @history Tyler Wilson 2017-11-13 - Commented out a resize call near the end because it
+   *                was messing with the positions of widgets after a project was loaded.
+   *                Fixes #5075.
+   *   @history Makayla Shepherd 2018-06-10 - Settings are read from the project root ipce.config.
+   *                If that does not exist then we read from .Isis/ipce/ipce.config.
+   *   @history Kaitlyn Lee 2018-07-09 - Added the call showNormal() so when a project is
+   *                not saved in fullscreen, the window will resize to the project's
+   *                window size. This also fixes the history/warning tabs being misplaced
+   *                when opening a project. Fixes #5175.
+   */
+  void IpceMainWindow::readSettings(Project *project) {
+    // Ensure that the Project pointer is not NULL
+    if (!project) {
+      QString msg = "Cannot read settings with a NULL Project pointer.";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+
+    // Set the path of the settings file
+    // The default is to assume that the project has an ipce.config in it
+    // If the file does not exist then we read settings from .Isis/ipce/ipce.config
+    QString appName = QApplication::applicationName();
+    QString filePath = project->projectRoot() + "/ipce.config";
+    bool isFullScreen = false;
+    if (!FileName(filePath).fileExists()) {
+      filePath = "$HOME/.Isis/" + appName + "/ipce.config";
+      // If the $HOME/.Isis/ipce/ipce.config does not exist then we want ipce to show up in
+      // in full screen. In other words the default geometry is full screen
+      if (!FileName(filePath).fileExists()) {
+        isFullScreen = true;
+      }
+    }
+
+    if (project->name() == "Project") {
+      setWindowTitle("ipce");
+    }
+    else {
+      setWindowTitle( project->name() );
+    }
+
+    QSettings projectSettings(FileName(filePath).expanded(), QSettings::NativeFormat);
+
+    if (!isFullScreen) {
+      // If a project was not in fullscreen when saved, restore the project's window size.
+      if (!projectSettings.value("maximized").toBool()) {
+        showNormal();
+      }
+      setGeometry(projectSettings.value("geometry").value<QRect>());
+
+      if (!project->isTemporaryProject()) {
+        restoreState(projectSettings.value("windowState").toByteArray());
+      }
+    }
+    else {
+      this->showMaximized();
+    }
+
+    if (project->name() == "Project") {
+      QSettings globalSettings(FileName("$HOME/.Isis/" + appName + "/ipce.config").expanded(),
+                              QSettings::NativeFormat);
+
+      QStringList projectNameList;
+      QStringList projectPathList;
+      globalSettings.beginGroup("recent_projects");
+      QStringList keys = globalSettings.allKeys();
+      QRegExp underscore("%%%%%");
+
+      foreach (QString key, keys) {
+        QString childKey = "recent_projects/"+key;
+        QString projectPath = globalSettings.value(key).toString();
+        QString projectName = projectPath.split("/").last();
+        projectPathList.append(projectPath) ;
+        projectNameList.append(projectName);
+      }
+
+      globalSettings.endGroup();
+
+      QStringList projectPathReverseList;
+      for (int i = projectPathList.count() - 1; i >= 0; i--) {
+        projectPathReverseList.append(projectPathList[i]);
+      }
+
+      QStringList projectPathListTruncated;
+
+      int i =0;
+
+      foreach (QString proj,projectPathReverseList) {
+        if (i <= m_maxRecentProjects) {
+          projectPathListTruncated.append(proj);
+          i++;
+        }
+        else
+          break;
+        }
+
+      m_directory->setRecentProjectsList(projectPathListTruncated);
+      m_directory->updateRecentProjects();
+      m_maxThreadCount = globalSettings.value("maxThreadCount", m_maxThreadCount).toInt();
+      applyMaxThreadCount();
+    }
+
+    m_directory->project()->setClean(true);
+  }
+
+
+  /**
+   * Handle the close event by writing the window positioning and
+   * state information before forwarding the event to the QMainWindow.
+   */
+  void IpceMainWindow::closeEvent(QCloseEvent *event) {
+
+    foreach(TemplateEditorWidget *templateEditor, m_directory->templateEditorViews()) {
+      templateEditor->saveOption();
+    }
+    // The active control is checked here for modification because this was the simplest solution
+    // vs changing the project clean state every time the control is modified or saved.
+    if (!m_directory->project()->isClean() || (m_directory->project()->activeControl() &&
+                                               m_directory->project()->activeControl()->isModified())) {
+      QMessageBox *box = new QMessageBox(QMessageBox::NoIcon, QString("Current Project Has Unsaved Changes"),
+                             QString("Would you like to save your current project?"),
+                             NULL, qobject_cast<QWidget *>(parent()), Qt::Dialog);
+      QPushButton *save = box->addButton("Save", QMessageBox::AcceptRole);
+      box->addButton("Don't Save", QMessageBox::RejectRole);
+      QPushButton *cancel = box->addButton("Cancel", QMessageBox::NoRole);
+      box->exec();
+
+      if (box->clickedButton() == (QAbstractButton*)cancel) {
+        event->ignore();
+        return;
+      }
+      else if (box->clickedButton() == (QAbstractButton*)save) {
+        m_directory->project()->save();
+      }
+    }
+    //  Write global settings, for now this is for the project "Project"
+    writeGlobalSettings(m_directory->project());
+    m_directory->project()->clear();
+
+    QMainWindow::closeEvent(event);
+  }
+
+
+  /**
+   * Ask the user how many threads to use in this program. This
+   * includes the GUI thread.
+   */
+  void IpceMainWindow::configureThreadLimit() {
+    bool ok = false;
+
+    QStringList options;
+
+    int current = 0;
+    options << tr("Use all available");
+
+    for(int i = 1; i < 24; i++) {
+      QString option = tr("Use %1 threads").arg(i + 1);
+
+      options << option;
+      if(m_maxThreadCount == i + 1)
+        current = i;
+    }
+
+    QString res = QInputDialog::getItem(NULL, tr("Concurrency"),
+        tr("Set the number of threads to use"),
+        options, current, false, &ok);
+
+    if (ok) {
+      m_maxThreadCount = options.indexOf(res) + 1;
+
+      if (m_maxThreadCount <= 1)
+        m_maxThreadCount = -1;
+
+      applyMaxThreadCount();
+    }
+  }
+
+
+  /**
+   * Activate the What's This? cursor. This is useful for he What's
+   * This? action in the help menu.
+   */
+  void IpceMainWindow::enterWhatsThisMode() {
+    QWhatsThis::enterWhatsThisMode();
+  }
+
+
+  /**
+   * Tabs all open attached/detached views
+   */
+  void IpceMainWindow::tabViews() {
+    // tabifyDockWidget() takes two widgets and tabs them, so an easy way to do
+    // this is to grab the first view and tab the rest with the first.
+    QDockWidget *firstView = m_viewDocks.first();
+
+    foreach (QDockWidget *currentView, m_viewDocks) {
+      // We have to reattach a view before it can be tabbed. If it is attached,
+      // this will have no affect.
+      currentView->setFloating(false);
+
+      if (currentView == firstView) {
+        continue;
+      }
+      tabifyDockWidget(firstView, currentView);
+    }
+  }
+
+
+  /**
+   * Tile all open attached/detached views
+   */
+  void IpceMainWindow::tileViews() {
+    // splitDockWidget() takes two widgets and tiles them, so an easy way to do
+    // this is to grab the first view and tile the rest with the first.
+    QDockWidget *firstView = m_viewDocks.first();
+
+    foreach (QDockWidget *currentView, m_viewDocks) {
+      // We have to reattach a view before it can be tiled. If it is attached,
+      // this will have no affect. We have to call addDockWidget() to untab any views.
+      currentView->setFloating(false);
+      addDockWidget(Qt::RightDockWidgetArea, currentView, Qt::Horizontal);
+
+      if (currentView == firstView) {
+        continue;
+      }
+      splitDockWidget(firstView, currentView, Qt::Horizontal);
+    }
+  }
+
+
+/**
+ * Raises the warningWidget to the front of the tabs. Connected to warning signal from directory.
+ */
+  void IpceMainWindow::raiseWarningTab() {
+    m_warningsDock->raise();
+  }
+}
diff --git a/isis/src/qisis/apps/ipce/IpceMainWindow.h b/isis/src/qisis/apps/ipce/IpceMainWindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..4b74341aafaa293454e4cd1a3bfe1c1da9bb006b
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/IpceMainWindow.h
@@ -0,0 +1,295 @@
+#ifndef IpceMainWindow_H
+#define IpceMainWindow_H
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include "ViewSubWindow.h"
+#include <QEvent>
+#include <QMainWindow>
+#include <QPointer>
+#include <QProgressBar>
+#include <QMdiSubWindow>
+
+namespace Isis {
+  class AbstractProjectItemView;
+  class Directory;
+  class Project;
+
+  /**
+   * The main window for the ipce appication. This handles most of the top-level GUI aspects of the program.
+   *
+   * @author 2012-??-?? Steven Lambright and Stuart Sides
+   *
+   * @internal
+   *   @history 2012-07-27 Kimberly Oyama and Steven Lambright - Removed progress and warnings
+   *                           tab widgets. They are now dock widgets.
+   *   @history 2012-08-28 Tracie Sucharski - The Directory no longer takes a container it its
+   *                           constructor.
+   *   @history 2012-09-17 Steven Lambright - Dock widgets now delete themselves on close. This
+   *                           gives the user the correct options when proceeding in the interface,
+   *                           but undo/redo are not implemented (it needs to eventually be
+   *                           encapsulated in a work order). The undo/redo didn't work correctly
+   *                           anyways before setting this flag, so it's an improvement. Example
+   *                           change: If I close Footprint View 1, I'm no longer asked if I want
+   *                           to view images in footprint view 1.
+   *   @history 2015-10-05 Jeffrey Covington - Replaced the ProjectTreeWidget
+   *                           with a ProjectItemTreeView. Added the
+   *                           eventFilter() method for intercepting some
+   *                           events from views.
+   *   @history 2016-01-04 Jeffrey Covington - Added a QMdiArea as the central widget
+   *                           of the main window. The menus and toolbars are now solely
+   *                           handled by the main window. Menus, context menus, and
+   *                           toolbars are populated with actions recieved from the Directory
+   *                           the active view, and the main window. Both WorkOrders and
+   *                           regular QActions can be used in menus and toolbars. Views can
+   *                           now be detached from the main window into their own independent
+   *                           window with internalized menus and toolbars.
+   *   @history 2016-10-20 Tracie Sucharski - Clean up included headers that are commented out,
+   *                           updated for Qt5, comment call to saveState for window which caused
+   *                           errors.  TODO:  Determine problem with saveState call.
+   *   @history 2016-11-09 Tyler Wilson - Move a segment of code in the constructor from the beginning
+   *                           to the end.  This code loads a project from the command line instead of the
+   *                           GUI, and it wasn't outputting warnings/errors to the warnings/error tab
+   *                           when the project was loaded because it was being called before the GUI
+   *                           was created.  Fixes #4488.  References #4526, ##4487.
+   *   @history 2016-11-09 Ian Humphrey - Modified readSettings() and writeSettings() to take in
+   *                           Project pointers to be used to properly read and write settings
+   *                           for the IpceMainWindow. Note that when running ipce without
+   *                           opening a Project, the config file ipce_Project.config is used.
+   *                           Otherwise, when a project is open, the config file
+   *                           ipce_ProjectName will be used to restore window geom.
+   *                           The m_permToolBar, m_activeToolBar, and m_toolPad now have object
+   *                           names set, so the saveState() call within writeSettings() now works.
+   *                           Fixes #4358.
+   *   @history 2016-12-09 Tracie Sucharski - One of the previous 2 changes caused a problem with
+   *                           view toolbars not to be restored.  Added setActiveSubWindow and
+   *                           show to the ::addView method.  Fixes #4546.
+   *   @history 2017-04-17 Ian Humphrey - Updated createMenus() to set tool tips (hover text)
+   *                           visible so the JigsawWorkOrder tool tip can be displayed to user
+   *                           (which indicates why it is disabled by default). Fixes #4749.
+   *   @history 2017-06-22 Tracie Sucharski - Renamed from CNetSuiteMainWindow when application was
+   *                           renamed to ipce from cnetsuite.
+   *   @history 2017-07-12 Cole Neubauer - Added removeAllViews function and m_detachedViews member
+   *                           variable. Needed to clear out an old projects views from the window
+   *                           when opening a new project. Fixes #4969
+   *   @history 2017-07-14 Cole Neubauer - Added private slot raiseWarningTab to be able to raise
+   *                           the warning tab when a new warning happens.
+   *                           Fixes #5041
+   *   @history 2017-07-14 Cole Neubauer - Set Object name for Target/Sensor Widgets in addView
+   *                           Fixes #5059
+   *                           Fixes #5041
+   *   @history 2017-07-26 Cole Neubauer - Changed the closevent funtion to check if a project is
+   *                           and prompt user accordingly Fixes #4960
+   *   @history 2017-08-09 Marjorie Hahn - Hard-coded the size of the icons in the toolbar to
+   *                           temporarily fix the shift in size when switching between views
+   *                           until docked widgets are implemented. Fixes #5084.
+   *   @history 2017-10-06 Cole Neubauer - Made the open from command line use the WorkOrder
+   *                           Fixes #5171
+   *   @history 2017-11-02 Tyler Wilson - Added the ability to read/write settings for recent
+   *                           projects.  Also re-implemented the functionality for loading
+   *                           recent projects in IPCE.  Fixes #4492.
+   *   @history 2017-11-03 Adam Goins - Modified the detached QMainWindow to be a ViewSubWindow
+   *                           so that we can capture the windowClose() signal and remove
+   *                           detached views from the m_detachedViews list appropriately.
+   *                           This fixes an issue where a detached view would appear to be
+   *                           open even after it has been closed. Fixes #5109.
+   *   @history 2017-11-12  Tyler Wilson - Removed a resize call in readSettings because it
+   *                           was screwing up the display of widgets when a project is loaded.
+   *                           Also switched the order in which a project is saved.  A project is
+   *                           cleared after it is saved, and not before (which had been the previous
+   *                           behavior.  Fixes #5175.
+   *   @history 2017-12-08 Tracie Sucharski - Removed project path.  Project root has been
+   *                           fixed to correctly show the path. References #5276, #5289.
+   *   @history 2018-01-18 Tracie Sucharski - Commented out progressDock until we decide if it's
+   *                           needed.  Currently, it is not being used, the progress bar appears in
+   *                           the history dock. Fixes #5151.
+   *   @history 2018-03-02 Tracie Sucharski - added static keyword to the m_maxRecentProject member
+   *                           variable, fixes OSX compile warning.  References #5341.
+   *   @history 2018-04-04 Tracie Sucharski - Added removeView slot which removes the view
+   *                           containing the given widget. In the closeEvent method check whether
+   *                           there is an active control and if it has been modified as additional
+   *                           test to determine whether project needs saving.
+   *   @history 2018-05-01 Tracie Sucharski - Code accidently left commented from previous checking.
+   *                           Fixes #5412.
+   *   @history 2018-05-31 Christopher Combs - Added support for JigsawRunWidget to be created as a
+   *                           dockable widget in addView(). Fixes #5428.
+   *   @history 2018-05-30 Tracie Sucharski - Fix to handle the re-factored docked views.
+   *                           Changed from MDI to SDI, changing the centralWidget to a dumy, unused
+   *                           widget. Remove all methods having to do with MDI sub-windows,
+   *                           detached views.  The dock widgets holding the views are saved off
+   *                           for cleanup because there is no way to get the dock from the view.
+   *                           Cleanup connections are made for the views and the docks to ensure
+   *                           that cleanup happens for both.  Fixes #5433.
+   *   @history 2018-06-13 Tracie Sucharski - Fixed cleanup of views and QDockWidgets.
+   *   @history 2018-06-13 Kaitlyn Lee - Since views now inherit from QMainWindow, each individual
+   *                           view has its own toolbar, so having an active toolbar and tool pad is
+   *                           not needed. Removed code adding the save active control net button
+   *                           and the toolpad, since control nets can be saved with the project
+   *                           save button.
+   *   @history 2018-06-14 Christopher Combs - Changed addView method to take in JigsawRunWidget as
+   *                           a QDockWidget object instead of wrapping it in one.
+   *   @history 2018-06-15 Tracie Sucharski - Fixed break to recent projects.  The readSettings
+   *                           must be called before initializeActions to get the recent projects
+   *                           from the config file.
+   *   @history 2018-06-18 Makayla Shepherd - Set the QApplication name so that BundleAdjust does
+   *                           not output text to the command line for ipce. Fixes #4171.
+   *   @history 2018-06-19 Kaitlyn Lee - Added tabViews() and the menu option under the View menu to
+   *                           tab the views. Currently, this can tab all attached/detached views.
+   *                           I left the line setting dock options to allow grouped dragging, but
+   *                           tabbing views does not always work with this enabled. With this
+   *                           option enabled, the type of a view will randomly change and setting
+   *                           its type has no effect. Use windowType() to get the type. Also added
+   *                           the toolbar title in the permanent toolbar constructor.
+   *   @history 2018-06-22 Tracie Sucharski - Cleanup destruction of dock widgets and the views they
+   *                           hold.  Extra destroy slots were causing double deletion of memory.
+   *   @history 2018-06-22 Tracie Sucharski - Added a showEvent handler so that the project clean
+   *                           state can be reset after the IpceMainWindow::show() causes resize and
+   *                           move events which in turn cause the project clean flag to be false
+   *                           even though the project has just opened.
+   *   @history 2018-07-07 Summer Stapleton - Added check in the closeEvent() for changes to any
+   *                           TemplateEditorWidget currently open to create a pop-up warning/
+   *                           option to save.
+   *   @history 2018-07-09 Kaitlyn Lee - Added tileViews() and the menu option to tile all
+   *                           docked/undocked and tabbed/untabbed views. Changed removeView() to
+   *                           delete the parent dock widget. If we do not delete the dock widget,
+   *                           an empty dock widget will remain where the view used to be.
+   *   @history 2018-07-10 Tracie Sucharski - Change initial interface of views to tabbed view.
+   *                           Changed the QMainWindow separator to a different color and wider size
+   *                           for ease of use.  Create the QMainWindow initial size to prevent the
+   *                           Viewports in CubeDnView from being created as a small size.
+   *   @history 2018-07-11 Kaitlyn Lee - Added a value in the project settings that stores whether a
+   *                           project was in fullscreen or not when saved. If not, we call showNormal()
+   *                           to restore the poject's window size. This also fixes the warning/history tabs
+   *                           being misplaced when opening a project. Fixes #5175. References #5436.
+   *   @history 2018-07-12 Tracie Sucharski - Renamed the signal Directory::viewClosed to
+   *                           Directory::closeView since Directory does not close the view but
+   *                           indicate that the view needs closing.  This signal is now used by
+   *                           more than the cnetEditorView, so updated documentation.  Did a little
+   *                           cleanup on the removeView  method by removing some code that
+   *                           automatically happens due to connection made on destroyed signal.
+   *   @history 2018-07-12 Kaitlyn Lee - Removed code that makes the window fullscreen in memory,
+   *                           since this was causing a project's window size to not be restored
+   *                           when opening from the command line. Decreased the size and changed
+   *                           the color of the splitter. In writeGlobalSettings(), check to see if
+   *                           the geometry value does not exist in the config file. This allows the
+   *                           geometry to be saved if the config file does not exist and a user
+   *                           opens a project. Before, it would not save the geometry because the
+   *                           opened project was not temporary. References #5433.
+   *   @history 2018-07-17 Kaitlyn Lee - Added signal enableViewActions(bool) to enable/disable
+   *                           tab/tile views when views are opened/closed.
+   *                           opened project was not temporary. References #5433
+   *   @history 2018-07-19 Tracie Sucharski - Keep separate dock lists for the view docks and
+   *                           "special" docks such as sensor, target and jigsaw. The
+   *                           ControlHealthView is now added under the Project instead of in
+   *                           workspace area. Removed unnecessary call to addDock for the History
+   *                           widget. It is added with the call to tabifyDockWidget.
+   *   @history 2018-07-29 Tracie Sucharski - Set background of centralWidget to a pattern to
+   *                           distinguish it from dockable areas.
+   */
+  class IpceMainWindow : public QMainWindow {
+      Q_OBJECT
+    public:
+      explicit IpceMainWindow(QWidget *parent = 0);
+      ~IpceMainWindow();
+
+    signals:
+      void enableViewActions(bool value);
+
+    public slots:
+      void addView(QWidget *newWidget, Qt::DockWidgetArea area = Qt::LeftDockWidgetArea,
+                   Qt::Orientation orientation = Qt::Horizontal);
+      void removeView(QWidget *view);
+      void removeAllViews();
+
+      void readSettings(Project *);
+      void writeSettings(Project *project);
+      void writeGlobalSettings(Project *project);
+
+    protected:
+      void showEvent(QShowEvent *event);
+      void closeEvent(QCloseEvent *event);
+      bool eventFilter(QObject *watched, QEvent *event);
+
+    private slots:
+      void configureThreadLimit();
+      void enterWhatsThisMode();
+
+      void tabViews();
+      void tileViews();
+
+      void raiseWarningTab();
+
+      void cleanupViewDockList(QObject *obj);
+
+    private:
+      Q_DISABLE_COPY(IpceMainWindow);
+
+      void applyMaxThreadCount();
+
+      void initializeActions();
+      void createMenus();
+      void createToolBars();
+
+    private:
+      /**
+       * The directory stores all of the work orders that this program is capable of doing. This
+       *   drives most of the functionality.
+       */
+      QPointer<Directory> m_directory;
+
+      QDockWidget *m_projectDock;
+      QDockWidget *m_warningsDock;
+
+      QList<QDockWidget *> m_specialDocks;  //!< Non-view dock widgets such as jigsawRun
+      QList<QDockWidget *> m_viewDocks; //!< QDockWidgets holding the views
+
+      /**
+       * This is the "goal" or "estimated" maximum number of active threads running in this program
+       *   at once. For now, the GUI consumes 1 thread and QtConcurrent
+       *   (QThreadPool::globalInstance) consumes the remaining threads. Anything <= 1 means that we
+       *   should perform a best-guess for best perfomance.
+       */
+      int m_maxThreadCount;
+      static const int m_maxRecentProjects = 5;
+
+      QToolBar *m_permToolBar; //!< The toolbar for actions that rarely need to be changed.
+
+      QMenu *m_fileMenu; //!< Menu for the file actions
+      QMenu *m_projectMenu; //!< Menu for the project actions
+      QMenu *m_editMenu; //!< Menu for edit actions
+      QMenu *m_viewMenu; //!< Menu for view and window actions
+      QMenu *m_settingsMenu; //!< Menu for settings actions
+      QMenu *m_helpMenu; //!< Menu for help actions
+
+      QList<QAction *> m_fileMenuActions; //!< Internal list of file actions
+      QList<QAction *> m_projectMenuActions;//!< Internal list of project actions
+      QList<QAction *> m_editMenuActions;//!< Internal list of edit actions
+      QList<QAction *> m_viewMenuActions;//!< Internal list of view actions
+      QList<QAction *> m_settingsMenuActions;//!< Internal list of settings actions
+      QList<QAction *> m_helpMenuActions;//!< Internal list of help actions
+
+      QList<QAction *> m_permToolBarActions;//!< Internal list of permanent toolbar actions
+  };
+}
+
+#endif // IpceMainWindow_H
diff --git a/isis/src/qisis/apps/ipce/Makefile b/isis/src/qisis/apps/ipce/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/apps/ipce/ProgressWidget.cpp b/isis/src/qisis/apps/ipce/ProgressWidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..08c264ae23ee04cad1c597f0914d504286f0cfe8
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/ProgressWidget.cpp
@@ -0,0 +1,17 @@
+#include "ProgressWidget.h"
+
+#include <QtDebug>
+
+#include <QTreeWidgetItem>
+
+namespace Isis {
+  ProgressWidget::ProgressWidget(QWidget *parent) : QWidget(parent) {
+
+  }
+
+
+
+  ProgressWidget::~ProgressWidget() {
+
+  }
+}
diff --git a/isis/src/qisis/apps/ipce/ProgressWidget.h b/isis/src/qisis/apps/ipce/ProgressWidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..0e1ade1528f1ff2fa1c45b07a4bccaf00669a3bc
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/ProgressWidget.h
@@ -0,0 +1,29 @@
+#ifndef ProgressWidget_H
+#define ProgressWidget_H
+
+#include <QProgressBar>
+
+namespace Isis {
+
+  /**
+   * @brief Warning Widget for ipce
+   *
+   * @author 2012-05-29 Steven Lambright and Tracie Sucharski
+   *
+   * @internal
+   */
+  class ProgressWidget : public QWidget {
+      Q_OBJECT
+    public:
+      ProgressWidget(QWidget *parent = 0);
+      virtual ~ProgressWidget();
+
+
+    private:
+      Q_DISABLE_COPY(ProgressWidget);
+      QList<QProgressBar *> m_progressBars;
+  };
+}
+
+#endif
+
diff --git a/isis/src/qisis/apps/ipce/WarningTreeWidget.cpp b/isis/src/qisis/apps/ipce/WarningTreeWidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9faa90b99d46207bf33688474802240030ece24e
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/WarningTreeWidget.cpp
@@ -0,0 +1,37 @@
+#include "WarningTreeWidget.h"
+
+#include <QtDebug>
+
+#include <QTreeWidgetItem>
+
+namespace Isis {
+  /**
+   * Create a warning tree widget for the given project.
+   *
+   * @param parent The widget that goes along with the warnings.
+   */
+  WarningTreeWidget::WarningTreeWidget(QWidget *parent) : QTreeWidget(parent) {
+
+    setHeaderHidden(true);
+  }
+
+
+  WarningTreeWidget::~WarningTreeWidget() {
+
+  }
+
+
+  /**
+   * Creates a new warning item with the given text.
+   *
+   * @param text The text of the warning.
+   */
+  void WarningTreeWidget::showWarning(QString text) {
+
+    QTreeWidgetItem *warningItem = new QTreeWidgetItem(this);
+    warningItem->setText(0, text);
+    // Makes sure the text fits inside the column, this will actually enable horizontal
+    // scrolling if the resized column is wider than the widget view.
+    resizeColumnToContents(0);
+  }
+}
diff --git a/isis/src/qisis/apps/ipce/WarningTreeWidget.h b/isis/src/qisis/apps/ipce/WarningTreeWidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..6e94f016941a8726a80348bcafe7e04e40a07327
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/WarningTreeWidget.h
@@ -0,0 +1,33 @@
+#ifndef WarningTreeWidget_H
+#define WarningTreeWidget_H
+
+#include <QTreeWidget>
+
+namespace Isis {
+
+  /**
+   * @brief Warning Widget for ipce
+   *
+   * @author 2012-05-29 Steven Lambright and Tracie Sucharski
+   *
+   * @internal
+   *   @history 2012-07-31 Kimberly Oyama - Added comments to some of the methods.
+   *   @history 2017-10-11 Ian Humphrey - Added a resize column call to showWarning() to ensure
+   *                           the column size is fit to the width of the warning text. This
+   *                           enables horizontal scrolling for the warning widget. Fixes #5164.
+   */
+  class WarningTreeWidget : public QTreeWidget {
+      Q_OBJECT
+    public:
+      WarningTreeWidget(QWidget *parent = 0);
+      virtual ~WarningTreeWidget();
+
+      void showWarning(QString text);
+
+    private:
+      Q_DISABLE_COPY(WarningTreeWidget);
+  };
+}
+
+#endif
+
diff --git a/isis/src/qisis/apps/ipce/assets/IPCE_UsersGuide_2018-10-17.pdf b/isis/src/qisis/apps/ipce/assets/IPCE_UsersGuide_2018-10-17.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..9f0c3aec2243340a15b13114332c78947a3fe5c0
Binary files /dev/null and b/isis/src/qisis/apps/ipce/assets/IPCE_UsersGuide_2018-10-17.pdf differ
diff --git a/isis/src/qisis/apps/ipce/assets/images/IpceUserInterface.png b/isis/src/qisis/apps/ipce/assets/images/IpceUserInterface.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e8e9e2315327eec0527749a2bb7d27367343689
Binary files /dev/null and b/isis/src/qisis/apps/ipce/assets/images/IpceUserInterface.png differ
diff --git a/isis/src/qisis/apps/ipce/ipce.cpp b/isis/src/qisis/apps/ipce/ipce.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..71d15134f7d5482f641515aad40b691e74eb22a9
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/ipce.cpp
@@ -0,0 +1,74 @@
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "IsisDebug.h"
+
+#include <QDebug>
+#include <QLocale>
+#include <QTranslator>
+
+#include "FileName.h"
+#include "Gui.h"
+#include "IException.h"
+#include "IpceMainWindow.h"
+#include "QIsisApplication.h"
+
+using namespace std;
+using namespace Isis;
+
+int main(int argc, char *argv[]) {
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
+  Gui::checkX11();
+
+  try {
+
+    // Add the Qt plugin directory to the library path
+    FileName qtpluginpath("$ISISROOT/3rdParty/plugins");
+    QCoreApplication::addLibraryPath(qtpluginpath.expanded());
+
+    QApplication *app = new QIsisApplication(argc, argv);
+    QApplication::setApplicationName("ipce");
+
+    IpceMainWindow *mainWindow = new IpceMainWindow();
+
+    //  For OSX, had problems with cneteditor view because it has it's own menus, caused the
+    //  menubar on OSX to lockup
+    QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, true);
+
+    // We do not want a showMaximized call, as that will negate the settings read during the main
+    // window's initialization. References #4358.
+    mainWindow->show();
+    int status = app->exec();
+
+    delete mainWindow;
+    delete app;
+
+    return status;
+  }
+  catch(IException &e) {
+    e.print();
+  }
+
+}
diff --git a/isis/src/qisis/apps/ipce/ipce.xml b/isis/src/qisis/apps/ipce/ipce.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e2dad797af79105fd87867130b3ba2f1bccd44db
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/ipce.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="ipce" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+    
+    <brief>
+      Integrated Photogrammetric Control Environment
+    </brief>
+
+    <description>
+    <img src='assets/images/IpceUserInterface.png' alt='IPCE User Interface' width='1050' height='388' />
+    <p><label>Figure 1:</label> <caption>IPCE User Interface</caption></p>
+       
+    <h4>Photogrammetric Control and IPCE</h4>
+    <p>
+      The quality of digital image mosaics (DIM) and digital elevation models (DEM) - and geologic maps using such products as basemaps - depends greatly upon accurate sensor position and pointing parameters. Spacecraft ephemeris and attitude data provide initial estimates for these parameters. Uncertainty in these data propagate to errors in mapping products. To minimize errors, images are controlled photogrammetrically. Overlapping images are registered to one another by measuring common features (tie points). Images may be tied to the ground by measuring features identifiable on base maps or DEMs (control points). Image measurements are input to the least-squares bundle adjustment which generates improved sensor position and pointing parameters plus the triangulated coordinates of tie and control points.
+    </p>
+    <p>
+        The objective of the Integrated Photogrammetric Control Environment (IPCE) is to incorporate all aspects of the photogrammetric control process within a single interactive and user friendly environment. A project oriented design simplifies data management with the ability to save and restore project data and settings. Multiple, integrated views of data and processing output help to streamline the control workflow.
+    </p>        
+    <p>
+        IPCE currently includes functionality from the standalone isis3 applications <b><i>jigsaw</i></b>, <b><i>qview</i></b>, <b><i>qnet</i></b>, <b><i>qmos</i></b>, and <b><i>cneteditor</i></b>. Control networks can be visualized in a table view (e.g. <b><i>cneteditor</i></b>), or overlaid on an image view (e.g. <b><i>qview</i></b>, <b><i>qnet</i></b>) or an image footprint view (e.g. <b><i>qmos</i></b>). Control networks can be edited from these views as well. Editing includes adding, deleting, and refining control points and measures or modifying metadata associated with them. The bundle adjustment (e.g. <b><i>jigsaw</i></b>) can be performed any number of times within IPCE. Results can be analyzed, compared against other bundle adjustment runs, and saved/restored as part of the IPCE project.
+    </p>
+        
+    <p>
+        A link to the IPCE User's Manual (PDF format) is given below under <b>Related Objects and Documents</b>. It contains example workflows as well as details on using the application.
+     </p>
+     
+    <h4>Known Issues</h4>
+      <p>
+<ol>
+<li>	Cubes must be Level1 (i.e. not projected) in order to import into IPCE. They must contain SPICE information (via <b><i>spiceinit</i></b>). It is recommended that <b><i>footprintinit</i></b> be run on cubes prior to import.</li>
+<li>	Currently there is no mechanism to selectively bundle adjust subsets of images within an IPCE project. So, all images associated with the active control network should be in the project (and no others). All images related to the active control network should be bundle adjusted simultaneously.</li>
+<li>	Images and control networks cannot be deleted from a project once imported.</li>
+<li>	Target body and sensors are not visible on the project tree after invoking File->Save Project As from the main menu to save the project.</li>
+<li>	The Spacecraft node of the project tree is empty for now.</li>
+<li>	When a project is closed, but IPCE remains open, the project name on the tree does not reset to the default name “Project.”</li>
+<li>	Closing cubes within the Footprint view cube list can cause a crash.</li>
+<li>	Images in bundle results will not contain footprint information until the project is saved and re-opened. Re-opening the project will generate the footprint information.</li>
+<li>	It is recommended that bundle output control networks be named uniquely. Otherwise unpredictable behavior may occur.</li>
+</ol>
+	
+      </p>
+
+   </description>
+
+   
+  <category>
+    <categoryItem>Control Networks</categoryItem>
+  </category>
+
+  <seeAlso>
+    <applications>
+      <item>jigsaw</item>
+      <item>qview</item>
+      <item>qnet</item>
+      <item>qmos</item>
+       <item>cneteditor</item>
+    </applications>
+
+    <documents>
+      <document>
+        <title>
+            IPCE User's Manual
+        </title>
+        <source>
+          <filename>IPCE_UsersGuide_2018-10-17.pdf</filename>
+          <path>assets/</path>
+        </source>
+        <author>Ken Edmundson</author>
+        </document>
+    </documents>
+
+
+    
+    
+
+  </seeAlso>
+
+  <history>
+    <change name="Ken Edmundson" date="2012-04-03">
+      Original version
+    </change>
+    <change name="Ian Humphrey" date="2016-11-09">
+      The main window state is now saved properly when running ipce. If running ipce
+      without opening a project, the config files are saved as ipce_Project.config (Project is
+      the default project name). Otherwise, when a project is loaded, config files are saved as
+      ipce_ProjectName.config, where ProjectName is the name of the loaded project.
+      Fixes #4358.
+    </change>
+   <change name="Tyler Wilson" date="2016-11-10">
+      Changed the alias reference for the data_management.png icon from 'data' to 'data-management'.  
+      Annoying errors were showing up on the command line when the application was launched due
+      to a naming conflict.  Fixes #3982.
+   </change> 
+   <change name="Tracie Sucharski" date="2017-06-22">
+     Changed name of application from cnetsuite to ipce.
+   </change>
+   <change name="Summer Stapleton" date="2017-08-14">
+     Updated ipce to only include licensed or open source images and icons. Fixes #5105.
+   </change>
+   <change name="Ken Edmundson, et al." date="2018-07-30">
+     Added ability to specify bundle observation solve settings on a per image basis. Added control net health monitor. Changed interface to allow views to be dockable.
+   </change>
+  </history>
+
+  </application>
+
+
+
+
diff --git a/isis/src/qisis/apps/ipce/tsts/Makefile b/isis/src/qisis/apps/ipce/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/qisis/apps/ipce/tsts/default/Makefile b/isis/src/qisis/apps/ipce/tsts/default/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..2408ca3c360d4ce856a1059efc28ad230657fd80
--- /dev/null
+++ b/isis/src/qisis/apps/ipce/tsts/default/Makefile
@@ -0,0 +1,7 @@
+APPNAME = ipce
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(ECHO) "This should be tested by qisis cat test" > $(OUTPUT)/truth.txt;
+
diff --git a/isis/src/qisis/apps/qmos/qmos.cpp b/isis/src/qisis/apps/qmos/qmos.cpp
index b39bec5ef856d2005dec12459219cc3455b34878..2036d20443b9b74c36edf1c4e1e40049292e3eab 100644
--- a/isis/src/qisis/apps/qmos/qmos.cpp
+++ b/isis/src/qisis/apps/qmos/qmos.cpp
@@ -13,6 +13,10 @@ using namespace std;
 using namespace Isis;
 
 int main(int argc, char *argv[]) {
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
   Isis::Gui::checkX11();
 
   // Add the Qt plugin directory to the library path
diff --git a/isis/src/qisis/apps/qnet/qnet.cpp b/isis/src/qisis/apps/qnet/qnet.cpp
index cdcfe8ae6cbd232b5efd9dae69f2d27d81b49798..4340d02cd58d4a24a923f8d28828843fa9e76dc8 100644
--- a/isis/src/qisis/apps/qnet/qnet.cpp
+++ b/isis/src/qisis/apps/qnet/qnet.cpp
@@ -40,6 +40,10 @@ ToolClass *createTool(ViewportMainWindow *viewportMainWindow, ToolList *tools) {
 }
 
 int main(int argc, char *argv[]) {
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
   Isis::Gui::checkX11();
 
   try {
@@ -221,8 +225,11 @@ int main(int argc, char *argv[]) {
     /**** EXITING ****/
     // Connect the viewport's close signal to the file tool's exit method
     // Added 2008-12-04 by Jeannie Walldren
-    QObject::connect(vw , SIGNAL(closeWindow()),
-                     ftool, SLOT(exit()));
+    // Added 2018-04-24 by Adam Goins - Added in optional parameters to the closeWindow() signal
+    //                         And the exit() slot so that the window's closeEvent can be handled
+    //                         Appropriately. Fixes #4146.
+    QObject::connect(vw , SIGNAL(closeWindow(QCloseEvent *)),
+                     ftool, SLOT(exit(QCloseEvent *)));
     //-----------------------------------------------------------------
 
     vw->show();
diff --git a/isis/src/qisis/apps/qtie/QtieTool.cpp b/isis/src/qisis/apps/qtie/QtieTool.cpp
index 41b7f5a947f02a3c2fd3cefd9f82338dd8c3c1fe..28f05c487615d2881dd09a84e967cd67654db858 100644
--- a/isis/src/qisis/apps/qtie/QtieTool.cpp
+++ b/isis/src/qisis/apps/qtie/QtieTool.cpp
@@ -795,7 +795,8 @@ namespace Isis {
       //     longitude sigma        = 1000.0
       //     radius sigma           = Null since we are not solving for radius
       //     outlier rejection      = false
-      settings->setSolveOptions(false, false, false, false, 1000.0, 1000.0, Isis::Null);
+      settings->setSolveOptions(false, false, false, false, SurfacePoint::Latitudinal, 
+                                SurfacePoint::Latitudinal, 1000.0,1000.0, Isis::Null);
   //************************************************************************************************
       QList<BundleObservationSolveSettings> observationSolveSettingsList;
       BundleObservationSolveSettings observationSolveSettings;
diff --git a/isis/src/qisis/apps/qtie/qtie.cpp b/isis/src/qisis/apps/qtie/qtie.cpp
index 852a869d11122f8acb1de8248fc08dec0e992dd1..004e928ad18b00a37af047148398751296ba616d 100644
--- a/isis/src/qisis/apps/qtie/qtie.cpp
+++ b/isis/src/qisis/apps/qtie/qtie.cpp
@@ -33,7 +33,10 @@ ToolClass *createTool(ViewportMainWindow *viewportMainWindow, ToolList *tools) {
 }
 
 int main(int argc, char *argv[]) {
-
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
   Isis::Gui::checkX11();
 
   try {
diff --git a/isis/src/qisis/apps/qview/qview.cpp b/isis/src/qisis/apps/qview/qview.cpp
index 95253f46c577b247fe09fe950cab6f20c2428e61..5dcf578b49f58c95c231db5204ff3296e263e249 100644
--- a/isis/src/qisis/apps/qview/qview.cpp
+++ b/isis/src/qisis/apps/qview/qview.cpp
@@ -60,6 +60,10 @@ ToolClass *createTool(ViewportMainWindow *viewportMainWindow, ToolList *tools) {
 }
 
 int main(int argc, char *argv[]) {
+  if (getenv("ISISROOT") == NULL || QString(getenv("ISISROOT")) == "") {
+    std::cerr << "Please set ISISROOT before running any Isis applications" << std::endl;
+    exit(1);
+  }
   Isis::Gui::checkX11();
 
   // Add the Qt plugin directory to the library path
diff --git a/isis/src/qisis/apps/qview/qview.xml b/isis/src/qisis/apps/qview/qview.xml
index 535a410b75762fa39694a31863a639cb60147b6f..3e7cd5c56aad197ab2db793dbcadddae4a54d50b 100644
--- a/isis/src/qisis/apps/qview/qview.xml
+++ b/isis/src/qisis/apps/qview/qview.xml
@@ -6,7 +6,103 @@
   </brief>
 
   <description>
-    This program will display cubes and allow for interactive analysis.
+    <p>
+      This program will display cubes and allow for interactive analysis. Although the program 
+      comprises a number of individual tools to perform analysis on your data, only the Spatial 
+      Plot Tool is discussed here until further notice.  
+    </p>
+    <h3>Spatial Plot Tool</h3>
+    <p>
+      This tool is used for analyzing manually selected pixel DN values. It works with two 
+      different modes: linear and rotated rectangle. It is also capable of handling three different 
+      modes of interpolation: Nearest Neighbor, BiLinear and Cubic Convolution. 
+    </p>
+    <h4>Linear</h4>
+    <p>
+      This mode involves drawing a 
+      line across an open cube. The selection is started by clicking and holding the mouse where 
+      you would like to start your calculations, at which point you may drag the mouse in any 
+      direction and release the click to establish the end of your selection.
+    </p>
+    <p>
+      The tool calculates the length of the line in pixels, rounding to the nearest full pixel 
+      value. It then divides the actual length of the line by this rounded length to achieve a 
+      step-size. <strong>Please note:</strong> This step size may be slightly bigger or smaller 
+      than a pixel length, but this difference becomes negligible for larger selections. For 
+      example, if the length of the drawn line was 2.91 pixels, the tool would round the length to 
+      3 and the step-size would be 2.91/3 (or 0.97).
+    </p>
+    <p>
+      A plot window will be generated with the calculated DN values of the pixels. The first value 
+      to be calculated is the value where the original mouse click was made. At each increment, 
+      according to step size, the tool calculates the value along the line until it reaches where the 
+      mouse-click was released. This means that for a line with a rounded length of 3, the plot would show a 
+      total of 4 plotted DN values. <strong>Please note:</strong> For a line with a rounded length of 
+      <i>n</i>, the tool will calculate <i>n</i> + 1 values.
+    </p>
+    <image src="assets/image/LinearSelection.png" height="400" />
+    <image src="assets/image/LinearPlot.png" height="400" />
+    <p>
+      The images above include an example of the line as drawn in the cube view and the 
+      associated plot window. Marking has been added to delineate where mouse clicks were made and 
+      the DN values were calculated. The mouse was first clicked at dileneation marked "1" on the 
+      cube, and was released at "4". The number from the cube view correlates with the "Pixel 
+      Number" on the plot.
+      
+    </p>
+    <h4>Rotated Rectangle</h4>
+    <p>
+      This mode of the Spatial Plot Tool involves drawing a 
+      rectangle across an open cube. The selection starts by clicking and holding the mouse 
+      where you would like to start your calculations, at which point you may drag the mouse in any 
+      direction and release the click to establish one edge of your selection. You may then 
+      drag the mouse away from this original line to expand in the other direction. A single mouse 
+      click establishes your final selection. <strong>Please note:</strong> The tool will lock 
+      angles to be perpendicular and so your selections will always be a perfect rectangle.
+    </p>
+
+    <p>
+      Similar to the linear mode of this tool, the lengths of the lines in pixels are rounded to the 
+      nearest full pixel value, and then the lengths are divided by their rounded lengths to establish 
+      a step-size. <strong>Please note:</strong>
+      The step-size along one edge of the selection may differ from the step-size of the 
+      perpendicular edge, this becomes negligible for larger selections. For 
+      example, if the length of the line in one direction was 2.91 pixels, the step-size would be 2.91/3 
+      (or 0.97), whereas if the length of the line in the perpendicular direction was 4.92, the step 
+      size would be 4.92/5 (0.98).
+    </p>
+    <p>
+      A plot window will be generated with the calculated DN values. This is done by calculating the 
+      value where the original mouse click was made, then continuing in the direction of that 
+      first-drawn line, calculating the DN value at each step-sized increment until it reaches where 
+      the original mouse-click was released. The tool will then calculate the average of these 
+      values. This average becomes the first value in the plot.
+    </p>
+    <p>
+      The tool will then shift a step-size along the perpendicular edge, and calculate the average DN 
+      value along a line running parallel to the first-drawn line. This average becomes the second 
+      value in the plot. The tool continues this pattern until it has reached the opposite edge of 
+      the rectangle as the first-drawn line.
+    </p>
+    <image src="assets/image/RRSelection.png" height="400" />
+    <image src="assets/image/RRSelectionMarked.png" height="400" />
+    <image src="assets/image/RRPlot.png" height="400" />
+    <p>
+      The first image is the original selection. The second image 
+      is the same view that has been marked for reference purposes. Finally, the last image 
+      is the associated plot window. The original mouse click was made at delineation 
+      "1" within the cube view, the original mouse release was made at "5", and the final 
+      mouse click was made at "15". The Spatial Plot Tool calculates the average of the DN values at 
+      delineations 1-5, and this value is stored as "Pixel Value" 1 in the plot window, while the 
+      averages of 6-10 are stored in 2, and 7-15 are stored in 3. 
+    </p>
+    <h4>Interpolations</h4>
+    <p>
+      Spatial Plot Tool makes use of Nearest Nieghbor, BiLinear and Cubic Convolution interpolations 
+      when calculating the DN values at particular points. <strong>Do be aware that when the tool is 
+      calculating a DN value at a particular point, it is calculating the interpolated DN value at 
+      that point.</strong>
+    </p>
   </description>
 
   <category>
@@ -164,5 +260,8 @@
       Readded help menu for the 2D and 3D plot tools. Now properly display in both tools.
       Fixes #2126.
     </change>
+    <change name="Summer Stapleton" date="2018-03-14">
+      Included documentation for Spatial Plot Tool in this .xml. References #5281.
+    </change>
   </history>
 </application>
diff --git a/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.cpp b/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.cpp
index 40533b453fb96da9ed11b19ffce3cba5c377ef38..cf64f2908f3018f85dd986a477726ddd6dc0403a 100644
--- a/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.cpp
+++ b/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.cpp
@@ -24,10 +24,14 @@
 
 #include <QAction>
 #include <QDebug>
+#include <QDesktopWidget>
 #include <QDragEnterEvent>
 #include <QDragMoveEvent>
 #include <QDropEvent>
 #include <QList>
+#include <QMainWindow>
+#include <QRect>
+#include <QSizePolicy>
 #include <QWidget>
 
 #include "ProjectItem.h"
@@ -39,14 +43,37 @@ namespace Isis {
   /**
    * Constructs the AbstractProjectItemView.
    *
-   * @param[in] parent (QWidget *) The parent widget
+   * @param[in] parent (QMainWindow *) The parent widget
    */
-  AbstractProjectItemView::AbstractProjectItemView(QWidget *parent) : QWidget(parent) {
+  AbstractProjectItemView::AbstractProjectItemView(QWidget *parent) : QMainWindow(parent) {
+
+    setWindowFlags(Qt::Widget);
+
+    QSizePolicy policy = sizePolicy();
+    policy.setHorizontalPolicy(QSizePolicy::Expanding);
+    policy.setVerticalPolicy(QSizePolicy::Expanding);
+    setSizePolicy(policy);
+
     m_internalModel = new ProjectItemProxyModel(this);
     setAcceptDrops(true);
   }
 
 
+  /**
+   * Returns the suggested size
+   *
+   * @return @b QSize The size hint
+   */
+  QSize AbstractProjectItemView::sizeHint() const {
+
+    //  Size hint is made large as a hack to have the views fill the available dock
+    //  space. SizePolicy alone did not work.
+    QDesktopWidget deskTop;
+    QRect availableSpace = deskTop.availableGeometry(deskTop.primaryScreen());
+    return QSize( .89 * availableSpace.width(), .5 * availableSpace.height() );
+  }
+
+
   /**
    * Sets the model used by the view. If the internal model is a proxy
    * model, it sets the source model.
@@ -54,7 +81,7 @@ namespace Isis {
    * @param[in] model (ProjectItemModel *) The new model
    */
   void AbstractProjectItemView::setModel(ProjectItemModel *model) {
-    if (ProjectItemProxyModel *proxyModel = 
+    if (ProjectItemProxyModel *proxyModel =
         qobject_cast<ProjectItemProxyModel *>( internalModel() ) ) {
       proxyModel->setSourceModel(model);
     }
@@ -68,7 +95,7 @@ namespace Isis {
    * @return @b ProjectItemModel * The model.
    */
   ProjectItemModel *AbstractProjectItemView::model() {
-    if (ProjectItemProxyModel *proxyModel = 
+    if (ProjectItemProxyModel *proxyModel =
         qobject_cast<ProjectItemProxyModel *>( internalModel() ) ) {
       return proxyModel->sourceModel();
     }
@@ -126,7 +153,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Drops the data into the internal model if it can accept the data.
    *
@@ -142,110 +169,74 @@ namespace Isis {
     }
   }
 
-  
-  /**
-   * Returns a list of actions appropriate for the permanent tool bar.
-   *
-   * @return @b QList<QAction *> The actions
-   */
-  QList<QAction *> AbstractProjectItemView::permToolBarActions() {
-    return QList<QAction *>();
-  }
 
+  void AbstractProjectItemView::moveEvent(QMoveEvent *event) {
+    QMainWindow::moveEvent(event);
 
-  /**
-   * Returns a list of actions appropriate for the active tool bar.
-   *
-   * @return @b QList<QAction *> The actions
-   */
-  QList<QAction *> AbstractProjectItemView::activeToolBarActions() {
-    return QList<QAction *>();
+    emit windowChangeEvent(false);
   }
 
 
-  /**
-   * Returns a list of actions appropriate for the tool pad.
-   *
-   * @return @b QList<QAction *> The actions
-   */
-  QList<QAction *> AbstractProjectItemView::toolPadActions() {
-    return QList<QAction *>();
-  }
-
+  void AbstractProjectItemView::resizeEvent(QResizeEvent *event) {
+    QMainWindow::resizeEvent(event);
 
-  /**
-   * Returns a list of actions appropriate for a context menu.
-   *
-   * @return @b QList<QAction *> The actions
-   */
-  QList<QAction *> AbstractProjectItemView::contextMenuActions() {
-    return QList<QAction *>();
+    emit windowChangeEvent(false);
   }
 
 
   /**
-   * Returns a list of actions appropriate for a file menu.
+   * Enables actions when cursor enters the view
    *
-   * @return @b QList<QAction *> The actions
+   * @param event The enter event
    */
-  QList<QAction *> AbstractProjectItemView::fileMenuActions() {
-    return QList<QAction *>();
+  void AbstractProjectItemView::enterEvent(QEvent *event) {
+    enableActions();
   }
 
 
   /**
-   * Returns a list of actions appropriate for a project menu.
+   * Disables actions when cursor leaves the view.
    *
-   * @return @b QList<QAction *> The actions
+   * @param event The leave event
    */
-  QList<QAction *> AbstractProjectItemView::projectMenuActions() {
-    return QList<QAction *>();
+  void AbstractProjectItemView::leaveEvent(QEvent *event) {
+    disableActions();
   }
 
 
   /**
-   * Returns a list of actions appropriate for an edit menu.
-   *
-   * @return @b QList<QAction *> The actions
+   * Disables toolbars and toolpad actions
    */
-  QList<QAction *> AbstractProjectItemView::editMenuActions() {
-    return QList<QAction *>();
+  void AbstractProjectItemView::disableActions() {
+    foreach (QAction *action, actions()) {
+      action->setDisabled(true);
+    }
   }
 
 
   /**
-   * Returns a list of actions appropriate for a view menu.
-   *
-   * @return @b QList<QAction *> The actions
-   */
-  QList<QAction *> AbstractProjectItemView::viewMenuActions() {
-    return QList<QAction *>();
-  }
-
-  
-  /**
-   * Returns a list of actions appropriate for a settings menu.
-   *
-   * @return @b QList<QAction *> The actions
+   * Enables toolbars and toolpad actions
    */
-  QList<QAction *> AbstractProjectItemView::settingsMenuActions() {
-    return QList<QAction *>();
+  void AbstractProjectItemView::enableActions() {
+    foreach (QAction *action, actions()) {
+      action->setEnabled(true);
+    }
   }
 
 
   /**
-   * Returns a list of actions appropriate for a help menu.
+   * Returns a list of actions appropriate for a context menu.
    *
    * @return @b QList<QAction *> The actions
    */
-  QList<QAction *> AbstractProjectItemView::helpMenuActions() {
+  QList<QAction *> AbstractProjectItemView::contextMenuActions() {
     return QList<QAction *>();
   }
 
-  
+
   /**
    * Returns the current item of the model.
-   * 
+   *
    * @return @b ProjectItem * The item
    */
   ProjectItem *AbstractProjectItemView::currentItem() {
@@ -262,17 +253,16 @@ namespace Isis {
     return model()->selectedItems();
   }
 
-  
+
   /**
    * Adds an item to the view. The item must be part of the view's
-   * model. This method can be overriden in a subclass to filter out
+   * model. This method can be overridden in a subclass to filter out
    * unneeded items.
    *
    * @param[in] item (ProjectItem *) The item to add.
    */
   void AbstractProjectItemView::addItem(ProjectItem *item) {
-        if (ProjectItemProxyModel *proxyModel =
-        qobject_cast<ProjectItemProxyModel *>( internalModel() ) ) {
+    if (ProjectItemProxyModel *proxyModel = qobject_cast<ProjectItemProxyModel *>( internalModel() )) {
       proxyModel->addItem(item);
     }
   }
@@ -280,13 +270,14 @@ namespace Isis {
 
   /**
    * Adds several items to the view. The items must be a part of the
-   * view's model.
+   * view's model. This method can be overridden in a subclass to filter out
+   * unneeded items.
    *
    * @param[in] items (QList<ProjectItem *>) The items to add.
    */
   void AbstractProjectItemView::addItems(QList<ProjectItem *> items) {
-    foreach (ProjectItem *item, items) {
-      addItem(item);
+    if (ProjectItemProxyModel *proxyModel = qobject_cast<ProjectItemProxyModel *>( internalModel() )) {
+      proxyModel->addItems(items);
     }
   }
 
@@ -299,9 +290,8 @@ namespace Isis {
    * @param[in] item (ProjectItem *) The item to remove.
    */
   void AbstractProjectItemView::removeItem(ProjectItem *item) {
-    if (ProjectItemProxyModel *proxyModel = 
+    if (ProjectItemProxyModel *proxyModel =
             qobject_cast<ProjectItemProxyModel *>( internalModel() ) ) {
-//    qDebug()<<"AbstractProjectItemView::removeItem";
       proxyModel->removeItem(item);
     }
   }
diff --git a/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.h b/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.h
index 1ca80d5b3172fe37e8ff8107602d74be3308a5c3..99d0ead6aa4ccebeb4bd64434007ce771da9af81 100644
--- a/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.h
+++ b/isis/src/qisis/objs/AbstractProjectItemView/AbstractProjectItemView.h
@@ -23,16 +23,18 @@
  *   http://www.usgs.gov/privacy.html.
  */
 
-#include <QWidget>
+#include <QMainWindow>
 
 class QAction;
 class QDragEnterEvent;
+class QWidget;
 template <typename T> class QList;
 
 namespace Isis {
 
   class ProjectItem;
   class ProjectItemModel;
+
   /**
    * AbstractProjectItemView is a base class for views of a
    * ProjectItemModel in Qt's model-view
@@ -42,11 +44,6 @@ namespace Isis {
    * ProjectItemProxyModel that represents the items appropriately for
    * the view.
    *
-   * An AbstractProjectItemView may provide QActions for manipulating
-   * the view. These actions can be accessed in different contexts
-   * through toolBarActions(), menuActions(), and
-   * contextMenuActions().
-   *
    * When mime data is dropped on a view the view adds the selected
    * items from the source model to the view.
    *
@@ -55,45 +52,78 @@ namespace Isis {
    * @author 2015-10-21 Jeffrey Covington
    * @internal
    *   @history 2015-10-21 Jeffrey Covington - Original version.
-   *   @history 2016-06-27 Ian Humphrey - Minor updates to documentation and coding standards. 
+   *   @history 2016-06-27 Ian Humphrey - Minor updates to documentation and coding standards.
    *                           Fixes #4004.
    *   @history 2016-07-28 Tracie Sucharski - Implemented removeItem and removeItems methods.
    *   @history 2016-08-25 Adam Paquette - Minor updates to documentation.
    *                           Fixes #4299.
+   *   @history 2018-05-29 Tracie Sucharski & Summer Stapleton - updated to inherit from QMainWindow
+   *                           instead of QWidget. This updates all views in the ipce main window
+   *                           to be main windows themselves, changing from an mdi interface to an
+   *                           sdi interface.
+   *   @history 2018-05-30 Tracie Sucharski - Added the WindowFlag to set this as a Widget.
+   *   @history 2018-06-15 Kaitlyn Lee - Removed methods returing toolbar and menu actions because
+   *                            each individual has its own toolbar. These methods are not needed
+   *                            anymore.
+   *   @history 2018-06-18 Summer Stapleton - Overloaded moveEvent and resizeEvent and added a
+   *                           windowChangeEvent signal to allow project to recognize a new save
+   *                           state. Fixes #5114
+   *   @history 2018-06-25 Kaitlyn Lee - When multiple views are open, there is a possibility of
+   *                           getting ambiguous shortcut errors. To counter this, we need a way to
+   *                           focus on one widget. Giving the views focus did not work completely.
+   *                           Instead, enabling/disabling actions was the best option. Added
+   *                           enableActions(), disableActions(), enterEvent(), and leaveEvent(). On
+   *                           default, a view's actions are disabled. To enable the actions, move
+   *                           the cursor over the view. When a user moves the cursor outside of the
+   *                           view, the actions are disabled.
+   *   @history 2018-07-05 Tracie Sucharski - Added SizePolicy and a large sizeHint.  The large
+   *                           sizeHint() is because using sizePolicy with a reasonable sizeHint did
+   *                           not work to have views fill the available space in the dock area.
+   *                           References #5433.
+   *   @history 2018-07-12 Kaitlyn Lee - Changed the sizeHint to be calculated based on the deskTop
+   *                           size, instead of being hard-coded. The percentages chosen allow for 2
+   *                           CubeDnViews to be opened at once, since CubeDnView has an internal
+   *                           size policy. References #5433
+   *   @history 2018-07-26 Tracie Sucharski - Cleaned up some documentation.
+   *   @history 2018-08-10 Tracie Sucharski - Changed addItems method to call the
+   *                           ProjectItemProxyModel::addItems rather than this classes addItem.
+   *                           This speeds things up considerably loading items into the model.
+   *                           References #5296.
    */
-  class AbstractProjectItemView : public QWidget {
+  class AbstractProjectItemView : public QMainWindow {
 
     Q_OBJECT
 
     public:
       AbstractProjectItemView(QWidget *parent=0);
 
+      virtual QSize sizeHint() const;
+
       virtual void setModel(ProjectItemModel *model);
       virtual ProjectItemModel *model();
-      
+
       virtual void dragEnterEvent(QDragEnterEvent *event);
       virtual void dragMoveEvent(QDragMoveEvent *event);
       virtual void dropEvent(QDropEvent *event);
 
-      virtual QList<QAction *> permToolBarActions();
-      virtual QList<QAction *> activeToolBarActions();
-      virtual QList<QAction *> toolPadActions();
- 
+      virtual void moveEvent(QMoveEvent *event);
+      virtual void resizeEvent(QResizeEvent *event);
+
+      virtual void enterEvent(QEvent *event);
+      virtual void leaveEvent(QEvent *event);
+      virtual void enableActions();
+
       virtual QList<QAction *> contextMenuActions();
 
-      virtual QList<QAction *> fileMenuActions();
-      virtual QList<QAction *> projectMenuActions();
-      virtual QList<QAction *> editMenuActions();
-      virtual QList<QAction *> viewMenuActions();
-      virtual QList<QAction *> settingsMenuActions();
-      virtual QList<QAction *> helpMenuActions();
-      
       virtual ProjectItem *currentItem();
       virtual QList<ProjectItem *> selectedItems();
 
       virtual ProjectItemModel *internalModel();
       virtual void setInternalModel(ProjectItemModel *model);
 
+    signals:
+      void windowChangeEvent(bool event);
+
     public slots:
       virtual void addItem(ProjectItem *item);
       virtual void addItems(QList<ProjectItem *> items);
@@ -101,10 +131,11 @@ namespace Isis {
       virtual void removeItem(ProjectItem *item);
       virtual void removeItems(QList<ProjectItem *> items);
 
+      virtual void disableActions();
+
     private:
       ProjectItemModel *m_internalModel; //!< The internal model used by the view
   };
-
 }
 
 #endif
diff --git a/isis/src/qisis/objs/AbstractProjectItemView/ProjectItemViewMenu.cpp b/isis/src/qisis/objs/AbstractProjectItemView/ProjectItemViewMenu.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..73e7d5bcd8080d51a9f12a569f8eead6e526a9da
--- /dev/null
+++ b/isis/src/qisis/objs/AbstractProjectItemView/ProjectItemViewMenu.cpp
@@ -0,0 +1,37 @@
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "ProjectItemViewMenu.h"
+
+namespace Isis {
+
+
+  /**
+   * Overrides the closeEvent to emit the signal menuClosed().
+   * menuClosed() is connected to the slot disableActions() in a view.
+   *
+   * @param event The close event
+   */
+  void ProjectItemViewMenu::closeEvent(QCloseEvent *event) {
+    emit menuClosed();
+  }
+}
diff --git a/isis/src/qisis/objs/AbstractProjectItemView/ProjectItemViewMenu.h b/isis/src/qisis/objs/AbstractProjectItemView/ProjectItemViewMenu.h
new file mode 100644
index 0000000000000000000000000000000000000000..50b7979b8f57e015160455b9953bfe4cb2cf3df4
--- /dev/null
+++ b/isis/src/qisis/objs/AbstractProjectItemView/ProjectItemViewMenu.h
@@ -0,0 +1,54 @@
+#ifndef ProjectItemViewMenu_h
+#define ProjectItemViewMenu_h
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include <QMenu>
+
+namespace Isis {
+
+  /**
+   * QMenu subclass that overrides the closeEvent. Used in views to disable
+   * actions when a menu is visible and a user clicks outside of a view.
+   *
+   * @author 2018-06-27 Kaitlyn Lee
+   *
+   * @internal
+   *   @history 2018-06-27 Kaitlyn Lee - Original version.
+   */
+
+  class ProjectItemViewMenu : public QMenu {
+    Q_OBJECT
+
+    public:
+      ProjectItemViewMenu(const QString &title, QWidget *parent = 0) : QMenu(title, parent){};
+
+    signals:
+      void menuClosed();
+
+    private:
+      void closeEvent(QCloseEvent *event);
+  };
+}
+
+#endif
diff --git a/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.cpp b/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.cpp
index 1621d71a3f8a3bfabd2a8d3319f77ed48c2cb09c..d9cac11239d284a3d0cb6dc80ea1fee1573fc958 100644
--- a/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.cpp
+++ b/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.cpp
@@ -29,12 +29,12 @@
 #include "TableMainWindow.h"
 #include "Target.h"
 #include "TProjection.h"
+#include "TrackingTable.h"
 
 namespace Isis {
 
   // For mosaic tracking
 #define FLOAT_MIN         -16777215
-#define TABLE_MOSAIC_SRC  "InputImages"
 
   /**
    * Constructs an AdvancedTrackTool object
@@ -306,7 +306,9 @@ namespace Isis {
     QString fnameName = fname.name();
     p_tableWin->table()->item(row, PATH)->setText(fnamePath);
     p_tableWin->table()->item(row, FILENAME)->setText(fnameName);
-    //p_tableWin->table()->item(row,34)->setText(SerialNumber::Compose(*cvp->cube()).c_str());
+    if (!cvp->cube()->hasGroup("Tracking") && !cvp->cube()->hasTable("InputImages")){
+      p_tableWin->table()->item(row, SERIAL_NUMBER)->setText(SerialNumber::Compose(*cvp->cube()));
+    }
 
     // If we are outside of the image then we are done
     if((sample < 0.5) || (line < 0.5) ||
@@ -535,14 +537,17 @@ namespace Isis {
     }
 
     // Track the Mosaic Origin -  Index (Zero based) and FileName
-    int iMosaicOrigin = -1;
-    QString sSrcFileName = "";
-    QString sSrcSerialNum = "";
-    TrackMosaicOrigin(cvp, iline, isample, iMosaicOrigin, sSrcFileName, sSrcSerialNum);
-    p_tableWin->table()->item(row, TRACK_MOSAIC_INDEX)->setText(QString::number(iMosaicOrigin));
-    p_tableWin->table()->item(row, TRACK_MOSAIC_FILENAME)->setText(QString(sSrcFileName));
-    p_tableWin->table()->item(row, TRACK_MOSAIC_SERIAL_NUM)->
-                         setText(QString(sSrcSerialNum));
+    if (cvp->cube()->hasTable("InputImages") || cvp->cube()->hasGroup("Tracking")) {
+      int iMosaicOrigin = -1;
+      QString sSrcFileName = "";
+      QString sSrcSerialNum = "";
+      TrackMosaicOrigin(cvp, iline, isample, iMosaicOrigin, sSrcFileName, sSrcSerialNum);
+      p_tableWin->table()->item(row, TRACK_MOSAIC_INDEX)->setText(QString::number(iMosaicOrigin));
+      p_tableWin->table()->item(row, TRACK_MOSAIC_FILENAME)->setText(QString(sSrcFileName));
+      p_tableWin->table()->item(row, TRACK_MOSAIC_SERIAL_NUM)->
+                           setText(QString(sSrcSerialNum));
+    }
+    
   }
 
 
@@ -569,7 +574,36 @@ namespace Isis {
         Cube *cCube = cvp->cube();
         int iTrackBand = -1;
 
-        if(cCube->hasTable(TABLE_MOSAIC_SRC)) {
+        // This is a mosaic in the new format or the external tracking cube itself
+        if(cCube->hasGroup("Tracking") || 
+                (cCube->hasTable(trackingTableName) && cCube->bandCount() == 1)) {
+          Cube *trackingCube;
+          if(cCube->hasGroup("Tracking")) {
+            trackingCube = cvp->trackingCube();
+          }
+          else {
+            trackingCube = cCube;
+          }
+          
+          // Read the cube DN value from TRACKING cube at location (piLine, piSample)
+          Portal trackingPortal(trackingCube->sampleCount(), 1, trackingCube->pixelType());
+          trackingPortal.SetPosition(piSample, piLine, 1);
+          trackingCube->read(trackingPortal);
+
+          unsigned int currentPixel = trackingPortal[0];
+          if (currentPixel != NULLUI4) {  // If from an image
+            Table table(trackingTableName); // trackingTableName from TrackingTable
+            trackingCube->read(table);
+            TrackingTable trackingTable(table);
+
+            FileName trackingFileName = trackingTable.pixelToFileName(currentPixel);
+            psSrcFileName = trackingFileName.name();
+            psSrcSerialNum = trackingTable.pixelToSN(currentPixel);
+            piOrigin = trackingTable.fileNameToIndex(trackingFileName, psSrcSerialNum);
+          }
+        }
+        // Backwards compatability. Have this tool work with attached TRACKING bands
+        else if(cCube->hasTable(trackingTableName)) {
           Pvl *cPvl = cCube->label();
           PvlObject cObjIsisCube = cPvl->findObject("IsisCube");
           PvlGroup cGrpBandBin = cObjIsisCube.findGroup("BandBin");
@@ -604,7 +638,7 @@ namespace Isis {
             }
 
             // Get the input file name and serial number
-            Table cFileTable(TABLE_MOSAIC_SRC);
+            Table cFileTable(trackingTableName);
             cCube->read(cFileTable);
             int iRecs =   cFileTable.Records();
             if(piOrigin >= 0 && piOrigin < iRecs) {
@@ -612,6 +646,11 @@ namespace Isis {
               psSrcSerialNum = QString(cFileTable[piOrigin][1]);
             }
           }
+        } 
+        
+        if (piOrigin == -1) { // If not from an image, display N/A
+          psSrcFileName = "N/A";
+          psSrcSerialNum = "N/A";
         }
       }
       catch (IException &e) {
diff --git a/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.h b/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.h
index a684ad8481ae034424cef33c9468806830ec82b6..9830e958fe1378b51f48b99be4f9ec2fee2ab101 100644
--- a/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.h
+++ b/isis/src/qisis/objs/AdvancedTrackTool/AdvancedTrackTool.h
@@ -28,6 +28,7 @@
 class QAction;
 
 namespace Isis {
+
   class TableMainWindow;
   class MdiCubeViewport;
 
@@ -82,6 +83,16 @@ namespace Isis {
    *                          before it attempts to record a point so that a table is created
    *                          to record the point into so that the first recorded point is drawn.
    *                          Fixes #5143.
+   *  @history 2018-07-18 Kristin Berry and Kaitlyn Lee - Updated TrackMosaicOrigin to work with
+   *                          an external tracking cube.
+   *  @history 2018-07-31 Kaitlyn Lee - Updated TrackMosaicOrigin to use a TrackingTable object
+   *                          to get the file name, serial number, and index of the image associated
+   *                          with the current pixel. Moved code opening the tracking cube to
+   *                          CubeViewport. If the cursor is over a pixel with no tracking info,
+   *                          file name and serial number display N/A now.
+   *  @history 2018-08-13 Summer Stapleton - Added logic to trackingMosaicOrigin() for the tracking
+   *                          cube (in addition to the mosaic cube) and added logic to track the
+   *                          serial number of all other cubes. Fixes #4899
    */
   class AdvancedTrackTool : public Tool {
       Q_OBJECT
@@ -179,11 +190,9 @@ namespace Isis {
       QAction *p_action;                   //!< Action to bring up the track tool
       int p_numRows;                       //!< The number of rows in the table
       int p_id;                            //!< The record id
-      TableMainWindow *p_tableWin;  //!< The table window
+      TableMainWindow *p_tableWin;         //!< The table window
       bool m_showHelpOnStart;              //!< True to show dialog When tool is started
-
   };
-
 };
 
 #endif
diff --git a/isis/src/qisis/objs/BundleObservationView/AS15_16_test_bundleout_images.csv b/isis/src/qisis/objs/BundleObservationView/AS15_16_test_bundleout_images.csv
deleted file mode 100755
index d80600ac85f6d629ea8ecb138613fbb977055f1c..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/BundleObservationView/AS15_16_test_bundleout_images.csv
+++ /dev/null
@@ -1,8 +0,0 @@
-Image,rms,rms,rms,X,X,X,X,X,Y,Y,Y,Y,Y,Z,Z,Z,Z,Z,RA,RA,RA,RA,RA,DEC,DEC,DEC,DEC,DEC,TWIST,TWIST,TWIST,TWIST,TWIST,
-Filename,sample res,line res,total res,Initial,Correction,Final,Apriori Sigma,Adj Sigma,Initial,Correction,Final,Apriori Sigma,Adj Sigma,Initial,Correction,Final,Apriori Sigma,Adj Sigma,Initial,Correction,Final,Apriori Sigma,Adj Sigma,Initial,Correction,Final,Apriori Sigma,Adj Sigma,Initial,Correction,Final,Apriori Sigma,Adj Sigma,
-/work/projects/ApolloMetric/METRIC/Calibrated/AS15/SUB4_MSK_InstrumentStartTime/Sub4-AS15-M-1757_msk.cub,0.51845694436147,0.97524424269876,0.78099261714619,-1676.1866244276,0.3170026774516,-1675.8696217502,500.0,0.1690797492717,776.01842700262,0.18308214004334,776.20150914267,500.0,0.17709880748748,190.83692567603,0.67934738703117,191.51627306306,500.0,0.16934724936719,-114.81847479623,0.14786430851052,-114.67061048772,0.5,0.097887257746279,84.286744189607,0.14301001677591,84.429754206383,0.5,0.085518977881851,135.10580640169,-0.073755435116957,135.03205096657,0.5,0.10209077775713
-/work/projects/ApolloMetric/METRIC/Calibrated/AS15/SUB4_MSK_InstrumentStartTime/Sub4-AS15-M-1758_msk.cub,0.48914157340128,0.96409831563102,0.76444262081337,-1661.0556247296,0.24305052799097,-1660.8125742016,500.0,0.17883341616719,800.60462193458,0.26766384701447,800.87228578159,500.0,0.17894270116668,219.62524418461,0.81713498430798,220.44237916892,500.0,0.17548613324839,-115.68927691479,0.15112876410579,-115.53814815068,0.5,0.097663328471951,83.287864615961,0.14571379590631,83.433578411867,0.5,0.085317156538059,135.24236174012,-0.081063071500818,135.16129866862,0.5,0.10243445718908
-/work/projects/ApolloMetric/METRIC/Calibrated/AS15/SUB4_MSK_InstrumentStartTime/Sub4-AS15-M-1759_msk.cub,0.3234786200299,1.0445725353158,0.77323030177063,-1645.118297281,0.18547301310201,-1644.9328242679,500.0,0.20684835804294,824.80203432912,0.37787280348465,825.17990713261,500.0,0.20520137756462,248.30682152756,0.97427898916589,249.28110051673,500.0,0.20458947672359,-116.55201321842,0.1414520464547,-116.41056117197,0.5,0.097506040940435,82.310079123292,0.14270993562181,82.452789058913,0.5,0.085163168400858,135.38610126297,-0.069324655588454,135.31677660738,0.5,0.10281378780214
-/work/projects/ApolloMetric/METRIC/Calibrated/AS16/SUB4_MSK_NewStartTime/Sub4-AS16-M-0392_msk.cub,0.49188485000562,1.1397636203373,0.8777846592159,1747.0424536016,-0.25503937331921,1746.7874142282,500.0,0.18429641470036,633.3492820035,0.49395906374671,633.84324106725,500.0,0.1830184566499,81.070798243394,-0.49125912498146,80.579539118413,500.0,0.19512758266095,110.34149860419,0.3735945369789,110.71509314116,0.5,0.088850090823099,87.09334362033,-0.10691005392567,86.986433566404,0.5,0.094783462079425,-149.90233460871,-0.036238357509029,-149.93857296621,0.5,0.10327678221121
-/work/projects/ApolloMetric/METRIC/Calibrated/AS16/SUB4_MSK_NewStartTime/Sub4-AS16-M-0393_msk.cub,0.745496019873,1.1426404871033,0.96472576373138,1760.2742054268,-0.034511936246684,1760.2396934906,500.0,0.17301063061067,597.66419620361,0.45091683878255,598.11511304239,500.0,0.1749682885975,58.98892575481,-0.51847411988065,58.47045163493,500.0,0.17712241769798,109.18883286426,0.37607709864275,109.56490996291,0.5,0.088840587895256,87.796840611543,-0.09134753252743,87.705493079016,0.5,0.094319465492397,-149.84701529934,-0.033154227141492,-149.88016952649,0.5,0.10364410342365
-/work/projects/ApolloMetric/METRIC/Calibrated/AS16/SUB4_MSK_NewStartTime/Sub4-AS16-M-0394_msk.cub,0.57994567220543,1.0445737373178,0.84482876235478,1772.5152690217,0.19274695792245,1772.7080159796,500.0,0.18900862793942,561.64149498279,0.39235269508021,562.03384767787,500.0,0.19507829017625,36.873141324453,-0.50650471222111,36.366636612232,500.0,0.18962962942032,108.01512683489,0.38747308139741,108.40259991629,0.5,0.088957785858698,88.534523650897,-0.1083766713918,88.426146979505,0.5,0.093815486035816,-149.80439189401,-0.018129130140166,-149.82252102415,0.5,0.10404865355201
diff --git a/isis/src/qisis/objs/BundleObservationView/BundleObservationView.cpp b/isis/src/qisis/objs/BundleObservationView/BundleObservationView.cpp
index cb3f0ec51c019781e501cd158d288526905bcb15..ebbd350b2377d8c377f0e5e11f57c9da3c819f52 100755
--- a/isis/src/qisis/objs/BundleObservationView/BundleObservationView.cpp
+++ b/isis/src/qisis/objs/BundleObservationView/BundleObservationView.cpp
@@ -23,6 +23,7 @@
 
 #include <QDebug>
 #include <QFile>
+#include <QFontDatabase>
 #include <QHeaderView>
 #include <QSizePolicy>
 #include <QStandardItem>
@@ -30,92 +31,184 @@
 #include <QString>
 #include <QStringList>
 #include <QTableView>
+#include <QTextEdit>
 #include <QTextStream>
 #include <QVBoxLayout>
 
 
-
 namespace Isis {
 
-
-
-  /** 
-   * Creates a view showing the CSV file from BundleObservation. 
-   * 
-   * @param FileItemQsp fileItem  QSharedPointer to the fileItem from the ProjectItemModel
+  /**
+   * Creates a view showing the CSV or text files from BundleSolutionInfo.
+   *
+   * @param FileItemQsp fileItem QSharedPointer to the fileItem from the ProjectItemModel
    */
   BundleObservationView::BundleObservationView(FileItemQsp fileItem, QWidget *parent):
                          AbstractProjectItemView(parent) {
 
+    if (fileItem->fileName().contains(".csv")) {
+      displayCsvFile(fileItem);
+    }
+    else if (fileItem->fileName().contains(".txt")) {
+      displayTextFile(fileItem);
+    }
+  }
+
+
+  /**
+   * Creates a view showing the CSV file from BundleSolutionInfo.
+   *
+   * @param FileItemQsp fileItem QSharedPointer to the fileItem from the ProjectItemModel
+   */
+  void BundleObservationView::displayCsvFile(FileItemQsp fileItem) {
     QStandardItemModel *model = new QStandardItemModel;
+
+    if (!QFile::exists(fileItem->fileName())) {
+      return;
+    }
+
     QFile file(fileItem->fileName());
+    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+      return;
+    }
 
-    if (file.open(QIODevice::ReadOnly)) {
+    int numHeaderLines = 3;
+    if (fileItem->fileName().contains("images")) {
+      numHeaderLines = 2;
+    }
 
-      int lineindex = 0;                     // file line counter
-      QTextStream in(&file);                 // read to text stream
+    QTextStream in(&file);                 // read to text stream
+
+    // read and populate header from first two or three lines
+    QString header1;
+    QString header2;
+    QString header3;
+    QStringList lineToken1;
+    QStringList lineToken2;
+    QStringList lineToken3;
+
+    header1 = in.readLine();
+    lineToken1 = header1.split(",");
+    header2 = in.readLine();
+    lineToken2 = header2.split(",");
+
+    if (numHeaderLines == 2) {
+      for (int i = 0; i < lineToken1.size(); i++) {
+        QString t1 = lineToken1.at(i);
+        QString t2 = lineToken2.at(i);
+        QString head = t1 + "\n" + t2;
+        QStandardItem *v1 = new QStandardItem(head);
+        model->setHorizontalHeaderItem(i,v1);
+      }
+    }
+    if (numHeaderLines == 3) {
+      header3 = in.readLine();
+      lineToken3 = header3.split(",");
+
+      lineToken1.append("");
+      lineToken2.append("");
+
+      for (int i = 0; i < lineToken3.size(); i++) {
+        QString t1 = lineToken1.at(i);
+        QString t2 = lineToken2.at(i);
+        QString t3 = lineToken3.at(i);
+        QString head = t1 + "\n" + t2 + "\n" + t3;
+        QStandardItem *v1 = new QStandardItem(head);
+        model->setHorizontalHeaderItem(i,v1);
+      }
+    }
 
-      while (!in.atEnd()) {
+    // populate remainder of table
+    int lineindex = 0;
+    while (!in.atEnd()) {
+      QString fileLine = in.readLine();
 
-        // read one line from textstream(separated by "\n")
-        QString fileLine = in.readLine();
+      // parse line into separate pieces(tokens) with "," as the delimiter
+      QStringList lineToken = fileLine.split(",", QString::SkipEmptyParts);
 
-        // parse the read line into separate pieces(tokens) with "," as the delimiter
-        QStringList lineToken = fileLine.split(",", QString::SkipEmptyParts);
+      bool rejected = false;
+      if (lineToken.at(lineToken.size()-1) == "*") {
+        rejected = true;
+      }
 
-        // load parsed data to model accordingly
-        for (int j = 0; j < lineToken.size(); j++) {
-          QString value = lineToken.at(j);
+      // load parsed data to model accordingly
+      for (int i = 0; i < lineToken.size(); i++) {
+        QString value = lineToken.at(i);
 
-          //  First 2 lines are header, load into model header data
-          if (lineindex < 2) {
-            //qDebug()<<"header = "<<value;
-            //model->setHeaderData(j, Qt::Horizontal, value);
-            //qDebug()<<"header = "<<value;
-            QStandardItem *v1 = new QStandardItem(value);
+        QStandardItem *item = new QStandardItem(value);
 
-            model->setHorizontalHeaderItem(j,v1);
-            //model->setHeaderData(j, Qt::Horizontal, value);
-          }
-          else {
-            QStandardItem *item = new QStandardItem(value);
-            model->setItem(lineindex, j, item);
-          }
+        if (rejected) {
+          item->setData(QColor(200,0,0), Qt::BackgroundRole);
         }
 
-        lineindex++;
+        model->setItem(lineindex, i, item);
       }
-
-      file.close();
+      lineindex++;
     }
 
+    file.close();
+
     QTableView *qtable=new QTableView();
     qtable->setModel(model);
     qtable->setSortingEnabled(true);
-    
-    QHeaderView *headerView = qtable->horizontalHeader();
-    headerView->setStretchLastSection(true);
 
-    QVBoxLayout *layout = new QVBoxLayout;
-    setLayout(layout);
-    layout->addWidget(qtable);
+    // resizes to contents based on entire column
+    // NOTE: QHeaderView::ResizeToContents does not allow user to resize by dragging column divider
+    qtable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+
+    setCentralWidget(qtable);
 
     QSizePolicy policy = sizePolicy();
     policy.setHorizontalPolicy(QSizePolicy::Expanding);
     policy.setVerticalPolicy(QSizePolicy::Expanding);
     setSizePolicy(policy);
-    }
+  }
 
 
   /**
-   * Destructor
+   * Creates a view showing a text file from BundleSolutionInfo.
+   *
+   * @param FileItemQsp fileItem QSharedPointer to the fileItem from the ProjectItemModel
    */
-  BundleObservationView::~BundleObservationView() {
+  void BundleObservationView::displayTextFile(FileItemQsp fileItem) {
 
-  }
+    if (!QFile::exists(fileItem->fileName())) {
+      return;
+    }
+
+    QFile file(fileItem->fileName());
+    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+      return;
+    }
 
+    QTextStream in(&file);
+    QTextEdit *qText=new QTextEdit();
 
-}
+    // From QFontDatabase::systemFont(SystemFont type) method description: returns most adequate
+    //      font for a given typecase (here FixedFont) for proper integration with system's look and
+    //      feel.
+    const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
+    qText->setFontFamily(fixedFont.family());
+
+    while (!in.atEnd()) {
+      qText->append(in.readLine());
+    }
+
+    file.close();
 
+    setCentralWidget(qText);
+    qText->moveCursor(QTextCursor::Start);
+
+    QSizePolicy policy = sizePolicy();
+    policy.setHorizontalPolicy(QSizePolicy::Expanding);
+    policy.setVerticalPolicy(QSizePolicy::Expanding);
+    setSizePolicy(policy);
+  }
 
 
+  /**
+   * Destructor
+   */
+  BundleObservationView::~BundleObservationView() {
+  }
+}
diff --git a/isis/src/qisis/objs/BundleObservationView/BundleObservationView.h b/isis/src/qisis/objs/BundleObservationView/BundleObservationView.h
index 2a5b0f267f3547bd0ab15a5b74aec5da23b43950..30cf4fd63e9699484714910980a58ccfe8e3db2f 100755
--- a/isis/src/qisis/objs/BundleObservationView/BundleObservationView.h
+++ b/isis/src/qisis/objs/BundleObservationView/BundleObservationView.h
@@ -22,7 +22,6 @@
  */
 
 #include "AbstractProjectItemView.h"
-
 #include "FileItem.h"
 
 namespace Isis{
@@ -36,8 +35,21 @@ namespace Isis{
    * @internal
    *   @history 2017-05-01 Tyler Wilson - Original version.
    *   @history 2017-05-05 Tracie Sucharski - Changed for the serialization of BundleObservation
-   *                           files.  This was implemented create a new ProjectItem type called
+   *                           files. This was implemented create a new ProjectItem type called
    *                           FileItemQsp. Fixes #4839, #4840.
+   *   @history 2018-03-21 Ken Edmundson - Added capability to display either csv or text files.
+   *                           Fixed problem for display of multi-line headers for csv files.
+   *                           Set SectionResizeMode to QHeaderView::ResizeToContents so columns are
+   *                           displayed at the width of the maximum size of the column content.
+   *                           Fixes #4850.
+   *   @history 2018-03-26 Ken Edmundson - Modified displayTextFile method to query for system's
+   *                           fixed width font.
+   *   @history 2018-04-16 Ken Edmundson - Modified display of residuals.csv to properly show the
+   *                           rejected column if there are rejected measures. Also displays
+   *                           rejected measure row in red.
+   *   @history 2018-06-06 Kaitlyn Lee - Set a central widget and removed layout (it is not needed
+   *                           after setting a central widget) because AbstractProjectItemView was
+   *                           updated to inherit from QMainWindow.
    */
 
   class BundleObservationView : public AbstractProjectItemView
@@ -45,8 +57,11 @@ namespace Isis{
     Q_OBJECT
     public:
       BundleObservationView(FileItemQsp fileItem, QWidget *parent=0);
-      //BundleObservationView(const BundleObservationView &other);
       ~BundleObservationView();
+
+    private:
+      void displayCsvFile(FileItemQsp fileItem);
+      void displayTextFile(FileItemQsp fileItem);
   };
 }
 #endif
diff --git a/isis/src/qisis/objs/CnetEditorView/CnetEditorView.cpp b/isis/src/qisis/objs/CnetEditorView/CnetEditorView.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..38e02045a56f26af3349bc8bf40f03b877c7079a
--- /dev/null
+++ b/isis/src/qisis/objs/CnetEditorView/CnetEditorView.cpp
@@ -0,0 +1,272 @@
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "IsisDebug.h"
+
+#include "CnetEditorView.h"
+
+#include <QAction>
+#include <QGridLayout>
+#include <QList>
+#include <QMap>
+#include <QMapIterator>
+#include <QMenu>
+#include <QMenuBar>
+#include <QSize>
+#include <QSizePolicy>
+#include <QString>
+#include <QTabWidget>
+#include <QToolBar>
+#include <QtXml>
+
+#include "Control.h"
+#include "ControlNet.h"
+#include "CnetEditorWidget.h"
+#include "Directory.h"
+#include "FileName.h"
+#include "Project.h"
+#include "XmlStackedHandlerReader.h"
+#include "ProjectItemViewMenu.h"
+
+namespace Isis {
+  /**
+   * Constructor.
+   */
+  CnetEditorView::CnetEditorView(Directory *directory, Control *control, FileName configFile,
+                                 QWidget *parent) : AbstractProjectItemView(parent) {
+
+    // TODO: This layout should be inside of the cnet editor widget, but I put it here to not
+    //     conflict with current work in the cnet editor widget code.
+    //QWidget *result = new QWidget;
+
+    QWidget *centralWidget = new QWidget;
+    setCentralWidget(centralWidget);
+    QGridLayout *resultLayout = new QGridLayout;
+    centralWidget->setLayout(resultLayout);
+
+    m_cnetEditorWidget = new CnetEditorWidget(control, configFile.expanded());
+    m_control = control;
+
+    resultLayout->addWidget(m_cnetEditorWidget, 0, 0, 1, 2);
+
+    QTabWidget *treeViews = new QTabWidget;
+    treeViews->addTab( m_cnetEditorWidget->pointTreeView(), tr("Point View") );
+    treeViews->addTab( m_cnetEditorWidget->serialTreeView(), tr("Serial View") );
+    treeViews->addTab( m_cnetEditorWidget->connectionTreeView(), tr("Connection View") );
+    resultLayout->addWidget(treeViews, 1, 0, 1, 1);
+
+    QTabWidget *filterViews = new QTabWidget;
+    filterViews->addTab( m_cnetEditorWidget->pointFilterWidget(), tr("Filter Points and Measures") );
+    filterViews->addTab( m_cnetEditorWidget->serialFilterWidget(), tr("Filter Images and Points") );
+    filterViews->addTab( m_cnetEditorWidget->connectionFilterWidget(), tr("Filter Connections") );
+    resultLayout->addWidget(filterViews, 1, 1, 1, 1);
+
+    createMenus();
+    createToolBars();
+
+    // Store the actions for easy enable/disable.
+    foreach (QAction *action, m_permToolBar->actions()) {
+      addAction(action);
+    }
+    // On default, actions are disabled until the cursor enters the view.
+    disableActions();
+  }
+
+  /**
+   * Destructor
+   */
+  CnetEditorView::~CnetEditorView() {
+
+    delete m_cnetEditorWidget;
+    delete m_permToolBar;
+    delete m_tablesMenu;
+
+    m_tablesMenu = 0;
+    m_permToolBar = 0;
+  }
+
+  /**
+   * Uses the actions created by CnetEditorWidget, creates the tables menu,
+   * and puts the actions into the tables menu.
+   */
+  void CnetEditorView::createMenus() {
+    QMap< QAction *, QList< QString > > actionMap = m_cnetEditorWidget->menuActions();
+    QMapIterator< QAction *, QList< QString > > actionMapIter(actionMap);
+
+    m_tablesMenu = new ProjectItemViewMenu("&Tables");
+    connect(m_tablesMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
+    menuBar()->addMenu(m_tablesMenu);
+
+    while ( actionMapIter.hasNext() ) {
+      actionMapIter.next();
+      QAction *actionToAdd = actionMapIter.key();
+
+      // Skip the "What's This?" action because it is in the main help menu of IPCE
+      if (actionToAdd->text() == "What's This?") {
+        continue;
+      }
+      m_tablesMenu->addAction(actionToAdd);
+    }
+  }
+
+
+  /**
+   * Uses and adds the actions created by CnetEditorWidget to the view's toolbars
+   * Right now, all actions created in CnetEditorWidget are added to the toolpad.
+   * This was copied from CnetEditorWindow
+   */
+  void CnetEditorView::createToolBars() {
+    m_permToolBar = addToolBar("Standard Tools");
+    m_permToolBar->setObjectName("permToolBar");
+    m_permToolBar->setIconSize(QSize(22, 22));
+
+    QMap< QString, QList< QAction * > > actionMap;
+    actionMap = m_cnetEditorWidget->toolBarActions();
+    QMapIterator< QString, QList< QAction * > > actionIter(actionMap);
+
+    while (actionIter.hasNext()) {
+      actionIter.next();
+      QString objName = actionIter.key();
+      QList< QAction * > actionList = actionIter.value();
+      foreach (QAction *action, actionList) {
+        m_permToolBar->addAction(action);
+      }
+    }
+  }
+
+
+  /**
+   * Disables actions when cursor leaves the view. Overriden method
+   * If a menu is visible, i.e. clicked on, this causes a leave event. We want the
+   * actions to still be enabled when a menu is visible.
+   *
+   * @param event The leave event
+   */
+  void CnetEditorView::leaveEvent(QEvent *event) {
+    if (!m_tablesMenu->isVisible()) {
+      disableActions();
+    }
+  }
+
+
+  /**
+   * Returns the cnetEditorWidget.
+   *
+   * @return (cnetEditorWidget *) The cnetEditorWidget used to
+   *         display the footprints.
+   */
+  CnetEditorWidget *CnetEditorView::cnetEditorWidget() {
+    return m_cnetEditorWidget;
+  }
+
+
+  /**
+   * @description Returns the Control displayed in the CnetEditorWidget
+   *
+   * @return (Control *) The Control displayed in the CnetEditorWidget
+   */
+  Control *CnetEditorView::control() {
+    return m_control;
+  }
+
+
+  /**
+   * This method pushes a new XmlHandler into the parser stack.
+   *
+   * @param xmlReader This is the parser stack.
+   */
+  void CnetEditorView::load(XmlStackedHandlerReader *xmlReader) {
+    xmlReader->pushContentHandler(new XmlHandler(this));
+  }
+
+
+  /**
+   * This method saves the Controls object ids to the stream.
+   *
+   * @param stream The stream that will output to directory.xml
+   * @param project The project to save the users settings to
+   * @param newProjectRoot New project's root directory
+   */
+  void CnetEditorView::save(QXmlStreamWriter &stream, Project *, FileName) const {
+
+    stream.writeStartElement("cnetEditorView");
+    stream.writeAttribute("objectName", objectName());
+    stream.writeAttribute("id", m_control->id());
+    stream.writeEndElement();
+  }
+
+
+  /**
+   * Creates an XmlHandler for cnetEditor
+   *
+   * @param cnetEditor The widget to be serialized
+   */
+  CnetEditorView::XmlHandler::XmlHandler(CnetEditorView *cnetEditorView) {
+    m_cnetEditorView = cnetEditorView;
+  }
+
+
+  /**
+   * Destructor
+   */
+  CnetEditorView::XmlHandler::~XmlHandler() {
+    delete m_cnetEditorView;
+    m_cnetEditorView = NULL;
+  }
+
+
+  /**
+   * Placeholder for later serialization of CnetEditorViews
+   *
+   * @param cnetEditor The CnetEditorView to be serialized
+   * @param namespaceURI ???
+   * @param localName Determines what attributes to retrieve from atts.
+   * @param qName ???
+   * @param atts Stores the attributes.
+   *
+   * @return @b bool The result of XmlStackedHandler's startElement() method.
+   */
+  bool CnetEditorView::XmlHandler::startElement(const QString &namespaceURI,
+      const QString &localName, const QString &qName, const QXmlAttributes &atts) {
+
+    bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
+    return result;
+  }
+
+
+  /**
+   * This method calls XmlStackedHandler's endElement() and dereferences pointers according to
+   * the value of localName.
+   *
+   * @param namespaceURI ???
+   * @param localName Determines which pointers to dereference.
+   * @param qName ???
+   *
+   * @return @b bool The result of XmlStackedHandler's endElement() method.
+   */
+  bool CnetEditorView::XmlHandler::endElement(const QString &namespaceURI,
+      const QString &localName, const QString &qName) {
+
+    bool result = XmlStackedHandler::endElement(namespaceURI, localName, qName);
+    return result;
+  }
+}
diff --git a/isis/src/qisis/objs/CnetEditorView/CnetEditorView.h b/isis/src/qisis/objs/CnetEditorView/CnetEditorView.h
new file mode 100644
index 0000000000000000000000000000000000000000..f7a2ba860e731d3465b1ce7ce1887312c3d0a758
--- /dev/null
+++ b/isis/src/qisis/objs/CnetEditorView/CnetEditorView.h
@@ -0,0 +1,131 @@
+#ifndef CnetEditorView_h
+#define CnetEditorView_h
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include <QList>
+#include <QMap>
+#include <QPointer>
+#include <QSize>
+
+#include "AbstractProjectItemView.h"
+#include "FileName.h"
+#include "XmlStackedHandler.h"
+
+class QAction;
+class QToolBar;
+class QWidgetAction;
+class QXmlStreamWriter;
+
+namespace Isis {
+  class Control;
+  class CnetEditorWidget;
+  class Directory;
+  class FileName;
+  class Project;
+  class ToolPad;
+  class XmlStackedHandlerReader;
+  class ProjectItemViewMenu;
+
+  /**
+   * Ipce view containing the CnetEditorWidget
+   *
+   * @author 2018-04-04 Tracie Sucharski
+   *
+   * @internal
+   *    @history 2018-06-01 Kaitlyn Lee - Because AbstractProjectItemView now inherits from QMainWindow,
+   *                            I added a dummy central widget and set its layout to the grid layout.
+   *                            We used to set the whole CnetEditorView widget's layout, now we only
+   *                            set the central widget's layout.
+   *    @history 2018-06-05 Kaitlyn Lee - Added createMenus() and createToolBars(). The body of createMenus()
+   *                            was moved from the constructor. createToolBars() was copied and edited
+   *                            from CnetEditorWindow. Fixes #5416. Fixes #4988
+   *    @history 2018-06-13 Kaitlyn Lee - Since views now inherit from QMainWindow, each individual
+   *                            view has its own toolbar, so having getters that return toolbar
+   *                            actions to fill the toolbar of the IpceMainWindow are unnecessary.
+   *                            Removed methods that returned menu and toolbar actions.
+   *    @history 2018-06-25 Kaitlyn Lee - When multiple views are open, there is a possibility of getting
+   *                            ambiguous shortcut errors. To counter this, we enable/disable actions. Overrode
+   *                            leaveEvent() to handle open menus causing a leave event. On default, a view's
+   *                            actions are disabled. To enable the actions, move the cursor over the view.
+   *                            When a user moves the cursor outside of the view, the actions are disabled.
+   *   @history 2018-07-09 Tracie Sucharski - Serialize the objectName for this view so that the
+   *                            view can be re-created with the same objectName for restoring the
+   *                            project state. Qt's save/restoreState use the objectName. Remove
+   *                            sizeHint method which is now taken care of in the parent class,
+   *                            AbstractProjectItemView.
+   */
+
+class CnetEditorView : public AbstractProjectItemView {
+
+  Q_OBJECT
+
+  public:
+    CnetEditorView(Directory *directory, Control *control, FileName configFile,
+                   QWidget *parent = 0);
+    ~CnetEditorView();
+
+    CnetEditorWidget *cnetEditorWidget();
+    Control *control();
+
+    void load(XmlStackedHandlerReader *xmlReader);
+    void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) const;
+
+  private:
+    void createToolBars();
+    void createMenus();
+    void leaveEvent(QEvent *event);
+
+
+      /**
+       * @author 2012-09-?? Steven Lambright
+       *
+       * @internal
+       *   @history 2018-04-04 Tracie Sucharski - Implemented for CnetEditorView
+       */
+      class XmlHandler : public XmlStackedHandler {
+        public:
+          XmlHandler(CnetEditorView *cnetEditorView);
+          ~XmlHandler();
+
+          virtual bool startElement(const QString &namespaceURI, const QString &localName,
+                                    const QString &qName, const QXmlAttributes &atts);
+          virtual bool endElement(const QString &namespaceURI, const QString &localName,
+                                  const QString &qName);
+
+        private:
+          Q_DISABLE_COPY(XmlHandler);
+
+          CnetEditorView *m_cnetEditorView; //!< The view we are working with
+      };
+
+  private:
+    QPointer<CnetEditorWidget> m_cnetEditorWidget;
+    QPointer<Control> m_control;
+
+    QToolBar *m_permToolBar; //!< The permanent tool bar
+    ProjectItemViewMenu *m_tablesMenu; //!< View menu for storing actions
+
+  };
+}
+
+#endif // CNETEDITORVIEW_H
diff --git a/isis/src/qisis/objs/JigsawDialog/Makefile b/isis/src/qisis/objs/CnetEditorView/Makefile
similarity index 100%
rename from isis/src/qisis/objs/JigsawDialog/Makefile
rename to isis/src/qisis/objs/CnetEditorView/Makefile
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.cpp
index 3393a4e4aef3c5a7b0ccdbac39fcdc4d777e1964..fc6e6099323f3e059bd54e2a88b7b7d7d4826328 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.cpp
@@ -2,19 +2,24 @@
 
 #include "APrioriLatitudeFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "Latitude.h"
 
 
 namespace Isis {
   APrioriLatitudeFilter::APrioriLatitudeFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  APrioriLatitudeFilter::APrioriLatitudeFilter(
-    const APrioriLatitudeFilter &other) : AbstractNumberFilter(other) {
+  APrioriLatitudeFilter::APrioriLatitudeFilter(const APrioriLatitudeFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -22,20 +27,18 @@ namespace Isis {
   }
 
 
-  bool APrioriLatitudeFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool APrioriLatitudeFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool APrioriLatitudeFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAprioriSurfacePoint().GetLatitude().degrees());
+          point->GetAprioriSurfacePoint().GetLatitude().degrees());
   }
 
 
-  bool APrioriLatitudeFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool APrioriLatitudeFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +67,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.h
index 7d04b57d0c789fefd06c6d215a97b27b8d20f53b..e091fd5fc585430823a39c0a638a0bd9dcac5e9b 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
+   * @internal
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class APrioriLatitudeFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       APrioriLatitudeFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       APrioriLatitudeFilter(const APrioriLatitudeFilter &other);
       virtual ~APrioriLatitudeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.cpp
index 764a53eafe18bcfd9f1b0865703bab69070e4e7d..c11b94ddf649c03c6323eb977bc3e7899e6405a3 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.cpp
@@ -2,19 +2,24 @@
 
 #include "APrioriLatitudeSigmaFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "Latitude.h"
 
 
 namespace Isis {
   APrioriLatitudeSigmaFilter::APrioriLatitudeSigmaFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  APrioriLatitudeSigmaFilter::APrioriLatitudeSigmaFilter(
-    const APrioriLatitudeSigmaFilter &other) : AbstractNumberFilter(other) {
+  APrioriLatitudeSigmaFilter::APrioriLatitudeSigmaFilter(const APrioriLatitudeSigmaFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,19 +28,18 @@ namespace Isis {
 
 
   bool APrioriLatitudeSigmaFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool APrioriLatitudeSigmaFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAprioriSurfacePoint().GetLatSigmaDistance().meters());
+          point->GetAprioriSurfacePoint().GetLatSigmaDistance().meters());
   }
 
 
-  bool APrioriLatitudeSigmaFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool APrioriLatitudeSigmaFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -61,7 +65,6 @@ namespace Isis {
 
   QString APrioriLatitudeSigmaFilter::getPointDescription() const {
     return "have <i>a priori</i> surface point latitude sigmas which are " +
-        descriptionSuffix();
+          descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.h b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.h
index 75553bef8fee19cc7761da2b922a785a61bb0df1..f9e3487e795608747ce628a46dcd25affd9ab45f 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLatitudeSigmaFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class ControlCubeGraphNode;
-  class AbstractFilterSelector;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class APrioriLatitudeSigmaFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       APrioriLatitudeSigmaFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       APrioriLatitudeSigmaFilter(const APrioriLatitudeSigmaFilter &other);
       virtual ~APrioriLatitudeSigmaFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.cpp
index 02af6c252776f605ffab3fb5b4e93567409e3ea2..e72c25104aacc9f82d7f668f40e10ebf6c08ef1f 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.cpp
@@ -2,19 +2,24 @@
 
 #include "APrioriLongitudeFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "Longitude.h"
 
 
 namespace Isis {
   APrioriLongitudeFilter::APrioriLongitudeFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  APrioriLongitudeFilter::APrioriLongitudeFilter(
-    const APrioriLongitudeFilter &other) : AbstractNumberFilter(other) {
+  APrioriLongitudeFilter::APrioriLongitudeFilter(const APrioriLongitudeFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,19 +28,18 @@ namespace Isis {
 
 
   bool APrioriLongitudeFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool APrioriLongitudeFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAprioriSurfacePoint().GetLongitude().degrees());
+          point->GetAprioriSurfacePoint().GetLongitude().degrees());
   }
 
 
-  bool APrioriLongitudeFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool APrioriLongitudeFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +68,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.h
index e7aadf1180468fd177ddefd9c175db3e403e2ea8..c7fff3bedb9a5a0e81ac49e82032e05e201818bc 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class APrioriLongitudeFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       APrioriLongitudeFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       APrioriLongitudeFilter(const APrioriLongitudeFilter &other);
       virtual ~APrioriLongitudeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.cpp
index 65346d9ec4ef2c41ce4821a1dd99ca31f6385b1b..d692e0991650d82e3fa5e1748a7269397356f2de 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.cpp
@@ -2,19 +2,24 @@
 
 #include "APrioriLongitudeSigmaFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "Longitude.h"
 
 
 namespace Isis {
   APrioriLongitudeSigmaFilter::APrioriLongitudeSigmaFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
   APrioriLongitudeSigmaFilter::APrioriLongitudeSigmaFilter(
-    const APrioriLongitudeSigmaFilter &other) : AbstractNumberFilter(other) {
+        const APrioriLongitudeSigmaFilter &other) : AbstractNumberFilter(other) {
   }
 
 
@@ -23,20 +28,18 @@ namespace Isis {
 
 
   bool APrioriLongitudeSigmaFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
-  bool APrioriLongitudeSigmaFilter::evaluate(
-    const ControlPoint *point) const {
+  bool APrioriLongitudeSigmaFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAprioriSurfacePoint().GetLonSigmaDistance().meters());
+          point->GetAprioriSurfacePoint().GetLonSigmaDistance().meters());
   }
 
 
-  bool APrioriLongitudeSigmaFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool APrioriLongitudeSigmaFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -65,4 +68,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.h b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.h
index d4dec40ebd52fc08492f6468b176a4a294b83c81..66938c2f1aaa5c3ed5b15fe788096e30bfc5e9f3 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriLongitudeSigmaFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class ControlCubeGraphNode;
-  class AbstractFilterSelector;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class APrioriLongitudeSigmaFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       APrioriLongitudeSigmaFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       APrioriLongitudeSigmaFilter(const APrioriLongitudeSigmaFilter &other);
       virtual ~APrioriLongitudeSigmaFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.cpp
index 9a0def576672a39c3c2689661f6a043f572ef4b2..c98beea0b0305728a5202758231db2d852610bf7 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "APrioriRadiusFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
-#include "Longitude.h"
 
 
 namespace Isis {
   APrioriRadiusFilter::APrioriRadiusFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  APrioriRadiusFilter::APrioriRadiusFilter(
-    const APrioriRadiusFilter &other) : AbstractNumberFilter(other) {
+  APrioriRadiusFilter::APrioriRadiusFilter(const APrioriRadiusFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -22,20 +26,18 @@ namespace Isis {
   }
 
 
-  bool APrioriRadiusFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool APrioriRadiusFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool APrioriRadiusFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAprioriSurfacePoint().GetLocalRadius().meters());
+          point->GetAprioriSurfacePoint().GetLocalRadius().meters());
   }
 
 
-  bool APrioriRadiusFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool APrioriRadiusFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +66,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.h b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.h
index affaf9da9ced0aa869c7ea8939dc87be97fac01f..246965d11f7cb54b44d9bd1302bc98ca5f0149d4 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class APrioriRadiusFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       APrioriRadiusFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       APrioriRadiusFilter(const APrioriRadiusFilter &other);
       virtual ~APrioriRadiusFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.cpp
index 7670f4e9779d256e011b1cd2fe6bac3fb7ffc507..802c953f3bc128705e7544772191f0d6c78735dc 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "APrioriRadiusSigmaFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
-#include "Longitude.h"
 
 
 namespace Isis {
   APrioriRadiusSigmaFilter::APrioriRadiusSigmaFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  APrioriRadiusSigmaFilter::APrioriRadiusSigmaFilter(
-    const APrioriRadiusSigmaFilter &other) : AbstractNumberFilter(other) {
+  APrioriRadiusSigmaFilter::APrioriRadiusSigmaFilter(const APrioriRadiusSigmaFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,19 +27,18 @@ namespace Isis {
 
 
   bool APrioriRadiusSigmaFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool APrioriRadiusSigmaFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAprioriSurfacePoint().GetLocalRadiusSigma().meters());
+          point->GetAprioriSurfacePoint().GetLocalRadiusSigma().meters());
   }
 
 
-  bool APrioriRadiusSigmaFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool APrioriRadiusSigmaFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +67,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.h b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.h
index 0b177603b80a6d7052dec3a140704ab10e1295d3..912d42bdcb9504e749e654b9994bc6b626de26c3 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/APrioriRadiusSigmaFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class APrioriRadiusSigmaFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       APrioriRadiusSigmaFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       APrioriRadiusSigmaFilter(const APrioriRadiusSigmaFilter &other);
       virtual ~APrioriRadiusSigmaFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.cpp
index 5e8973a01b04bccc6e4dd7d108539a2dc7d2a6bf..79d3f44aecbc2b76e1de431bc1f3413117c504dd 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.cpp
@@ -15,14 +15,15 @@
 #include <QMargins>
 #include <QMenu>
 #include <QMenuBar>
+#include <QPair>
 #include <QRadioButton>
 #include <QSpinBox>
 #include <QString>
 #include <QVBoxLayout>
 #include <QWriteLocker>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 
 #include "AbstractFilterSelector.h"
@@ -30,7 +31,7 @@
 
 namespace Isis {
   AbstractFilter::AbstractFilter(FilterEffectivenessFlag effectiveness,
-      int minimumForSuccess) {
+                                 int minimumForSuccess) {
     nullify();
 
     m_minForSuccess = minimumForSuccess;
@@ -284,26 +285,26 @@ namespace Isis {
 
 
   bool AbstractFilter::evaluateImageFromPointFilter(
-    const ControlCubeGraphNode *node) const {
-    ASSERT(node);
-
+        const QPair<QString, ControlNet *> *imageAndNet) const {
     bool evaluation = true;
 
-    if (canFilterImages())
-      evaluation = evaluateFromCount(node->getMeasures(), true);
+    if (canFilterImages()) {
+      evaluation = evaluateFromCount(imageAndNet->second->GetMeasuresInCube(imageAndNet->first),
+                                     true);
+    }
 
     return evaluation;
   }
 
 
   bool AbstractFilter::evaluateImageFromMeasureFilter(
-    const ControlCubeGraphNode *node) const {
-    ASSERT(node);
-
+        const QPair<QString, ControlNet *> *imageAndNet) const {
     bool evaluation = true;
 
-    if (canFilterImages())
-      evaluation = evaluateFromCount(node->getMeasures(), false);
+    if (canFilterImages()) {
+      evaluation = evaluateFromCount(imageAndNet->second->GetMeasuresInCube(imageAndNet->first),
+                                     false);
+    }
 
     return evaluation;
   }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.h
index d8c8d84cc84af89c46b62d039f8a094e4163b149..f148d632c317c3cfe2a70788cb340d4a89c338b8 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilter.h
@@ -3,10 +3,11 @@
 
 #include <QWidget>
 
-
 class QBoxLayout;
 class QButtonGroup;
 class QCheckBox;
+template< typename U, typename V > struct QPair;
+class QString;
 template< typename T > class QFlags;
 
 
@@ -14,7 +15,7 @@ namespace Isis {
   class AbstractFilterSelector;
   class ControlPoint;
   class ControlMeasure;
-  class ControlCubeGraphNode;
+  class ControlNet;
 
   /**
    * @brief Base class for control net filters
@@ -29,6 +30,10 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AbstractFilter : public QWidget {
       Q_OBJECT
@@ -51,7 +56,7 @@ namespace Isis {
       virtual bool canFilterPoints() const;
       virtual bool canFilterMeasures() const;
 
-      virtual bool evaluate(const ControlCubeGraphNode *) const = 0;
+      virtual bool evaluate(const QPair<QString, ControlNet *> *) const = 0;
       virtual bool evaluate(const ControlPoint *) const = 0;
       virtual bool evaluate(const ControlMeasure *) const = 0;
 
@@ -75,8 +80,8 @@ namespace Isis {
       QBoxLayout *getMainLayout() const;
       QBoxLayout *getInclusiveExclusiveLayout() const;
 
-      bool evaluateImageFromPointFilter(const ControlCubeGraphNode *) const;
-      bool evaluateImageFromMeasureFilter(const ControlCubeGraphNode *) const;
+      bool evaluateImageFromPointFilter(const QPair<QString, ControlNet *> *) const;
+      bool evaluateImageFromMeasureFilter(const QPair<QString, ControlNet *> *) const;
       bool evaluatePointFromMeasureFilter(const ControlPoint *) const;
 
       virtual bool evaluate(const ControlPoint *,
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.cpp
index 31b0ed6e67c110cd337af59e65350705073fc452..c0b0cf85ef18111fd26e775ad39946dd24eff3e8 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.cpp
@@ -36,27 +36,26 @@ namespace Isis {
   }
 
 
-  bool AbstractFilterSelector::hasFilter(
-    bool (AbstractFilter::*meth)() const) const {
+  bool AbstractFilterSelector::hasFilter(bool (AbstractFilter::*meth)() const) const {
     return m_filter && (m_filter->*meth)();
   }
 
 
-  QString AbstractFilterSelector::getDescription(
-    QString(AbstractFilter::*meth)() const) const {
+  QString AbstractFilterSelector::getDescription(QString(AbstractFilter::*meth)() const) const {
     QString description;
-    if (m_filter)
+    if (m_filter) {
       description = (m_filter->*meth)();
+    }
 
     return description;
   }
 
 
-  AbstractFilterSelector &AbstractFilterSelector::operator=(
-    const AbstractFilterSelector &other) {
+  AbstractFilterSelector &AbstractFilterSelector::operator=(const AbstractFilterSelector &other) {
     getSelector()->setCurrentIndex(other.getSelector()->currentIndex());
-    if (m_filter && other.m_filter)
+    if (m_filter && other.m_filter) {
       setFilter(other.m_filter->clone());
+    }
 
     return *this;
   }
@@ -79,7 +78,7 @@ namespace Isis {
     m_selector->addItem("---- select ----");
     m_selector->insertSeparator(m_selector->count());
     connect(m_selector, SIGNAL(currentIndexChanged(int)),
-        this, SLOT(changeFilter(int)));
+            this, SLOT(changeFilter(int)));
 
     m_mainLayout = new QHBoxLayout;
     m_mainLayout->setContentsMargins(0, 0, 0, 0);
@@ -117,15 +116,13 @@ namespace Isis {
 
     m_filter = someFilter;
     connect(getFilter(), SIGNAL(filterChanged()),
-        this, SIGNAL(filterChanged()));
+            this, SIGNAL(filterChanged()));
     getMainLayout()->insertWidget(2, getFilter());
   }
 
 
   void AbstractFilterSelector::deleteFilter() {
     if (m_filter) {
-      //       QWidget * widget = m_mainLayout->takeAt(2)->widget();
-      //       ASSERT(widget && widget == m_filter);
       delete m_filter;
       m_filter = NULL;
     }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.h
index afc00ad683224631594934da1e885135f9d198bf..9f7d468cd3dfbe10a38bba03b0e99572f71e0033 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractFilterSelector.h
@@ -15,8 +15,7 @@ class QPushButton;
 class QReadWriteLock;
 
 namespace Isis {
-  class AbstractFilter;
-  class ControlCubeGraphNode;
+  class ControlNet;
   class ControlMeasure;
   class ControlPoint;
 
@@ -33,6 +32,8 @@ namespace Isis {
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2015-11-16 Ian Humphrey - Removed embedded close button icon. References #1041.
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class AbstractFilterSelector : public QWidget {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.cpp
index 2430bcd97941121aea8d44d05acd6a290dc345c2..2e12f4b25b4c0eb7ab626e684c970ac6964d6e0d 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.cpp
@@ -4,35 +4,35 @@
 
 #include <iostream>
 
+#include <QPair>
 #include <QString>
 #include <QVariant>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlNet.h"
 
 
 namespace Isis {
-  AbstractImageItem::AbstractImageItem(ControlCubeGraphNode *cubeGraphNode,
-      int avgCharWidth, AbstractTreeItem *parent)
-    : AbstractTreeItem(parent) {
-    ASSERT(cubeGraphNode);
-    m_ccgn = cubeGraphNode;
+  AbstractImageItem::AbstractImageItem(QString imageSerial, ControlNet *net,
+                                       int avgCharWidth, AbstractTreeItem *parent)
+        : AbstractTreeItem(parent) {
+    m_imageAndNet = new QPair<QString, ControlNet *>(imageSerial, net);
     calcDataWidth(avgCharWidth);
-
-    connect(m_ccgn, SIGNAL(destroyed(QObject *)), this, SLOT(sourceDeleted()));
   }
 
 
   AbstractImageItem::~AbstractImageItem() {
-    m_ccgn = NULL;
+    if (m_imageAndNet) {
+      delete m_imageAndNet;
+    }
+    m_imageAndNet = NULL;
   }
 
 
   QVariant AbstractImageItem::getData() const {
-    if (m_ccgn)
-      return QVariant((QString)m_ccgn->getSerialNumber());
-    else
-      return QVariant();
+    if (m_imageAndNet) {
+      return QVariant(m_imageAndNet->first);
+    }
+    return QVariant();
   }
 
 
@@ -51,28 +51,31 @@ namespace Isis {
   }
 
 
-  void AbstractImageItem::deleteSource() {
-    // Shouldn't be deleting ControlCubeGraphNode's!
-    ASSERT(0);
-  }
+  void AbstractImageItem::deleteSource() { }
 
 
   AbstractTreeItem::InternalPointerType AbstractImageItem::getPointerType() const {
-    return AbstractTreeItem::CubeGraphNode;
+    return AbstractTreeItem::ImageAndNet;
   }
 
 
   void *AbstractImageItem::getPointer() const {
-    return m_ccgn;
+    return m_imageAndNet;
   }
 
 
-  bool AbstractImageItem::hasNode(ControlCubeGraphNode *node) const {
-    return m_ccgn == node || AbstractTreeItem::hasNode(node);
+  bool AbstractImageItem::hasImage(QString imageSerial) const {
+    if(!m_imageAndNet) {
+      return false;
+    }
+    return (QString::compare(m_imageAndNet->first, imageSerial) == 0) ||
+            AbstractTreeItem::hasImage(imageSerial);
   }
 
 
-  void AbstractImageItem::sourceDeleted() {
-    m_ccgn = NULL;
-  }
+  /**
+   * This method is required to be implemented by the parent AbstractTreeItem class,
+   * but for this it's a NOP.
+   */
+  void AbstractImageItem::sourceDeleted() { }
 }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.h
index 8c17319ec6ac0e167c85f88b3dfac76c3c1c215f..d14fe1ecd54ea88c0ddcfcd40451f8189171195e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractImageItem.h
@@ -4,13 +4,11 @@
 
 #include "AbstractTreeItem.h"
 
-
 class QString;
 class QVariant;
 
-
 namespace Isis {
-  class ControlCubeGraphNode;
+  class ControlNet;
 
   /**
    * @brief Base class for an image item in the tree
@@ -23,11 +21,13 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class AbstractImageItem : public virtual AbstractTreeItem {
     public:
-      AbstractImageItem(ControlCubeGraphNode *cubeGraphNode,
-          int avgCharWidth, AbstractTreeItem *parent = 0);
+      AbstractImageItem(QString imageSerial, ControlNet *net,
+                        int avgCharWidth, AbstractTreeItem *parent = 0);
       virtual ~AbstractImageItem();
 
       QVariant getData() const;
@@ -37,7 +37,7 @@ namespace Isis {
       void deleteSource();
       InternalPointerType getPointerType() const;
       void *getPointer() const;
-      bool hasNode(ControlCubeGraphNode *) const;
+      bool hasImage(QString imageSerial) const;
 
 
     protected:
@@ -49,7 +49,7 @@ namespace Isis {
 
 
     private:
-      ControlCubeGraphNode *m_ccgn;
+      QPair<QString, ControlNet *> *m_imageAndNet;
   };
 }
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.cpp
index 46da59e2dff6f35280b13154cca05bb83c68c2b0..2c14883dd533335f7ac161694b2889f3e168c666 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.cpp
@@ -13,15 +13,14 @@
 
 namespace Isis {
   AbstractMultipleChoiceFilter::AbstractMultipleChoiceFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+         AbstractFilter::FilterEffectivenessFlag flag,
+         int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
     nullify();
     m_curChoice = new QString;
   }
 
   AbstractMultipleChoiceFilter::AbstractMultipleChoiceFilter(
-    AbstractMultipleChoiceFilter const &other)
-    : AbstractFilter(other) {
+        AbstractMultipleChoiceFilter const &other) : AbstractFilter(other) {
     nullify();
     m_curChoice = new QString;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.h
index 674ee79a8aeaaa4b5ca5c2fbb8226ade9bd4c700..c5103cafcd19dca0ddede3d12431c6f34e271b7e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractMultipleChoiceFilter.h
@@ -23,13 +23,15 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class AbstractMultipleChoiceFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       AbstractMultipleChoiceFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+                                   int minimumForSuccess = -1);
       AbstractMultipleChoiceFilter(const AbstractMultipleChoiceFilter &other);
       virtual ~AbstractMultipleChoiceFilter();
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.cpp
index e177be1bb4bb75ee101e1d17d4eec6e243f65292..c542028d2fc33b594862f901998a5b166a6396bb 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.cpp
@@ -12,22 +12,21 @@
 #include <QMargins>
 #include <QRadioButton>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
 #include "ControlPoint.h"
 
 
 namespace Isis {
   AbstractNumberFilter::AbstractNumberFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
     nullify();
     createWidget();
   }
 
 
   AbstractNumberFilter::AbstractNumberFilter(const AbstractNumberFilter &other)
-    : AbstractFilter(other) {
+        : AbstractFilter(other) {
     nullify();
     createWidget();
 
@@ -141,4 +140,3 @@ namespace Isis {
     *m_lineEditText = newText;
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.h
index d8d9a0e2cc0737e22be45942aa123bf4172e71d7..0b86eba5ed33753c225355c9292d7a480c30ceab 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractNumberFilter.h
@@ -25,13 +25,15 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class AbstractNumberFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       AbstractNumberFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+                           int minimumForSuccess = -1);
       AbstractNumberFilter(const AbstractNumberFilter &other);
       virtual ~AbstractNumberFilter();
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.cpp
index 6c4cfc33806ffd0fa02c60603e80050a5d7d6874..bd11a847bd15b3b03d3d9ed73cd1044a152790ed 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.cpp
@@ -7,21 +7,20 @@
 #include <QHBoxLayout>
 #include <QLineEdit>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
 #include "ControlPoint.h"
 
 
 namespace Isis {
   AbstractStringFilter::AbstractStringFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
     nullify();
     createWidget();
   }
 
   AbstractStringFilter::AbstractStringFilter(
-    const AbstractStringFilter &other) : AbstractFilter(other) {
+        const AbstractStringFilter &other) : AbstractFilter(other) {
     nullify();
     createWidget();
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.h
index bb410d1c3655d446950b0675acc65f19adb844f4..e7f2f12c26b69c38256a7cba3c89a91429403dd5 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractStringFilter.h
@@ -1,11 +1,8 @@
 #ifndef AbstractStringFilter_H
 #define AbstractStringFilter_H
 
-
-// parent
 #include "AbstractFilter.h"
 
-
 class QLineEdit;
 class QString;
 
@@ -25,13 +22,15 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class AbstractStringFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       AbstractStringFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+                           int minimumForSuccess = -1);
       AbstractStringFilter(const AbstractStringFilter &other);
       virtual ~AbstractStringFilter();
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.cpp
index da1467357bd0762889104e0e3ced6e5c49d05373..02b48829c47e4ac203c492a27de8aa072115c844 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.cpp
@@ -95,11 +95,12 @@ namespace Isis {
   }
 
 
-  bool AbstractTreeItem::hasNode(ControlCubeGraphNode *cube) const {
+  bool AbstractTreeItem::hasImage(QString imageSerial) const {
     bool found = false;
 
-    for (int i = 0; !found && i < childCount(); i++)
-      found = childAt(i)->hasNode(cube);
+    for (int i = 0; !found && i < childCount(); i++) {
+      found = childAt(i)->hasImage(imageSerial);
+    }
 
     return found;
   }
@@ -222,4 +223,3 @@ namespace Isis {
     return d;
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.h
index 9b80a8d4666cb4f6cdc226abf5591148d57fbc0f..0bf13463a5a0ea24dbeaf6145fd143bef47f1bc9 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeItem.h
@@ -10,7 +10,6 @@ class QVariant;
 
 
 namespace Isis {
-  class ControlCubeGraphNode;
   class ControlPoint;
   class ControlMeasure;
 
@@ -26,6 +25,8 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode usages to
+   *                           image serial number. References #5434.
    */
   class AbstractTreeItem : public QObject {
 
@@ -36,7 +37,7 @@ namespace Isis {
         None,
         Point,
         Measure,
-        CubeGraphNode,
+        ImageAndNet,
       };
 
 
@@ -78,7 +79,7 @@ namespace Isis {
       virtual QString getFormattedData(QString columnTitle) const;
 
       virtual bool hasMeasure(ControlMeasure *) const;
-      virtual bool hasNode(ControlCubeGraphNode *) const;
+      virtual bool hasImage(QString imageSerial) const;
       virtual bool hasPoint(ControlPoint *) const;
 
       virtual AbstractTreeItem *getNextVisiblePeer() const;
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.cpp b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.cpp
index ea404f398ecefb1f9f46a0dd9700a866beb683f9..a199891bf347d88e44c87cbbb567c7de4bfbf918 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.cpp
@@ -497,12 +497,9 @@ namespace Isis {
     AbstractTreeItem::InternalPointerType pointerType =
       item->getPointerType();
 
-    if ((pointerType == AbstractTreeItem::Point &&
-        flags.testFlag(PointItems)) ||
-        (pointerType == AbstractTreeItem::Measure &&
-            flags.testFlag(MeasureItems)) ||
-        (pointerType == AbstractTreeItem::CubeGraphNode &&
-            flags.testFlag(SerialItems))) {
+    if ((pointerType == AbstractTreeItem::Point && flags.testFlag(PointItems)) ||
+        (pointerType == AbstractTreeItem::Measure && flags.testFlag(MeasureItems)) ||
+        (pointerType == AbstractTreeItem::ImageAndNet && flags.testFlag(ImageItems))) {
       return true;
     }
     else {
@@ -634,9 +631,9 @@ namespace Isis {
             (ControlMeasure *) item->getPointer())) ? true : false);
         break;
 
-      case AbstractTreeItem::CubeGraphNode:
+      case AbstractTreeItem::ImageAndNet:
         item->setVisible((!m_filter || m_filter->evaluate(
-            (ControlCubeGraphNode *) item->getPointer())) ? true : false);
+            (QPair<QString, ControlNet *> *) item->getPointer())) ? true : false);
         break;
 
       case AbstractTreeItem::None:
@@ -702,4 +699,3 @@ namespace Isis {
     }
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.h b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.h
index d10c08266af2da9d939c7d8aa46953b8184fe47f..ffaed462909cc4b76822405a5b8774f598fbc07d 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AbstractTreeModel.h
@@ -43,8 +43,8 @@ namespace Isis {
       enum InterestingItems {
         PointItems = 1,
         MeasureItems = 2,
-        SerialItems = 4,
-        AllItems = PointItems | MeasureItems | SerialItems
+        ImageItems = 4,
+        AllItems = PointItems | MeasureItems | ImageItems
       };
       Q_DECLARE_FLAGS(InterestingItemsFlag, InterestingItems)
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.cpp
index 3f044d5fee6fa3afacc1a9c74f8cf41f56f37329..79b2bcaec03aa5eb7990a2b4d036f696c307a8de 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "AdjustedLatitudeFilter.h"
 
+#include <QPair>
+#include <QString>
+
 #include "ControlPoint.h"
+#include "ControlNet.h"
 #include "Latitude.h"
 
 
 namespace Isis {
   AdjustedLatitudeFilter::AdjustedLatitudeFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
   AdjustedLatitudeFilter::AdjustedLatitudeFilter(
-    const AdjustedLatitudeFilter &other) : AbstractNumberFilter(other) {
+        const AdjustedLatitudeFilter &other) : AbstractNumberFilter(other) {
   }
 
 
@@ -22,20 +26,18 @@ namespace Isis {
   }
 
 
-  bool AdjustedLatitudeFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool AdjustedLatitudeFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool AdjustedLatitudeFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAdjustedSurfacePoint().GetLatitude().degrees());
+          point->GetAdjustedSurfacePoint().GetLatitude().degrees());
   }
 
 
-  bool AdjustedLatitudeFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool AdjustedLatitudeFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +66,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.h
index 90cf8e6e9ab1877de558e6380a079baab5508871..ff593be85271f22b2c3e357910d3e1a5667c833d 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeFilter.h
@@ -3,13 +3,11 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
   class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
   class ControlPoint;
 
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-23 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AdjustedLatitudeFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       AdjustedLatitudeFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+                             int minimumForSuccess = -1);
       AdjustedLatitudeFilter(const AdjustedLatitudeFilter &other);
       virtual ~AdjustedLatitudeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.cpp
index 27e69145794f60e0510590510424e147dbde33bc..5d43155d3e2a7db6c42e903182bf404531257ad6 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.cpp
@@ -2,19 +2,24 @@
 
 #include "AdjustedLatitudeSigmaFilter.h"
 
+#include <QPair>
+#include <QString>
+
 #include "ControlPoint.h"
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "Latitude.h"
 
 
 namespace Isis {
   AdjustedLatitudeSigmaFilter::AdjustedLatitudeSigmaFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
   AdjustedLatitudeSigmaFilter::AdjustedLatitudeSigmaFilter(
-    const AdjustedLatitudeSigmaFilter &other) : AbstractNumberFilter(other) {
+        const AdjustedLatitudeSigmaFilter &other) : AbstractNumberFilter(other) {
   }
 
 
@@ -23,20 +28,18 @@ namespace Isis {
 
 
   bool AdjustedLatitudeSigmaFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
-  bool AdjustedLatitudeSigmaFilter::evaluate(
-    const ControlPoint *point) const {
+  bool AdjustedLatitudeSigmaFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAdjustedSurfacePoint().GetLatSigmaDistance().meters());
+          point->GetAdjustedSurfacePoint().GetLatSigmaDistance().meters());
   }
 
 
-  bool AdjustedLatitudeSigmaFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool AdjustedLatitudeSigmaFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -65,4 +68,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.h
index 7defcc6e9be6257efdd6f3fa00b719add4cc7924..51b6e9a59a9bd868e9d25b1656dca0e01c6edb7b 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLatitudeSigmaFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
   class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +22,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AdjustedLatitudeSigmaFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       AdjustedLatitudeSigmaFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       AdjustedLatitudeSigmaFilter(const AdjustedLatitudeSigmaFilter &other);
       virtual ~AdjustedLatitudeSigmaFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.cpp
index 386bc51699544121c21928bc4483236804887e6a..0f330ac0b2cde80781064dab0cff79d9bc8b4295 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.cpp
@@ -2,19 +2,25 @@
 
 #include "AdjustedLongitudeFilter.h"
 
+#include <QPair>
+#include <QString>
+
 #include "ControlPoint.h"
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "Longitude.h"
 
 
 namespace Isis {
   AdjustedLongitudeFilter::AdjustedLongitudeFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess)
+        : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  AdjustedLongitudeFilter::AdjustedLongitudeFilter(
-    const AdjustedLongitudeFilter &other) : AbstractNumberFilter(other) {
+  AdjustedLongitudeFilter::AdjustedLongitudeFilter(const AdjustedLongitudeFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -22,20 +28,18 @@ namespace Isis {
   }
 
 
-  bool AdjustedLongitudeFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool AdjustedLongitudeFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool AdjustedLongitudeFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAdjustedSurfacePoint().GetLongitude().degrees());
+          point->GetAdjustedSurfacePoint().GetLongitude().degrees());
   }
 
 
-  bool AdjustedLongitudeFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool AdjustedLongitudeFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +68,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.h
index aa72b985335c231b6f46abe02be0fb93d521bb13..c5f3abf2b50c175820ff21b28ad0de0af2859018 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeFilter.h
@@ -3,15 +3,14 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
   class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
   class ControlPoint;
+  class ControlNet;
 
   /**
    * @brief Allows filtering by adjusted surface point longitude
@@ -23,19 +22,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AdjustedLongitudeFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       AdjustedLongitudeFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+                              int minimumForSuccess = -1);
       AdjustedLongitudeFilter(const AdjustedLongitudeFilter &other);
       virtual ~AdjustedLongitudeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.cpp
index 7a0141ec6192600daa30e8f4fc8d35299f9309f5..b8657441a500cc825aecc08ac8874f12772fc954 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.cpp
@@ -2,20 +2,25 @@
 
 #include "AdjustedLongitudeSigmaFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "Longitude.h"
 
 
 namespace Isis {
   AdjustedLongitudeSigmaFilter::AdjustedLongitudeSigmaFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
   AdjustedLongitudeSigmaFilter::AdjustedLongitudeSigmaFilter(
-    const AdjustedLongitudeSigmaFilter &other) :
-    AbstractNumberFilter(other) {
+        const AdjustedLongitudeSigmaFilter &other) :
+        AbstractNumberFilter(other) {
   }
 
 
@@ -24,20 +29,18 @@ namespace Isis {
 
 
   bool AdjustedLongitudeSigmaFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
-  bool AdjustedLongitudeSigmaFilter::evaluate(
-    const ControlPoint *point) const {
+  bool AdjustedLongitudeSigmaFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAdjustedSurfacePoint().GetLonSigmaDistance().meters());
+          point->GetAdjustedSurfacePoint().GetLonSigmaDistance().meters());
   }
 
 
-  bool AdjustedLongitudeSigmaFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool AdjustedLongitudeSigmaFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -66,4 +69,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.h
index ace520c7e593fa51e203b52b82955bb9d0746222..35d4b2748cd4f270c3893b6dfd89da74d4b6a476 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedLongitudeSigmaFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
   class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +22,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AdjustedLongitudeSigmaFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       AdjustedLongitudeSigmaFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       AdjustedLongitudeSigmaFilter(const AdjustedLongitudeSigmaFilter &other);
       virtual ~AdjustedLongitudeSigmaFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.cpp
index 6df8a5f60768b627fcf840454a15f9ebe64573c4..b6c9d9c5bc2364bb4dd6bfe46480a76cfb9e7b7b 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "AdjustedRadiusFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
-#include "Longitude.h"
 
 
 namespace Isis {
   AdjustedRadiusFilter::AdjustedRadiusFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  AdjustedRadiusFilter::AdjustedRadiusFilter(
-    const AdjustedRadiusFilter &other) : AbstractNumberFilter(other) {
+  AdjustedRadiusFilter::AdjustedRadiusFilter(const AdjustedRadiusFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -22,20 +26,18 @@ namespace Isis {
   }
 
 
-  bool AdjustedRadiusFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool AdjustedRadiusFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool AdjustedRadiusFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAdjustedSurfacePoint().GetLocalRadius().meters());
+          point->GetAdjustedSurfacePoint().GetLocalRadius().meters());
   }
 
 
-  bool AdjustedRadiusFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool AdjustedRadiusFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -64,4 +66,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.h
index 46956b58d23dba2f0f6556ac930af72a5ab155a1..06ec01d6c84e4d026d2fe6211e291d649d37a2ea 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
   class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +22,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AdjustedRadiusFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       AdjustedRadiusFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       AdjustedRadiusFilter(const AdjustedRadiusFilter &other);
       virtual ~AdjustedRadiusFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.cpp
index 6fbed39cab42afca74f9fe420210d2ffcf0d7d39..034991a40445083f6e3b86052b594b5f4b7ae0f0 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "AdjustedRadiusSigmaFilter.h"
 
+#include <QPair>
+#include <QString>
+
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 
 
 namespace Isis {
   AdjustedRadiusSigmaFilter::AdjustedRadiusSigmaFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  AdjustedRadiusSigmaFilter::AdjustedRadiusSigmaFilter(
-    const AdjustedRadiusSigmaFilter &other) :
-    AbstractNumberFilter(other) {
+  AdjustedRadiusSigmaFilter::AdjustedRadiusSigmaFilter(const AdjustedRadiusSigmaFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,20 +27,18 @@ namespace Isis {
 
 
   bool AdjustedRadiusSigmaFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
-  bool AdjustedRadiusSigmaFilter::evaluate(
-    const ControlPoint *point) const {
+  bool AdjustedRadiusSigmaFilter::evaluate(const ControlPoint *point) const {
     return AbstractNumberFilter::evaluate(
-        point->GetAdjustedSurfacePoint().GetLocalRadiusSigma().meters());
+          point->GetAdjustedSurfacePoint().GetLocalRadiusSigma().meters());
   }
 
 
-  bool AdjustedRadiusSigmaFilter::evaluate(
-    const ControlMeasure *measure) const {
+  bool AdjustedRadiusSigmaFilter::evaluate(const ControlMeasure *measure) const {
     return true;
   }
 
@@ -65,4 +67,3 @@ namespace Isis {
         descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.h b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.h
index 840f8d7cf765b130b616dd18a30d8f0ca498e8b1..563417aea3399405cc33afe9c2c1c01c0936b1a5 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/AdjustedRadiusSigmaFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-04-25 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class AdjustedRadiusSigmaFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       AdjustedRadiusSigmaFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       AdjustedRadiusSigmaFilter(const AdjustedRadiusSigmaFilter &other);
       virtual ~AdjustedRadiusSigmaFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +49,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.cpp
index 89d51ebffcbdaef3e8292044d2b2ac65154b74bd..bd1b2b56e2c7c113b2b08ebd48400aeda11ebed5 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.cpp
@@ -2,23 +2,24 @@
 
 #include "ChooserNameFilter.h"
 
+#include <QPair>
 #include <QString>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "IString.h"
 
 
 namespace Isis {
   ChooserNameFilter::ChooserNameFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractStringFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractStringFilter(flag, minimumForSuccess) {
   }
 
 
   ChooserNameFilter::ChooserNameFilter(const ChooserNameFilter &other)
-    : AbstractStringFilter(other) {
+        : AbstractStringFilter(other) {
   }
 
 
@@ -26,8 +27,8 @@ namespace Isis {
   }
 
 
-  bool ChooserNameFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool ChooserNameFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.h b/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.h
index 9980de0f8d70cbf21fa7af3ec2fabf74d2f61e3b..02a3466a74d0741d1b48cf31421aaff17e1c1666 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ChooserNameFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractStringFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Allows filtering by the chooser name
@@ -21,19 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *    @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class ChooserNameFilter : public AbstractStringFilter {
       Q_OBJECT
 
     public:
       ChooserNameFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       ChooserNameFilter(const ChooserNameFilter &other);
       virtual ~ChooserNameFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.cpp b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.cpp
index 324560dde985b82d9d6b85f21c6406c8bbfb0e67..b328810050d329bda03f513f83675f9399630509 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.cpp
@@ -23,6 +23,8 @@ namespace Isis {
     CnetEditorWidget *cnetWidget) : QDialog(cnetWidget) {
     m_cnetWidget = cnetWidget;
 
+    setWindowTitle("Table Sorting");
+
     QGridLayout *mainLayout = new QGridLayout;
     mainLayout->setColumnMinimumWidth(0, 20);
     setLayout(mainLayout);
@@ -200,4 +202,3 @@ namespace Isis {
       m_measureSortingCheckBox->isChecked());
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.h b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.h
index 8ccbf915bc03542d65c588fc6abbae8f12259eb5..3223a6054d5961def496a94c8b0de402cbd5813b 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorSortConfigDialog.h
@@ -23,6 +23,8 @@ namespace Isis {
    *
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
+   *   @history 2018-06-12 Kaitlyn Lee - Set the window title to "Table Sorting"
+   *                           with setWindowTitle().
    */
   class CnetEditorSortConfigDialog : public QDialog {
       Q_OBJECT
@@ -64,4 +66,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.cpp b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.cpp
index b55d7c57cc08ed2a1ec9de6a53d50a456abeb414..1e4c2880a9c0ddcb136c86cbc271961b58995c41 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.cpp
@@ -75,10 +75,13 @@ namespace Isis {
 
     m_updatingSelection = false;
 
+    m_sortDialog = NULL;
+
     m_control = control;
     connect(CnetDisplayProperties::getInstance(), SIGNAL(compositionFinished()),
         this, SLOT(rebuildModels()));
 
+    connect(this, SIGNAL(cnetModified()), this, SLOT(setCnetModified()));
     m_settingsPath = new QString(pathForSettings);
 
     QBoxLayout *mainLayout = createMainLayout();
@@ -98,6 +101,7 @@ namespace Isis {
    * Destructor
    */
   CnetEditorWidget::~CnetEditorWidget() {
+
     writeSettings();
 
     delete m_workingVersion;
@@ -150,6 +154,9 @@ namespace Isis {
 
     delete m_connectionModel;
     m_connectionModel = NULL;
+
+    delete m_sortDialog;
+    m_sortDialog = NULL;
   }
 
 
@@ -188,6 +195,8 @@ namespace Isis {
     m_control = NULL;
     m_settingsPath = NULL;
     m_workingVersion = NULL;
+
+    m_sortDialog = NULL;
   }
 
 
@@ -1014,12 +1023,14 @@ namespace Isis {
 
 
   /**
-   * Configures the sorting dialog
+   * Configures the sorting dialog.
+   * If one does not already exist, create it, then show the dialog
    */
   void CnetEditorWidget::configSorting() {
-    CnetEditorSortConfigDialog *dialog = new CnetEditorSortConfigDialog(this);
-    dialog->setAttribute(Qt::WA_DeleteOnClose);
-    dialog->show();
+    if (!m_sortDialog) {
+      m_sortDialog = new CnetEditorSortConfigDialog(this);
+    }
+    m_sortDialog->show();
   }
 
 
@@ -1043,79 +1054,9 @@ namespace Isis {
 
 
   /**
-   * This method pushes a new XmlHandler into the parser stack.
-   *
-   * @param xmlReader This is the parser stack.
-   */
-  void CnetEditorWidget::load(XmlStackedHandlerReader *xmlReader) {
-    xmlReader->pushContentHandler(new XmlHandler(this));
-  }
-
-
-  /**
-   * This method saves the Controls object ids to the stream.
-   *
-   * @param stream The stream that will output to directory.xml
-   * @param project The project to save the users settings to
-   * @param newProjectRoot New project's root directory
-   */
-  void CnetEditorWidget::save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) {
-    stream.writeStartElement("control");
-    stream.writeAttribute("id", m_control->id());
-    stream.writeEndElement();
-  }
-
-
-  /**
-   * Creates an XmlHandler for cnetEditor
-   *
-   * @param cnetEditor The widget to be serialized
-   */
-  CnetEditorWidget::XmlHandler::XmlHandler(CnetEditorWidget *cnetEditor) {
-    m_cnetEditor = cnetEditor;
-  }
-
-
-  /**
-   * Destructor
-   */
-  CnetEditorWidget::XmlHandler::~XmlHandler() {
-    delete m_cnetEditor;
-    m_cnetEditor = NULL;
-  }
-
-
-  /**
-   * Placeholder for later serialization of CnetEditorWidgets
-   *
-   * @param cnetEditor The widget to be serialized
-   * @param namespaceURI ???
-   * @param localName Determines what attributes to retrieve from atts.
-   * @param qName ???
-   * @param atts Stores the attributes.
-   *
-   * @return @b bool The result of XmlStackedHandler's startElement() method.
-   */
-  bool CnetEditorWidget::XmlHandler::startElement(const QString &namespaceURI,
-      const QString &localName, const QString &qName, const QXmlAttributes &atts) {
-    bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
-    return result;
-  }
-
-
-  /**
-   * This method calls XmlStackedHandler's endElement() and dereferences pointers according to
-   * the value of localName.
-   *
-   * @param namespaceURI ???
-   * @param localName Determines which pointers to dereference.
-   * @param qName ???
-   *
-   * @return @b bool The result of XmlStackedHandler's endElement() method.
+   * Connected to cnetModified(). Sets the modification of m_control when the cnet is modified.
    */
-  bool CnetEditorWidget::XmlHandler::endElement(const QString &namespaceURI,
-      const QString &localName, const QString &qName) {
-    bool result = XmlStackedHandler::endElement(namespaceURI, localName, qName);
-    return result;
+  void CnetEditorWidget::setCnetModified() {
+    m_control->setModified(true);
   }
 }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.h b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.h
index bdbe010105569f0db7e73b2566a94e270f0fcc32..80dab915de1592fb4cf85d834db6ed9cae542946 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/CnetEditorWidget.h
@@ -44,6 +44,7 @@ namespace Isis {
   class PointTableModel;
   class TableView;
   class TreeView;
+  class CnetEditorSortConfigDialog;
 
   /**
    * This widget provides full editing, filtering and viewing capabilities for
@@ -71,6 +72,18 @@ namespace Isis {
    *                           a ControlNet. Added load and save methods as well as an XmlHandler
    *                           to allow for serialization of the widget into the project.
    *                           Fixes #4989.
+   *   @history 2018-04-11 Tracie Sucharski - Moved the Xml serialization to the newly created
+   *                           CnetEditorView class for ipce.
+   *   @history 2018-06-12 Kaitlyn Lee - Added m_sortDialog to keep track if a dialog exists
+   *                           so only one instance can be open at a time.
+   *   @history 2018-07-12 Kaitlyn Lee - Added setCnetModified() and the connection with
+   *                           cnetModified() to call setModified(true) on a control when a user
+   *                           edits a cnet. cnetModified() was only connected to a slot in
+   *                           Directory, and this was connected to a slot in Project called
+   *                           activeControlModified() that would call setModified(true) on the
+   *                           active control. So, when a user changed any cnets, the only cnet that
+   *                           was recognized as being modified was the active. Adding this allows
+   *                           a user to save changes made to a nonactive cnet. Fixes #5414.
    */
   class CnetEditorWidget : public QWidget {
       Q_OBJECT
@@ -116,9 +129,6 @@ namespace Isis {
       void setPointTableSortingEnabled(bool enabled);
       void setPointTableSortLimit(int limit);
 
-      void load(XmlStackedHandlerReader *xmlReader);
-      void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot);
-
 
     public slots:
       void configSorting();
@@ -139,6 +149,8 @@ namespace Isis {
       void handlePointTableFilterCountsChanged(int visibleRows, int totalRows);
       void handleMeasureTableFilterCountsChanged(int visibleRows,
           int totalRows);
+      void setCnetModified();
+
 
     private:
       //methods
@@ -192,33 +204,8 @@ namespace Isis {
 
       QString *m_settingsPath; //!< Path to read/write settings
 
+      CnetEditorSortConfigDialog *m_sortDialog; //!< Sorting dialog
 
-    private:
-      /**
-       * This class is a placeholder for future plans to serialize more of
-       * CnetEditorWidget's configurations when saving a project.
-       *  
-       * @author 2017-07-25 Christopher Combs
-       * @internal
-       *   @history 2017-07-25 Christopher Combs - Added Xml StackedHandler class
-       *                           to implement serialization of the CnetEditorWidget.
-       *                           References #4989.
-       */
-      class XmlHandler : public XmlStackedHandler {
-        public:
-          XmlHandler(CnetEditorWidget *cnetEditor);
-          ~XmlHandler();
-
-          virtual bool startElement(const QString &namespaceURI, const QString &localName,
-                                    const QString &qName, const QXmlAttributes &atts);
-          virtual bool endElement(const QString &namespaceURI, const QString &localName,
-                                  const QString &qName);
-
-        private:
-          Q_DISABLE_COPY(XmlHandler);
-
-          CnetEditorWidget *m_cnetEditor;
-      };
   };
 }
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.cpp b/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.cpp
index d0d3014f9ab08d400197e9cb0ad96d65e759069b..2824c1ede76c8978163f05f261619ebd3732c992 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.cpp
@@ -6,9 +6,9 @@
 
 
 namespace Isis {
-  ConnectionParentItem::ConnectionParentItem(ControlCubeGraphNode *node,
-      int avgCharWidth, AbstractTreeItem *parent)
-    : AbstractTreeItem(parent), AbstractImageItem(node, avgCharWidth) {
+  ConnectionParentItem::ConnectionParentItem(QString imageSerial, ControlNet *net,
+                                             int avgCharWidth, AbstractTreeItem *parent)
+        : AbstractTreeItem(parent), AbstractImageItem(imageSerial, net, avgCharWidth) {
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.h b/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.h
index fd38dd2caa3f502acc96cf07db70bfe65b496db1..5f09abd8c805534105d8db9728de89586cc5c2ec 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ConnectionParentItem.h
@@ -5,9 +5,10 @@
 #include "AbstractImageItem.h"
 #include "AbstractParentItem.h"
 
+class QString;
 
 namespace Isis {
-  class ControlCubeGraphNode;
+  class ControlNet;
 
   /**
    * @brief Tree item that is a parent and represents an image
@@ -17,14 +18,16 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class ConnectionParentItem : public AbstractImageItem,
     public AbstractParentItem {
     public:
-      ConnectionParentItem(ControlCubeGraphNode *node,
-          int avgCharWidth, AbstractTreeItem *parent = 0);
+      ConnectionParentItem(QString imageSerial, ControlNet *net,
+                           int avgCharWidth, AbstractTreeItem *parent = 0);
       virtual ~ConnectionParentItem();
 
       void addChild(AbstractTreeItem *child);
diff --git a/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.cpp b/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.cpp
index e05a3a6edaea62946697565d352f1d23ae2c4c77..a7bcb433681c0cfbedc37bed8421f82a12e194f9 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.cpp
@@ -8,6 +8,7 @@
 #include <QHBoxLayout>
 #include <QIcon>
 #include <QLabel>
+#include <QPair>
 #include <QPushButton>
 #include <QRadioButton>
 #include <QString>
@@ -71,8 +72,8 @@ namespace Isis {
   }
 
 
-  bool FilterWidget::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluate(node, &AbstractFilter::canFilterImages);
+  bool FilterWidget::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluate(imageAndNet, &AbstractFilter::canFilterImages);
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.h b/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.h
index a71955f929141521a38d901d40eeea4a3d09975c..bb10ec6dbebbf036505991e1fd6b3276e2975318 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/FilterWidget.h
@@ -11,6 +11,7 @@
 
 class QLabel;
 template< class T > class QList;
+template< typename U, typename V > struct QPair;
 class QPushButton;
 class QString;
 class QTextEdit;
@@ -18,7 +19,7 @@ class QVBoxLayout;
 
 
 namespace Isis {
-  class ControlCubeGraphNode;
+  class ControlNet;
   class ControlMeasure;
   class ControlPoint;
   class FilterGroup;
@@ -42,6 +43,10 @@ namespace Isis {
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2015-11-16 Ian Humphrey - Removed embedded icons. References #1041.
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class FilterWidget : public QWidget {
       Q_OBJECT
@@ -63,7 +68,7 @@ namespace Isis {
         for (int i = 0; looking && i < m_filterGroups->size(); i++) {
           if (m_filterGroups->at(i)->hasFilter(meth))
             looking = !(m_filterGroups->at(i)->evaluate(t, meth) ^
-                m_andGroupsTogether);
+                      m_andGroupsTogether);
         }
 
         // It is good that we are still looking for failures if we were
@@ -73,7 +78,7 @@ namespace Isis {
         return !(looking ^ m_andGroupsTogether) || !hasFilter(meth);
       }
 
-      bool evaluate(const ControlCubeGraphNode *node) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *point) const;
       bool evaluate(const ControlMeasure *measure) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.cpp
index 696804bc88776f56f928b0d4167503db0fd6ef39..7dd671821d36688df9f61bfb53599abddc2bca29 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.cpp
@@ -2,21 +2,25 @@
 
 #include "GoodnessOfFitFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
 #include "ControlMeasureLogData.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 #include "SpecialPixel.h"
 
 
 namespace Isis {
   GoodnessOfFitFilter::GoodnessOfFitFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  GoodnessOfFitFilter::GoodnessOfFitFilter(
-    const GoodnessOfFitFilter &other) : AbstractNumberFilter(other) {
+  GoodnessOfFitFilter::GoodnessOfFitFilter(const GoodnessOfFitFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -24,8 +28,8 @@ namespace Isis {
   }
 
 
-  bool GoodnessOfFitFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool GoodnessOfFitFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -36,9 +40,9 @@ namespace Isis {
 
   bool GoodnessOfFitFilter::evaluate(const ControlMeasure *measure) const {
     double goodness = Null;
+
     if (measure->HasLogData(ControlMeasureLogData::GoodnessOfFit)) {
-      goodness = measure->GetLogData(
-          ControlMeasureLogData::GoodnessOfFit).GetNumericalValue();
+      goodness = measure->GetLogData(ControlMeasureLogData::GoodnessOfFit).GetNumericalValue();
     }
 
     return AbstractNumberFilter::evaluate(goodness);
diff --git a/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.h b/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.h
index 22103bfccf55b7850094d79cb2f404d2d7143de8..b75f86474a00619f2d9fc02a8d8328efe2b112a3 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/GoodnessOfFitFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -22,20 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
-   *    
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class GoodnessOfFitFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       GoodnessOfFitFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       GoodnessOfFitFilter(const GoodnessOfFitFilter &other);
       virtual ~GoodnessOfFitFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.cpp
index 9f0227d444e82037ed542d5d6ca4826cfa292062..8f041b5b929c72ef14b35afd463d7d486d969686 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.cpp
@@ -2,24 +2,24 @@
 
 #include "ImageIdFilter.h"
 
+#include <QPair>
 #include <QString>
 
 #include "CnetDisplayProperties.h"
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "IString.h"
 
 
 namespace Isis {
   ImageIdFilter::ImageIdFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractStringFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractStringFilter(flag, minimumForSuccess) {
   }
 
 
-  ImageIdFilter::ImageIdFilter(
-    const ImageIdFilter &other): AbstractStringFilter(other) {
+  ImageIdFilter::ImageIdFilter(const ImageIdFilter &other): AbstractStringFilter(other) {
   }
 
 
@@ -27,11 +27,9 @@ namespace Isis {
   }
 
 
-  bool ImageIdFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
+  bool ImageIdFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
     return AbstractStringFilter::evaluate(
-        CnetDisplayProperties::getInstance()->getImageName(
-            (QString) node->getSerialNumber()));
+          CnetDisplayProperties::getInstance()->getImageName(imageAndNet->first));
   }
 
 
@@ -42,8 +40,8 @@ namespace Isis {
 
   bool ImageIdFilter::evaluate(const ControlMeasure *measure) const {
     return AbstractStringFilter::evaluate(
-        CnetDisplayProperties::getInstance()->getImageName(
-            (QString) measure->GetCubeSerialNumber()));
+          CnetDisplayProperties::getInstance()->getImageName(
+                (QString) measure->GetCubeSerialNumber()));
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.h b/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.h
index 82f3c1d7d59c6ad3dbf140c397407abf38dadbfc..e7ef1e6cf3cbf25f91ce45d622d6731bf6470e7e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageIdFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractStringFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -24,19 +22,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class ImageIdFilter : public AbstractStringFilter {
       Q_OBJECT
 
     public:
       ImageIdFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       ImageIdFilter(const ImageIdFilter &other);
       virtual ~ImageIdFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.cpp b/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.cpp
index d79dba245ac1e9f72c90b2fa72cdeab6552ad4e4..50ad80710854f2d289cb77d03d3f231caa181e18 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.cpp
@@ -10,7 +10,6 @@
 #include <QString>
 #include <QtConcurrentMap>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
 #include "ControlNet.h"
 
@@ -39,8 +38,9 @@ namespace Isis {
 
 
   ImageImageTreeModel::CreateRootItemFunctor::CreateRootItemFunctor(
-    AbstractTreeModel *tm, QThread *tt) {
+    AbstractTreeModel *tm, ControlNet *net, QThread *tt) {
     m_treeModel = tm;
+    m_controlNet = net;
     m_targetThread = tt;
     m_avgCharWidth = QFontMetrics(
         m_treeModel->getView()->getContentFont()).averageCharWidth();
@@ -50,6 +50,7 @@ namespace Isis {
   ImageImageTreeModel::CreateRootItemFunctor::CreateRootItemFunctor(
     const CreateRootItemFunctor &other) {
     m_treeModel = other.m_treeModel;
+    m_controlNet = other.m_controlNet;
     m_targetThread = other.m_targetThread;
     m_avgCharWidth = other.m_avgCharWidth;
   }
@@ -57,27 +58,28 @@ namespace Isis {
 
   ImageImageTreeModel::CreateRootItemFunctor::~CreateRootItemFunctor() {
     m_treeModel = NULL;
+    m_controlNet = NULL;
     m_targetThread = NULL;
   }
 
 
   ImageParentItem *ImageImageTreeModel::CreateRootItemFunctor::operator()(
-    ControlCubeGraphNode *const &node) const {
+    const QString imageSerial) const {
+
     ImageParentItem *parentItem =
-      new ImageParentItem(node, m_avgCharWidth);
+          new ImageParentItem(imageSerial, m_controlNet, m_avgCharWidth);
     parentItem->setSelectable(false);
     parentItem->moveToThread(m_targetThread);
 
-    QList< ControlCubeGraphNode * > connectedNodes = node->getAdjacentNodes();
+    QList< QString > connectedImages = m_controlNet->getAdjacentImages(imageSerial);
 
-    for (int j = 0; j < connectedNodes.size(); j++) {
-      ControlCubeGraphNode *connectedNode = connectedNodes[j];
-      ImageLeafItem *serialItem =
-        new ImageLeafItem(connectedNode, m_avgCharWidth, parentItem);
-      serialItem->setSelectable(false);
-      serialItem->moveToThread(m_targetThread);
+    for (int j = 0; j < connectedImages.size(); j++) {
+      ImageLeafItem *childItem =
+            new ImageLeafItem(connectedImages[j], m_controlNet, m_avgCharWidth, parentItem);
+      childItem->setSelectable(false);
+      childItem->moveToThread(m_targetThread);
 
-      parentItem->addChild(serialItem);
+      parentItem->addChild(childItem);
     }
 
     return parentItem;
@@ -126,8 +128,8 @@ namespace Isis {
       }
 
       futureRoot = QtConcurrent::mappedReduced(
-          getControlNetwork()->GetCubeGraphNodes(),
-          CreateRootItemFunctor(this, QThread::currentThread()),
+          getControlNetwork()->GetCubeSerials(),
+          CreateRootItemFunctor(this, getControlNetwork(), QThread::currentThread()),
           &CreateRootItemFunctor::addToRootItem,
           QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.h b/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.h
index 662c17bb5aab0db6b08fc9bf378eeb25253f1f65..e595a254518e22817609ab45216b62f7fddc5c1e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageImageTreeModel.h
@@ -14,7 +14,6 @@ class QString;
 
 
 namespace Isis {
-  class ControlCubeGraphNode;
   class ControlNet;
   class ImageParentItem;
   class TreeView;
@@ -36,6 +35,8 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class ImageImageTreeModel : public AbstractTreeModel {
       Q_OBJECT
@@ -60,12 +61,12 @@ namespace Isis {
        *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
        */
       class CreateRootItemFunctor : public std::unary_function <
-          ControlCubeGraphNode *const &, ImageParentItem * > {
+          const QString, ImageParentItem * > {
         public:
-          CreateRootItemFunctor(AbstractTreeModel *tm, QThread *tt);
+          CreateRootItemFunctor(AbstractTreeModel *tm, ControlNet *net, QThread *tt);
           CreateRootItemFunctor(const CreateRootItemFunctor &);
           ~CreateRootItemFunctor();
-          ImageParentItem *operator()(ControlCubeGraphNode *const &)
+          ImageParentItem *operator()(const QString imageSerial)
           const;
           CreateRootItemFunctor &operator=(const CreateRootItemFunctor &);
 
@@ -76,6 +77,7 @@ namespace Isis {
           int m_avgCharWidth;
           AbstractTreeModel *m_treeModel;
           QThread *m_targetThread;
+          ControlNet *m_controlNet;
       };
   };
 }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.cpp b/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.cpp
index c9513edb9acf320ebc6d82222126c10662f75e1b..bcdcac8f2dd98304acdc94131fca63867855881c 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.cpp
@@ -4,9 +4,9 @@
 
 
 namespace Isis {
-  ImageLeafItem::ImageLeafItem(ControlCubeGraphNode *node,
-      int avgCharWidth, AbstractTreeItem *parent)
-    : AbstractTreeItem(parent), AbstractImageItem(node, avgCharWidth) {
+  ImageLeafItem::ImageLeafItem(QString imageSerial, ControlNet *net,
+                               int avgCharWidth, AbstractTreeItem *parent)
+        : AbstractTreeItem(parent), AbstractImageItem(imageSerial, net, avgCharWidth) {
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.h b/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.h
index 1776f6f9217b01aa6e3bb771f8459a94d692c8ce..c9cb9dd2a4adf361565da5d50a9da1bf52191d6e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageLeafItem.h
@@ -1,13 +1,14 @@
 #ifndef ImageLeafItem_H
 #define ImageLeafItem_H
 
+#include <QString>
 
 #include "AbstractImageItem.h"
 #include "AbstractLeafItem.h"
 
 
 namespace Isis {
-  class ControlCubeGraphNode;
+  class ControlNet;
 
   /**
    * @brief Tree item that is a leaf and represents an image
@@ -17,13 +18,15 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class ImageLeafItem : public AbstractImageItem, public AbstractLeafItem {
     public:
-      ImageLeafItem(ControlCubeGraphNode *node,
-          int avgCharWidth, AbstractTreeItem *parent = 0);
+      ImageLeafItem(QString imageSerial, ControlNet *net,
+                    int avgCharWidth, AbstractTreeItem *parent = 0);
       virtual ~ImageLeafItem();
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.cpp b/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.cpp
index 2a55b3938b51cccf566f7db85fa791d5f969f1ed..d99de2b36a559bce265e55c4d41fb971300ca244 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.cpp
@@ -2,11 +2,12 @@
 
 #include "ImageParentItem.h"
 
+#include "ControlNet.h"
 
 namespace Isis {
-  ImageParentItem::ImageParentItem(ControlCubeGraphNode *node,
-      int avgCharWidth, AbstractTreeItem *parent)
-    : AbstractTreeItem(parent), AbstractImageItem(node, avgCharWidth) {
+  ImageParentItem::ImageParentItem(QString imageSerial, ControlNet *net,
+                                   int avgCharWidth, AbstractTreeItem *parent)
+        : AbstractTreeItem(parent), AbstractImageItem(imageSerial, net, avgCharWidth) {
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.h b/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.h
index dce3fa6865ef12a4d20771409223032d3f38719e..82777e57c9661a367bd4d52b020de06be6f9923e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImageParentItem.h
@@ -1,13 +1,14 @@
 #ifndef ImageParentItem_H
 #define ImageParentItem_H
 
+#include <QString>
 
 #include "AbstractImageItem.h"
 #include "AbstractParentItem.h"
 
 
 namespace Isis {
-  class ControlCubeGraphNode;
+  class ControlNet;
 
   /**
    * @brief Tree item that is a parent and represents an image
@@ -17,13 +18,15 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class ImageParentItem : public AbstractImageItem, public AbstractParentItem {
     public:
-      ImageParentItem(ControlCubeGraphNode *node,
-          int avgCharWidth, AbstractTreeItem *parent = 0);
+      ImageParentItem(QString imageSerial, ControlNet *net,
+                      int avgCharWidth, AbstractTreeItem *parent = 0);
       virtual ~ImageParentItem();
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.cpp b/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.cpp
index ae7eeef75cd04e1f4d8b8852e4ad747489a4ac36..dffafa341511fcaac4b992e0b623938052e04739 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.cpp
@@ -50,12 +50,12 @@ namespace Isis {
   }
 
 
-  ImagePointFilterSelector::ImagePointFilterSelector(
-    const ImagePointFilterSelector &other) {
+  ImagePointFilterSelector::ImagePointFilterSelector(const ImagePointFilterSelector &other) {
     createSelector();
     getSelector()->setCurrentIndex(other.getSelector()->currentIndex());
-    if (other.getFilter())
+    if (other.getFilter()) {
       setFilter(other.getFilter()->clone());
+    }
   }
 
 
@@ -64,7 +64,7 @@ namespace Isis {
 
 
   ImagePointFilterSelector &ImagePointFilterSelector::operator=(
-    const ImagePointFilterSelector &other) {
+        const ImagePointFilterSelector &other) {
     *((AbstractFilterSelector *) this) = other;
     return *this;
   }
@@ -229,4 +229,3 @@ namespace Isis {
     emit filterChanged();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.h b/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.h
index 7979b1eec245b3ba1590980a4632914793d3a6c0..a18ddb8302543c78bbb50af0178f44a9524bc6c6 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImagePointFilterSelector.h
@@ -6,7 +6,6 @@
 
 
 namespace Isis {
-  class AbstractFilter;
 
   /**
    * @brief Allows users to choose filters for filtering images and points
@@ -16,8 +15,8 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
    */
   class ImagePointFilterSelector : public AbstractFilterSelector {
       Q_OBJECT
@@ -26,8 +25,7 @@ namespace Isis {
       ImagePointFilterSelector();
       ImagePointFilterSelector(const ImagePointFilterSelector &other);
       virtual ~ImagePointFilterSelector();
-      ImagePointFilterSelector &operator=(
-        const ImagePointFilterSelector &other);
+      ImagePointFilterSelector &operator=(const ImagePointFilterSelector &other);
 
 
     protected:
@@ -40,4 +38,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.cpp b/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.cpp
index c79efea2e9e576c6661563546218d49260ab3ec1..c22981e1ce6a5ecaec42646778ab6601ca15d433 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.cpp
@@ -11,7 +11,6 @@
 #include <QString>
 #include <QtConcurrentMap>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
 #include "ControlNet.h"
 #include "ControlPoint.h"
@@ -41,8 +40,9 @@ namespace Isis {
 
 
   ImagePointTreeModel::CreateRootItemFunctor::CreateRootItemFunctor(
-    AbstractTreeModel *tm, QThread *tt) {
+    AbstractTreeModel *tm, ControlNet *net, QThread *tt) {
     m_treeModel = tm;
+    m_controlNet = net;
     m_targetThread = tt;
     m_avgCharWidth = QFontMetrics(
         m_treeModel->getView()->getContentFont()).averageCharWidth();
@@ -52,6 +52,7 @@ namespace Isis {
   ImagePointTreeModel::CreateRootItemFunctor::CreateRootItemFunctor(
     const CreateRootItemFunctor &other) {
     m_treeModel = other.m_treeModel;
+    m_controlNet = other.m_controlNet;
     m_targetThread = other.m_targetThread;
     m_avgCharWidth = other.m_avgCharWidth;
   }
@@ -59,18 +60,21 @@ namespace Isis {
 
   ImagePointTreeModel::CreateRootItemFunctor::~CreateRootItemFunctor() {
     m_targetThread = NULL;
+    m_controlNet = NULL;
     m_treeModel = NULL;
   }
 
 
   ImageParentItem *ImagePointTreeModel::CreateRootItemFunctor::operator()(
-    ControlCubeGraphNode *const &node) const {
+    QString imageSerial) const {
     ImageParentItem *imageItem = NULL;
 
-    imageItem = new ImageParentItem(node, m_avgCharWidth);
+    // TODO connect parent item destroy to image removed from network
+
+    imageItem = new ImageParentItem(imageSerial, m_controlNet, m_avgCharWidth);
     imageItem->setSelectable(false);
     imageItem->moveToThread(m_targetThread);
-    QList< ControlMeasure * > measures = node->getMeasures();
+    QList< ControlMeasure * > measures = m_controlNet->GetMeasuresInCube(imageSerial);
     for (int j = 0; j < measures.size(); j++) {
       ASSERT(measures[j]);
       ControlPoint *point = measures[j]->Parent();
@@ -129,8 +133,8 @@ namespace Isis {
       }
 
       futureRoot = QtConcurrent::mappedReduced(
-          getControlNetwork()->GetCubeGraphNodes(),
-          CreateRootItemFunctor(this, QThread::currentThread()),
+          getControlNetwork()->GetCubeSerials(),
+          CreateRootItemFunctor(this, getControlNetwork(), QThread::currentThread()),
           &CreateRootItemFunctor::addToRootItem,
           QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.h b/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.h
index 3835cff8be60f97d0a392c904026bf6765678322..02347d9c34c8bd8736d63bf049c5f1ca132efb37 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ImagePointTreeModel.h
@@ -13,7 +13,6 @@ class QString;
 
 
 namespace Isis {
-  class ControlCubeGraphNode;
   class ControlNet;
   class ImageParentItem;
   class TreeView;
@@ -35,6 +34,8 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
    */
   class ImagePointTreeModel : public AbstractTreeModel {
       Q_OBJECT
@@ -58,12 +59,12 @@ namespace Isis {
        * @internal
        */
       class CreateRootItemFunctor : public std::unary_function <
-          ControlCubeGraphNode *const &, ImageParentItem * > {
+          const QString, ImageParentItem * > {
         public:
-          CreateRootItemFunctor(AbstractTreeModel *tm, QThread *tt);
+          CreateRootItemFunctor(AbstractTreeModel *tm, ControlNet *net, QThread *tt);
           CreateRootItemFunctor(const CreateRootItemFunctor &);
           ~CreateRootItemFunctor();
-          ImageParentItem *operator()(ControlCubeGraphNode *const &) const;
+          ImageParentItem *operator()(const QString imageSerial) const;
           CreateRootItemFunctor &operator=(const CreateRootItemFunctor &);
 
           static void addToRootItem(QAtomicPointer< RootItem > &,
@@ -73,6 +74,7 @@ namespace Isis {
           int m_avgCharWidth;
           AbstractTreeModel *m_treeModel;
           QThread *m_targetThread;
+          ControlNet *m_controlNet;
       };
   };
 }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/LineFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/LineFilter.cpp
index 10e1305bfe4fe9d50ffae0539b763762d2d3c176..3a51b82c4b84f00de4dedf10f52f0ecb5b8bf105 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/LineFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/LineFilter.cpp
@@ -2,19 +2,22 @@
 
 #include "LineFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   LineFilter::LineFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  LineFilter::LineFilter(const LineFilter &other)
-    : AbstractNumberFilter(other) {
+  LineFilter::LineFilter(const LineFilter &other) : AbstractNumberFilter(other) {
   }
 
 
@@ -22,8 +25,8 @@ namespace Isis {
   }
 
 
-  bool LineFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool LineFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -44,10 +47,12 @@ namespace Isis {
 
   QString LineFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that has a line which is ";
-    else
+    }
+    else {
       description += "measures that have lines which are ";
+    }
 
     description += descriptionSuffix();
     return description;
diff --git a/isis/src/qisis/objs/CnetEditorWidget/LineFilter.h b/isis/src/qisis/objs/CnetEditorWidget/LineFilter.h
index 15e6cfb3814bc236e18f7ea3b5996225e29c66fc..7b7ae9ec8900d4954d8913221ca48b2f4a587de8 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/LineFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/LineFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,20 +21,23 @@ namespace Isis {
    *
    * @author 2012-01-05 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
-   *    
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class LineFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       LineFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       LineFilter(const LineFilter &other);
       virtual ~LineFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -49,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.cpp
index 74752fcf10930c64e9398c98ff0e2388752dc9bf..0091e3be206b493570453389aa97facf10e0b16b 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "LineResidualFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   LineResidualFilter::LineResidualFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
   LineResidualFilter::LineResidualFilter(const LineResidualFilter &other)
-    : AbstractNumberFilter(other) {
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -22,8 +26,8 @@ namespace Isis {
   }
 
 
-  bool LineResidualFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool LineResidualFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -44,10 +48,13 @@ namespace Isis {
 
   QString LineResidualFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+
+    if (getMinForSuccess() == 1) {
       description += "measure that has a line residual which is ";
-    else
+    }
+    else {
       description += "measures that have line residuals which are ";
+    }
 
     description += descriptionSuffix();
     return description;
@@ -63,4 +70,3 @@ namespace Isis {
     return "have line residuals which are " + descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.h b/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.h
index 949c0edfb820abd812cf602a494d7c322345cf3a..95e56ed37dbc529b50f28dd3e0c6ebb529969976 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/LineResidualFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -22,19 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class LineResidualFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       LineResidualFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       LineResidualFilter(const LineResidualFilter &other);
       virtual ~LineResidualFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.cpp
index 8f60cd2bb2b2ba968d4d6517d06a1a028aa06891..a4742086e078324de11342d0916301e93482d4d8 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.cpp
@@ -2,19 +2,22 @@
 
 #include "LineShiftFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   LineShiftFilter::LineShiftFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  LineShiftFilter::LineShiftFilter(const LineShiftFilter &other)
-    : AbstractNumberFilter(other) {
+  LineShiftFilter::LineShiftFilter(const LineShiftFilter &other) : AbstractNumberFilter(other) {
   }
 
 
@@ -22,8 +25,8 @@ namespace Isis {
   }
 
 
-  bool LineShiftFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool LineShiftFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -63,4 +66,3 @@ namespace Isis {
     return "have line shifts which are " + descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.h b/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.h
index c22b9021ac3d3cd8faccfc7b70ef0a16a1ff604d..298dc1ea7a6f47fe2057d0fcdb9385e095849082 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/LineShiftFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -24,19 +22,23 @@ namespace Isis {
    *
    * @author 2012-04-18 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class LineShiftFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       LineShiftFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       LineShiftFilter(const LineShiftFilter &other);
       virtual ~LineShiftFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -49,4 +51,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.cpp
index 136a1289eb82adcb46f7b260e899918bc9555824..8a78023184e1e3e545fcaa2442afb74f592bdaf2 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.cpp
@@ -10,25 +10,26 @@
 #include <QLabel>
 #include <QLineEdit>
 #include <QMargins>
+#include <QPair>
 #include <QRadioButton>
 #include <QSpinBox>
+#include <QString>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 
 
 namespace Isis {
   MeasureCountFilter::MeasureCountFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
     init();
     createWidget();
   }
 
 
-  MeasureCountFilter::MeasureCountFilter(const MeasureCountFilter &other)
-    : AbstractFilter(other) {
+  MeasureCountFilter::MeasureCountFilter(const MeasureCountFilter &other) : AbstractFilter(other) {
     init();
     createWidget();
 
@@ -84,14 +85,14 @@ namespace Isis {
   }
 
 
-  bool MeasureCountFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return AbstractFilter::evaluateImageFromPointFilter(node);
+  bool MeasureCountFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool MeasureCountFilter::evaluate(const ControlPoint *point) const {
     return (point->getMeasures().size() >= m_count && m_minimum) ||
-        (point->getMeasures().size() <= m_count && !m_minimum);
+           (point->getMeasures().size() <= m_count && !m_minimum);
   }
 
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.h b/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.h
index 0a985fc21a26584d055e1b6742c47e6057dcb9c7..a3a66c6a13663600190f484a555cf26e3c85cc44 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureCountFilter.h
@@ -2,20 +2,19 @@
 #define MeasureCountFilter_H
 
 
-// parent
 #include "AbstractFilter.h"
 
-
 class QButtonGroup;
 class QLineEdit;
+template< typename U, typename V > struct QPair;
 class QSpinBox;
 class QString;
 
 
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Allows filtering by the number of measures in a control point
@@ -29,17 +28,21 @@ namespace Isis {
    * @internal
    *   @history 2012-09-28 Kimberly Oyama - Changed member variables to be prefixed with "m_".
    *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class MeasureCountFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       MeasureCountFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       MeasureCountFilter(const MeasureCountFilter &other);
       virtual ~MeasureCountFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.cpp
index 39f451a15bbfc350563f762e1074331df002ce2b..db1bc8fa7f8228f3fe6ce667d88d3f7e971d5758 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.cpp
@@ -2,18 +2,18 @@
 
 #include "MeasureIgnoredFilter.h"
 
-#include <iostream>
+#include <QPair>
+#include <QString>
 
-#include <QHBoxLayout>
-
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   MeasureIgnoredFilter::MeasureIgnoredFilter(
-    AbstractFilter::FilterEffectivenessFlag flag, int minimumForSuccess) :
-    AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
   }
 
 
@@ -21,8 +21,8 @@ namespace Isis {
   }
 
 
-  bool MeasureIgnoredFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return AbstractFilter::evaluateImageFromMeasureFilter(node);
+  bool MeasureIgnoredFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return AbstractFilter::evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -43,15 +43,19 @@ namespace Isis {
 
   QString MeasureIgnoredFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that is ";
-    else
+    }
+    else {
       description += "measures that are ";
+    }
 
-    if (inclusive())
+    if (inclusive()) {
       description += "ignored";
-    else
+    }
+    else {
       description += "not ignored";
+    }
 
     return description;
   }
@@ -65,10 +69,12 @@ namespace Isis {
   QString MeasureIgnoredFilter::getMeasureDescription() const {
     QString description = "are ";
 
-    if (inclusive())
+    if (inclusive()) {
       description += "ignored";
-    else
+    }
+    else {
       description += "not ignored";
+    }
 
     return description;
   }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.h b/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.h
index d608cc61bd1d4c3d565521bdea3746a783d8c319..d09ef753121d9f9de3c68d48e6ffd9474cf90237 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureIgnoredFilter.h
@@ -3,11 +3,13 @@
 
 #include "AbstractFilter.h"
 
+template< typename U, typename V > struct QPair;
+class QString;
 
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Allows filtering by a control measure's ignored status
@@ -18,18 +20,22 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *    @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class MeasureIgnoredFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       MeasureIgnoredFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       virtual ~MeasureIgnoredFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.cpp
index 034feb5ea9e2c16b9c958b049eef18fb811e9026..01a034cb661670ef83502430d9fcd7ae868ed12d 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.cpp
@@ -2,21 +2,20 @@
 
 #include "MeasureJigsawRejectedFilter.h"
 
-#include <iostream>
+#include <QPair>
+#include <QString>
 
-#include <QHBoxLayout>
-
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
-
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 using std::cerr;
 
 
 namespace Isis {
   MeasureJigsawRejectedFilter::MeasureJigsawRejectedFilter(
-    AbstractFilter::FilterEffectivenessFlag flag, int minimumForSuccess) :
-    AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag, int minimumForSuccess) :
+        AbstractFilter(flag, minimumForSuccess) {
   }
 
 
@@ -24,8 +23,9 @@ namespace Isis {
   }
 
 
-  bool MeasureJigsawRejectedFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return AbstractFilter::evaluateImageFromMeasureFilter(node);
+  bool MeasureJigsawRejectedFilter::evaluate(
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return AbstractFilter::evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -46,15 +46,19 @@ namespace Isis {
 
   QString MeasureJigsawRejectedFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that is ";
-    else
+    }
+    else {
       description += "measures that are ";
+    }
 
-    if (inclusive())
+    if (inclusive()) {
       description += "jigsaw rejected";
-    else
+    }
+    else {
       description += "not jigsaw rejected";
+    }
 
     return description;
   }
@@ -68,12 +72,13 @@ namespace Isis {
   QString MeasureJigsawRejectedFilter::getMeasureDescription() const {
     QString description = "are ";
 
-    if (inclusive())
+    if (inclusive()) {
       description += "jigsaw rejected";
-    else
+    }
+    else {
       description += "not jigsaw rejected";
+    }
 
     return description;
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.h b/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.h
index efa38b6207b7f4307ced02dfe1eaa44642be856f..cfecbb11aee7c18f7e48fd5c351b7c9cc470d7fa 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureJigsawRejectedFilter.h
@@ -3,11 +3,13 @@
 
 #include "AbstractFilter.h"
 
+template< typename U, typename V > struct QPair;
+class QString;
 
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Allows filtering by a control measure's jigsaw rejected status
@@ -18,18 +20,22 @@ namespace Isis {
    *
    * @author 2012-04-18 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class MeasureJigsawRejectedFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       MeasureJigsawRejectedFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       virtual ~MeasureJigsawRejectedFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -42,4 +48,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.cpp
index bccb60a2dff806eeab632bb39b5e2ab22a638bde..4b2b9daaae5fc637c8b8fba5c637ecee7bc05605 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.cpp
@@ -2,18 +2,20 @@
 
 #include "MeasureTypeFilter.h"
 
+#include <QPair>
 #include <QString>
 #include <QStringList>
 
-#include "ControlCubeGraphNode.h"
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 #include "IString.h"
 
 
 namespace Isis {
   MeasureTypeFilter::MeasureTypeFilter(
-    AbstractFilter::FilterEffectivenessFlag flag, int minimumForSuccess) :
-    AbstractMultipleChoiceFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag, int minimumForSuccess) :
+        AbstractMultipleChoiceFilter(flag, minimumForSuccess) {
     QStringList options;
     options << "Candidate" << "Manual" << "RegisteredPixel" <<
         "RegisteredSubPixel";
@@ -22,7 +24,7 @@ namespace Isis {
 
 
   MeasureTypeFilter::MeasureTypeFilter(const MeasureTypeFilter &other)
-    : AbstractMultipleChoiceFilter(other) {
+        : AbstractMultipleChoiceFilter(other) {
   }
 
 
@@ -30,8 +32,8 @@ namespace Isis {
   }
 
 
-  bool MeasureTypeFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool MeasureTypeFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -42,7 +44,7 @@ namespace Isis {
 
   bool MeasureTypeFilter::evaluate(const ControlMeasure *measure) const {
     return ((QString) measure->GetMeasureTypeString() == getCurrentChoice()) ^
-        !inclusive();
+           !inclusive();
   }
 
 
@@ -54,20 +56,25 @@ namespace Isis {
   QString MeasureTypeFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription() + "measure";
 
-    if (getMinForSuccess() != 1)
+    if (getMinForSuccess() != 1) {
       description += "s ";
-    else
+    }
+    else {
       description += " ";
+    }
 
     description += "that ";
 
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "is ";
-    else
+    }
+    else {
       description += "are ";
+    }
 
-    if (!inclusive())
+    if (!inclusive()) {
       description += "not ";
+    }
 
     description += " of type " + getCurrentChoice();
 
@@ -78,8 +85,9 @@ namespace Isis {
   QString MeasureTypeFilter::getMeasureDescription() const {
     QString description = "are ";
 
-    if (!inclusive())
+    if (!inclusive()) {
       description += "not ";
+    }
 
     description += "of type " + getCurrentChoice();
 
@@ -91,4 +99,3 @@ namespace Isis {
     return getImageDescription();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.h
index 06b767923a1bd70032c60b2dca1d86937bb51b6e..5b2fa0ba15016da645c6a3a606fec3b7cdf46101 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/MeasureTypeFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractMultipleChoiceFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Filters by measure type
@@ -22,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-01-05 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class MeasureTypeFilter : public AbstractMultipleChoiceFilter {
       Q_OBJECT
 
     public:
       MeasureTypeFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       MeasureTypeFilter(const MeasureTypeFilter &other);
       virtual ~MeasureTypeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -47,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.cpp
index e0d683d3e1771aad6fe95760751a12a323298e2a..c351b97ff3380298ee09c9f35e7c4af03927402e 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.cpp
@@ -2,23 +2,23 @@
 
 #include "PointEditLockedFilter.h"
 
-#include <iostream>
-
-#include <QHBoxLayout>
+#include <QPair>
+#include <QString>
 
 #include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 
 
 namespace Isis {
   PointEditLockedFilter::PointEditLockedFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
   }
 
 
   PointEditLockedFilter::PointEditLockedFilter(const AbstractFilter &other)
-    : AbstractFilter(other) {
+        : AbstractFilter(other) {
   }
 
 
@@ -26,9 +26,8 @@ namespace Isis {
   }
 
 
-  bool PointEditLockedFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return AbstractFilter::evaluateImageFromPointFilter(node);
+  bool PointEditLockedFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
   }
 
 
@@ -50,15 +49,19 @@ namespace Isis {
   QString PointEditLockedFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
 
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "point that is ";
-    else
+    }
+    else {
       description += "points that are ";
+    }
 
-    if (inclusive())
+    if (inclusive()) {
       description += "edit locked";
-    else
+    }
+    else {
       description += "not edit locked";
+    }
 
     return description;
   }
@@ -67,10 +70,12 @@ namespace Isis {
   QString PointEditLockedFilter::getPointDescription() const {
     QString description = "are ";
 
-    if (inclusive())
+    if (inclusive()) {
       description += "edit locked";
-    else
+    }
+    else {
       description += "not edit locked";
+    }
 
     return description;
   }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.h b/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.h
index f64dc441a9c33960e09bb726896299759dc57a02..2f3048b6905bdca6ce175969c416bfe098411872 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointEditLockedFilter.h
@@ -3,11 +3,13 @@
 
 #include "AbstractFilter.h"
 
+template< typename U, typename V > struct QPair;
+class QString;
 
 namespace Isis {
-  class ControlCubeGraphNode;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Allows filtering by a control point's edit lock status
@@ -18,19 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class PointEditLockedFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       PointEditLockedFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       PointEditLockedFilter(const AbstractFilter &other);
       virtual ~PointEditLockedFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.cpp
index 4d29826e14cf01084637b4d62afbb3cebc665fd5..43e6810f106f8cce19163ded09c19f83c6ef55a1 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.cpp
@@ -2,21 +2,23 @@
 
 #include "PointIdFilter.h"
 
+#include <QPair>
 #include <QString>
 
-#include "ControlCubeGraphNode.h"
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "IString.h"
 
 
 namespace Isis {
-  PointIdFilter::PointIdFilter(AbstractFilter::FilterEffectivenessFlag flag,
-      int minimumForSuccess) : AbstractStringFilter(flag, minimumForSuccess) {
+  PointIdFilter::PointIdFilter(
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractStringFilter(flag, minimumForSuccess) {
   }
 
 
-  PointIdFilter::PointIdFilter(const PointIdFilter &other)
-    : AbstractStringFilter(other) {
+  PointIdFilter::PointIdFilter(const PointIdFilter &other) : AbstractStringFilter(other) {
   }
 
 
@@ -24,8 +26,8 @@ namespace Isis {
   }
 
 
-  bool PointIdFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool PointIdFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
@@ -47,10 +49,12 @@ namespace Isis {
   QString PointIdFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
 
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "point with it's ID ";
-    else
+    }
+    else {
       description += "points with IDs ";
+    }
 
     description += descriptionSuffix();
     return description;
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.h b/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.h
index 79336271a2baaf4c15644a2d12771228661df9f1..34da4e35ef275fa068132f146eb607805beaa928 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointIdFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractStringFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Filter by control point id string
@@ -21,19 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class PointIdFilter : public AbstractStringFilter {
       Q_OBJECT
 
     public:
       PointIdFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       PointIdFilter(const PointIdFilter &other);
       virtual ~PointIdFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.cpp
index 56f27d64468eb7d869cb1c907d7ba71b2f22de0a..440fddb93b734444682333472ced150b27102e7d 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.cpp
@@ -2,23 +2,22 @@
 
 #include "PointIgnoredFilter.h"
 
-#include <iostream>
+#include <QPair>
+#include <QString>
 
-#include <QHBoxLayout>
-
-#include "ControlCubeGraphNode.h"
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 
 
 namespace Isis {
   PointIgnoredFilter::PointIgnoredFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
   }
 
 
-  PointIgnoredFilter::PointIgnoredFilter(const AbstractFilter &other)
-    : AbstractFilter(other) {
+  PointIgnoredFilter::PointIgnoredFilter(const AbstractFilter &other) : AbstractFilter(other) {
   }
 
 
@@ -26,8 +25,8 @@ namespace Isis {
   }
 
 
-  bool PointIgnoredFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return AbstractFilter::evaluateImageFromPointFilter(node);
+  bool PointIgnoredFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
   }
 
 
@@ -49,15 +48,19 @@ namespace Isis {
   QString PointIgnoredFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
 
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "point that is ";
-    else
+    }
+    else {
       description += "points that are ";
+    }
 
-    if (inclusive())
+    if (inclusive()) {
       description += "ignored";
-    else
+    }
+    else {
       description += "not ignored";
+    }
 
     return description;
   }
@@ -66,10 +69,12 @@ namespace Isis {
   QString PointIgnoredFilter::getPointDescription() const {
     QString description = "are ";
 
-    if (inclusive())
+    if (inclusive()) {
       description += "ignored";
-    else
+    }
+    else {
       description += "not ignored";
+    }
 
     return description;
   }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.h b/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.h
index 7661e36377778546c5f346a9ca07556a4cb15da6..7ef7d2e2676c77a5b91154639bfe20b28e11106c 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointIgnoredFilter.h
@@ -3,11 +3,12 @@
 
 #include "AbstractFilter.h"
 
+template< typename U, typename V > struct QPair;
+class QString;
 
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -19,19 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class PointIgnoredFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       PointIgnoredFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       PointIgnoredFilter(const AbstractFilter &other);
       virtual ~PointIgnoredFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.cpp
index f082306cc7581e562330be5af5ecbba4b88271ae..0d628de472bd23fc534e548e6b7a26fac78fa003 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.cpp
@@ -2,11 +2,11 @@
 
 #include "PointJigsawRejectedFilter.h"
 
-#include <iostream>
-
-#include <QHBoxLayout>
+#include <QPair>
+#include <QString>
 
 #include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 
 
@@ -15,13 +15,13 @@ using std::cerr;
 
 namespace Isis {
   PointJigsawRejectedFilter::PointJigsawRejectedFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
   }
 
 
-  PointJigsawRejectedFilter::PointJigsawRejectedFilter(
-    const AbstractFilter &other) : AbstractFilter(other) {
+  PointJigsawRejectedFilter::PointJigsawRejectedFilter(const AbstractFilter &other)
+        : AbstractFilter(other) {
   }
 
 
@@ -30,8 +30,8 @@ namespace Isis {
 
 
   bool PointJigsawRejectedFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return AbstractFilter::evaluateImageFromPointFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
   }
 
 
@@ -53,15 +53,19 @@ namespace Isis {
   QString PointJigsawRejectedFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
 
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "point that is ";
-    else
+    }
+    else {
       description += "points that are ";
+    }
 
-    if (inclusive())
+    if (inclusive()) {
       description += "jigsaw rejected";
-    else
+    }
+    else {
       description += "not jigsaw rejected";
+    }
 
     return description;
   }
@@ -70,12 +74,13 @@ namespace Isis {
   QString PointJigsawRejectedFilter::getPointDescription() const {
     QString description = "are ";
 
-    if (inclusive())
+    if (inclusive()) {
       description += "jigsaw rejected";
-    else
+    }
+    else {
       description += "not jigsaw rejected";
+    }
 
     return description;
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.h b/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.h
index ca83c7f7f23e8fbb616003521a083b32f2e7b2d3..928c1d99abf20e0f54a8f950c55771610ff5b57a 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointJigsawRejectedFilter.h
@@ -3,11 +3,13 @@
 
 #include "AbstractFilter.h"
 
+template< typename U, typename V > struct QPair;
+class QString;
 
 namespace Isis {
-  class ControlCubeGraphNode;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Allows filtering by a control point's jigsaw rejected status
@@ -18,19 +20,23 @@ namespace Isis {
    *
    * @author 2012-04-18 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class PointJigsawRejectedFilter : public AbstractFilter {
       Q_OBJECT
 
     public:
       PointJigsawRejectedFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       PointJigsawRejectedFilter(const AbstractFilter &other);
       virtual ~PointJigsawRejectedFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -42,4 +48,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.cpp
index d7370f0ec2828e4eb8620ab4cbf862ce25f79494..dddae5720179f83bde691b7327eac00a2eef828d 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.cpp
@@ -2,18 +2,20 @@
 
 #include "PointTypeFilter.h"
 
+#include <QPair>
 #include <QString>
 #include <QStringList>
 
-#include "ControlCubeGraphNode.h"
+#include "ControlMeasure.h"
+#include "ControlNet.h"
 #include "ControlPoint.h"
 #include "IString.h"
 
 
 namespace Isis {
-  PointTypeFilter::PointTypeFilter(AbstractFilter::FilterEffectivenessFlag flag,
-      int minimumForSuccess) :
-    AbstractMultipleChoiceFilter(flag, minimumForSuccess) {
+  PointTypeFilter::PointTypeFilter(
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractMultipleChoiceFilter(flag, minimumForSuccess) {
     QStringList options;
     options << "Fixed" << "Constrained" << "Free";
     createWidget(options);
@@ -21,7 +23,7 @@ namespace Isis {
 
 
   PointTypeFilter::PointTypeFilter(const PointTypeFilter &other)
-    : AbstractMultipleChoiceFilter(other) {
+        : AbstractMultipleChoiceFilter(other) {
   }
 
 
@@ -29,14 +31,14 @@ namespace Isis {
   }
 
 
-  bool PointTypeFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromPointFilter(node);
+  bool PointTypeFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromPointFilter(imageAndNet);
   }
 
 
   bool PointTypeFilter::evaluate(const ControlPoint *point) const {
     return ((QString) point->GetPointTypeString() == getCurrentChoice()) ^
-        !inclusive();
+           !inclusive();
   }
 
 
@@ -53,20 +55,25 @@ namespace Isis {
   QString PointTypeFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription() + "point";
 
-    if (getMinForSuccess() != 1)
+    if (getMinForSuccess() != 1) {
       description += "s ";
-    else
+    }
+    else {
       description += " ";
+    }
 
     description += "that ";
 
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "is ";
-    else
+    }
+    else {
       description += "are ";
+    }
 
-    if (!inclusive())
+    if (!inclusive()) {
       description += "not ";
+    }
 
     description += " of type " + getCurrentChoice();
 
@@ -77,8 +84,9 @@ namespace Isis {
   QString PointTypeFilter::getPointDescription() const {
     QString description = "are ";
 
-    if (!inclusive())
+    if (!inclusive()) {
       description += "not ";
+    }
 
     description += "of type " + getCurrentChoice();
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.h
index 47a260bfb6afb0a94954140dd0049312aaca16af..5caf3f358f6375509a35ca2e22068f3447c5f1d6 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/PointTypeFilter.h
@@ -3,14 +3,13 @@
 
 #include "AbstractMultipleChoiceFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlPoint;
   class ControlMeasure;
+  class ControlNet;
+  class ControlPoint;
 
   /**
    * @brief Filters by point type
@@ -20,19 +19,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
+   * @internal
    *    @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class PointTypeFilter : public AbstractMultipleChoiceFilter {
       Q_OBJECT
 
     public:
       PointTypeFilter(AbstractFilter::FilterEffectivenessFlag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       PointTypeFilter(const PointTypeFilter &other);
       virtual ~PointTypeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.cpp
index bc7ea32f0405583538847f7a0eef3d7bb8a36f89..ac650360d5662bb5e8b848ee340b4051e72eba30 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.cpp
@@ -2,19 +2,23 @@
 
 #include "ResidualMagnitudeFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   ResidualMagnitudeFilter::ResidualMagnitudeFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  ResidualMagnitudeFilter::ResidualMagnitudeFilter(
-    const ResidualMagnitudeFilter &other) : AbstractNumberFilter(other) {
+  ResidualMagnitudeFilter::ResidualMagnitudeFilter(const ResidualMagnitudeFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,8 +27,8 @@ namespace Isis {
 
 
   bool ResidualMagnitudeFilter::evaluate(
-    const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+        const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -45,10 +49,12 @@ namespace Isis {
 
   QString ResidualMagnitudeFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that has a residual magnitude which is ";
-    else
+    }
+    else {
       description += "measures that have residual magnitudes which are ";
+    }
 
     description += descriptionSuffix();
     return description;
diff --git a/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.h b/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.h
index f1625ef31e970814bb7819b84798f8d10ba29253..b17afc53b2b1bf349336bd010b7dbd57a666cc8f 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/ResidualMagnitudeFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -20,19 +18,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class ResidualMagnitudeFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       ResidualMagnitudeFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       ResidualMagnitudeFilter(const ResidualMagnitudeFilter &other);
       virtual ~ResidualMagnitudeFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.cpp
index 46862a4319212d3a7736470ee8aa4b4b9248ff9c..69cb67e8c31356478bb44f4a77ddac2f9f30b810 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.cpp
@@ -2,20 +2,22 @@
 
 #include "SampleFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   SampleFilter::SampleFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) :
-    AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  SampleFilter::SampleFilter(
-    const SampleFilter &other) : AbstractNumberFilter(other) {
+  SampleFilter::SampleFilter(const SampleFilter &other) : AbstractNumberFilter(other) {
   }
 
 
@@ -23,8 +25,8 @@ namespace Isis {
   }
 
 
-  bool SampleFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool SampleFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -45,10 +47,12 @@ namespace Isis {
 
   QString SampleFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that has a sample which is ";
-    else
+    }
+    else {
       description += "measures that have samples which are ";
+    }
 
     description += descriptionSuffix();
     return description;
@@ -64,4 +68,3 @@ namespace Isis {
     return "have samples which are " + descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.h b/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.h
index 0ed226602b6773a50ad5fa2e7ef41ebd6b9c30d9..8aa1cfa20631bcd2def3bcd026740c93226f9a43 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/SampleFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -23,19 +21,23 @@ namespace Isis {
    *
    * @author 2012-01-05 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class SampleFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       SampleFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       SampleFilter(const SampleFilter &other);
       virtual ~SampleFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -48,4 +50,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.cpp
index 3015b8a0ec91d25468f4be1f5367e8500a03cfd1..ddffe0302af70df08ab579a6adbf02b897230eac 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.cpp
@@ -2,20 +2,23 @@
 
 #include "SampleResidualFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   SampleResidualFilter::SampleResidualFilter(
-    AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) :
-    AbstractNumberFilter(flag, minimumForSuccess) {
+        AbstractFilter::FilterEffectivenessFlag flag,
+        int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  SampleResidualFilter::SampleResidualFilter(
-    const SampleResidualFilter &other) : AbstractNumberFilter(other) {
+  SampleResidualFilter::SampleResidualFilter(const SampleResidualFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,8 +26,8 @@ namespace Isis {
   }
 
 
-  bool SampleResidualFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool SampleResidualFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -45,10 +48,12 @@ namespace Isis {
 
   QString SampleResidualFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that has a sample residual which is ";
-    else
+    }
+    else {
       description += "measures that have sample residuals which are ";
+    }
 
     description += descriptionSuffix();
     return description;
diff --git a/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.h b/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.h
index c5944c48a3246604bdeb14a47f199ae208fedfdb..6e1cf569d300e25f591d411813ae02e4e6cc995a 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/SampleResidualFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -22,19 +20,23 @@ namespace Isis {
    *
    * @author ????-??-?? Eric Hyer
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class SampleResidualFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       SampleResidualFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       SampleResidualFilter(const SampleResidualFilter &other);
       virtual ~SampleResidualFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
diff --git a/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.cpp b/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.cpp
index 5166d30272c81ce304f32214d4f48e85b7efd0d3..985303632d14c5f93d5ad4d0cd1f7cce8c21c4c7 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.cpp
@@ -2,20 +2,23 @@
 
 #include "SampleShiftFilter.h"
 
-#include "ControlCubeGraphNode.h"
+#include <QPair>
+#include <QString>
+
 #include "ControlMeasure.h"
+#include "ControlNet.h"
+#include "ControlPoint.h"
 
 
 namespace Isis {
   SampleShiftFilter::SampleShiftFilter(
     AbstractFilter::FilterEffectivenessFlag flag,
-    int minimumForSuccess) :
-    AbstractNumberFilter(flag, minimumForSuccess) {
+    int minimumForSuccess) : AbstractNumberFilter(flag, minimumForSuccess) {
   }
 
 
-  SampleShiftFilter::SampleShiftFilter(
-    const SampleShiftFilter &other) : AbstractNumberFilter(other) {
+  SampleShiftFilter::SampleShiftFilter(const SampleShiftFilter &other)
+        : AbstractNumberFilter(other) {
   }
 
 
@@ -23,8 +26,8 @@ namespace Isis {
   }
 
 
-  bool SampleShiftFilter::evaluate(const ControlCubeGraphNode *node) const {
-    return evaluateImageFromMeasureFilter(node);
+  bool SampleShiftFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
+    return evaluateImageFromMeasureFilter(imageAndNet);
   }
 
 
@@ -45,10 +48,12 @@ namespace Isis {
 
   QString SampleShiftFilter::getImageDescription() const {
     QString description = AbstractFilter::getImageDescription();
-    if (getMinForSuccess() == 1)
+    if (getMinForSuccess() == 1) {
       description += "measure that has a sample shift which is ";
-    else
+    }
+    else {
       description += "measures that have sample shifts which are ";
+    }
 
     description += descriptionSuffix();
     return description;
@@ -64,4 +69,3 @@ namespace Isis {
     return "have sample shifts which are " + descriptionSuffix();
   }
 }
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.h b/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.h
index 48d8e3bdce9152bce164969f420794148b1d46fe..488096179ae6498cc124d0e5f7e5641b2519e83a 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/SampleShiftFilter.h
@@ -3,14 +3,12 @@
 
 #include "AbstractNumberFilter.h"
 
-
+template< typename U, typename V > struct QPair;
 class QString;
 
-
 namespace Isis {
-  class AbstractFilterSelector;
-  class ControlCubeGraphNode;
   class ControlMeasure;
+  class ControlNet;
   class ControlPoint;
 
   /**
@@ -24,19 +22,23 @@ namespace Isis {
    *
    * @author 2012-04-18 Jai Rideout
    *
-   * @internal 
-   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054. 
+   * @internal
+   *   @history 2017-07-25 Summer Stapleton - Removed the CnetViz namespace. Fixes #5054.
+   *   @history 2018-06-01 Jesse Mapel - Changed ControlCubeGraphNode to image serial number.
+   *                           References #5434.
+   *   @history 2018-09-28 Kaitlyn Lee - Changed the declaration of QPair from class to struct.
+   *                           Fixes build warning on MacOS 10.13. References #5520.
    */
   class SampleShiftFilter : public AbstractNumberFilter {
       Q_OBJECT
 
     public:
       SampleShiftFilter(AbstractFilter::FilterEffectivenessFlag flag,
-          int minimumForSuccess = -1);
+            int minimumForSuccess = -1);
       SampleShiftFilter(const SampleShiftFilter &other);
       virtual ~SampleShiftFilter();
 
-      bool evaluate(const ControlCubeGraphNode *) const;
+      bool evaluate(const QPair<QString, ControlNet *> *) const;
       bool evaluate(const ControlPoint *) const;
       bool evaluate(const ControlMeasure *) const;
 
@@ -49,4 +51,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.cpp b/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.cpp
index 9d41b9269a8ffa5fe9af979c1505da6064733b80..425c1d5bdd8c89bc4edd0c657a0f2298dc7b1eb4 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.cpp
+++ b/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.cpp
@@ -1681,17 +1681,18 @@ namespace Isis {
     if (QApplication::applicationName() != "cneteditor") {
       if (m_activeControlNet) {
         m_editControlPointAct->setEnabled(true);
-        m_deleteSelectedRowsAct->setEnabled(true);
         m_applyToSelectionAct->setEnabled(true);
         m_applyToAllAct->setEnabled(true);
       }
       else {
         m_editControlPointAct->setEnabled(false);
-        m_deleteSelectedRowsAct->setEnabled(false);
         m_applyToSelectionAct->setEnabled(false);
         m_applyToAllAct->setEnabled(false);
       }
-      
+
+      // We want to be able to delete rows in a nonactive control.
+      m_deleteSelectedRowsAct->setEnabled(true);
+
       if (hasActiveCell() && selectedRows.count() <= 1) {
         contextMenu.addAction(m_editControlPointAct);
       }
diff --git a/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.h b/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.h
index 3c6f1b894f52cdf4698deae78a1a2654e808613d..f30cc3b5535889a94c0a978d9e43c5348d2ec973 100644
--- a/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.h
+++ b/isis/src/qisis/objs/CnetEditorWidget/TableViewContent.h
@@ -46,6 +46,8 @@ namespace Isis {
     *                           have braces. This prevents a misleading-indentation warning from
     *                           occuring during Fedora25 (c++14) builds. No functionality has been
     *                           changed. References #4809.
+    *   @history 2018-07-17 Kaitlyn Lee - Modified showContextMenu() to enable 
+                                m_deleteSelectedRowsAct regardless if an active control is set. 
     */
   class TableViewContent : public QAbstractScrollArea {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/ConcurrentControlNetReader/ConcurrentControlNetReader.h b/isis/src/qisis/objs/ConcurrentControlNetReader/ConcurrentControlNetReader.h
index c6ce80919a5965f79010a62d03aa58354144b160..74d6574bd3c42aac47aaf2095f9499324302392f 100644
--- a/isis/src/qisis/objs/ConcurrentControlNetReader/ConcurrentControlNetReader.h
+++ b/isis/src/qisis/objs/ConcurrentControlNetReader/ConcurrentControlNetReader.h
@@ -52,7 +52,7 @@ namespace Isis {
    *
    * @internal
    *   @history 2017-08-09 Summer Stapleton - Added a try-catch block to handle invalid control
-   *                         networks. Fixes #5068.
+   *                           networks. Fixes #5068.
    */
   class ConcurrentControlNetReader : public QObject {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Control/Control.cpp b/isis/src/qisis/objs/Control/Control.cpp
index f1fe8a99932c8df1323e53f340463c96fd4bec9c..751cc3f83c62614fe951e2f4ec568e9aceafd58e 100644
--- a/isis/src/qisis/objs/Control/Control.cpp
+++ b/isis/src/qisis/objs/Control/Control.cpp
@@ -31,6 +31,7 @@ namespace Isis {
     m_controlNet = NULL;
     m_displayProperties = NULL;
     m_project = NULL;
+    m_modified = false;
 
     try {
       openControlNet();
@@ -59,6 +60,7 @@ namespace Isis {
     m_controlNet = NULL;
     m_displayProperties = NULL;
     m_project = project;
+    m_modified = false;
 
     m_displayProperties
         = new ControlDisplayProperties(FileName(m_fileName).name(), this);
@@ -82,6 +84,7 @@ namespace Isis {
     m_controlNet = controlNet;
     m_displayProperties = NULL;
     m_project = NULL;
+    m_modified = false;
 
     m_displayProperties
         = new ControlDisplayProperties(FileName(m_fileName).name(), this);
@@ -103,6 +106,7 @@ namespace Isis {
     m_displayProperties = NULL;
     m_id = NULL;
     m_project = NULL;
+    m_modified = false;
 
     xmlReader->pushContentHandler(new XmlHandler(this, cnetFolder));
   }
@@ -122,6 +126,9 @@ namespace Isis {
     //    destructor will take care of deleting the display props. See call to
     //    DisplayProperties' constructor.
     m_displayProperties = NULL;
+
+    // TODO: If control net is modified, prompt for save before destroying??
+
   }
 
 
@@ -154,6 +161,7 @@ namespace Isis {
         if (m_project) {
           m_controlNet->SetMutex(m_project->mutex());
         }
+        m_modified = false;
 
       }
       catch (IException &e) {
@@ -163,6 +171,33 @@ namespace Isis {
   }
 
 
+  /**
+   * @description Write control net to disk.  This method is used instead of calling 
+   * ControlNet::Write directly so that Control knows the modification state of the control net. 
+   * Note that if there is not a control net opened, there should no be any changes to write.
+   *  
+   * @return @b bool Returns false if there is not a control net open to write 
+   *  
+   * @throws IException::Programmer "Cannot write control net to disk" 
+   */
+  bool Control::write() {
+
+    if (!m_controlNet) {
+      return false;
+    }
+
+    try {
+      m_controlNet->Write(fileName());
+    }
+    catch (IException &e) {
+      throw IException(e, IException::Programmer, "Cannot write control net.", _FILEINFO_);
+    }
+
+    m_modified = false;
+    return true;
+  }
+
+
   /**
    * Cleans up the ControlNet pointer. This method should be called
    * once there is no more need for this network because the OS will limit
@@ -173,6 +208,31 @@ namespace Isis {
       delete m_controlNet;
       m_controlNet = NULL;
     }
+    m_modified = false;
+  }
+
+
+  /**
+   * @description Has this control been modified? 
+   *  
+   * @return @b bool Has this control been modified? 
+   *  
+   */
+  bool Control::isModified() {
+    return m_modified;
+  }
+
+
+  /**
+   * @description Sets the modification state of this control. This is needed for now since many 
+   * classes make changes to the control net contained in this object, but the control does not 
+   * know the state of the control net. 
+   * TODO:  Change this class to always know the state of the control Net.
+   *  
+   */
+  void Control::setModified(bool modified) {
+    
+    m_modified = modified;
   }
 
 
@@ -224,11 +284,34 @@ namespace Isis {
    *                       will be copied.
    */
   void Control::copyToNewProjectRoot(const Project *project, FileName newProjectRoot) {
-    if (FileName(newProjectRoot) != FileName(project->projectRoot())) {
 
-      FileName newCnetFileName(project->cnetRoot(newProjectRoot.toString()) + "/" +
-          FileName(m_fileName).dir().dirName() + "/" + FileName(m_fileName).name());
-      controlNet()->Write(newCnetFileName.toString());
+    if (FileName(newProjectRoot).toString() != FileName(project->projectRoot()).toString()) {
+  
+      QString newNetworkPath =  project->cnetRoot(newProjectRoot.toString()) + "/" +
+                  FileName(m_fileName).dir().dirName() + "/" + FileName(m_fileName).name();
+
+      // If there is active control & it has been modified, write to disk instead of copying
+      //  Leave control net at old location in unmodified state
+      if (isModified()) {
+        controlNet()->Write(newNetworkPath);
+        setModified(false);
+      }
+      else {
+        QString oldNetworkPath = project->cnetRoot(project->projectRoot()) + "/" +
+                    FileName(m_fileName).dir().dirName() + "/" + FileName(m_fileName).name();
+        if (!QFile::copy(oldNetworkPath,newNetworkPath) ) {
+          throw IException(IException::Io, "Error saving control net.", _FILEINFO_);
+        }
+      }
+    }
+    //   Project "Save" to current location, if active control exists & is modified, write to disk
+    //  Note:  It does not look like this code is ever executed.  If project is saved with a
+    //         "Save" this method is not called.
+    else {
+      if (isModified()) {
+        write();
+        setModified(false);
+      }
     }
 
   }
@@ -251,6 +334,7 @@ namespace Isis {
     // If we're the last thing in the folder, remove the folder too.
     QDir dir;
     dir.rmdir(FileName(m_fileName).path());
+    m_modified = false;
   }
 
 
diff --git a/isis/src/qisis/objs/Control/Control.h b/isis/src/qisis/objs/Control/Control.h
index 98ddcac6ccb176c7a077a825a3ccfaf9171cb33d..a3d10118410f9d358adad416c05b92721da7365d 100644
--- a/isis/src/qisis/objs/Control/Control.h
+++ b/isis/src/qisis/objs/Control/Control.h
@@ -59,13 +59,29 @@ namespace Isis {
    *                           track whether this step has happened Fixes #5026
    *   @history 2017-08-11 Cole Neuabuer - Added try catch throw to make it so importing an invalid
    *                           control net throws some type of error/warning Fixes #5064
+   *   @history 2017-11-09 Tyler Wilson - Modified the copyToNewProjectRoot function so that the
+   *                           control net is copied to it's new location like a binary file,
+   *                           instead of being recreated from scratch by calling it's write method.
+   *                           Fixes #5212.
+   *   @history 2017-12-20 Tracie Sucharski - In ::copyToNewProjectRoot use string comparison
+   *                           to compare project roots. References #4804, #4849.
+   *   @history 2018-01-19 Tracie Sucharski - Do not copy control unless the project root has
+   *                           changed. References #5212.
+   *   @history 2018-03-30 Tracie Sucharski - Added setModified and is Modified methods to keep
+   *                           track of the modification state of the control net. Add write method
+   *                           to write the control net to disk.  This write method should be called
+   *                           by ipce classes instead of calling the ControlNet::Write directly so
+   *                           that control knows the state of the control net. If a project
+   *                           is performing a "Save As", and there is a modified active control,the
+   *                           cnet is written out to the new location, it is not save in the old
+   *                           project location.
    */
   class Control : public QObject {
     Q_OBJECT
     public:
       ControlNet *m_controlNet; /**< A pointer to the ControlNet object associated with this
                                                     Control object.*/
-    explicit Control(QString cnetFileName, QObject *parent = 0);
+      explicit Control(QString cnetFileName, QObject *parent = 0);
       explicit Control(Project *project, QString cnetFileName, QObject *parent = 0);
       explicit Control(ControlNet *controlNet, QString cnetFileName, QObject *parent = 0);
       Control(FileName cnetFolder, XmlStackedHandlerReader *xmlReader, QObject *parent = 0);
@@ -79,6 +95,10 @@ namespace Isis {
 
       QString id() const;
 
+      bool isModified();
+      void setModified(bool modified = true);
+      bool write();  
+
       void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
       void copyToNewProjectRoot(const Project *project, FileName newProjectRoot);
       void deleteFromDisk();
@@ -115,6 +135,8 @@ namespace Isis {
       Control(const Control &other);
       Control &operator=(const Control &rhs);
 
+      bool m_modified;
+
       ControlDisplayProperties *m_displayProperties; /**< Contains the display properties for this
                                                           Control object.*/
       Project *m_project; //! Project associated with this control
diff --git a/isis/src/qisis/objs/ControlHealthMonitorView/ControlHealthMonitorView.cpp b/isis/src/qisis/objs/ControlHealthMonitorView/ControlHealthMonitorView.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..83adadf4f2c8fe9ed3691c4c95b0bd7d022b8591
--- /dev/null
+++ b/isis/src/qisis/objs/ControlHealthMonitorView/ControlHealthMonitorView.cpp
@@ -0,0 +1,207 @@
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "IsisDebug.h"
+
+#include "ControlHealthMonitorView.h"
+
+#include <QAction>
+#include <QList>
+#include <QSize>
+#include <QSizePolicy>
+#include <QToolBar>
+#include <QVBoxLayout>
+#include <QWidgetAction>
+
+#include "ControlHealthMonitorWidget.h"
+#include "ControlPointEditView.h"
+#include "ControlPointEditWidget.h"
+#include "CnetEditorView.h"
+#include "CubeDnView.h"
+
+#include "ControlNet.h"
+#include "ControlPoint.h"
+#include "Directory.h"
+#include "ProjectItem.h"
+#include "ProjectItemModel.h"
+
+#include "ToolPad.h"
+
+
+namespace Isis {
+
+  /**
+   * Constructor.
+   */
+  ControlHealthMonitorView::ControlHealthMonitorView(Directory *directory, QWidget *parent) :
+                        AbstractProjectItemView(parent) {
+    m_directory = directory;
+    ControlNet *net = m_directory->project()->activeControl()->controlNet();
+
+    ControlNetVitals *vitals = new ControlNetVitals(net);
+    m_controlHealthMonitorWidget = new ControlHealthMonitorWidget(vitals, parent);
+
+    connect(m_controlHealthMonitorWidget, SIGNAL(openPointEditor(ControlPoint *)),
+            this, SLOT(openPointEditor(ControlPoint *)));
+
+    connect(m_controlHealthMonitorWidget, SIGNAL(openImageEditor(QList<QString>)),
+            this, SLOT(openImageEditor(QList<QString>)));
+
+    setCentralWidget(m_controlHealthMonitorWidget);
+
+    m_permToolBar = new QToolBar("Standard Tools", 0);
+    m_permToolBar->setObjectName("permToolBar");
+    m_permToolBar->setIconSize(QSize(22, 22));
+
+    m_activeToolBar = new QToolBar("Active Tool", 0);
+    m_activeToolBar->setObjectName("activeToolBar");
+    m_activeToolBar->setIconSize(QSize(22, 22));
+
+    m_toolPad = new ToolPad("Tool Pad", 0);
+    m_toolPad->setObjectName("toolPad");
+
+
+//  m_ControlHealthMonitorWidget->addToPermanent(m_permToolBar);
+//  m_ControlHealthMonitorWidget->addTo(m_activeToolBar);
+//  m_ControlHealthMonitorWidget->addTo(m_toolPad);
+
+    m_activeToolBarAction = new QWidgetAction(this);
+    m_activeToolBarAction->setDefaultWidget(m_activeToolBar);
+
+    setAcceptDrops(true);
+
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+  }
+
+
+  /**
+   * Return a reasonable size
+   */
+  QSize ControlHealthMonitorView::sizeHint() const {
+
+    return QSize(500, 700);
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the openPointEditor() signal that's emitted
+   *  Whenever a point is double clicked on inside of the ControlHealthMonitorWidget.
+   *
+   *  It is designed to open the ControlPointEditWidget and edit the point that was
+   *  selected in the health monitor.
+   *
+   *  @param point The Control Point to be editted.
+   */
+  void ControlHealthMonitorView::openPointEditor(ControlPoint *point) {
+    ControlPointEditWidget* widget = m_directory->addControlPointEditView()->controlPointEditWidget();
+
+    if (point && point != widget->editPoint()) {
+      widget->setEditPoint(point);
+    }
+
+    // m_directory->addCnetEditorView(m_directory->project()->activeControl());
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the openImageEditor() signal that's emitted
+   *  Whenever an image is double clicked on inside of the ControlHealthMonitorWidget.
+   *
+   *  It is designed to open the CubeDnView and populate it with the selected cubes.
+   */
+  void ControlHealthMonitorView::openImageEditor(QList<QString> serials) {
+    CubeDnView *cubeView = m_directory->addCubeDnView();
+    foreach (QString serial, serials) {
+      QList<ImageList*> imageLists = m_directory->project()->images();
+      foreach(ImageList *list, imageLists) {
+        foreach(Image *image, *list) {
+          QString imageSerial = image->serialNumber();
+          if (imageSerial == serial) {
+            ProjectItem *item = m_directory->model()->findItemData(QVariant::fromValue(image));
+            if (item) {
+              cubeView->addItem(item);
+            }
+          }
+        }
+      }
+    }
+  }
+
+
+  /**
+   * Destructor
+   */
+  ControlHealthMonitorView::~ControlHealthMonitorView() {
+    delete m_controlHealthMonitorWidget;
+    delete m_permToolBar;
+    delete m_activeToolBar;
+    delete m_toolPad;
+
+    m_permToolBar = 0;
+    m_activeToolBar = 0;
+    m_toolPad = 0;
+  }
+
+
+  /**
+   * Returns the ControlHealthMonitorWidget.
+   *
+   * @return (ControlHealthMonitorWidget *) The currently active ControlHealthMonitorWidget.
+   */
+  ControlHealthMonitorWidget *ControlHealthMonitorView::controlHealthMonitorWidget() {
+    return m_controlHealthMonitorWidget;
+  }
+
+
+  /**
+   * Returns a list of actions for the permanent tool bar.
+   *
+   * @return (QList<QAction *>) The actions
+   */
+  QList<QAction *> ControlHealthMonitorView::permToolBarActions() {
+    return m_permToolBar->actions();
+  }
+
+
+  /**
+   * Returns a list of actions for the active tool bar.
+   *
+   * @return (QList<QAction *>) The actions
+   */
+  QList<QAction *> ControlHealthMonitorView::activeToolBarActions() {
+    QList<QAction *> actions;
+    actions.append(m_activeToolBarAction);
+    return actions;
+  }
+
+
+  /**
+   * Returns a list of actions for the tool pad.
+   *
+   * @return (QList<QAction *>) The actions
+   */
+  QList<QAction *> ControlHealthMonitorView::toolPadActions() {
+    return m_toolPad->actions();
+  }
+
+
+}
diff --git a/isis/src/qisis/objs/ControlHealthMonitorView/ControlHealthMonitorView.h b/isis/src/qisis/objs/ControlHealthMonitorView/ControlHealthMonitorView.h
new file mode 100644
index 0000000000000000000000000000000000000000..7aa5b8951f7f3d20ecfadb3d17fb0c257295508c
--- /dev/null
+++ b/isis/src/qisis/objs/ControlHealthMonitorView/ControlHealthMonitorView.h
@@ -0,0 +1,91 @@
+#ifndef ControlHealthMonitorView_h
+#define ControlHealthMonitorView_h
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include <QMap>
+#include <QPointer>
+#include <QToolBar>
+#include <QWidgetAction>
+
+#include "AbstractProjectItemView.h"
+
+namespace Isis {
+  class Control;
+  class Directory;
+  class ProjectItem;
+  class ControlHealthMonitorWidget;
+  class ControlNet;
+  class ControlPoint;
+  class ToolPad;
+
+  /**
+   * View for the Control Net Health Monitor
+   *
+   * @author 2018-06-07 Adam Goins
+   *
+   * @internal
+   *   @history 2018-06-07 Adam Goins - Initial Version.
+   *   @history 2018-06-26 Adam Goins - Made the view dockable with setCentralWidget().
+   *   @history 2018-07-10 Tracie Sucharski - Remove sizePolicy and sizeHint. These are set in the
+   *                           parent class, AbstracProjectItemView.
+   *   @history 2018-07-25 Tracie Sucharski - Put sizeHint back since it was decided to put this
+   *                           view split with the project view, so we don't want this as large
+   *                           as the other views such as Footprint2DView or CubeDnView.
+   */
+
+class ControlHealthMonitorView : public AbstractProjectItemView {
+
+  Q_OBJECT
+
+  public:
+    ControlHealthMonitorView(Directory *directory, QWidget *parent = 0);
+    ~ControlHealthMonitorView();
+
+    virtual QSize sizeHint() const;
+
+    virtual QList<QAction *> permToolBarActions();
+    virtual QList<QAction *> activeToolBarActions();
+    virtual QList<QAction *> toolPadActions();
+
+    ControlHealthMonitorWidget *controlHealthMonitorWidget();
+
+  public slots:
+
+  private slots:
+    void openPointEditor(ControlPoint *point);
+    void openImageEditor(QList<QString> serials);
+
+  private:
+    Directory *m_directory;
+
+    QPointer<ControlHealthMonitorWidget> m_controlHealthMonitorWidget;
+
+    ToolPad *m_toolPad;        //!< The tool pad
+    QToolBar *m_permToolBar;   //!< The permanent tool bar
+    QToolBar *m_activeToolBar; //!< The active tool bar
+
+    QWidgetAction *m_activeToolBarAction; //!< Stores the active tool bar
+  };
+}
+
+#endif // ControlHealthMonitorVIEW_H
diff --git a/isis/src/qisis/objs/ControlHealthMonitorView/Makefile b/isis/src/qisis/objs/ControlHealthMonitorView/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/ControlHealthMonitorView/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/ControlHealthMonitorWidget/ControlHealthMonitorWidget.cpp b/isis/src/qisis/objs/ControlHealthMonitorWidget/ControlHealthMonitorWidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4bed4c132bb99bb1968b8d1151560b202c3baa1b
--- /dev/null
+++ b/isis/src/qisis/objs/ControlHealthMonitorWidget/ControlHealthMonitorWidget.cpp
@@ -0,0 +1,903 @@
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "ControlHealthMonitorWidget.h"
+
+
+#include "ControlNet.h"
+#include "IString.h"
+#include "Progress.h"
+#include <QCheckBox>
+#include <QToolBar>
+#include <iostream>
+
+#include <QApplication>
+#include <QtCore>
+#include <QLabel>
+#include <QtGui>
+#include <QPushButton>
+#include <QProgressBar>
+#include <QTabWidget>
+#include <QPointer>
+#include <QTableWidgetItem>
+#include <QIcon>
+#include <QLineEdit>
+#include <QHeaderView>
+#include <QDesktopWidget>
+#include <QGridLayout>
+#include <QWidgetAction>
+#include <QMenu>
+#include <ControlNet.h>
+#include <ControlNetVitals.h>
+#include <ControlPoint.h>
+
+
+namespace Isis {
+
+  /**
+   * This class is the front end representation of a ControlNetVitals object.
+   * It will accept a ControlNetVitals object upon initialization and reflects the current
+   * real-time status of the embedded ControlNet in the ControlNetVitals object.
+   *
+   * @param vitals (ControlNetVitals *) The ControlNetVitals object that contains the ControlNet.
+   * @param parent (QWidget *) Pointer to parent widget
+   */
+  ControlHealthMonitorWidget::ControlHealthMonitorWidget(ControlNetVitals *vitals, QWidget *parent) : QWidget(parent) {
+    createGui();
+    m_vitals = vitals;
+
+    connect (m_vitals, SIGNAL(networkChanged()),
+            this,      SLOT(update()));
+
+    connect (m_vitals, SIGNAL(historyEntry(QString, QString, QVariant, QVariant, QString)),
+             this,     SLOT  (historyEntry(QString, QString, QVariant, QVariant, QString)));
+    update();
+  }
+
+
+  /**
+   *  This SLOT is called whenever the is a change made to the network embedded in the
+   *  Global m_vitals object. Changes are detected via the networkChanged() signal which
+   *  is emitted from the ControlNetVitals object which is triggered whenever
+   *  networkStructureModified() is emitted from the embedded ControlNet.
+   *
+   */
+  void ControlHealthMonitorWidget::update() {
+    m_numImagesLabel->setText("Images: " + toString(m_vitals->numImages()));
+    m_numPointsLabel->setText("Points " + toString(m_vitals->numPoints()));
+    m_numMeasuresLabel->setText("Measures: " + toString(m_vitals->numMeasures()));
+    m_netLabel->setText("Control Network: " + m_vitals->getNetworkId());
+    m_statusLabel->setText(m_vitals->getStatus());
+    m_statusDetails->setText(m_vitals->getStatusDetails());
+    m_imagesMeasuresValue->setText(toString(m_vitals->numImagesBelowMeasureThreshold()));
+    m_imagesHullValue->setText(toString(m_vitals->numImagesBelowHullTolerance()));
+    m_pointsIgnoredLabel->setText(toString(m_vitals->numIgnoredPoints()));
+    m_pointsFreeLabel->setText(toString(m_vitals->numFreePoints()));
+    m_pointsFixedLabel->setText(toString(m_vitals->numFixedPoints()));
+    m_pointsConstrainedLabel->setText(toString(m_vitals->numConstrainedPoints()));
+    m_pointsEditLockedLabel->setText(toString(m_vitals->numLockedPoints()));
+    m_pointsFewMeasuresLabel->setText(toString(m_vitals->numPointsBelowMeasureThreshold()));
+
+    double freePercent = ( (double) m_vitals->numFreePoints() ) / ( (double) m_vitals->numPoints() ) * 100;
+    freePercent = ( (int) (freePercent * 100) ) / 100.0;
+    QString freeFormat = toString(m_vitals->numFreePoints()) + " (" + toString(freePercent) + ")%";
+    m_pointsFreeProgressbar->setValue(freePercent);
+    m_pointsFreeProgressbar->setFormat(freeFormat);
+
+    double constrainedPercent = ( (double) m_vitals->numConstrainedPoints() ) /
+                                ( (double) m_vitals->numPoints() ) * 100;
+    constrainedPercent = ( (int) (constrainedPercent * 100) ) / 100.0;
+    QString constrainedFormat = toString(m_vitals->numConstrainedPoints()) + " (" + toString(constrainedPercent) + ")%";
+    m_pointsConstrainedProgressbar->setValue(constrainedPercent);
+    m_pointsConstrainedProgressbar->setFormat(constrainedFormat);
+
+    double fixedPercent = ( (double) m_vitals->numFixedPoints() ) / ( (double) m_vitals->numPoints() ) * 100;
+    fixedPercent = ( (int) (fixedPercent * 100) ) / 100.0;
+    QString fixedFormat = toString(m_vitals->numFixedPoints()) + " (" + toString(fixedPercent) + ")%";
+    m_pointsFixedProgressbar->setValue(fixedPercent);
+    m_pointsFixedProgressbar->setFormat(fixedFormat);
+
+
+    // We should enumerate the network state and do a comparison on enums here, not strings.
+    if (m_vitals->getStatus() == "Broken!") updateStatus(0);
+    else if (m_vitals->getStatus() == "Weak!") updateStatus(1);
+    else if (m_vitals->getStatus() == "Healthy!") updateStatus(2);
+
+    // QPieSeries series;
+    // series.append("Free", m_vitals->numFreePoints());
+    // series.append("Constrained", m_vitals->numConstrainedPoints());
+    // series.append("Fixed", m_vitals->numFixedPoints());
+    //
+    // foreach (QPieSlice *slice, series->slices()) {
+    //
+    //   // Get the percent and round it to two decimal places.
+    //   double percent = slice->percentage() * 100;
+    //   percent = ( (int) (percent * 100) ) / 100.0;
+    //
+    //   QString label = slice->label() + " " + toString(percent) + "%";
+    //
+    //   if (percent > 0.0) {
+    //     slice->setLabelVisible();
+    //   }
+    //   slice->setLabel(label);
+    // }
+    // //
+    // m_pointChartView->chart()->removeAllSeries();
+    // m_pointChartView->chart()->addSeries(series);
+
+    viewImageAll();
+    viewPointAll();
+  }
+
+
+  /*
+   *  This SLOT is designed to update the values in the gui to properly represent
+   *  The current state of the Control Network. This SLOT is triggered whenever the
+   *  projectStructureModified() signal is emitted from the Control Network, which triggers
+   *  the "Update()" signal in the ControlNetVitals class in which this slot is connected.
+   *
+   *  The status bar will display the proper color with respect to the health of the network,
+   *  And will display details related to that health as well.
+   *
+   *  @param code The status code. Should be an ENUM eventually for the 3 network states.
+   */
+  void ControlHealthMonitorWidget::updateStatus(int code) {
+    QPalette p = m_statusBar->palette();
+    switch(code) {
+      case 0:
+        p.setColor(QPalette::Highlight, Qt::red);
+        p.setColor(QPalette::Text, Qt::black);
+        break;
+      case 1:
+        p.setColor(QPalette::Highlight, Qt::yellow);
+        p.setColor(QPalette::Text, Qt::black);
+        break;
+      case 2:
+        p.setColor(QPalette::Highlight, Qt::green);
+        p.setColor(QPalette::Text, Qt::white);
+        break;
+    }
+    m_statusBar->setPalette(p);
+  }
+
+
+  /**
+   *  This method is responsible for creating all of the components that comprise the GUI.
+   */
+  void ControlHealthMonitorWidget::createGui() {
+
+    initializeEverything();
+    setWindowTitle("Control Net Health Monitor");
+    resize(725, 1100);
+
+    QFont fontBig("Arial", 18, QFont::Bold);
+    QFont fontNormal("Arial", 14);
+    QFont searchFont("Seqoe UI Symbol", 12);
+
+    // Parent layout for this entire widget.
+    QVBoxLayout *gridLayout = new QVBoxLayout;
+    gridLayout->setAlignment(Qt::AlignTop);
+    gridLayout->setSpacing(5);
+    setLayout(gridLayout);
+
+    // Title and net
+    QLabel *titleLabel = new QLabel("Control Net Health Monitor");
+    titleLabel->setFont(fontBig);
+    titleLabel->setAlignment(Qt::AlignTop);
+
+    QWidget *netWidget = new QWidget;
+    QHBoxLayout *netLayout = new QHBoxLayout;
+    netLayout->setAlignment(Qt::AlignLeft);
+
+    m_netLabel = new QLabel("Control Network:");
+    m_netLabel->setFont(fontNormal);
+    m_netLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
+    gridLayout->addWidget(titleLabel);
+
+    netLayout->addWidget(m_netLabel);
+    netWidget->setLayout(netLayout);
+
+    gridLayout->addWidget(netWidget);
+
+    // 4 net details, size, images, points, measures.
+    QWidget *stats = new QWidget;
+    QHBoxLayout *netStatsLayout = new QHBoxLayout;
+    netStatsLayout->setAlignment(Qt::AlignLeft);
+    netStatsLayout->setSpacing(25);
+    m_numImagesLabel   = new QLabel("Images:");
+    m_numPointsLabel   = new QLabel("Points:");
+    m_numMeasuresLabel = new QLabel("Measures:");
+
+    netStatsLayout->addWidget(m_numImagesLabel);
+    netStatsLayout->addWidget(m_numPointsLabel);
+    netStatsLayout->addWidget(m_numMeasuresLabel);
+
+    stats->setLayout(netStatsLayout);
+    gridLayout->addWidget(stats);
+
+    // Status Bar
+    m_statusBar = new QProgressBar();
+    QPalette p = m_statusBar->palette();
+    p.setColor(QPalette::Highlight, Qt::green);
+    p.setColor(QPalette::Text, Qt::red);
+    m_statusBar->setPalette(p);
+    m_statusBar->setRange(0, 0);
+
+    m_statusBar->setFormat("Loading...");
+    gridLayout->addWidget(m_statusBar);
+
+    m_lastModLabel = new QLabel("Last Modification:");
+    gridLayout->addWidget(m_lastModLabel);
+
+    QFrame* line = new QFrame();
+    line->setFrameShape(QFrame::HLine);
+    line->setFrameShadow(QFrame::Sunken);
+    gridLayout->addSpacing(15);
+
+    gridLayout->addWidget(line);
+    gridLayout->addSpacing(15);
+
+    // Tabs
+    QTabWidget *tabs = new QTabWidget();
+
+    QWidget *overviewTab = createOverviewTab();
+    QWidget *imagesTab = createImagesTab();
+    QWidget *pointsTab = createPointsTab();
+    // QWidget *graphTab = createGraphTab();
+
+    tabs->insertTab(0, overviewTab, "Overview");
+    tabs->insertTab(1, imagesTab,   "Images");
+    tabs->insertTab(2, pointsTab,   "Points");
+    // tabs->insertTab(3, graphTab,    "Graph");
+
+    gridLayout->addWidget(tabs);
+  }
+
+
+  /**
+  *  Initializes all member variables to NULL.
+  *
+  */
+  void ControlHealthMonitorWidget::initializeEverything() {
+    m_historyTable           = NULL;
+    m_imagesHullValue        = NULL;
+    m_imagesMeasuresValue    = NULL;
+    m_imagesShowingLabel     = NULL;
+    m_imagesTable            = NULL;
+    m_lastModLabel           = NULL;
+    m_numImagesLabel         = NULL;
+    m_numMeasuresLabel       = NULL;
+    m_numPointsLabel         = NULL;
+    // m_pointChartView         = NULL;
+    m_pointsEditLockedLabel  = NULL;
+    m_pointsFewMeasuresLabel = NULL;
+    m_pointsIgnoredLabel     = NULL;
+    m_pointsShowingLabel     = NULL;
+    m_pointsTable            = NULL;
+    m_statusBar              = NULL;
+    m_statusDetails          = NULL;
+    m_statusLabel            = NULL;
+    m_vitals                 = NULL;
+  }
+
+
+  /*
+  *  This method creates the Overview tab.
+  *
+  */
+  QWidget* ControlHealthMonitorWidget::createOverviewTab() {
+
+    // Parent container for the overview tab.
+    QWidget *overview = new QWidget();
+    QVBoxLayout *overviewLayout = new QVBoxLayout;
+    overviewLayout->setAlignment(Qt::AlignTop);
+    overviewLayout->setSpacing(5);
+
+    QFont fontBig("Arial", 16, QFont::Bold);
+    QFont fontNormal("Arial", 14);
+    QFont fontSmall("Arial", 12);
+
+    m_statusLabel = new QLabel("Healthy!");
+    m_statusLabel->setFont(fontBig);
+    m_statusLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
+
+    m_statusDetails = new QLabel("Your network is healthy.");
+    m_statusDetails->setFont(fontNormal);
+    m_statusDetails->setAlignment(Qt::AlignTop | Qt::AlignLeft);
+
+    m_statusDetails->setFont(fontNormal);
+    m_statusDetails->setAlignment(Qt::AlignTop | Qt::AlignLeft);
+
+    overviewLayout->addWidget(m_statusLabel);
+    overviewLayout->addWidget(m_statusDetails);
+    overviewLayout->addSpacing(50);
+
+    QLabel *modLabel = new QLabel("Modification History");
+    modLabel->setFont(fontSmall);
+    overviewLayout->addWidget(modLabel);
+
+    QStringList headers;
+    headers.append("Action");
+    headers.append("Id");
+    headers.append("Old Value");
+    headers.append("New Value");
+    headers.append("Timestamp");
+
+    m_historyTable = new QTableWidget();
+    m_historyTable->setColumnCount(5);
+    m_historyTable->setHorizontalHeaderLabels(headers);
+    m_historyTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+    m_historyTable->horizontalHeader()->setStretchLastSection(true);
+    m_historyTable->verticalHeader()->setVisible(false);
+    m_historyTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    m_historyTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+    m_historyTable->setSelectionMode(QAbstractItemView::SingleSelection);
+    m_historyTable->setGeometry(QApplication::desktop()->screenGeometry());
+
+    overviewLayout->addWidget(m_historyTable);
+    overview->setLayout(overviewLayout);
+
+    return overview;
+  }
+
+
+  /*
+  *  This method creates the Images tab.
+  *
+  */
+  QWidget* ControlHealthMonitorWidget::createImagesTab() {
+    QFont fontSmall("Arial", 12);
+    QFont fontMedium("Arial", 14);
+
+    // This is the parent QWidget for the images tab.
+    QWidget *imagesTab = new QWidget();
+    QVBoxLayout *imagesLayout = new QVBoxLayout;
+    imagesLayout->setAlignment(Qt::AlignTop);
+    imagesLayout->setSpacing(15);
+    imagesLayout->addSpacing(10);
+
+    QWidget *temp = new QWidget;
+    QGridLayout *tempLayout = new QGridLayout;
+
+    // Create the labels
+    QLabel *threeMeasure = new QLabel("Less than 3 valid Measures:");
+    m_imagesMeasuresValue = new QLabel("");
+
+    QLabel *withoutMeasures = new QLabel("Exceeding convex hull tolerance:");
+    m_imagesHullValue = new QLabel("");
+
+    // Set the fonts
+    m_imagesMeasuresValue->setFont(fontSmall);
+    threeMeasure->setFont(fontSmall);
+    withoutMeasures->setFont(fontSmall);
+    m_imagesHullValue->setFont(fontSmall);
+
+    // Create the view buttons
+    QPushButton *button = new QPushButton("View");
+    QPushButton *button2 = new QPushButton("View");
+
+    connect(button,  SIGNAL(clicked()), this, SLOT(viewImageFewMeasures()));
+    connect(button2, SIGNAL(clicked()), this, SLOT(viewImageHullTolerance()));
+
+    // Add everything in the right spot.
+    tempLayout->addWidget(threeMeasure, 0, 0);
+    tempLayout->addWidget(m_imagesMeasuresValue, 0, 1);
+    tempLayout->addWidget(button, 0, 2);
+
+    tempLayout->addWidget(withoutMeasures, 1, 0);
+    tempLayout->addWidget(m_imagesHullValue, 1, 1);
+    tempLayout->addWidget(button2, 1, 2);
+
+    temp->setLayout(tempLayout);
+    imagesLayout->addWidget(temp);
+
+    // Create the table.
+    m_imagesTable = new QTableWidget();
+
+    connect(m_imagesTable, SIGNAL(itemDoubleClicked(QTableWidgetItem *)),
+            this, SLOT(emitOpenImageEditor()));
+
+    QStringList headers;
+    headers.append("#");
+    headers.append("Cube Serial");
+
+    m_imagesTable->setColumnCount(2);
+    m_imagesTable->setHorizontalHeaderLabels(headers);
+    m_imagesTable->horizontalHeader()->setStretchLastSection(true);
+    m_imagesTable->verticalHeader()->setVisible(false);
+    m_imagesTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    m_imagesTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+    m_imagesTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+    m_imagesTable->setShowGrid(true);
+    m_imagesTable->setGeometry(QApplication::desktop()->screenGeometry());
+    m_imagesTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+
+    imagesLayout->addSpacing(30);
+
+    m_imagesShowingLabel = new QLabel("");
+    m_imagesShowingLabel->setFont(fontMedium);
+
+    QPushButton *viewAllButton = new QPushButton("View All");
+    connect(viewAllButton, SIGNAL(clicked()),
+            this, SLOT(viewImageAll()));
+
+    QGridLayout *showingLayout = new QGridLayout;
+    QWidget *showingWidget = new QWidget;
+
+    showingLayout->addWidget(m_imagesShowingLabel, 0, 0, 1, 2);
+    showingLayout->addWidget(viewAllButton, 0, 2);
+    showingWidget->setLayout(showingLayout);
+
+    imagesLayout->addWidget(showingWidget);
+    imagesLayout->addWidget(m_imagesTable);
+
+    imagesTab->setLayout(imagesLayout);
+    return imagesTab;
+  }
+
+
+  /*
+  *  This method creates the Points tab.
+  *
+  */
+  QWidget* ControlHealthMonitorWidget::createPointsTab() {
+
+    QFont fontSmall("Arial", 12);
+    QFont fontMedium("Arial", 14);
+    QFont searchFont("Seqoe UI Symbol", 12);
+
+    // This is the main parent widget for the points tab.
+    QWidget *pointsTab = new QWidget();
+    QVBoxLayout *pointsLayout = new QVBoxLayout;
+    pointsLayout->setAlignment(Qt::AlignTop);
+    pointsLayout->setSpacing(15);
+    pointsLayout->addSpacing(10);
+
+    QWidget *viewWidget     = new QWidget;
+    QGridLayout *viewLayout = new QGridLayout;
+
+    // Create the labels.
+    QLabel *pointsIgnored = new QLabel("Points Ignored:");
+    m_pointsIgnoredLabel = new QLabel("");
+
+    QLabel *freePoints = new QLabel("Points Free:");
+    m_pointsFreeLabel = new QLabel("");
+    m_pointsFreeProgressbar = new QProgressBar();
+    QPalette p = m_pointsFreeProgressbar->palette();
+    p.setColor(QPalette::Highlight, Qt::blue);
+    p.setColor(QPalette::Text, Qt::black);
+    m_pointsFreeProgressbar->setPalette(p);
+    m_pointsFreeProgressbar->setRange(0, 100);
+
+    QLabel *constrainedPoints = new QLabel("Points Constrained:");
+    m_pointsConstrainedLabel = new QLabel("");
+    m_pointsConstrainedProgressbar = new QProgressBar();
+    m_pointsConstrainedProgressbar->setPalette(p);
+    m_pointsConstrainedProgressbar->setRange(0, 100);
+
+    QLabel *fixedPoints = new QLabel("Points Fixed:");
+    m_pointsFixedLabel = new QLabel("");
+    m_pointsFixedProgressbar = new QProgressBar();
+    m_pointsFixedProgressbar->setPalette(p);
+    m_pointsFixedProgressbar->setRange(0, 100);
+
+    QLabel *pointsLocked = new QLabel("Points Edit Locked:");
+    m_pointsEditLockedLabel = new QLabel("");
+
+    QLabel *pointsMeasure = new QLabel("Less than 3 valid Measures:");
+    m_pointsFewMeasuresLabel = new QLabel("");
+
+    // Set the font for the labels.
+    pointsLocked->setFont(fontSmall);
+    m_pointsEditLockedLabel->setFont(fontSmall);
+    pointsMeasure->setFont(fontSmall);
+    m_pointsFewMeasuresLabel->setFont(fontSmall);
+    freePoints->setFont(fontSmall);
+    m_pointsFreeLabel->setFont(fontSmall);
+    fixedPoints->setFont(fontSmall);
+    constrainedPoints->setFont(fontSmall);
+    pointsIgnored->setFont(fontSmall);
+    m_pointsFixedLabel->setFont(fontSmall);
+    m_pointsConstrainedLabel->setFont(fontSmall);
+    m_pointsIgnoredLabel->setFont(fontSmall);
+
+    // Create the view buttons.
+    QPushButton *viewIgnoredButton     = new QPushButton("View");
+    QPushButton *viewLockedButton      = new QPushButton("View");
+    QPushButton *viewMeasureButton     = new QPushButton("View");
+    QPushButton *viewFreePoints        = new QPushButton("View");
+    QPushButton *viewFixedPoints       = new QPushButton("View");
+    QPushButton *viewConstrainedPoints = new QPushButton("View");
+
+    // Connect the buttons.
+    connect(viewIgnoredButton, SIGNAL(clicked()), this, SLOT(viewPointIgnored()));
+    connect(viewLockedButton,  SIGNAL(clicked()), this, SLOT(viewPointEditLocked()));
+    connect(viewMeasureButton, SIGNAL(clicked()), this, SLOT(viewPointFewMeasures()));
+    connect(viewFreePoints,    SIGNAL(clicked()), this, SLOT(viewPointFree()));
+    connect(viewFixedPoints,   SIGNAL(clicked()), this, SLOT(viewPointFixed()));
+    connect(viewConstrainedPoints, SIGNAL(clicked()), this, SLOT(viewPointConstrained()));
+
+    // Add the widgets in the proper place.
+    viewLayout->addWidget(freePoints, 0, 0);
+    viewLayout->addWidget(m_pointsFreeProgressbar, 0, 1);
+    viewLayout->addWidget(viewFreePoints, 0, 2);
+
+    viewLayout->addWidget(fixedPoints, 1, 0);
+    viewLayout->addWidget(m_pointsFixedProgressbar, 1, 1);
+    viewLayout->addWidget(viewFixedPoints, 1, 2);
+
+    viewLayout->addWidget(constrainedPoints, 2, 0);
+    viewLayout->addWidget(m_pointsConstrainedProgressbar, 2, 1);
+    viewLayout->addWidget(viewConstrainedPoints, 2, 2);
+
+    viewLayout->addWidget(pointsIgnored, 3, 0);
+    viewLayout->addWidget(m_pointsIgnoredLabel, 3, 1);
+    viewLayout->addWidget(viewIgnoredButton, 3, 2);
+
+    viewLayout->addWidget(pointsLocked, 4, 0);
+    viewLayout->addWidget(m_pointsEditLockedLabel, 4, 1);
+    viewLayout->addWidget(viewLockedButton, 4, 2);
+
+    viewLayout->addWidget(pointsMeasure, 5, 0);
+    viewLayout->addWidget(m_pointsFewMeasuresLabel, 5, 1);
+    viewLayout->addWidget(viewMeasureButton, 5, 2);
+
+    viewWidget->setLayout(viewLayout);
+    pointsLayout->addWidget(viewWidget);
+
+    // Create the table.
+    m_pointsTable = new QTableWidget();
+    QStringList headers;
+    headers.append("#");
+    headers.append("Point ID");
+    headers.append("Type");
+    headers.append("Ignored");
+    headers.append("Rejected");
+    headers.append("Edit Locked");
+
+    m_pointsTable->setColumnCount(6);
+    m_pointsTable->setHorizontalHeaderLabels(headers);
+    m_pointsTable->horizontalHeader()->setStretchLastSection(true);
+    m_pointsTable->verticalHeader()->setVisible(false);
+    m_pointsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    m_pointsTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+    m_pointsTable->setSelectionMode(QAbstractItemView::SingleSelection);
+    m_pointsTable->setShowGrid(true);
+    m_pointsTable->setGeometry(QApplication::desktop()->screenGeometry());
+    m_pointsTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+
+    connect(m_pointsTable, SIGNAL(itemDoubleClicked(QTableWidgetItem *)),
+            this, SLOT(emitOpenPointEditor()));
+
+    m_pointsShowingLabel = new QLabel("");
+    m_pointsShowingLabel->setFont(fontMedium);
+    QPushButton *showAllButton = new QPushButton("View All");
+
+    QGridLayout *showLayout = new QGridLayout;
+    QWidget *showWidget = new QWidget;
+
+    connect(showAllButton, SIGNAL(clicked()),
+            this, SLOT(viewPointAll()));
+
+    showLayout->addWidget(m_pointsShowingLabel, 0, 0, 1, 2);
+    showLayout->addWidget(showAllButton, 0, 2);
+    showWidget->setLayout(showLayout);
+
+    pointsLayout->addSpacing(30);
+    pointsLayout->addWidget(showWidget);
+    pointsLayout->addWidget(m_pointsTable);
+
+    pointsTab->setLayout(pointsLayout);
+    return pointsTab;
+  }
+
+
+  /**
+   *  This method is designed to be called whenever a user double-clicks on an image
+   *  in the image table of the images tab. It will grab the selected images and emit
+   *  the openImageEditor() signal, emitting with it the images that were selected.
+   *
+   *  The openImageEditor() signal is intercepted by the ControlHealthMonitorView
+   *  and opens the CubeDnView with the images selected.
+   */
+  void ControlHealthMonitorWidget::emitOpenImageEditor() {
+    QList<QString> serials;
+    QModelIndexList rows = m_imagesTable->selectionModel()->selectedRows(1);
+    foreach (QModelIndex index, rows) {
+      serials.append(index.data().toString());
+    }
+    emit openImageEditor(serials);
+  }
+
+
+  /**
+   *  This method is designed to be called whenever a user double-clicks on a point
+   *  in the point table of the points tab. It will grab the selected point and emit
+   *  the openPointEditor() signal, emitting with it the point that was selected.
+   *
+   *  The openPointEditor() signal is intercepted by the ControlHealthMonitorView
+   *  and opens the ControlPointEditWidget with that point selected.
+   */
+  void ControlHealthMonitorWidget::emitOpenPointEditor() {
+    // Get the point
+    QModelIndex pointId = m_pointsTable->selectionModel()->selectedIndexes()[1];
+    ControlPoint *point = m_vitals->getPoint(pointId.data().toString());
+    emit openPointEditor(point);
+  }
+
+
+  /**
+   *  This SLOT is designed to intercept the historyEntry() signal emitted from the
+   *  ControlNetVitals class whenever a modification is made to the network. The
+   *  signal emits several details pertaining to the history entry.
+   *
+   *  @param entry     The history comment to be displayed.
+   *  @param id        The id of the Control Point, Measure, or Network that was modified.
+   *  @param oldValue  The old value before the modification was made.
+   *  @param newValue  The new value after the modification was made.
+   *  @param timeStamp The timestamp of when the modification was made.
+   *
+   */
+  void ControlHealthMonitorWidget::historyEntry(QString entry, QString id,
+                                                QVariant oldValue, QVariant newValue,
+                                                QString timeStamp) {
+
+    m_lastModLabel->setText("Last Modification: " + timeStamp);
+
+    m_historyTable->insertRow(0);
+    m_historyTable->setItem(0, 0, new QTableWidgetItem(entry));
+    m_historyTable->setItem(0, 1, new QTableWidgetItem(id));
+    m_historyTable->setItem(0, 2, new QTableWidgetItem(oldValue.toString()));
+    m_historyTable->setItem(0, 3, new QTableWidgetItem(newValue.toString()));
+    m_historyTable->setItem(0, 4, new QTableWidgetItem(timeStamp));
+  }
+
+
+  /*
+  *  This method creates the Graph tab.
+  *
+  */
+  QWidget* ControlHealthMonitorWidget::createGraphTab() {
+    QWidget *graph = new QWidget();
+
+    QVBoxLayout *graphLayout = new QVBoxLayout;
+    graphLayout->setAlignment(Qt::AlignTop);
+    graphLayout->setSpacing(5);
+    //
+    // m_pointChartView = new QChartView;
+    // m_pointChartView->resize(200, 200);
+    // m_pointChartView->setRenderHint(QPainter::Antialiasing);
+    //
+    // QChart *chart = new QChart();
+    // chart->setTitle("Point Breakdown");
+    // chart->setTheme(QChart::ChartThemeBlueCerulean);
+    // chart->legend()->setAlignment(Qt::AlignRight);
+    // m_pointChartView->setChart(chart);
+    // graphLayout->addWidget(m_pointChartView);
+
+    graph->setLayout(graphLayout);
+    return graph;
+
+  }
+
+
+  /*
+  *  This method loads a QList of cube serials into the images table.
+  *
+  */
+  void ControlHealthMonitorWidget::updateImageTable(QList<QString> serials) {
+     m_imagesTable->setRowCount(0);
+     for (int i = 0; i < serials.size(); i++) {
+       m_imagesTable->insertRow(i);
+       m_imagesTable->setItem(i, 0, new QTableWidgetItem(toString(i + 1)));
+       m_imagesTable->setItem(i, 1, new QTableWidgetItem(serials.at(i)));
+     }
+   }
+
+
+  /*
+   *  This method loads a QList of ControlPoint* into the points table.
+   *
+   */
+  void ControlHealthMonitorWidget::updatePointTable(QList<ControlPoint*> points) {
+    m_pointsTable->setRowCount(0);
+    for (int i = 0; i < points.size(); i++) {
+      ControlPoint *point = points.at(i);
+      m_pointsTable->insertRow(i);
+      m_pointsTable->setItem(i, 0, new QTableWidgetItem(toString(i + 1)));
+      m_pointsTable->setItem(i, 1, new QTableWidgetItem(point->GetId()));
+      m_pointsTable->setItem(i, 2, new QTableWidgetItem(point->GetPointTypeString()));
+      m_pointsTable->setItem(i, 3, new QTableWidgetItem(toString(point->IsIgnored())));
+      m_pointsTable->setItem(i, 4, new QTableWidgetItem(toString(point->IsRejected())));
+      m_pointsTable->setItem(i, 5, new QTableWidgetItem(toString(point->IsEditLocked())));
+    }
+  }
+
+
+  /*
+   *  This SLOT is designed to view all points in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointAll() {
+    updatePointTable(m_vitals->getAllPoints());
+    m_pointsShowingLabel->setText("Showing: All Points <sup>" +
+                                  toString(m_vitals->numPoints()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view ignored points in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointIgnored() {
+    updatePointTable(m_vitals->getIgnoredPoints());
+    m_pointsShowingLabel->setText("Showing: Ignored Points <sup>" +
+                                  toString(m_vitals->numIgnoredPoints()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view free points in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointFree() {
+    updatePointTable(m_vitals->getFreePoints());
+    m_pointsShowingLabel->setText("Showing: Free Points <sup>" +
+                                  toString(m_vitals->numFreePoints()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view fixed points in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointFixed() {
+    updatePointTable(m_vitals->getFixedPoints());
+    m_pointsShowingLabel->setText("Showing: Fixed Points <sup>" +
+                                  toString(m_vitals->numFixedPoints()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view constrained points in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointConstrained() {
+    updatePointTable(m_vitals->getConstrainedPoints());
+    m_pointsShowingLabel->setText("Showing: Constrained Points <sup>" +
+                                  toString(m_vitals->numConstrainedPoints()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view locked points in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointEditLocked() {
+    updatePointTable(m_vitals->getLockedPoints());
+    m_pointsShowingLabel->setText("Showing: Locked Points <sup>" +
+                                  toString(m_vitals->numLockedPoints()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+
+  }
+
+
+  /*
+   *  This SLOT is designed to view points with less than 3 valid measures in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewPointFewMeasures() {
+    updatePointTable(m_vitals->getPointsBelowMeasureThreshold());
+    m_pointsShowingLabel->setText("Showing: Points with less than 3 Measures <sup>" +
+                                  toString(m_vitals->numPointsBelowMeasureThreshold()) +
+                                  " / " + toString(m_vitals->numPoints()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view all images in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewImageAll() {
+    updateImageTable(m_vitals->getCubeSerials());
+    m_imagesShowingLabel->setText("Showing: All Images <sup>" +
+                                  toString(m_vitals->numImages()) +
+                                  " / " + toString(m_vitals->numImages()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view images with less than 3 valid measures in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewImageFewMeasures() {
+    updateImageTable(m_vitals->getImagesBelowMeasureThreshold());
+    m_imagesShowingLabel->setText("Showing: Images with less than 3 Measures <sup>" +
+                                  toString(m_vitals->numImagesBelowMeasureThreshold()) +
+                                  " / " + toString(m_vitals->numImages()) + "</sup>");
+  }
+
+
+  /*
+   *  This SLOT is designed to view images below the Convex Hull Tolerance in the Control Network.
+   *
+   */
+  void ControlHealthMonitorWidget::viewImageHullTolerance() {
+    updateImageTable(m_vitals->getImagesBelowHullTolerance());
+    m_imagesShowingLabel->setText("Showing: Images below a hull tolerance of 75% <sup>" +
+                                  toString(m_vitals->numImagesBelowHullTolerance()) +
+                                  " / " + toString(m_vitals->numImages()) + "</sup>");
+  }
+
+
+  /**
+   * Destructor
+   */
+  ControlHealthMonitorWidget::~ControlHealthMonitorWidget() {
+
+    delete m_historyTable;
+    delete m_imagesHullValue;
+    delete m_imagesMeasuresValue;
+    delete m_imagesShowingLabel;
+    delete m_imagesTable;
+    delete m_lastModLabel;
+    delete m_numImagesLabel;
+    delete m_numMeasuresLabel;
+    delete m_numPointsLabel;
+    // delete m_pointChartView;
+    delete m_pointsEditLockedLabel;
+    delete m_pointsFewMeasuresLabel;
+    delete m_pointsIgnoredLabel;
+    delete m_pointsShowingLabel;
+    delete m_pointsTable;
+    delete m_statusBar;
+    delete m_statusDetails;
+    delete m_statusLabel;
+    delete m_vitals;
+
+    m_historyTable           = NULL;
+    m_imagesHullValue        = NULL;
+    m_imagesMeasuresValue    = NULL;
+    m_imagesShowingLabel     = NULL;
+    m_imagesTable            = NULL;
+    m_lastModLabel           = NULL;
+    m_numImagesLabel         = NULL;
+    m_numMeasuresLabel       = NULL;
+    m_numPointsLabel         = NULL;
+    // m_pointChartView         = NULL;
+    m_pointsEditLockedLabel  = NULL;
+    m_pointsFewMeasuresLabel = NULL;
+    m_pointsIgnoredLabel     = NULL;
+    m_pointsShowingLabel     = NULL;
+    m_pointsTable            = NULL;
+    m_statusBar              = NULL;
+    m_statusDetails          = NULL;
+    m_statusLabel            = NULL;
+    m_vitals                 = NULL;
+  }
+}
diff --git a/isis/src/qisis/objs/ControlHealthMonitorWidget/ControlHealthMonitorWidget.h b/isis/src/qisis/objs/ControlHealthMonitorWidget/ControlHealthMonitorWidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..cf0afd10919d762a574839f56c8ef8629c12ab36
--- /dev/null
+++ b/isis/src/qisis/objs/ControlHealthMonitorWidget/ControlHealthMonitorWidget.h
@@ -0,0 +1,123 @@
+#ifndef ControlHealthMonitorWidget_h
+#define ControlHealthMonitorWidget_h
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include <QLabel>
+#include <QTableWidget>
+#include <QProgressBar>
+#include <QPointer>
+#include <ControlNetVitals.h>
+
+
+
+namespace Isis {
+  /**
+   * Interface that allows real-time evaluation of the state of a Control Network.
+   *
+   * @author 2018-05-28 Adam Goins
+   *
+   * @internal
+   *   @history 2018-05-28 Adam Goins - Initial Creation.
+   */
+  class ControlHealthMonitorWidget : public QWidget {
+
+
+    Q_OBJECT
+
+    public:
+      ControlHealthMonitorWidget(ControlNetVitals *vitals, QWidget *parent=0);
+      ~ControlHealthMonitorWidget();
+      void createGui();
+      QWidget* createImagesTab();
+      QWidget* createPointsTab();
+      QWidget* createOverviewTab();
+      QWidget* createGraphTab();
+      void setVitals(ControlNetVitals *vitals);
+      void initializeEverything();
+
+    public slots:
+      void emitOpenImageEditor();
+      void emitOpenPointEditor();
+
+      void historyEntry(QString, QString, QVariant, QVariant, QString);
+
+      void viewPointAll();
+      void viewPointFree();
+
+      void viewPointFixed();
+      void viewPointConstrained();
+
+      void viewPointIgnored();
+      void viewPointEditLocked();
+      void viewPointFewMeasures();
+
+      void viewImageAll();
+      void viewImageFewMeasures();
+      void viewImageHullTolerance();
+
+      void update();
+
+    signals:
+      void openPointEditor(ControlPoint *point);
+      void openImageEditor(QList<QString> serials);
+
+    private:
+        void updateStatus(int code);
+        void updateImageTable(QList<QString> serials);
+        void updatePointTable(QList<ControlPoint*> points);
+
+        // QChartView *m_pointChartView;
+        ControlNetVitals *m_vitals;
+        QProgressBar *m_statusBar;
+        QProgressBar *m_pointsFreeProgressbar;
+        QProgressBar *m_pointsConstrainedProgressbar;
+        QProgressBar *m_pointsFixedProgressbar;
+
+
+        QTableWidget *m_historyTable;
+        QTableWidget *m_imagesTable;
+        QTableWidget *m_pointsTable;
+
+        QLabel *m_imagesHullValue;
+        QLabel *m_imagesMeasuresValue;
+        QLabel *m_imagesShowingLabel;
+        QLabel *m_lastModLabel;
+        QLabel *m_netLabel;
+        QLabel *m_numImagesLabel;
+        QLabel *m_numMeasuresLabel;
+        QLabel *m_numPointsLabel;
+        QLabel *m_pointsConstrainedLabel;
+        QLabel *m_pointsEditLockedLabel;
+        QLabel *m_pointsFewMeasuresLabel;
+        QLabel *m_pointsFixedLabel;
+        QLabel *m_pointsFreeLabel;
+        QLabel *m_pointsIgnoredLabel;
+        QLabel *m_pointsShowingLabel;
+        QLabel *m_statusDetails;
+        QLabel *m_statusLabel;
+
+  };
+}
+
+#endif
diff --git a/isis/src/qisis/objs/ControlHealthMonitorWidget/Makefile b/isis/src/qisis/objs/ControlHealthMonitorWidget/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/ControlHealthMonitorWidget/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/ControlList/ControlList.cpp b/isis/src/qisis/objs/ControlList/ControlList.cpp
index c9003b996107292b93acc3221d772999670d5a80..b2eed5235d5b1bc65529d1e595370e94c20e05b8 100644
--- a/isis/src/qisis/objs/ControlList/ControlList.cpp
+++ b/isis/src/qisis/objs/ControlList/ControlList.cpp
@@ -100,7 +100,7 @@ namespace Isis {
 
 
   /**
-   * Create an control list from a list of control net file names. This is slow (serial) and not 
+   * Create an control list from a list of control net file names. This is slow (serial) and not
    * recommended.
    *
    * @param fileNames Control net file names
@@ -153,7 +153,7 @@ namespace Isis {
 
   /**
    * Clears the control list
-   * 
+   *
    * @see QList<Control *>::clear()
    */
   void ControlList::clear() {
@@ -244,10 +244,10 @@ namespace Isis {
 
 
   /**
-   * Equivalent to append(value) 
+   * Equivalent to append(value)
    *
    * @param value The control pointer to append to the control list
-   * 
+   *
    * @see ControlList::append(Control * const &value)
    * @see QList<Control *>::push_back()
    */
@@ -273,11 +273,11 @@ namespace Isis {
 
   /**
    * Removes all occurences of the control pointer in the control list
-   * 
+   *
    * @param value The control pointer value to remove
    *
    * @return @b int The number of control pointers removed
-   * 
+   *
    * @see QList<Control *>::removeAll()
    */
   int ControlList::removeAll(Control * const &value) {
@@ -295,7 +295,7 @@ namespace Isis {
    * Removes the control pointer at the specified index
    *
    * @param i The index of the control pointer to remove
-   * 
+   *
    * @see QList<Control *>::removeAt()
    */
   void ControlList::removeAt(int i) {
@@ -316,7 +316,7 @@ namespace Isis {
 
 
   /**
-   * Removes the last control pointer from the control list 
+   * Removes the last control pointer from the control list
    *
    * @see QList<Control *>::removeLast()
    */
@@ -332,7 +332,7 @@ namespace Isis {
    * @param value The control pointer to remove
    *
    * @return @b bool True if a control pointer was removed; otherwise false
-   * 
+   *
    * @see QList<Control *>::removeOne()
    */
   bool ControlList::removeOne(Control * const &value) {
@@ -412,7 +412,7 @@ namespace Isis {
    * @param The list of other control pointers to append
    *
    * @return @b ControlList & Reference to this control list
-   * 
+   *
    * @see QList<Control *>::operator+=()
    */
   ControlList &ControlList::operator+=(const QList<Control *> &other) {
@@ -431,7 +431,7 @@ namespace Isis {
    *
    * @param other The control pointer to append
    *
-   * @return @b ControlList & Reference to this control list 
+   * @return @b ControlList & Reference to this control list
    *
    * @see QList<Control *>::operator+=()
    */
@@ -463,12 +463,12 @@ namespace Isis {
 
 
   /**
-   * Appends a control pointer to this control list 
+   * Appends a control pointer to this control list
    *
    * @param other The control pointer to append
-   * 
-   * @return @b ControlList & Reference to this control list 
-   * 
+   *
+   * @return @b ControlList & Reference to this control list
+   *
    * @see QList<Control *>::operator<<()
    */
   ControlList &ControlList::operator<<(Control * const &other) {
@@ -482,9 +482,9 @@ namespace Isis {
    * Assigns another list of control pointers to this control list
    *
    * @param rhs The other list of control pointers to assign
-   * 
-   * @return @b ControlList & Reference to this control list 
-   * 
+   *
+   * @return @b ControlList & Reference to this control list
+   *
    * @see QList<Control *>::operator=()
    */
   ControlList &ControlList::operator=(const QList<Control *> &rhs) {
@@ -567,7 +567,7 @@ namespace Isis {
 
 
   /**
-   * Delete all of the contained Controls from disk 
+   * Delete all of the contained Controls from disk
    *
    * @param project Project to delete controls from
    *
@@ -653,22 +653,25 @@ namespace Isis {
 
     controlDetailsWriter.writeStartElement("controls");
 
-    QFuture<void *> future = QtConcurrent::mapped(*this,
-                                                  CopyControlDataFunctor(project, newProjectRoot));
-    for (int i = 0; i < count(); i++) {
-      int newProgressValue = progressDialog.value() + 1;
-      progressLabel->setText(
-          tr("Saving Control Information for [%1] - %L2/%L3 done")
-            .arg(m_name)
-            .arg(newProgressValue, countWidth, 10, paddingChar)
-            .arg(count()));
-      progressDialog.setValue(newProgressValue);
-      future.resultAt(i);
-    }
+    // Only copy controls if saving to new location
+    if (project->newProjectRoot() != project->projectRoot()) {
+      QFuture<void *> future = QtConcurrent::mapped(*this, 
+                                                    CopyControlDataFunctor(project, newProjectRoot));
+      for (int i = 0; i < count(); i++) {
+        int newProgressValue = progressDialog.value() + 1;
+        progressLabel->setText(
+            tr("Saving Control Information for [%1] - %L2/%L3 done")
+              .arg(m_name)
+              .arg(newProgressValue, countWidth, 10, paddingChar)
+              .arg(count()));
+        progressDialog.setValue(newProgressValue);
+        future.resultAt(i);
+      }
 
-    progressLabel->setText(tr("Finalizing..."));
-    progressDialog.setRange(0, 0);
-    progressDialog.setValue(0);
+      progressLabel->setText(tr("Finalizing..."));
+      progressDialog.setRange(0, 0);
+      progressDialog.setValue(0);
+    }
 
     foreach (Control *control, *this) {
       control->save(controlDetailsWriter, project, newProjectRoot);
@@ -697,8 +700,8 @@ namespace Isis {
 
   /**
    * CopyControlDataFunctor copy constructor.
-   * 
-   * @param other The other CopyControlDataFunctor to initialize data from 
+   *
+   * @param other The other CopyControlDataFunctor to initialize data from
    */
   ControlList::CopyControlDataFunctor::CopyControlDataFunctor(const CopyControlDataFunctor &other) {
     m_project = other.m_project;
@@ -726,7 +729,7 @@ namespace Isis {
 
   /**
    * CopyControlDataFunctor assignment operator.
-   * 
+   *
    * @param rhs The other CopyControlDataFunctor to copy from
    *
    * @return @b ControlList::CopyControlDataFunctor The new copy
@@ -795,7 +798,7 @@ namespace Isis {
    * @param namespaceURI ???
    * @param localName The keyword name given to the member variable in the XML
    * @param qName ???
-   * 
+   *
    * @return @b bool If we should continue reading the XML (usually true).
    *
    * @throws IException::Io "Unable to open with read access"
diff --git a/isis/src/qisis/objs/ControlList/ControlList.h b/isis/src/qisis/objs/ControlList/ControlList.h
index 18ded77e93855f4b662b6612f0dbeec2b4a7580e..003ed2464f3803a14c50158d6f9e68ad322fdf88 100644
--- a/isis/src/qisis/objs/ControlList/ControlList.h
+++ b/isis/src/qisis/objs/ControlList/ControlList.h
@@ -22,14 +22,16 @@ namespace Isis {
    * another, saved to disk, or deleted from disk. Overrides several common QList methods for
    * managing a list of Controls as well. Adapted from ImageList
    *
-   * @author 2012-09-01 Tracie Sucharski 
+   * @author 2012-09-01 Tracie Sucharski
    *
-   * @internal 
-   *   @history 2012-09-01 Tracie Sucharski - Original version. 
+   * @internal
+   *   @history 2012-09-01 Tracie Sucharski - Original version.
    *   @history 2015-10-14 Jeffrey Covington - Declared ControlList * as a Qt
    *                           metatype for use with QVariant.
    *   @history 2016-06-06 Ian Humphrey - Updated documentation and coding standards. Fixes #3959.
    *   @history 2017-05-05 Tracie Sucharski - Removed Workorder.h, never used.
+   *   @history 2017-12-08 Tracie Sucharski - When saving project only copy the control if project
+   *                           is being saved to a new location.
    */
   class ControlList : public QObject, public QList<Control *> {
     Q_OBJECT
@@ -103,15 +105,15 @@ namespace Isis {
 
 
       /**
-       * This functor is used for copying the control nets between two projects quickly. This is 
+       * This functor is used for copying the control nets between two projects quickly. This is
        * designed to work with QtConcurrentMap, though the results are all NULL (QtConcurrentMap
        * is much faster than many QtConcurrentRun calls).
        *
        * @author 2012-10-11 Tracie Sucharski - Adapted from Copy ImageDataFunctor
        *
-       * @internal 
-       *   @history 2012-10-11 Tracie Sucharski - Original version. 
-       *  
+       * @internal
+       *   @history 2012-10-11 Tracie Sucharski - Original version.
+       *
        */
       class CopyControlDataFunctor : public std::unary_function<Control * const &, void *> {
         public:
@@ -130,13 +132,13 @@ namespace Isis {
 
       /**
        * Nested class used to write the ControlList object information to an XML file for the
-       * purposes of saving an restoring the state of the object. 
-       * 
+       * purposes of saving an restoring the state of the object.
+       *
        * @see ControlList::save for the expected format
        *
        * @author 2012-09-27 Tracie Sucharski - Adapted from ImageList::XmlHandler
        *
-       * @internal 
+       * @internal
        *   @history 2012-09-27 Tracie Sucharski - Original version.
        */
       class XmlHandler : public XmlStackedHandler {
@@ -151,7 +153,7 @@ namespace Isis {
         private:
           Q_DISABLE_COPY(XmlHandler);
 
-          ControlList *m_controlList; //!< Control list to be read or written 
+          ControlList *m_controlList; //!< Control list to be read or written
           Project *m_project; //!< Project that contains the control list
       };
 
diff --git a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp
index 140d2b5fab036de064b6f5c8c1678b165c2d502e..11357d618fa20b652895c31b8bd42645660298ee 100644
--- a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp
+++ b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp
@@ -47,8 +47,6 @@ namespace Isis {
    * @param allowLeftMouse[in] Allow/Disallow mouse events on Left ChipViewport
    * @param useGeometry[in]    Allow/Disallow geometry and rotation on right ChipViewport
    *
-   * @throws IException::Io    "Cannot create AutoRegFactory. As a result, sub-pixel registration
-   *                            will not work."
    * @author Tracie Sucharski
    * @internal
    *   @history 2008-15-??  Jeannie Walldren - Added error
@@ -72,20 +70,7 @@ namespace Isis {
     m_leftGroundMap = 0;
     m_rightGroundMap = 0;
 
-    try {
-      m_templateFileName = "$base/templates/autoreg/qnetReg.def";
-      Pvl pvl(m_templateFileName);
-      m_autoRegFact = AutoRegFactory::Create(pvl);
-    }
-    catch (IException &e) {
-      m_autoRegFact = NULL;
-      IException fullError(e, IException::Io,
-                           "Cannot create AutoRegFactory. As a result, "
-                           "sub-pixel registration will not work.",
-                           _FILEINFO_);
-      QString message = fullError.toString();
-      QMessageBox::information((QWidget *)parent, "Error", message);
-    }
+    m_templateFileName = "$base/templates/autoreg/qnetReg.def";
 
     createMeasureEditor(parent);
   }
@@ -142,21 +127,18 @@ namespace Isis {
     leftZoomIn->setIconSize(isize);
     leftZoomIn->setToolTip("Zoom In 2x");
     leftZoomIn->setWhatsThis("Zoom In 2x on left measure.");
-    leftZoomIn->setShortcut(Qt::Key_Plus);
 
     QToolButton *leftZoomOut = new QToolButton();
     leftZoomOut->setIcon(QPixmap(toolIconDir + "/viewmag-.png"));
     leftZoomOut->setIconSize(isize);
     leftZoomOut->setToolTip("Zoom Out 2x");
     leftZoomOut->setWhatsThis("Zoom Out 2x on left measure.");
-    leftZoomOut->setShortcut(Qt::Key_Minus);
 
     QToolButton *leftZoom1 = new QToolButton();
     leftZoom1->setIcon(QPixmap(toolIconDir + "/viewmag1.png"));
     leftZoom1->setIconSize(isize);
     leftZoom1->setToolTip("Zoom 1:1");
     leftZoom1->setWhatsThis("Show left measure at full resolution.");
-    leftZoom1->setShortcut(Qt::Key_Slash);
 
     QHBoxLayout *leftZoomPan = new QHBoxLayout;
     leftZoomPan->addWidget(leftZoomIn);
@@ -216,7 +198,6 @@ namespace Isis {
     m_rightZoomIn->setIconSize(isize);
     m_rightZoomIn->setToolTip("Zoom In 2x");
     m_rightZoomIn->setWhatsThis("Zoom In 2x on right measure.");
-    m_rightZoomIn->setShortcut(Qt::Key_Plus);
 
     m_rightZoomOut = new QToolButton();
     m_rightZoomOut->setIcon(QIcon(FileName("$base/icons/viewmag-.png").
@@ -224,14 +205,12 @@ namespace Isis {
     m_rightZoomOut->setIconSize(isize);
     m_rightZoomOut->setToolTip("Zoom Out 2x");
     m_rightZoomOut->setWhatsThis("Zoom Out 2x on right measure.");
-    m_rightZoomOut->setShortcut(Qt::Key_Minus);
 
     m_rightZoom1 = new QToolButton();
     m_rightZoom1->setIcon(QPixmap(toolIconDir + "/viewmag1.png"));
     m_rightZoom1->setIconSize(isize);
     m_rightZoom1->setToolTip("Zoom 1:1");
     m_rightZoom1->setWhatsThis("Show right measure at full resolution.");
-    m_rightZoom1->setShortcut(Qt::Key_Slash);
 
     QHBoxLayout *rightZoomPan = new QHBoxLayout;
     rightZoomPan->addWidget(m_rightZoomIn);
@@ -607,7 +586,6 @@ namespace Isis {
     m_autoReg->setShortcut(Qt::Key_R);
     m_autoReg->setToolTip("Sub-pixel register the right measure to the left. "
                           "<strong>Shortcut: R</strong>");
-    m_autoReg->setToolTip("Sub-pixel register the right measure to the left");
     m_autoReg->setWhatsThis("Sub-pixel register the right measure to the left "
                        "and move the result under the crosshair.  After "
                        "viewing the results, the option exists to move the "
@@ -634,9 +612,11 @@ namespace Isis {
     m_saveMeasure->setShortcut(Qt::Key_M);
     m_saveDefaultPalette = m_saveMeasure->palette();
 
+    //  Blink extension allows all measures in the current control point to be blinked and gives
+    //  user ability to select which measures and the order for blinking
     m_blinkExtension = new QWidget;
 
-    QPushButton *blinkButton = new QPushButton("Blink");
+    QPushButton *blinkButton = new QPushButton("Advanced Blink");
     blinkButton->setCheckable(true);
     connect(blinkButton, &QAbstractButton::toggled, m_blinkExtension, &QWidget::setVisible);
     connect(blinkButton, SIGNAL(clicked()), this, SLOT(showBlinkExtension()));
@@ -776,6 +756,34 @@ namespace Isis {
   }
 
 
+  /**
+   * Set the tack position of the measure in the left ChipViewport
+   *
+   * @param sample[in]  Sample of the tack position for the right ChipViewport
+   * @param line[in]    Line of the tack position for the left ChipViewport 
+   *  
+   */
+  void ControlMeasureEditWidget::setLeftPosition(double sample, double line) {
+
+    m_leftChip->TackCube(sample, line);
+    emit updateLeftView(sample, line);
+  }
+
+
+  /**
+   * Set the tack position of the measure in the right ChipViewport
+   *
+   * @param sample[in]  Sample of the tack position for the right ChipViewport
+   * @param line[in]    Line of the tack position for the left ChipViewport 
+   *  
+   */
+  void ControlMeasureEditWidget::setRightPosition(double sample, double line) {
+
+    m_rightChip->TackCube(sample, line);
+    emit updateRightView(sample, line);
+  }
+
+
   /**
    * Set the measure displayed in the right ChipViewport
    *
@@ -812,6 +820,8 @@ namespace Isis {
       m_autoRegExtension->hide();
       m_autoReg->setText("Register");
       m_autoReg->setShortcut(Qt::Key_R);
+      m_autoReg->setToolTip("Sub-pixel register the right measure to the left. "
+                            "<strong>Shortcut: R</strong>");
     }
     m_autoRegAttempted = false;
 
@@ -1017,15 +1027,37 @@ namespace Isis {
    *                             successful, change save button to red.
    *   @history 2011-10-21  Tracie Sucharski - Add try/catch around registration
    *                             to catch errors thrown from autoreg class.
+   *   @history 2017-04-21 Marjorie Hahn - Added auto registration factory creation.
    *
    */
   void ControlMeasureEditWidget::registerPoint() {
 
+    // if the auto registration factory has not been initialized, do it here
+    if (m_autoRegFact == NULL) {
+      try {
+        Pvl pvl(m_templateFileName);
+        m_autoRegFact = AutoRegFactory::Create(pvl);
+      }
+      catch (IException &e) {
+        m_autoRegFact = NULL;
+        IException fullError(e, IException::Io,
+                            "Cannot create AutoRegFactory. As a result, "
+                            "sub-pixel registration will not work.",
+                            _FILEINFO_);
+        QString message = fullError.toString();
+        QMessageBox::information((QWidget *)parent(), "Error", message);
+        return;
+      }
+    }
+
     if ( m_autoRegShown ) {
       //  Undo Registration
       m_autoRegShown = false;
       m_autoRegExtension->hide();
       m_autoReg->setText("Register");
+      m_autoReg->setShortcut(Qt::Key_R);
+      m_autoReg->setToolTip("Sub-pixel register the right measure to the left. "
+                            "<strong>Shortcut: R</strong>");
 
       //  Reload chip with original measure
       emit updateRightView(m_rightMeasure->GetSample(),
@@ -1176,6 +1208,11 @@ namespace Isis {
    *                          QnetTool::measureSaved to ::saveMeasure.  The error checking now
    *                          forces the edit lock check box to be unchecked before the measure
    *                          can be saved.
+   *   @history 2015-01-09 Ian Humphrey - Modified to prevent segmentation fault that arises when
+   *                           registering, opening a template file, and saving the measure. This
+   *                           was caused by not handling the exception thrown by
+   *                           ControlMeasure::SetLogData(), which produces undefined behavior
+   *                           within the Qt signal-slot connection mechanism.
    *
    */
   void ControlMeasureEditWidget::saveMeasure() {
@@ -1190,6 +1227,29 @@ namespace Isis {
       }
 
       if ( m_autoRegShown ) {
+        try {
+          //  Save  autoreg parameters to the right measure log entry
+          //  Eccentricity may be invalid, check before writing.
+          m_rightMeasure->SetLogData(ControlMeasureLogData(
+                                     ControlMeasureLogData::GoodnessOfFit,
+                                     m_autoRegFact->GoodnessOfFit()));
+          double minZScore, maxZScore;
+          m_autoRegFact->ZScores(minZScore,maxZScore);
+          m_rightMeasure->SetLogData(ControlMeasureLogData(
+                                     ControlMeasureLogData::MinimumPixelZScore,
+                                     minZScore));
+          m_rightMeasure->SetLogData(ControlMeasureLogData(
+                                     ControlMeasureLogData::MaximumPixelZScore,
+                                     maxZScore));
+        }
+        // need to handle exception that SetLogData throws if our data is invalid -
+        // unhandled exceptions thrown in Qt signal and slot connections produce undefined behavior
+        catch (IException &e) {
+          QString message = e.toString();
+          QMessageBox::critical((QWidget *)parent(), "Error", message);
+          return;
+        }
+
         //  Reset AprioriSample/Line to the current coordinate, before the
         //  coordinate is updated with the registered coordinate.
         m_rightMeasure->SetAprioriSample(m_rightMeasure->GetSample());
@@ -1197,23 +1257,13 @@ namespace Isis {
 
         m_rightMeasure->SetChooserName("Application qnet");
         m_rightMeasure->SetType(ControlMeasure::RegisteredSubPixel);
-        //  Save  autoreg parameters to the right measure log entry
-        //  Eccentricity may be invalid, check before writing.
-        m_rightMeasure->SetLogData(ControlMeasureLogData(
-                               ControlMeasureLogData::GoodnessOfFit,
-                               m_autoRegFact->GoodnessOfFit()));
-        double minZScore, maxZScore;
-        m_autoRegFact->ZScores(minZScore,maxZScore);
-        m_rightMeasure->SetLogData(ControlMeasureLogData(
-                                 ControlMeasureLogData::MinimumPixelZScore,
-                                 minZScore));
-        m_rightMeasure->SetLogData(ControlMeasureLogData(
-                                 ControlMeasureLogData::MaximumPixelZScore,
-                                 maxZScore));
 
         m_autoRegShown = false;
         m_autoRegExtension->hide();
         m_autoReg->setText("Register");
+        m_autoReg->setToolTip("Sub-pixel register the right measure to the left. "
+                              "<strong>Shortcut: R</strong>");
+        m_autoReg->setShortcut(Qt::Key_R);
       }
       else {
         m_rightMeasure->SetChooserName(Application::UserName());
@@ -1594,6 +1644,7 @@ namespace Isis {
           m_templateFileName, _FILEINFO_);
       QString message = fullError.toString();
       QMessageBox::information((QWidget *)parent(), "Error", message);
+      emit setTemplateFailed(m_templateFileName);
       return false;
     }
   }
@@ -1671,16 +1722,13 @@ namespace Isis {
   }
 
 
-
-
-
-
-
-//  TODO IPCE   2016-06-13  ALL CODE BELOW HERE IS TEMPORARY PROTOTYPE CODE  NEEDS MUCH CLEANUP, LEAKY MEMORY, ETC
-
-
-
-
+  /**
+   * Set the Control Point for this widget
+   *
+   * @param editPoint[in]  ControlPoint for this widget
+   * @param snList[in]     SerialNumberList associated with the control net containing the ControlPoint 
+   *  
+   */
   void ControlMeasureEditWidget::setPoint(ControlPoint *editPoint, SerialNumberList *snList) {
 
     m_editPoint = editPoint;
@@ -1712,12 +1760,13 @@ namespace Isis {
   }
 
 
-  //!  Slot to start blink function
+  //!  Slot to start blink function for advanced blink functionality
   void ControlMeasureEditWidget::blinkStartRight() {
 
     if ( m_timerOnRight ) return;
 
-    //  Set up blink list.  Create ChipViewport for each cube active in the ListWidget
+    //  Set up blink list.  Create ChipViewport for each cube active in the ListWidget, using the
+    //  correct zoom and geom selections
     QList<QListWidgetItem *> selected = m_blinkListWidget->selectedItems();
     if (selected.size() < 1) {
       QMessageBox::information((QWidget *)parent(), "Error", "No files selected for blinking.");
@@ -1735,7 +1784,13 @@ namespace Isis {
       blinkChip->Load(*blinkCube);
       ChipViewport *blinkViewport = new ChipViewport(VIEWSIZE, VIEWSIZE, this);
       blinkViewport->setChip(blinkChip, blinkCube);
-      m_blinkChipViewportListRight.append(blinkViewport);
+      if (m_geomIt) {
+        blinkViewport->geomChip(m_leftChip, m_leftCube);
+      }
+      else {
+        blinkViewport->zoom(m_leftView->zoomFactor());
+      }
+      m_blinkChipViewportListRight.append(blinkViewport); 
     }
 
     m_blinkIndexRight = 0;
diff --git a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.h b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.h
index 7a03032e8e36306260b3bcb58e1eb2db58ff6c6f..ab1b0c32b2ba7acd43856f0dcc4f23882c3de867 100644
--- a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.h
+++ b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.h
@@ -144,7 +144,21 @@ namespace Isis {
     *   @history 2017-08-11 Tracie Sucharski - Created a new ControlMeasure when editing points so
     *                           that the edit ControlPoint is no changed until user selects
     *                           "Save Measures", and colorize save buttons.  Fixes #4984.
-    *
+    *   @history 2018-06-28 Kaitlyn Lee - Removed shortcuts from zoom buttons because of ambiguous
+    *                           shortcut errors. Set the shortcut and tooltip of m_autoReg inside of
+    *                           registerPoint() to allow the user to use the shortcut after an
+    *                           undo-registration ocurs.
+    *   @history 2018-09-06 Tracie Sucharski - Added bug fixes from qnet's ControlPointEdit class
+    *                           including moving the creation of AutoRegFactory from constructor
+    *                           to the registerPoint method and fixing seg fault happening in
+    *                           saveMeasure when calling ControlMeasure::SetLogData.
+    *   @history 2018-09-24 Tracie Sucharski - Fixed right measure chooser name to the
+    *                           Application::User.
+    *   @history 2018-09-26 Tracie Sucharski - Added public method to allow change measure tack
+    *                           points.
+    *   @history 2018-10-10 Tracie Sucharski - Fixed blink extension to use geom if selected and
+    *                           correct zoom factor.
+    *                          
     *   @todo  Re-think design of the change made on 2012-07-26.  The linking was put into
     *                          ::updateLeftPositionLabel because it was the fastest solution, but
     *                          should this be put somewhere else.
@@ -164,17 +178,21 @@ namespace Isis {
       QString templateFileName() {
         return m_templateFileName;
       };
-      bool setTemplateFile(QString);
       void allowLeftMouse(bool allowMouse);
 
+      void setLeftPosition(double sample, double line);
+      void setRightPosition(double sample, double line);
+
     signals:
       void updateLeftView(double sample, double line);
       void updateRightView(double sample, double line);
       void measureSaved();
       void newControlNetwork(ControlNet *);
+      void setTemplateFailed(QString);
       void stretchChipViewport(Stretch *, CubeViewport *);
 
     public slots:
+      bool setTemplateFile(QString);
       void setPoint(ControlPoint *editPoint, SerialNumberList *snList);
       void setLeftMeasure(ControlMeasure *leftMeasure,
                           Cube *leftCube, QString pointId);
diff --git a/isis/src/qisis/objs/ControlNetTool/ControlNetTool.cpp b/isis/src/qisis/objs/ControlNetTool/ControlNetTool.cpp
index 6228df16ed397a8e44cf72db2d2e334f0fa2d851..3c2e25bb00b8dbbc81f75a8e2d947a0ed90f452f 100644
--- a/isis/src/qisis/objs/ControlNetTool/ControlNetTool.cpp
+++ b/isis/src/qisis/objs/ControlNetTool/ControlNetTool.cpp
@@ -26,6 +26,8 @@
 #include "MdiCubeViewport.h"
 #include "Project.h"
 #include "SerialNumber.h"
+#include "Shape.h"
+#include "ShapeList.h"
 #include "ToolPad.h"
 #include "UniversalGroundMap.h"
 #include "ViewportMainWindow.h"
@@ -35,9 +37,10 @@ using namespace std;
 
 namespace Isis {
   /**
-   * Ipce (Qnet) tool - Handles mouse button actions and drawing control points on viewports
+   * ControlNet tool - Handles mouse button actions and drawing control points on viewports in the
+   * CubeDnView for the ipce application. 
    *
-   * @param parent Pointer to the parent widget for the Ipce tool
+   * @param parent Pointer to the parent widget for the ControlNet tool
    *
    * @author 2016-09-01 Tracie Sucharski
    *
@@ -56,10 +59,10 @@ namespace Isis {
 
 
   /**
-    * Adds the Ipce tool action to the tool pad.
+    * Adds the ControlNet tool action to the tool pad.
     *
     * @param pad Tool pad
-    * @return @b QAction* Pointer to Tie tool action
+    * @return @b QAction* Pointer to ControlNet tool action
     *
     * @internal
     *   @history 2017-07-25 Tyler Wilson - Set the
@@ -73,6 +76,8 @@ namespace Isis {
      QAction *action = new QAction(this);
      action->setIcon(QPixmap(toolIconDir()+"/HILLBLU_molecola.png"));
      action->setToolTip("Control Point Editor (T)");
+     action->setStatusTip("If tool disabled, make sure you have a control net in your project and "
+                          "it is set to the active control.");
      action->setShortcut(Qt::Key_T);
 
      //The object name is being set and used as a key to search with for this action in
@@ -99,13 +104,16 @@ namespace Isis {
     */
    void ControlNetTool::setControlNet(ControlNet *cnet) {
      m_controlNet = cnet;
-     // TODO:  TLS 7-25-17  This method is called by Project::open before there are any viewports,
-     // so the following command seg faults.  Need to add check for viewports or ??
-     //paintAllViewports();
+     //  Cannot use Tool::cubeViewportList() because it does not properly return a NULL if viewports
+     //  don't exist.
+     if (workspace() && workspace()->cubeViewportList()) {
+       paintAllViewports();
+     }
    }
 
 
    void ControlNetTool::loadNetwork() {
+
      setControlNet(m_directory->project()->activeControl()->controlNet());
    }
 
@@ -122,7 +130,7 @@ namespace Isis {
    */
   void ControlNetTool::mouseButtonRelease(QPoint p, Qt::MouseButton s) {
     MdiCubeViewport *cvp = cubeViewport();
-    if (cvp  == NULL) return;
+    if (m_controlNet == NULL || cvp  == NULL) return;
 
     // Determine if the cvp is a Shape
     //  Get all ShapeLists from Project
@@ -134,12 +142,13 @@ namespace Isis {
 
     if (s == Qt::LeftButton) {
 
-//      if (sn == m_groundSN) {
-//        QString message = "Cannot select point for editing on ground source.  Select ";
-//        message += "point using un-projected images or the Navigator Window.";
-//        QMessageBox::critical(m_ControlNetTool, "Error", message);
-//        return;
-//      }
+      if (isGroundSource) {
+        QString message = "Cannot select point for editing on ground source.  Select ";
+        message += "point using un-projected images or the Cnet Editor View (choose \"View Network\" ";
+        message += "from the context menu for control nets on the project tree).";
+        QMessageBox::critical(m_ControlNetTool, "Error", message);
+        return;
+      }
 
       //  Find closest control point in network
       // since we are in a connected slot, we need to handle exceptions thrown by FindClosest
@@ -164,12 +173,13 @@ namespace Isis {
         return;
       }
 
-//      if (m_groundOpen && file == m_groundCube->fileName()) {
-//        QString message = "Cannot select point for deleting on ground source.  Select ";
-//        message += "point using un-projected images or the Navigator Window.";
-//        QMessageBox::critical(m_ControlNetTool, "Error", message);
-//        return;
-//      }
+      if (isGroundSource) {
+        QString message = "Cannot select point for deleting on ground source.  Select ";
+        message += "point using un-projected images or the Cnet Editor View (choose \"View Network\" ";
+        message += "from the context menu for control nets on the project tree).";
+        QMessageBox::critical(m_ControlNetTool, "Error", message);
+        return;
+      }
 
       //  Find closest control point in network
       ControlPoint *point = NULL;
@@ -278,10 +288,23 @@ namespace Isis {
     // TODO: Should we add the SN to the viewPort
     QString serialNumber = SerialNumber::Compose(*vp->cube(), true);
 
-//    if (serialNumber == m_groundSN) {
-//      drawGroundMeasures(vp, painter);
-//      return;
-//    }
+    // Get list of shapes in the ipce project and see if the serial number for viewport passed in
+    // matches any of the project shapes.  If there's a match, draw any ground points.
+    QList<ShapeList *> projectShapes = m_directory->project()->shapes();
+    foreach (ShapeList *shapeList, projectShapes) {
+      foreach (Shape *shape, *shapeList) {
+        QString shapeSn = shape->serialNumber();
+        if (serialNumber == shapeSn) {
+          //  Get cube, then ground map so that location can be calculated
+          UniversalGroundMap *gmap = new UniversalGroundMap(*(shape->cube()));
+          drawGroundMeasures(vp, painter, gmap);
+          delete gmap;
+          gmap = NULL;
+          return;
+        }
+      }
+    }
+
 
     if (!m_controlNet->GetCubeSerials().contains(
                       serialNumber)) return;
@@ -346,4 +369,74 @@ namespace Isis {
       }
     }
   }
+
+
+  /**
+   * Draw all Fixed or Constrained points on the ground source viewport
+   *  
+   * @param vp Viewport whose measurements will be drawn
+   * @param painter The QPainter used to draw crosshair 
+   * @param groundMap The UniversalGroundMap for the Cube associated with this viewport 
+   *
+   */
+  void ControlNetTool::drawGroundMeasures(MdiCubeViewport *vp, QPainter *painter,
+                                          UniversalGroundMap *groundMap) {
+
+
+    // if ControlPointEditView is open, the editPointId will contain the ControlPoint Id of the
+    // current edit point. Save so that when drawing point, it can be drawn to indicate current
+    // edit point.
+    ControlPoint *currentEditPoint = NULL;
+    if (m_directory->controlPointEditView()) {
+      currentEditPoint = m_directory->controlPointEditView()->controlPointEditWidget()->editPoint();
+    }
+
+
+    // loop through control network looking for fixed and constrained points
+    for (int i = 0; i < m_controlNet->GetNumPoints(); i++) {
+      ControlPoint &p = *((*m_controlNet)[i]);
+      if (p.GetType() == ControlPoint::Free) continue;
+      if (!p.HasAprioriCoordinates()) continue;
+
+      // Find the sample, line location on the ground image
+      if (groundMap->SetGround(p.GetAprioriSurfacePoint().GetLatitude(),
+                               p.GetAprioriSurfacePoint().GetLongitude())) {
+        double samp = groundMap->Sample();
+        double line = groundMap->Line();
+        int x, y;
+        vp->cubeToViewport(samp, line, x, y);
+
+        // if the point is ignored,
+        if (p.IsIgnored()) {
+          painter->setPen(QColor(255, 255, 0)); // set point marker yellow
+          // draw points
+          painter->drawLine(x - 5, y, x + 5, y);
+          painter->drawLine(x, y - 5, x, y + 5);
+        }
+        // If this point is the current edit point in ControlPointEditView
+        else if (currentEditPoint != NULL && p.GetId() == currentEditPoint->GetId()) {
+          //  Draw circle, then crosshair inside circle
+          QPainterPath path;
+          path.addEllipse(QPointF(x,y), 5., 5.);
+          path.moveTo(x, y-5);
+          path.lineTo(x, y+5);
+          path.moveTo(x-5, y);
+          path.lineTo(x+5, y);
+          // set point marker red
+          QBrush brush(Qt::red);
+          // set point marker bold - line width 2
+          QPen pen(brush, 2);
+          painter->setPen(pen);
+          painter->drawPath(path);
+        }
+        //  Only Constrained or Fixed pts.  If Free, we've already skipped.
+        else {
+          painter->setPen(Qt::magenta);// set point marker magenta
+          // draw points
+          painter->drawLine(x - 5, y, x + 5, y);
+          painter->drawLine(x, y - 5, x, y + 5);
+        }
+      }
+    }
+  }
 }
diff --git a/isis/src/qisis/objs/ControlNetTool/ControlNetTool.h b/isis/src/qisis/objs/ControlNetTool/ControlNetTool.h
index 1bc0ab089ba5a01eb4cf76b5de9d2a285658052d..dfa1f4a5aa233bf3ba97cabbe4495c705961e0bd 100644
--- a/isis/src/qisis/objs/ControlNetTool/ControlNetTool.h
+++ b/isis/src/qisis/objs/ControlNetTool/ControlNetTool.h
@@ -29,8 +29,8 @@ namespace Isis {
   class UniversalGroundMap;
 
   /**
-   * @brief ControlNetTool operations ipce, handles mouse events on views for control point editing 
-   *        for the ipce app.
+   * @brief ControlNetTool Handles mouse events on CubeDnViews for control point editing for the 
+   *        ipce app.
    *
    * @ingroup Visualization Tools
    *
@@ -52,6 +52,14 @@ namespace Isis {
    *   @history 2017-08-08 Cole Neubauer - Renamed from IpceTool.  Fixes #5090. 
    *   @history 2017-08-09 Cole Neubauer - Added loadNetwork() for changing inbetween active
    *                           networks Fixes #4567
+   *   @history 2018-03-12 Tracie Sucharski - Fixed some documentation leftover from renaming from
+   *                           IpceTool.  References #5090.
+   *   @history 2018-03-27 Tracie Sucharski - Redraw cube viewports when a new control net is
+   *                           loaded.
+   *   @history 2018-04-13 Tracie Sucharski - In mouseButtonRelease method return if a control net
+   *                           has not been set.
+   *   @history 2018-09-21 Tracie Sucharski - Draw Fixed and Constrained points on ground cubes.
+   *                           References #5504.
    */
   class ControlNetTool : public Tool {
     Q_OBJECT
@@ -85,6 +93,7 @@ namespace Isis {
       void createActions();
       void createMenus();
       void drawAllMeasurements(MdiCubeViewport *vp, QPainter *painter);
+      void drawGroundMeasures (MdiCubeViewport *vp, QPainter *painter, UniversalGroundMap *groundMap);
 
       QPointer<MainWindow> m_ControlNetTool;
       Directory *m_directory;
diff --git a/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.cpp b/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.cpp
index 77b7889cf77106efafd6217a6edc37e4352c5c03..15150ef07be6d3d70712baaae96ecb3ff0eddd14 100644
--- a/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.cpp
+++ b/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.cpp
@@ -29,7 +29,6 @@
 #include <QSize>
 #include <QSizePolicy>
 #include <QToolBar>
-#include <QVBoxLayout>
 #include <QWidgetAction>
 
 #include "ControlNet.h"
@@ -53,41 +52,13 @@ namespace Isis {
     //       net, while the editors might be using a different net.  Will Directory keep track?
     //
 
+    setCentralWidget(m_controlPointEditWidget);
 
-    QVBoxLayout *layout = new QVBoxLayout;
-    setLayout(layout);
-
-    layout->addWidget(m_controlPointEditWidget);
-
-    m_permToolBar = new QToolBar("Standard Tools", 0);
-    m_permToolBar->setObjectName("permToolBar");
-    m_permToolBar->setIconSize(QSize(22, 22));
-    //toolBarLayout->addWidget(m_permToolBar);
-
-    m_activeToolBar = new QToolBar("Active Tool", 0);
-    m_activeToolBar->setObjectName("activeToolBar");
-    m_activeToolBar->setIconSize(QSize(22, 22));
-    //toolBarLayout->addWidget(m_activeToolBar);
-
-    m_toolPad = new ToolPad("Tool Pad", 0);
-    m_toolPad->setObjectName("toolPad");
-    //toolBarLayout->addWidget(m_toolPad);
-
-
-//  m_controlPointEditWidget->addToPermanent(m_permToolBar);
-//  m_controlPointEditWidget->addTo(m_activeToolBar);
-//  m_controlPointEditWidget->addTo(m_toolPad);
-
-    m_activeToolBarAction = new QWidgetAction(this);
-    m_activeToolBarAction->setDefaultWidget(m_activeToolBar);
-
-    setAcceptDrops(true);
-
-    QSizePolicy policy = sizePolicy();
-    policy.setHorizontalPolicy(QSizePolicy::Expanding);
-    policy.setVerticalPolicy(QSizePolicy::Expanding);
-    setSizePolicy(policy);
+    // Store the buttons (actions) for easy enable/disable.
+    m_buttons = m_controlPointEditWidget->findChildren<QPushButton *>();
 
+    // On default, actions are disabled until the cursor enters the view.
+    disableActions();
   }
 
 
@@ -96,13 +67,6 @@ namespace Isis {
    */
   ControlPointEditView::~ControlPointEditView() {
     delete m_controlPointEditWidget;
-    delete m_permToolBar;
-    delete m_activeToolBar;
-    delete m_toolPad;
-
-    m_permToolBar = 0;
-    m_activeToolBar = 0;
-    m_toolPad = 0;
   }
 
 
@@ -118,46 +82,21 @@ namespace Isis {
 
 
   /**
-   * Returns the suggested size for the widget.
-   *
-   * @return (QSize) The size
+   * Disables buttons/actions. Overriden method.
    */
-  QSize ControlPointEditView::sizeHint() const {
-    return QSize(800, 600);
+  void ControlPointEditView::disableActions() {
+    foreach (QPushButton *button, m_buttons) {
+      button->setDisabled(true);
+    }
   }
 
 
   /**
-   * Returns a list of actions for the permanent tool bar.
-   *
-   * @return (QList<QAction *>) The actions
+   * Enables buttons/actions. Overriden method.
    */
-  QList<QAction *> ControlPointEditView::permToolBarActions() {
-    return m_permToolBar->actions();
+  void ControlPointEditView::enableActions() {
+    foreach (QPushButton *button, m_buttons) {
+      button->setEnabled(true);
+    }
   }
-
-
-  /**
-   * Returns a list of actions for the active tool bar.
-   *
-   * @return (QList<QAction *>) The actions
-   */
-  QList<QAction *> ControlPointEditView::activeToolBarActions() {
-    QList<QAction *> actions;
-    actions.append(m_activeToolBarAction);
-    return actions;
-  }
-
-
-  /**
-   * Returns a list of actions for the tool pad.
-   *
-   * @return (QList<QAction *>) The actions
-   */
-  QList<QAction *> ControlPointEditView::toolPadActions() {
-    return m_toolPad->actions();
-  }
-
-
 }
-
diff --git a/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.h b/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.h
index 18304a19efbdae94a4d126ab560826b6f501e0a2..154bbf1d11d73eab41a80fabe46cc162f0a9a5eb 100644
--- a/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.h
+++ b/isis/src/qisis/objs/ControlPointEditView/ControlPointEditView.h
@@ -26,6 +26,7 @@
 #include <QPointer>
 #include <QToolBar>
 #include <QWidgetAction>
+#include <QPushButton>
 
 #include "AbstractProjectItemView.h"
 
@@ -40,10 +41,26 @@ namespace Isis {
    * View for editing a single ControlPoint
    *
    * @author 2016-04-06 Tracie Sucharski
-   *    
-   * @internal 
+   *
+   * @internal
    *   @history 2016-09-30 Tracie Sucharski - Pass in directory to constructor, so that we can
-   *                           query for shapes and other data from the project. 
+   *                           query for shapes and other data from the project.
+   *   @history 2018-05-28 Kaitlyn Lee - Since AbstractProjectItemView now inherits
+   *                           from QMainWindow, I added a dummy central widget
+   *                           and set its layout to QVBoxLayout. We used to set
+   *                           the whole CnetEditorView widget's layout, now we only
+   *                           set the central widget's layout.
+   *   @history 2018-06-13 Kaitlyn Lee - Removed toolbars, since they are not needed.
+   *   @history 2018-06-28 Kaitlyn Lee - Removed toolbars. When multiple views are open,
+   *                           there is a possibility of getting ambiguous shortcut errors.
+   *                           To counter this, we enable/disable actions. On default, a
+   *                           view's actions are disabled. To enable the actions, move the
+   *                           cursor over the view. When a user moves the cursor outside of
+   *                           the view, the actions are disabled. Because this view uses
+   *                           buttons instead of actions, overrode enableActions() and
+   *                           disableActions() and added m_buttons to enable/disable buttons.
+   *   @history 2018-07-09 Tracie Sucharski -  Remove setSizePolicy and sizeHint method which is now
+   *                           taken care of in the parent class, AbstractProjectItemView.
    */
 
 class ControlPointEditView : public AbstractProjectItemView {
@@ -54,30 +71,16 @@ class ControlPointEditView : public AbstractProjectItemView {
     ControlPointEditView(Directory *directory, QWidget *parent = 0);
     ~ControlPointEditView();
 
-    virtual QList<QAction *> permToolBarActions();
-    virtual QList<QAction *> activeToolBarActions();
-    virtual QList<QAction *> toolPadActions();
-
     ControlPointEditWidget *controlPointEditWidget();
 
-//  setEditPoint(ControlPoint *editPoint);
-//  createNewPoint(QString serialNumber, Latitude lat, Longitude lon);
-
-    QSize sizeHint() const;
-
-  public slots:
-
   private slots:
+    void disableActions();
+    void enableActions();
 
   private:
     QPointer<ControlPointEditWidget> m_controlPointEditWidget;
     QMap<Control *, ProjectItem *> m_controlItemMap;  //!<Maps control net to project item
-
-    QToolBar *m_permToolBar; //!< The permanent tool bar
-    QToolBar *m_activeToolBar; //!< The active tool bar
-    ToolPad *m_toolPad; //!< The tool pad
-
-    QWidgetAction *m_activeToolBarAction; //!< Stores the active tool bar
+    QList<QPushButton *> m_buttons;
   };
 }
 
diff --git a/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.cpp b/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.cpp
index 0622c49712370aa9e965148b7929ae886cbd66e2..38b90818a993f0a16dbfa52dce59ef399895d8f0 100644
--- a/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.cpp
+++ b/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.cpp
@@ -52,6 +52,8 @@
 #include "Shape.h"
 #include "ShapeList.h"
 #include "SpecialPixel.h"
+#include "Table.h"
+#include "TemplateList.h"
 #include "ToolPad.h"
 #include "UniversalGroundMap.h"
 #include "ViewportMainWindow.h"
@@ -75,9 +77,11 @@ namespace Isis {
     m_cnetModified = false;
     m_templateModified = false;
     m_serialNumberList = NULL;
+    m_editPoint = NULL;
 
     m_changeAllGroundLocation = false;
     m_changeGroundLocationInNet = false;
+    m_demOpen = false;
 
     m_parent = parent;
 
@@ -85,14 +89,14 @@ namespace Isis {
 
     connect(this, SIGNAL(newControlNetwork(ControlNet *)),
             m_measureEditor, SIGNAL(newControlNetwork(ControlNet *)));
+
+    connect(m_directory->project(), SIGNAL(templatesAdded(TemplateList *)),
+            this, SLOT(addTemplates(TemplateList *)));
   }
 
 
   ControlPointEditWidget::~ControlPointEditWidget () {
 
-    // TODO: Don't write settings in destructor, must do this earlier in close event
-//  writeSettings();
-
   }
 
 
@@ -161,7 +165,6 @@ namespace Isis {
     connect(this, SIGNAL(stretchChipViewport(Stretch *, CubeViewport *)),
             m_measureEditor, SIGNAL(stretchChipViewport(Stretch *, CubeViewport *)));
     connect(m_measureEditor, SIGNAL(measureSaved()), this, SLOT(measureSaved()));
-    connect(m_measureEditor, SIGNAL(measureSaved()), this, SLOT(measureSaved()));
     connect(this, SIGNAL(cnetModified()), this, SLOT(colorizeSaveNetButton()));
 
     QPushButton *addMeasure = NULL;
@@ -178,11 +181,9 @@ namespace Isis {
     }
 
     m_reloadPoint = new QPushButton("Reload Point");
-    m_reloadPoint->setShortcut(Qt::Key_R);
     m_reloadPoint->setToolTip("Reload the control point.");
     m_reloadPoint->setWhatsThis("Reload the measures for the control point"
-                            " in the Chip Viewports to its saved values. "
-                            "<strong>Shortcut: R</strong>");
+                            " in the Chip Viewports to its saved values. ");
     connect(m_reloadPoint, SIGNAL(clicked()), this, SLOT(reloadPoint()));
 
     m_savePoint = new QPushButton ("Save Point");
@@ -219,21 +220,36 @@ namespace Isis {
     saveMeasureLayout->insertStretch(-1);
 
     m_cnetFileNameLabel = new QLabel("Control Network: " + m_cnetFileName);
-    m_cnetFileNameLabel->setToolTip("Name of opened control network file.");
-    m_cnetFileNameLabel->setWhatsThis("Name of opened control network file.");
 
-    m_templateFileNameLabel = new QLabel("Template File: " +
-        m_measureEditor->templateFileName());
-    m_templateFileNameLabel->setToolTip("Sub-pixel registration template File.");
-    m_templateFileNameLabel->setWhatsThis("FileName of the sub-pixel "
+    // Create a combobox to allow user to select either the default registration file or one of the
+    // imported registration files.
+    m_templateComboBox = new QComboBox();
+    m_templateComboBox->setToolTip("Choose a template file");
+    m_templateComboBox->setWhatsThis("FileName of the sub-pixel "
                   "registration template.  Refer to $ISISROOT/doc/documents/"
                   "PatternMatch/PatternMatch.html for a description of the "
                   "contents of this file.");
+    m_templateComboBox->addItem(m_measureEditor->templateFileName());
+    QList <TemplateList *> regTemplates = m_directory->project()->regTemplates();
+    foreach(TemplateList *templateList, regTemplates) {
+      foreach(Template *templateFile, *templateList){
+        m_templateComboBox->addItem(templateFile->importName()
+                                    + "/" + FileName(templateFile->fileName()).name());
+      }
+    }
+    QFormLayout *templateFileLayout = new QFormLayout();
+    templateFileLayout->addRow("Template File:", m_templateComboBox);
+
+    // Set-up connections to give registration combobox functionality
+    connect(m_templateComboBox, SIGNAL(activated(QString)),
+            this, SLOT(setTemplateFile(QString)));
+    connect(m_measureEditor, SIGNAL(setTemplateFailed(QString)),
+            this, SLOT(resetTemplateComboBox(QString)));
 
     QVBoxLayout * centralLayout = new QVBoxLayout;
 
     centralLayout->addWidget(m_cnetFileNameLabel);
-    centralLayout->addWidget(m_templateFileNameLabel);
+    centralLayout->addLayout(templateFileLayout);
     centralLayout->addWidget(createTopSplitter());
     centralLayout->addStretch();
     centralLayout->addWidget(m_measureEditor);
@@ -301,11 +317,7 @@ namespace Isis {
     // create left vertical layout
     m_ptIdValue = new QLabel;
 
-//TODO 2014-07-22 TLS ipce Handle ground control points SOON
     m_numMeasures = new QLabel;
-//  QHBoxLayout *pointInfoLayout = new QHBoxLayout;
-//  pointInfoLayout->addWidget(m_ptIdValue);
-//  pointInfoLayout->addWidget(m_numMeasures);
 
     m_aprioriLatitude = new QLabel;
     m_aprioriLongitude = new QLabel;
@@ -319,34 +331,36 @@ namespace Isis {
       this, SLOT(setIgnorePoint(bool)));
     connect(this, SIGNAL(ignorePointChanged()), m_ignorePoint, SLOT(toggle()));
 
-//  QHBoxLayout * pointStatusLayout = new QHBoxLayout;
-//  pointStatusLayout->addWidget(m_lockPoint);
-//  pointStatusLayout->addWidget(m_ignorePoint);
-
-    m_pointType = new QComboBox;
+    m_pointTypeCombo = new QComboBox;
     for (int i=0; i<ControlPoint::PointTypeCount; i++) {
-      m_pointType->insertItem(i, ControlPoint::PointTypeToString(
+      m_pointTypeCombo->insertItem(i, ControlPoint::PointTypeToString(
             (ControlPoint::PointType) i));
     }
     QFormLayout *pointTypeLayout = new QFormLayout;
-//  QLabel *pointTypeLabel = new QLabel("PointType:");
-    pointTypeLayout->addRow("PointType:", m_pointType);
-//  pointTypeLayout->addWidget(m_pointType);
-//  connect(m_pointType, SIGNAL(activated(int)),
-//    this, SLOT(setPointType(int)));
+    pointTypeLayout->addRow("PointType:", m_pointTypeCombo);
+    connect(m_pointTypeCombo, SIGNAL(activated(int)),
+            this, SLOT(setPointType(int)));
+
+    m_groundSourceCombo = new QComboBox();
+    m_radiusSourceCombo = new QComboBox();
+    connect(m_groundSourceCombo, SIGNAL(currentIndexChanged(int)),
+            this, SLOT(groundSourceFileSelectionChanged(int)));
+    QFormLayout *groundSourceLayout = new QFormLayout;
+    groundSourceLayout->addRow("Ground Source:", m_groundSourceCombo);
+    QFormLayout *radiusSourceLayout = new QFormLayout;
+    radiusSourceLayout->addRow("Radius Source:", m_radiusSourceCombo);
 
     QVBoxLayout * mainLayout = new QVBoxLayout;
     mainLayout->addWidget(m_ptIdValue);
     mainLayout->addWidget(m_numMeasures);
+    mainLayout->addLayout(groundSourceLayout);
+    mainLayout->addLayout(radiusSourceLayout);
     mainLayout->addWidget(m_aprioriLatitude);
     mainLayout->addWidget(m_aprioriLongitude);
     mainLayout->addWidget(m_aprioriRadius);
     mainLayout->addWidget(m_lockPoint);
     mainLayout->addWidget(m_ignorePoint);
     mainLayout->addLayout(pointTypeLayout);
-//  mainLayout->addLayout(pointInfoLayout);
-//  mainLayout->addLayout(pointStatusLayout);
-//  mainLayout->addLayout(pointTypeLayout);
 
     // create the groupbox
     QGroupBox * groupBox = new QGroupBox("Control Point");
@@ -423,8 +437,8 @@ namespace Isis {
     m_rightCombo->view()->setDropIndicatorShown(true);
     m_rightCombo->view()->setDragDropMode(QAbstractItemView::InternalMove);
 
-    // Attach shortcuts to Qnet Tool's window for selecting right measures
-    // Note: Qt handles this memory for us since m_qnetTool is the parent of these shortcuts
+    // Attach shortcuts to this widget for selecting right measures
+    // Note: Qt handles this memory for us since ControlPointEditWidget is the parent of these shortcuts
     QShortcut *nextMeasure = new QShortcut(Qt::Key_PageDown, this);
     connect(nextMeasure, SIGNAL(activated()), this, SLOT(nextRightMeasure()));
     QShortcut *prevMeasure = new QShortcut(Qt::Key_PageUp, this);
@@ -545,6 +559,72 @@ namespace Isis {
   }
 
 
+  /**
+   * Fill m_projectShapeNames with ALL shapes currently in project. The first 
+   * m_numberProjectShapesWithPoint actually contain the location of m_editPoint.
+   *
+   * @param latitude (double) Latitude for determining point location.  Defaults to Null which 
+   *                          results in the m_editPoint location being used, AprioriCoordinates
+   *                          if they exist, otherwise the reference measure's location will be
+   *                          used.
+   * @param longitude (double) Longitude for determining point location.  Defaults to Null which 
+   *                          results in the m_editPoint location being used, AprioriCoordinates
+   *                          if they exist, otherwise the reference measure's location will be
+   *                          used.
+   *
+   */
+  void ControlPointEditWidget::setShapesForPoint(double latitude, double longitude) {
+
+    if (latitude == Null || longitude == Null) {
+      //  Use current editPoint to get latitude, longitude.
+      // Use apriori surface point to find location on ground source.  If
+      // apriori surface point does not exist use reference measure
+      if (m_editPoint->HasAprioriCoordinates()) {
+        SurfacePoint sPt = m_editPoint->GetAprioriSurfacePoint();
+        latitude = sPt.GetLatitude().degrees();
+        longitude = sPt.GetLongitude().degrees();
+      }
+      else {
+        ControlMeasure m = *(m_editPoint->GetRefMeasure());
+        int camIndex = m_serialNumberList->serialNumberIndex(m.GetCubeSerialNumber());
+        Camera *cam;
+        cam = m_controlNet->Camera(camIndex);
+        cam->SetImage(m.GetSample(),m.GetLine());
+        latitude = cam->UniversalLatitude();
+        longitude = cam->UniversalLongitude();
+      }
+    }
+
+    m_numberProjectShapesWithPoint = 0;
+    m_projectShapeNames.clear();
+    m_nameToShapeMap.clear();
+
+    // Get all shapes from project, putting shapes that contain the current m_editPoint at the
+    // top of the list.
+    QStringList shapeNamesNoPoint;
+    // Create map between the Shape file name & Shape
+    QList<ShapeList *> shapeLists = m_directory->project()->shapes();
+    foreach (ShapeList *shapeList, shapeLists) {
+      foreach (Shape *shape, *shapeList) {
+        UniversalGroundMap *gmap = new UniversalGroundMap(*(shape->cube()));
+        if (gmap->SetUniversalGround(latitude, longitude)) {
+          m_projectShapeNames<<shape->fileName();
+        }
+        else {
+          shapeNamesNoPoint<<shape->fileName();
+        }
+        m_nameToShapeMap[shape->fileName()] = shape;
+        delete gmap;
+      }
+    }
+    m_numberProjectShapesWithPoint = m_projectShapeNames.count();
+    // Add shapes that do not contain point
+    if (shapeNamesNoPoint.count() > 0) {
+      m_projectShapeNames<<shapeNamesNoPoint;
+    }
+  }
+
+
   /**
    * Set both chip viewports to their original measures for the control point
    *
@@ -579,21 +659,80 @@ namespace Isis {
   /**
    * New control network being edited
    *
-   * @param cnet (ControlNet *) The control network to edit
-   * @param filename (Qstring) Need filename to write to widget label.  ControlNet doesn't
-   *                       contain a filename.
+   * @param cnet (Control *) The control network to edit
+   *
    * @internal
   */
   void ControlPointEditWidget::setControl(Control *control) {
     //  TODO  more error checking
+    m_control = control;
     m_controlNet = control->controlNet();
     m_cnetFileName = control->fileName();
+
+    QStringList cnetDirs = m_cnetFileName.split('/');
+    QString strippedCnetFilename = cnetDirs.value(cnetDirs.length() -1);
+    m_cnetFileNameLabel->setText("Control Network: " + strippedCnetFilename);
+    m_cnetFileNameLabel->setToolTip(m_cnetFileName);
+    m_cnetFileNameLabel->setWhatsThis(m_cnetFileName);
     setWindowTitle("Control Point Editor- Control Network File: " + m_cnetFileName);
 
     emit newControlNetwork(m_controlNet);
   }
 
 
+  /**
+   * New active control was set from ipce
+   *
+   * TODO:  This will need to be redesigned with the ::setControl method to better handle editing
+   * points from different cnets.
+   */
+  void ControlPointEditWidget::setControlFromActive() {
+
+    if (m_directory->project()->activeControl()) {
+      m_control = m_directory->project()->activeControl();
+      m_controlNet = m_control->controlNet();
+      m_cnetFileName = m_control->fileName();
+
+      m_cnetFileNameLabel->setText("Control Network: " + m_cnetFileName);
+      setWindowTitle("Control Point Editor- Control Network File: " + m_cnetFileName);
+
+      emit newControlNetwork(m_controlNet);
+    }
+  }
+
+
+  /**
+   * Load ground measure into right side and add to file combo boxes.
+   *
+   * @author 2013-12-06 Tracie Sucharski
+   *
+   * @internal
+   *   @history 2013-12-06 Tracie Sucharski - Original version.
+   *   @history 2015-05-19 Ian Humphrey and Makayla Shepherd - moved duplicated code to
+   *                           findPointLocation() and createTemporaryGroundMeasure().
+   *
+   */
+  void ControlPointEditWidget::loadGroundMeasure() {
+
+    ControlMeasure *groundMeasure = createTemporaryGroundMeasure();
+    if (groundMeasure) {
+      m_editPoint->Add(groundMeasure);
+
+      // Add to measure combo boxes
+      QString groundFile = m_serialNumberList->fileName(groundMeasure->GetCubeSerialNumber());
+      QString tempFileName = FileName(groundFile).name();
+
+      m_pointFiles<<groundFile;
+      m_leftCombo->addItem(tempFileName);
+      m_rightCombo->addItem(tempFileName);
+      int rightIndex = m_rightCombo->findText(tempFileName);
+      m_rightCombo->setCurrentIndex(rightIndex);
+      selectRightMeasure(rightIndex);
+      updateSurfacePointInfo();
+    }
+  }
+
+
   /**
    * @brief Create a temporary measure to hold the ground point info for ground source
    *
@@ -608,29 +747,13 @@ namespace Isis {
    */
   ControlMeasure *ControlPointEditWidget::createTemporaryGroundMeasure() {
 
-    //  If a ground serial number has already been added to the serial number list, clear out
-    //  the old before adding the new.
-    if (!m_groundSN.isEmpty()) {
-      if (m_serialNumberList->hasSerialNumber(m_groundSN)) {
-        m_serialNumberList->remove(m_groundSN);
-        m_groundSN.clear();
-      }
-    }
-
     ControlMeasure *groundMeasure = NULL;
 
-    FileName groundFile = findGroundFile();
-    if (!groundFile.fileExists()) {
+    //  Try to set ground source file information.  If unsuccessful, return null ground measure
+    if (!setGroundSourceInfo()) {
       return groundMeasure;
     }
 
-    //  If ground file exists, open, create cube and ground map.  If doesn't exist, prompt
-    //  for new location or new source, either a Shape in the project, or import a new shape,
-    //  or simplay choose file?
-    //  THIS SHOULD BE MOVED TO ::LOADPOINT AND info needs to be saved
-    QScopedPointer<Cube> groundCube(new Cube(groundFile, "r"));
-    QScopedPointer<UniversalGroundMap> groundMap(new UniversalGroundMap(*groundCube));
-
     // Use apriori surface point to find location on ground source.  If
     // apriori surface point does not exist use reference measure
     double lat = 0.;
@@ -651,8 +774,7 @@ namespace Isis {
     }
 
     //  Try to locate point position on current ground source,
-    //  TODO ???if doesn't exist,???
-    if (!groundMap->SetUniversalGround(lat,lon)) {
+    if (!m_groundGmap->SetUniversalGround(lat,lon)) {
       QString message = "This point does not exist on the ground source.\n";
       message += "Latitude = " + QString::number(lat);
       message += "  Longitude = " + QString::number(lon);
@@ -660,114 +782,381 @@ namespace Isis {
       QMessageBox::warning(this, "Warning", message);
     }
     else {
-      //  Create new serial number for ground source and add to serial number list
-      m_groundSN = SerialNumber::Compose(groundFile.expanded(), true);
-      m_serialNumberList->add(groundFile.expanded(), true);
-
       groundMeasure = new ControlMeasure;
       groundMeasure->SetCubeSerialNumber(m_groundSN);
       groundMeasure->SetType(ControlMeasure::Candidate);
-      groundMeasure->SetCoordinate(groundMap->Sample(), groundMap->Line());
+      groundMeasure->SetCoordinate(m_groundGmap->Sample(), m_groundGmap->Line());
       groundMeasure->SetChooserName("GroundMeasureTemporary");
     }
 
     return groundMeasure;
-
   }
 
 
   /**
-   *  Find the ground source location from ControlPoint parameter, AprioriXYZSourceFile.  If file
-   *  does not exist, give option to look in another location and change location in the ControlNet
-   *  for either this point and/or all points in net.
-   * 
-   * @return FileName The filename including full path of the ground source
-   *  
+   *  Find the ground source location: First look at current edit point for parameter,
+   *  AprioriXYZSourceFile. If not there, see if user has selected a groundSource file from the
+   *  groundSourceCombo.  If file does not exist, give option to look in another location and change
+   *  location in the ControlNet for either this point and/or all points in net.
+   *
+   * @return bool success Returns the success status of setting ground source info
+   *
    */
-  FileName ControlPointEditWidget::findGroundFile() {
+  bool ControlPointEditWidget::setGroundSourceInfo() {
+
+    FileName groundFile;
+    ControlPoint::SurfacePointSource::Source groundSourceType =
+      ControlPoint::SurfacePointSource::None;
+
+    bool success = false;
+
+    //  No ground source chosen, clear out any old info
+    if (m_groundSourceCombo->currentText().contains("NONE")) {
+      success = false;
+    }
+    else {
+      //  Chosen ground source is an imported shape in project
+      if (m_groundSourceCombo->currentText().contains(".ecub")) {
+        Shape *shape = m_nameToShapeMap[m_groundSourceCombo->currentText()];
+        groundFile = FileName(shape->fileName());
+        //groundSourceType = shape->surfacePointSource();
+        success = true;
+      }
+      //  Not imported shape, must be from m_editPoints AprioriXYZSource in the cnet
+      else if (m_editPoint->HasAprioriSurfacePointSourceFile()) {
+        groundFile = FileName(m_groundSourceCombo->currentText());
+        //  Apriori ground source does not exist and user chose not to give new location so simply
+        //  return unsuccessful
+        if (!groundFile.fileExists()) {
+          success = false;
+        }
+        else {
+          groundSourceType = m_editPoint->GetAprioriSurfacePointSource(); 
+          success = true;
+        }
+      }
+    }
 
-    FileName groundFile(m_editPoint->GetAprioriSurfacePointSourceFile());
+    // If a new ground file was found set ground source information for later use, first clearing
+    // out the old ground source information.  If new ground same as old ground, we will not change
+    // anything, simply return successful.
+    if (success && (groundFile.expanded() != m_groundFilename)) {
+      clearGroundSource();
+      m_groundFilename = groundFile.expanded();
 
-    if (m_changeAllGroundLocation) {
-      QFileInfo oldFile(groundFile.expanded());
-      QFileInfo newFile(m_newGroundDir, oldFile.fileName());
+      // Get cube, then universal groundmap
+      QScopedPointer<Cube> groundCube(new Cube(groundFile, "r"));
+      m_groundGmap.reset(NULL);
+      QScopedPointer<UniversalGroundMap> newGroundGmap(new UniversalGroundMap(*groundCube));
+      m_groundGmap.reset(newGroundGmap.take());
 
-      groundFile = newFile.absoluteFilePath();
+      //  Create new serial number for ground source and add to serial number list
+      m_groundSN = SerialNumber::Compose(groundFile.expanded(), true);
+      m_serialNumberList->add(m_groundFilename, true);
+
+      m_groundSourceType = groundSourceType;
+    }
+    // Could not successfully find a ground source file, clear out any old info and return
+    // unsuccessful
+    else if (!success) {
+      clearGroundSource();
     }
 
+    return success;
+  }
+
+
+  /**
+   * Ground source file from control net cannot be found, give user option to give new location. 
+   * The option also exists to change for the rest of the ground points in the control net and to 
+   * change the apriori xyz source file in the control net to the new location. 
+   * 
+   * @param groundFile FileName of ground source that has moved location
+   * 
+   * @return FileName Ground source with new location path
+   *
+   */
+  FileName ControlPointEditWidget::checkGroundFileLocation(FileName groundFile) {
+
+    FileName newGroundFile;
+
     if (!groundFile.fileExists()) {
 
-      //  simply print error for now, need to prompt
-      //  for new location or new source, either a Shape in the project, or import a new shape,
-      //  or simplay choose file?
-      QString message = "Ground Source file " + groundFile.expanded();
-      message += " doesn't exist.  Has the file moved?  Would you like to enter a new location for"
-                 " this ground source?";
-      int ret = QMessageBox::question(this, "Ground Source not found", message);
-      if (ret == QMessageBox::Yes) {
-        QString dir = m_directory->project()->shapeDataRoot();
-        NewGroundSourceLocationDialog *dialog = new NewGroundSourceLocationDialog(
-            "New Ground Source Location", dir);
-        if (dialog->exec() == QDialog::Accepted) {
-          m_newGroundDir = dialog->selectedFiles().value(0);
-          m_changeAllGroundLocation = dialog->changeAllGroundSourceLocation();
-          m_changeGroundLocationInNet = dialog->changeControlNet();
-          //  Change all ground source locations to reflect new directory
-          if (m_changeGroundLocationInNet) {
-            changeGroundLocationsInNet();
-            //groundFile = NULL;
-          }
-          //  Don't change control net, but look for ground source in new directory
-          else  {
+      // If user previously chose to change all ground source locations, but didn't update the net
+      // fix this ground source to new location
+      // If all groundLocations are to be changed...
+      if (m_changeAllGroundLocation) {
+        QFileInfo oldFile(groundFile.expanded());
+        QFileInfo newFile(m_newGroundDir, oldFile.fileName());
+
+        newGroundFile = FileName(newFile.absoluteFilePath());
+      }
+
+      //  If can't find ground, re-prompt user for new location. Maybe it's a new ground source.
+      if (!newGroundFile.fileExists()) {
+        //  Give options for finding ground source file location. A new location 
+        //  for new location or new source, either a Shape in the project, or import a new shape,
+        //  or simplay choose file?
+        QString message = "Ground Source file " + groundFile.expanded();
+        message += " doesn't exist.  Has the file moved?  Would you like to enter a new location for"
+                   " this ground source?";
+        int ret = QMessageBox::question(this, "Ground Source not found", message);
+        if (ret == QMessageBox::Yes) {
+          QString dir = m_directory->project()->shapeDataRoot();
+          NewGroundSourceLocationDialog *dialog = new NewGroundSourceLocationDialog(
+              "New Ground Source Location", dir);
+          if (dialog->exec() == QDialog::Accepted) {
+            m_newGroundDir = dialog->selectedFiles().value(0);
+            m_changeAllGroundLocation = dialog->changeAllGroundSourceLocation();
+            m_changeGroundLocationInNet = dialog->changeControlNet();
+            //  Change all ground source locations to reflect new directory
+            if (m_changeGroundLocationInNet) {
+              changeGroundLocationsInNet();
+            }
+            //  Change location of apriori for current edit point so combo boxes updated properly
             QFileInfo oldFile(groundFile.expanded());
             QFileInfo newFile(m_newGroundDir, oldFile.fileName());
-
-            groundFile = newFile.absoluteFilePath();
+            newGroundFile = newFile.absoluteFilePath();
+            m_editPoint->SetAprioriSurfacePointSourceFile(newGroundFile.toString());
+          }
+          else {
+            //  Either user does not want to change location of ground source or the new location
+            //  Dialog was cancelled. Load point without the ground source.
+            newGroundFile = NULL;
           }
         }
         else {
           //  Either user does not want to change location of ground source or the new location
           //  Dialog was cancelled. Load point without the ground source.
-          groundFile = NULL;
+          newGroundFile = NULL;
         }
       }
-      else {
-        //  Either user does not want to change location of ground source or the new location
-        //  Dialog was cancelled. Load point without the ground source.
-        groundFile = NULL;
-      }
     }
-    return groundFile;
+    return newGroundFile;
   }
 
 
   /**
    * Change the location of all ground source locations in the ControlNet.  This changes the
-   * ControlPoint parameter, AprioriXYZSourceFile.
+   * ControlPoint parameter, AprioriSurfacePointSourceFile.
    *
    */
   void ControlPointEditWidget::changeGroundLocationsInNet() {
 
     for (int i = 0; i < m_controlNet->GetNumPoints(); i++ ) {
-      FileName groundFile(m_editPoint->GetAprioriSurfacePointSourceFile());
+      ControlPoint *cp = m_controlNet->GetPoint(i);
+      if (cp->HasAprioriSurfacePointSourceFile()) {
+        FileName groundFile(cp->GetAprioriSurfacePointSourceFile()); 
+        QFileInfo oldFile(groundFile.expanded());
+        QFileInfo newFile(m_newGroundDir, oldFile.fileName());
+        groundFile = newFile.absoluteFilePath();
+        cp->SetAprioriSurfacePointSourceFile(groundFile.expanded());
+      }
+    }
+    emit cnetModified();
+  }
+
 
-      QFileInfo oldFile(groundFile.expanded());
-      QFileInfo newFile(m_newGroundDir, oldFile.fileName());
+  /**
+   * Open a radius source using the shape model of the reference measure of m_editPoint
+   *
+   * @author 2016-10-07 Makayla Shepherd - Changed radius source handling and moved it from OpenGround.
+   *
+   */
+  void ControlPointEditWidget::openReferenceRadius() {
+
+    //Get the reference image's shape model
+    QString referenceSN = m_editPoint->GetReferenceSN();
+    QString referenceFileName = m_serialNumberList->fileName(referenceSN);
+    QScopedPointer<Cube> referenceCube(new Cube(referenceFileName, "r"));
+    PvlGroup kernels = referenceCube->group("Kernels");
+    QString shapeFile = kernels["ShapeModel"];
+
+    //  If the reference measure has a shape model cube then set that as the radius
+    //  This will NOT WORK for shape model files (not the default of Null or Ellipsoid)
+    //  that are not cubes
+    if (shapeFile.contains(".cub")) {
+      if (shapeFile.contains("dem")) {
+        m_radiusSourceType = ControlPoint::RadiusSource::DEM;
+      }
+      else {
+        m_radiusSourceType = ControlPoint::RadiusSource::Ellipsoid;
+      }
 
-      groundFile = newFile.absoluteFilePath();
-      m_controlNet->GetPoint(i)->SetAprioriSurfacePointSourceFile(groundFile.expanded());
+      m_radiusFilename = shapeFile;
+      initDem(shapeFile);
+    }
+    //  If no shape model then use the ABC of the target body
+    else {
+      m_radiusSourceType = ControlPoint::RadiusSource::Ellipsoid;
+      Spice *refSpice = new Spice(*referenceCube);
+      Distance refRadii[3];
+      refSpice->radii(refRadii);
+      m_demFile = QString::number(refRadii[0].meters()) + ", " +
+                  QString::number(refRadii[1].meters()) + ", " +
+                  QString::number(refRadii[2].meters());
+
+      m_radiusFilename = "";
     }
-    //  TODO:  Temporary until autosave is implemented Save control net to Backup file
-    emit saveControlNet();
+  }
+
+
+  /**
+   * Initialize the given Dem and appropriate member variables for later use editing Fixed or 
+   * Constrained control points. 
+   * 
+   * @param demFile QString The file name of the DEM
+   *
+   */
+  void ControlPointEditWidget::initDem (QString demFile) {
+
+      // If a DEM is already opened, check if new is same as old. If new,
+      //  close old, open new.
+      if (m_demOpen) {
+        if (m_demFile == demFile) {
+          return;
+        }
+
+        m_demCube.reset(NULL);
+        m_demFile.clear();
+      }
+
+      QApplication::setOverrideCursor(Qt::WaitCursor);
+      try {
+        QScopedPointer<Cube> newDemCube(new Cube(demFile, "r"));
+
+        m_demFile = FileName(newDemCube->fileName()).name();
+        m_demCube.reset(newDemCube.take());
+      }
+      catch (IException &e) {
+        QMessageBox::critical(this, "Error", e.toString());
+        QApplication::restoreOverrideCursor();
+        return;
+      }
+      m_demOpen = true;
+
+      //  Make sure this is a dem
+      if (!m_demCube->hasTable("ShapeModelStatistics")) {
+        QString message = m_demFile + " is not a DEM.";
+        QMessageBox::critical(this, "Error", message);
+        m_demCube.reset(NULL);
+        m_demOpen = false;
+        m_demFile.clear();
+        QApplication::restoreOverrideCursor();
+        return;
+      }
+      m_radiusSourceType = ControlPoint::RadiusSource::DEM;
+      m_radiusFilename = demFile;
+
+      QApplication::restoreOverrideCursor();
+  }
+
+
+  /**
+   * Return a radius values from the dem using bilinear interpolation
+   *
+   * @author  2011-08-01 Tracie Sucharski
+   *
+   * @internal
+   */
+  double ControlPointEditWidget::demRadius(double latitude, double longitude) {
+
+    if (!m_demOpen) return Null;
+
+    UniversalGroundMap *demMap = new UniversalGroundMap(*m_demCube);
+    if (!demMap->SetUniversalGround(latitude, longitude)) {
+      delete demMap;
+      demMap = NULL;
+      return Null;
+    }
+
+    //  Use bilinear interpolation to read radius from DEM
+    //   Use bilinear interpolation from dem
+    Interpolator *interp = new Interpolator(Interpolator::BiLinearType);
+
+    //   Buffer used to read from the model
+    Portal *portal = new Portal(interp->Samples(), interp->Lines(),
+                                m_demCube->pixelType(),
+                                interp->HotSample(), interp->HotLine());
+    portal->SetPosition(demMap->Sample(), demMap->Line(), 1);
+    m_demCube->read(*portal);
+    double radius = interp->Interpolate(demMap->Sample(), demMap->Line(),
+                                        portal->DoubleBuffer());
+    delete demMap;
+    demMap = NULL;
+    delete interp;
+    interp = NULL;
+    delete portal;
+    portal = NULL;
+
+    return radius;
+  }
+
+
+  /**
+   * Slot called when user changes selection in m_groundSourceCombo
+   * 
+   * @param index int 
+   *
+   */
+  void ControlPointEditWidget::groundSourceFileSelectionChanged(int index) {
+
+    QString newChosenGroundFile = m_groundSourceCombo->currentText();
+    if (newChosenGroundFile == m_groundFilename) {
+      return;
+    }
+    loadGroundMeasure();
+  }
+
+
+  /**
+   *   Clear out the ground source used for Constrained or Fixed control points.  Clears serial
+   *   number, cube and gui elements.
+   */
+  void ControlPointEditWidget::clearGroundSource () {
+
+    if (m_groundSN.isEmpty()) {
+      return;
+    }
+
+    //  If the loaded point is a fixed point, see if there is a temporary measure
+    //  holding the coordinate information for the current ground source. If so,
+    //  delete this measure and remove from the Chip viewport and measure selection combo.
+    if (m_editPoint && m_editPoint->GetType() != ControlPoint::Free &&
+        m_editPoint->HasSerialNumber(m_groundSN)) {
+      m_editPoint->Delete(m_groundSN);
+
+      if (m_leftCombo->findText(QFileInfo(m_groundFilename).fileName()) >= 0) {
+        m_leftCombo->removeItem(m_leftCombo->findText(QFileInfo(m_groundFilename).fileName()));
+        if (m_leftMeasure->GetCubeSerialNumber() == m_groundSN) {
+          selectLeftMeasure(0); 
+        }
+      }
+      if (m_rightCombo->findText(QFileInfo(m_groundFilename).fileName())) {
+        m_rightCombo->removeItem(m_rightCombo->findText(QFileInfo(m_groundFilename).fileName()));
+        if (m_rightMeasure->GetCubeSerialNumber() == m_groundSN) {
+          selectRightMeasure(0); 
+        }
+      }
+      m_pointFiles.removeAll(m_groundFilename);
+    }
+    // Remove from serial number list
+    m_serialNumberList->remove(m_groundSN);
+
+    //  Reset ground source variables
+    m_groundFilename.clear();
+    m_groundSN.clear();
+    m_groundGmap.reset(NULL);
+    m_groundSourceType = ControlPoint::SurfacePointSource::None;
   }
 
 
   /**
    * Slot called by Directory to set the control point for editing
    *
-   * @param controlPoint (ControlPoint *) ControlPoint that will be loaded into editor 
-   * @param serialNumber (QString) Optional parameter indicating the serial number of the cube that 
-   *                                 the point was chosen from 
+   * @param controlPoint (ControlPoint *) ControlPoint that will be loaded into editor
+   * @param serialNumber (QString) Optional parameter indicating the serial number of the cube that
+   *                                 the point was chosen from
    */
   void ControlPointEditWidget::setEditPoint(ControlPoint *controlPoint, QString serialNumber) {
 
@@ -782,25 +1171,43 @@ namespace Isis {
     //  is selected
     if (controlPoint->Parent() == NULL) {
       m_editPoint = controlPoint;
+
+      // New point in editor, so colorize all save buttons
+      colorizeAllSaveButtons("red");
     }
     else {
       m_editPoint = new ControlPoint;
       *m_editPoint = *controlPoint;
-    }
 
+      // New point loaded, make sure all save button's text is default black color
+      colorizeAllSaveButtons("black");
+    }
     loadPoint(serialNumber);
     loadTemplateFile(m_measureEditor->templateFileName());
+  }
+
 
-    // New point loaded, make sure Save Measure Button text is default
+  void ControlPointEditWidget::colorizeAllSaveButtons(QString color) {
+
+    if (color == "black") {
+      // Don't need to colorize save measure button, when loading new measure, the measure editor
+      // will set back to default palette.
     m_savePoint->setPalette(m_saveDefaultPalette);
+      m_saveNet->setPalette(m_saveDefaultPalette);
+    }
+    else if (color == "red") {
+      m_measureEditor->colorizeSaveButton();
+      colorizeSavePointButton();
+      colorizeSaveNetButton();
+    }
   }
 
 
   /**
    * Load point into ControlPointEditWidget.
-   *  
-   * @param serialNumber (QString) The serial number of cube point was chosen from.  This will
-   *  
+   *
+   * @param serialNumber (QString) The serial number of cube point was chosen from.  
+   *
    * @internal
    *   @history 2008-11-26  Jeannie Walldren - Added "Number of Measures" to
    *                           ControlPointEditWidget point information.
@@ -820,63 +1227,99 @@ namespace Isis {
 
     //  Write pointId
     QString CPId = m_editPoint->GetId();
+
     QString ptId("Point ID:  ");
     ptId += (QString) CPId;
     m_ptIdValue->setText(ptId);
 
-    m_pointType->setCurrentIndex((int) m_editPoint->GetType());
+    // Set shapes for this point.  Shapes are what has been imported into project.
+    setShapesForPoint();
 
     //  Write number of measures
     QString ptsize = "Number of Measures:  " +
                    QString::number(m_editPoint->GetNumMeasures());
     m_numMeasures->setText(ptsize);
 
+    //  Set EditLock box correctly
+    m_lockPoint->setChecked(m_editPoint->IsEditLocked());
 
-    SurfacePoint surfPoint = m_editPoint->GetAprioriSurfacePoint();
-    QString lat, lon, rad;
+    //  Set ignore box correctly
+    m_ignorePoint->setChecked(m_editPoint->IsIgnored());
 
-    //  Write apriori latitude
-    if (surfPoint.GetLatitude().degrees() == Null) {
-      lat = "Apriori Latitude:  Null";
-    }
-    else {
-      lat = "Apriori Latitude:  " + QString::number(surfPoint.GetLatitude().degrees());
-    }
-    m_aprioriLatitude->setText(lat);
 
-    //  Write apriori longitude
-    if (surfPoint.GetLongitude().degrees() == Null) {
-      lon = "Apriori Longitude:  Null";
+    //  Refill combos since they are dependent on the current edit point
+    //  Turn off signals until filled since we don't want slot called.
+    m_groundSourceCombo->blockSignals(true);
+    m_radiusSourceCombo->blockSignals(true);
+    m_groundSourceCombo->clear();
+    m_radiusSourceCombo->clear();
+    m_groundSourceCombo->addItem("NONE");
+    m_groundSourceCombo->setCurrentText("NONE");
+    m_radiusSourceCombo->addItem("NONE - Use reference measure's radius");
+    m_radiusSourceCombo->setCurrentText("NONE - Use reference measure's radius");
+
+    //  Load any imported project shapes that contain m_editPoint into the ground and any Dem's into
+    //  radius source combo boxes. Only add Dems to radius combo.
+    if (m_projectShapeNames.count() > 0) {
+      for (int i=0; i<m_numberProjectShapesWithPoint; i++) {
+        Shape *shape = m_nameToShapeMap[m_projectShapeNames.at(i)];
+        if (shape->radiusSource() == ControlPoint::RadiusSource::DEM) {
+          m_radiusSourceCombo->addItem(shape->fileName());
+        }
+        else {
+          m_groundSourceCombo->addItem(shape->fileName());
+        }
+      }
     }
-    else {
-      lon = "Apriori Longitude:  " + QString::number(surfPoint.GetLongitude().degrees());
 
+    //  If available, add the CP AprioriSurfacePointSourceFile and AprioriRadiusSourceFile
+    if (m_editPoint->HasAprioriSurfacePointSourceFile()) {
+      FileName aprioriSurfacePointFile = FileName(m_editPoint->GetAprioriSurfacePointSourceFile());
+      //  If file doesn't exist, prompt user for changing location before adding to combo
+      if (!aprioriSurfacePointFile.fileExists()) {
+        aprioriSurfacePointFile = checkGroundFileLocation(aprioriSurfacePointFile);
+      }
+      if (!aprioriSurfacePointFile.toString().isEmpty()) {
+        m_groundSourceCombo->addItem(aprioriSurfacePointFile.toString()); 
+        m_groundSourceCombo->setCurrentText(aprioriSurfacePointFile.toString());
+        m_groundSourceCombo->setItemData(m_groundSourceCombo->currentIndex(),
+                                         QColor(Qt::darkGreen), Qt::ForegroundRole); 
+        m_groundSourceCombo->setItemData(m_groundSourceCombo->currentIndex(),
+                                         QFont("DejaVu Sans", 10, QFont::Bold), Qt::FontRole);
+      }
     }
-    m_aprioriLongitude->setText(lon);
 
-    //  Write apriori radius
-    if (surfPoint.GetLocalRadius().meters() == Null) {
-      rad = "Apriori Radius:  Null";
+    if (m_editPoint->HasAprioriRadiusSourceFile()) {
+      //TODO  check location of radius file
+      m_radiusSourceCombo->addItem(m_editPoint->GetAprioriRadiusSourceFile());
+      m_radiusSourceCombo->setCurrentText(m_editPoint->GetAprioriRadiusSourceFile());
+      m_radiusSourceCombo->setItemData(m_radiusSourceCombo->currentIndex(),
+                                       QColor(Qt::green), Qt::ForegroundRole);
+      m_radiusSourceCombo->setItemData(m_groundSourceCombo->currentIndex(),
+                                       QFont("DejaVu Sans", 10, QFont::Bold), Qt::FontRole);
+    }
+    if (m_editPoint->GetType() == ControlPoint::Free) {
+      m_groundSourceCombo->setEnabled(false); 
+      m_radiusSourceCombo->setEnabled(false);
     }
     else {
-      rad = "Apriori Radius:  " + QString::number(surfPoint.GetLocalRadius().meters(), 'f', 2);
+      m_groundSourceCombo->setEnabled(true); 
+      m_radiusSourceCombo->setEnabled(true);
     }
-    m_aprioriRadius->setText(rad);
-
-    //  Set EditLock box correctly
-    m_lockPoint->setChecked(m_editPoint->IsEditLocked());
-
-    //  Set ignore box correctly
-    m_ignorePoint->setChecked(m_editPoint->IsIgnored());
+    m_groundSourceCombo->blockSignals(false);
+    m_radiusSourceCombo->blockSignals(false);
 
-    // Clear combo boxes
-    m_leftCombo->clear();
-    m_rightCombo->clear();
-    m_pointFiles.clear();
 
-    //  If fixed, add ground source file to combos, create a measure for
+    //  If constrained or fixed point, create a measure for
     //  the ground source, load reference on left, ground source on right
     if (m_editPoint->GetType() != ControlPoint::Free) {
+      // If m_editPoint already has a ground measure, delete
+      for (int i=0; i<m_editPoint->GetNumMeasures(); i++) {
+        ControlMeasure &m = *(*m_editPoint)[i];
+        if (m.GetChooserName() == "GroundMeasureTemporary") {
+          m_editPoint->Delete(&m);
+        }
+      }
       // Create a temporary measure to hold the ground point info for ground source
       // This measure will be deleted when the ControlPoint is saved to the
       // ControlNet.
@@ -884,36 +1327,44 @@ namespace Isis {
       if (groundMeasure) {
         m_editPoint->Add(groundMeasure);
       }
-      else {
-//      QString message = "Cannot create ground measure on ground source file ";
-//      message += m_groundSN;
-//      QMessageBox::warning(this, "Warning", message);
-      }
     }
 
+
+
+    // Reset PointType combo box appropriately.
+    m_pointTypeCombo->clear();
+    for (int i=0; i<ControlPoint::PointTypeCount; i++) {
+      m_pointTypeCombo->insertItem(i, ControlPoint::PointTypeToString(
+            (ControlPoint::PointType) i));
+    }
+    m_pointTypeCombo->setCurrentText(ControlPoint::PointTypeToString(m_editPoint->GetType()));
+    m_pointTypeCombo->setToolTip("Change ControlPoint type");
+
+    updateSurfacePointInfo();
+
+
+
+    // Clear combo boxes
+    m_leftCombo->clear();
+    m_rightCombo->clear();
+    m_pointFiles.clear();
+
+
     //  Need all files for this point
     for (int i=0; i<m_editPoint->GetNumMeasures(); i++) {
       ControlMeasure &m = *(*m_editPoint)[i];
-      QString file;
-//    if (m.GetChooserName() == "GroundMeasureTemporary") {
-//      qDebug()<<"::loadPoint before setting file to groundFile = "<<groundFile;
-//      file = groundFile;
-//    }
-//    else {
-        file = m_serialNumberList->fileName(m.GetCubeSerialNumber());
-//    }
+      QString file = m_serialNumberList->fileName(m.GetCubeSerialNumber());
       m_pointFiles<<file;
       QString tempFileName = FileName(file).name();
 
       // This actually fills the right combo box for selecting measures.  A model was used to enable
       // drag & drop for ordering measures which will also set the blink order.
       QStandardItem *item = new QStandardItem(tempFileName);
-//    qDebug()<<"before item flags = "<<item->flags();
       item->setFlags(item->flags() & ~Qt::ItemIsDropEnabled);
       m_model->appendRow(item);
 
       m_leftCombo->addItem(tempFileName);
-//    m_rightCombo->addItem(tempFileName);
+
       if (m_editPoint->IsReferenceExplicit() &&
           (QString)m.GetCubeSerialNumber() == m_editPoint->GetReferenceSN()) {
         m_leftCombo->setItemData(i,QFont("DejaVu Sans", 12, QFont::Bold), Qt::FontRole);
@@ -921,24 +1372,8 @@ namespace Isis {
       }
     }
 
-    //TODO   IPCE  2016-06-08    TEMPORARY for prototype,
     m_measureEditor->setPoint(m_editPoint, m_serialNumberList);
 
-
-
-
-
-
-
-
-    //  TODO:  WHAT HAPPENS IF THERE IS ONLY ONE MEASURE IN THIS CONTROLPOINT??
-    // Assuming combo loaded in same order as measures in the control point-is
-    // this a safe assumption???
-    //
-    //  Find the file from the cubeViewport that was originally used to select
-    //  the point, this will be displayed on the left ChipViewport, unless the
-    //  point was selected on the ground source image.  In this case, simply
-    //  load the first measure on the left.
     int leftIndex = -1;
     int rightIndex = -1;
 
@@ -947,7 +1382,6 @@ namespace Isis {
     if (m_editPoint->IsReferenceExplicit()) {
       referenceSerialNumber = m_editPoint->GetReferenceSN();
       leftIndex = m_editPoint->IndexOfRefMeasure();
-//    qDebug()<<"ControlPointEditWidget::loadPoint  reference index= "<<leftIndex;
     }
 
     if (!serialNumber.isEmpty() && serialNumber != referenceSerialNumber) {
@@ -971,7 +1405,12 @@ namespace Isis {
         leftIndex = 0;
       }
     }
-    if (rightIndex == -1) {
+
+    //  If ground measure exists, load in right viewport
+    if (m_editPoint->HasSerialNumber(m_groundSN)) {
+      rightIndex = m_rightCombo->findText(m_groundSN);
+    }
+    if (rightIndex <= 0) {
       if (leftIndex == 0) {
         rightIndex =  1;
       }
@@ -979,12 +1418,13 @@ namespace Isis {
         rightIndex = 0;
       }
     }
-
     //  Handle pts with a single measure, for now simply put measure on left/right
     //  Evenutally put on left with black on right??
     if (rightIndex > m_editPoint->GetNumMeasures()-1) rightIndex = 0;
+
     m_rightCombo->setCurrentIndex(rightIndex);
     m_leftCombo->setCurrentIndex(leftIndex);
+
     //  Initialize pointEditor with measures
     selectLeftMeasure(leftIndex);
     selectRightMeasure(rightIndex);
@@ -994,9 +1434,19 @@ namespace Isis {
   }
 
 
+  /**
+   * Create a new control point at the given latitude, longitude 
+   *  
+   * @param latitude The latitude position for the new control point
+   * @param longitude The longitude position for the new control point
+   * @param cube The cube that the user used to select position for new control point 
+   * @param isGroundSource Boolean indicating whether the cube used to choose position is a ground source 
+   *
+   */
+
   void ControlPointEditWidget::createControlPoint(double latitude, double longitude, Cube *cube,
                                                   bool isGroundSource) {
-//  qDebug()<<"ControlPointEditWidget::createControlPoint cube = "<<cube->fileName()<<"  isGroundSource = "<<isGroundSource;
+
     //  TODO:   CHECK SUBPIXEL REGISTER RADIO BUTTON OPTION (CHECKBOX?)
 
     //  Create list box of all files highlighting those that
@@ -1005,7 +1455,7 @@ namespace Isis {
 
     Camera *cam;
     for (int i = 0; i < m_serialNumberList->size(); i++) {
-//    if (m_serialNumberList->serialNumber(i) == m_groundSN) continue;
+      if (m_serialNumberList->serialNumber(i) == m_groundSN) continue;
       cam = m_controlNet->Camera(i);
       if (cam->SetUniversalGround(latitude, longitude)) {
         //  Make sure point is within image boundary
@@ -1018,35 +1468,30 @@ namespace Isis {
       }
     }
 
-    // Get shapes from project to fill dialog, changing the font for shapes the point is located in.
-    QStringList shapeNames;
-    QStringList shapeNamesNoPoint;
-    // Create map between the Shape display name & Shape
-    QMap<QString, Shape *> nameToShapeMap;
-    QList<ShapeList *> shapeLists = m_directory->project()->shapes();
-    foreach (ShapeList *shapeList, shapeLists) {
-      foreach (Shape *shape, *shapeList) {
-        UniversalGroundMap *gmap = new UniversalGroundMap(*(shape->cube()));
-        if (gmap->SetUniversalGround(latitude, longitude)) {
-          shapeNames<<shape->displayProperties()->displayName();
-        }
-        else {
-          shapeNamesNoPoint<<shape->displayProperties()->displayName();
+    // Set shapes from project to fill dialog, indicating number of shapes that contain the CP.
+    // The shapes which contain the CP will be at the front of the QStringList.
+    setShapesForPoint(latitude, longitude);
+
+    NewControlPointDialog *newPointDialog = new NewControlPointDialog(m_controlNet,
+        m_serialNumberList, m_lastUsedPointId, this, true, true, true);
+    newPointDialog->setFiles(pointFiles);
+    newPointDialog->setGroundSource(m_projectShapeNames, m_numberProjectShapesWithPoint);
+
+    //  Load imported project shapes that are Dems and contain point location into the radius combo.
+    if (m_projectShapeNames.count() > 0) {
+      QStringList radiusSourceFiles;
+      for (int i=0; i<m_numberProjectShapesWithPoint; i++) {
+        Shape *shape = m_nameToShapeMap[m_projectShapeNames.at(i)];
+        if (shape->radiusSource() == ControlPoint::RadiusSource::DEM) {
+          radiusSourceFiles<<shape->fileName();
         }
-        nameToShapeMap[shape->displayProperties()->displayName()] = shape;
-        delete gmap;
       }
+      newPointDialog->setRadiusSource(radiusSourceFiles);
     }
 
-    int numberShapesWithPoint = shapeNames.count();
-    shapeNames<<shapeNamesNoPoint;
 
-    //m_directory->project()->shapes().count()<<"  1st shape= "<<m_directory->project()->shapes().at(0)->at(0)->fileName();
-    NewControlPointDialog *newPointDialog = new NewControlPointDialog(m_controlNet,
-        m_serialNumberList, m_lastUsedPointId, this, true, true, true);
-    newPointDialog->setFiles(pointFiles);
-    newPointDialog->setGroundSource(shapeNames, numberShapesWithPoint);
-    if (newPointDialog->exec()) {
+
+    if (newPointDialog->exec() == QDialog::Accepted) {
       m_lastUsedPointId = newPointDialog->pointId();
       ControlPoint *newPoint =
           new ControlPoint(m_lastUsedPointId);
@@ -1090,17 +1535,15 @@ namespace Isis {
       newPoint->SetType((ControlPoint::PointType) newPointDialog->pointType());
 
       if (isGroundPoint) {
-        Shape *shape = nameToShapeMap[newPointDialog->groundSource()];
+        Shape *shape = m_nameToShapeMap[newPointDialog->groundSource()];
         //  Save ground source information in control point
-        if (shape->shapeType() == Shape::Dem ||
-            shape->shapeType() == Shape::Basemap) {
-          newPoint->SetAprioriSurfacePointSource(ControlPoint::SurfacePointSource::Basemap);
+        if (shape) {
+          newPoint->SetAprioriSurfacePointSource(shape->surfacePointSource());
         }
-        else if (shape->shapeType() == Shape::Unprojected) {
-          // TODO  Determine if unprojected shape has been bundle adjusted or is simply ??
-//        newPoint->SetAprioriSurfacePointSource(ControlPoint::SurfacePointSource::???
+        else {
+          newPoint->SetAprioriSurfacePointSource(ControlPoint::SurfacePointSource::None);
         }
-        newPoint->SetAprioriSurfacePointSourceFile(shape->fileName());
+        newPoint->SetAprioriSurfacePointSourceFile(shape->cube()->externalCubeFileName().expanded());
       }
 
       setEditPoint(newPoint);
@@ -1159,7 +1602,7 @@ namespace Isis {
           }
         }
 
-        this->setVisible(false);
+        //this->setVisible(false);
         // remove this point from the control network
         if (m_controlNet->DeletePoint(m_editPoint->GetId()) ==
                                           ControlPoint::PointLocked) {
@@ -1168,8 +1611,8 @@ namespace Isis {
           return;
         }
         if (m_editPoint != NULL && m_editPoint->Parent() == NULL) {
-          delete m_editPoint;
-          m_editPoint = NULL;
+//        delete m_editPoint;
+//        m_editPoint = NULL;
         }
       }
 
@@ -1223,6 +1666,7 @@ namespace Isis {
       }
 
       // emit a signal to alert user to save when exiting
+      m_control->setModified(true);
       emit cnetModified();
 
       if (m_editPoint != NULL) {
@@ -1346,6 +1790,29 @@ namespace Isis {
       savedAMeasure = true;
     }
 
+    // If this is a fixed or constrained point, and either the left or right measure is the ground
+    // source, update the lat,lon,radius.  
+    //
+    if (m_editPoint->GetType() != ControlPoint::Free && 
+        (m_leftMeasure->GetCubeSerialNumber() == m_groundSN ||
+         m_rightMeasure->GetCubeSerialNumber() == m_groundSN)) {
+      // If point is locked and it is not a new point, print error
+      if (m_editPoint->IsEditLocked() && m_controlNet->ContainsPoint(m_editPoint->GetId())) {
+        QString message = "This control point is edit locked.  The Apriori latitude, longitude and ";
+        message += "radius cannot be updated.  You must first unlock the point by clicking the ";
+        message += "check box above labeled \"Edit Lock Point\".";
+        QMessageBox::warning(this, "Point Locked", message);
+        return;
+      }
+      if (m_leftMeasure->IsIgnored()) {
+        QString message = "This is a Constrained or Fixed point and the reference measure is ";
+        message += "Ignored.  Unset the Ignore flag on the reference measure before saving.";
+        QMessageBox::warning(this, "Point Locked", message);
+        return;
+      }
+      updateGroundPosition();
+    }
+
     // If left measure == right measure, update left
     if (m_leftMeasure->GetCubeSerialNumber() == m_rightMeasure->GetCubeSerialNumber()) {
       *m_leftMeasure = *m_rightMeasure;
@@ -1446,14 +1913,17 @@ namespace Isis {
           message += "may need to move all of the other measures to match the new ";
           message += " coordinate of the reference measure.  Do you really want to ";
           message += " change the reference measure's location? ";
-          switch(QMessageBox::question(this, "Match Tool Save Measure",
+          switch(QMessageBox::question(this, "Save Measure",
                                        message, "&Yes", "&No", 0, 0)){
             // Yes:  Save measure
             case 0:
               break;
             // No:  keep original reference, return without saving
             case 1:
-              loadPoint();
+              ControlMeasure *origLeftMeasure =
+                m_editPoint->GetMeasure(m_leftMeasure->GetCubeSerialNumber());
+              m_measureEditor->setLeftPosition(origLeftMeasure->GetSample(),
+                                               origLeftMeasure->GetLine());
               return false;
           }
         }
@@ -1463,7 +1933,7 @@ namespace Isis {
         QString message = "This point already contains a reference measure.  ";
         message += "Would you like to replace it with the measure on the left?";
         int  response = QMessageBox::question(this,
-                                  "Match Tool Save Measure", message,
+                                  "Save Measure", message,
                                   QMessageBox::Yes | QMessageBox::No,
                                   QMessageBox::Yes);
         // Replace reference measure
@@ -1553,8 +2023,147 @@ namespace Isis {
 
           // ??? Need to set rest of measures to Candiate and add more warning. ???//
     }
+  }
+
+
+  /*
+  * Update the position of ground point
+  *
+  * @author 2012-04-26 Tracie Sucharski - moved functionality from measureSaved
+  *
+  * @internal
+  *
+  */
+  void ControlPointEditWidget::updateGroundPosition() {
+
+    //  Determine if the left or right measure is the ground.  Use ground measure to update
+    //  apriori surface point.
+    ControlMeasure *groundMeasure;
+    if (m_leftMeasure->GetCubeSerialNumber() == m_groundSN) {
+      groundMeasure = m_leftMeasure;
+    }
+    else {
+      groundMeasure = m_rightMeasure;
+    }
+    m_groundGmap->SetImage(groundMeasure->GetSample(), groundMeasure->GetLine());
+
+    double lat = m_groundGmap->UniversalLatitude();
+    double lon = m_groundGmap->UniversalLongitude();
+
+    //  Find radius source file
+    //  If nothing has been selected from the Radius source combo, use the Reference measure
+    if (m_radiusSourceCombo->currentText().contains("NONE")) {
+      m_radiusFilename.clear();
+      m_demOpen = false;
+      m_demFile.clear();
+      m_demCube.reset(NULL);
+      openReferenceRadius();
+    }
+    else {
+      Shape *shape = m_nameToShapeMap[m_radiusSourceCombo->currentText()];
+      if (shape) {
+        m_radiusFilename = shape->cube()->externalCubeFileName().toString(); 
+        //m_radiusSourceType = shape->radiusSource();
+      }
+      // Radius source comes from what is already saved in the cnet as AprioriRadiusSourceFile
+      // This will contain the path
+      else {
+        m_radiusFilename = m_radiusSourceCombo->currentText();
+        m_radiusSourceType = m_editPoint->GetAprioriRadiusSource();
+      }
+      initDem(m_radiusFilename);
+    }
+
+
+    double radius;
+    //  Update radius, order of precedence
+    //  1.  If a dem has been opened, read radius from dem.
+    //  2.  Get radius from reference measure
+    //        If image has shape model, radius will come from shape model
+    //
+    if (m_demOpen) {
+      radius = demRadius(lat,lon);
+      if (radius == Null) {
+        QString msg = "Could not read radius from DEM, will default to "
+          "local radius of reference measure.";
+        QMessageBox::warning(this, "Warning", msg);
+        if (m_editPoint->GetRefMeasure()->Camera()->SetGround(Latitude(lat, Angle::Degrees), 
+                                                              Longitude(lon, Angle::Degrees))) {
+          radius = m_editPoint->GetRefMeasure()->Camera()->LocalRadius().meters();
+          //  TODO  Should this be set here, this is probably not working as intended since it is
+          //         overwritten below outside of if (radius == Null) 
+          m_editPoint->SetAprioriRadiusSource(ControlPoint::RadiusSource::None);
+        }
+        else {
+          QString message = "Error trying to get radius at this pt.  "
+              "Lat/Lon does not fall on the reference measure.  "
+              "Cannot save this measure.";
+          QMessageBox::critical(this,"Error",message);
+          return;
+        }
+      }
+      m_editPoint->SetAprioriRadiusSource(m_radiusSourceType);
+      m_editPoint->SetAprioriRadiusSourceFile(m_radiusFilename);
+    }
+    else {
+      //  Get radius from reference image
+      if (m_editPoint->GetRefMeasure()->Camera()->SetGround(Latitude(lat, Angle::Degrees),
+                                                            Longitude(lon, Angle::Degrees))) {
+        radius = m_editPoint->GetRefMeasure()->Camera()->LocalRadius().meters();
+      }
+      else {
+        QString message = "Error trying to get radius at this pt.  "
+            "Lat/Lon does not fall on the reference measure.  "
+            "Cannot save this measure.";
+        QMessageBox::critical(this,"Error",message);
+        return;
+      }
+    }
 
+    try {
+      //  Read apriori surface point if it exists so that point is
+      //  replaced, but sigmas are retained.  Save sigmas because the
+      //  SurfacePoint class will change them if the coordinates change.
+      if (m_editPoint->HasAprioriCoordinates()) {
+        SurfacePoint aprioriPt = m_editPoint->GetAprioriSurfacePoint();
+        Distance latSigma = aprioriPt.GetLatSigmaDistance();
+        Distance lonSigma = aprioriPt.GetLonSigmaDistance();
+        Distance radiusSigma = aprioriPt.GetLocalRadiusSigma();
+        aprioriPt.SetSphericalCoordinates(Latitude(lat, Angle::Degrees),
+                                          Longitude(lon, Angle::Degrees),
+                                          Distance(radius, Distance::Meters));
+        aprioriPt.SetSphericalSigmasDistance(latSigma, lonSigma, radiusSigma);
+        m_editPoint->SetAprioriSurfacePoint(aprioriPt);
+      }
+      else {
+        m_editPoint->SetAprioriSurfacePoint(SurfacePoint(
+                                        Latitude(lat, Angle::Degrees),
+                                        Longitude(lon, Angle::Degrees),
+                                        Distance(radius, Distance::Meters)));
+      }
+    }
+    catch (IException &e) {
+      QString message = "Unable to set Apriori Surface Point.\n";
+      message += "Latitude = " + QString::number(lat);
+      message += "  Longitude = " + QString::number(lon);
+      message += "  Radius = " + QString::number(radius) + "\n";
+      message += e.toString();
+      QMessageBox::critical(this,"Error",message);
+      return;
+    }
 
+    m_editPoint->SetAprioriSurfacePointSource(m_groundSourceType);
+    QString fullGroundFilename;
+    if (m_groundFilename.contains(".ecub")) {
+      // Find shape to get external cube filename
+      fullGroundFilename = m_nameToShapeMap[m_groundFilename]->cube()->externalCubeFileName().expanded();
+    }
+    else {
+      fullGroundFilename = m_groundFilename;
+    }
+    m_editPoint->SetAprioriSurfacePointSourceFile(fullGroundFilename);
+
+    updateSurfacePointInfo ();
   }
 
 
@@ -1583,15 +2192,9 @@ namespace Isis {
     //  measure holding the coordinate information from the ground source.
     //  If so, delete this measure before saving point.  Clear out the
     //  fixed Measure variable (memory deleted in ControlPoint::Delete).
-    if (updatePoint->GetType() != ControlPoint::Free) {
-      // Find measure with chooser name = GroundMeasureTemporary
-      for (int i=0; i<m_editPoint->GetNumMeasures(); i++) {
-        ControlMeasure &m = *(*m_editPoint)[i];
-        QString file;
-        if (m.GetChooserName() == "GroundMeasureTemporary") {
-          updatePoint->Delete(&m);
-        }
-      }
+    if (updatePoint->GetType() != ControlPoint::Free && updatePoint->HasSerialNumber(m_groundSN)) {
+      // Delete measure with m_groundSN
+      updatePoint->Delete(m_groundSN);
     }
 
     //  If edit point exists in the network, save the updated point.  If it
@@ -1602,12 +2205,10 @@ namespace Isis {
       *p = *updatePoint;
       delete updatePoint;
       updatePoint = NULL;
-      //qDebug()<<"ControlPOintEditWidget::savePoint before point Changed signal";
       emit controlPointChanged(m_editPoint->GetId());
     }
     else {
       m_controlNet->AddPoint(updatePoint);
-//    qDebug()<<"ControlPOintEditWidget::savePoint before point added signal ptId = "<<m_editPoint->GetId();
       emit controlPointAdded(m_editPoint->GetId());
     }
 
@@ -1616,11 +2217,10 @@ namespace Isis {
 
     // At exit, or when opening new net, use for prompting user for a save
     m_cnetModified = true;
+    m_control->setModified(true);
     emit cnetModified();
     //   Refresh chipViewports to show new positions of controlPoints
     m_measureEditor->refreshChips();
-
-    emit saveControlNet();
   }
 
 
@@ -1634,30 +2234,30 @@ namespace Isis {
    * @internal
    *   @history 2013-12-06 Tracie Sucharski - If changing point type to constrained or fixed make
    *                           sure reference measure is not ignored.
+   *   @history 2015-05-19 Ian Humphrey and Makayla Shepherd - When changing a ground point between
+   *                           fixed and constrained and vice versa, the ground measure will not be
+   *                           reloaded (otherwise m_editPoint->Add() will throw an exception
+   *                           within a connected slot).
    */
-#if 0  //TODO 2014-07-22 TLS ipce Handle ground control points SOON
   void ControlPointEditWidget::setPointType (int pointType) {
+
     if (m_editPoint == NULL) return;
 
     //  If pointType is equal to current type, nothing to do
     if (m_editPoint->GetType() == pointType) return;
+    int oldType = m_editPoint->GetType();
 
+    // Error check ignored and locked status
     if (pointType != ControlPoint::Free && m_leftMeasure->IsIgnored()) {
-      m_pointType->setCurrentIndex((int) m_editPoint->GetType());
+      m_pointTypeCombo->setCurrentIndex((int) m_editPoint->GetType());
       QString message = "The reference measure is Ignored.  Unset the Ignore flag on the ";
       message += "reference measure before setting the point type to Constrained or Fixed.";
       QMessageBox::warning(m_parent, "Ignored Reference Measure", message);
       return;
     }
-
-//TODO 07-07-2014 TLS ipce This needs to be uncommented & handled correctly
-    bool unloadGround = false;
-//    if (m_editPoint->GetType() != ControlPoint::Free && pointType == ControlPoint::Free)
-//      unloadGround = true;
-
     ControlPoint::Status status = m_editPoint->SetType((ControlPoint::PointType) pointType);
     if (status == ControlPoint::PointLocked) {
-      m_pointType->setCurrentIndex((int) m_editPoint->GetType());
+      m_pointTypeCombo->setCurrentIndex((int) m_editPoint->GetType());
       QString message = "This control point is edit locked.  The point type cannot be changed.  You ";
       message += "must first unlock the point by clicking the check box above labeled ";
       message += "\"Edit Lock Point\".";
@@ -1665,26 +2265,37 @@ namespace Isis {
       return;
     }
 
-//TODO 07-07-2014 TLS ipce This needs to be uncommented & handled correctly
-    //  If ground loaded, read temporary ground measure to the point
-    if (pointType != ControlPoint::Free && m_groundOpen) {
-//    loadGroundMeasure();
-//    m_measureEditor->colorizeSaveNetButton();
+    // Changing type between Contrained and Fixed, simply colorize Save CP button and return.  Do
+    // not re-load CP or re-create ground CM.
+    if (oldType != ControlPoint::Free && m_editPoint->GetType() != ControlPoint::Free) {
+      colorizeSavePointButton();
     }
-    //  If going from constrained or fixed to free, unload the ground measure.
-    else if (unloadGround) {
-      // Find in point and delete, it will be re-created with current
-      // ground source if this is a fixed point
-      if (m_editPoint->HasSerialNumber(m_groundSN)) {
-    m_editPoint->Delete(m_groundSN);
+    // If changing from Constrained or Fixed to Free, remove ground CM, disable ground/radius source
+    // combos, re-load CP, colorize Save CP.
+    else if (oldType != ControlPoint::Free && m_editPoint->GetType() == ControlPoint::Free) {
+      //  Find temporary measure holding the coordinate information from the ground source and
+      //  delete from CP. This CM has a chooser name = GroundMeasureTemporary.
+      //  Clear out the fixed Measure variable (memory deleted in ControlPoint::Delete).
+      for (int i=0; i<m_editPoint->GetNumMeasures(); i++) {
+        ControlMeasure &m = *(*m_editPoint)[i];
+        if (m.GetChooserName() == "GroundMeasureTemporary") {
+          m_editPoint->Delete(&m);
+        }
       }
-
       loadPoint();
-      m_measureEditor->colorizeSaveNetButton();
+      m_groundSourceCombo->setEnabled(false);
+      m_radiusSourceCombo->setEnabled(false);
+      colorizeSavePointButton();
+    }
+    // Changing from Free to Constrained or Fixed, loadGroundMeasure,which will create temporary
+    // gound measure, load into the measure combo boxes and colorize Save CP button.
+    else if (oldType == ControlPoint::Free && m_editPoint->GetType() != ControlPoint::Free) {
+      loadGroundMeasure();
+      m_groundSourceCombo->setEnabled(true);
+      m_radiusSourceCombo->setEnabled(true);
+      colorizeSavePointButton();
     }
-
   }
-#endif
 
 
   /**
@@ -1927,7 +2538,6 @@ namespace Isis {
   void ControlPointEditWidget::selectLeftMeasure(int index) {
 
     QString file = m_pointFiles[index];
-
     QString serial;
     try {
       serial = m_serialNumberList->serialNumber(file);
@@ -1950,8 +2560,8 @@ namespace Isis {
       delete m_leftMeasure;
       m_leftMeasure = NULL;
     }
-    m_leftMeasure = new ControlMeasure();
-    //  Find measure for each file    
+
+    m_leftMeasure = new ControlMeasure;
     *m_leftMeasure = *((*m_editPoint)[serial]);
 
     //  If m_leftCube is not null, delete before creating new one
@@ -1960,7 +2570,6 @@ namespace Isis {
     //  Update left measure of pointEditor
     m_measureEditor->setLeftMeasure (m_leftMeasure, m_leftCube.data(), m_editPoint->GetId());
     updateLeftMeasureInfo ();
-
   }
 
 
@@ -2000,9 +2609,8 @@ namespace Isis {
       delete m_rightMeasure;
       m_rightMeasure = NULL;
     }
-    m_rightMeasure = new ControlMeasure();
 
-    //  Find measure for each file
+    m_rightMeasure = new ControlMeasure;
     *m_rightMeasure = *((*m_editPoint)[serial]);
 
     //  If m_rightCube is not null, delete before creating new one
@@ -2202,7 +2810,6 @@ namespace Isis {
 
     m_templateModified = false;
     m_saveTemplateFile->setEnabled(false);
-    m_templateFileNameLabel->setText("Template File: " + fn);
   }
 
 
@@ -2288,7 +2895,6 @@ namespace Isis {
     if (m_measureEditor->setTemplateFile(fn)) {
       m_templateModified = false;
       m_saveTemplateFile->setEnabled(false);
-      m_templateFileNameLabel->setText("Template File: " + fn);
     }
   }
 
@@ -2350,40 +2956,102 @@ namespace Isis {
 
 
   /**
-   * Update the current editPoint information in the Point Editor labels
-   *
-   * @param updatedPoint Reference to the ControlPoint to edit information on
+  * Add registration TemplateList to combobox when imported to project
+  *
+  * @param templateList Reference to TemplateList that was imported
+  */
+  void ControlPointEditWidget::addTemplates(TemplateList *templateList) {
+    if(templateList->type() == "registrations") {
+      for(int i = 0; i < templateList->size(); i++) {
+        m_templateComboBox->addItem(templateList->at(i)->importName()
+                                    + "/" + FileName(templateList->at(i)->fileName()).name());
+      }
+    }
+  }
+
+
+  /**
+  * Appends the filename to the registrations path (unless this is the default template) and calls
+  * setTemplateFile for the control measure
+  *
+  * @param filename This is the import directory and the filename of the template file selected from
+  *                 the QComboBox.
+  */
+  void ControlPointEditWidget::setTemplateFile(QString filename) {
+    QString expandedFileName = filename;
+    if(!filename.startsWith("$base")){
+      expandedFileName = m_directory->project()->templateRoot()
+                                 + "/registrations/" + filename;
+    }
+    if (m_measureEditor->setTemplateFile(expandedFileName)) {
+      loadTemplateFile(expandedFileName);
+    }
+  }
+
+
+  /**
+  * Reset the selected template in the template combobox if the template selected by the user does
+  * not satisfy requirements for the control measure.
+  *
+  * @param fileName The filename that was previously selected in the template combo box
+  */
+  void ControlPointEditWidget::resetTemplateComboBox(QString fileName) {
+    if(fileName.startsWith("$base")) {
+      m_templateComboBox->setCurrentIndex(0);
+    }
+    QList<QString> components = fileName.split("/");
+    int size = components.size();
+    int index = m_templateComboBox->findText(components[size - 2] + "/" + components[size - 1]);
+    if (index != -1) {
+      m_templateComboBox->setCurrentIndex(index);
+    }
+  }
+
+
+  /**
+   * Update the Surface Point Information in the ControlPointEditWidget
    *
-   * @author 2011-05-05 Tracie Sucharski
+   * @author 2011-03-01 Tracie Sucharski
    *
-   * @TODO  Instead of a single method, should slots be separate for each
-   *        updated point parameter, ie. ignore, editLock, apriori, etc.
-   *        This is not robust, if other point attributes are changed outside
-   *        of ControlPointEditWidget, this method will need to be updated.
-   *       *** THIS METHOD SHOULD GO AWAY WHEN CONTROLpOINTEDITOR IS INCLUDED
-   *           IN MATCH ***
-   *       TODO:  THIS IS ONLY CONNECTED IN qnet.cpp FROM THE NAV TOOL.  REFACTOR WILL
-   *                  NEED TO CONNECT CORRECT SIGNALS FROM OTHER WIDGETS TO THIS SLOT.
+   * @internal
+   * @history 2011-05-12 Tracie Sucharski - Type printing Apriori Values
+   * @history 2011-05-24 Tracie Sucharski - Set target radii on apriori
+   *                        surface point, so that sigmas can be converted to
+   *                        meters.
    */
-  void ControlPointEditWidget::updatePointInfo(ControlPoint &updatedPoint) {
-    if (m_editPoint == NULL) return;
-    if (updatedPoint.GetId() != m_editPoint->GetId()) return;
-    //  The edit point has been changed by SetApriori, so m_editPoint needs
-    //  to possibly update some values.  Need to retain measures from m_editPoint
-    //  because they might have been updated, but not yet saved to the network
-    //   ("Save Point").
-    m_editPoint->SetEditLock(updatedPoint.IsEditLocked());
-    m_editPoint->SetIgnored(updatedPoint.IsIgnored());
+  void ControlPointEditWidget::updateSurfacePointInfo() {
 
-    //  Set EditLock box correctly
-    m_lockPoint->setChecked(m_editPoint->IsEditLocked());
+    QString s;
 
-    //  Set ignore box correctly
-    m_ignorePoint->setChecked(m_editPoint->IsIgnored());
+    SurfacePoint aprioriPoint = m_editPoint->GetAprioriSurfacePoint();
+    if (aprioriPoint.GetLatitude().degrees() == Null) {
+      s = "Apriori Latitude:  Null";
+    }
+    else {
+      s = "Apriori Latitude:  " +
+          QString::number(aprioriPoint.GetLatitude().degrees());
+    }
+    m_aprioriLatitude->setText(s);
+    if (aprioriPoint.GetLongitude().degrees() == Null) {
+      s = "Apriori Longitude:  Null";
+    }
+    else {
+      s = "Apriori Longitude:  " +
+          QString::number(aprioriPoint.GetLongitude().degrees());
+    }
+    m_aprioriLongitude->setText(s);
+    if (aprioriPoint.GetLocalRadius().meters() == Null) {
+      s = "Apriori Radius:  Null";
+    }
+    else {
+      s = "Apriori Radius:  " +
+          QString::number(aprioriPoint.GetLocalRadius().meters(),'f',2) +
+          " <meters>";
+    }
+    m_aprioriRadius->setText(s);
   }
 
 
-
   /**
    * Refresh all necessary widgets in ControlPointEditWidget including the PointEditor and
    * CubeViewports.
@@ -2443,12 +3111,18 @@ namespace Isis {
    *
    * @author 2014-07-11 Tracie Sucharski
    */
-  void ControlPointEditWidget::colorizeSaveNetButton() {
+  void ControlPointEditWidget::colorizeSaveNetButton(bool reset) {
 
+    if (reset) {
+      //  Change Save Net button text back to default black
+      m_saveNet->setPalette(m_saveDefaultPalette);
+    }
+    else {
     QColor qc = Qt::red;
     QPalette p = m_savePoint->palette();
     p.setColor(QPalette::ButtonText,qc);
     m_saveNet->setPalette(p);
+    }
 
   }
 
@@ -2490,51 +3164,13 @@ namespace Isis {
   */
   void ControlPointEditWidget::saveNet() {
 
-    m_controlNet->Write(m_cnetFileName);
+    m_control->write();
 
     //  Change Save Measure button text back to default
     m_saveNet->setPalette(m_saveDefaultPalette);
-
-    emit saveControlNet();
-  }
-
-
-  /**
-   * This method is called from the constructor so that when the
-   * Main window is created, it know's it's size and location.
-   *
-   */
-#if 0
-  void ControlPointEditWidget::readSettings() {
-    FileName config("$HOME/.Isis/qview/ControlPointEditWidget.config");
-    QSettings settings(config.expanded(),
-                       QSettings::NativeFormat);
-    QPoint pos = settings.value("pos", QPoint(300, 100)).toPoint();
-    QSize size = settings.value("size", QSize(900, 500)).toSize();
-    this->resize(size);
-    this->move(pos);
   }
 
 
-  /**
-   * This method is called when the Main window is closed or
-   * hidden to write the size and location settings to a config
-   * file in the user's home directory.
-   *
-   */
-  void ControlPointEditWidget::writeSettings() const {
-    /*We do not want to write the settings unless the window is
-      visible at the time of closing the application*/
-    if (!this->isVisible()) return;
-    FileName config("$HOME/.Isis/qview/ControlPointEditWidget.config");
-    QSettings settings(config.expanded(),
-                       QSettings::NativeFormat);
-    settings.setValue("pos", this->pos());
-    settings.setValue("size", this->size());
-  }
-#endif
-
-
   /**
    * Cleans up the edit point memory
    */
diff --git a/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.h b/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.h
index 735120a675dd0124bc53903762fbb1725cb89b14..903cb44aa344026493750874d4c9dec008180af7 100644
--- a/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.h
+++ b/isis/src/qisis/objs/ControlPointEditWidget/ControlPointEditWidget.h
@@ -4,6 +4,8 @@
 
 #include "ControlPoint.h"
 #include "FileName.h"
+#include "SpecialPixel.h"
+#include "TemplateList.h"
 
 #include <QCloseEvent>
 #include <QDir>
@@ -49,7 +51,7 @@ namespace Isis {
   class UniversalGroundMap;
 
   /**
-   * @brief Gui for editing ControlPoint
+   * @brief Gui for editing ControlPoints in ipce application
    *
    * @ingroup Visualization Tools
    *
@@ -66,8 +68,8 @@ namespace Isis {
    *   @history 2017-08-02 Tracie Sucharski - Added methods to return the current editPoint and
    *                           current editPoint Id.  Removed measure table methods. Fixes #5007,
    *                           #5008.
-  *   @history 2017-08-09 Adam Goins - Changed method references of SerialNumberList.Delete() to
-  *                            SerialNumberList.remove()
+   *   @history 2017-08-09 Adam Goins - Changed method references of SerialNumberList.Delete() to
+   *                           SerialNumberList.remove()
    *   @history 2017-08-09 Christopher Combs - Added QPushButton and slot for reloading a point's
    *                           measures in the ChipViewports. Fixes #5070.
    *   @history 2017-08-09 Christopher Combs - Added Apriori Latitude, Longitude, and Radius to
@@ -78,6 +80,35 @@ namespace Isis {
    *                           Fixes #4984.
    *   @history 2017-08-15 Tracie Sucharski - When ControlPoint is deleted, set the visibility of
    *                           this widget to false, then to true in loadPoint().  Fixes #5073.
+   *   @history 2018-03-23 Tracie Sucharski - Update the cnet filename with current cnet when it is
+   *                           changed.
+   *   @history 2018-03-26 Tracie Sucharski - Added slot, setControlFromActive which update editor
+   *                           if a new active control net is set in ipce. References #4567.
+   *   @history 2018-03-30 Tracie Sucharski - Save Control in addition to the control net and use
+   *                           Control to write the control net so Control can keep track of the
+   *                           modification state of the control net.
+   *   @history 2018-04-25 Tracie Sucharski - Fix bug when creating a control point from CubeDnView
+   *                           or FootprintView if a ground source exists in the serial number list.
+   *                           Fixes #5399.
+   *   @history 2018-05-02 Tracie Sucharski - Colorize save buttons properly when creating new
+   *                           control point and loading a different control point.
+   *   @history 2018-06-11 Summer Stapleton - Stripped path from displayed filename of Control
+   *                           Network and set the tooltip to the full path for easier access.
+   *   @history 2018-06-19 Adam Goins - Fixed updating references in selectLeftMeasure and
+   *                           selectRightMeasure to fix a segfault that was occuring. #Fixes #5435
+   *   @history 2018-06-28 Kaitlyn Lee - Removed shortcut from reload point button.
+   *   @history 2018-07-07 Summer Stapleton - Added a QComboBox to the widget to allow for changing
+   *                           the active registration template from the widget itself.
+   *   @history 2018-07-13 Kaitlyn Lee - Added calls to setModified(true) when a cnet is modified.
+   *                           References #5396.
+   *   @history 2018-08-08 Tracie Sucharski - Removed temporary autosave of active control, most
+   *                           likely causing problems with large networks.
+   *   @history 2018-10-04 Tracie Sucharski - Changed functionality of ground and radius source
+   *                           choices on constrained and fixed points.  Fixes #5504.
+   *   @history 2018-10-04 Tracie Sucharski - Removed calls to ControlNet::GetTargetRadii because of
+   *                           changes to ControlNet.
+   *   @history 2018-10-05 Tracie Sucharski - Added radius source combo to the NewControlPoint
+   *                           dialog.
    */
   class ControlPointEditWidget : public QWidget {
     Q_OBJECT
@@ -99,18 +130,26 @@ namespace Isis {
       void newControlNetwork(ControlNet *);
       void stretchChipViewport(Stretch *, CubeViewport *);
       void measureChanged();
+      // temporary signal for quick & dirty autosave in Ipce
       void saveControlNet();
 
     public slots:
       void setSerialNumberList(SerialNumberList *snList);
       void setControl(Control *control);
+      void setControlFromActive();
       void setEditPoint(ControlPoint *controlPoint, QString serialNumber = "");
       void deletePoint(ControlPoint *controlPoint);
 
       void createControlPoint(double latitude, double longitude, Cube *cube = 0,
                               bool isGroundSource = false);
 
-      void updatePointInfo(ControlPoint &updatedPoint);
+      // Changed colorizeSaveNetButton to public slot so it could be called from
+      // Directory::saveActiveControl().  This should be temporary until the modify/save functionality
+      // of active control is re-factored. Also added reset parameter, defaulting to false so button
+      // is red. This default was used so that current calls did not need to be changed.
+      void colorizeSaveNetButton(bool reset = false);
+
+      void addTemplates(TemplateList *templateList);
 
     protected:
       bool eventFilter(QObject *o,QEvent *e);
@@ -120,7 +159,7 @@ namespace Isis {
       void reloadPoint();
       void saveNet();
 //    void addMeasure();
-//    void setPointType (int pointType);
+      void setPointType (int pointType);
       void setLockPoint (bool ignore);
       void setIgnorePoint (bool ignore);
       void setLockLeftMeasure (bool ignore);
@@ -137,7 +176,15 @@ namespace Isis {
 
       void measureSaved();
       void checkReference();
+
+      void updateGroundPosition();
+      void updateSurfacePointInfo ();
+      void openReferenceRadius();
+      void groundSourceFileSelectionChanged(int index);
+
       void savePoint();
+
+      void colorizeAllSaveButtons(QString color);
       void colorizeSavePointButton();
 
       void openTemplateFile();
@@ -146,17 +193,17 @@ namespace Isis {
       void showHideTemplateEditor();
       void saveTemplateFile();
       void saveTemplateFileAs();
+      void setTemplateFile(QString);
       void setTemplateModified();
       void writeTemplateFile(QString);
+      void resetTemplateComboBox(QString fileName);
       void clearEditPoint();
 
-      void colorizeSaveNetButton();
-
     private:
       void createActions();
 
       void loadPoint(QString serialNumber = "");
-      void loadMeasureTable();
+      void loadGroundMeasure();
       void createPointEditor(QWidget *parent, bool addMeasures);
       QSplitter * createTopSplitter();
       QGroupBox * createControlPointGroupBox();
@@ -168,10 +215,15 @@ namespace Isis {
       bool IsMeasureLocked(QString serialNumber);
       bool validateMeasureChange(ControlMeasure *m);
 
+      void setShapesForPoint(double latitude=Null, double longitude=Null);
       ControlMeasure *createTemporaryGroundMeasure();
-      FileName findGroundFile();
+      bool setGroundSourceInfo();
+      FileName checkGroundFileLocation(FileName groundFile);
       void changeGroundLocationsInNet();
+      void clearGroundSource();
 
+      void initDem(QString demFile);
+      double demRadius(double latitude, double longitude);
 
     private:
 
@@ -206,9 +258,11 @@ namespace Isis {
       QPointer<QWidget> m_templateEditorWidget; //!< Template editor widget
       bool m_templateModified; //!< Indicates if the registration template was edited
 
-      QPointer<QLabel> m_templateFileNameLabel; //!< Label for the template filename
+      QPointer<QComboBox> m_templateComboBox; //!< ComboBox of imported registration templates
+      QPointer<QComboBox> m_groundSourceCombo; //!< ComboBox for selecting ground source
+      QPointer<QComboBox> m_radiusSourceCombo; //!< ComboBox for selecting ground source
       QPointer<QLabel> m_ptIdValue; //!< Label for the point id of the current point
-      QPointer<QComboBox> m_pointType; //!< Combobox to change the type of the current point
+      QPointer<QComboBox> m_pointTypeCombo; //!< Combobox to change the type of the current point
       QPointer<QLabel> m_numMeasures;
       QPointer<QLabel> m_aprioriLatitude;
       QPointer<QLabel> m_aprioriLongitude;
@@ -232,9 +286,10 @@ namespace Isis {
       QPointer<QMainWindow> m_measureWindow; //!< Main window for the the measure table widget
       QPointer<QTableWidget> m_measureTable; //!< Table widget for the measures
 
-      QPointer<ControlPoint> m_editPoint; //!< The control point being edited
+      QPointer<ControlPoint> m_editPoint;   //!< The control point being edited
       SerialNumberList *m_serialNumberList; //!< Serial number list for the loaded cubes
-      QPointer<ControlNet> m_controlNet; //!< Current control net
+      QPointer<ControlNet> m_controlNet;    //!< Current control net
+      QPointer<Control> m_control;          //!< Current Control
 
       QPointer<ControlPoint> m_newPoint; //!< New control point
       QString m_lastUsedPointId; //!< Point id of the last used control point
@@ -247,11 +302,28 @@ namespace Isis {
       QScopedPointer<Cube> m_leftCube; //!< Left cube
       QScopedPointer<Cube> m_rightCube; //!< Right cube
 
+      QStringList m_projectShapeNames; //!< List of Shapes imported into project, at time of loaded CP
+      int m_numberProjectShapesWithPoint; //!< Number of shapes containing control point
+      QMap<QString, Shape *> m_nameToShapeMap; //!< Map between Shape display name and object
+
+      QString m_groundFilename; //!< File name of ground source
       QString m_groundSN; //!< Serial number of ground source file
+      ControlPoint::SurfacePointSource::Source m_groundSourceType; //!< SurfacePoint type of ground source
+      QScopedPointer<UniversalGroundMap> m_groundGmap;
+
       bool m_changeAllGroundLocation; //!< Change the ground source location of all fixed,
                                       //!  constrained points in the network
       bool m_changeGroundLocationInNet; //!< Change the ground source location
       QString m_newGroundDir; //!< Contains the ground source location
+     
+      //  TODO:  Combine the following m_groundSourceFile, m_radiusSourceFile
+      //           with m_groundFile and m_demFile.  Is it just a matter of
+      //           full path vs filename only?
+      QString m_radiusFilename;
+      ControlPoint::RadiusSource::Source m_radiusSourceType;
+      bool m_demOpen; //!< Has a radius source been opened?
+      QString m_demFile;
+      QScopedPointer<Cube> m_demCube;
   };
 };
 #endif
diff --git a/isis/src/qisis/objs/CubeDnView/CubeDnView.cpp b/isis/src/qisis/objs/CubeDnView/CubeDnView.cpp
index e662a195a5f82eb90801885434c38b9e64241b12..95a05cfdc2458bd7473a862fd1d472616e301959 100644
--- a/isis/src/qisis/objs/CubeDnView/CubeDnView.cpp
+++ b/isis/src/qisis/objs/CubeDnView/CubeDnView.cpp
@@ -25,15 +25,17 @@
 #include <QAction>
 #include <QDebug>
 #include <QHBoxLayout>
+#include <QKeySequence>
 #include <QMap>
 #include <QMdiArea>
 #include <QMdiSubWindow>
 #include <QMenu>
+#include <QMenuBar>
 #include <QModelIndex>
 #include <QSize>
-#include <QSizePolicy>
 #include <QStatusBar>
 #include <QToolBar>
+#include <QToolButton>
 #include <QVBoxLayout>
 #include <QWidgetAction>
 #include <QXmlStreamWriter>
@@ -49,7 +51,6 @@
 #include "FileName.h"
 #include "FileTool.h"
 #include "FindTool.h"
-#include "HelpTool.h"
 #include "HistogramTool.h"
 #include "Image.h"
 #include "ImageList.h"
@@ -76,12 +77,15 @@
 #include "TrackTool.h"
 #include "ToolList.h"
 #include "ToolPad.h"
+
 #include "ViewportMdiSubWindow.h"
 #include "Workspace.h"
 #include "WindowTool.h"
 #include "XmlStackedHandlerReader.h"
 #include "ZoomTool.h"
 
+#include "ProjectItemViewMenu.h"
+
 namespace Isis {
   /**
    * Constructs the view, initializing the tools.
@@ -102,59 +106,47 @@ namespace Isis {
     m_workspace = new Workspace(false, this);
     m_workspace->mdiArea()->setActivationOrder(QMdiArea::StackingOrder);
 
+    m_directory = directory;
+
+    // Since this is a QMainWindow, set the workspace as the central widget.
+    setCentralWidget(m_workspace);
+
+    createActions(directory);
+
     connect(m_workspace, SIGNAL( cubeViewportActivated(MdiCubeViewport *) ),
             this, SLOT( onCubeViewportActivated(MdiCubeViewport *) ) );
 
     connect(m_workspace, SIGNAL( cubeViewportAdded(MdiCubeViewport *) ),
             this, SLOT( onCubeViewportAdded(MdiCubeViewport *) ) );
+  }
 
-    Project *activeProject = directory->project();
-    // These connect signals listen to the active project, and if a control network
-    // or list of control networks is added, then the enableControlNetTool() function is called.
-    connect(activeProject, SIGNAL(controlListAdded(ControlList *)), this, SLOT(enableControlNetTool()));
-    connect(activeProject, SIGNAL(controlAdded(Control *)), this, SLOT(enableControlNetTool()));
-
-
-    QVBoxLayout *layout = new QVBoxLayout;
-    setLayout(layout);
-
-    //m_toolBar = new QWidget(this);
 
-    //QHBoxLayout *toolBarLayout = new QHBoxLayout;
+  void CubeDnView::createActions(Directory *directory) {
 
-    m_permToolBar = new QToolBar("Standard Tools", 0);
+    m_permToolBar = new QToolBar("Standard Tools", this);
     m_permToolBar->setObjectName("permToolBar");
     m_permToolBar->setIconSize(QSize(22, 22));
-    //toolBarLayout->addWidget(m_permToolBar);
+    addToolBar(m_permToolBar);
 
-    m_activeToolBar = new QToolBar("Active Tool", 0);
+    m_activeToolBar = new QToolBar("Active Tool", this);
     m_activeToolBar->setObjectName("activeToolBar");
     m_activeToolBar->setIconSize(QSize(22, 22));
-    //toolBarLayout->addWidget(m_activeToolBar);
+    addToolBar(m_activeToolBar);
 
-    m_toolPad = new ToolPad("Tool Pad", 0);
+    m_toolPad = new ToolPad("Tool Pad", this);
     m_toolPad->setObjectName("toolPad");
-    //toolBarLayout->addWidget(m_toolPad);
-
-    //m_toolBar->setLayout(toolBarLayout);
-
-    //layout->addWidget(m_toolBar);
-    layout->addWidget(m_workspace);
+    addToolBar(Qt::RightToolBarArea, m_toolPad);
 
     // Create tools
     ToolList *tools = new ToolList;
 
-    Tool *defaultActiveTool = NULL;
-
     tools->append(new RubberBandTool(this));
-//  QnetTool *qnetTool = new QnetTool(m_workspace);
-    //tools->append(new FileTool(this));
-    //tools->append(new QnetFileTool(qnetTool, this));
-    tools->append(NULL);
+
+    // 2018-07-02 Kaitlyn Lee - Commented this out; not sure why it was here
+    //tools->append(NULL);
 
     ControlNetTool *controlNetTool = new ControlNetTool(directory, this);
-    defaultActiveTool = controlNetTool;
-    tools->append(defaultActiveTool);
+    tools->append(controlNetTool);
 
     if (directory->project()->activeControl()) {
       controlNetTool->setControlNet(directory->project()->activeControl()->controlNet());
@@ -179,7 +171,8 @@ namespace Isis {
     connect(this, SIGNAL(redrawMeasures()), controlNetTool, SLOT(paintAllViewports()));
 
     tools->append(new BandTool(this));
-    tools->append(new ZoomTool(this));
+    ZoomTool *zoomTool = new ZoomTool(this);
+    tools->append(zoomTool);
     tools->append(new PanTool(this));
     tools->append(new StretchTool(this));
     tools->append(new FindTool(this));
@@ -197,20 +190,22 @@ namespace Isis {
     tools->append(new HistogramTool(this));
     tools->append(new StatisticsTool(this));
     tools->append(new StereoTool(this));
-    tools->append(new HelpTool(this));
-
-    QStatusBar *statusBar = new QStatusBar(this);
-    layout->addWidget(statusBar);
-    tools->append(new TrackTool(statusBar));
+    tools->append(new TrackTool(statusBar()));
 
     m_separatorAction = new QAction(this);
     m_separatorAction->setSeparator(true);
 
-    m_fileMenu = new QMenu;
-    m_viewMenu = new QMenu;
-    m_optionsMenu = new QMenu;
-    m_windowMenu = new QMenu;
-    m_helpMenu = new QMenu;
+    m_viewMenu = new ProjectItemViewMenu("&View");
+    connect(m_viewMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
+    menuBar()->addMenu(m_viewMenu);
+
+    m_optionsMenu = new ProjectItemViewMenu("&Options");
+    connect(m_optionsMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
+    menuBar()->addMenu(m_optionsMenu);
+
+    m_windowMenu = new ProjectItemViewMenu("&Window");
+    connect(m_windowMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
+    menuBar()->addMenu(m_windowMenu);
 
     for (int i = 0; i < tools->count(); i++) {
       Tool *tool = (*tools)[i];
@@ -224,10 +219,7 @@ namespace Isis {
         if (!tool->menuName().isEmpty()) {
           QString menuName = tool->menuName();
 
-          if (menuName == "&File") {
-            tool->addTo(m_fileMenu);
-          }
-          else if (menuName == "&View") {
+          if (menuName == "&View") {
             tool->addTo(m_viewMenu);
           }
           else if (menuName == "&Options") {
@@ -236,9 +228,6 @@ namespace Isis {
           else if (menuName == "&Window") {
             tool->addTo(m_windowMenu);
           }
-          else if (menuName == "&Help") {
-            tool->addTo(m_helpMenu);
-          }
         }
       }
       else {
@@ -246,37 +235,111 @@ namespace Isis {
       }
     }
 
-    m_permToolBarActions.append( m_permToolBar->actions() );
+    // Store the actions and widgets for easy enable/disable.
+    foreach (QAction *action, findChildren<QAction *>()) {
+      // Remove the edit tool's save button shortcut because the ipce main window
+      // already has one and this causes an ambiquous shortcut error.
+      if (action->toolTip() == "Save") {
+        action->setShortcut(QKeySequence());
+      }
+      // The active toolbar's actions are inside of a container that is a QWidgetAction.
+      // We want to skip adding this because we want to disable the active toolbar's
+      // actions separately to skip the combo boxes.
+      if (QString(action->metaObject()->className()) == "QWidgetAction") {
+        continue;
+      }
+      addAction(action);
+    }
+
+    // There was a problem with disabling/enabling the combo boxes. The only way to
+    // get this to work was to skip disabling the combo boxes. We also skip QWidgets
+    // because the combo boxes are contained inside of a QWidget.
+    foreach (QWidget *child, m_activeToolBar->findChildren<QWidget *>()) {
+      if (QString(child->metaObject()->className()).contains("ComboBox") ||
+          QString(child->metaObject()->className()).contains("Widget")) {
+        continue;
+      }
+      m_childWidgets.append(child);
+    }
+
+    // On default, actions are disabled until the cursor enters the view.
+    disableActions();
+
+    zoomTool->activate(true);
+  }
+
 
-    m_activeToolBarAction = new QWidgetAction(this);
-    m_activeToolBarAction->setDefaultWidget(m_activeToolBar);
+  /**
+   * Disables actions when the cursor leaves the view. Overriden method
+   * If a project item view menu or toolpad action menu is visible, i.e. clicked on,
+   * this causes a leave event. We want the actions to still be enabled when a
+   * menu is visible.
+   *
+   * @param event The leave event
+   */
+  void CubeDnView::leaveEvent(QEvent *event) {
+    if (m_optionsMenu->isVisible() || m_viewMenu->isVisible() || m_windowMenu->isVisible()) {
+      return;
+    }
+    // Find the toolpad actions (buttons) with menus and check if they are visible
+    foreach (QToolButton *button, findChildren<QToolButton *>()) {
+      if (button->menu() && button->menu()->isVisible()) {
+        return;
+      }
+    }
+    disableActions();
+  }
 
-    m_toolPadActions.append( m_toolPad->actions() );
 
-    QSizePolicy policy = sizePolicy();
-    policy.setHorizontalPolicy(QSizePolicy::Expanding);
-    policy.setVerticalPolicy(QSizePolicy::Expanding);
-    setSizePolicy(policy);
+  /**
+   * Disables toolbars and toolpad actions/widgets. Overriden method.
+   */
+  void CubeDnView::disableActions() {
+    foreach (QAction *action, actions()) {
+      action->setDisabled(true);
+    }
+    foreach (QWidget *widget, m_childWidgets) {
+      widget->setDisabled(true);
+    }
   }
 
 
   /**
-   * @description enableControlNetTool:  This is a slot function which
-   * is called when the active project emits a signal to the CubeDnView
-   * object after a control network (or a list of control networks)
-   * has been added.  It enables the control network editor tool if it
-   * has been disabled.
+   * Enables toolbars and toolpad actions/widgets. Overriden method.
+   * If an active control network has not been set, do not enable the cnet tool.
    */
-  void CubeDnView::enableControlNetTool() {
+  void CubeDnView::enableActions() {
+    foreach (QAction *action, actions()) {
+      if (action->objectName() == "ControlNetTool" && !m_directory->project()->activeControl()) {
+        continue;
+      }
+      action->setEnabled(true);
+    }
+    foreach (QWidget *widget, m_childWidgets) {
+      widget->setEnabled(true);
+    }
+  }
 
-    foreach (QAction * action, m_toolPadActions) {
+
+  /**
+   * A slot function that is called when directory emits a signal that an active
+   * control network is set. It enables the control network editor tool in the
+   * toolpad and loads the network.
+   *
+   * @param value The boolean that holds if a control network has been set.
+   */
+  void CubeDnView::enableControlNetTool(bool value) {
+    foreach (QAction *action, m_toolPad->actions()) {
       if (action->objectName() == "ControlNetTool") {
-        action->setDisabled(false);
+        action->setEnabled(value);
+        if (value) {
+          ControlNetTool *cnetTool = static_cast<ControlNetTool *>(action->parent());
+          cnetTool->loadNetwork();
+        }
       }
     }
   }
 
-
   /**
    * Destructor
    */
@@ -284,10 +347,17 @@ namespace Isis {
     delete m_permToolBar;
     delete m_activeToolBar;
     delete m_toolPad;
+    delete m_viewMenu;
+    delete m_optionsMenu;
+    delete m_windowMenu;
+
 
     m_permToolBar = 0;
     m_activeToolBar = 0;
     m_toolPad = 0;
+    m_viewMenu = 0;
+    m_optionsMenu = 0;
+    m_windowMenu = 0;
   }
 
 
@@ -306,16 +376,6 @@ namespace Isis {
   }
 
 
-  /**
-   * Returns the suggested size
-   *
-   * @return @b QSize The size hint
-   */
-  QSize CubeDnView::sizeHint() const {
-    return QSize(800, 600);
-  }
-
-
   bool CubeDnView::viewportContainsShape(MdiCubeViewport *viewport) {
 
     ProjectItem *item = m_cubeItemMap.value( viewport->cube() );
@@ -327,102 +387,6 @@ namespace Isis {
     return item->isShape();
   }
 
-
-  /**
-   * Returns a list of actions appropriate for a file menu.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::fileMenuActions() {
-    return m_fileMenu->actions();
-  }
-
-
-  /**
-   * Returns a list of actions appropriate for a project menu.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::projectMenuActions() {
-    return QList<QAction *>();
-  }
-
-  /**
-   * Returns a list of actions appropriate for an edit menu.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::editMenuActions() {
-    return QList<QAction *>();
-  }
-
-
-  /**
-   * Returns a list of actions appropriate for a view menu.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::viewMenuActions() {
-    QList<QAction *> result;
-    result.append( m_viewMenu->actions() );
-    result.append(m_separatorAction);
-    result.append( m_windowMenu->actions() );
-    return result;
-  }
-
-
-  /**
-   * Returns a list of actions appropriate for a settings menu.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::settingsMenuActions() {
-    return m_optionsMenu->actions();
-  }
-
-
-  /**
-   * Returns a list of actions appropriate for a help menu.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::helpMenuActions() {
-    return m_helpMenu->actions();
-  }
-
-
-  /**
-   * Returns a list of actions for the permanent tool bar.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::permToolBarActions() {
-    return m_permToolBar->actions();
-  }
-
-
-  /**
-   * Returns a list of actions for the active tool bar.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::activeToolBarActions() {
-    QList<QAction *> actions;
-    actions.append(m_activeToolBarAction);
-    return actions;
-  }
-
-
-  /**
-   * Returns a list of actions for the tool pad.
-   *
-   * @return @b QList<QAction*> The actions
-   */
-  QList<QAction *> CubeDnView::toolPadActions() {
-    return m_toolPad->actions();
-  }
-
-
   /**
    * Slot to connect to the currentChanged() signal from a selection
    * model. If the new current item is an image the corresponding
@@ -587,6 +551,7 @@ namespace Isis {
 
   void CubeDnView::save(QXmlStreamWriter &stream, Project *, FileName) const {
     stream.writeStartElement("cubeDnView");
+    stream.writeAttribute("objectName", objectName());
 
     foreach (MdiCubeViewport *cvp, *(m_workspace->cubeViewportList())) {
       ProjectItem *item = m_cubeItemMap.value(cvp->cube());
diff --git a/isis/src/qisis/objs/CubeDnView/CubeDnView.h b/isis/src/qisis/objs/CubeDnView/CubeDnView.h
index 4ffe267a2a47013654446c9c2e366dbeb0c425dd..e8c32d3a1bbec00fc1c0025e88191be01daffefa 100644
--- a/isis/src/qisis/objs/CubeDnView/CubeDnView.h
+++ b/isis/src/qisis/objs/CubeDnView/CubeDnView.h
@@ -36,6 +36,7 @@ class QMenu;
 class QModelIndex;
 class QToolBar;
 class QXmlStreamWriter;
+class QWidget;
 
 namespace Isis {
 
@@ -49,6 +50,7 @@ namespace Isis {
   class ToolPad;
   class Workspace;
   class XmlStackedHandlerReader;
+  class ProjectItemViewMenu;
 
   /**
    * View that displays cubes in a QView-like way.
@@ -79,7 +81,32 @@ namespace Isis {
    *                           ipce tool to redraw control measures on cube viewports. Fixes #5007,
    *                           #5008.
    *   @history 2017-08-03 Cole Neubauer - Changed all references from IpceTool to ControlNetTool
-   *                           Fixes #5090
+   *                           Fixes #5090.
+   *   @history 2018-05-30 Tracie Sucharski - Refactored for new docked interface.  Views are now
+   *                           responsible for creating their menus and toolbars.
+   *                           AbstractProjectItemView now inherits from QMainWindow, so the
+   *                           Workspace of this view is the centralWidget. This needs further work
+   *                           to cleanup and fit in with the new docked view interface.git
+   *   @history 2018-06-12 Kaitlyn Lee - Removed help menu and the "What's This?" action because the
+   *                           ipce help menu has this action.
+   *   @history 2018-06-13 Kaitlyn Lee - Since views now inherit from QMainWindow, each individual
+   *                           view has its own toolbar, so having getters that return toolbar
+   *                           actions to fill the toolbar of the IpceMainWindow are unnecessary.
+   *                           Removed methods that returned menu and toolbar actions.
+   *                           Removed connections that connected the project and CubeDnView and
+   *                           called enableControlNetTool() because Directory now does this.
+   *   @history 2018-06-25 Kaitlyn Lee - When multiple views are open, there is a possibility of
+   *                           getting ambiguous shortcut errors. To counter this, we enable/disable
+   *                           actions. Overrode leaveEvent() to handle open menus causing a leave
+   *                           event. Overrode enable/disableActions() because we need to disable
+   *                           the active toolbar's widgets. On default, a view's actions are
+   *                           disabled. To enable the actions, move the cursor over the view. When
+   *                           a user moves the cursor outside of a view, the actions are disabled.
+   *   @history 2018-07-05 Tracie Sucharski - Moved sizeHint and sizePolicy to
+   *                           AbstractProjectItemView. References #5433.
+   *   @history 2018-07-09 Tracie Sucharski - Serialize the objectName for this view so that the
+   *                           view can be re-created with the same objectName for restoring the
+   *                           project state. Qt's save/restoreState use the objectName.
    */
   class CubeDnView : public AbstractProjectItemView {
 
@@ -89,26 +116,11 @@ namespace Isis {
       CubeDnView(Directory *directory, QWidget *parent=0);
       ~CubeDnView();
 
-      virtual QList<QAction *> fileMenuActions();
-      virtual QList<QAction *> projectMenuActions();
-      virtual QList<QAction *> editMenuActions();
-      virtual QList<QAction *> viewMenuActions();
-      virtual QList<QAction *> settingsMenuActions();
-      virtual QList<QAction *> helpMenuActions();
-
-      virtual QList<QAction *> permToolBarActions();
-      virtual QList<QAction *> activeToolBarActions();
-      virtual QList<QAction *> toolPadActions();
-
-      QSize sizeHint() const;
-
       bool viewportContainsShape(MdiCubeViewport *viewport);
 
       void load(XmlStackedHandlerReader *xmlReader, Project *project);
       void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) const;
 
-
-
     signals:
       void modifyControlPoint(ControlPoint *controlPoint, QString serialNumber);
       void deleteControlPoint(ControlPoint *controlPoint);
@@ -120,18 +132,23 @@ namespace Isis {
 
     public slots:
       void addItem(ProjectItem *item);
-      void enableControlNetTool();
+      void enableControlNetTool(bool value);
 
     private slots:
+      void createActions(Directory *directory);
+
       void onCurrentChanged(const QModelIndex &current);
       void onCubeViewportActivated(MdiCubeViewport *);
       void onItemAdded(ProjectItem *item);
       void onCubeViewportAdded(MdiCubeViewport *viewport);
       void onCubeViewportDeleted(QObject *obj);
+      void disableActions();
 
     private:
       Cube *workspaceActiveCube();
       void setWorkspaceActiveCube(Image *image);
+      void leaveEvent(QEvent *event);
+      void enableActions();
 
     private:
       /**
@@ -160,22 +177,18 @@ namespace Isis {
     private:
       QMap<Cube *, ProjectItem *> m_cubeItemMap; //!< Maps cubes to their items
       Workspace *m_workspace; //!< The workspace
+      Directory *m_directory; //!< The directory
 
-      QMenu *m_fileMenu; //!< File menu for storing actions
-      QMenu *m_viewMenu; //!< View menu for storing actions
-      QMenu *m_optionsMenu; //!< Options menu for storing actions
-      QMenu *m_windowMenu; //!< Window menu for storing actions
-      QMenu *m_helpMenu; //!< Help menu for storing actions
+      ProjectItemViewMenu *m_viewMenu; //!< View menu for storing actions
+      ProjectItemViewMenu *m_optionsMenu; //!< Options menu for storing actions
+      ProjectItemViewMenu *m_windowMenu; //!< Window menu for storing actions
 
       QAction *m_separatorAction; //!< A separator action that is reused
 
       QToolBar *m_permToolBar; //!< A tool bar for storing actions
       QToolBar *m_activeToolBar; //!< A tool bar for storing actions
       ToolPad *m_toolPad; //!< A tool bar for storing actions
-
-      QList<QAction *> m_permToolBarActions; //!< The permanent tool bar actions
-      QWidgetAction *m_activeToolBarAction; //!< Widget of the active tool
-      QList<QAction *> m_toolPadActions; //!< The tool pad actions
+      QList<QWidget *> m_childWidgets;  //!< Child widgets of the active toolbar
   };
 }
 
diff --git a/isis/src/qisis/objs/CubeViewport/CubeViewport.cpp b/isis/src/qisis/objs/CubeViewport/CubeViewport.cpp
index 6cc5ed66b7c80ef1b9b3f7a176183ee2e4312bd9..112dd87e96ed485310d0ea49daa34a693543a80b 100644
--- a/isis/src/qisis/objs/CubeViewport/CubeViewport.cpp
+++ b/isis/src/qisis/objs/CubeViewport/CubeViewport.cpp
@@ -97,6 +97,13 @@ namespace Isis {
       p_cubeId = p_cubeData->AddCube(p_cube);
     }
 
+    if(p_cube->hasGroup("Tracking")) {
+      setTrackingCube();
+    }
+    else {
+      p_trackingCube = NULL;
+    }
+
 
     connect(p_cubeData, SIGNAL(BrickChanged(int, const Isis::Brick *)),
             this, SLOT(cubeDataChanged(int, const Isis::Brick *)));
@@ -369,6 +376,9 @@ namespace Isis {
     }
 
     p_cube = NULL;
+    
+    delete p_trackingCube;
+    p_trackingCube = NULL;
 
     if(p_progressTimer) {
       delete p_progressTimer;
@@ -1121,7 +1131,7 @@ namespace Isis {
     if(p_blueBuffer && p_blueBuffer->working()){
       return;
     }
-    
+
     viewport()->repaint(rect);
   }
 
@@ -1776,7 +1786,7 @@ namespace Isis {
       e->accept();
     }
     else if ((e->key() == Qt::Key_C) &&
-             QApplication::keyboardModifiers() &&
+             QApplication::keyboardModifiers() &
              Qt::ControlModifier) {
 
       //QString fileName = p_cube->fileName();
@@ -1961,7 +1971,7 @@ namespace Isis {
     viewport()->repaint();
   }
 
-  
+
   void CubeViewport::forgetStretches() {
     for(int stretch = 0; stretch < p_knownStretches->size(); stretch++) {
       if((*p_knownStretches)[stretch]) {
@@ -2359,6 +2369,22 @@ namespace Isis {
   }
 
 
+/**
+ * Finds the Tracking group from p_cube and stores the tracking cube name
+ * so that we can grab it in AdvancedTrackTool and get mosaic information.
+ * This way, we are not opening the tracking cube every time the cursor is moved.
+ */
+  void CubeViewport::setTrackingCube() {
+    PvlGroup trackingGroup = p_cube->group("Tracking");
+    //Because the tracking group does not have a path, get the path from the main cube
+    FileName cubeName(p_cube->fileName());
+    QString trackingCubeName = trackingGroup.findKeyword("Filename")[0];
+    FileName trackingCubeFileName(cubeName.path() + "/" + trackingCubeName);
+    Cube *trackingCube = new Cube(trackingCubeFileName);
+    p_trackingCube = trackingCube;
+  }
+
+
   /**
    * Allows users to change the cursor type on the viewport.
    *
diff --git a/isis/src/qisis/objs/CubeViewport/CubeViewport.h b/isis/src/qisis/objs/CubeViewport/CubeViewport.h
index 97cff0b444f5b2147a3638ee5a762e7f74b12d61..b93b37fb3a688bb2ff9bda3e6dc744da739dfdc2 100644
--- a/isis/src/qisis/objs/CubeViewport/CubeViewport.h
+++ b/isis/src/qisis/objs/CubeViewport/CubeViewport.h
@@ -125,6 +125,9 @@ namespace Isis {
    *  @history 2017-08-11 Adam Goins - Added the ability to ctrl + c to copy the filename
    *                          of the current cube into the system's clipboard.
    *                          Fixes #5098.
+   *  @history 2018-07-31 Kaitlyn Lee - Added setTrackingCube() and trackingCube() so that a
+   *                          tracking cube is stored when needed and we do not have to open it in
+   *                          AdvancedTrackTool every time the cursor is moved.
    */
   class CubeViewport : public QAbstractScrollArea {
       Q_OBJECT
@@ -132,14 +135,14 @@ namespace Isis {
     public:
       /**
        * Constructor for the CubeViewport
-       * 
+       *
        * @param cube The cube to load into a CubeViewport
        * @param cubeData The Cube Data Thread
        * @param parent The parent widget to this Viewport
-       * 
+       *
        */
       CubeViewport(Cube *cube, CubeDataThread * cdt = 0, QWidget *parent = 0);
-      
+
       /**
        * Deconstructor for the Cubeviewport
        */
@@ -158,7 +161,7 @@ namespace Isis {
           BandInfo(const BandInfo &other);
           //! Deconstructor
           ~BandInfo();
-          
+
           /**
            * The BandInfo for the Cube
            *
@@ -166,7 +169,7 @@ namespace Isis {
            * @return The BandInfo
            */
           const BandInfo &operator=(BandInfo other);
-          
+
           //! @return The Stretch
           Stretch getStretch() const;
           //! @param newStretch The new Stretch value
@@ -239,7 +242,7 @@ namespace Isis {
 
       /**
        * Calle dhwen the contents of the cube changes
-       * 
+       *
        * @param rect The QRect
        */
       void cubeContentsChanged(QRect rect);
@@ -253,7 +256,7 @@ namespace Isis {
 
       /**
        * Turns a viewport into a cube
-       * 
+       *
        * @param x
        * @param y
        * @param sample
@@ -261,20 +264,20 @@ namespace Isis {
        */
       void viewportToCube(int x, int y,
                           double &sample, double &line) const;
-                          
+
        /**
        * Turns a cube into a viewport
-       * 
+       *
        * @param x
        * @param y
        * @param sample
        * @param line
-       */             
+       */
       void cubeToViewport(double sample, double line,
                           int &x, int &y) const;
        /**
        * Turns contents to a cube
-       * 
+       *
        * @param x
        * @param y
        * @param sample
@@ -284,7 +287,7 @@ namespace Isis {
                           double &sample, double &line) const;
        /**
        * Turns a cube into contents
-       * 
+       *
        * @param x
        * @param y
        * @param sample
@@ -295,40 +298,40 @@ namespace Isis {
 
       /**
        * Gets the red pixel
-       * 
+       *
        * @param sample The sample
        * @param line The line
-       * 
+       *
        * @return The redPixel value
        */
       double redPixel(int sample, int line);
-      
+
       /**
        * Gets the green pixel
-       * 
+       *
        * @param sample The sample
        * @param line The line
-       * 
+       *
        * @return The greenPixel value
        */
       double greenPixel(int sample, int line);
-       
+
       /**
        * Gets the blue pixel
-       * 
+       *
        * @param sample The sample
        * @param line The line
-       * 
+       *
        * @return The bluePixel value
        */
       double bluePixel(int sample, int line);
-      
+
       /**
        * Gets the gray pixel
-       * 
+       *
        * @param sample The sample
        * @param line The line
-       * 
+       *
        * @return The grayPixel value
        */
       double grayPixel(int sample, int line);
@@ -361,6 +364,11 @@ namespace Isis {
         return p_groundMap;
       };
 
+      //! @return The tracking cube associated with p_cube (if it has one)
+      Cube *trackingCube() const {
+        return p_trackingCube;
+      };
+
       void moveCursor(int x, int y);
       bool cursorInside() const;
       QPoint cursorPosition() const;
@@ -512,6 +520,8 @@ namespace Isis {
 
       bool confirmClose();
 
+      void setTrackingCube();
+
     signals:
       void viewportUpdated();//!< Emitted when viewport updated.
       void viewportClosed(CubeViewport *);//!< Emitted when viewport is closed.
@@ -628,6 +638,7 @@ namespace Isis {
       Camera *p_camera;  //!< The camera from the cube.
       Projection *p_projection;  //!< The projection from the cube.
       UniversalGroundMap *p_groundMap;  //!< The universal ground map from the cube.
+      Cube *p_trackingCube; //<! The tracking cube associated with p_cube
 
       //! Activated to update progress bar
       QTimer *p_progressTimer;
diff --git a/isis/src/qisis/objs/Directory/BundleObservationViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/BundleObservationViewWorkOrder.cpp
index 65eb26e5229c9e497ee41a54a1248945b4ebca2a..cd553f2ac94a09d0347c431fea78948a476c80bd 100755
--- a/isis/src/qisis/objs/Directory/BundleObservationViewWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/BundleObservationViewWorkOrder.cpp
@@ -25,6 +25,7 @@
 #include "Directory.h"
 #include "BundleObservationView.h"
 #include "Project.h"
+#include "ProjectItemModel.h"
 
 namespace Isis {
 
@@ -113,7 +114,7 @@ namespace Isis {
    *
    */
   void BundleObservationViewWorkOrder::execute() {
-    //ProjectItem * selectedItem = project()->directory()->model()->selectedItems();
+//    ProjectItem * selectedItem = project()->directory()->model()->selectedItems();
     project()->directory()->addBundleObservationView(fileItem());
     project()->setClean(false);
   }
diff --git a/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.cpp
index 52b0c07eedf0dd400b38e419f19e762a12bf3000..9553e11e2da820e17f2c283fe7dac81ca8a28537 100644
--- a/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.cpp
@@ -24,17 +24,13 @@
 
 #include <QtDebug>
 
-#include <QFileDialog>
-#include <QInputDialog>
-#include <QMessageBox>
+#include <QAction>
+#include <QUndoCommand>
 
-#include "CnetEditorWidget.h"
+#include "CnetEditorView.h"
 #include "Control.h"
 #include "ControlList.h"
-#include "ControlDisplayProperties.h"
 #include "Directory.h"
-#include "MosaicSceneItem.h"
-#include "MosaicSceneWidget.h"
 #include "Project.h"
 
 namespace Isis {
@@ -63,10 +59,11 @@ namespace Isis {
 
   bool CnetEditorViewWorkOrder::isExecutable(ControlList * controls) {
 
-    if (controls->count() >= 1)
-      return true;
-    else
-      return false;
+
+    if (controls) {
+      return (controls->count() >= 1);
+    }
+    return false;
   }
 
 
diff --git a/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.h b/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.h
index 1f121f45ca8ef10979c9b079416844bb1b165b8f..b069b97d5fd403cd16e59013dd23714bb23a8676 100644
--- a/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/CnetEditorViewWorkOrder.h
@@ -25,6 +25,10 @@
 #include "WorkOrder.h"
 
 namespace Isis {
+class ControlList;
+class Directory;
+class Project;
+
   /**
    * @brief This work order allows the user to open a cnet editor (table) view of a single control network.
    * This workorder is synchronous and undoable.
@@ -39,6 +43,10 @@ namespace Isis {
    *   @history 2017-07-25 Cole Neubauer - Added project()->setClean call #4969
    *   @history 2017-08-11 Cole Neubauer - Removed isUndoable and set parent member variable
    *                          Fixes #5064
+   *   @history 2017-11-02  Tyler Wilson - Added a null pointer check on the ControList *controls
+   *                          pointer in the isExecutable(...) function to prevent potential
+   *                          segfaults.  References #4492.
+   *   @history 2018-04-07 Tracie Sucharski - Clean up includes.
    */
   class CnetEditorViewWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/ControlHealthMonitorWorkOrder.cpp b/isis/src/qisis/objs/Directory/ControlHealthMonitorWorkOrder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9bce86c98aa7277312b944d45c0ee4973536712d
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/ControlHealthMonitorWorkOrder.cpp
@@ -0,0 +1,128 @@
+/**
+ * @file
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "ControlHealthMonitorWorkOrder.h"
+
+#include <QMessageBox>
+#include <QtDebug>
+
+#include "Control.h"
+#include "Directory.h"
+#include "IException.h"
+#include "Project.h"
+#include "ProjectItem.h"
+#include "ProjectItemModel.h"
+
+namespace Isis {
+
+/**
+   * @brief Creates a WorkOrder that will display the Control Net Health Monitor interface.
+   * @param project The Project that this work order should be interacting with.
+   */
+  ControlHealthMonitorWorkOrder::ControlHealthMonitorWorkOrder(Project *project) :
+      WorkOrder(project) {
+
+    // This workorder is not undoable
+    m_isUndoable = false;
+
+    QAction::setText(tr("View Control Net Health Monitor") );
+    QUndoCommand::setText(tr("View Control Net Health Monitor"));
+  }
+
+
+  /**
+   * @brief Copies the 'other' WorkOrder instance into this new instance.
+   * @param other The WorkOrder being copied.
+   */
+  ControlHealthMonitorWorkOrder::ControlHealthMonitorWorkOrder(const ControlHealthMonitorWorkOrder &other) :
+      WorkOrder(other) {
+  }
+
+
+  /**
+   * @brief The Destructor.
+   */
+  ControlHealthMonitorWorkOrder::~ControlHealthMonitorWorkOrder() {
+  }
+
+
+  /**
+   * @brief Returns a copy of this ControlHealthMonitorWorkOrder instance.
+   * @return @b (ControlHealthMonitorWorkOrder *) A pointer to a copy of this WorkOrder.
+   */
+  ControlHealthMonitorWorkOrder *ControlHealthMonitorWorkOrder::clone() const {
+    return new ControlHealthMonitorWorkOrder(*this);
+  }
+
+
+  /**
+   * @brief Determines if we can execute the health monitor.
+   *        We can execute if there's an active control.
+   *
+   * @param controls (ControlList *) The ControlList chosen from the project tree.
+   * @return  @b bool True if  we can set as active, False otherwise.
+   */
+  bool ControlHealthMonitorWorkOrder::isExecutable(ControlList *controls) {
+    return !!controls;
+  }
+
+  /**
+   * @brief Make sure an active ImageList has been chosen.
+   *
+   * @return @b bool True if project has an active Control Network, False otherwise.
+   */
+  bool ControlHealthMonitorWorkOrder::setupExecution() {
+
+    bool success = WorkOrder::setupExecution();
+    if (success) {
+      if (!isExecutable(controlList())) {
+
+        QMessageBox::critical(NULL, tr("Unable to load Control Net Health Monitor."),
+                              tr("You must first set an active control in order to view the health monitor."));
+        success = false;
+      }
+      //  So far, so good, set the command text
+      else {
+        QUndoCommand::setText(tr("Set Active Control Network to [%1]").arg(
+                                 controlList()->at(0)->displayProperties()->displayName()));
+      }
+    }
+
+    return success;
+  }
+
+
+  /**
+   * @brief  Set the active control net for the project.  This allows any views to operate on
+   *               the same control net.  The active image list must be set before the active
+   *               control net is chosen.  If not, a critical message dialog is displayed and we
+   *               return false.
+   *
+   */
+  void ControlHealthMonitorWorkOrder::execute() {
+    try {
+      project()->directory()->addControlHealthMonitorView();
+    }
+    catch (IException &e) {
+      m_status = WorkOrderFinished;
+      QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
+    }
+  }
+}
diff --git a/isis/src/qisis/objs/Directory/ControlHealthMonitorWorkOrder.h b/isis/src/qisis/objs/Directory/ControlHealthMonitorWorkOrder.h
new file mode 100644
index 0000000000000000000000000000000000000000..92cc63b4f852bb18311ac61fcaade592e94c8b4a
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/ControlHealthMonitorWorkOrder.h
@@ -0,0 +1,57 @@
+#ifndef ControlHealthMonitorWorkOrder_H
+#define ControlHealthMonitorWorkOrder_H
+/**
+ * @file
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "WorkOrder.h"
+
+namespace Isis {
+  class Control;
+
+  /**
+   * @brief  This is a child of class WorkOrder which is used for anything that performs
+   *  an action in a Project.  This work order allows the user to view the ControlHealthMonitor
+   *  for the project's active Control Network.
+   *
+   * @author 2016-06-22 Adam Goins
+   *
+   * @internal
+   * @history 2018-06-07 Adam Goins - Initial Version.
+   */
+
+  class ControlHealthMonitorWorkOrder : public WorkOrder {
+      Q_OBJECT
+    public:
+      ControlHealthMonitorWorkOrder(Project *project);
+      ControlHealthMonitorWorkOrder(const ControlHealthMonitorWorkOrder &other);
+      ~ControlHealthMonitorWorkOrder();
+
+      virtual ControlHealthMonitorWorkOrder *clone() const;
+
+      virtual bool isExecutable(ControlList *controls);
+
+      bool setupExecution();
+      void execute();
+
+    private:
+      ControlHealthMonitorWorkOrder &operator=(const ControlHealthMonitorWorkOrder &rhs);
+  };
+}
+#endif
diff --git a/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.cpp
index c65af4ad3e02dbba8b892f77c67103eca0700857..c2d1d2104b559cb7daadce8dc1af2435fada5926 100644
--- a/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.cpp
@@ -80,6 +80,8 @@ namespace Isis {
    * @return @b bool True if the number of images is greater than 0 and less than 50.
    */
   bool CubeDnViewWorkOrder::isExecutable(ImageList *images) {
+    if (!images)
+      return false;
     return (images->count() > 0 && images->count() < 50);
   }
 
@@ -91,6 +93,8 @@ namespace Isis {
    * @return @b bool True if the number of shapes is greater than 0 and less than 20.
    */
   bool CubeDnViewWorkOrder::isExecutable(ShapeList *shapes) {
+    if (!shapes)
+      return false;
     return (shapes->count() > 0 && shapes->count() < 20);
   }
 
diff --git a/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.h b/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.h
index 49cb2f2253ca2c3f338daa0b69cec4b6262a102f..b0b31193c8b88bd376c3d30618a57d5ca440e371 100644
--- a/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/CubeDnViewWorkOrder.h
@@ -50,6 +50,9 @@ namespace Isis {
    *                           Fixes #4715
    *   @history 2017-08-11 Cole Neubauer - Removed isUndoable and set parent member variable
    *                          Fixes #5064
+   *   @history 2017-11-02 Tyler Wilson - Added null pointer checks for the ImageList *images
+   *                          and ShapeList *shapes variables in their respective isExeuctable()
+   *                          methods to prevent potential seg faults.  References #4492.
    */
   class CubeDnViewWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/Directory.cpp b/isis/src/qisis/objs/Directory/Directory.cpp
index dbb0eb2a82cb5fc42ee4fb39783172ea328f8225..084c3a3fafcdd61518836302d01901e9350f98ce 100644
--- a/isis/src/qisis/objs/Directory/Directory.cpp
+++ b/isis/src/qisis/objs/Directory/Directory.cpp
@@ -27,27 +27,35 @@
 #include <QApplication>
 #include <QDockWidget>
 #include <QGridLayout>
+#include <QMainWindow>
 #include <QMenu>
 #include <QMenuBar>
+#include <QMessageBox>
+#include <QRegExp>
 #include <QSettings>
+#include <QSizePolicy>
 #include <QSplitter>
 #include <QStringList>
+#include <QtDebug>
+#include <QVariant>
 #include <QXmlStreamWriter>
 
-#include <QtDebug>
-#include <QMessageBox>
 
 #include "BundleObservation.h"
 #include "BundleObservationView.h"
 #include "BundleObservationViewWorkOrder.h"
 #include "ChipViewportsWidget.h"
 #include "CloseProjectWorkOrder.h"
+#include "CnetEditorView.h"
 #include "CnetEditorViewWorkOrder.h"
+#include "ControlHealthMonitorView.h"
+#include "ControlHealthMonitorWorkOrder.h"
 #include "CnetEditorWidget.h"
 #include "Control.h"
 #include "ControlDisplayProperties.h"
 #include "ControlList.h"
 #include "ControlNet.h"
+#include "ControlNetTool.h"
 #include "ControlPointEditView.h"
 #include "ControlPointEditWidget.h"
 #include "CubeDnView.h"
@@ -62,18 +70,19 @@
 #include "IException.h"
 #include "IString.h"
 #include "ImageFileListViewWorkOrder.h"
+#include "ImageFileListWidget.h"
 #include "ImportControlNetWorkOrder.h"
 #include "ImportImagesWorkOrder.h"
 #include "ImportShapesWorkOrder.h"
-#include "ImportTemplateWorkOrder.h"
-#include "ImageFileListWidget.h"
+#include "ImportMapTemplateWorkOrder.h"
+#include "ImportRegistrationTemplateWorkOrder.h"
+#include "JigsawRunWidget.h"
 #include "JigsawWorkOrder.h"
 #include "MatrixSceneWidget.h"
 #include "MatrixViewWorkOrder.h"
 #include "MosaicControlNetTool.h"
 #include "MosaicSceneWidget.h"
 #include "OpenProjectWorkOrder.h"
-#include "OpenRecentProjectWorkOrder.h"
 #include "Project.h"
 #include "ProjectItem.h"
 #include "ProjectItemModel.h"
@@ -90,6 +99,8 @@
 #include "TableViewContent.h"
 #include "TargetInfoWidget.h"
 #include "TargetGetInfoWorkOrder.h"
+#include "TemplateEditorWidget.h"
+#include "TemplateEditViewWorkOrder.h"
 #include "ToolPad.h"
 #include "WarningTreeWidget.h"
 #include "WorkOrder.h"
@@ -106,8 +117,6 @@ namespace Isis {
    * because the WorkOrders we are attempting to add to the Directory are corrupt.
    */
   Directory::Directory(QObject *parent) : QObject(parent) {
-    //qDebug()<<"Directory::Directory";
-
 
     try {
       m_project = new Project(*this);
@@ -127,16 +136,25 @@ namespace Isis {
     //connect( m_project, SIGNAL(guiCamerasAdded(GuiCameraList *) ),
              //this, SLOT(guiCamerasAddedToProject(GuiCameraList *) ) );
 
-//     connect( m_project, SIGNAL(projectLoaded(Project *) ),
-//              this, SLOT(updateRecentProjects(Project *) ) );
-//
+    connect( m_project, SIGNAL(projectLoaded(Project *) ),
+              this, SLOT(updateRecentProjects(Project *) ) );
+
+    // Send cnetModified() to project, so that we can set the project's clean state.
+    // In the slot cnetModified(), it checks if the active was modified and then emits
+    // activeControlModified(). This signal is connected below to this activeControlModified(),
+    // which connects to views that use the active cnet to redraw themselves.
+    // Ultimately, cnetModified() allows us to save changes made to any cnet, and
+    // activeControlModified() allows other views to be redrawn.
+    connect(this, SIGNAL(cnetModified()), m_project, SLOT(cnetModified()));
+    connect(project(), SIGNAL(activeControlModified()), this, SIGNAL(activeControlModified()));
 
     connect(m_project, SIGNAL(activeControlSet(bool)), this, SLOT(newActiveControl(bool)));
+    connect(m_project, SIGNAL(discardActiveControlEdits()),
+            this, SLOT(reloadActiveControlInCnetEditorView()));
 
     m_projectItemModel = new ProjectItemModel(this);
     m_projectItemModel->addProject(m_project);
-
-//  qDebug()<<"Directory::Directory  model row counter after addProject = "<<m_projectItemModel->rowCount();
+    connect(m_projectItemModel, SIGNAL(cleanProject(bool)), this, SIGNAL(cleanProject(bool)));
 
     try {
 
@@ -148,9 +166,11 @@ namespace Isis {
       createWorkOrder<Footprint2DViewWorkOrder>();
       createWorkOrder<MatrixViewWorkOrder>();
       createWorkOrder<SensorGetInfoWorkOrder>();
-      createWorkOrder<RemoveImagesWorkOrder>();
+      //createWorkOrder<RemoveImagesWorkOrder>();
       createWorkOrder<TargetGetInfoWorkOrder>();
       createWorkOrder<BundleObservationViewWorkOrder>();
+      createWorkOrder<TemplateEditViewWorkOrder>();
+      createWorkOrder<ControlHealthMonitorWorkOrder>();
 
       //  Main menu actions
       m_exportControlNetWorkOrder = createWorkOrder<ExportControlNetWorkOrder>();
@@ -158,14 +178,15 @@ namespace Isis {
       m_importControlNetWorkOrder = createWorkOrder<ImportControlNetWorkOrder>();
       m_importImagesWorkOrder = createWorkOrder<ImportImagesWorkOrder>();
       m_importShapesWorkOrder = createWorkOrder<ImportShapesWorkOrder>();
-      m_importTemplateWorkOrder = createWorkOrder<ImportTemplateWorkOrder>();
+      m_importMapTemplateWorkOrder = createWorkOrder<ImportMapTemplateWorkOrder>();
+      m_importRegistrationTemplateWorkOrder = createWorkOrder<ImportRegistrationTemplateWorkOrder>();
       m_openProjectWorkOrder = createWorkOrder<OpenProjectWorkOrder>();
       m_saveProjectWorkOrder = createWorkOrder<SaveProjectWorkOrder>();
       m_saveProjectAsWorkOrder = createWorkOrder<SaveProjectAsWorkOrder>();
-      m_openRecentProjectWorkOrder = createWorkOrder<OpenRecentProjectWorkOrder>();
       m_runJigsawWorkOrder = createWorkOrder<JigsawWorkOrder>();
       m_closeProjectWorkOrder = createWorkOrder<CloseProjectWorkOrder>();
       m_renameProjectWorkOrder = createWorkOrder<RenameProjectWorkOrder>();
+      m_recentProjectsLoaded = false;
     }
     catch (IException &e) {
       throw IException(e, IException::Programmer,
@@ -183,13 +204,12 @@ namespace Isis {
    */
   Directory::~Directory() {
 
-    delete m_project;
+    m_workOrders.clear();
 
-    foreach (WorkOrder *workOrder, m_workOrders) {
-      delete workOrder;
+    if (m_project) {
+      m_project ->deleteLater();
+      m_project = NULL;
     }
-
-    m_workOrders.clear();
   }
 
 
@@ -277,10 +297,12 @@ namespace Isis {
   /**
    * @brief Cleans directory of everything to do with the current project.
    *
-   * This function was implemented to be called from the Project::Open function
+   * This function was implemented to be called from the Project::clear function
    * to allow for a new project to be opened in IPCE.
    */
   void Directory::clean() {
+    emit directoryCleaned();
+
     m_historyTreeWidget->clear();
     m_warningTreeWidget->clear();
     m_bundleObservationViews.clear();
@@ -292,8 +314,97 @@ namespace Isis {
     m_matrixViewWidgets.clear();
     m_sensorInfoWidgets.clear();
     m_targetInfoWidgets.clear();
+    m_templateEditorWidgets.clear();
+    m_jigsawRunWidget.clear();
+
     m_projectItemModel->clean();
-    emit directoryCleaned();
+  }
+
+
+  /**
+   * @brief Loads and displays a list of recently opened projects in the file menu.
+   * @internal
+   *   @history Tyler Wilson 2017-10-17 - This function updates the Recent Projects File
+   *                                      menu.  References #4492.
+   *   @history Adam Goins 2017-11-27 - Updated this function to add the most recent
+   *                project to the recent projects menu. References #5216.
+   */
+  void Directory::updateRecentProjects() {
+
+    if (m_recentProjectsLoaded)  {
+      QMenu *recentProjectsMenu = new QMenu("&Recent Projects");
+
+      foreach (QAction *action, m_fileMenuActions) {
+
+        QString actionText(action->text());
+        if (actionText == "&Recent Projects") {
+          // Grab the pointer to the actual ""&Recent Projects" menu in IPCE
+          recentProjectsMenu = qobject_cast<QMenu*>(action->parentWidget());
+          break;
+        }
+      }
+
+      QString projName = m_recentProjects.at(0).split("/").last();
+
+      QAction *openRecentProjectAction = m_openProjectWorkOrder->clone();
+      openRecentProjectAction->setText(projName);
+      openRecentProjectAction->setToolTip(m_recentProjects.at(0));
+
+      if (recentProjectsMenu->isEmpty())
+      {
+        recentProjectsMenu->addAction(openRecentProjectAction);
+        return;
+      }
+
+      QAction *firstAction = recentProjectsMenu->actions().at(0);
+
+      // If the opened project is already the most recent project, return.
+      if (firstAction->text() == projName) {
+        return;
+      }
+
+      // If the action we're placing at the first index already exists,
+      // Then point to that action.
+      foreach (QAction *action, recentProjectsMenu->actions()) {
+        if (action->text() == projName) {
+          openRecentProjectAction = action;
+          break;
+        }
+      }
+
+      recentProjectsMenu->insertAction(firstAction, openRecentProjectAction);
+      if (recentProjectsMenu->actions().length() > Project::maxRecentProjects()) {
+        recentProjectsMenu->removeAction(recentProjectsMenu->actions().last());
+      }
+    }
+    else {
+
+      QMenu *fileMenu = new QMenu();
+      QMenu *recentProjectsMenu = fileMenu->addMenu("&Recent Projects");
+      int nRecentProjects = m_recentProjects.size();
+
+      for (int i = 0; i < nRecentProjects; i++) {
+        FileName projectFileName = m_recentProjects.at(i);
+
+        if (!projectFileName.fileExists() )
+          continue;
+
+        QAction *openRecentProjectAction = m_openProjectWorkOrder->clone();
+
+        if ( !( (OpenProjectWorkOrder*)openRecentProjectAction )
+             ->isExecutable(m_recentProjects.at(i),true ) )
+          continue;
+
+
+        QString projName = m_recentProjects.at(i).split("/").last();
+        openRecentProjectAction->setText(m_recentProjects.at(i).split("/").last() );
+        openRecentProjectAction->setToolTip(m_recentProjects.at(i));
+        recentProjectsMenu->addAction(openRecentProjectAction);
+        }
+        fileMenu->addSeparator();
+        m_fileMenuActions.append( fileMenu->actions() );
+        m_recentProjectsLoaded = true;
+      }
   }
 
 
@@ -321,27 +432,6 @@ namespace Isis {
     fileMenu->addAction(openProjectAction);
     m_permToolBarActions.append(openProjectAction);
 
-    QMenu *recentProjectsMenu = fileMenu->addMenu("&Recent Projects");
-    int nRecentProjects = m_recentProjects.size();
-
-    for (int i = 0; i < nRecentProjects; i++) {
-      FileName projectFileName = m_recentProjects.at(i);
-      if (!projectFileName.fileExists() )
-        continue;
-
-      QAction *openRecentProjectAction = m_openRecentProjectWorkOrder->clone();
-
-      openRecentProjectAction->setData(m_recentProjects.at(i) );
-      openRecentProjectAction->setText(m_recentProjects.at(i) );
-
-      if ( !( (OpenRecentProjectWorkOrder*)openRecentProjectAction )
-           ->isExecutable(m_recentProjects.at(i) ) )
-        continue;
-
-      recentProjectsMenu->addAction(openRecentProjectAction);
-    }
-
-    fileMenu->addSeparator();
 
     QAction *saveAction = m_saveProjectWorkOrder->clone();
     saveAction->setShortcut(Qt::Key_S | Qt::CTRL);
@@ -365,7 +455,10 @@ namespace Isis {
     importMenu->addAction(m_importControlNetWorkOrder->clone() );
     importMenu->addAction(m_importImagesWorkOrder->clone() );
     importMenu->addAction(m_importShapesWorkOrder->clone() );
-    importMenu->addAction(m_importTemplateWorkOrder->clone() );
+
+    QMenu *importTemplateMenu = importMenu->addMenu("&Import Templates");
+    importTemplateMenu->addAction(m_importMapTemplateWorkOrder->clone() );
+    importTemplateMenu->addAction(m_importRegistrationTemplateWorkOrder->clone() );
 
     QMenu *exportMenu = fileMenu->addMenu("&Export");
 
@@ -454,19 +547,54 @@ namespace Isis {
    * @param recentProjects List of projects to add to list.
    */
   void Directory::setRecentProjectsList(QStringList recentProjects) {
+
     m_recentProjects.append(recentProjects);
   }
 
 
+  /**
+   * @description This slot was created specifically for the CnetEditorWidgets when user chooses a
+   * new active control and wants to discard any edits in the old active control.  The only view
+   * which will not be updated with the new control are any CnetEditorViews showing the old active
+   * control.  CnetEditorWidget classes do not have the ability to reload a control net, so the
+   * CnetEditor view displaying the old control is removed, then recreated.
+   *
+   */
+  void Directory::reloadActiveControlInCnetEditorView() {
+
+    foreach(CnetEditorView *cnetEditorView, m_cnetEditorViewWidgets) {
+      if (cnetEditorView->control() == project()->activeControl()) {
+        emit closeView(cnetEditorView);
+        addCnetEditorView(project()->activeControl());
+      }
+    }
+  }
+
+
+/**
+ * @description This slot is connected from the signal activeControlSet(bool) emitted from Project.
+ *
+ *
+ * @param newControl bool
+ *
+ */
   void Directory::newActiveControl(bool newControl) {
-    foreach(CnetEditorWidget *cnetEditorView, m_cnetEditorViewWidgets) {
-      if (cnetEditorView->control() == project()->activeControl()->controlNet()) {
-        cnetEditorView->pointTableView()->content()->setActiveControlNet(true);
-        cnetEditorView->measureTableView()->content()->setActiveControlNet(true);
+
+    if (newControl && m_controlPointEditViewWidget) {
+     emit closeView(m_controlPointEditViewWidget);
+     delete m_controlPointEditViewWidget;
+    }
+
+    // If the new active control is the same as what is showing in the cnetEditorWidget, allow
+    // editing of control points from the widget, otherwise turnoff from context menu
+    foreach(CnetEditorView *cnetEditorView, m_cnetEditorViewWidgets) {
+      if (cnetEditorView->control() == project()->activeControl()) {
+        cnetEditorView->cnetEditorWidget()->pointTableView()->content()->setActiveControlNet(true);
+        cnetEditorView->cnetEditorWidget()->measureTableView()->content()->setActiveControlNet(true);
       }
       else {
-        cnetEditorView->pointTableView()->content()->setActiveControlNet(false);
-        cnetEditorView->measureTableView()->content()->setActiveControlNet(false);
+        cnetEditorView->cnetEditorWidget()->pointTableView()->content()->setActiveControlNet(false);
+        cnetEditorView->cnetEditorWidget()->measureTableView()->content()->setActiveControlNet(false);
       }
     }
   }
@@ -491,23 +619,40 @@ namespace Isis {
     connect( result, SIGNAL( destroyed(QObject *) ),
              this, SLOT( cleanupBundleObservationViews(QObject *) ) );
 
+    connect(result, SIGNAL(windowChangeEvent(bool)),
+             m_project, SLOT(setClean(bool)));
+
     m_bundleObservationViews.append(result);
 
     QString str = fileItem->fileName();
+    FileName fileName = fileItem->fileName();
+
+    // strip out bundle results name from fileName
+    QString path = fileName.originalPath();
+    int pos = path.lastIndexOf("/");
+    QString bundleResultsName = "";
+    if (pos != -1) {
+      bundleResultsName = path.remove(0,pos+1);
+    }
 
+    if (str.contains("bundleout")) {
+      result->setWindowTitle( tr("Summary (%1)").
+                              arg( bundleResultsName ) );
+      result->setObjectName( result->windowTitle() );
+    }
     if (str.contains("residuals")) {
-      result->setWindowTitle( tr("Measure Residuals").
-                              arg( m_bundleObservationViews.count() ) );
+      result->setWindowTitle( tr("Measure Residuals (%1)").
+                              arg( bundleResultsName ) );
       result->setObjectName( result->windowTitle() );
     }
     else if (str.contains("points")) {
-      result->setWindowTitle( tr("Control Points").
-                              arg( m_bundleObservationViews.count() ) );
+      result->setWindowTitle( tr("Control Points (%1)").
+                              arg( bundleResultsName ) );
       result->setObjectName( result->windowTitle() );
     }
     else if (str.contains("images")) {
-      result->setWindowTitle( tr("Images").
-                              arg( m_bundleObservationViews.count() ) );
+      result->setWindowTitle( tr("Images (%1)").
+                              arg( bundleResultsName ) );
       result->setObjectName( result->windowTitle() );
     }
 
@@ -519,114 +664,52 @@ namespace Isis {
 
   /**
    * @brief Add the widget for the cnet editor view to the window.
-   * @param network Control net to edit.
-   * @return @b (CnetEditorWidget *) The view to add to the window.
+   * @param Control to edit.
+   * @return @b (CnetEditorView *) The view to add to the window.
    */
-  CnetEditorWidget *Directory::addCnetEditorView(Control *network) {
-
-    QString title = tr("Cnet Editor View %1").arg( network->displayProperties()->displayName() );
+  CnetEditorView *Directory::addCnetEditorView(Control *control, QString objectName) {
 
+    QString title = tr("Cnet Editor View %1").arg( control->displayProperties()->displayName() );
     FileName configFile("$HOME/.Isis/" + QApplication::applicationName() + "/" + title + ".config");
 
-    // TODO: This layout should be inside of the cnet editor widget, but I put it here to not
-    //     conflict with current work in the cnet editor widget code.
-    QWidget *result = new QWidget;
-    QGridLayout *resultLayout = new QGridLayout;
-    result->setLayout(resultLayout);
-
-    int row = 0;
-
-    QMenuBar *menuBar = new QMenuBar;
-    resultLayout->addWidget(menuBar, row, 0, 1, 2);
-    row++;
-    CnetEditorWidget *mainWidget = new CnetEditorWidget(network, configFile.expanded());
-    resultLayout->addWidget(mainWidget, row, 0, 1, 2);
-    row++;
-
-    // Populate the menu...
-    QMap< QAction *, QList< QString > > actionMap = mainWidget->menuActions();
-    QMapIterator< QAction *, QList< QString > > actionMapIterator(actionMap);
-
-    QMap<QString, QMenu *> topLevelMenus;
-
-    while ( actionMapIterator.hasNext() ) {
-      actionMapIterator.next();
-      QAction *actionToAdd = actionMapIterator.key();
-      QList< QString > location = actionMapIterator.value();
-
-      QMenu *menuToPutActionInto = NULL;
+    CnetEditorView *result = new CnetEditorView(this, control, configFile);
 
-      if ( location.count() ) {
-        QString topLevelMenuTitle = location.takeFirst();
-        if (!topLevelMenus[topLevelMenuTitle]) {
-          topLevelMenus[topLevelMenuTitle] = menuBar->addMenu(topLevelMenuTitle);
-        }
-
-        menuToPutActionInto = topLevelMenus[topLevelMenuTitle];
-      }
-
-      foreach (QString menuName, location) {
-        bool foundSubMenu = false;
-        foreach ( QAction *possibleSubMenu, menuToPutActionInto->actions() ) {
-          if (!foundSubMenu &&
-              possibleSubMenu->menu() && possibleSubMenu->menu()->title() == menuName) {
-            foundSubMenu = true;
-            menuToPutActionInto = possibleSubMenu->menu();
-          }
-        }
-
-        if (!foundSubMenu) {
-          menuToPutActionInto = menuToPutActionInto->addMenu(menuName);
-        }
-      }
-
-      menuToPutActionInto->addAction(actionToAdd);
+    if (project()->activeControl() && (control == project()->activeControl())) {
+      result->cnetEditorWidget()->pointTableView()->content()->setActiveControlNet(true);
+      result->cnetEditorWidget()->measureTableView()->content()->setActiveControlNet(true);
     }
 
-    QTabWidget *treeViews = new QTabWidget;
-    treeViews->addTab( mainWidget->pointTreeView(), tr("Point View") );
-    treeViews->addTab( mainWidget->serialTreeView(), tr("Serial View") );
-    treeViews->addTab( mainWidget->connectionTreeView(), tr("Connection View") );
-    resultLayout->addWidget(treeViews, row, 0, 1, 1);
-
-    QTabWidget *filterViews = new QTabWidget;
-    filterViews->addTab( mainWidget->pointFilterWidget(), tr("Filter Points and Measures") );
-    filterViews->addTab( mainWidget->serialFilterWidget(), tr("Filter Images and Points") );
-    filterViews->addTab( mainWidget->connectionFilterWidget(), tr("Filter Connections") );
-    resultLayout->addWidget(filterViews, row, 1, 1, 1);
-    row++;
-
-    if (project()->activeControl() && mainWidget->control() == project()->activeControl()->controlNet()) {
-      mainWidget->pointTableView()->content()->setActiveControlNet(true);
-      mainWidget->measureTableView()->content()->setActiveControlNet(true);
-    }
-    connect( result, SIGNAL( destroyed(QObject *) ),
-             this, SLOT( cleanupCnetEditorViewWidgets(QObject *) ) );
+    // connect destroyed signal to cleanupCnetEditorViewWidgets slot
+    connect(result, SIGNAL( destroyed(QObject *) ),
+            this, SLOT( cleanupCnetEditorViewWidgets(QObject *) ) );
+
+    connect(result, SIGNAL(windowChangeEvent(bool)),
+            m_project, SLOT(setClean(bool)));
 
     //  Connections for control point editing between views
-    connect(mainWidget, SIGNAL(editControlPoint(ControlPoint *, QString)),
+    connect(result->cnetEditorWidget(), SIGNAL(editControlPoint(ControlPoint *, QString)),
             this, SLOT(modifyControlPoint(ControlPoint *, QString)));
 
-    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    // IMPORTANT TODO::  The following connections seem recursive
-    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    // 
-    // Connection between cneteditor view & other views
-    connect(mainWidget, SIGNAL(cnetModified()), this, SIGNAL(cnetModified()));
-    
-    // ControlPointEditWidget is only object that emits cnetModified when ControlPoint is
-    // deleted or saved
-    connect(this, SIGNAL(cnetModified()), mainWidget, SLOT(rebuildModels()));
+    // If a cnet is modified, we have to set the clean state in project and redraw measures.
+    connect(result->cnetEditorWidget(), SIGNAL(cnetModified()), this, SIGNAL(cnetModified()));
+    connect(this, SIGNAL(cnetModified()), result->cnetEditorWidget(), SLOT(rebuildModels()));
 
-    m_cnetEditorViewWidgets.append(mainWidget);
-    m_controlMap.insertMulti(network, result);
+    m_cnetEditorViewWidgets.append(result);
+    m_controlMap.insertMulti(control, result);
 
     result->setWindowTitle(title);
-    result->setObjectName(title);
+    if (objectName != "") {
+      result->setObjectName(objectName);
+    }
+    else {
+      //  If no objectName, create unique identifier
+      QString newObjectName = QUuid::createUuid().toString().remove(QRegExp("[{}]"));
+      result->setObjectName(newObjectName);
+    }
 
     emit newWidgetAvailable(result);
 
-    return mainWidget;
+    return result;
   }
 
 
@@ -634,15 +717,26 @@ namespace Isis {
    * @brief Add the qview workspace to the window.
    * @return @b (CubeDnView*) The work space to display.
    */
-  CubeDnView *Directory::addCubeDnView() {
-    CubeDnView *result = new CubeDnView(this);
+  CubeDnView *Directory::addCubeDnView(QString objectName) {
+    CubeDnView *result = new CubeDnView(this, qobject_cast<QMainWindow *>(parent()));
     result->setModel(m_projectItemModel);
     m_cubeDnViewWidgets.append(result);
     connect( result, SIGNAL( destroyed(QObject *) ),
              this, SLOT( cleanupCubeDnViewWidgets(QObject *) ) );
 
-    result->setWindowTitle("Cube DN View");
+    connect(result, SIGNAL(windowChangeEvent(bool)),
+             m_project, SLOT(setClean(bool)));
+
     result->setWindowTitle( tr("Cube DN View %1").arg(m_cubeDnViewWidgets.count() ) );
+    //  Unique objectNames are needed for the save/restoreState
+    if (objectName != "") {
+      result->setObjectName(objectName);
+    }
+    else {
+      //  If no objectName, create unique identifier
+      QString newObjectName = QUuid::createUuid().toString().remove(QRegExp("[{}]"));
+      result->setObjectName(newObjectName);
+    }
 
     emit newWidgetAvailable(result);
 
@@ -660,39 +754,43 @@ namespace Isis {
     //  ControlNetTool::paintAllViewports().  ControlNetTool always redraws all control points, so
     //  both signals go to the same slot.
     connect(this, SIGNAL(redrawMeasures()), result, SIGNAL(redrawMeasures()));
-    connect(this, SIGNAL(cnetModified()), result, SIGNAL(redrawMeasures()));
 
-    if (!project()->activeControl()) {
-      QList<QAction *> toolbar = result->toolPadActions();
-      QAction* cnetAction = toolbar[0];
-      MosaicControlNetTool *cnetButton = static_cast<MosaicControlNetTool *>(cnetAction->parent());
+    // If the active cnet is modified, redraw the measures
+    connect(this, SIGNAL(activeControlModified()), result, SIGNAL(redrawMeasures()));
 
-      cnetAction->setEnabled(false);
-      connect (project(), SIGNAL(activeControlSet(bool)),
-              cnetAction, SLOT(setEnabled(bool)));
-      connect (project(), SIGNAL(activeControlSet(bool)),
-              cnetButton, SLOT(loadNetwork()));
-    }
+    connect (project(), SIGNAL(activeControlSet(bool)),
+             result, SLOT(enableControlNetTool(bool)));
 
     return result;
   }
 
-
   /**
    * @brief Add the qmos view widget to the window.
    * @return @b (Footprint2DView*) A pointer to the Footprint2DView to display.
    */
-  Footprint2DView *Directory::addFootprint2DView() {
+  Footprint2DView *Directory::addFootprint2DView(QString objectName) {
     Footprint2DView *result = new Footprint2DView(this);
 
     //  Set source model on Proxy
     result->setModel(m_projectItemModel);
     m_footprint2DViewWidgets.append(result);
     result->setWindowTitle( tr("Footprint View %1").arg( m_footprint2DViewWidgets.count() ) );
+    //  Unique objectNames are needed for the save/restoreState
+    if (objectName != "") {
+      result->setObjectName(objectName);
+    }
+    else {
+      //  If no objectName, create unique identifier
+      QString newObjectName = QUuid::createUuid().toString().remove(QRegExp("[{}]"));
+      result->setObjectName(newObjectName);
+    }
 
     connect(result, SIGNAL(destroyed(QObject *)),
             this, SLOT(cleanupFootprint2DViewWidgets(QObject *)));
 
+    connect(result, SIGNAL(windowChangeEvent(bool)),
+            m_project, SLOT(setClean(bool)));
+
     emit newWidgetAvailable(result);
 
     //  Connections between mouse button events from footprint2DView and control point editing
@@ -706,8 +804,9 @@ namespace Isis {
             this, SLOT(createControlPoint(double, double)));
 
     // The ControlPointEditWidget is only object that emits cnetModified when ControlPoint is
-    // deleted or saved.  This requires the footprint view ControlNetGraphicsItems to be re-built.
-    connect(this, SIGNAL(cnetModified()), result->mosaicSceneWidget(), SIGNAL(cnetModified()));
+    // deleted or saved.  This requires the footprint view ControlNetGraphicsItems to be re-built
+    // when the active cnet is modified.
+    connect(this, SIGNAL(activeControlModified()), result->mosaicSceneWidget(), SIGNAL(cnetModified()));
 
     //  This signal is connected to the MosaicGraphicsScene::update(), which eventually calls
     //  ControlNetGraphicsItem::paint(), then ControlPointGraphicsItem::paint().  This should only
@@ -715,23 +814,39 @@ namespace Isis {
     //  to be drawn with different color/shape.
     connect(this, SIGNAL(redrawMeasures()), result, SIGNAL(redrawMeasures()));
 
-    //  Control Net tool will only be active if the project has an active Control.  Note:  This
-    //  assumes the Control Net tool is the 4th in the toolpad.
-    if (!project()->activeControl()) {
-      QList<QAction *> toolbar = result->toolPadActions();
-      QAction* cnetAction = toolbar[3];
-      MosaicControlNetTool *cnetButton = static_cast<MosaicControlNetTool *>(cnetAction->parent());
-
-      cnetAction->setEnabled(false);
-      connect (project(), SIGNAL(activeControlSet(bool)),
-              cnetAction, SLOT(setEnabled(bool)));
-      connect (project(), SIGNAL(activeControlSet(bool)),
-              cnetButton, SLOT(loadNetwork()));
-    }
+    connect (project(), SIGNAL(activeControlSet(bool)),
+             result, SLOT(enableControlNetTool(bool)));
 
     return result;
   }
 
+  ControlHealthMonitorView *Directory::controlHealthMonitorView() {
+    return m_controlHealthMonitorView;
+  }
+
+
+  ControlHealthMonitorView *Directory::addControlHealthMonitorView() {
+
+    if (!controlHealthMonitorView()) {
+
+      Control *activeControl = project()->activeControl();
+      if (activeControl == NULL) {
+        QString message = "No active control network chosen.  Choose active control network on "
+                          "project tree.\n";
+        QMessageBox::critical(qobject_cast<QWidget *>(parent()), "Error", message);
+        return NULL;
+      }
+
+      ControlHealthMonitorView *result = new ControlHealthMonitorView(this);
+      result->setWindowTitle(tr("Control NetHealth Monitor"));
+      result->setObjectName(result->windowTitle());
+
+      m_controlHealthMonitorView = result;
+      emit newWidgetAvailable(result);
+    }
+    return controlHealthMonitorView();
+  }
+
 
   ControlPointEditView *Directory::addControlPointEditView() {
 
@@ -777,13 +892,22 @@ namespace Isis {
 // 2017-06-09 Ken commented out for Data Workshop demo
 
 
-      //  Create connections between signals from control point edit view and equivalent directory
-      //  signals that can then be connected to other views that display control nets.
+      // Create connections between signals from control point edit view and equivalent directory
+      // signals that can then be connected to other views that display control nets.
+      // If the active was modified, this will be signaled in project's cnetModified() and
+      // connected to other views to redraw themselves.
       connect(result->controlPointEditWidget(), SIGNAL(cnetModified()),
               this, SIGNAL(cnetModified()));
 
-      connect(result->controlPointEditWidget(), SIGNAL(saveControlNet()),
-              this, SLOT(makeBackupActiveControl()));
+      connect (project(), SIGNAL(activeControlSet(bool)),
+              result->controlPointEditWidget(), SLOT(setControlFromActive()));
+
+      connect(result, SIGNAL(windowChangeEvent(bool)),
+              m_project, SLOT(setClean(bool)));
+
+      // Recolors the save net button in controlPointEditView to black after the cnets are saved.
+      connect(m_project, SIGNAL(cnetSaved(bool)),
+              result->controlPointEditWidget(), SLOT(colorizeSaveNetButton(bool)));
     }
 
     return controlPointEditView();
@@ -849,6 +973,44 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Add template editor view widget to the window.
+   * @return (TemplateEditorWidget*) The widget to view.
+   */
+  TemplateEditorWidget *Directory::addTemplateEditorView(Template *currentTemplate) {
+    TemplateEditorWidget *result = new TemplateEditorWidget(currentTemplate, this);
+
+    connect( result, SIGNAL( destroyed(QObject *) ),
+             this, SLOT( cleanupTemplateEditorWidgets(QObject *) ) );
+
+    m_templateEditorWidgets.append(result);
+
+    result->setWindowTitle( tr("%1").arg( FileName(currentTemplate->fileName()).name() ) );
+    result->setObjectName( result->windowTitle() );
+
+    emit newWidgetAvailable(result);
+
+    return result;
+  }
+
+  JigsawRunWidget *Directory::addJigsawRunWidget() {
+    if (jigsawRunWidget()) {
+      return m_jigsawRunWidget;
+    }
+    JigsawRunWidget *result = new JigsawRunWidget(m_project);
+
+    connect( result, SIGNAL( destroyed(QObject *) ),
+             this, SLOT( cleanupJigsawRunWidget(QObject *) ) );
+    m_jigsawRunWidget = result;
+
+    result->setAttribute(Qt::WA_DeleteOnClose);
+    result->show();
+
+    emit newWidgetAvailable(result);
+    return result;
+  }
+
+
   /**
    * @brief Add sensor data view widget to the window.
    * @return @b (SensorInfoWidget*) The widget to view.
@@ -875,8 +1037,7 @@ namespace Isis {
    * @return @b (ImageFileListWidget *) A pointer to the widget to add to the window.
    */
 
-  ImageFileListWidget *Directory::addImageFileListView() {
-    //qDebug()<<"Directory::addImageFileListView";
+  ImageFileListWidget *Directory::addImageFileListView(QString objectName) {
     ImageFileListWidget *result = new ImageFileListWidget(this);
 
     connect( result, SIGNAL( destroyed(QObject *) ),
@@ -885,7 +1046,15 @@ namespace Isis {
     m_fileListWidgets.append(result);
 
     result->setWindowTitle( tr("File List %1").arg( m_fileListWidgets.count() ) );
-    result->setObjectName( result->windowTitle() );
+    //  Unique objectNames are needed for the save/restoreState
+    if (objectName != "") {
+      result->setObjectName(objectName);
+    }
+    else {
+      //  If no objectName, create unique identifier
+      QString newObjectName = QUuid::createUuid().toString().remove(QRegExp("[{}]"));
+      result->setObjectName(newObjectName);
+    }
 
     return result;
   }
@@ -898,21 +1067,26 @@ namespace Isis {
   ProjectItemTreeView *Directory::addProjectItemTreeView() {
     ProjectItemTreeView *result = new ProjectItemTreeView();
     result->setModel(m_projectItemModel);
-   
+    result->setWindowTitle( tr("Project"));
+    result->setObjectName( result->windowTitle() );
+
     //  The model emits this signal when the user double-clicks on the project name, the parent
-    //  node located on the ProjectTreeView. 
+    //  node located on the ProjectTreeView.
     connect(m_projectItemModel, SIGNAL(projectNameEdited(QString)),
             this, SLOT(initiateRenameProjectWorkOrder(QString)));
 
+    connect(result, SIGNAL(windowChangeEvent(bool)),
+            m_project, SLOT(setClean(bool)));
+
     return result;
   }
 
 
-/** 
- * Slot which is connected to the model's signal, projectNameEdited, which is emitted when the user 
- * double-clicks the project name, the parent node located on the ProjectTreeView.  A 
+/**
+ * Slot which is connected to the model's signal, projectNameEdited, which is emitted when the user
+ * double-clicks the project name, the parent node located on the ProjectTreeView.  A
  * RenameProjectWorkOrder is created then passed to the Project which executes the WorkOrder.
- *  
+ *
  * @param QString projectName New project name
  */
   void Directory::initiateRenameProjectWorkOrder(QString projectName) {
@@ -922,7 +1096,7 @@ namespace Isis {
     RenameProjectWorkOrder *workOrder = new RenameProjectWorkOrder(projectName, project());
     project()->addToProject(workOrder);
   }
-  
+
 
   /**
    * @brief Gets the ProjectItemModel for this directory.
@@ -955,30 +1129,62 @@ namespace Isis {
     m_project->setClean(false);
   }
 
+  // /**
+  //  * @brief Removes pointers to deleted Control Health Monitor objects.
+  //  */
+  // void Directory::cleanupControlHealthMonitorView(QObject *obj) {
+  //
+  //   ControlHealthMonitorView *healthMonitorView = static_cast<ControlHealthMonitorView *>(obj);
+  //   if (!healthMonitorView) {
+  //     return;
+  //   }
+  //
+  //   m_project->setClean(false);
+  // }
+
 
   /**
    * @brief Removes pointers to deleted CnetEditorWidget objects.
    */
   void Directory::cleanupCnetEditorViewWidgets(QObject *obj) {
 
-    CnetEditorWidget *cnetEditorWidget = static_cast<CnetEditorWidget *>(obj);
-    if (!cnetEditorWidget) {
+    CnetEditorView *cnetEditorView = static_cast<CnetEditorView *>(obj);
+    if (!cnetEditorView) {
       return;
     }
 
-    Control *control = m_controlMap.key(cnetEditorWidget);
-
-    m_controlMap.remove(control, cnetEditorWidget);
+    Control *control = m_controlMap.key(cnetEditorView);
+    m_controlMap.remove(control, cnetEditorView);
 
     if ( m_controlMap.count(control) == 0 && project()->activeControl() != control) {
       control->closeControlNet();
     }
 
-    m_cnetEditorViewWidgets.removeAll(cnetEditorWidget);
+    m_cnetEditorViewWidgets.removeAll(cnetEditorView);
     m_project->setClean(false);
   }
 
 
+  /**
+   * @description Return true if control is not currently being viewed in a CnetEditorWidget
+   *
+   * @param Control * Control used to search current CnetEditorWidgets
+   *
+   * @return @b (bool) Returns true if control is currently being viewed in CnetEditorWidget
+   */
+  bool Directory::controlUsedInCnetEditorWidget(Control *control) {
+
+    bool result;
+    if ( m_controlMap.count(control) == 0) {
+      result = false;
+    }
+    else {
+      result = true;
+    }
+    return result;
+  }
+
+
   /**
    * @brief Removes pointers to deleted CubeDnView objects.
    */
@@ -1030,11 +1236,9 @@ namespace Isis {
      if (!controlPointEditView) {
        return;
      }
+     m_controlPointEditViewWidget = NULL;
      m_project->setClean(false);
-     //  For now delete the ChipViewportsWidget also, which must be done first since it is a child
-     //  of ControlPointEditView
- //    delete m_chipViewports;
- //    qDebug()<<"Directory::cleanupControlPointEditViewWidget  m_controlPointEditViewWidget = "<<m_controlPointEditViewWidget;
+
    }
 
 
@@ -1080,14 +1284,37 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Removes pointers to deleted TemplateEditorWidget objects.
+   */
+  void Directory::cleanupTemplateEditorWidgets(QObject *obj) {
+
+    TemplateEditorWidget *templateEditorWidget = static_cast<TemplateEditorWidget *>(obj);
+    if (!templateEditorWidget) {
+      return;
+    }
+
+    m_templateEditorWidgets.removeAll(templateEditorWidget);
+    m_project->setClean(false);
+  }
+
+
+  void Directory::cleanupJigsawRunWidget(QObject *obj) {
+     JigsawRunWidget *jigsawRunWidget = static_cast<JigsawRunWidget *>(obj);
+     if (!jigsawRunWidget) {
+       return;
+     }
+     m_jigsawRunWidget = NULL;
+  }
+
+
   /**
    * @brief  Adds a new Project object to the list of recent projects if it has not
    * already been added.
    * @param project A pointer to the Project to add.
    */
   void Directory::updateRecentProjects(Project *project) {
-    if ( !m_recentProjects.contains( project->projectRoot() ) )
-      m_recentProjects.insert( 0, project->projectRoot() );
+    m_recentProjects.insert( 0, project->projectRoot() );
   }
 
 
@@ -1102,12 +1329,12 @@ namespace Isis {
 
   /**
    * @brief Returns a list of all the control network views for this directory.
-   * @return @b QList<CnetEditorWidget *> A pointer list of all the CnetEditorWidget objects.
+   * @return @b QList<CnetEditorView *> A pointer list of all the CnetEditorWidget objects.
    */
-  QList<CnetEditorWidget *> Directory::cnetEditorViews() {
-    QList<CnetEditorWidget *> results;
+  QList<CnetEditorView *> Directory::cnetEditorViews() {
+    QList<CnetEditorView *> results;
 
-    foreach (CnetEditorWidget *widget, m_cnetEditorViewWidgets) {
+    foreach (CnetEditorView *widget, m_cnetEditorViewWidgets) {
       results.append(widget);
     }
 
@@ -1175,6 +1402,21 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Accessor for the list of TemplateEditorWidgets currently available.
+   * @return @b QList<TemplateEditorWidget *> The list of TemplateEditorWidget objects.
+   */
+  QList<TemplateEditorWidget *> Directory::templateEditorViews() {
+    QList<TemplateEditorWidget *> results;
+
+    foreach (TemplateEditorWidget *widget, m_templateEditorWidgets) {
+      results.append(widget);
+    }
+
+    return results;
+  }
+
+
   /**
    * @brief Accessor for the list of Footprint2DViews currently available.
    * @return QList<Footprint2DView *> The list of MosaicSceneWidget objects.
@@ -1213,6 +1455,13 @@ namespace Isis {
     return m_controlPointEditViewWidget;
   }
 
+
+  JigsawRunWidget *Directory::jigsawRunWidget() {
+
+    return m_jigsawRunWidget;
+  }
+
+
 /*
   ChipViewportsWidget *Directory::controlPointChipViewports() {
 
@@ -1303,7 +1552,7 @@ namespace Isis {
       stream.writeStartElement("footprintViews");
 
       foreach (Footprint2DView *footprint2DViewWidget, m_footprint2DViewWidgets) {
-        footprint2DViewWidget->mosaicSceneWidget()->save(stream, project(), newProjectRoot);
+        footprint2DViewWidget->save(stream, project(), newProjectRoot);
       }
 
       stream.writeEndElement();
@@ -1324,7 +1573,7 @@ namespace Isis {
     if ( !m_cnetEditorViewWidgets.isEmpty() ) {
       stream.writeStartElement("cnetEditorViews");
 
-      foreach (CnetEditorWidget *cnetEditorWidget, m_cnetEditorViewWidgets) {
+      foreach (CnetEditorView *cnetEditorWidget, m_cnetEditorViewWidgets) {
         cnetEditorWidget->save(stream, project(), newProjectRoot);
       }
 
@@ -1370,20 +1619,24 @@ namespace Isis {
   bool Directory::XmlHandler::startElement(const QString &namespaceURI, const QString &localName,
                                            const QString &qName, const QXmlAttributes &atts) {
     bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
-
     if (result) {
+      QString viewObjectName;
       if (localName == "footprint2DView") {
-        m_directory->addFootprint2DView()->mosaicSceneWidget()->load(reader());
+        viewObjectName = atts.value("objectName");
+        m_directory->addFootprint2DView(viewObjectName)->load(reader());
       }
       else if (localName == "imageFileList") {
-        m_directory->addImageFileListView()->load(reader());
+        viewObjectName = atts.value("objectName");
+        m_directory->addImageFileListView(viewObjectName)->load(reader());
       }
       else if (localName == "cubeDnView") {
-        m_directory->addCubeDnView()->load(reader(), m_directory->project());
+        viewObjectName = atts.value("objectName");
+        m_directory->addCubeDnView(viewObjectName)->load(reader(), m_directory->project());
       }
-      else if (localName == "control") {
+      else if (localName == "cnetEditorView") {
+        viewObjectName = atts.value("objectName");
         QString id = atts.value("id");
-        m_directory->addCnetEditorView(m_directory->project()->control(id));
+        m_directory->addCnetEditorView(m_directory->project()->control(id), viewObjectName);
       }
     }
 
@@ -1586,13 +1839,13 @@ namespace Isis {
 
 
   /**
-   * Slot that is connected from a left mouse button operation on views 
-   *  
+   * Slot that is connected from a left mouse button operation on views
+   *
    * @param controlPoint (ControlPoint *) The control point selected from view for editing
-   * @param serialNumber (QString) The serial number of Cube that was used to select control point 
+   * @param serialNumber (QString) The serial number of Cube that was used to select control point
    *                     from the CubeDnView.  This parameter will be empty if control point was
    *                     selected from Footprint2DView.
-   *  
+   *
    */
   void Directory::modifyControlPoint(ControlPoint *controlPoint, QString serialNumber) {
 
@@ -1611,10 +1864,10 @@ namespace Isis {
 
 
   /**
-   * Slot that is connected from a middle mouse button operation on views 
-   *  
+   * Slot that is connected from a middle mouse button operation on views
+   *
    * @param controlPoint (ControlPoint *) The control point selected from view for editing
-   *  
+   *
    */
   void Directory::deleteControlPoint(ControlPoint *controlPoint) {
 
@@ -1625,7 +1878,7 @@ namespace Isis {
         }
       }
       m_editPointId = controlPoint->GetId();
- 
+
       //  Update views with point to be deleted shown as current edit point
       emit redrawMeasures();
 
@@ -1635,17 +1888,17 @@ namespace Isis {
 
 
   /**
-   * Slot that is connected from a right mouse button operation on views 
-   *  
+   * Slot that is connected from a right mouse button operation on views
+   *
    * @param latitude (double) Latitude location where the control point was created
    * @param longitude (double) Longitude location where the control point was created
-   * @param cube (Cube *) The Cube in the CubeDnView that was used to select location for new control 
+   * @param cube (Cube *) The Cube in the CubeDnView that was used to select location for new control
    *                     point.  This parameter will be empty if control point was selected from
    *                     Footprint2DView.
    * @param isGroundSource (bool) Indicates whether the Cube in the CubeDnView that was used to select
    *                     location for new control point is a ground source.  This parameter will be
    *                     empty if control point was selected from Footprint2DView.
-   *  
+   *
    */
   void Directory::createControlPoint(double latitude, double longitude, Cube *cube,
                                      bool isGroundSource) {
@@ -1662,20 +1915,9 @@ namespace Isis {
   }
 
 
-  /**
-   * Autosave for control net.  The control net is auto saved to the same directory as the input 
-   * net.  It is saved to controlNetFilename.net.bak. 
-   * 
-   */
-  void Directory::makeBackupActiveControl() {
-
-    project()->activeControl()->controlNet()->Write(project()->activeControl()->fileName()+".bak");
-  }
-
-
   /**
    * Return the current control point id loaded in the ControlPointEditWidget
-   * 
+   *
    * @return @b QString Id of the control point loaded in the ControlPointEditWidget
    */
   QString Directory::editPointId() {
diff --git a/isis/src/qisis/objs/Directory/Directory.h b/isis/src/qisis/objs/Directory/Directory.h
index f7758c652d18a4f9722ee44b28f69f01b90c6145..f5455e3728cd7ea6997b5f85171f501a0eb5de5f 100644
--- a/isis/src/qisis/objs/Directory/Directory.h
+++ b/isis/src/qisis/objs/Directory/Directory.h
@@ -23,6 +23,7 @@
  *   http://www.usgs.gov/privacy.html.
  */
 
+#include <QMainWindow>
 #include <QMultiMap>
 #include <QObject>
 #include <QPointer>
@@ -34,10 +35,12 @@
 #include "ImageList.h"
 #include "MosaicSceneWidget.h"
 #include "TargetBodyList.h"
+#include "TemplateList.h"
 #include "WorkOrder.h"
 
 class QAction;
 class QDockWidget;
+class QMainWindow;
 class QMenuBar;
 class QProgressBar;
 class QSplitter;
@@ -48,15 +51,18 @@ namespace Isis {
   class BundleObservation;
   class BundleObservationView;
   class ChipViewportsWidget;
+  class CnetEditorView;
   class CnetEditorWidget;
   class Control;
   class ControlNet;
   class ControlPointEditView;
+  class ControlHealthMonitorView;
   class CubeDnView;
   class FileItem;
   class Footprint2DView;
   class HistoryTreeWidget;
   class ImageFileListWidget;
+  class JigsawRunWidget;
   class MatrixSceneWidget;
   class MosaicSceneWidget;
   class Project;
@@ -66,6 +72,7 @@ namespace Isis {
   class SensorInfoWidget;
   class TargetBody;
   class TargetInfoWidget;
+  class TemplateEditorWidget;
   class WarningTreeWidget;
   class WorkOrder;
   class Workspace;
@@ -178,7 +185,7 @@ namespace Isis {
    *   @history 2017-08-11 Cole Neubauer - Added project setClean(false) call to all views cleanup
    *                           slot. This will make a a view closing be treated as a project change
    *                           Fixes #5113
-   *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open 
+   *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open
    *                           source images. Fixes #5105.
    *   @history 2017-08-15 Tracie Sucharski - Added comments explaing connections for control point
    *                           editing actions between views.
@@ -187,6 +194,93 @@ namespace Isis {
    *   @history 2017-08-23 Tracie Sucharski - Fixed some code involving connections in
    *                           in ::addFootprint2DView which got messed up in a svn merge.  Removed
    *                           unused signal, controlPointAdded.
+   *   @history 2017-11-02 Tyler Wilson - Added the updateRecentProjects() function which
+   *                           updates the Recent Projects file menu with recently loaded projects.
+   *                           Fixes #4492.
+   *   @history 2017-11-03 Christopher Combs - Added support for new Template and TemplateList
+   *                           classes. Fixes #5117.
+   *   @history 2017-11-09 Tyler Wilson - Made changes to updateRecentProjects() to handle deleting
+   *                           the OpenRecentProjectWorkOrder.  Fixes #5220.
+   *   @history 2017-11-13 Makayla Shepherd - Modifying the name of an ImageList, ShapeList or
+   *                           BundeSolutionInfo on the ProjectTree now sets the project to
+   *                           not clean. Fixes #5174.
+   *   @history 2017-12-01 Summer Stapleton - Commented-out RemoveImagesWorkOrder being created.
+   *                           Fixes #5224
+   *   @history 2017-12-01 Adam Goins Modified updateRecentProjects() to update the recent projects
+   *                           menu it display a chronologically ordered list of recently loaded
+   *                           projects. Fixes #5216.
+   *   @history 2017-12-05 Christopher Combs - Added support for TemplateEditorWidget and
+   *                           TemplateEditViewWorkOrder. Fixes #5168.
+   *   @history 2018-03-14 Ken Edmundson - Modified m_controlMap value from QWidget to
+   *                           CnetEditorWidget and changed connection  to take signal from
+   *                           a CnetEditorWidget instead of a QWidget for destruction of
+   *                           CnetEditorWidgets. Added ability to view bundleout.txt file in method
+   *                           addBundleObservationView.
+   *   @history 2018-03-14 Tracie Sucharski - Changed MosaicControlNetTool to ControlNetTool in
+   *                           addCubeDnView. Added method controlUsedInCnetEditorWidget so Project
+   *                           knows whether it is safe to close a control net when a new active is
+   *                           set. References #5026.
+   *   @history 2018-03-30 Tracie Sucharski - Use the Control::write to write the control net to
+   *                           disk instead of directly calling ControlNet::Write, so that the
+   *                           Control can keep track of the modified status of the control net.
+   *                           Connect cnetModified signal to Project::activeControlModified so
+   *                           modified state of the active control can be set so project knows
+   *                           that control has unsaved changes.
+   *   @history 2018-04-02 Tracie Sucharski - Cleanup m_controlPointEditViewWidget pointer when
+   *                           the ControlPointEditView is deleted. Added slot to reload the active
+   *                           control net in cneteditor view, effectively discarding any edits.
+   *                           This was done because there is no way to re-load a control net in the
+   *                           CnetEditor widget classes.
+   *   @history 2018-04-04 Tracie Sucharski - Created CnetEditorView class to use to add to QMdiArea
+   *                           instead of a CnetEditorWidget. This way there is no longer a
+   *                           disconnect between what has been added to the QMdiArea and what is
+   *                           stored in m_cnetEditorViewWidgets.
+   *   @history 2018-05-08 Tracie Sucharski - When saving active control, reset the "Save Net"
+   *                           button to black in the ControlPointEditorWidget.
+   *   @history 2018-05-14 Tracie Sucharski - Serialize Footprint2DView rather than
+   *                           MosaicSceneWidget. This will allow all parts of Footprint2DView to be
+   *                           saved/restored including the ImageFileListWidget. Fixes #5422.
+   *   @history 2018-05-25 Christopher Combs - Made changes to reflect updates to JigsawRunWidget.
+   *                           Added addJigsawView method and m_jigsawRunWidget member variable.
+   *                           Fixes #5428.
+   *   @history 2018-06-07 Adam Goins - Added the addControlHealthMonitorView() method to directory.
+   *                           Fixes #5435.
+   *   @history 2018-06-13 Kaitlyn Lee - The signal activeControlSet() in addCubeDnView() and
+   *                           addFootprint2DView() now connects to enableControlNetTool() in
+   *                           CubeDnView and Footprint2DView, instead of enabling the tool directly.
+   *                           Removed  saveActiveControl() since users can save the control
+   *                           network with the project save button.
+   *   @history 2018-06-18 Summer Stapleton - Added connection to each view on creation to
+   *                           catch a windowChangeEvent on moveEvent or resizeEvent of these views
+   *                           to allow for saving of the project at these times. Fixes #5114.
+   *   @history 2018-06-19 Adam Goins - Gave the ControlHealthMonitorView() a reference to the
+   *                           directory instance rather than the activeControl. Fixes #5435.
+   *   @history 2018-07-07 Summer Stapleton - Implemented changes to handle implementation of
+   *                           separate import work orders for both map and registration templates.
+   *   @history 2018-07-09 Tracie Sucharski - When adding views, check if the objectName is set
+   *                           which it should be when creating a view from a project serialization.
+   *                           If the objectName has not been set, this is a new view and the unique
+   *                           objectName needs to be created.
+   *   @history 2018-07-09 Kaitlyn Lee - Uncommented code that closes a ControlPointEditView when a new
+   *                           active control is set.
+   *   @history 2018-07-12 Tracie Sucharski - Renamed viewClosed signal to closeView. Moved
+   *                           the close/open control net from reloadActiveControlInCnetEditorView
+   *                           to Project::setActiveControl to prevent seg fault when there are
+   *                           multiple cnetEditorViews with same cnet.
+   *   @history 2018-07-12 Kaitlyn Lee - Changed connection between cnetModified() and project's
+   *                           activeControlModified() to cnetModified() and project's renamed
+   *                           method cnetModified(). This will allow users to save a nonactive
+   *                           cnet, since changes to multiple cnets will be connected. Fixes #5414.
+   *   @history 2018-07-13 Kaitlyn Lee - Added connection to color the save net button to black when
+   *                           a cnet is saved. Added signal activeControlModified() and changed
+   *                           connections that alerted views to redraw themselves when a cnet was
+   *                           modified. Now, views will only be redrawn when
+   *                           activeControlModified() is signaled, instead of cnetModified(). This
+   *                           stops views from being redrawn when any cnet is modified, but still
+   *                           occurs when the active is modified. Fixes #5396.
+   *   @history 2018-08-08 Tracie Sucharski - Removed makeBackupActive slot which was a temporary
+   *                           autosave of active control, most likely causing problems with large
+   *                           networks.
    */
   class Directory : public QObject {
     Q_OBJECT
@@ -200,14 +294,21 @@ namespace Isis {
       void setRecentProjectsList(QStringList recentProjects);
       QStringList recentProjectsList();
 
+      // When adding a new view if the possibility exists for more than 1 of the view make sure
+      // to use a QUuid for the objectName so that save/restoreState will work for the view. Also,
+      // make sure the objectName is serialized to the project. For more info, see ::addCubeDnView,
+      // ::XmlHandler::startElement and CubeDnView::save.
       BundleObservationView *addBundleObservationView(FileItemQsp fileItem);
-      CnetEditorWidget *addCnetEditorView(Control *network);
-      CubeDnView *addCubeDnView();
-      Footprint2DView *addFootprint2DView();
+      ControlHealthMonitorView *addControlHealthMonitorView();
+      CnetEditorView *addCnetEditorView(Control *control, QString objectName = "");
+      CubeDnView *addCubeDnView(QString objectName = "");
+      Footprint2DView *addFootprint2DView(QString objectName = "");
+      JigsawRunWidget *addJigsawRunWidget();
       MatrixSceneWidget *addMatrixView();
       TargetInfoWidget *addTargetInfoView(TargetBodyQsp target);
+      TemplateEditorWidget *addTemplateEditorView(Template *currentTemplate);
       SensorInfoWidget *addSensorInfoView(GuiCameraQsp camera);
-      ImageFileListWidget *addImageFileListView();
+      ImageFileListWidget *addImageFileListView(QString objectName = "");
       ControlPointEditView *addControlPointEditView();
 
 
@@ -229,17 +330,22 @@ namespace Isis {
       QList<QAction *> toolPadActions();
 
       QList<BundleObservationView *> bundleObservationViews();
-      QList<CnetEditorWidget *> cnetEditorViews();
+      QList<CnetEditorView *> cnetEditorViews();
       QList<CubeDnView *> cubeDnViews();
       QList<Footprint2DView *> footprint2DViews();
       QList<MatrixSceneWidget *> matrixViews();
       QList<SensorInfoWidget *> sensorInfoViews();
       QList<TargetInfoWidget *> targetInfoViews();
+      QList<TemplateEditorWidget *> templateEditorViews();
       QList<ImageFileListWidget *> imageFileListViews();
       QList<QProgressBar *> progressBars();
+      ControlHealthMonitorView *controlHealthMonitorView();
       ControlPointEditView *controlPointEditView();
+      JigsawRunWidget *jigsawRunWidget();
 //      ChipViewportsWidget *controlPointChipViewports();
 
+      bool controlUsedInCnetEditorWidget(Control *control);
+
       // Return the control point Id currently in the ControlPointEditWidget, if it exists
       QString editPointId();
 
@@ -301,11 +407,18 @@ namespace Isis {
     signals:
       void directoryCleaned();
       void newWarning();
+      void newDockAvailable(QMainWindow *newWidget);
       void newWidgetAvailable(QWidget *newWidget);
 
+      void closeView(QWidget *widget);
+
       void cnetModified();
+      void activeControlModified();
+
       void redrawMeasures();
 
+      void cleanProject(bool);
+
     public slots:
       void cleanupBundleObservationViews(QObject *);
       void cleanupCnetEditorViewWidgets(QObject *);
@@ -316,12 +429,11 @@ namespace Isis {
       void cleanupMatrixViewWidgets(QObject *);
       void cleanupSensorInfoWidgets(QObject *);
       void cleanupTargetInfoWidgets(QObject *);
+      void cleanupTemplateEditorWidgets(QObject *);
+      void cleanupJigsawRunWidget(QObject *);
       //void imagesAddedToProject(ImageList *images);
       void updateControlNetEditConnections();
 
-      // TODO temporary slot until autosave is implemented
-      void makeBackupActiveControl();
-
       //  Slots in response to mouse clicks on CubeDnView (ControlNetTool) and
       //    Footprint2DView (MosaicControlNetTool)
       void modifyControlPoint(ControlPoint *controlPoint, QString serialNumber = "");
@@ -331,10 +443,12 @@ namespace Isis {
 
 
       void updateRecentProjects(Project *project);
+      void updateRecentProjects();
 
     private slots:
       void initiateRenameProjectWorkOrder(QString projectName);
       void newActiveControl(bool newControl);
+      void reloadActiveControlInCnetEditorView();
 
     private:
       /**
@@ -375,6 +489,7 @@ namespace Isis {
         return newWorkOrder;
       }
 
+
       static QList<QAction *> restructureActions(QList< QPair< QString, QList<QAction *> > >);
       static bool actionTextLessThan(QAction *lhs, QAction *rhs);
 
@@ -386,18 +501,23 @@ namespace Isis {
       QPointer<HistoryTreeWidget> m_historyTreeWidget;  //!< Pointer to the HistoryTreeWidget.
       QPointer<Project> m_project;                      //!< Pointer to the Project.
       QPointer<WarningTreeWidget> m_warningTreeWidget;  //!< Pointer to the WarningTreeWidget.
+      QPointer<JigsawRunWidget> m_jigsawRunWidget;         //!< Pointer to the JigsawRunWidget.
+
 
       //!< List of BundleObservationView
       QList< QPointer<BundleObservationView> > m_bundleObservationViews;
-      QList< QPointer<CnetEditorWidget> > m_cnetEditorViewWidgets;  //!< List of CnetEditorWidgets
+      QList< QPointer<CnetEditorView> > m_cnetEditorViewWidgets;  //!< List of CnetEditorViews
       QList< QPointer<CubeDnView> > m_cubeDnViewWidgets;  //!< List of CubeDnCiew obs
       QList< QPointer<ImageFileListWidget> > m_fileListWidgets;  //!< List of ImageFileListWidgets
       QList< QPointer<Footprint2DView> > m_footprint2DViewWidgets; //!< List of Footprint2DView objs
+
+      QPointer<ControlHealthMonitorView> m_controlHealthMonitorView;
       QPointer <ControlPointEditView> m_controlPointEditViewWidget;
       //QPointer <ChipViewportsWidget> m_chipViewports;
       QList< QPointer<MatrixSceneWidget> > m_matrixViewWidgets; //!< List of MatrixSceneWidgets
       QList< QPointer<SensorInfoWidget> > m_sensorInfoWidgets; //!< List of SensorInfoWidgets
       QList< QPointer<TargetInfoWidget> > m_targetInfoWidgets; //!< List of TargetInfoWidgets
+      QList< QPointer<TemplateEditorWidget> > m_templateEditorWidgets; //!< List of TemplateEditorWidgets
 
       QList< QPointer<WorkOrder> > m_workOrders; //!< List of WorkOrders
 
@@ -415,7 +535,8 @@ namespace Isis {
       QPointer<WorkOrder> m_saveProjectAsWorkOrder; //!< The Save Project As WorkOrder.
       QPointer<WorkOrder> m_openRecentProjectWorkOrder; //!< The Open Recent Project WorkOrder.
       QPointer<WorkOrder> m_closeProjectWorkOrder; //!< The Close Project WorkOrder
-      QPointer<WorkOrder> m_importTemplateWorkOrder; //!< The Import Template WorkOrder
+      QPointer<WorkOrder> m_importMapTemplateWorkOrder; //!< The Import Map Template WorkOrder
+      QPointer<WorkOrder> m_importRegistrationTemplateWorkOrder; //!< The Import Registration Template WorkOrder
 
       QPointer<WorkOrder> m_runJigsawWorkOrder; //!< The Run Jigsaw WorkOrder
       QPointer<WorkOrder> m_renameProjectWorkOrder; //!< The Rename Project WorkOrder
@@ -431,9 +552,11 @@ namespace Isis {
       QList<QAction *> m_activeToolBarActions; //!< List of active ToolBar actions
       QList<QAction *> m_toolPadActions; //!< List of ToolPad actions
 
-      QMultiMap<Control*, QWidget*> m_controlMap; //!< Map to hold every view with an open Control
+      QMultiMap<Control*, CnetEditorView *> m_controlMap; //!< Map to hold every view with an open Control
 
       QString m_editPointId; //!< Current control point that is in the ControlPointEditWidget
+
+      bool m_recentProjectsLoaded;
   };
 }
 
diff --git a/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.cpp b/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.cpp
index a8189c67109f6ab30d03870cfb8739da97b7c2b9..a7c43d919f8032c1075cc7ec1444b394529468a0 100644
--- a/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.cpp
@@ -48,6 +48,7 @@ namespace Isis {
     m_isSynchronous = false;
     m_isUndoable = false;
     QAction::setText(tr("&Export Control Network..."));
+    QUndoCommand::setText(tr("Export Control Network..."));
   }
 
 
@@ -97,8 +98,11 @@ namespace Isis {
    * true indicates that there is one control list in the project.
    */
   bool ExportControlNetWorkOrder::isExecutable(ControlList *controls) {
-    // TODO: This shouldn't be executable (in the menu) if there are no imported control networks?
-    return (controls->count() == 1);
+
+    if (controls) {
+      return (controls->count() == 1);
+    }
+    return false;
   }
 
 
@@ -119,21 +123,19 @@ namespace Isis {
       QStringList internalData;
 
       Control *control = NULL;
+
       // See if there are any other control lists in the project and give these to the user as
       // choices for control nets they can export.
-
-
-      if(project()) {
+      if (project()) {
 
         Project *proj = project();
 
         QList<ControlList *> controls = proj->controls();
         if (controls.count() > 0) {
-          ControlList *l=controls.first();
+          ControlList *l = controls.first();
           WorkOrder::setData(l);
           control = controlList()->first();
         }
-
         else {
 
           QMap<Control *, QString> cnetChoices;
@@ -152,8 +154,6 @@ namespace Isis {
 
           control = cnetChoices.key(choice);
           internalData.append(control->id());
-
-
         }
       }
 
@@ -197,11 +197,9 @@ namespace Isis {
       control = controlList()->first();
     }
 
-    try {
-      control->controlNet()->Write(destination);
-    }
-    catch (IException &e) {
-      m_warning = e.toString();
+    QString currentLocation = control->fileName();
+    if (!QFile::copy(currentLocation, destination) ) {
+      m_warning = "Error saving control net.";
     }
   }
 
diff --git a/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.h b/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.h
index 2a7b0c78f88fbb7c362fa61341ed0cfd58b6eede..1a393d21a1862976b26ba1d4cf184a33e4ddaa19 100644
--- a/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ExportControlNetWorkOrder.h
@@ -25,6 +25,13 @@ namespace Isis {
    *   @history 2017-05-01 Tyler Wilson - Modified the setupExecution() function so that
    *                           it no longer causes a segmentation fault when the user attempts
    *                           to export a control network from the file menu.  Fixes #4760.
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check on the controls variable in
+   *                           isExecutable to prevent potential seg faults.  References #4760.
+   *   @history 2018-03-13 Tracie Sucharski - Added Undo text to prevent runtime warning. Also
+   *                           correct redmine ticket number in previous history entry.
+   *   @history 2018-03-30 Tracie Sucharski - Copy the control net instead of writing.  This will
+   *                           be faster and will prevent another control net from being read into
+   *                           memory.
    */
   class ExportControlNetWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.cpp b/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.cpp
index 8cff9111edd3acb79ac134be95f6daccb4bf8a45..e3227af2111b1581eaa11f3a4a2d408a44922f15 100644
--- a/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.cpp
@@ -74,7 +74,10 @@ namespace Isis {
    * @return bool True if this work order functions with the given image list
    */
   bool ExportImagesWorkOrder::isExecutable(ImageList *images) {
-    return (!images->isEmpty());
+    if (images) {
+      return (!images->isEmpty());
+    }
+    return false;
   }
 
 
diff --git a/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.h b/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.h
index 242e2c1fb3a8244d7706347bb3d4dc87c30e402c..f1078c43f91269a3e7e2f943cad99e79523df266 100644
--- a/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ExportImagesWorkOrder.h
@@ -27,6 +27,8 @@ namespace Isis {
    *
    * @internal
    *   @history 2017-04-16 J Bonn - Updated to new workorder design #4764.
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check on the images variable in
+   *                             isExecutable to prevent potential seg faults.  References #4492.
    */
   class ExportImagesWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.cpp
index 4cd734b769b04be2ca3f300107572b4dc7365618..5944a5ff9bee2cdd0abf4a102d7eb4baf1bead7a 100644
--- a/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.cpp
@@ -118,10 +118,12 @@ namespace Isis {
   bool Footprint2DViewWorkOrder::isExecutable(ShapeList *shapes) {
     bool result = false;
 
-    foreach (Shape *shape, *shapes) {
-      result = result || shape->isFootprintable();
+    if (shapes) {
+      foreach (Shape *shape, *shapes) {
+        result = result || shape->isFootprintable();
+      }
+      return result;
     }
-
     return result;
   }
 
diff --git a/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.h b/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.h
index c5db64b2883f9d566e6e6c211cefdaa596eb4d18..0e24d20bcc4f09a04e99efaf18f01ef6728b885d 100644
--- a/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/Footprint2DViewWorkOrder.h
@@ -58,6 +58,8 @@ namespace Isis {
    *   @history 2017-07-24 Cole Neuabuer - Set m_isSavedToHistory to false on construction
    *                           Fixes #4715
    *   @history 2017-07-25 Cole Neubauer - Added project()->setClean call #4969
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check for the shapes variable in
+   *                           isExecutable to prevent potential seg faults.  References #4492.
    */
   class Footprint2DViewWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.cpp
index d3bfdb67580779b8df5f66bc643f17e92b4e4b31..8769c5c68a5632c3b7cb5b9c438131aca310bd33 100644
--- a/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.cpp
@@ -54,7 +54,11 @@ namespace Isis {
 
 
   bool ImageFileListViewWorkOrder::isExecutable(ImageList *images) {
-    return !images->isEmpty();
+
+    if (images) {
+      return !images->isEmpty();
+    }
+    return false;
   }
 
 
diff --git a/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.h b/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.h
index ed793e62dccf80e34fafbde48ee6c5dd6e08f683..47187372f29f48e2aad337b127c47c516300305a 100644
--- a/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ImageFileListViewWorkOrder.h
@@ -43,6 +43,8 @@ namespace Isis {
    *                           Fixes #4715
    *   @history 2017-08-11 Cole Neubauer - Removed isUndoable and set parent member variable
    *                          Fixes #5064
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check for the images variable in
+   *                          isExecutable to prevent potential seg faults.  References #4492.
    */
   class ImageFileListViewWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.cpp
index dde51680a91bfca430bb3055f65f4b1ac40cb602..3bba87b87eeb7262dec79efc0059770e5af87103 100644
--- a/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.cpp
@@ -51,6 +51,7 @@ namespace Isis {
     m_isSynchronous = false;
     m_list = NULL;
     m_watcher = NULL;
+    m_isUndoable = false;
 
     QAction::setText(tr("Import &Control Networks..."));
 
@@ -104,7 +105,11 @@ namespace Isis {
    * @return bool True if the user clicked on a project tree node named "Control Network"
    */
   bool ImportControlNetWorkOrder::isExecutable(ProjectItem *item) {
-    return (item->text() == "Control Networks");
+
+    if (item) {
+      return (item->text() == "Control Networks");
+    }
+    return false;
   }
 
 
@@ -137,7 +142,6 @@ namespace Isis {
     return internalData().count() > 0;
   }
 
-
   /**
    * @brief Imports the control network asynchronously.
    *
@@ -186,7 +190,6 @@ namespace Isis {
     }
   }
 
-
   /**
    * @brief Clears progress.
    *
@@ -194,10 +197,6 @@ namespace Isis {
    * from postSyncRedo() to postExecution().
    */
   void ImportControlNetWorkOrder::postExecution() {
-    if (!m_list) {
-      project()->undoStack()->undo();
-      m_list = NULL;
-    }
 
     if (m_warning != "") {
       project()->warn(m_warning);
@@ -208,32 +207,13 @@ namespace Isis {
     }
     m_status = WorkOrderFinished;
     m_readProgresses.clear();
-  }
 
-
-  /**
-   * @brief Deletes the control network
-   *
-   * This method deletes the control network from the project. This method is was
-   * renamed from undoSyncRedo() to undoExecution().
-   */
-  void ImportControlNetWorkOrder::undoExecution() {
-    if (m_list && project()->controls().size() > 0 && m_watcher->isFinished()) {
-      // Remove the controls from disk.
-      m_list->deleteFromDisk( project() );
-      // Remove the controls from the model, which updates the tree view.
-      ProjectItem *currentItem =
-          project()->directory()->model()->findItemData( QVariant::fromValue(m_list) );
-      project()->directory()->model()->removeItem(currentItem);
-
-      foreach (Control *control, *m_list) {
-        delete control;
-      }
-      delete m_list;
-    }
+    // If one control network was imported, no active control has been set, and no
+    // other control networks exist in the project, then activeControl() will set
+    // the active control to the newly imported control network.
+    project()->activeControl();
   }
 
-
   /**
    * CreateControlsFunctor constructor
    *
diff --git a/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.h b/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.h
index 3c6a66f81604b44e298d8731de23c4803990f2d0..eb4d75eb3a43bff85b1281f88c16abddd98ce249 100644
--- a/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ImportControlNetWorkOrder.h
@@ -63,6 +63,11 @@ namespace Isis {
    *                           order. This pointer is used in the Undo funtions. #5064
    *   @history 2017-08-11 Cole Neubauer - Refactored import so it closes the controlNet after
    *                           Control is created Fixes #5026
+   *   @histroy 2017-10-24 Adam Goins - Removed the undoStack() call that occurred when a
+   *                           Failed cnet is imported. Fixes #5186
+   *   @histroy 2018-06-13 Kaitlyn Lee - Removed undoExecution() because we should not want to undo
+   *                           an import. In postExecution(), added the ability to set an active
+   *                           control network when one control network is imported. Fixes #5440 #5389.
    */
   class ImportControlNetWorkOrder : public WorkOrder {
       Q_OBJECT
@@ -78,7 +83,6 @@ namespace Isis {
       void execute();
 
     protected:
-      void undoExecution();
       void postExecution();
 
     private slots:
diff --git a/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.cpp
index 236be9c65c25803e5d0344785dbc969d832b49af..d1982e59df0c1e8e0e9237b8b9d29cb425c1bd74 100644
--- a/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.cpp
@@ -27,6 +27,7 @@
 #include <QMessageBox>
 #include <QtConcurrentMap>
 
+#include "Camera.h"
 #include "Cube.h"
 #include "CubeAttribute.h"
 #include "FileName.h"
@@ -34,6 +35,7 @@
 #include "ProjectItem.h"
 #include "ProjectItemModel.h"
 #include "SaveProjectWorkOrder.h"
+#include "Target.h"
 #include "TextFile.h"
 
 namespace Isis {
@@ -103,7 +105,12 @@ namespace Isis {
    * @return bool True if the user clicked on a project tree node named "Shapes"
    */
   bool ImportImagesWorkOrder::isExecutable(ProjectItem *item) {
-    return (item->text() == "Images");
+
+      if (item) {
+        return (item->text() == "Images");
+      }
+
+     return false;
   }
 
 
@@ -131,7 +138,7 @@ namespace Isis {
           tr("Import Images"), "",
           tr("Isis cubes and list files (*.cub *.lis);;All Files (*)"));
 
-      QStringList stateToSave;
+      QStringList* stateToSave = new QStringList();
 
       if (!fileNames.isEmpty()) {
         foreach (FileName fileName, fileNames) {
@@ -141,26 +148,35 @@ namespace Isis {
             QString lineOfListFile;
 
             while (listFile.GetLine(lineOfListFile)) {
-              if (lineOfListFile.contains(path)){
-                stateToSave.append(lineOfListFile);
+              FileName relFileName(path + "/" + lineOfListFile);
+              if (relFileName.fileExists() ) {
+                stateToSave->append(path + "/" + lineOfListFile);
               }
               else {
-                stateToSave.append(path + "/" + lineOfListFile);
+                FileName absFileName(lineOfListFile);
+                if ( absFileName.fileExists() && lineOfListFile.startsWith("/") ) {
+                  stateToSave->append(lineOfListFile);
+                }
+
+                else {
+                  project()->warn("File " + lineOfListFile + " not found");
+                }
               }
             }
           }
           else {
-            stateToSave.append(fileName.original());
+            stateToSave->append(fileName.original());
           }
         }
 
         QMessageBox::StandardButton saveProjectAnswer = QMessageBox::No;
-        if (stateToSave.count() >= 100 && project()->isTemporaryProject()) {
+        if (stateToSave->count() >= 100 && project()->isTemporaryProject()) {
           saveProjectAnswer = QMessageBox::question(qobject_cast<QWidget *>(parent()),
                    tr("Save Project Before Importing Images"),
                    tr("Would you like to save your project <b>before</b> importing images? It can be "
                       "slow to save your project after these images have been loaded if you do not "
-                      "save now."),
+                      "save now. <br><br>IMPORTANT: WHEN IMPORTING LARGE DATA SETS, SAVING YOUR "
+                      "PROJECT BEFORE IMPORTING IS HIGHLY RECOMMENDED."),
                    QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
                    QMessageBox::Yes);
         }
@@ -171,40 +187,40 @@ namespace Isis {
         }
 
         QMessageBox::StandardButton copyImagesAnswer = QMessageBox::No;
-        if (!fileNames.isEmpty() && saveProjectAnswer != QMessageBox::Cancel) {
+        if (!stateToSave->isEmpty() && saveProjectAnswer != QMessageBox::Cancel) {
           copyImagesAnswer = QMessageBox::question(qobject_cast<QWidget *>(parent()),
                    tr("Copy Images into Project"),
                    tr("Should images (DN data) be copied into project?"),
                    QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
-                   QMessageBox::Yes);
+                   QMessageBox::No);
         }
 
         bool copyDnData = (copyImagesAnswer == QMessageBox::Yes);
 
-        stateToSave.prepend(copyDnData? "copy" : "nocopy");
+        stateToSave->prepend(copyDnData? "copy" : "nocopy");
 
         if (fileNames.count() > 1) {
-          QUndoCommand::setText(tr("Import %1 Images").arg(stateToSave.count() - 1));
+          QUndoCommand::setText(tr("Import %1 Images").arg(stateToSave->count() - 1));
         }
-        else if (fileNames.count() == 1 && stateToSave.count() > 2) {
+        else if (fileNames.count() == 1 && stateToSave->count() > 2) {
           QUndoCommand::setText(tr("Import %1 Images from %2").arg(
-                        QString::number(stateToSave.count() - 1), fileNames.first()));
+                        QString::number(stateToSave->count() - 1), fileNames.first()));
         }
         else {
           QUndoCommand::setText(tr("Import %1").arg(fileNames.first()));
         }
 
         // The internal data will look like: [ copy|nocopy, img1, img2, ... ]
-        setInternalData(stateToSave);
+        setInternalData(*stateToSave);
 
-        bool doImport = fileNames.count() > 0 && saveProjectAnswer != QMessageBox::Cancel &&
+        bool doImport = stateToSave->count() > 1 && saveProjectAnswer != QMessageBox::Cancel &&
                         copyImagesAnswer != QMessageBox::Cancel;
 
         return doImport;
       }
 
     }
-    catch (IException e) {
+    catch (IException &e) {
       QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
     return false;
@@ -273,7 +289,7 @@ namespace Isis {
         project()->setClean(false);
       }
     }
-    catch (IException e) {
+    catch (IException &e) {
         QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
   }
@@ -293,13 +309,13 @@ namespace Isis {
     try {
       if (!m_newImages->isEmpty()) {
         project()->addImages(*m_newImages);
-      m_list = project()->images().last();
+        m_list = project()->images().last();
 
         delete m_newImages;
         m_newImages = NULL;
       }
     }
-    catch (IException e) {
+    catch (IException &e) {
       m_status = WorkOrderFinished;
       m_warning.append(e.what());
     }
@@ -396,19 +412,24 @@ namespace Isis {
           projectImage->relocateDnData(FileName(destination).name());
         }
 
+        //  Set new ecub to readOnly.  When closing cube, the labels were being re-written because
+        // the cube was read/write. This caused a segfault when imported large number of images
+        // because of a label template file being opened too many times.
+        projectImage->reopen();
+
         delete input;
 
         result = projectImage;
       }
       // When we encounter an exception, update the m_errors and m_numErrors to with the exception
       // that occurred.
-      catch (...) {
-      //  m_errorsLock.lock();
+      catch (IException &e) {
+        m_errorsLock.lock();
 
-      //  m_errors->append(e);
-      //  (*m_numErrors)++;
+        m_errors->append(e);
+        (*m_numErrors)++;
 
-        //m_errorsLock.unlock();
+        m_errorsLock.unlock();
       }
     }
 
@@ -509,8 +530,33 @@ namespace Isis {
           Cube *cube = future.resultAt(i);
 
           if (cube) {
+
+            // Confirm that the target body and the gui camera do not exist before creating and 
+            // and adding them for each image. Since a target may be covered by many cameras and a 
+            // camera may cover many targets, have to get tricky with the checking.
+            QString instrumentId = cube->label()->findGroup("Instrument", 
+                              PvlObject::FindOptions::Traverse).findKeyword("InstrumentId")[0];
+            QString targetName = cube->label()->findGroup("Instrument", 
+                              PvlObject::FindOptions::Traverse).findKeyword("TargetName")[0];
+            if (!project()->hasTarget(targetName)) {
+              Camera *camera = cube->camera();
+              Target *target = camera->target();
+              project()->addTarget(target);
+              
+              if (!project()->hasCamera(instrumentId)) {
+                project()->addCamera(camera);
+              }
+            }
+            else if (!project()->hasCamera(instrumentId)) {
+              Camera *camera = cube->camera();
+              project()->addCamera(camera);
+            }
+
             // Create a new image from the result in the thread spawned in WorkOrder::redo().
-            Image *newImage = new Image(future.resultAt(i));
+            Image *newImage = new Image(cube);
+            newImage->closeCube();
+            // Memory for cube is deleted in Image::closeCube()
+            cube = NULL;
 
             // Either use a unique id that was already provided or create one for the new image.
             if (confirmedImagesIds[i].isEmpty()) {
@@ -533,8 +579,6 @@ namespace Isis {
             // (was created) in the GUI thread.
             newImage->moveToThread(thread());
             newImage->displayProperties()->moveToThread(thread());
-
-            newImage->closeCube();
           }
         }
         // Since we temporarily increased the max thread count (by releasing a thread), make sure
@@ -558,7 +602,7 @@ namespace Isis {
         setInternalData(newInternalData);
       }
     }
-    catch (IException e) {
+    catch (IException &e) {
         QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
   }
diff --git a/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.h b/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.h
index 3980842d15ad6f502dfd92cecf7db6c74e152810..ecfd670ee662135acd81e7b00151af09be57f96e 100644
--- a/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ImportImagesWorkOrder.h
@@ -82,7 +82,29 @@ namespace Isis {
    *                           order. This pointer is used in the Undo funtions #5064
    *   @history 2017-08-11 Cole Neubauer - Created a try catch around a previously unprotected error
    *                           to handle errors thrown in the workorder that halted execution.
-   *                           Fixes #5026
+   *                           Fixes #5026.
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check around ProjectItem *item pointer
+   *                           in isExecutable to prevent potential seg faults.  References #4492.
+   *
+   *   @history 2017-11-13 Cole Neubauer - Fixed apsolute paths not being read correctly in cubelis
+   *                           Fixes #4956
+   *   @history 2017-09-26 Tracie Sucharski - In ::importConfirmedImages, pass in the cube pointer
+   *                           to Image constructor rather than the future result.  Null out the
+   *                           cube pointer after it is closed in the Image.  After output ecub is
+   *                           created reopen created ecub as readOnly.  When closing cube, the
+   *                           labels were being re-written because the cube was read/write. This
+   *                           caused a segfault when imported large number of images because of a
+   *                           label template file being opened too many times.  Uncommented error
+   *                           checking in functor operator method. Fixes #4955.
+   *   @history 2018-01-18 Tracie Sucharski - Add the targets and gui cameras to the project.
+   *                           Fixes #5181.
+   *   @history 2018-07-12 Summer Stapleton - Updated how adding the targets and the gui cameras to
+   *                           the project is handled to address segfault. Instead of creating a 
+   *                           camera and a target with every new image imported and adding them if
+   *                           needed, they are now no longer created in the first place except 
+   *                           when needed. Fixes #5460.
+   *   @history 2018-07-19 Tracie Sucharski - Changed default button for importing DN data to "No". 
+   *            
    */
   class ImportImagesWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/ImportMapTemplateWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImportMapTemplateWorkOrder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..06ecc29fbb7dda2d9df217eb9468ed36e691394a
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/ImportMapTemplateWorkOrder.cpp
@@ -0,0 +1,184 @@
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "ImportMapTemplateWorkOrder.h"
+
+#include <QFile>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QRegularExpression>
+#include <QDebug>
+
+#include "Project.h"
+#include "ProjectItemModel.h"
+#include "Template.h"
+#include "TemplateList.h"
+
+namespace Isis {
+  /**
+   * Creates a work order to import map templates.
+   *
+   * @param *project Pointer to the project this work order belongs to
+   */
+  ImportMapTemplateWorkOrder::ImportMapTemplateWorkOrder(Project *project) :
+      WorkOrder(project) {
+
+    m_isUndoable = true;
+    m_list = NULL;
+
+    QAction::setText(tr("Import Map Templates..."));
+    QUndoCommand::setText(tr("Import Map Templates..."));
+    setModifiesDiskState(true);
+
+  }
+
+
+  /**
+   * Creates a copy of the other ImportMapTemplateWorkOrder
+   *
+   * @param &other ImportMapTemplateWorkOrder to copy the state from
+   */
+  ImportMapTemplateWorkOrder::ImportMapTemplateWorkOrder(const ImportMapTemplateWorkOrder &other) :
+      WorkOrder(other) {
+  }
+
+
+  /**
+   * Destructor
+   */
+  ImportMapTemplateWorkOrder::~ImportMapTemplateWorkOrder() {
+    m_list = NULL;
+  }
+
+
+  /**
+   * This method clones the current ImportMapTemplateWorkOrder and returns it.
+   *
+   * @return ImportMapTemplateWorkOrder Clone
+   */
+  ImportMapTemplateWorkOrder *ImportMapTemplateWorkOrder::clone() const {
+    return new ImportMapTemplateWorkOrder(*this);
+  }
+
+
+  /**
+   * This method returns true if the user clicked on a project tree node with the text
+   * "Maps".
+   * This is used by Directory::supportedActions(DataType data) to determine what actions are
+   * appended to context menus.
+   *
+   * @param item The ProjectItem that was clicked
+   *
+   * @return bool True if the user clicked on a project tree node named "Maps"
+   */
+  bool ImportMapTemplateWorkOrder::isExecutable(ProjectItem *item) {
+    QString itemType = item->text();
+    setInternalData(QStringList(itemType));
+
+    return (itemType == "Maps");
+  }
+
+
+  /**
+   * @brief Sets up the work order for execution.
+   *
+   * This method prompts the user for a template to open.
+   *
+   * @see WorkOrder::setupExecution()
+   *
+   * @return bool Returns true if we have at least one template file name.
+   */
+  bool ImportMapTemplateWorkOrder::setupExecution() {
+
+    WorkOrder::setupExecution();
+
+    QStringList templateFileNames;
+
+    templateFileNames = QFileDialog::getOpenFileNames(
+        qobject_cast<QWidget *>(parent()),
+        "Import Map Templates",
+        QString(),
+        "Maps (*.map);; All Files (*)");
+
+    if (!templateFileNames.isEmpty()) {
+      QUndoCommand::setText(tr("Import %1 Template(s)").arg(templateFileNames.count()));
+    }
+    else {
+      return false;
+    }
+
+    setInternalData(templateFileNames);
+
+    return true;
+  }
+
+
+  /**
+   * @brief Imports the templates
+   *
+   * This method copies the template files into the appropriate directory. If the file already 
+   * exists in the chosen directory, it will not be copied over.
+   */
+  void ImportMapTemplateWorkOrder::execute() {
+    QDir templateFolder = project()->addTemplateFolder("maps/import");
+    QStringList templateFileNames = internalData();
+
+    m_list = new TemplateList(templateFolder.dirName(), 
+                              "maps", 
+                              "maps/" + templateFolder.dirName() );
+
+    foreach (FileName filename, templateFileNames) {
+      QFile::copy(filename.expanded(), templateFolder.path() + "/" + filename.name());
+      m_list->append(new Template(templateFolder.path() + "/" + filename.name(), 
+                                  "maps", 
+                                  templateFolder.dirName()));
+    }
+
+    if (!m_list->isEmpty()) {
+      project()->addTemplates(m_list);
+      project()->setClean(false);
+    }
+
+  }
+
+
+  /**
+   * @brief Deletes the previously imported templates
+   *
+   * This method deletes the templates from both the directory they were copied to
+   * and the ProjectItemModel
+   */
+  void ImportMapTemplateWorkOrder::undoExecution() {
+    if (m_list && project()->templates().size() > 0) {
+      m_list->deleteFromDisk( project() );
+      ProjectItem *currentItem =
+          project()->directory()->model()->findItemData(QVariant::fromValue(m_list));
+      project()->directory()->model()->removeItem(currentItem);
+    }
+    foreach ( Template *currentTemplate, *m_list) {
+      delete currentTemplate;
+    }
+    delete m_list;
+    m_list = NULL;
+  }
+
+}
diff --git a/isis/src/qisis/objs/Directory/ImportTemplateWorkOrder.h b/isis/src/qisis/objs/Directory/ImportMapTemplateWorkOrder.h
similarity index 58%
rename from isis/src/qisis/objs/Directory/ImportTemplateWorkOrder.h
rename to isis/src/qisis/objs/Directory/ImportMapTemplateWorkOrder.h
index 13e9c2ea19265fc4e4cc5e7658250959d80ddf38..e0cf1b7b2647ca06a8916f6281ca9f598ad09195 100644
--- a/isis/src/qisis/objs/Directory/ImportTemplateWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ImportMapTemplateWorkOrder.h
@@ -1,5 +1,5 @@
-#ifndef ImportTemplateWorkOrder_H
-#define ImportTemplateWorkOrder_H
+#ifndef ImportMapTemplateWorkOrder_H
+#define ImportMapTemplateWorkOrder_H
 /**
  * @file
  * $Revision: 1.19 $
@@ -24,27 +24,28 @@
  */
  #include "WorkOrder.h"
  #include "ProjectItem.h"
+ #include "Template.h"
+ #include "TemplateList.h"
 
  namespace Isis {
    /**
-    * @brief Add templates to a project
+    * @brief Add map templates to a project
     *
-    * Asks the user for a template and its type and copies it into the project.
+    * Asks the user for a map template and copies it into the project.
     *
-    * @author 2017-07-31 Christopher Combs
+    * @author 2018-07-05 Summer Stapleton
+    * @internal
+    *    @history 2018-07-05 Summer Stapleton - Created ImportMapTemplateWorkOrder class
     *
-    * @internal 
-    *   @history 2017-08-23 Tracie Sucharski - Fixed assignment to itemType in setupExecution to use
-    *                          assignment operator rather than comparison operator.
     */
-    class ImportTemplateWorkOrder : public WorkOrder {
+    class ImportMapTemplateWorkOrder : public WorkOrder {
         Q_OBJECT
       public:
-        ImportTemplateWorkOrder(Project *project);
-        ImportTemplateWorkOrder(const ImportTemplateWorkOrder &other);
-        ~ImportTemplateWorkOrder();
+        ImportMapTemplateWorkOrder(Project *project);
+        ImportMapTemplateWorkOrder(const ImportMapTemplateWorkOrder &other);
+        ~ImportMapTemplateWorkOrder();
 
-        virtual ImportTemplateWorkOrder *clone() const;
+        virtual ImportMapTemplateWorkOrder *clone() const;
 
         virtual bool isExecutable(ProjectItem *item);
         bool setupExecution();
@@ -52,10 +53,9 @@
         void undoExecution();
 
       private:
-        ImportTemplateWorkOrder &operator=(const ImportTemplateWorkOrder &rhs);
+        ImportMapTemplateWorkOrder &operator=(const ImportMapTemplateWorkOrder &rhs);
 
-        QList<FileName> m_newFileList;
-        QString m_lastChosenFileType; //!< The file type filter chosen in the QFileDialog
+        TemplateList *m_list;
     };
  }
 
diff --git a/isis/src/qisis/objs/Directory/ImportRegistrationTemplateWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImportRegistrationTemplateWorkOrder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3627d2bd67b1a455b027d774befc19eb5c6aef18
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/ImportRegistrationTemplateWorkOrder.cpp
@@ -0,0 +1,184 @@
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "ImportRegistrationTemplateWorkOrder.h"
+
+#include <QFile>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QRegularExpression>
+#include <QDebug>
+
+#include "Project.h"
+#include "ProjectItemModel.h"
+#include "Template.h"
+#include "TemplateList.h"
+
+namespace Isis {
+  /**
+   * Creates a work order to import registration templates.
+   *
+   * @param *project Pointer to the project this work order belongs to
+   */
+  ImportRegistrationTemplateWorkOrder::ImportRegistrationTemplateWorkOrder(Project *project) :
+      WorkOrder(project) {
+
+    m_isUndoable = true;
+    m_list = NULL;
+
+    QAction::setText(tr("Import Registration Templates..."));
+    QUndoCommand::setText(tr("Import Registration Templates..."));
+    setModifiesDiskState(true);
+
+  }
+
+
+  /**
+   * Creates a copy of the other ImportRegistrationTemplateWorkOrder
+   *
+   * @param &other ImportRegistrationTemplateWorkOrder to copy the state from
+   */
+  ImportRegistrationTemplateWorkOrder::ImportRegistrationTemplateWorkOrder(const ImportRegistrationTemplateWorkOrder &other) :
+      WorkOrder(other) {
+  }
+
+
+  /**
+   * Destructor
+   */
+  ImportRegistrationTemplateWorkOrder::~ImportRegistrationTemplateWorkOrder() {
+    m_list = NULL;
+  }
+
+
+  /**
+   * This method clones the current ImportRegistrationTemplateWorkOrder and returns it.
+   *
+   * @return ImportRegistrationTemplateWorkOrder Clone
+   */
+  ImportRegistrationTemplateWorkOrder *ImportRegistrationTemplateWorkOrder::clone() const {
+    return new ImportRegistrationTemplateWorkOrder(*this);
+  }
+
+
+  /**
+   * This method returns true if the user clicked on a project tree node with the text
+   * "Registrations".
+   * This is used by Directory::supportedActions(DataType data) to determine what actions are
+   * appended to context menus.
+   *
+   * @param item The ProjectItem that was clicked
+   *
+   * @return bool True if the user clicked on a project tree node named "Registrations"
+   */
+  bool ImportRegistrationTemplateWorkOrder::isExecutable(ProjectItem *item) {
+    QString itemType = item->text();
+    setInternalData(QStringList(itemType));
+
+    return (itemType == "Registrations");
+  }
+
+
+  /**
+   * @brief Sets up the work order for execution.
+   *
+   * This method prompts the user for a template to open.
+   *
+   * @see WorkOrder::setupExecution()
+   *
+   * @return bool Returns true if we have at least one template file name.
+   */
+  bool ImportRegistrationTemplateWorkOrder::setupExecution() {
+
+    WorkOrder::setupExecution();
+
+    QStringList templateFileNames;
+
+    templateFileNames = QFileDialog::getOpenFileNames(
+        qobject_cast<QWidget *>(parent()),
+        "Import Registration Templates",
+        QString(),
+        "Registrations (*.def);; All Files (*)");
+
+    if (!templateFileNames.isEmpty()) {
+      QUndoCommand::setText(tr("Import %1 Template(s)").arg(templateFileNames.count()));
+    }
+    else {
+      return false;
+    }
+
+    setInternalData(templateFileNames);
+
+    return true;
+  }
+
+
+  /**
+   * @brief Imports the templates
+   *
+   * This method copies the template files into the appropriate directory. If the file already 
+   * exists in the chosen directory, it will not be copied over.
+   */
+  void ImportRegistrationTemplateWorkOrder::execute() {
+    QDir templateFolder = project()->addTemplateFolder("registrations/import");
+    QStringList templateFileNames = internalData();
+
+    m_list = new TemplateList(templateFolder.dirName(), 
+                              "registrations", 
+                              "registrations/" + templateFolder.dirName() );
+
+    foreach (FileName filename, templateFileNames) {
+      QFile::copy(filename.expanded(), templateFolder.path() + "/" + filename.name());
+      m_list->append(new Template(templateFolder.path() + "/" + filename.name(), 
+                                  "registrations", 
+                                  templateFolder.dirName()));
+    }
+
+    if (!m_list->isEmpty()) {
+      project()->addTemplates(m_list);
+      project()->setClean(false);
+    }
+
+  }
+
+
+  /**
+   * @brief Deletes the previously imported templates
+   *
+   * This method deletes the templates from both the directory they were copied to
+   * and the ProjectItemModel
+   */
+  void ImportRegistrationTemplateWorkOrder::undoExecution() {
+    if (m_list && project()->templates().size() > 0) {
+      m_list->deleteFromDisk( project() );
+      ProjectItem *currentItem =
+          project()->directory()->model()->findItemData(QVariant::fromValue(m_list));
+      project()->directory()->model()->removeItem(currentItem);
+    }
+    foreach ( Template *currentTemplate, *m_list) {
+      delete currentTemplate;
+    }
+    delete m_list;
+    m_list = NULL;
+  }
+
+}
diff --git a/isis/src/qisis/objs/Directory/ImportRegistrationTemplateWorkOrder.h b/isis/src/qisis/objs/Directory/ImportRegistrationTemplateWorkOrder.h
new file mode 100644
index 0000000000000000000000000000000000000000..dc53466f5080ae51937879110def427483525ed9
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/ImportRegistrationTemplateWorkOrder.h
@@ -0,0 +1,61 @@
+#ifndef ImportRegistrationTemplateWorkOrder_H
+#define ImportRegistrationTemplateWorkOrder_H
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+ #include "WorkOrder.h"
+ #include "ProjectItem.h"
+ #include "Template.h"
+ #include "TemplateList.h"
+
+ namespace Isis {
+   /**
+   * @brief Add registration templates to a project
+   *
+   * Asks the user for a registration template and copies it into the project.
+   *
+   * @author 2018-07-05 Summer Stapleton
+   * @internal
+   *   @history 2018-07-05 Summer Stapleton - Created ImportRegistrationTemplateWorkOrder class
+   */
+    class ImportRegistrationTemplateWorkOrder : public WorkOrder {
+        Q_OBJECT
+      public:
+        ImportRegistrationTemplateWorkOrder(Project *project);
+        ImportRegistrationTemplateWorkOrder(const ImportRegistrationTemplateWorkOrder &other);
+        ~ImportRegistrationTemplateWorkOrder();
+
+        virtual ImportRegistrationTemplateWorkOrder *clone() const;
+
+        virtual bool isExecutable(ProjectItem *item);
+        bool setupExecution();
+        void execute();
+        void undoExecution();
+
+      private:
+        ImportRegistrationTemplateWorkOrder &operator=(const ImportRegistrationTemplateWorkOrder &rhs);
+
+        TemplateList *m_list;
+    };
+ }
+
+ #endif
diff --git a/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.cpp
index 7a0ac2f1d3b08555344b0b5c2bcad5e8cc7f1bce..1a14dab04defcfdd38d17a4da62316be20d1a222 100644
--- a/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.cpp
@@ -28,6 +28,7 @@
 #include "Cube.h"
 #include "CubeAttribute.h"
 #include "FileName.h"
+#include "IException.h"
 #include "Project.h"
 #include "ProjectItem.h"
 #include "ProjectItemModel.h"
@@ -49,8 +50,8 @@ namespace Isis {
     m_newShapes = NULL;
     m_list = NULL;
 
-    QAction::setText(tr("Import &Shape Models..."));
-    QUndoCommand::setText(tr("Import Shape Models"));
+    QAction::setText(tr("Import &Shape Models and Ground source..."));
+    QUndoCommand::setText(tr("Import Shape Models and Ground source"));
     setModifiesDiskState(true);
   }
 
@@ -99,7 +100,11 @@ namespace Isis {
    * @return bool True if the user clicked on a project tree node named "Shapes"
    */
   bool ImportShapesWorkOrder::isExecutable(ProjectItem *item) {
-    return (item->text() == "Shapes");
+    if (item) {
+      return (item->text() == "Shapes");
+    }
+
+    return false;
   }
 
 
@@ -314,6 +319,11 @@ namespace Isis {
           projectShape->relocateDnData(FileName(destination).name());
         }
 
+        //  Set new ecub to readOnly.  When closing cube, the labels were being re-written because
+        // the cube was read/write. This caused a segfault when imported large number of images
+        // because of a label template file being opened too many times. 
+        projectShape->reopen();
+
         delete input;
 
         result = projectShape;
@@ -371,73 +381,78 @@ namespace Isis {
    */
   void ImportShapesWorkOrder::importConfirmedShapes(QStringList confirmedShapes,
                                                              bool copyDnData) {
-    if (!confirmedShapes.isEmpty()) {
-      QDir folder = project()->addShapeFolder("import");
+    try {
+      if (!confirmedShapes.isEmpty()) {
+        QDir folder = project()->addShapeFolder("import");
 
-      setProgressRange(0, confirmedShapes.count());
+        setProgressRange(0, confirmedShapes.count());
 
-      m_newShapes = new ShapeList;
-      m_newShapes->reserve(confirmedShapes.count());
+        m_newShapes = new ShapeList;
+        m_newShapes->reserve(confirmedShapes.count());
 
-      QStringList confirmedShapesFileNames;
-      QStringList confirmedShapesIds;
+        QStringList confirmedShapesFileNames;
+        QStringList confirmedShapesIds;
 
-      foreach (QString confirmedShape, confirmedShapes) {
-        QStringList fileNameAndId = confirmedShape.split(",");
+        foreach (QString confirmedShape, confirmedShapes) {
+          QStringList fileNameAndId = confirmedShape.split(",");
 
-        confirmedShapesFileNames.append(fileNameAndId.first());
+          confirmedShapesFileNames.append(fileNameAndId.first());
 
-        if (fileNameAndId.count() == 2) {
-          confirmedShapesIds.append(fileNameAndId.last());
-        }
-        else {
-          confirmedShapesIds.append(QString());
+          if (fileNameAndId.count() == 2) {
+            confirmedShapesIds.append(fileNameAndId.last());
+          }
+          else {
+            confirmedShapesIds.append(QString());
+          }
         }
-      }
 
-      OriginalFileToProjectCubeFunctor functor(thread(), folder, copyDnData);
-      QFuture<Cube *> future = QtConcurrent::mapped(confirmedShapesFileNames, functor);
+        OriginalFileToProjectCubeFunctor functor(thread(), folder, copyDnData);
+        QFuture<Cube *> future = QtConcurrent::mapped(confirmedShapesFileNames, functor);
 
-      QStringList newInternalData;
-      newInternalData.append(internalData().first());
+        QStringList newInternalData;
+        newInternalData.append(internalData().first());
 
-      QThreadPool::globalInstance()->releaseThread();
-      for (int i = 0; i < confirmedShapes.count(); i++) {
-        setProgressValue(i);
+        QThreadPool::globalInstance()->releaseThread();
+        for (int i = 0; i < confirmedShapes.count(); i++) {
+          setProgressValue(i);
 
-        Cube *cube = future.resultAt(i);
+          Cube *cube = future.resultAt(i);
 
-        if (cube) {
-          Shape *newShape = new Shape(future.resultAt(i));
+          if (cube) {
+            Shape *newShape = new Shape(future.resultAt(i));
 
-          if (confirmedShapesIds[i].isEmpty()) {
-            confirmedShapesIds[i] = newShape->id();
-          }
-          else {
-            newShape->setId(confirmedShapesIds[i]);
-          }
+            if (confirmedShapesIds[i].isEmpty()) {
+              confirmedShapesIds[i] = newShape->id();
+            }
+            else {
+              newShape->setId(confirmedShapesIds[i]);
+            }
 
-          QStringList ShapeInternalData;
-          ShapeInternalData.append(confirmedShapesFileNames[i]);
-          ShapeInternalData.append(confirmedShapesIds[i]);
+            QStringList ShapeInternalData;
+            ShapeInternalData.append(confirmedShapesFileNames[i]);
+            ShapeInternalData.append(confirmedShapesIds[i]);
 
-          newInternalData.append(ShapeInternalData.join(","));
+            newInternalData.append(ShapeInternalData.join(","));
 
-          m_newShapes->append(newShape);
+            m_newShapes->append(newShape);
 
-          newShape->moveToThread(thread());
-          newShape->displayProperties()->moveToThread(thread());
+            newShape->moveToThread(thread());
+            newShape->displayProperties()->moveToThread(thread());
 
-          newShape->closeCube();
+            newShape->closeCube();
+          }
         }
-      }
-      QThreadPool::globalInstance()->reserveThread();
+        QThreadPool::globalInstance()->reserveThread();
 
-      m_warning = functor.errors().toString();
+        m_warning = functor.errors().toString();
 
-      m_newShapes->moveToThread(thread());
+        m_newShapes->moveToThread(thread());
 
-      setInternalData(newInternalData);
+        setInternalData(newInternalData);
+      }
+    }
+    catch (IException &e) {
+      QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
   }
 }
diff --git a/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.h b/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.h
index 2d6f7641cbb75d07e76fbc89e621c62f7bef988d..61d8549dc8f3108ca85d9f92726b0edd1fd3a4d4 100644
--- a/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ImportShapesWorkOrder.h
@@ -53,10 +53,15 @@ namespace Isis {
    *   @history 2017-07-25 Cole Neubauer - Added project()->setClean call #4969
    *   @history 2017-07-26 Makayla Shepherd - Fixed a crash that occurs when a failed image import
    *                           is undone. Fixes #5043.
-   *   @history 2017-08-11 Cole Neubauer - Added a pointer to the project item added by the work
-   *                           order. This pointer is used in the Undo funtions. Also unrelated
-   *                           to this ticket fixed importing of a cube list with relative paths
-   *                           #5064
+   *   @history 2017-11-02 Tyler Wilson - Added a  null pointer check on the ProjectItem *item
+   *                           pointer in isExecutable to prevent potential seg faults.
+   *                           References #4492.
+   *   @history 2018-04-19 Tracie Sucharski - Fixed bug when importing shapes without DN data. Ecub
+   *                           labels were not complete due to a resulting ecub not being closed
+   *                           properly in thread.  The resulting ecub needs to be re-opened as
+   *                           readOnly to prevent this problem.  Fixes #5274.
+   *   @history 2018-09-10 Tracie Sucharski - Added try/catch around importConfirmedShapes to catch
+   *                           any errors.
    */
   class ImportShapesWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/ImportTemplateWorkOrder.cpp b/isis/src/qisis/objs/Directory/ImportTemplateWorkOrder.cpp
deleted file mode 100644
index dc06eb95e433b25078fc9436766e2a52dbab4bbe..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/Directory/ImportTemplateWorkOrder.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/**
- * @file
- * $Revision: 1.19 $
- * $Date: 2010/03/22 19:44:53 $
- *
- *   Unless noted otherwise, the portions of Isis written by the USGS are
- *   public domain. See individual third-party library and package descriptions
- *   for intellectual property information, user agreements, and related
- *   information.
- *
- *   Although Isis has been used by the USGS, no warranty, expressed or
- *   implied, is made by the USGS as to the accuracy and functioning of such
- *   software and related material nor shall the fact of distribution
- *   constitute any such warranty, and no responsibility is assumed by the
- *   USGS in connection therewith.
- *
- *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
- *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
- *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.
- */
-#include "ImportTemplateWorkOrder.h"
-
-#include <QFile>
-#include <QFileDialog>
-#include <QMessageBox>
-#include <QRegularExpression>
-#include <QDebug>
-
-#include "Project.h"
-#include "ProjectItemModel.h"
-
-namespace Isis {
-  /**
-   * Creates a work order to import a template.
-   *
-   * @param *project Pointer to the project this work order belongs to
-   */
-  ImportTemplateWorkOrder::ImportTemplateWorkOrder(Project *project) :
-      WorkOrder(project) {
-
-    m_isUndoable = true;
-
-    QAction::setText(tr("Import Template"));
-    QUndoCommand::setText(tr("Import Template"));
-    setModifiesDiskState(true);
-
-  }
-
-
-  /**
-   * Creates a copy of the other ImportTemplateWorkOrder
-   *
-   * @param &other ImportTemplateWorkOrder to copy the state from
-   */
-  ImportTemplateWorkOrder::ImportTemplateWorkOrder(const ImportTemplateWorkOrder &other) :
-      WorkOrder(other) {
-  }
-
-
-  /**
-   * Destructor
-   */
-  ImportTemplateWorkOrder::~ImportTemplateWorkOrder() {
-  }
-
-
-  /**
-   * This method clones the current ImportTemplateWorkOrder and returns it.
-   *
-   * @return ImportTemplateWorkOrder Clone
-   */
-  ImportTemplateWorkOrder *ImportTemplateWorkOrder::clone() const {
-    return new ImportTemplateWorkOrder(*this);
-  }
-
-
-  /**
-   * This method returns true if the user clicked on a project tree node with the text
-   * "Templates".
-   * This is used by Directory::supportedActions(DataType data) to determine what actions are
-   * appended to context menus.
-   *
-   * @param item The ProjectItem that was clicked
-   *
-   * @return bool True if the user clicked on a project tree node named "Templates"
-   */
-  bool ImportTemplateWorkOrder::isExecutable(ProjectItem *item) {
-    QString itemType = item->text();
-    setInternalData(QStringList(itemType));
-
-    return (itemType == "Maps" || itemType == "Registrations" || itemType == "Templates");
-  }
-
-
-  /**
-   * @brief Sets up the work order for execution.
-   *
-   * This method prompts the user for a template to open.
-   *
-   * @see WorkOrder::setupExecution()
-   *
-   * @return bool Returns true if we have at least one template file name.
-   */
-  bool ImportTemplateWorkOrder::setupExecution() {
-    WorkOrder::setupExecution();
-
-    QString itemType;
-    QString filterText =
-        "Please select a file type;; Maps (*.def *.map *.pvl);; Registrations (*.def *.pvl)";
-
-    // If clicked "File"->"Import"->"Import Templates"
-    if (internalData().isEmpty()) {
-      itemType = "Templates";
-    }
-    // If clicked "Import Templates" from under "Maps" or "Registrations" ProjectItems rightclicks
-    else {
-      itemType = internalData().at(0);
-
-      if (itemType == "Maps") {
-        filterText = "Maps (*.def *.map *.pvl)";
-      }
-      else if (itemType == "Registrations") {
-        filterText = "Registrations (*.def *.pvl)";
-      }
-
-      internalData().clear();
-    }
-
-    QString selectedFilter;
-    QStringList templateFileNames = QFileDialog::getOpenFileNames(
-        qobject_cast<QWidget *>(parent()),
-        "Import " + itemType,
-        QString(),
-        filterText,
-        &selectedFilter);
-
-    if (!templateFileNames.isEmpty() && !selectedFilter.isEmpty()) {
-      QUndoCommand::setText(tr("Import %1 Templates").arg(templateFileNames.count()));
-    }
-    else {
-      return false;
-    }
-
-    // The user must choose a filter to import any file. The type is saved in m_lastChosenFileType
-    // Currently, the only options for this will be "maps" and "registrations"
-    m_lastChosenFileType = selectedFilter.remove(QRegularExpression(" \\(.*\\)")).toLower();
-    setInternalData(templateFileNames);
-
-    return true;
-
-
-  }
-
-
-  /**
-   * @brief Imports the templates
-   *
-   * This method copies the template files into the appropriate directory according to the
-   * chosen filter from setupExecution's QFileDialog. If the file already exists in the chosen
-   * directory, it will not be copied over.
-   */
-  void ImportTemplateWorkOrder::execute() {
-    QDir templateFolder = project()->addTemplateFolder(m_lastChosenFileType);
-
-    QStringList templateFileNames = internalData();
-
-    QString newFile;
-    QString notCopied;
-
-    foreach (FileName filename, templateFileNames) {
-      newFile = m_lastChosenFileType + "/" + filename.name();
-
-      // If the file is already in the folder, don't copy it over
-      if ( !templateFolder.exists(filename.name())) {
-        QFile::copy(filename.expanded(), templateFolder.path() + "/" +newFile);
-        m_newFileList.append(FileName(newFile));
-      }
-      else {
-        notCopied += filename.name() + "\n";
-      }
-    }
-
-    // Let the user know if a file already existed in the templates directory and was not copied
-    if (!notCopied.isEmpty()) {
-      QMessageBox::information(
-        qobject_cast<QWidget *>(parent()),
-        "Not all templates were copied",
-        "The following already exist in the " + templateFolder.dirName() +
-        " directory:\n\n" + notCopied
-      );
-    }
-
-    if (!m_newFileList.isEmpty()) {
-     project()->addTemplates(m_newFileList);
-     project()->setClean(false);
-    }
-  }
-
-
-  /**
-   * @brief Deletes the previously imported templates
-   *
-   * This method deletes the templates from both the directory they were copied to
-   * and the ProjectItemModel
-   */
-  void ImportTemplateWorkOrder::undoExecution() {
-    foreach ( FileName filename, m_newFileList) {
-      project()->removeTemplate(filename);
-      QFile::remove(project()->templateRoot() + "/" + filename.toString());
-      ProjectItem *currentItem =
-          project()->directory()->model()->findItemData(QVariant::fromValue(filename.toString()));
-      project()->directory()->model()->removeItem(currentItem);
-    }
-
-    m_newFileList.clear();
-  }
-}
diff --git a/isis/src/qisis/objs/Directory/JigsawWorkOrder.cpp b/isis/src/qisis/objs/Directory/JigsawWorkOrder.cpp
index 2df93cfc6bad805335d84ec652b3046eef2db7fd..f7b909adf4bfa89bd039a456fbddbbb05b1af265 100644
--- a/isis/src/qisis/objs/Directory/JigsawWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/JigsawWorkOrder.cpp
@@ -30,9 +30,10 @@
 #include <QInputDialog>
 #include <QMessageBox>
 
+#include "BundleSolutionInfo.h"
 #include "Control.h"
 #include "Directory.h"
-#include "JigsawDialog.h"
+#include "JigsawRunWidget.h"
 #include "JigsawSetupDialog.h"
 #include "Project.h"
 
@@ -42,11 +43,11 @@ namespace Isis {
    * @brief Constructs a JigsawWorkOrder.
    *
    * This creates a work order to run bundle adjustments. Note that right now,
-   * the design implemented means that this work order finishes after a JigsawDialog
+   * the design implemented means that this work order finishes after a JigsawRunWidget
    * is shown. This work order is synchronous and not undoable. Note is is synchronous
    * in that it simply displays a dialog. The actual bundle adjust is threaded.
    *
-   * @see JigsawDialog
+   * @see JigsawRunWidget
    *
    * @param project The Project that we are going to Bundle Adjust
    *
@@ -91,6 +92,20 @@ namespace Isis {
   }
 
 
+/**
+ * This method is no longer necessary and will remain commented out until it needs to be implemented 
+ *  
+ * If WorkOrder:setupExecution() returns true, this creates a setup dialog.   
+ *    
+ * When the setup is successful (i.e. the user does not cancel the dialog), this work order   
+ * will be read to execute.   
+ *    
+ * @return bool Returns True if setup dialog for the bundle adjustment is successful.   
+ */   
+// bool JigsawWorkOrder::setupExecution() {    
+// }
+
+
   /**
    * This check is used by Directory::supportedActions(DataType data).
    *
@@ -98,43 +113,10 @@ namespace Isis {
    *         is greater than 0.
    */
   bool JigsawWorkOrder::isExecutable() {
-    return (project()->controls().size() > 0 && project()->images().size() > 0);
-  }
-
-
-  /**
-   * If WorkOrder:setupExecution() returns true, this creates a setup dialog.
-   *
-   * When the setup is successful (i.e. the user does not cancel the dialog), this work order
-   * will be read to execute.
-   *
-   * @return bool Returns True if setup dialog for the bundle adjustment is successful.
-   */
-  bool JigsawWorkOrder::setupExecution() {
-    bool success = WorkOrder::setupExecution();
-
-    if (success) {
-      // Create a blocking setup dialog initially and check to make sure we get valid info
-      JigsawSetupDialog setup(project());
-      if (setup.exec() == QDialog::Accepted) {
-        m_bundleSettings = setup.bundleSettings();
-        if (setup.selectedControl()) {
-          setInternalData(QStringList(setup.selectedControl()->id()));
-        }
-        // This else should not happen, the work order should be disabled if there are no controls.
-        else {
-          QString msg = "Cannot run a bundle adjustment without a selected control network.";
-          QMessageBox::critical(qobject_cast<QWidget *>(parent()), "Error", msg);
-          success = false;
-        }
-      }
-      else {
-        success = false;
-      }
-    }
-
-
-    return success;
+    // Is this code ever run?
+    return (project()->controls().size() > 0 && 
+            project()->images().size() > 0 &&
+            !project()->directory()->jigsawRunWidget());
   }
 
 
@@ -159,10 +141,10 @@ namespace Isis {
    * @see WorkOrder::execute()
    */
   void JigsawWorkOrder::execute() {
-    // Get the selected control and bundle settings and give them to the JigsawDialog for now.
-    Control *selectedControl = project()->control(internalData().first());
-    JigsawDialog *runDialog = new JigsawDialog(project(), m_bundleSettings, selectedControl);
-    runDialog->setAttribute(Qt::WA_DeleteOnClose);
-    runDialog->show();
+    JigsawRunWidget *runWidget = project()->directory()->addJigsawRunWidget();
+    if (!runWidget) {
+      QString msg = "Unable to open Jigsaw Run Widget";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
   }
 }
diff --git a/isis/src/qisis/objs/Directory/JigsawWorkOrder.h b/isis/src/qisis/objs/Directory/JigsawWorkOrder.h
index 3d480e8149a1a9ea192ad66f08aef3c8b6387496..84e8845b44fba2b91b0d8025499ba0f230cebbaf 100644
--- a/isis/src/qisis/objs/Directory/JigsawWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/JigsawWorkOrder.h
@@ -47,8 +47,17 @@ namespace Isis {
    *                           active cnet and image list have been set. Fixes #4749.
    *   @history 2017-04-25 Ian Humphrey - Modified tool tip text. Fixes #4819.
    *   @history 2017-07-25 Cole Neubauer - Added project()->setClean call #4969
-   *   @history 2017-07-25 Cole Neubauer - Moved project()->setClean call to JigsawDialog because
-   *                            the workorder does not actually execute the bundle adjustment #4960
+   *   @history 2017-07-25 Cole Neubauer - Moved project()->setClean call to JigsawRunWidget because
+   *                           the workorder does not actually execute the bundle adjustment #4960
+   *   @history 2018-03-22 Ken Edmundson - Modified setupExecution method to append output control
+   *                           network filename to internalData. Modified execute method to look for
+   *                           input control network in BundleSolutionInfos if not found under main
+   *                           part of project tree.
+   *   @history 2018-03-23 Ken Edmundson - In execute method, removed search for input control
+   *                           network in BundleSolutionInfos. No longer needed as control is now
+   *                           properly saved in projects m_idToControlMap.
+   *   @history 2018-05-31 Christopher Combs - Updated to reflect change from JigsawDialog to 
+   *                           JigsawRunWidget. Removed setupExecution() method. Fixes #5428.
    */
   class JigsawWorkOrder : public WorkOrder {
       Q_OBJECT
@@ -60,7 +69,6 @@ namespace Isis {
       virtual JigsawWorkOrder *clone() const;
 
       virtual bool isExecutable();
-      virtual bool setupExecution();
       virtual void execute();
 
     protected:
diff --git a/isis/src/qisis/objs/Directory/MatrixViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/MatrixViewWorkOrder.cpp
index 978b9004638a91b536a9fd94836fe9b56670453a..2c2a6c373a513d772acee24cab7cd069f2cfcb63 100644
--- a/isis/src/qisis/objs/Directory/MatrixViewWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/MatrixViewWorkOrder.cpp
@@ -180,7 +180,7 @@ namespace Isis {
       }
       project()->setClean(false);
     }
-    catch (IException e) {
+    catch (IException &e) {
       m_status = WorkOrderFinished;
       QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
diff --git a/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.cpp b/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.cpp
index 6a30ae2db385107256bfd2fbbc200d31692250c8..15e3d15ffb2ca1da73cdde289ea140c598b908c5 100644
--- a/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.cpp
@@ -26,14 +26,17 @@
 #include <QDebug>
 #include <QFileDialog>
 #include <QMessageBox>
+#include <QStringList>
 #include <QtConcurrentMap>
 
 #include "Cube.h"
 #include "CubeAttribute.h"
+#include "FileName.h"
 #include "SaveProjectWorkOrder.h"
 #include "ProgressBar.h"
 #include "Project.h"
 
+
 namespace Isis {
 
   /**
@@ -45,9 +48,9 @@ namespace Isis {
       WorkOrder(project) {
 
     // This workorder is not undoable
-    m_isUndoable = false;
-
+    m_isUndoable = false;   
     QAction::setText(tr("&Open Project"));
+
     QUndoCommand::setText(tr("Open Project"));
     setCreatesCleanState(true);
 
@@ -62,6 +65,7 @@ namespace Isis {
   }
 
 
+
   /**
    * @brief Copy constructor
    *
@@ -90,6 +94,22 @@ namespace Isis {
   }
 
 
+
+  /**
+   * @brief This function determines if the given project file name can be opened.
+   * @param projectFileName  The path to the project file.
+   * @return @b bool True if the file exists, False otherwise.
+   */
+  bool OpenProjectWorkOrder::isExecutable(QString projectFileName, bool recentProject) {
+
+    m_recentProject = recentProject;
+    FileName fname = projectFileName;
+    if (!fname.fileExists() )
+      return false;
+
+    return true;
+  }
+
   /**
    * @brief Setup this WorkOrder for execution, deleting the progress bar, determine if there
    *              is a current project and if it has been modified and prompting for project
@@ -103,7 +123,7 @@ namespace Isis {
 
     // We dislike the progress bar
     delete progressBar();
-    
+
     if (success && !project()->isClean() && project()->isOpen() ) {
       QMessageBox *box = new QMessageBox(QMessageBox::NoIcon, QString("Current Project Has Unsaved Changes"),
                              QString("Would you like to save your current project?"),
@@ -126,16 +146,23 @@ namespace Isis {
     }
 
     if (success) {
-      m_projectName = QFileDialog::getExistingDirectory(qobject_cast<QWidget *>(parent()),
+      if ("Open Project" == toolTip()) {
+        m_projectPath = QFileDialog::getExistingDirectory(qobject_cast<QWidget *>(parent()),
                                                               tr("Select Project Directory"));
-
-      if (!m_projectName.isEmpty()) {
-        QUndoCommand::setText(tr("Open Project [%1]").arg(m_projectName));
+        if (!m_projectPath.isEmpty()) {
+          QUndoCommand::setText(tr("Open Project [%1]").arg(m_projectPath));
+        }
+        else {
+          success = false;
+        }
       }
       else {
-        success = false;
+        m_projectPath = toolTip();
       }
     }
+    else {
+      success = false;
+    }
 
     return success;
   }
@@ -146,7 +173,15 @@ namespace Isis {
    *
    */
   void OpenProjectWorkOrder::execute() {
-    project()->open(m_projectName);
+    QStringList args = QCoreApplication::arguments();
+    if (args.count() == 2) {
+      project()->open(args.last());
+    }
+    else {     
+      project()->open(m_projectPath);
+    }
+
     project()->setClean(true);
+
   }
 }
diff --git a/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.h b/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.h
index 693b2f7d69844bb24774db501c08fdec3ade8eb1..4f3739a61f4e9966367e9ee64deafba8282462cb 100644
--- a/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/OpenProjectWorkOrder.h
@@ -45,6 +45,13 @@ namespace Isis {
    *                           method.
    *   @history 2017-07-12 Cole Neubauer - In setupExecution added functionallity to open a new
    *                           project while there is a project currently open. Fixes #4969
+   *   @history 2017-09-06 Cole Neubauer - Changed execute so it can be used to open a project
+   *                           from the command line Fixes #5174
+   *   @history 2017-11-09 Tyler Wilson - Made changes to isExecutable() to import functionality
+   *                           needed in OpenRecentProjectWorkOrder into OpenProjectWorkOrder
+   *                           since OpenRecentProjectWorker is being deleted.  Fixes #5220.
+   *   @history 2018-06-14 Makayla Shepherd - Added an else so that when someone cancels the dialog
+   *                           it will cancel properly.
    */
   class OpenProjectWorkOrder : public WorkOrder {
       Q_OBJECT
@@ -55,17 +62,21 @@ namespace Isis {
 
       virtual OpenProjectWorkOrder *clone() const;
 
+
+      bool isExecutable(QString projectFileName, bool recentProject=false);
       bool setupExecution();
       void execute();
+      void setRecent(bool isRecent);
 
     signals:
       void openProjectFromCommandLine(QString);
 
     private:
       OpenProjectWorkOrder &operator=(const OpenProjectWorkOrder &rhs);
+      bool m_recentProject;
 
       bool m_startingState;
-      QString m_projectName;
+      QString m_projectPath;
   };
 }
 
diff --git a/isis/src/qisis/objs/Directory/OpenRecentProjectWorkOrder.cpp b/isis/src/qisis/objs/Directory/OpenRecentProjectWorkOrder.cpp
deleted file mode 100644
index 85448a3648cc14436fb423af67380b4673bb1a91..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/Directory/OpenRecentProjectWorkOrder.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * @file
- * $Revision: 1.19 $
- * $Date: 2010/03/22 19:44:53 $
- *
- *   Unless noted otherwise, the portions of Isis written by the USGS are
- *   public domain. See individual third-party library and package descriptions
- *   for intellectual property information, user agreements, and related
- *   information.
- *
- *   Although Isis has been used by the USGS, no warranty, expressed or
- *   implied, is made by the USGS as to the accuracy and functioning of such
- *   software and related material nor shall the fact of distribution
- *   constitute any such warranty, and no responsibility is assumed by the
- *   USGS in connection therewith.
- *
- *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
- *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
- *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.
- */
-#include "OpenRecentProjectWorkOrder.h"
-
-#include <QCoreApplication>
-#include <QDebug>
-#include <QMessageBox>
-
-#include "FileName.h"
-#include "Project.h"
-
-namespace Isis {
-
-/**
- * @brief Constructor which creates a WorkOrder that will open a recent project.
- * @param project The Project that this work order should be interacting with
- *
- */
-  OpenRecentProjectWorkOrder::OpenRecentProjectWorkOrder(Project *project) :
-  WorkOrder(project) {
-    // Opening a project is currently not undoable.
-    m_isUndoable = false;
-    QAction::setText(tr("Open &Recent Project") );
-    setCreatesCleanState(true);
-  }
-
-
-  /**
-   * @brief Copies the OpenRecentProjectWorkOrder 'other' into this new instance.
-   * @param other The WorkOrder being copied.
-   *
-   */
-  OpenRecentProjectWorkOrder::OpenRecentProjectWorkOrder(const OpenRecentProjectWorkOrder &other) :
-      WorkOrder(other) {
-  }
-
-
-  /**
-   * @brief The Destructor.
-   */
-  OpenRecentProjectWorkOrder::~OpenRecentProjectWorkOrder() {
-
-  }
-
-
-  /**
-   * @brief Returns a copy of this OpenRecentProjectWorkOrder instance.
-   * @return @b ( OpenRecentWorkOrder *) A pointer to a copy of this object.
-   */
-  OpenRecentProjectWorkOrder *OpenRecentProjectWorkOrder::clone() const {
-    return new OpenRecentProjectWorkOrder(*this);
-  }
-
-
-  /**
-   * @brief This function determines if the given project file name can be opened.
-   * @param projectFileName  The path to the project file.
-   * @return @b bool True if the file exists, False otherwise.
-   */
-  bool OpenRecentProjectWorkOrder::isExecutable(QString projectFileName) {
-    FileName fname = projectFileName;
-    if (!fname.fileExists() )
-      return false;
-
-    return true;
-  }
-
-
-  /**
-   * @brief Open the project the user select in the recent projects menu
-   * @return  @b bool True if a project selected, false if aborted.
-   */
-  bool OpenRecentProjectWorkOrder::setupExecution() {
-    bool success = WorkOrder::setupExecution();
-    if (!success) return false;
-
-    // We dislike the progress bar
-    // delete progressBar();
-
-    // If more than this work order is in the history, don't allow this operation
-    if (project()->workOrderHistory().count()) {
-      QMessageBox::critical(NULL, tr("Unable To Open a Project"),
-                            tr("If you have modified your current project, you cannot open a new "
-                               "project because this is not yet implemented"));
-      return false;
-    }
-
-    // The user has already selected a project (QAction) in the menus
-    m_projectName = QAction::text();
-
-    // Will this ever occur?
-    if (m_projectName.isEmpty()) return false;
-
-    QUndoCommand::setText(tr("Open Recent Project [%1]").arg(m_projectName));
-    return true;
-  }
-
-  /**
-  * @brief Open the project specified in the workorder.
-  */
-  void OpenRecentProjectWorkOrder::execute() {
-    project()->open(m_projectName);
-  }
-}
diff --git a/isis/src/qisis/objs/Directory/OpenRecentProjectWorkOrder.h b/isis/src/qisis/objs/Directory/OpenRecentProjectWorkOrder.h
deleted file mode 100644
index aaf50d75bdfa4fe81547391e57080a13078f5126..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/Directory/OpenRecentProjectWorkOrder.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef OpenRecentProjectWorkOrder_H
-#define OpenRecentProjectWorkOrder_H
-/**
- * @file
- * $Revision: 1.19 $
- * $Date: 2010/03/22 19:44:53 $
- *
- *   Unless noted otherwise, the portions of Isis written by the USGS are
- *   public domain. See individual third-party library and package descriptions
- *   for intellectual property information, user agreements, and related
- *   information.
- *
- *   Although Isis has been used by the USGS, no warranty, expressed or
- *   implied, is made by the USGS as to the accuracy and functioning of such
- *   software and related material nor shall the fact of distribution
- *   constitute any such warranty, and no responsibility is assumed by the
- *   USGS in connection therewith.
- *
- *   For additional information, launch
- *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
- *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
- *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
- *   http://www.usgs.gov/privacy.html.
- */
-
-#include "WorkOrder.h"
-
-class QString;
-
-namespace Isis {
-
-
-  /**
-   *  @brief This workOrder opens and displays a recent project.
-   *  If a project is currently open this workorder fails since
-   *  multiple projects are not currently supported.
-   *  This is synchronous and not undoable.
-   *
-   * @author 2014-04-13 Ken Edmundson
-   *
-   *
-   * @internal
-   *   @author 2016-06-06 Tyler Wilson - Added documentation for the functions and
-   *              brought the code into compliance with ISIS3 coding standards.
-   *              References #3944.
-   *   @history 2017-04-16 J Bonn - Updated to new workorder design #4764.
-   */
-
-
-  class OpenRecentProjectWorkOrder : public WorkOrder {
-      Q_OBJECT
-    public:
-      OpenRecentProjectWorkOrder(Project *project);
-      OpenRecentProjectWorkOrder(const OpenRecentProjectWorkOrder &other);
-      ~OpenRecentProjectWorkOrder();
-
-      virtual OpenRecentProjectWorkOrder *clone() const;
-
-      virtual bool isExecutable(QString projectFileName);
-      bool setupExecution();
-      void execute();
-
-    private:
-      OpenRecentProjectWorkOrder &operator=(const OpenRecentProjectWorkOrder &rhs);
-
-      QString m_projectName;
-  };
-}
-
-#endif // OpenRecentProjectWorkOrder_H
diff --git a/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.cpp b/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.cpp
index 28cf82e5c28b6a3d150713ce72fbc7539fdd72f8..96193af7e99e93d8fc024656702e4a1cfd77fddb 100644
--- a/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.cpp
@@ -68,7 +68,7 @@ namespace Isis {
    */
   bool RemoveImagesWorkOrder::isExecutable(ImageList *images) {
 
-    return (images->count() > 0);
+    return true;
   }
 
 
diff --git a/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.h b/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.h
index ee9727f71514a2fd78a8c545a15d195232bcb3dc..291c5e924796ae4478227a68c36c1e0ff59b95a3 100644
--- a/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/RemoveImagesWorkOrder.h
@@ -45,8 +45,13 @@ namespace Isis {
    *                           selected item to be deleted is actually an image list, so that
    *                           each image can be removed one by one. Fixes #5074.
    *   @history 2017-08-11 Cole Neubauer - Removed isUndoable and set parent member variable
-   *                          Fixes #5064
-   *   @history 2017-10-01 Cole Neubauer - Reimplemented remove images count Fixes #4998
+   *                          Fixes #5064.
+   *   @history 2017-10-01 Cole Neubauer - Reimplemented remove images count Fixes #4998.
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check to the images variable in
+   *                           isExecutable to prevent potential seg faults.  References #4492.
+   *   @history 2017-11-13 Summer Stapleton - Changed isExecutable to always return true as there
+   *                           should never be any time that you should not be able to delete an
+   *                           imageList (Import). Fixes #5183
    */
   class RemoveImagesWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.cpp b/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.cpp
index c3d4895ffd178ac4f3bca8d310e7e8b04fe35ece..cfeb7f5d8b142c9bad0d005b942345a99dd41a4c 100644
--- a/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.cpp
@@ -122,6 +122,7 @@ namespace Isis {
     if (!destination.isEmpty()) {
       project()->save(destination);
       project()->open(destination);
+      project()->setClean(true);
     }
   }
 }
diff --git a/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.h b/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.h
index df35e857baae359f855680c56838d5fb4dc6ea65..cce097d98ddfe9ef07e69ef6c7b39df70c7947ec 100644
--- a/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/SaveProjectAsWorkOrder.h
@@ -46,6 +46,9 @@ namespace Isis {
    *   @history 2017-08-08 Cole Neubauer - Removed project()->setClean call because
    *                            project()->open() calls clear() which changes it appropriately,
    *                            added open call in execution to load the newly saved project #5103
+   *   @history 2017-10-20 Cole Neubauer - readded project()->setClean call because
+   *                            project()->open() was changed and this needed to be updated to be
+   *                            recognized as a clean state #5171
    *
    */
   class SaveProjectAsWorkOrder : public WorkOrder {
diff --git a/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.cpp b/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.cpp
index 2b184aa3c0669a5c70c18079269b00882b63196b..13f004ff55083654f0e4d5480bc5347a037d7d44 100644
--- a/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.cpp
@@ -34,6 +34,13 @@
 
 namespace Isis {
 
+  /**
+   * Constructor
+   *
+   * Creates a work order for saving the state of the project.
+   *
+   * @param Project *project Pointer to the project to save.
+   */
   SaveProjectWorkOrder::SaveProjectWorkOrder(Project *project) :
       WorkOrder(project) {
     QAction::setText(tr("&Save Project"));
@@ -43,27 +50,58 @@ namespace Isis {
   }
 
 
+  /**
+   * Copy constrcutor
+   *
+   * Creates a SaveProjectWorkOrder from another one.
+   *
+   * @param const SaveProjectWorkOrder &order The work order to copy from.
+   */
   SaveProjectWorkOrder::SaveProjectWorkOrder(const SaveProjectWorkOrder &other) :
       WorkOrder(other) {
   }
 
 
+  /**
+   * Destructor
+   */
   SaveProjectWorkOrder::~SaveProjectWorkOrder() {
-
   }
 
 
+  /**
+   * Clones an existing SaveProjectWorkder and gives back a newly allocated copy of the work order.
+   *
+   * @return SaveProjectWorkOrder* Returns a newly allocated clone of this work order.
+   */
   SaveProjectWorkOrder *SaveProjectWorkOrder::clone() const {
     return new SaveProjectWorkOrder(*this);
   }
 
 
+  /**
+   * Sets up the work order.
+   *
+   * This will check to see if the Project::save() was completed (i.e. checks if the file
+   * dialog created for a temp project wasn't cancelled by the user). If the Project::save()
+   * was not cancelled, then the project is set to a clean state and this returns true. Otherwise
+   * if the Project::save() is cancelled, the project is still not clean and false is returned
+   * indicated the setup failed.
+   *
+   * @see Project::save()
+   *
+   * @return bool Returns if the setup was successful or not. See description for more details.
+   */
   bool SaveProjectWorkOrder::setupExecution() {
     bool success = WorkOrder::setupExecution();
 
     if (success) {
-      project()->save();
-      project()->setClean(true);
+      // Check to save if the save dialog (for a temp project) completed 
+      // (i.e. it was not cancelled)
+      success = project()->save();
+      if (success) {
+        project()->setClean(true);
+      }
     }
 
     return success;
diff --git a/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.h b/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.h
index 05a3c64e2f84af39e716a3eee23bef64dc7bbe04..67a9a2672cf39b26db7d969b95b68004f04c2657 100644
--- a/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/SaveProjectWorkOrder.h
@@ -40,6 +40,9 @@ namespace Isis {
    *
    * @internal
    *   @history 2017-07-25 Cole Neubauer - Added project()->setClean call #4969
+   *   @history 2017-11-08 Ian Humphrey - Modified setupExecution() to check to see if the 
+   *                           project::save()'s dialog was cancelled or not to properly
+   *                           trigger the clean state of the project. Fixes #5205.
    */
   class SaveProjectWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/Directory/SetActiveControlWorkOrder.cpp b/isis/src/qisis/objs/Directory/SetActiveControlWorkOrder.cpp
index 4fb2833f9e622ba004d1a9e619fdf428d4292646..de1299d7415c28f85d68d4b3a2ef4250c6cf8133 100644
--- a/isis/src/qisis/objs/Directory/SetActiveControlWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/SetActiveControlWorkOrder.cpp
@@ -79,11 +79,15 @@ namespace Isis {
    * @return  @b bool True if  we can set as active, False otherwise.
    */
   bool SetActiveControlWorkOrder::isExecutable(ControlList *controls) {
-    if (controls->size() != 1 || project()->activeControl() == controls->at(0)) {
-      return false;
-    }
 
-    return true;
+    // Return false if more than 1 control was selected or if selected is already active
+    if (controls) {
+      if (controls->size() != 1 || project()->activeControl() == controls->at(0)) {
+        return false;
+      }
+      return true;
+    }
+    return false;
   }
 
 
@@ -125,7 +129,7 @@ namespace Isis {
     try {
       project()->setActiveControl(controlList()->at(0)->displayProperties()->displayName());
     }
-    catch (IException e) {
+    catch (IException &e) {
       m_status = WorkOrderFinished;
       QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
diff --git a/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.cpp b/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.cpp
index a0a17d9aba8e3d2bdd02240d0fd845262f380bff..17c4652ff5e5fcda82f96ddc29c6c2d6828d0506 100644
--- a/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.cpp
@@ -76,6 +76,9 @@ namespace Isis {
    * @return  @b bool True if  we can set as active, False otherwise.
    */
   bool SetActiveImageListWorkOrder::isExecutable(ImageList *imageList) {
+    if (imageList->name() == "") {
+      return false;
+    }
     if (project()->activeImageList()) {
       if (project()->activeImageList()->name() == imageList->name()) {
         return false;
@@ -108,7 +111,7 @@ namespace Isis {
     try {
       project()->setActiveImageList(imageList()->name());
     }
-    catch (IException e) {
+    catch (IException &e) {
       m_status = WorkOrderFinished;
       QMessageBox::critical(NULL, tr("Error"), tr(e.what()));
     }
diff --git a/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.h b/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.h
index 6e2dfaa34eac9e59495aec91b6d40edc6bab86da..fc7b256adcc58fe76e508390f3a6bc05d748a035 100644
--- a/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/SetActiveImageListWorkOrder.h
@@ -45,6 +45,8 @@ namespace Isis {
    *   @history 2017-08-03 Cole Neubauer - Created a try catch around a previously unprotected
    *                           error to handle errors thrown in the workorder that halted
    *                           execution. Fixes #5026
+   *   @history 2017-10-18 Adam Paquette - Added a logical check in the isExecutable function
+   *                           to check for single images vs image lists. Fixes #5138.
    */
 
   class SetActiveImageListWorkOrder : public WorkOrder {
diff --git a/isis/src/qisis/objs/Directory/TemplateEditViewWorkOrder.cpp b/isis/src/qisis/objs/Directory/TemplateEditViewWorkOrder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cac341b492d56843e48f32e7cdcf2d73cd9e7cd7
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/TemplateEditViewWorkOrder.cpp
@@ -0,0 +1,160 @@
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "TemplateEditViewWorkOrder.h"
+
+#include <QFileDialog>
+#include <QInputDialog>
+#include <QtDebug>
+
+#include "Directory.h"
+#include "IException.h"
+#include "Project.h"
+#include "ProjectItem.h"
+#include "Template.h"
+#include "TemplateEditorWidget.h"
+
+namespace Isis {
+
+/**
+   * @brief Creates a WorkOrder that will retrieve Target info.
+   *
+   * Facilitates creating a view for the target information. This work order is not
+   * undoable.
+   *
+   * @param project  The Project that this work order should be interacting with.
+   */
+  TemplateEditViewWorkOrder::TemplateEditViewWorkOrder(Project *project) :
+      WorkOrder(project) {
+    QAction::setText(tr("Edit template...") );
+    QUndoCommand::setText(tr("Edit Template"));
+
+    // This work order is not undoable
+    m_isUndoable = false;
+    m_isSavedToHistory = false;
+  }
+
+
+  /**
+   * @brief Copies the 'other' WorkOrder instance into this new instance.
+   * @param other The WorkOrder being copied.
+   */
+  TemplateEditViewWorkOrder::TemplateEditViewWorkOrder(const TemplateEditViewWorkOrder &other) :
+      WorkOrder(other) {
+  }
+
+
+  /**
+   * @brief The Destructor.
+   */
+  TemplateEditViewWorkOrder::~TemplateEditViewWorkOrder() {
+  }
+
+
+  /**
+   * @brief Returns a copy of this TemplateEditViewWorkOrder instance.
+   * @return @b (TemplateEditViewWorkOrder *) A pointer to a copy of this WorkOrder.
+   */
+  TemplateEditViewWorkOrder *TemplateEditViewWorkOrder::clone() const {
+    return new TemplateEditViewWorkOrder(*this);
+  }
+
+
+  /**
+   * @brief Determines if we can get target info.
+   *
+   * Determines if we already have a view for the target.  If we do, then we
+   * do not need to redisplay the object.
+   *
+   * @param targetBody The target body to check for.
+   *
+   * @return bool Returns true if a view for the target already exists, false otherwise.
+   */
+  bool TemplateEditViewWorkOrder::isExecutable(ProjectItem *projectitem) {
+    if (!projectitem)
+      return false;
+
+    if (projectitem->isTemplate()) {
+
+      Template *currentTemplate = projectitem->getTemplate();
+      // if we already have a view for this target, don't redisplay
+      QList<TemplateEditorWidget *> existingViews = project()->directory()->templateEditorViews();
+      for (int i = 0; i < existingViews.size(); i++) {
+        if (existingViews.at(i)->objectName() == currentTemplate->fileName() )
+          return false;
+      }
+      return true;
+    }
+
+    return false;
+  }
+
+
+  /**
+   * @brief Attempt to retrieve the Target info.
+   *
+   * Attempts to retrieve the target body information to prepare for execution.
+   *
+   * @return bool Returns true if successful, false otherwise.
+   */
+  bool TemplateEditViewWorkOrder::setupExecution() {
+    bool success = WorkOrder::setupExecution();
+
+    if (success) {
+      // This class relies on the parent class, WorkOrder to set m_template with its setData method.
+      // We can retrieve this template for ourselves using getTemplate(), a method of WorkOrder's.
+      QString templateFileName = getTemplate()->fileName();
+      QStringList internalData;
+      internalData.append(templateFileName);
+      setInternalData(internalData);
+    }
+    return success;
+  }
+
+
+  /**
+   * @brief Executes this work order.
+   *
+   * Adds a target info view to the project; i.e., displays the target info widget.
+   */
+  void TemplateEditViewWorkOrder::execute() {
+
+    TemplateEditorWidget *templateEditorWidget =
+        project()->directory()->addTemplateEditorView(getTemplate());
+
+    if (!templateEditorWidget) {
+      QString msg = "error displaying target info";
+      throw IException(IException::Programmer, msg, _FILEINFO_);
+    }
+  }
+
+
+  /**
+   * @brief Determines whether another WorkOrder depends upon TemplateEditViewWorkOrder.
+   * @param other  The WorkOrder being checked for dependency.
+   * @return @b bool  True if there is a dependency, False otherwise.
+   */
+  bool TemplateEditViewWorkOrder::dependsOn(WorkOrder *other) const {
+    // depend on types of ourselves.
+    return dynamic_cast<TemplateEditViewWorkOrder *>(other);
+  }
+}
diff --git a/isis/src/qisis/objs/Directory/TemplateEditViewWorkOrder.h b/isis/src/qisis/objs/Directory/TemplateEditViewWorkOrder.h
new file mode 100644
index 0000000000000000000000000000000000000000..000c1a341aa2b86687cffc30aafcc3e5c40a7d32
--- /dev/null
+++ b/isis/src/qisis/objs/Directory/TemplateEditViewWorkOrder.h
@@ -0,0 +1,62 @@
+#ifndef TemplateEditViewWorkOrder_H
+#define TemplateEditViewWorkOrder_H
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "WorkOrder.h"
+
+namespace Isis {
+  class Template;
+  class ProjectItem;
+
+  /**
+   * @brief This work order allows the user to view and edit a template.
+   *
+   * This is a child of class WorkOrder which is used for anything that performs
+   * an action in a Project.  This work order allows the user to view target body info.
+   *
+   * @author 2015-12-05 Christopher Combs
+   *
+   * @internal
+   *   @history 2017-12-05 Christopher Combs - Original version. Based on TargetGetInfoWorkOrder.
+   */
+  class TemplateEditViewWorkOrder : public WorkOrder {
+      Q_OBJECT
+    public:
+      TemplateEditViewWorkOrder(Project *project);
+      TemplateEditViewWorkOrder(const TemplateEditViewWorkOrder &other);
+      ~TemplateEditViewWorkOrder();
+
+      virtual TemplateEditViewWorkOrder *clone() const;
+
+      virtual bool isExecutable(ProjectItem *projectitem);
+      virtual bool setupExecution();
+      virtual void execute();
+
+    protected:
+      bool dependsOn(WorkOrder *other) const;
+
+    private:
+      TemplateEditViewWorkOrder &operator=(const TemplateEditViewWorkOrder &rhs);
+  };
+}
+#endif
diff --git a/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.cpp b/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.cpp
index 14338a4383df8c2e8a1a8bd321d41e74c53f6057..ce202a19fa056595e5070022bda25f19a1dea2bb 100644
--- a/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.cpp
+++ b/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.cpp
@@ -78,6 +78,8 @@ namespace Isis {
    */
   //tjw 3956
   bool ViewControlNet3DWorkOrder::isExecutable(ControlList *controls) {
+    if (!controls)
+      return false;
     return (controls->count() == 1);
   }
 
diff --git a/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.h b/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.h
index cd93127ad64d11d51a849efe2cdaf7fa8ee9a08c..291c1a50fd50bff364ab75870c409c5784f33362 100644
--- a/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.h
+++ b/isis/src/qisis/objs/Directory/ViewControlNet3DWorkOrder.h
@@ -40,6 +40,9 @@ namespace Isis {
    *   @history 2017-07-24 Cole Neuabuer - Set m_isSavedToHistory to false on construction
    *                           Fixes #4715
    *   @history 2017-07-25 Cole Neubauer - Added project()->setClean call #4969
+   *   @history 2017-11-02 Tyler Wilson - Added a null pointer check on the controls pointer
+   *                           in the isExecutable function to prevent potential seg faults.
+   *                           References #4492.
    */
   class ViewControlNet3DWorkOrder : public WorkOrder {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp b/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp
index 9ca163bb90f7cd1df70e1010eb59accd8a0e37ae..c2034888760c7e9868491722248e7a542cfc06b7 100644
--- a/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp
+++ b/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp
@@ -17,11 +17,8 @@
 #include <QProgressBar>
 #include <QPushButton>
 #include <QSettings>
-#if defined(__APPLE__)
-#include <QtWebEngineWidgets/QWebEngineView>
-#else
-#include <QWebEngineView>
-#endif
+#include <QPainter>
+#include <QUrl>
 
 #include <geos/geom/Coordinate.h>
 #include <geos/geom/CoordinateSequence.h>
@@ -40,7 +37,7 @@
 
 
 namespace Isis {
-  
+
   /**
    * This instantiates a FeatureNomenclatureTool. This will read this tool's
    *   saved settings and potentially automatically enable itself.
@@ -244,7 +241,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Set whether to show approved features and exclude unapproved features.
    *
@@ -262,7 +259,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Set whether to draw vectors from the feature center to the feature extents
    *   on the viewport. This takes effect immediately.
@@ -277,7 +274,7 @@ namespace Isis {
       for (int i = 0; i < m_foundNomenclature->count(); i++) {
         (*m_foundNomenclature)[i].applyExtentType(m_extentType);
       }
-      
+
       nomenclaturePositionsOutdated();
 
       foreach (MdiCubeViewport *vp, *cubeViewportList())
@@ -588,7 +585,7 @@ namespace Isis {
       QProgressDialog updatingFeaturesProgress(
           tr("Projecting Features for [%1]").arg(vp->cube()->fileName().section('/',-1)),
           QString(), 0, 100);
-          
+
       updatingFeaturesProgress.setWindowModality(Qt::WindowModal);
 
       FeatureNomenclature::Feature feature;
@@ -608,7 +605,7 @@ namespace Isis {
           m_findNomenclatureCheckBox->setChecked(false);
           break;
         }
-        
+
         if ( !m_showApprovedOnly ||
             (m_showApprovedOnly && feature.status() == FeatureNomenclature::Approved) ) {
 
@@ -762,7 +759,7 @@ namespace Isis {
         FeatureNomenclature *searcher = new FeatureNomenclature;
         connect(searcher, SIGNAL(featuresIdentified(FeatureNomenclature *)),
                 this, SLOT(featuresIdentified(FeatureNomenclature *)));
-      
+
         (*m_nomenclatureSearchers)[vp] = searcher;
         toolStateChanged();
         (*m_nomenclatureSearchers)[vp]->queryFeatures(target.toUpper(),
@@ -994,7 +991,7 @@ namespace Isis {
     FileName config("$HOME/.Isis/qview/nomenclature.config");
     QSettings settings(
         config.expanded(), QSettings::NativeFormat);
-    
+
     m_fontSize = settings.value("fontSize", m_fontSize).toInt();
     *m_fontColor = settings.value("fontColor", *m_fontColor).value<QColor>();
     m_defaultEnabled =
@@ -1239,7 +1236,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Trade member data with other. This should never throw an exception.
    *
@@ -1497,7 +1494,7 @@ namespace Isis {
     delete m_viewportCubeRange;
     m_viewportCubeRange = NULL;
   }
-  
+
 
   /**
    * Apply the extent type to all of the features for the source viewport.
@@ -1574,7 +1571,7 @@ namespace Isis {
     return positionList;
   }
 
-  
+
   /**
    * Get the viewport associated with this feature display.
    *
@@ -1585,7 +1582,7 @@ namespace Isis {
     return m_sourceViewport;
   }
 
-  
+
   /**
    * Paint features onto the viewport.
    *
@@ -1601,7 +1598,7 @@ namespace Isis {
 
       for (int i = 0; i < m_features->count() &&
                       i < m_featureScreenAreas->count(); i++) {
-        
+
         FeatureNomenclature::Feature feature = (*m_features)[i].feature();
         FeatureDisplayPosition pos = (*m_featureScreenAreas)[i];
         QRect textArea = pos.textArea();
@@ -1662,7 +1659,7 @@ namespace Isis {
                 vectors.append(QLine(newVectorStart, point));
               }
             }
-            
+
             foreach (QLine vector, vectors) {
               painter->drawLine(vector);
 
@@ -1788,12 +1785,12 @@ namespace Isis {
 
     for (int i = 0; i < m_features->count(); i++) {
       FeatureNomenclature::Feature feature = (*m_features)[i].feature();
-      
+
       m_featureScreenAreas->append(FeatureDisplayPosition());
 
       if ( !tool->m_showApprovedOnly ||
             (tool->m_showApprovedOnly && feature.status() == FeatureNomenclature::Approved) ) {
-      
+
         double sample = (*m_features)[i].center().first;
         double line = (*m_features)[i].center().second;
 
@@ -1829,7 +1826,7 @@ namespace Isis {
                                             viewportX, viewportY);
             edgeScreenPoints.append(QPoint(viewportX, viewportY));
           }
-          
+
           if (tool->vectorType() != Box) {
             foreach (QPoint screenPoint, edgeScreenPoints) {
               fullDisplayArea = fullDisplayArea.united(
diff --git a/isis/src/qisis/objs/FileTool/FileTool.cpp b/isis/src/qisis/objs/FileTool/FileTool.cpp
index 6e0388f7ec338d05c72b58fb9883eee1fe62c946..864c3d5498270be3f2dc196e5cec2f255fa10a57 100644
--- a/isis/src/qisis/objs/FileTool/FileTool.cpp
+++ b/isis/src/qisis/objs/FileTool/FileTool.cpp
@@ -160,7 +160,7 @@ namespace Isis {
     activate(true);
   }
 
-  
+
   /**
    * Adds the file tool's actions to the menu
    *
@@ -179,7 +179,7 @@ namespace Isis {
     menu->addAction(p_exit);
   }
 
-  
+
   /**
    * Connects the fileSelected signal to the workspace's addCubeViewport slot
    *
@@ -194,7 +194,7 @@ namespace Isis {
     connect(p_closeAll, SIGNAL(triggered()), ws->mdiArea(), SLOT(closeAllSubWindows()));
   }
 
-  
+
   /**
    * Adds the file tool's actions to the permanent toolbar
    *
@@ -207,7 +207,7 @@ namespace Isis {
     perm->addAction(p_exit);
   }
 
-  
+
   /**
    * This method allows the user to navigate and open a cube with a file dialog.
    *
@@ -228,7 +228,7 @@ namespace Isis {
             p_workSpace, SLOT(addCubeViewport(QString)));
   }
 
-  
+
   /**
    * This method allows the user to navigate and browse cubes with a file dialog .
    *
@@ -248,7 +248,7 @@ namespace Isis {
             p_workSpace, SLOT(addBrowseView(QString)));
   }
 
-  
+
   /**
    * This method saves any changes made to the current cube, these
    * changes are finalized! There is no undoing once a save has
@@ -268,7 +268,7 @@ namespace Isis {
     cubeViewport()->cube()->reopen("rw");
   }
 
-  
+
   /**
    * SaveAs Action - Displays the FileDialog with the filterlist (*.cub) to select
    * the output cube. This dialog additionally displays radio buttons for choices
@@ -305,7 +305,7 @@ namespace Isis {
     p_saveAsDialog->show();
   }
 
-  
+
   /**
    * Save input image as a cube into specified output file as FullImage or
    * ExportAsIs or ExportFullRes option
@@ -396,7 +396,7 @@ namespace Isis {
     p_lastDir = psOutFile;
   }
 
-  
+
   /**
    * For AsIs option, save the enlarged input image visible in the viewport window
    * using the Enlarge functionality
@@ -447,7 +447,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * For AsIs option, save the reduced input image visible in the viewport window
    * using the Reduce functionality
@@ -513,7 +513,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * AsIs option, save the input image visible in the viewport window Enlarged/Reduced
    *
@@ -534,7 +534,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Copy input image details into the output given output images's dimension.
    * Info like instrument, history are transferred to output image
@@ -580,7 +580,9 @@ namespace Isis {
         else if ((ocube->pixelType() != Real) &&
                 (ocube->pixelType() != UnsignedByte) &&
                 (ocube->pixelType() != SignedWord) &&
-                (ocube->pixelType() != UnsignedWord)) {
+                (ocube->pixelType() != UnsignedWord) &&
+                (ocube->pixelType() != Isis::UnsignedInteger) &&
+                (ocube->pixelType() != Isis::SignedInteger)) {
           QString msg = "Looks like your refactoring to add different pixel types";
           msg += " you'll need to make changes here";
           throw IException(IException::Programmer, msg, _FILEINFO_);
@@ -647,7 +649,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * This method essentially creates a new cube, copies the
    * current cube (and any changes made to it) to the new cube,
@@ -684,7 +686,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Full Resolution option, save the input image visible in the viewport window
    * Enlarged/Reduced in full resolution
@@ -737,7 +739,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Saves the whatsthis info of the cubeviewport to
    * user specified output file
@@ -771,7 +773,7 @@ namespace Isis {
     whatsThisPvl.write(output);
   }
 
-  
+
   /**
    * This method copies from the input buffer to the output buffer
    *
@@ -782,7 +784,7 @@ namespace Isis {
     out.Copy(in);
   }
 
-  
+
   /**
    * This slot emits a signal to discard all changes to the
    * current viewport
@@ -792,7 +794,7 @@ namespace Isis {
     emit discardChanges(cubeViewport());
   }
 
-  
+
   /**
    * This method allows the user to export the current view as an image file.
    *
@@ -840,7 +842,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * @brief FileTool::exportToList
    *
@@ -856,10 +858,10 @@ namespace Isis {
       }
 
       // The ViewportMainWindow is the parent container to the FileTool.
-      // We need to grab that object so that we can loop through it's children 
+      // We need to grab that object so that we can loop through it's children
       // To find the active cube viewports.
       ViewportMainWindow* window = dynamic_cast<ViewportMainWindow*>(parent());
-      
+
       if (window == NULL) {
         QMessageBox::critical((QWidget *)parent(), "Error", "There was an error reading the viewport window.");
         return;
@@ -899,7 +901,7 @@ namespace Isis {
       outputFile.close();
   }
 
-  
+
   /**
    * This method allows the user to print the current viewport.
    *
@@ -936,7 +938,7 @@ namespace Isis {
     }
   }
 
-  
+
   /**
    * Try to close all open cubes and save/discard if necessary.
    */
@@ -959,7 +961,7 @@ namespace Isis {
     return true;
   }
 
-  
+
   /**
    * Exit the program, this slot called when the exit is chosen from the File menu
    *
diff --git a/isis/src/qisis/objs/FileTool/FileTool.h b/isis/src/qisis/objs/FileTool/FileTool.h
index 13528862f7228eabcda0e03b162b412a3b8b69cb..e1342ad4234bf8c497055f9a2052c3bff448ad97 100644
--- a/isis/src/qisis/objs/FileTool/FileTool.h
+++ b/isis/src/qisis/objs/FileTool/FileTool.h
@@ -54,7 +54,7 @@ namespace Isis {
    *                           errors and give a more accurate error message.
    *   @history 2017-09-11 Adam Goins - Added the ExportToList menu item to allow all open cubes
    *                           to be exported into a cubelist. References #5097
-   * 
+   *  @history 2018-07-27 Kaitlyn Lee - Added unsigned/signed integer pixel type handling.
    */
   class FileTool : public Tool {
       Q_OBJECT
@@ -136,15 +136,15 @@ namespace Isis {
 
       /**
        * Saves the cube as a full image
-       * 
+       *
        * @param icube The input Cube
        * @param ocube The output Cube
        */
       void saveAsFullImage(Cube *icube, Cube *ocube);
 
       /** Copy input cube details into output file given its dimensions
-       * 
-       * 
+       *
+       *
        * @param psOutFile The psFileName
        * @param icube The input cube
        * @param ocube The output cube
@@ -156,14 +156,14 @@ namespace Isis {
            Cube *ocube, int piNumSamples, int piNumLines, int piNumBands);
 
       /** Save image AsIs (As viewed in the viewport window) into output file
-       * 
+       *
        * @param icube The input Cube
        * @param psOutFile The output file
        */
       void saveAs_AsIs(Cube *icube, const QString & psOutFile);
 
       /** Save image Full Resolution (image viewed in the viewport window) into output
-       * 
+       *
        * @param pInCube The input cube.
        * @param pOutCube The output cube.
        * @param pNumSamples The number of samples
@@ -173,16 +173,16 @@ namespace Isis {
                                  int pNumSamples, int pNumLines);
 
       /** Save image AsIs Enlarged into output
-       * 
+       *
        * @param icube The input cube
-       * @param psOutFile The output file 
+       * @param psOutFile The output file
        */
       void saveAsEnlargedCube(Cube *icube, const QString & psOutFile);
 
       /**
-       * 
+       *
        * @param icube The input cube
-       * @param psOutFile The output file 
+       * @param psOutFile The output file
        */
       void saveAsReducedCube (Cube *icube, const QString & psOutFile);
   };
diff --git a/isis/src/qisis/objs/Footprint2DView/Footprint2DView.cpp b/isis/src/qisis/objs/Footprint2DView/Footprint2DView.cpp
index c7d7ed814e0d869b4de0647390bd639381820093..be208f6e6e6d1086f70fbfbc12592a1b5a4dfdcd 100644
--- a/isis/src/qisis/objs/Footprint2DView/Footprint2DView.cpp
+++ b/isis/src/qisis/objs/Footprint2DView/Footprint2DView.cpp
@@ -41,23 +41,29 @@
 #include <QVBoxLayout>
 #include <QWidget>
 #include <QWidgetAction>
+#include <QXmlStreamWriter>
 
+#include "ControlNetTool.h"
 #include "ControlPoint.h"
 #include "Cube.h"
+#include "Directory.h"
 #include "Image.h"
 #include "ImageFileListWidget.h"
 #include "MosaicGraphicsView.h"
 #include "MosaicSceneWidget.h"
+#include "MosaicControlNetTool.h"
+#include "Project.h"
 #include "ProjectItem.h"
 #include "ProjectItemModel.h"
 #include "Shape.h"
 #include "ToolPad.h"
+#include "XmlStackedHandlerReader.h"
 
 namespace Isis {
   /**
    * Constructor.
    *
-   * @param parent Pointer to parent QWidget
+   * @param parent (QMainWindow *) Pointer to parent QMainWindow
    */
   Footprint2DView::Footprint2DView(Directory *directory, QWidget *parent) :
                       AbstractProjectItemView(parent) {
@@ -72,11 +78,13 @@ namespace Isis {
 
     connect( internalModel(), SIGNAL( itemAdded(ProjectItem *) ),
              this, SLOT( onItemAdded(ProjectItem *) ) );
+    connect( internalModel(), SIGNAL( itemsAdded() ),
+             this, SLOT( onItemsAdded() ) );
     connect( internalModel(), SIGNAL( itemRemoved(ProjectItem *) ),
              this, SLOT( onItemRemoved(ProjectItem *) ) );
 
-    connect(m_sceneWidget, SIGNAL(queueSelectionChanged() ),
-            this, SLOT(onQueueSelectionChanged() ) );
+    connect(m_sceneWidget, SIGNAL(queueSelectionChanged()),
+            this, SLOT(onQueueSelectionChanged()), Qt::QueuedConnection);
 
     //  Pass on Signals emitted from ControlNetTool, through the MosaicSceneWidget
     //  TODO 2016-09-09 TLS Design:  Use a proxy model instead of signals?
@@ -88,24 +96,24 @@ namespace Isis {
 
     connect(m_sceneWidget, SIGNAL(createControlPoint(double, double)),
             this, SIGNAL(createControlPoint(double, double)));
-    
-    connect(m_sceneWidget, SIGNAL(mosCubeClosed(Image *)), 
+
+    connect(m_sceneWidget, SIGNAL(mosCubeClosed(Image *)),
             this, SLOT(onMosItemRemoved(Image *)));
 
     //  Pass on redrawMeasure signal from Directory, so the control measures are redrawn on all
-    //  the footprints.
+    //  the footprints. Connection made in Directory from directory's signal to this signal since
+    //  Directory doesn't have access to the scene within the sceneWidget.
     connect(this, SIGNAL(redrawMeasures()), m_sceneWidget->getScene(), SLOT(update()));
 
-    QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom);
-    QHBoxLayout *viewlayout = new QHBoxLayout();
-
-    layout->addWidget(statusBar);
+    setStatusBar(statusBar);
 
     m_fileListWidget = new ImageFileListWidget(directory);
 
     m_fileListWidget->setWindowTitle( tr("File List")  );
     m_fileListWidget->setObjectName( m_fileListWidget->windowTitle() );
 
+    m_directory = directory;
+
     QDockWidget *imageFileListdock = new QDockWidget( m_fileListWidget->windowTitle() );
     imageFileListdock->setObjectName(imageFileListdock->windowTitle());
     imageFileListdock->setFeatures( QDockWidget::DockWidgetFloatable |
@@ -115,51 +123,38 @@ namespace Isis {
 
     imageFileListdock->setWidget(m_fileListWidget);
 
-    m_window = new QMainWindow();
-    m_window->addDockWidget(Qt::LeftDockWidgetArea, imageFileListdock, Qt::Vertical);
-    m_window->setCentralWidget(m_sceneWidget);
-    viewlayout->addWidget(m_window);
-    layout->addLayout(viewlayout);
+    addDockWidget(Qt::LeftDockWidgetArea, imageFileListdock, Qt::Vertical);
+    setCentralWidget(m_sceneWidget);
 
-    setLayout(layout);
-
-    m_permToolBar = new QToolBar("Standard Tools", 0);
+    m_permToolBar = addToolBar("Standard Tools");
     m_permToolBar->setObjectName("permToolBar");
     m_permToolBar->setIconSize(QSize(22, 22));
-    //toolBarLayout->addWidget(m_permToolBar);
 
-    m_activeToolBar = new QToolBar("Active Tool", 0);
+    m_activeToolBar = addToolBar("Active Tool");
     m_activeToolBar->setObjectName("activeToolBar");
     m_activeToolBar->setIconSize(QSize(22, 22));
-    //toolBarLayout->addWidget(m_activeToolBar);
 
     m_toolPad = new ToolPad("Tool Pad", 0);
     m_toolPad->setObjectName("toolPad");
-    //toolBarLayout->addWidget(m_toolPad);
-
+    addToolBar(Qt::RightToolBarArea, m_toolPad);
 
     m_sceneWidget->addToPermanent(m_permToolBar);
     m_sceneWidget->addTo(m_activeToolBar);
     m_sceneWidget->addTo(m_toolPad);
 
-    m_activeToolBarAction = new QWidgetAction(this);
-    m_activeToolBarAction->setDefaultWidget(m_activeToolBar);
-
-    setAcceptDrops(true);
-
-    QSizePolicy policy = sizePolicy();
-    policy.setHorizontalPolicy(QSizePolicy::Expanding);
-    policy.setVerticalPolicy(QSizePolicy::Expanding);
-    setSizePolicy(policy);
+    // Store the actions for easy enable/disable.
+    foreach (QAction *action, findChildren<QAction *>()) {
+      addAction(action);
+    }
+    // On default, actions are disabled until the cursor enters the view.
+    disableActions();
   }
 
-
   /**
    * Destructor
    */
   Footprint2DView::~Footprint2DView() {
     delete m_fileListWidget;
-    delete m_window;
     delete m_permToolBar;
     delete m_activeToolBar;
     delete m_toolPad;
@@ -171,19 +166,18 @@ namespace Isis {
 
 
   /**
-   * Returns the suggested size for the widget.
-   *
-   * @return @b QSize The size
+   * Accessor for the MosaicSceneWidget
    */
-  QSize Footprint2DView::sizeHint() const {
-    return QSize(800, 600);
+  MosaicSceneWidget *Footprint2DView::mosaicSceneWidget() {
+    return m_sceneWidget;
   }
 
+
   /**
-   * Accessor for the MosaicSceneWidget
+   * Accessor for the FileListWidget
    */
-  MosaicSceneWidget *Footprint2DView::mosaicSceneWidget() {
-    return m_sceneWidget;
+  ImageFileListWidget *Footprint2DView::fileListWidget() {
+    return m_fileListWidget;
   }
 
 
@@ -214,8 +208,10 @@ namespace Isis {
 
 
   /**
-   * Slot to connect to the itemAdded signal from the model. If the
-   * item is an image it adds it to the scene.
+   * Slot to connect to the itemAdded signal from the model. If the item is an image or shape it is 
+   * added to a list. When everything has been added, then the list is added to the scene through 
+   * signal/slot connection from ProjectItemProxyModel signal, itemsAdded which is connected to 
+   * this objects onItemsAdded slot. 
    *
    * @param[in] item (ProjectItem *) The item
    */
@@ -223,33 +219,41 @@ namespace Isis {
     if (!item || (!item->isImage() && !item->isShape())) {
       return;
     }
-    //TODO 2016-09-09 TLS  Handle Shapes-Create image from shape since qmos only handles images?
-    //                   Still don't know if shape should inherit from image or contain an image?
-    //
+
     Image *image;
-    ImageList images;
     if (item->isShape()) {
-      //TEMPORARY UNTIL SHAPE IS FIXED TO HOLD IMAGE, once Shape holds image go back to old code
-      // previous to 10-21-16
-      image = new Image(item->shape()->cube());
+      image = new Image(item->shape()->cube(), item->shape()->footprint(), item->shape()->id());
     }
     else if (item->isImage()) {
       image = item->image();
     }
-    images.append(image);
-    m_sceneWidget->addImages(images);
-    m_fileListWidget->addImages(&images);
+
+    m_images.append(image);
 
     if (!m_imageItemMap.value(image)) {
       m_imageItemMap.insert(image, item);
     }
   }
 
-  
+
+  /**
+   * Slot called once all selected images have been added to the proxy model.  This is much faster 
+   * than adding a single image at a time to the MosaicSceneWidget. This is connected from the 
+   * ProjectItemProxyModel::itemsAdded signal. 
+   *
+   */
+  void Footprint2DView::onItemsAdded() {
+    //  This is called once all selected images have been added to proxy model (internalModel())
+    //  This is much faster than adding a single image at a time to the scene widget
+    m_sceneWidget->addImages(m_images);
+    m_fileListWidget->addImages(&m_images);
+  }
+
+
   /**
-   * Slot at removes the mosaic item and corresponding image file list item when a cube is closed 
+   * Slot at removes the mosaic item and corresponding image file list item when a cube is closed
    * using the Close Cube context menu.
-   * 
+   *
    * @param image The image that was closed and needs to be removed
    */
   void Footprint2DView::onMosItemRemoved(Image *image) {
@@ -265,7 +269,7 @@ namespace Isis {
       }
     }
   }
-  
+
 
   /**
    * Slot to connect to the itemRemoved signal from the model. If the item is an image it removes it
@@ -322,33 +326,122 @@ namespace Isis {
 
 
   /**
-   * Returns a list of actions for the permanent tool bar.
+   * A slot function that is called when directory emits a siganl that an active
+   * control network is set. It enables the control network editor tool in the toolpad.
    *
-   * @return @b QList<QAction*> The actions
+   * @param value The boolean that holds if a control network has been set.
    */
-  QList<QAction *> Footprint2DView::permToolBarActions() {
-    return m_permToolBar->actions();
+  void Footprint2DView::enableControlNetTool(bool value) {
+    foreach (QAction *action, m_toolPad->actions()) {
+      if (action->toolTip() == "Control Net (c)") {
+        action->setEnabled(value);
+        if (value) {
+          MosaicControlNetTool *cnetTool = static_cast<MosaicControlNetTool *>(action->parent());
+          cnetTool->loadNetwork();
+        }
+      }
+    }
   }
 
 
   /**
-   * Returns a list of actions for the active tool bar.
+   * Enables toolbars and toolpad actions. Overriden method.
+   * If an active control network has not been set, do not enable the cnet tool.
+   */
+  void Footprint2DView::enableActions() {
+    foreach (QAction *action, actions()) {
+      if (action->toolTip() == "Control Net (c)" && !m_directory->project()->activeControl()) {
+        continue;
+      }
+      action->setEnabled(true);
+    }
+  }
+
+
+  /**
+   * @brief Loads the Footprint2DView from an XML file.
+   * @param xmlReader  The reader that takes in and parses the XML file.
+   */
+  void Footprint2DView::load(XmlStackedHandlerReader *xmlReader) {
+    xmlReader->pushContentHandler( new XmlHandler(this) );
+  }
+
+
+  /**
+   * @brief Save the footprint view widgets (ImageFileListWidget and MosaicSceneWidget to an XML
+   *        file.
+   * @param stream  The XML stream writer
+   * @param newProjectRoot The FileName of the project this Directory is attached to.
    *
-   * @return @b QList<QAction*> The actions
+   * @internal
+   *   @history 2016-11-07 Ian Humphrey - Restored saving of footprints (footprint2view).
+   *                           References #4486.
+   */
+  void Footprint2DView::save(QXmlStreamWriter &stream, Project *project,
+                             FileName newProjectRoot) const {
+
+    stream.writeStartElement("footprint2DView");
+    stream.writeAttribute("objectName", objectName());
+
+    m_fileListWidget->save(stream, project, newProjectRoot);
+    m_sceneWidget->save(stream, project, newProjectRoot);
+
+    stream.writeEndElement();
+  }
+
+
+  /**
+   * @brief This function sets the Directory pointer for the Directory::XmlHandler class
+   * @param directory The new directory we are setting XmlHandler's member variable to.
+   */
+  Footprint2DView::XmlHandler::XmlHandler(Footprint2DView *footprintView) {
+
+    m_footprintView = footprintView;
+  }
+
+
+  /**
+   * @brief The Destructor for Directory::XmlHandler
    */
-  QList<QAction *> Footprint2DView::activeToolBarActions() {
-    QList<QAction *> actions;
-    actions.append(m_activeToolBarAction);
-    return actions;
+  Footprint2DView::XmlHandler::~XmlHandler() {
   }
 
 
   /**
-   * Returns a list of actions for the tool pad.
+   * @brief The XML reader invokes this method at the start of every element in the
+   * XML document.  This method expects <footprint2DView/> and <imageFileList/>
+   * elements.
+   * A quick example using this function:
+   *     startElement("xsl","stylesheet","xsl:stylesheet",attributes)
+   *
+   * @param namespaceURI The Uniform Resource Identifier of the element's namespace
+   * @param localName The local name string
+   * @param qName The XML qualified string (or empty, if QNames are not available).
+   * @param atts The XML attributes attached to each element
+   * @return @b bool  Returns True signalling to the reader the start of a valid XML element.  If
+   * False is returned, something bad happened.
    *
-   * @return @b QList<QAction*> The actions
    */
-  QList<QAction *> Footprint2DView::toolPadActions() {
-    return m_toolPad->actions();
+  bool Footprint2DView::XmlHandler::startElement(const QString &namespaceURI, const QString &localName,
+                                           const QString &qName, const QXmlAttributes &atts) {
+    bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
+
+    if (result) {
+      if (localName == "mosaicScene") {
+        m_footprintView->mosaicSceneWidget()->load(reader());
+      }
+      if (localName == "imageFileList") {
+        m_footprintView->m_fileListWidget->load(reader());
+      }
+    }
+    return result;
+  }
+
+
+  bool Footprint2DView::XmlHandler::endElement(const QString &namespaceURI,
+      const QString &localName, const QString &qName) {
+    bool result = XmlStackedHandler::endElement(namespaceURI, localName, qName);
+
+    return result;
   }
 }
diff --git a/isis/src/qisis/objs/Footprint2DView/Footprint2DView.h b/isis/src/qisis/objs/Footprint2DView/Footprint2DView.h
index d3a7a4e3942095111522e9a5761dd43bb60376d0..f73769cdbb7a2e97d77d3cb4f8184ae6a82a6ad1 100644
--- a/isis/src/qisis/objs/Footprint2DView/Footprint2DView.h
+++ b/isis/src/qisis/objs/Footprint2DView/Footprint2DView.h
@@ -27,12 +27,16 @@
 #include <QSize>
 
 #include "AbstractProjectItemView.h"
+#include "FileName.h"
+#include "ImageList.h"
+#include "XmlStackedHandler.h"
 
 class QAction;
 class QEvent;
 class QMainWindow;
 class QToolBar;
 class QWidgetAction;
+class QXmlStreamWriter;
 
 namespace Isis {
 
@@ -41,7 +45,9 @@ namespace Isis {
   class Image;
   class ImageFileListWidget;
   class MosaicSceneWidget;
+  class Project;
   class ToolPad;
+  class XmlStackedHandlerReader;
 
   /**
    * View for displaying footprints of images in a QMos like way.
@@ -64,6 +70,47 @@ namespace Isis {
    *                           footprint. Fixes #5050.
    *   @history 2017-08-02 Tracie Sucharski - Fixed connections between views for control point
    *                           editing.  Fixes #5007, #5008.
+   *   @history 2018-05-14 Tracie Sucharski - Serialize Footprint2DView rather than
+   *                           MosaicSceneWidget. This will allow all parts of Footprint2DView to be
+   *                           saved/restored including the ImageFileListWidget. Fixes #5422.
+   *   @history 2018-05-30 Summer Stapleton - updated the view to remove QMainWindow constructor,
+   *                           include a central widget and to remove layout capacity. This change
+   *                           was made to adjust to parent class now inheriting from QMainWindow
+   *                           instead of QWidget. References #5433.
+   *   @history 2018-06-08 Tracie Sucharski - Remove deletion of m_window from destructor. This
+   *                           member variable no longer exists.
+   *   @history 2018-06-13 Kaitlyn Lee - Since views now inherit from QMainWindow, each individual
+   *                           view has its own toolbar, so having getters that return toolbar
+   *                           actions to fill the toolbar of the IpceMainWindow are unnecessary.
+   *                           Removed methods that returned menu and toolbar actions.
+   *                           Added enableControlNetTool(bool) so when an active control net is set,
+   *                           the tool becomes enabled.
+   *  @history 2018-06-25 Kaitlyn Lee - When multiple views are open, there is a possibility of
+   *                           getting ambiguous shortcut errors. To counter this, we enable/disable
+   *                           actions. On default, actions are disabled until a user moves the
+   *                           cursor over the view. When a user moves the cursor outside of the
+   *                           view, the actions are disabled.
+   *   @history 2018-07-09 Tracie Sucharski - Serialize the objectName for this view so that the
+   *                           view can be re-created with the same objectName for restoring the
+   *                           project state. Qt's save/restoreState use the objectName. Remove
+   *                           sizeHint method which is now taken care of in the parent class,
+   *                           AbstractProjectItemView.
+   *   @history 2018-07-12 Tracie Sucharski - Renamed m_controlNetTool to m_controlNetToolAction
+   *                           to be clear it is not a pointer to the tool.  Add a call to
+   *                           the MosaicControlNetTool::loadNetwork in enableControlNetTool.
+   *   @history 2018-07-31 Tracie Sucharski - Add accessor method for ImageFileListWidget.
+   *   @history 2018-08-10 Tracie Sucharski - Added new slot connected from ProjectItemProxyModel's
+   *                           itemsAdded signal which is emitted after all selected items have
+   *                           been added to the proxy model.  The images are added to a new private
+   *                           member as each item is added to the model through the slot,
+   *                           onItemAdded. This allows the FootprintView to put all selected items
+   *                           into the scene widget at once rather than individually which speeds
+   *                           the display of footprints. Fixes #5296.
+   *   @history 2018-10-04 Tracie Sucharski - If adding Shape to footprint view, call Image new
+   *                           Image constructor which takes a footprint and id, so that the
+   *                           MosaicSceneWidget can properly serialize Shapes that have been added.
+   *                           Fixes #5495.
+   *  
    */
   class Footprint2DView : public AbstractProjectItemView {
 
@@ -74,11 +121,10 @@ namespace Isis {
       ~Footprint2DView();
 
       MosaicSceneWidget *mosaicSceneWidget();
-      virtual QList<QAction *> permToolBarActions();
-      virtual QList<QAction *> activeToolBarActions();
-      virtual QList<QAction *> toolPadActions();
+      ImageFileListWidget *fileListWidget();
 
-      QSize sizeHint() const;
+      void load(XmlStackedHandlerReader *xmlReader);
+      void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) const;
 
     signals:
       void modifyControlPoint(ControlPoint *controlPoint);
@@ -88,26 +134,54 @@ namespace Isis {
       void redrawMeasures();
       void controlPointAdded(QString newPointId);
 
+    public slots:
+      void enableControlNetTool(bool value);
+
     protected:
       bool eventFilter(QObject *watched, QEvent *event);
 
     private slots:
       void onItemAdded(ProjectItem *item);
+      void onItemsAdded();
       void onItemRemoved(ProjectItem *item);
       void onQueueSelectionChanged();
       void onMosItemRemoved(Image *image);
 
+    private:
+      void enableActions();
+
+      /**
+       * @author 2018-05-11 Tracie Sucharski
+       *
+       * @internal
+       */
+      class XmlHandler : public XmlStackedHandler {
+        public:
+          XmlHandler(Footprint2DView *footprintView);
+          ~XmlHandler();
+
+          virtual bool startElement(const QString &namespaceURI, const QString &localName,
+                                    const QString &qName, const QXmlAttributes &atts);
+          virtual bool endElement(const QString &namespaceURI, const QString &localName,
+                                  const QString &qName);
+
+        private:
+          Q_DISABLE_COPY(XmlHandler);
+
+          Footprint2DView *m_footprintView;      //!< The Footprint2DView
+      };
+
     private:
       MosaicSceneWidget *m_sceneWidget; //!< The scene widget
       ImageFileListWidget *m_fileListWidget; //!< The file list widget
       QMainWindow *m_window; //!< Main window
+      ImageList m_images;
       QMap<Image *, ProjectItem *> m_imageItemMap; //!< Maps images to their items
+      Directory *m_directory; //!< The directory
 
       QToolBar *m_permToolBar; //!< The permanent tool bar
       QToolBar *m_activeToolBar; //!< The active tool bar
       ToolPad *m_toolPad; //!< The tool pad
-
-      QWidgetAction *m_activeToolBarAction; //!< Stores the active tool bar
   };
 }
 
diff --git a/isis/src/qisis/objs/GuiCamera/GuiCamera.cpp b/isis/src/qisis/objs/GuiCamera/GuiCamera.cpp
index 7e7417bc3d23d8833982016498c95472808b62d8..80b24b7c7877b8ef9b4933e3daf76bed2ef6c638 100644
--- a/isis/src/qisis/objs/GuiCamera/GuiCamera.cpp
+++ b/isis/src/qisis/objs/GuiCamera/GuiCamera.cpp
@@ -33,6 +33,8 @@ namespace Isis {
 //    m_radii[1] = target->radii().at(1);
 //    m_radii[2] = target->radii().at(2);
 
+    m_instrumentId = camera->instrumentId();
+
     m_spacecraftNameShort = camera->spacecraftNameShort();
     m_spacecraftNameLong = camera->spacecraftNameLong();
     m_instrumentNameShort = camera->instrumentNameShort();
@@ -296,6 +298,16 @@ namespace Isis {
   QString GuiCamera::id() const {
     return m_id->toString().remove(QRegExp("[{}]"));
   }
+  
+  
+  /**
+   * @brief Retrieve the InstrumentId as appears in the original cube label.
+   * @return @b QString Returns m_instrumentId
+   */
+  QString GuiCamera::instrumentId() {
+    return m_instrumentId;
+  }
+  
 
   /**
    * @brief Retrieves an abbreviated version for the name of the instrument.
@@ -305,6 +317,7 @@ namespace Isis {
     return m_instrumentNameShort;
   }
 
+
   /**
    * @brief Retrieves a long version for the name of the instrument.
    * @return @b QString Returns m_instrumentNameLong.
@@ -313,6 +326,7 @@ namespace Isis {
     return m_instrumentNameLong;
   }
 
+
   /**
    * @brief Retrieves an abbbreviated name for the spacecraft.
    * @return @b QString Returns m_spacecraftNameShort.
@@ -321,6 +335,7 @@ namespace Isis {
     return m_spacecraftNameShort;
   }
 
+
   /**
    * @brief Retrieves the full name of the spacecraft.
    * @return @b QString Returns m_spacecraftNameLong.
diff --git a/isis/src/qisis/objs/GuiCamera/GuiCamera.h b/isis/src/qisis/objs/GuiCamera/GuiCamera.h
index 3ea7d26cb8e6f864120643e2d909439b6ce1ee63..57df7f7c2c75ff77bebf30fb616180208ba66511 100644
--- a/isis/src/qisis/objs/GuiCamera/GuiCamera.h
+++ b/isis/src/qisis/objs/GuiCamera/GuiCamera.h
@@ -64,7 +64,9 @@ namespace Isis {
    *                           metatype for use with QVariant.
    *   @history 2016-06-08 Tyler Wilson - Added documentation to some functions
    *                           and corrected the formatting.  Fixes #3997.
-   *
+   *   @hitsory 2018-07-12 Summer Stapleton - Added m_instrumentId and instrumentId() in order to 
+   *                           collect the InstrumentId from the original cube label for 
+   *                           comparisons related to image imports in ipce. References #5460.
    *  
    */
   class GuiCamera : public QObject {
@@ -82,7 +84,7 @@ namespace Isis {
 
       QString id() const;
 
-//    Camera *camera();
+      QString instrumentId();
 
       QString instrumentNameShort();
       QString instrumentNameLong();
@@ -163,17 +165,14 @@ namespace Isis {
        */
       GuiCameraDisplayProperties *m_displayProperties;
       
-      
+      QString m_instrumentId;        //!< The InstrumentId as it appears on the cube.
 
       QString m_spacecraftNameShort; //!< An abbreviated name for the spacecraft.
 
-
       QString m_spacecraftNameLong; //!< The full spacecraft name
 
-
       QString m_instrumentNameShort; //!< The abbreviated instrument name
 
-
       QString m_instrumentNameLong; //!< The full instrument name
   };
 
diff --git a/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.cpp b/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.cpp
index ca4040a11a6f8750be00b4a41add9fa30b4cc25c..ff79f6581ec09ed923ee7c84a67874d90d69ec55 100644
--- a/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.cpp
+++ b/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.cpp
@@ -150,13 +150,50 @@ namespace Isis {
       //include those that do not need it.
 
       if(workOrder->progressBar() )  {
-        this->setItemWidget(newItem, 1, new ProgressBar );
+        this->setItemWidget(newItem, 1, workOrder->progressBar() );
       }
       scrollToItem(newItem);
       refit();
   }
 
 
+  /**
+   * Add a non-workorder history to the display.
+   *
+   * @param (QString) historyEntry The string displayed in the history tree
+   */
+  void HistoryTreeWidget::addToHistory(QString historyEntry) {
+
+    QString data = historyEntry;
+
+    QStringList columnData;
+    columnData.append(data);
+
+    QTreeWidgetItem *newItem = new QTreeWidgetItem(columnData);
+
+
+    // Do font for progress text
+    QFont progressFont = newItem->font(1);
+    progressFont.setItalic(true);
+    newItem->setFont(1, progressFont);
+    newItem->setForeground(1, Qt::gray);
+
+    this->insertTopLevelItem(0, newItem);
+//      invisibleRootItem()->addChild(newItem);
+
+    //Sometimes the pointer returned by this call is 0 (hence the check).
+    //So we are not creating a progress bar for every work order which would
+    //include those that do not need it.
+
+//    if(workOrder->progressBar() )  {
+//      setItemWidget(newItem, 1, new ProgressBar);
+////        this->setItemWidget(newItem, 1, workOrder->progressBar() );
+//    }
+    scrollToItem(newItem);
+    refit();
+  }
+
+
   /**
    * We need to manually manage these progress widgets because QTreeWidget does a poor job of it.
    *   This should be called when the progress bar instances have changed (new progress, lost a
diff --git a/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.h b/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.h
index 78faf99bc08591c24f78714eb34f8afa1b0dfce0..2d8d8f9f2972ceaac3475ce4cd7df65185a144c1 100644
--- a/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.h
+++ b/isis/src/qisis/objs/HistoryTreeWidget/HistoryTreeWidget.h
@@ -37,6 +37,15 @@ namespace Isis {
    *                            addresses the immediate problem, but will have to be tackled
    *                            in a future ticket.  Fixes #5096.  References #4492.
    *   @history 2017-08-11 Cole Neubauer - Added some checks to avoid segfaults Fixes #5064
+   *   @history 2017-11-08 Tyler Wilson - Reverted the code change in #5096 to restore the 
+   *                            ProgressBar, and changed code in OpenRecentProjectsWorkOrder.cpp
+   *                            to prevent the segfault which #5096 was addressing.  Fixes #5149.
+   *   @history 2018-04-07 Tracie Sucharski - Added method to force a history entry using a string
+   *                            rather than a WorkOrder.  This should be a temporary method until
+   *                            saving a control is turned into a WorkOrder.  This was done for the
+   *                            alpha release simply to notify the user that the control was saved.
+   *                            However, this history entry is not saved/restored to a project.
+   *   @history 2018-06-28 Makayla Shepherd - Restored the ProgressBar. Fixes #5228.
    */
   class HistoryTreeWidget : public QTreeWidget {
       Q_OBJECT
@@ -44,6 +53,8 @@ namespace Isis {
       HistoryTreeWidget(Project *project, QWidget *parent = 0);
       virtual ~HistoryTreeWidget();
 
+      void addToHistory(QString historyEntry);
+
     protected:
       int sizeHintForColumn(int column) const;
 
diff --git a/isis/src/qisis/objs/Image/Image.cpp b/isis/src/qisis/objs/Image/Image.cpp
index 8e78b5bbf04e51bd21082b7390e7cc45404d26a4..88bf9bee536266420a5486689b4ea52d7dada856 100644
--- a/isis/src/qisis/objs/Image/Image.cpp
+++ b/isis/src/qisis/objs/Image/Image.cpp
@@ -2,6 +2,7 @@
 
 #include <QBuffer>
 #include <QDataStream>
+#include <QDebug>
 #include <QDir>
 #include <QFileInfo>
 #include <QMutexLocker>
@@ -23,6 +24,7 @@
 #include "ImageDisplayProperties.h"
 #include "ImagePolygon.h"
 #include "IString.h"
+#include "ObservationNumber.h"
 #include "PolygonTools.h"
 #include "Project.h"
 #include "SerialNumber.h"
@@ -100,6 +102,36 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Create an image from a cube file on disk including the footprint
+   * @param imageFileName The name of a cube on disk - /work/users/.../blah.cub 
+   * @param footprint The calculated footprint
+   * @param parent The Qt-relationship parent
+   */
+  Image::Image(Cube *imageCube, geos::geom::MultiPolygon *footprint, QString id, QObject *parent) :
+      QObject(parent) {
+    m_fileName = imageCube->fileName();
+
+    m_bodyCode = NULL;
+    m_cube = imageCube;
+    m_displayProperties = NULL;
+    m_id = NULL;
+
+    m_aspectRatio = Null;
+    m_resolution = Null;
+    m_lineResolution = Null;
+    m_sampleResolution = Null;
+
+    initCamStats();
+
+    m_footprint = footprint;
+
+    m_displayProperties = new ImageDisplayProperties(FileName(m_fileName).name(), this);
+
+    setId(id);
+  }
+
+
   /**
    * @brief Construct this image from XML.
    * @param imageFolder Where this image XML resides - /work/.../projectRoot/images/import1
@@ -246,7 +278,7 @@ namespace Isis {
 
 
   /**
-   * @brief Get the Cube pointer associated with this display property. 
+   * @brief Get the Cube pointer associated with this display property.
    *
    * This will allocate the Cube pointer if one is not already present.
    * @throws IException::Programmer "Cube cannot be created"
@@ -255,7 +287,7 @@ namespace Isis {
   Cube *Image::cube() {
     if (!m_cube) {
       try {
-        m_cube = new Cube(m_fileName); 
+        m_cube = new Cube(m_fileName);
       }
       catch (IException &e) {
         throw IException(e, IException::Programmer, "Cube cannot be created", _FILEINFO_);
@@ -267,7 +299,7 @@ namespace Isis {
 
 
   /**
-   * @brief Cleans up the Cube pointer. 
+   * @brief Cleans up the Cube pointer.
    *
    * You want to call this once you are sure you are done
    * with the Cube because the OS will limit how many of these we have open.
@@ -310,12 +342,27 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Returns the observation number of the Cube
+   * @return QString A string representation of the observation number of the cube.
+   */
+  QString Image::observationNumber() {
+    if (m_observationNumber.isEmpty()) {
+      m_observationNumber = ObservationNumber::Compose(*(cube()));
+    }
+    return m_observationNumber;
+  }
+
+
   /**
    * @brief Returns the serial number of the Cube
    * @return @b QString  A string representation of the serial number of the cube.
    */
   QString Image::serialNumber() {
-    return SerialNumber::Compose(*(cube()));
+    if (m_serialNumber.isEmpty()) {
+      m_serialNumber = SerialNumber::Compose(*(cube()));
+    } 
+    return m_serialNumber;
   }
 
 
@@ -334,7 +381,7 @@ namespace Isis {
    * @param id The id tjat overrides the automatically generated id.
    */
   void Image::setId(QString id) {
-    *m_id = QUuid(QString("{%1}").arg(id));
+    m_id = new QUuid(id);
   }
 
 
@@ -349,9 +396,9 @@ namespace Isis {
 
 
   /**
-   * @brief Calculate a footprint for this image. 
+   * @brief Calculate a footprint for this image.
    *
-   * If the footprint is already stored inside the cube, that will be used instead. 
+   * If the footprint is already stored inside the cube, that will be used instead.
    * If no footprint can be found, this throws an exception.
    * @param cameraMutex A pointer to the camera mutex to lock the camera resource while a footprint
    * is created.
@@ -488,27 +535,43 @@ namespace Isis {
     if (FileName(newProjectRoot) != FileName(project->projectRoot())) {
       Cube origImage(m_fileName);
 
+      // The imageDataRoot will either be PROJECTROOT/images or PROJECTROOT/results/bundle/timestamp/images,
+      // depending on how the newProjectRoot points to.
       FileName newExternalLabelFileName(Project::imageDataRoot(newProjectRoot.toString()) + "/" +
           FileName(m_fileName).dir().dirName() + "/" + FileName(m_fileName).name());
 
-      QScopedPointer<Cube> newExternalLabel(
-          origImage.copy(newExternalLabelFileName, CubeAttributeOutput("+External")));
-
-      // If this is an ecub (it should be) and is pointing to a relative file name,
-      //   then we want to copy the DN cube also.
-      if (!origImage.storesDnData() ) {
-        if (origImage.externalCubeFileName().path() == ".") {
-          Cube dnFile(
-              FileName(m_fileName).path() + "/" + origImage.externalCubeFileName().name());
-
-          FileName newDnFileName = newExternalLabelFileName.setExtension("cub");
-
-          QScopedPointer<Cube> newDnFile(dnFile.copy(newDnFileName, CubeAttributeOutput()));
-          newDnFile->close();
-          newExternalLabel->relocateDnData(newDnFileName.name());
-        }
-        else {
-          newExternalLabel->relocateDnData(origImage.externalCubeFileName());
+      if (m_fileName != newExternalLabelFileName.toString()) {
+        // This cube copy creates a filename w/ecub extension in the new project root, but looks to
+        // be a cube(internal vs external). It changes the DnFile pointer to the old ecub, 
+        // /tmp/tsucharski_ipce/tmpProject/images/import1/AS15-.ecub, but doing a less on file 
+        // immediately after the following call indicates it is a binary file.
+        QScopedPointer<Cube> newExternalLabel(
+            origImage.copy(newExternalLabelFileName, CubeAttributeOutput("+External")));
+
+        // If this is an ecub (it should be) and is pointing to a relative file name,
+        //   then we want to copy the DN cube also.
+        if (!origImage.storesDnData() ) {
+          if (origImage.externalCubeFileName().path() == ".") {
+            Cube dnFile(
+                FileName(m_fileName).path() + "/" + origImage.externalCubeFileName().name());
+            FileName newDnFileName = newExternalLabelFileName.setExtension("cub");
+            QScopedPointer<Cube> newDnFile(dnFile.copy(newDnFileName, CubeAttributeOutput()));
+            newDnFile->close();
+            // Changes the ecube's DnFile pointer in the labels.
+            newExternalLabel->relocateDnData(newDnFileName.name());
+          }
+          else {
+            //  If the the ecub's external cube is pointing to the old project root, update to new
+            //  project root.
+            if (origImage.externalCubeFileName().toString().contains(project->projectRoot())) {
+              QString newExternalCubeFileName = origImage.externalCubeFileName().toString();
+              newExternalCubeFileName.replace(project->projectRoot(), project->newProjectRoot());
+              newExternalLabel->relocateDnData(newExternalCubeFileName); 
+            }
+            else {
+              newExternalLabel->relocateDnData(origImage.externalCubeFileName()); 
+            }
+          }
         }
       }
     }
@@ -818,11 +881,11 @@ namespace Isis {
         }
 
         if (!instrumentId.isEmpty()) {
-          m_image->m_instrumentId = m_imageFolder.expanded() + "/" + instrumentId;
+          m_image->m_instrumentId = instrumentId;
         }
 
         if (!spacecraftName.isEmpty()) {
-          m_image->m_spacecraftName = m_imageFolder.expanded() + "/" + spacecraftName;
+          m_image->m_spacecraftName = spacecraftName;
         }
 
         if (!aspectRatioStr.isEmpty()) {
@@ -915,5 +978,3 @@ namespace Isis {
     return XmlStackedHandler::endElement(namespaceURI, localName, qName);
   }
 }
-
-
diff --git a/isis/src/qisis/objs/Image/Image.h b/isis/src/qisis/objs/Image/Image.h
index 440feb9524d1b1344bfc73f49faa691aa230ef14..dda2e45c3aec10dd9ef5560b1eb55b3e8ff72632 100644
--- a/isis/src/qisis/objs/Image/Image.h
+++ b/isis/src/qisis/objs/Image/Image.h
@@ -85,7 +85,23 @@ namespace Isis {
    *                           (the Spacecraft name associated with this image).
    *   @history 2016-06-22 Tyler Wilson - Added documentation to member functions/variables.
    *                           Fixes #3950.
-   *
+   *   @history 2017-10-11 Summer Stapleton - Removed path to instrumentId and spacecraftName in
+   *                           the startElement method. Fixes #5179.
+   *   @history 2017-11-01 Tracie Sucharski - Changed copyToNewProjectRoot to handle Images that are
+   *                           located outside of the import image directories such as the updated
+   *                           Images from a bundle run.  To improve efficiency, return from method
+   *                           if the project root has not changed. Fixes #4849.
+   *   @history 2018-06-30 Ian Humphrey - Added observationNumber() method so anything that grabs
+   *                           an Image ProjectItem can easily get both the serial number and
+   *                           observation number now. References #497.
+   *   @history 2018-07-02 Ian Humphrey - Changed serialNumber() implementation to follow how
+   *                           observationNumber() is implemented. This ensures that any calls
+   *                           after the first call to these methods are O(1) and are not
+   *                           bottlenecekd by any file I/O that occurs in the Compose()
+   *                           methods. References #497.
+   *   @history 2018-10-03 Tracie Sucharski - Added constructor which takes cube and a calculated
+   *                           footprint.  This was done for ipce imported shapes which do not
+   *                           contain a footprint. References #5504.
    */
 
   class Image : public QObject {
@@ -93,6 +109,8 @@ namespace Isis {
     public:
       explicit Image(QString imageFileName, QObject *parent = 0);
       explicit Image(Cube *imageCube, QObject *parent = 0);
+      explicit Image(Cube *imageCube, geos::geom::MultiPolygon *footprint, QString id,
+                     QObject *parent = 0);
       Image(FileName imageFolder, XmlStackedHandlerReader *xmlReader, QObject *parent = 0);
       ~Image();
 
@@ -105,6 +123,7 @@ namespace Isis {
       ImageDisplayProperties *displayProperties();
       const ImageDisplayProperties *displayProperties() const;
       QString fileName() const;
+      QString observationNumber();
       QString serialNumber();
       geos::geom::MultiPolygon *footprint();
       const geos::geom::MultiPolygon *footprint() const;
@@ -138,7 +157,7 @@ namespace Isis {
 
     private:
       /**
-       * @brief Process XML in a stack-oriented fashion  
+       * @brief Process XML in a stack-oriented fashion
        *
        * Child class for XmlStackedHandler which is used to process XML in
        * a stack-oriented way.  It's been modified to process an Image object
@@ -201,6 +220,16 @@ namespace Isis {
        */
       QString m_instrumentId;
 
+      /**
+       * The observation number for this image.
+       */
+      QString m_observationNumber; 
+
+      /**
+       * The serial number for this image.
+       */
+      QString m_serialNumber;
+
       /**
        * Spacecraft name associated with this Image.
        */
diff --git a/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.cpp b/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.cpp
index 40c1d94921d31b3475c5c349c98f0629481b8c4b..aecfce49292c3e6bfd88c7a91a4a5d24d69aaf8e 100644
--- a/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.cpp
+++ b/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.cpp
@@ -23,12 +23,14 @@
 #include "Directory.h"
 #include "FileName.h"
 #include "IException.h"
+#include "Image.h"
 #include "ImageTreeWidget.h"
 #include "ImageTreeWidgetItem.h"
 #include "IString.h"
 #include "ProgressBar.h"
 #include "Project.h"
 #include "PvlObject.h"
+#include "Shape.h"
 #include "TextFile.h"
 #include "XmlStackedHandlerReader.h"
 
@@ -217,15 +219,6 @@ namespace Isis {
     return output;
   }
 
-  /**
-   * This method pushes a new XmlHandler into the parser stack.
-   *
-   * @param xmlReader This is the parser stack.
-   */
-  void ImageFileListWidget::load(XmlStackedHandlerReader *xmlReader) {
-    xmlReader->pushContentHandler(new XmlHandler(this));
-  }
-
   /**
    * This method calls ImageTreeWidget::actions() which sets up a QAction
    * that sets a default for the file list columns and returns a QList of
@@ -611,6 +604,17 @@ namespace Isis {
     return result;
   }
 
+
+  /**
+   * This method pushes a new XmlHandler into the parser stack.
+   *
+   * @param xmlReader This is the parser stack.
+   */
+  void ImageFileListWidget::load(XmlStackedHandlerReader *xmlReader) {
+    xmlReader->pushContentHandler(new XmlHandler(this));
+  }
+
+
   /**
    * This method saves the FootprintColumns in the project and the settings associated
    * with every column.
@@ -621,10 +625,12 @@ namespace Isis {
    */
   void ImageFileListWidget::save(QXmlStreamWriter &stream, Project *project,
                                  FileName newProjectRoot) const {
+
     stream.writeStartElement("imageFileList");
+    stream.writeAttribute("objectName", objectName());
 
     // Write QSettings
-    stream.writeStartElement("widgetGeometry");
+//  stream.writeStartElement("widgetGeometry");
 //  QString geom = saveGeometry();
 //  //qDebug()<<"ImageFileListWidget::save   geometry = "<<geom;
 //  stream.writeAttribute("value", saveGeometry());
@@ -672,6 +678,7 @@ namespace Isis {
     stream.writeEndElement();
   }
 
+
   /**
    * This method saves the QTreeWidgetItem and the settings associated with the QTreeWidgetItem
    * to the stream.
@@ -758,7 +765,7 @@ namespace Isis {
   bool ImageFileListWidget::XmlHandler::startElement(const QString &namespaceURI,
       const QString &localName, const QString &qName, const QXmlAttributes &atts) {
     bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
-  /*  //tjw
+
     if (result) {
 
 //    if (localName == "geometry") {
@@ -822,11 +829,18 @@ namespace Isis {
 
       else if (localName == "image" && m_currentGroup) {
         Image *image = m_fileList->m_directory->project()->image(atts.value("id"));
-        m_currentGroup->addChild(m_fileList->m_tree->prepCube(m_currentImageList, image));
+        // If Image for id doesn't exist, check shapes.  If corresponds to Shape, new Image will
+        // need to be created.
+        if (!image) {
+          Shape *shape = m_fileList->m_directory->project()->shape(atts.value("id"));
+          if (shape) {
+            image = new Image(shape->cube(), shape->footprint(), atts.value("id"));
+          }
+        }
+        m_currentGroup->addChild(m_fileList->m_tree->prepCube(m_currentImageList, image)); 
       }
 
     }
-    */
 
     return result;
   }
@@ -905,6 +919,4 @@ namespace Isis {
       }
     }
   }
-
-
 }
diff --git a/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.h b/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.h
index 0af97c7b8801c7bcbb02301481c62630db8988f3..ef33e3c2bd25c33fb815f6a735519e6fa36f6bfc 100644
--- a/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.h
+++ b/isis/src/qisis/objs/ImageFileListWidget/ImageFileListWidget.h
@@ -52,6 +52,14 @@ namespace Isis {
    *   @history 2017-07-18 Cole Neubauer - Added removeImages slot to be able to remove from the
    *                           ImageFileList in IPCE Fixes #4996
    *   @history 2017-08-22 Cole Neuabuer - Added ability to search ImageFileListWidget. Fixes #1556
+   *   @history 2018-05-15 Tracie Sucharski - Fixed xml serialization for Ipce project saves.  Fixes
+   *                            #5422.
+   *   @history 2018-07-09 Tracie Sucharski - Serialize the objectName for this view so that the
+   *                           view can be re-created with the same objectName for restoring the
+   *                           project state. Qt's save/restoreState use the objectName.
+   *   @history 2018-10-04 Tracie Sucharski - When serializing images for ipce project saving, check
+   *                           for shapes in project if image for given id cannot be found.
+   *                           References #5495.
    */
   class ImageFileListWidget : public QWidget {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/ImageList/ImageList.cpp b/isis/src/qisis/objs/ImageList/ImageList.cpp
index 466502a8c89d218ad647c5e4007cc99890b229d8..42e445c2a2231326975ed9d4cfd2318e3684140f 100644
--- a/isis/src/qisis/objs/ImageList/ImageList.cpp
+++ b/isis/src/qisis/objs/ImageList/ImageList.cpp
@@ -24,8 +24,6 @@
 #include "ImageList.h"
 #include "IException.h"
 
-#include <iostream>
-
 #include <QAction>
 #include <QColorDialog>
 #include <QDebug>
@@ -45,8 +43,6 @@
 #include "Project.h"
 #include "XmlStackedHandlerReader.h"
 
-using namespace std;
-
 namespace Isis {
   /**
    * Creates an image list from an image list name and path (does not read Images).
@@ -56,7 +52,6 @@ namespace Isis {
    * @param parent The Qt-relationship parent.
    */
   ImageList::ImageList(QString name, QString path, QObject *parent) : QObject(parent) {
-
     m_name = name;
     m_path = path;
   }
@@ -109,7 +104,7 @@ namespace Isis {
 
   /**
    * Creates an image list from a list of cube file names. This is slow (serial) and not recommended.
-   * 
+   *
    * @param fileNames The list of cube fileNames.
    */
   ImageList::ImageList(QStringList &fileNames) {
@@ -134,7 +129,7 @@ namespace Isis {
 
   /**
    * Creates a SerialNumberList from the image list.
-   * 
+   *
    * @return @b SerialNumberList The list of serial numbers for the cubes in the ImageList.
    */
   SerialNumberList *ImageList::serialNumberList() {
@@ -150,9 +145,9 @@ namespace Isis {
 
   /**
    * Appends an image to the image list.
-   * 
+   *
    * @param value The image to be appended.
-   * 
+   *
    * @see QList<Image *>::append().
    */
   void ImageList::append(Image * const &value) {
@@ -163,9 +158,9 @@ namespace Isis {
 
   /**
    * Appends a list of images to the image list.
-   * 
+   *
    * @param value the list of images to be appened.
-   * 
+   *
    * @see QList<Image *>::append().
    */
   void ImageList::append(const QList<Image *> &value) {
@@ -176,7 +171,7 @@ namespace Isis {
 
   /**
    * Clears the image list.
-   * 
+   *
    * @see QList<Image *>::clear().
    */
   void ImageList::clear() {
@@ -190,11 +185,11 @@ namespace Isis {
 
   /**
    * Erases a single image from the image list.
-   * 
+   *
    * @param pos An iterator pointing to the image to be erased.
-   * 
+   *
    * @return @b QList::iterator An iterator pointing to the image after the image that was removed.
-   * 
+   *
    * @see QList<Image *>::erase()
    */
   QList<Image *>::iterator ImageList::erase(iterator pos) {
@@ -207,13 +202,13 @@ namespace Isis {
   /**
    * Erases a range of images from the image list.
    * Erases all images from begin up to (but not including) end.
-   * 
+   *
    * @param begin An iterator pointing to the first image to be erased.
    * @param end An iterator pointing to the image just after the last image to be erased.
    *                Will be invalid after the call.
-   * 
+   *
    * @return @b QList::iterator An iterator pointing to the image end refered to before the call.
-   * 
+   *
    * @see QList<Image *>::erase()
    */
   QList<Image *>::iterator ImageList::erase(iterator begin, iterator end) {
@@ -225,10 +220,10 @@ namespace Isis {
 
   /**
    * Inserts an image into the image list at an index
-   * 
+   *
    * @param i The index at which to insert the image.
    * @param value the image to be inserted.
-   * 
+   *
    * @see QList<Image *>::insert()
    */
   void ImageList::insert(int i, Image * const &value) {
@@ -240,12 +235,12 @@ namespace Isis {
 
   /**
    * Inserts an image into the image list after an iterator.
-   * 
+   *
    * @param before An iterator pointing to the image that value will be inserted after
    * @param value The image to be inserted.
-   * 
+   *
    * @return @b QList::iterator An iterator pointing to the inserted image.
-   * 
+   *
    * @see QList<Image *>::insert()
    */
   QList<Image *>::iterator ImageList::insert(iterator before, Image * const &value) {
@@ -257,9 +252,9 @@ namespace Isis {
 
   /**
    * Inserts an image at the beginning of the image list.
-   * 
+   *
    * @param value The image to be inserted.
-   * 
+   *
    * @see QList<Image *>::prepend()
    */
   void ImageList::prepend(Image * const &value) {
@@ -271,9 +266,9 @@ namespace Isis {
   /**
    * Appends an image to the end of the image list.
    * Equivalent to append().
-   * 
+   *
    * @param value The image to be appended.
-   * 
+   *
    * @see QList<Image *>::push_back()
    */
   void ImageList::push_back(Image * const &value) {
@@ -285,9 +280,9 @@ namespace Isis {
   /**
    * Prepends an image to the beginning of the image list.
    * Equivalent to prepend().
-   * 
+   *
    * @param value The image to be appended.
-   * 
+   *
    * @see QList<Image *>::push_front()
    */
   void ImageList::push_front(Image * const &value) {
@@ -298,11 +293,11 @@ namespace Isis {
 
   /**
    * Removes all occurances of an image.
-   * 
+   *
    * @param value The image to be removed.
-   * 
+   *
    * @return @b int The number of occurances of the image.
-   * 
+   *
    * @see QList<Image *>::removeAll()
    */
   int ImageList::removeAll(Image * const &value) {
@@ -318,9 +313,9 @@ namespace Isis {
 
   /**
    * Removes the image at an index.
-   * 
+   *
    * @param i The index of the image to be removed.
-   * 
+   *
    * @see QList<Image *>::removeAt()
    */
   void ImageList::removeAt(int i) {
@@ -331,7 +326,7 @@ namespace Isis {
 
   /**
    * Removes the image at the front of the image list.
-   * 
+   *
    * @see QList<Image *>::removeFirst()
    */
   void ImageList::removeFirst() {
@@ -342,7 +337,7 @@ namespace Isis {
 
   /**
    * Removes the image at the end of the image list.
-   * 
+   *
    * @see QList<Image *>::removeLast()
    */
   void ImageList::removeLast() {
@@ -353,11 +348,11 @@ namespace Isis {
 
   /**
    * Removes the first occurance of an image.
-   * 
+   *
    * @param value The image to be removed.
-   * 
+   *
    * @return @b bool True if successful, otherwise false.
-   * 
+   *
    * @see QList<Image *>::removeOne()
    */
   bool ImageList::removeOne(Image * const &value) {
@@ -373,9 +368,9 @@ namespace Isis {
 
   /**
    * Swaps the image list with another list of images.
-   * 
+   *
    * @param other The list of images to swapped with.
-   * 
+   *
    * @see QList<Image *>::swap()
    */
   void ImageList::swap(QList<Image *> &other) {
@@ -389,11 +384,11 @@ namespace Isis {
 
   /**
    * Removes the image at an index and returns it.
-   * 
+   *
    * @param i The index of the image to be removed and returned.
-   * 
+   *
    * @return @b Image * The removed image.
-   * 
+   *
    * @see QList<Image *>::takeAt()
    */
   Image *ImageList::takeAt(int i) {
@@ -405,9 +400,9 @@ namespace Isis {
 
   /**
    * Removes and returns the first image.
-   * 
+   *
    * @return @b Image * The first image.
-   * 
+   *
    * @see QList<Image *>::takeFirst()
    */
   Image *ImageList::takeFirst() {
@@ -419,9 +414,9 @@ namespace Isis {
 
   /**
    * Removes and returns the last image.
-   * 
+   *
    * @return @b Image * The last image.
-   * 
+   *
    * @see QList<Image *>::takeLast()
    */
   Image *ImageList::takeLast() {
@@ -433,11 +428,11 @@ namespace Isis {
 
   /**
    * Appends a list of images to the end of the image list.
-   * 
+   *
    * @param other The list of images to be appended.
-   * 
+   *
    * @return @b ImageList & A reference to the imageList.
-   * 
+   *
    * @see append()
    * @see QList<Image *>::operator+=()
    */
@@ -454,11 +449,11 @@ namespace Isis {
 
   /**
    * Appends a single image to the end of the image list.
-   * 
+   *
    * @param other The image to be appended.
-   * 
+   *
    * @return @b ImageList & A reference to the imageList.
-   * 
+   *
    * @see append()
    * @see QList<Image *>::operator+=()
    */
@@ -471,11 +466,11 @@ namespace Isis {
 
   /**
    * Appends a list of images to the end of the image list.
-   * 
+   *
    * @param other The list of images to be appended.
-   * 
+   *
    * @return @b ImageList & A reference to the imageList.
-   * 
+   *
    * @see append()
    * @see QList<Image *>::operator<<()
    */
@@ -492,11 +487,11 @@ namespace Isis {
 
   /**
    * Appends a single image to the end of the image list.
-   * 
+   *
    * @param other The image to be appended.
-   * 
+   *
    * @return @b ImageList & A reference to the imageList.
-   * 
+   *
    * @see append()
    * @see QList<Image *>::operator<<()
    */
@@ -509,11 +504,11 @@ namespace Isis {
 
   /**
    * Assigns another list of images to the image list.
-   * 
+   *
    * @param rhs The list of images that imageList will become a copy of.
-   * 
+   *
    * @return @b ImageList & A reference to the imageList.
-   * 
+   *
    * @see QList<Image *>::operator=()
    */
   ImageList &ImageList::operator=(const QList<Image *> &rhs) {
@@ -532,7 +527,7 @@ namespace Isis {
    * Assignment operator
    *
    * @param rhs The right hand side of the '=' operator
-   * 
+   *
    * @return @b ImageList & This image list.
    */
   ImageList &ImageList::operator=(const ImageList &rhs) {
@@ -554,27 +549,27 @@ namespace Isis {
    * Gets a list of pre-connected actions that have to do with display.  If any image
    * does not support a given set of actions, then those will actions will be skipped for
    * all images.
-   * 
+   *
    * @param project The project that owns the images in the imageList.
-   * 
+   *
    * @return @b QList<QAction *> A list of connected actions.  The actions are as follows:
    *                                 ChangeTransparency, ChangeColor, RandomColor,
    *                                 ToggleShowLabel, ToggleShowFilled, ToggleShowCubeData,
    *                                 ToggleShowOutline.
    * @internal
-   *   @history 2017-07-21 Marjorie Hahn - Removed unnecessary null project check around 
+   *   @history 2017-07-21 Marjorie Hahn - Removed unnecessary null project check around
    *                           the QActions for moveToTopAct, moveToTop, moveToBottomAct,
    *                           moveToBottom, and zoomFit. This allows these actions to be
    *                           available in IPCE as well as qmos. Fixes #5027.
    */
   QList<QAction *> ImageList::supportedActions(Project *project) {
-    
+
     QList<QAction *> actions;
-    
+
     // It turns out connect() statements cannot be templated, hence they aren't inside of
     //   createWorkOrder().
     if (allSupport(ImageDisplayProperties::Color)) {
-      
+
       QAction *alphaAction = createWorkOrder(project, ImageListActionWorkOrder::ChangeTransparency);
       if (!project) {
         connect(alphaAction, SIGNAL(triggered()),
@@ -639,14 +634,13 @@ namespace Isis {
     actions.append(NULL);
 
     if (allSupport(ImageDisplayProperties::ZOrdering)) {
-                
+
       QAction *moveToTopAct = createWorkOrder(project, ImageListActionWorkOrder::MoveToTop);
       QAction *moveUpAct = createWorkOrder(project, ImageListActionWorkOrder::MoveUpOne);
       QAction *moveToBottomAct = createWorkOrder(project, ImageListActionWorkOrder::MoveToBottom);
       QAction *moveDownAct = createWorkOrder(project, ImageListActionWorkOrder::MoveDownOne);
 
       foreach (Image *image, *this) {
-        
         connect(moveToTopAct, SIGNAL(triggered()),
                 image->displayProperties(), SIGNAL(moveToTop()));
 
@@ -659,7 +653,7 @@ namespace Isis {
         connect(moveDownAct, SIGNAL(triggered()),
                 image->displayProperties(), SIGNAL(moveDownOne()));
       }
-      
+
       actions.append(moveToTopAct);
       actions.append(moveUpAct);
       actions.append(moveToBottomAct);
@@ -675,7 +669,6 @@ namespace Isis {
       actions.append(zoomFit);
     }
 
-
     return actions;
   }
 
@@ -684,7 +677,7 @@ namespace Isis {
    * Check if all images in the image list support a display property.
    *
    * @param prop The property we're testing for support for
-   * 
+   *
    * @return @b bool True if all images in the Image List support the property.
    *                     Otherwise, false.
    */
@@ -746,9 +739,9 @@ namespace Isis {
 
   /**
    * Delete all of the contained Images from disk.
-   * 
+   *
    * @param project The project the images in the image list belong to.
-   * 
+   *
    * @see Image::deleteFromDisk()
    */
   void ImageList::deleteFromDisk(Project *project) {
@@ -780,11 +773,11 @@ namespace Isis {
    *     ...
    *   </images>
    * </pre>
-   * 
+   *
    * @param stream XmlStream to write out the document.
    * @param project The project the image list will be saved to.
    * @param newProjectRoot The path to the root directory for the new project.
-   * 
+   *
    * @throws iException::Io "Failed to create directory"
    * @throws iException::Io "Unable to save image information because new file could not
    *         be opened for writing"
@@ -794,9 +787,18 @@ namespace Isis {
     stream.writeStartElement("imageList");
     stream.writeAttribute("name", m_name);
     stream.writeAttribute("path", m_path);
+    // The newProjectRoot contains the full path and we want the dataRoot to be relative to the
+    // projectRoot so that projects can be moved. 
+    QString dataRoot =
+        Project::imageDataRoot(newProjectRoot.toString()).remove(project->newProjectRoot());
+    // Get rid of any preceding "/"
+    if (dataRoot.startsWith("/")) {
+      dataRoot.remove(0,1);
+    }
+    stream.writeAttribute("dataRoot", dataRoot);
 
-    FileName settingsFileName(
-        Project::imageDataRoot(newProjectRoot.toString()) + "/" + m_path + "/images.xml");
+    FileName settingsFileName(Project::imageDataRoot(newProjectRoot.toString()) +
+                              "/" + m_path + "/images.xml");
 
     if (!settingsFileName.dir().mkpath(settingsFileName.path())) {
       throw IException(IException::Io,
@@ -804,7 +806,6 @@ namespace Isis {
                          .arg(settingsFileName.path()),
                        _FILEINFO_);
     }
-
     QFile imageListContentsFile(settingsFileName.toString());
 
     if (!imageListContentsFile.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
@@ -819,42 +820,45 @@ namespace Isis {
     imageDetailsWriter.setAutoFormatting(true);
     imageDetailsWriter.writeStartDocument();
 
-    int countWidth = QString("%1L").arg(count()).size() - 1;
-    QChar paddingChar('0');
+    imageDetailsWriter.writeStartElement("images");
 
-    QLabel *progressLabel = new QLabel;
+    // Only copy images if saving to new location
+    if (project->newProjectRoot() != project->projectRoot()) {
+      int countWidth = QString("%1L").arg(count()).size() - 1;
+      QChar paddingChar('0');
 
-    QProgressDialog progressDialog;
-    progressDialog.setLabel(progressLabel);
-    progressDialog.setRange(-1, count());
-    progressDialog.setValue(-1);
+      QLabel *progressLabel = new QLabel;
 
-    imageDetailsWriter.writeStartElement("images");
-    // Mapped is way faster than hundreds/thousands of run() calls... so use mapped for performance
-    QFuture<void *> future = QtConcurrent::mapped(*this,
-                                                  CopyImageDataFunctor(project, newProjectRoot));
+      QProgressDialog progressDialog;
+      progressDialog.setLabel(progressLabel);
+      progressDialog.setRange(-1, count());
+      progressDialog.setValue(-1);
 
-    for (int i = 0; i < count(); i++) {
-      int newProgressValue = progressDialog.value() + 1;
-      progressLabel->setText(
-          tr("Saving Image Information for [%1] - %L2/%L3 done")
-            .arg(m_name)
-            .arg(newProgressValue, countWidth, 10, paddingChar)
-            .arg(count()));
-      progressDialog.setValue(newProgressValue);
-      try {
+      // Mapped is way faster than hundreds/thousands of run() calls... so use mapped for performance
+      QFuture<void *> future = QtConcurrent::mapped(*this,
+                                                    CopyImageDataFunctor(project, newProjectRoot));
+
+      for (int i = 0; i < count(); i++) {
+        int newProgressValue = progressDialog.value() + 1;
+        progressLabel->setText(
+            tr("Saving Image Information for [%1] - %L2/%L3 done")
+              .arg(m_name)
+              .arg(newProgressValue, countWidth, 10, paddingChar)
+              .arg(count()));
+        progressDialog.setValue(newProgressValue);
+        try {
           future.resultAt(i);
         }
-      catch(std::exception &e) {
-        QString msg("Could not save ImageList: "+this->name() );
-        throw IException(IException::Io,msg,_FILEINFO_);
+        catch(std::exception &e) {
+          QString msg("Could not save ImageList: "+this->name() );
+          throw IException(IException::Io,msg,_FILEINFO_);
+        }
       }
-    }
 
-
-    progressLabel->setText(tr("Finalizing..."));
-    progressDialog.setRange(0, 0);
-    progressDialog.setValue(0);
+      progressLabel->setText(tr("Finalizing..."));
+      progressDialog.setRange(0, 0);
+      progressDialog.setValue(0);
+    }
 
     foreach (Image *image, *this) {
       image->save(imageDetailsWriter, project, newProjectRoot);
@@ -870,7 +874,7 @@ namespace Isis {
 
   /**
    * Constructor for CopyImageDataFunctor.
-   * 
+   *
    * @param project The project that the image data will be saved to when the functor is used
    * @param newProjectRoot The path to the project root
    */
@@ -883,7 +887,7 @@ namespace Isis {
 
   /**
    * Copy constructor for CopyImageDataFunctor.
-   * 
+   *
    * @param other The functor to copy from
    */
   ImageList::CopyImageDataFunctor::CopyImageDataFunctor(const CopyImageDataFunctor &other) {
@@ -902,24 +906,29 @@ namespace Isis {
   /**
    * Copies the cub/ecub files for an image into m_project.
    * Used by save to copy the imageList into a new project.
-   * 
+   *
    * @param imageToCopy The image to copy into m_project.
-   * 
+   *
    * @see save
    */
   void *ImageList::CopyImageDataFunctor::operator()(Image * const &imageToCopy) {
-
-    imageToCopy->copyToNewProjectRoot(m_project, m_newProjectRoot);
-
+    try {
+      imageToCopy->copyToNewProjectRoot(m_project, m_newProjectRoot); 
+    }
+    catch (IException &e) {
+      IString msg = "Could not copy image [" + imageToCopy->displayProperties()->displayName() +
+                    "]";
+      throw IException(e, IException::Io, msg, _FILEINFO_);
+    }
     return NULL;
   }
 
 
   /**
    * Assignment operator for CopyImageDataFunctor.
-   * 
+   *
    * @param rhs The functor to assign from
-   * 
+   *
    * @return @b ImageList::CopyImageDataFunctor & A reference to a copy of the functor
    */
   ImageList::CopyImageDataFunctor &ImageList::CopyImageDataFunctor::operator=(
@@ -934,9 +943,9 @@ namespace Isis {
    * Sets the alpha values of the images based on a list of values.
    * The alpha value of the first image in the image list will be set to the first value in alphaValues,
    * the alpha value of the second image will be set to the second value, etc.
-   * 
+   *
    * @param alphaValues The list of alpha values to be applied.
-   *                        
+   *
    */
   void ImageList::applyAlphas(QStringList alphaValues) {
     if (count() == alphaValues.count()) {
@@ -954,8 +963,8 @@ namespace Isis {
    * Sets the colors values of the images based on a list of values.
    * The color values of the first image in the image list will be set to the values in the first element of
    * colorValues, the color values of the second image will be set to the values in the second element, etc.
-   * 
-   * @param colorValues The list of color values to be applies. Color values should be formated as RGBA 
+   *
+   * @param colorValues The list of color values to be applies. Color values should be formated as RGBA
    *                        with each value separated by " ".
    * @param column The number of entries in each color value.   Usually 4, R G B A.
    */
@@ -974,7 +983,7 @@ namespace Isis {
    * The visibility of the display name of the first image in the image list will be set based on the
    * first value in showLabelValues, The visibility of the display name of the second image will be set
    * based on the second value, etc.
-   * 
+   *
    * @param showLabelValues The list of values to determine which image display names will be shown.
    *                            If a value in showLabelValues is "shown", then the display name of the
    *                            associated image will be shown.  Otherwise it will not be shown.
@@ -994,7 +1003,7 @@ namespace Isis {
    * The visibility of the fill area of the first image in the image list will be set based on the first
    * value in showFillValues, the visibility of the fill area of the second image will be set based on the
    * second value, etc.
-   * 
+   *
    * @param showFillValues The list of values to determine which image fill areas will be shown.
    *                           If a value in showFillValues is "shown", then the fill area of the
    *                           associated image will be shown.  Otherwise it will not be shown.
@@ -1013,7 +1022,7 @@ namespace Isis {
    * Sets the visibility of the DNs of the images in the image list based on a list of values.
    * The visibility of the DNs of the first image in the image list will be set based on the first value in
    * showDNsValues, the visibility of the DNs of the second image will be set based on the second value, etc.
-   * 
+   *
    * @param showDNsValues The list of values to determine which image DNs will be shown.
    *                          If a value in showDNsValues is "shown", then the fill area of the
    *                          associated image will be shown.  Otherwise it will not be shown.
@@ -1032,7 +1041,7 @@ namespace Isis {
    * Sets the visibility of the outlines of the images in the image list based on a list of values.
    * The visibility of the outline of the first image in the image list will be set based on the first value in
    * showOutlineValues, the visibility of the outline of the second image will be set based on the second value, etc.
-   * 
+   *
    * @param showOutlineValues The list of values to determine which image outlines will be shown.
    *                              If a value in showOutlineValues is "shown", then the outline of the associated
    *                              image will be shown.  Otherwise it will not be shown.
@@ -1045,18 +1054,18 @@ namespace Isis {
       }
     }
   }
-  
+
 
   /**
    * Prompts the user for an alpha value. If the user selects
    * an alpha then this sets alphaResult and returns true.  Does
    * not modify the image list.
-   * 
+   *
    * @param alphaResult The alpha value input by the user
-   * 
+   *
    * @return @b bool True if the user input an alpha value.
    *                     Otherwise false.
-   * 
+   *
    * @see ImageList::askAndUpdateAlpha
    * @see ImageListActionWorkOrder::execute
    */
@@ -1079,12 +1088,12 @@ namespace Isis {
    * Prompts the user for color values.  If the user selects color
    * values then this sets colorResult and returns true.  Does no
    * modify the image list.
-   * 
+   *
    * @param colorResult The color values input by the user
-   * 
+   *
    * @return @b bool True if the user input a color value.
    *                     Otherwise false.
-   * 
+   *
    * @see ImageList::askAndUpdateColor
    * @see ImageListActionWorkOrder::execute
    */
@@ -1106,9 +1115,9 @@ namespace Isis {
   /**
    * Sets the alpha value of every image in the image list to a specificed value.
    * Saves and returns the old alpha values.
-   * 
+   *
    * @param newAlpha The alpha value which every image's alpha values will be set to.
-   * 
+   *
    * @return @b QStringList A list of all the old alpha values.
    */
   QStringList ImageList::saveAndApplyAlpha(int newAlpha) {
@@ -1132,9 +1141,9 @@ namespace Isis {
   /**
    * Sets the color values of every image to a specificed set of values.
    * Saves and returns the old color values for each image.
-   * 
+   *
    * @param newColor The colro values which every image's color values will be set to.
-   * 
+   *
    * @return @b QStringList A list of all the old color values.  Every image's old color values are
    *                            listed as R G B A, separated with " ".
    */
@@ -1158,10 +1167,10 @@ namespace Isis {
   }
 
 
-  /** 
+  /**
    * Sets the color values of every image to a random color.
    * Preserves the alpha values of each individual image.
-   * 
+   *
    * @return @b QStringList A list of all the old color values and all the new color values
    *                            in rgba format.
    */
@@ -1192,7 +1201,7 @@ namespace Isis {
 
 
   /**
-   * Prompt the user for a new alpha value. If the user selects a new 
+   * Prompt the user for a new alpha value. If the user selects a new
    * alpha then every image's display properties is updated.
    */
   void ImageList::askAndUpdateAlpha() {
@@ -1216,7 +1225,7 @@ namespace Isis {
 
 
   /**
-   * This applies a new semi-random color to every image's display 
+   * This applies a new semi-random color to every image's display
    * property for every image in this image list.
    */
   void ImageList::showRandomColor() {
@@ -1230,7 +1239,7 @@ namespace Isis {
   /**
    * Changes the visibility of the DNs of the first image in the image list and synchronizes the
    * visibility of the DNs of every other image with the visibility of the DNs of the first image.
-   * 
+   *
    * @return @b QStringList A list containing the original visibility of every image's DNs.
    */
   QStringList ImageList::saveAndToggleShowDNs() {
@@ -1258,7 +1267,7 @@ namespace Isis {
    * Changes the visibility of the fill area of the first image in the image list and synchronizes
    * the visibility of the fill areas of every other image with the visibility of fill area of the
    * first image.
-   * 
+   *
    * @return @b QStringList A list containing the original visibility of every image's fill area.
    */
   QStringList ImageList::saveAndToggleShowFill() {
@@ -1286,7 +1295,7 @@ namespace Isis {
    * Changes the visibility of the display name of the first image in the image list and synchronizes
    * the visibility of the display names of every other image with the visibility of the display name
    * of the first image.
-   * 
+   *
    * @return @b QStringList A list containing the original visibility of every image's display name.
    */
   QStringList ImageList::saveAndToggleShowLabel() {
@@ -1314,7 +1323,7 @@ namespace Isis {
    * Changes the visibility of the outline of the first image in the image list and synchronizes the
    * visibility of the outlines of every other image with the visibility of the outline of the
    * first image.
-   * 
+   *
    * @return @b QStringList A list returning the original visibility of every image's outline.
    */
   QStringList ImageList::saveAndToggleShowOutline() {
@@ -1336,19 +1345,20 @@ namespace Isis {
 
     return results;
   }
-  
+
 
   /**
    * Create an XML Handler (reader) that can populate the Image list class data.
    *
    * @param imageList The image list we're going to be initializing
    * @param project The project that contains the image list
-   * 
+   *
    * @see ImageList::save()
    */
-  ImageList::XmlHandler::XmlHandler(ImageList *imageList, Project *project) {
+  ImageList::XmlHandler::XmlHandler(ImageList *imageList, Project *project, QString dataRoot) {
     m_imageList = imageList;
     m_project = project;
+    m_imageDataRoot = dataRoot;
   }
 
 
@@ -1364,6 +1374,7 @@ namespace Isis {
       if (localName == "imageList") {
         QString name = atts.value("name");
         QString path = atts.value("path");
+        m_imageDataRoot = atts.value("dataRoot");
 
         if (!name.isEmpty()) {
           m_imageList->setName(name);
@@ -1374,8 +1385,8 @@ namespace Isis {
         }
       }
       else if (localName == "image") {
-        m_imageList->append(new Image(m_project->imageDataRoot() + "/" + m_imageList->path(),
-                                      reader()));
+        m_imageList->append(new Image(
+           m_project->projectRoot() + "/" + m_imageDataRoot + "/" + m_imageList->path(), reader()));
       }
     }
 
@@ -1388,21 +1399,24 @@ namespace Isis {
    * file.
    *
    * @return @b bool If we should continue reading the XML (usually true).
-   * 
+   *
    * @throws IException::Io "Unable to open with read access"
    * @throws IException::Io "Failed to open image list XML"
    */
   bool ImageList::XmlHandler::endElement(const QString &namespaceURI, const QString &localName,
                                          const QString &qName) {
     if (localName == "imageList") {
-      XmlHandler handler(m_imageList, m_project);
+      XmlHandler handler(m_imageList, m_project, m_imageDataRoot);
 
       XmlStackedHandlerReader reader;
       reader.pushContentHandler(&handler);
       reader.setErrorHandler(&handler);
 
-      QString imageListXmlPath = m_project->imageDataRoot() + "/" + m_imageList->path() +
-                                 "/images.xml";
+      QDir projectPath = QDir(m_project->projectRoot()).dirName();
+      QString imageListXmlPath = m_project->projectRoot() + "/" + m_imageDataRoot + "/" +
+                                 m_imageList->path() + "/images.xml";
+      imageListXmlPath = QDir::cleanPath(imageListXmlPath);
+
       QFile file(imageListXmlPath);
 
       if (!file.open(QFile::ReadOnly)) {
diff --git a/isis/src/qisis/objs/ImageList/ImageList.h b/isis/src/qisis/objs/ImageList/ImageList.h
index 45e2a23fff87c084d2badb08ee2a6c74106d4db6..ee0019c2b82cb25f750343635389bb4bed3c7961 100644
--- a/isis/src/qisis/objs/ImageList/ImageList.h
+++ b/isis/src/qisis/objs/ImageList/ImageList.h
@@ -23,29 +23,34 @@ namespace Isis {
 
   /**
    * @brief Internalizes a list of images and allows for operations on the entire list
-   * 
+   *
    * This class reads a list of images from an images.xml file and internalizes them
    * as aQList of images.  It also allows for modifications to the entire list of
    * images and storing the image list as an images.xml file.
-   * 
+   *
    * @author 2012-??-?? ???
    *
-   * @internal 
-   * @history 2014-01-08 Tracie Sucharski - Added layer re-ordering connections to all images 
+   * @internal
+   * @history 2014-01-08 Tracie Sucharski - Added layer re-ordering connections to all images
    *                         in list instead of just the first image.  Fixes #1755.
    * @history 2014-06-13 Tracie Sucharski - Added serialNumberList method.
    * @history 2016-06-08 Jesse Mapel - Updated documentation and merged from IPCE to ISIS branch.
    *                         Fixes #3961.
-   * @history 2016-09-19 Tracie Sucharski - Changed serialNumberList method to return a shared 
+   * @history 2016-09-19 Tracie Sucharski - Changed serialNumberList method to return a shared
    *                         pointer. TODO:  Currently, serialNumberList created the list on the
    *                         fly.  For speed, this needs to change so that when the ImageList
    *                         changes, update the serial number list.
    * @history 2017-06-08 Makayla Shepherd - Modified ImageList(QStringList &) to close the image
    *                         cubes after adding them to the list. Fixes #4908.
-   * @history 2017-07-08 Tyler Wilson - Added a try-catch block in ImageList::saveQXmlStreamWriter
-   *                         &stream, const Project *project, FileName newProjectRoot) to
-   *                         stop a seg fault occurring when Save As is called on certain types
-   *                         of corrupt projects.  Fixes #5075.
+   * @history 2017-11-01 Ian Humphrey, Tracie Sucharski - Add dataRoot parameter to the 
+   *                         XmlHandler, during serialization check if images are in results/bundle
+   *                         area and set the dataRoot appropriately. Changed project name to new
+   *                         project root in serialization method because the project name is not
+   *                         changed to new project until it is re-opened. Fixes #4849.
+   * @history 2017-12-08 Tracie Sucharski - Changed save to only copy images if project is saved 
+   *                         to a new location.
+   * @history 2018-01-04 Tracie Sucharski - Changed all serialization to save relative paths so that 
+   *                         projects can be moved to new locations.  Fixes #5276. 
    */
   class ImageList : public QObject, public QList<Image *> {
     Q_OBJECT
@@ -114,21 +119,20 @@ namespace Isis {
       void deleteFromDisk(Project *project);
       void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
 
-
     signals:
       void countChanged(int newCount);
 
     private:
       /**
        * This class is used to read an images.xml file into an image list
-       * 
+       *
        * @author 2012-07-01 Steven Lambright
        *
        * @internal
        */
       class XmlHandler : public XmlStackedHandler {
         public:
-          XmlHandler(ImageList *imageList, Project *project);
+          XmlHandler(ImageList *imageList, Project *project, QString dataRoot="");
 
           virtual bool startElement(const QString &namespaceURI, const QString &localName,
                                     const QString &qName, const QXmlAttributes &atts);
@@ -146,6 +150,11 @@ namespace Isis {
            * This stores a pointer to the project that the images in the image list will be a part of
            */
           Project *m_project;
+          /**
+           * This is a relative path to the image data.
+           *   e.g. project/images or project/bundle/results/TIMESTAMP/images
+           */
+          QString m_imageDataRoot;
       };
 
 
@@ -182,10 +191,10 @@ namespace Isis {
     private:
       /**
        * Creates an ImageListActionWorkOrder and sets the image list as the data for the work order.
-       * 
+       *
        * @param project The project the work order is for
        * @param action The action the work order performs
-       * 
+       *
        * @return @b QAction * The created work order
        */
       QAction *createWorkOrder(Project *project, ImageListActionWorkOrder::Action action) {
diff --git a/isis/src/qisis/objs/JigsawDialog/JigsawDialog.ui b/isis/src/qisis/objs/JigsawDialog/JigsawDialog.ui
deleted file mode 100644
index 8bc268bc758bf10dcf6b7e50748836f3f603bed0..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/JigsawDialog/JigsawDialog.ui
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>JigsawDialog</class>
- <widget class="QDialog" name="JigsawDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>540</width>
-    <height>300</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Jigsaw</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>icons/jigsaw.png</normaloff>icons/jigsaw.png</iconset>
-  </property>
-  <property name="modal">
-   <bool>false</bool>
-  </property>
-  <widget class="QDialogButtonBox" name="buttonBox">
-   <property name="geometry">
-    <rect>
-     <x>170</x>
-     <y>260</y>
-     <width>341</width>
-     <height>32</height>
-    </rect>
-   </property>
-   <property name="orientation">
-    <enum>Qt::Horizontal</enum>
-   </property>
-  </widget>
-  <widget class="QWidget" name="jigsawButtonsLayoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>320</x>
-     <y>10</y>
-     <width>208</width>
-     <height>94</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="gridLayout">
-    <item row="0" column="0">
-     <widget class="QPushButton" name="JigsawSetupButton">
-      <property name="text">
-       <string>&amp;Setup</string>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="0">
-     <widget class="QPushButton" name="JigsawRunButton">
-      <property name="text">
-       <string>&amp;Run</string>
-      </property>
-     </widget>
-    </item>
-    <item row="2" column="0">
-     <widget class="QCheckBox" name="useLastSettings">
-      <property name="text">
-       <string>Use Last Accepted Settings</string>
-      </property>
-     </widget>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="gridLayoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>10</y>
-     <width>301</width>
-     <height>241</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="statusUpdatesLayout">
-    <item row="0" column="0">
-     <widget class="QScrollArea" name="statusUpdateScrollArea">
-      <property name="widgetResizable">
-       <bool>true</bool>
-      </property>
-      <widget class="QLabel" name="statusUpdatesLabel">
-       <property name="geometry">
-        <rect>
-         <x>0</x>
-         <y>0</y>
-         <width>297</width>
-         <height>237</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>Welcome to Jigsaw</string>
-       </property>
-       <property name="wordWrap">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </widget>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="iterationLayoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>321</x>
-     <y>110</y>
-     <width>188</width>
-     <height>59</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="iterationSigma0Layout">
-    <item row="0" column="0">
-     <widget class="QLabel" name="iterationLabel">
-      <property name="text">
-       <string>Iteration</string>
-      </property>
-      <property name="textFormat">
-       <enum>Qt::PlainText</enum>
-      </property>
-      <property name="alignment">
-       <set>Qt::AlignCenter</set>
-      </property>
-     </widget>
-    </item>
-    <item row="0" column="1">
-     <widget class="QLabel" name="sigma0Label">
-      <property name="text">
-       <string>sigma0</string>
-      </property>
-      <property name="alignment">
-       <set>Qt::AlignCenter</set>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="0">
-     <widget class="QLCDNumber" name="iterationLcdNumber">
-      <property name="minimumSize">
-       <size>
-        <width>90</width>
-        <height>35</height>
-       </size>
-      </property>
-      <property name="frameShadow">
-       <enum>QFrame::Raised</enum>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="1">
-     <widget class="QLCDNumber" name="sigma0LcdNumber">
-      <property name="minimumSize">
-       <size>
-        <width>90</width>
-        <height>35</height>
-       </size>
-      </property>
-      <property name="frameShadow">
-       <enum>QFrame::Raised</enum>
-      </property>
-     </widget>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>JigsawDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>JigsawDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/isis/src/qisis/objs/JigsawDialog/JigsawDialog.cpp b/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.cpp
similarity index 51%
rename from isis/src/qisis/objs/JigsawDialog/JigsawDialog.cpp
rename to isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.cpp
index 83ba5a4c711f4fc15966a0f6ec8f0411ff11df7f..1a65dcc084391765ecf3ea25e981ffa3bfa5e5be 100644
--- a/isis/src/qisis/objs/JigsawDialog/JigsawDialog.cpp
+++ b/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.cpp
@@ -1,6 +1,7 @@
-#include "JigsawDialog.h"
+#include "JigsawRunWidget.h"
 
 #include <QtConcurrent>
+#include <QCloseEvent>
 #include <QDebug>
 #include <QDir>
 #include <QFuture>
@@ -22,22 +23,22 @@
 #include "iTime.h"
 #include "Process.h"
 #include "Project.h"
-#include "ui_JigsawDialog.h"
+#include "ui_JigsawRunWidget.h"
 
 namespace Isis {
 
   /**
    * @brief Constructor.
    *
-   * Creates a dialog for running a jigsaw (bundle adjustment) and changing the solve settings.
+   * Creates a widget for running a jigsaw (bundle adjustment) and changing the solve settings.
    *
-   * @param Project *project Pointer to the project this dialog belongs to.
+   * @param Project *project Pointer to the project this widget belongs to.
    * @param QWidget *parent Pointer to parent widget.
    */
-  JigsawDialog::JigsawDialog(Project *project, QWidget *parent) :
-      QDialog(parent), m_ui(new Ui::JigsawDialog) {
+  JigsawRunWidget::JigsawRunWidget(Project *project, QWidget *parent) : m_ui(new Ui::JigsawRunWidget) {
     m_project = project;
     m_selectedControl = NULL;
+    m_bundleThread = NULL;
     init();
   }
 
@@ -45,23 +46,26 @@ namespace Isis {
   /**
    * @brief Constructor that takes bundle settings and a selected control.
    *
-   * Creates a dialog after the jigsaw solve settings have been set up and a control has been
+   * Creates a widget after the jigsaw solve settings have been set up and a control has been
    * selected.
    *
-   * @param Project *project Pointer to the project this dialog belongs to.
-   * @param BundleSettingsQsp bundleSettings Settings to give to this dialog to use for a jigsaw.
+   * @param Project *project Pointer to the project this widget belongs to.
+   * @param BundleSettingsQsp bundleSettings Settings to give to this widget to use for a jigsaw.
    * @param Control *selectedControl Pointer to the selected control to adjust.
    * @param QWidget *parent Pointer to the parent widget.
    */
-  JigsawDialog::JigsawDialog(Project *project,
+  JigsawRunWidget::JigsawRunWidget(Project *project,
                              BundleSettingsQsp bundleSettings,
                              Control *selectedControl,
-                             QWidget *parent) : QDialog(parent), m_ui(new Ui::JigsawDialog) {
+                             QString outputControlFileName,
+                             QWidget *parent) : m_ui(new Ui::JigsawRunWidget) {
 
     m_project = project;
     m_bundleSettings = bundleSettings;
     m_selectedControl = selectedControl;
     m_selectedControlName = FileName(selectedControl->fileName()).name();
+    m_outputControlName = outputControlFileName;
+    m_bundleThread = NULL;
     init();
   }
 
@@ -71,44 +75,18 @@ namespace Isis {
    *
    * Delegate method that helps the constructors. This is used to reduce repeated code.
    */
-  void JigsawDialog::init() {
+  void JigsawRunWidget::init() {
     m_ui->setupUi(this);
 
-    // Note: The buttons are added to the UI setup from the JigsawDialog.ui file.
+    // Note: The buttons are added to the UI setup from the JigsawRunWidget.ui file.
     // These could have been added to the UI file itself (as XML).
 
-    // Three buttons: Accept, Reject, Close. Initially only close is enabled.
-    // Close is only disabled when a bundle is running.
-    // After a bundle is successfully run, reject and accept are enabled.
-    // If aborting a bundle, only close will be enabled.
-    m_accept = new QPushButton(tr("&Accept"));
-    m_reject = new QPushButton(tr("&Reject"));
-    m_close = new QPushButton(tr("&Close"));
-    m_accept->setEnabled(false);
-    m_reject->setEnabled(false);
-    m_close->setEnabled(true);
-
-    // Add tool tips to the buttons
-    m_accept->setToolTip(tr("Accept the bundle results and save them to the project."));
-    m_reject->setToolTip(tr("Reject and discard the bundle results. This resets the dialog."));
-    m_close->setToolTip(tr("Close this dialog."));
-
-    // Add the buttons to the QDialogButtonBox defined in the UI file.
-    // Note that according to the Qt doc'n for QDialogButtonBox, addButton() causes the
-    // dialog box to take ownership of the QPushButton's, so we don't manually manage their memory.
-    m_ui->buttonBox->addButton(m_accept, QDialogButtonBox::ActionRole);
-    m_ui->buttonBox->addButton(m_reject, QDialogButtonBox::ActionRole);
-    m_ui->buttonBox->addButton(m_close, QDialogButtonBox::AcceptRole);
-
-    // Accept will handle saving the results.
-    connect(m_accept, SIGNAL(clicked(bool)),
-           this, SLOT(acceptBundleResults()));
-    // Reject will handle discarding the results.
-    connect(m_reject, SIGNAL(clicked(bool)),
-           this, SLOT(rejectBundleResults()));
+
+    // After a bundle is successfully run, accept is enabled.
+    m_ui->JigsawRunButton->setEnabled(false);
 
     m_bundleAdjust = NULL;
-    m_bundleSolutionInfo = NULL;
+//    m_bundleSolutionInfo = NULL;
 
     m_bRunning = false;
 
@@ -117,42 +95,40 @@ namespace Isis {
       m_ui->useLastSettings->setEnabled(false);
     }
 
-    m_ui->iterationLcdNumber->setDigitCount(3);
-
-    m_ui->sigma0LcdNumber->setMode(QLCDNumber::Dec);
-    m_ui->sigma0LcdNumber->setDigitCount(5);
-
     QString lastSettingsToolTip("Use the settings from the most recently accepted bundle adjust.");
     QString lastSettingsWhat("When checked, the settings from the most recently accepted bundle "
                              "adjust (i.e. the most recent bundle results in the project) will be "
                              "used for running the next bundle adjust when \"Run\" is clicked.");
     m_ui->useLastSettings->setToolTip(lastSettingsToolTip);
     m_ui->useLastSettings->setWhatsThis(lastSettingsWhat);
-
-    setWindowFlags(Qt::WindowStaysOnTopHint);
   }
 
 
   /**
    * Destructor.
    */
-  JigsawDialog::~JigsawDialog() {
-    if (m_bundleSolutionInfo) {
-      delete m_bundleSolutionInfo;
-    }
+  JigsawRunWidget::~JigsawRunWidget() {
+//    if (m_bundleSolutionInfo) {
+//      delete m_bundleSolutionInfo;
+//      m_bundleSolutionInfo = NULL;
+//    }
     if (m_bundleAdjust) {
-      delete m_bundleAdjust;
-      m_bundleAdjust = NULL;
+      m_bundleAdjust->deleteLater();
+      m_bundleAdjust = NULL;    
+    }
+    if (m_bundleThread) {
+      m_bundleThread->quit();
+      m_bundleThread->deleteLater();
+      m_bundleThread = NULL;
     }
     if (m_ui) {
       delete m_ui;
+      m_ui = NULL;
     }
-    m_bundleSolutionInfo = NULL;
-    m_ui = NULL;
   }
 
 
-  void JigsawDialog::on_JigsawSetupButton_pressed() {
+  void JigsawRunWidget::on_JigsawSetupButton_clicked() {
 
     // Each time the SetUp button is pressed, create JigsawSetupDialog object with
     // project,
@@ -167,7 +143,14 @@ namespace Isis {
     // We want to use the current settings if not use the most recently accepted bundle settings.
     // This allows user to click "Setup", make changes, "OK", then click "Setup", and those changes
     // are present in the setup dialog.
-    if (m_bundleSettings && !m_ui->useLastSettings->isChecked()) {
+    if (m_ui->useLastSettings->isChecked() && m_project->bundleSolutionInfo().size() > 0) {
+      QList<BundleSolutionInfo *> bundleSolutionInfo = m_project->bundleSolutionInfo();
+      BundleSettingsQsp lastBundleSettings = (bundleSolutionInfo.last())->bundleSettings();
+      setupdlg.loadSettings(lastBundleSettings);
+      // We also tell the setup dialog what the last selected control is.
+      setupdlg.selectControl(m_selectedControlName);
+    }
+    else if (m_bundleSettings) {
       setupdlg.loadSettings(m_bundleSettings);
       // We also tell the setup dialog what the last selected control is.
       setupdlg.selectControl(m_selectedControlName);
@@ -175,18 +158,20 @@ namespace Isis {
 
     if (setupdlg.exec() == QDialog::Accepted) {
       m_selectedControlName = setupdlg.selectedControlName();
+      m_outputControlName = setupdlg.outputControlName();
       m_selectedControl = setupdlg.selectedControl();
       m_bundleSettings = setupdlg.bundleSettings();
       // The settings have been modified, might be misleading to keep this check after setup.
       m_ui->useLastSettings->setChecked(false);
+      m_ui->JigsawRunButton->setEnabled(true);
     }
   }
 
 
-  void JigsawDialog::on_JigsawRunButton_clicked() {
+  void JigsawRunWidget::on_JigsawRunButton_clicked() {
     // Once a bundle is run, the previous results cannot be accepted or rejected.
-    m_accept->setEnabled(false);
-    m_reject->setEnabled(false);
+    m_ui->JigsawAcceptButton->setEnabled(false);
+    m_ui->statusOutputLabel->setText("Initialization");
 
     if (!m_bRunning) {
       // ??? warning dialogs ???
@@ -209,13 +194,14 @@ namespace Isis {
          }
 
          // Grab the control name that was used in that bundle adjustment.
-         m_selectedControlName = FileName(bundleSolutionInfo.last()->controlNetworkFileName()).name();
+         m_selectedControlName
+             = FileName(bundleSolutionInfo.last()->inputControlNetFileName()).name();
       }
 
       // Clear the dialog displays.
       clearDialog();
 
-      QThread *bundleThread = new QThread;
+      m_bundleThread = new QThread;
 
       // Make sure to clean up any previously run bundle adjusts.
       if (m_bundleAdjust) {
@@ -226,7 +212,7 @@ namespace Isis {
       m_bundleAdjust = new BundleAdjust(m_bundleSettings, *m_selectedControl, m_project->images(),
                                         false);
 
-      m_bundleAdjust->moveToThread(bundleThread);
+      m_bundleAdjust->moveToThread(m_bundleThread);
 
       // Track the status updates bundle adjust gives and update the dialog.
       connect( m_bundleAdjust, SIGNAL( statusUpdate(QString) ),
@@ -237,11 +223,17 @@ namespace Isis {
                this, SLOT( errorString(QString) ) );
 
       // Update the iteration dialog element when the bundle updates its iteration count.
-      connect( m_bundleAdjust, SIGNAL( iterationUpdate(int, double) ),
-               this, SLOT( updateIterationSigma0(int, double) ) );
+      connect( m_bundleAdjust, SIGNAL( iterationUpdate(int) ),
+               this, SLOT( updateIteration(int) ) );
+
+      connect( m_bundleAdjust, SIGNAL( pointUpdate(int) ),
+               this, SLOT( updatePoint(int) ) );
+
+      connect( m_bundleAdjust, SIGNAL( statusBarUpdate(QString) ),
+               this, SLOT( updateStatus(QString) ) );
 
       // When we start the bundle thread, run the bundle adjustment.
-      connect( bundleThread, SIGNAL( started() ),
+      connect( m_bundleThread, SIGNAL( started() ),
                m_bundleAdjust, SLOT( solveCholesky() ) );
 
       // When the bundle adjust says results are ready, we can allow the dialog to update the
@@ -249,89 +241,41 @@ namespace Isis {
       connect( m_bundleAdjust, SIGNAL( resultsReady(BundleSolutionInfo *) ),
                this, SLOT( bundleFinished(BundleSolutionInfo *) ) );
 
-      // Schedule the bundle thread for deletion when it finishes.
-      connect( bundleThread, SIGNAL( finished() ),
-               bundleThread, SLOT( deleteLater() ) );
-
       // ken testing
       // Notify the dialog that the bundle thread is finished, and update the gui elements.
-      connect( bundleThread, SIGNAL( finished() ),
+      connect( m_bundleThread, SIGNAL( finished() ),
                this, SLOT( notifyThreadFinished() ) );
 
       // Tell the thread to quit (stop) when the bundle adjust finishes (successfully or not)
       connect( m_bundleAdjust, SIGNAL( finished() ),
-               bundleThread, SLOT( quit() ) );
+               m_bundleThread, SLOT( quit() ) );
 
-      bundleThread->start();
+      m_ui->imagesLcdNumber->display(m_bundleAdjust->numberOfImages());
+      m_ui->pointsLcdNumber->display(m_bundleAdjust->controlNet()->GetNumPoints());
+      m_ui->measuresLcdNumber->display(m_bundleAdjust->controlNet()->GetNumMeasures());
+
+      m_bundleThread->start();
 
       // change "Run" button text to "Abort" (or maybe pause)
       m_bRunning = true;
-      m_close->setEnabled(false);
       m_ui->JigsawRunButton->setText("&Abort");
       update();
     }
     else {
       // Make sure to abort the bundle if it is currently running.
-      m_bundleAdjust->abortBundle();
-      m_bRunning = false;
       m_ui->JigsawRunButton->setText("&Aborting...");
+      m_ui->statusOutputLabel->setText("Aborting...");
+      m_bundleAdjust->abortBundle();
       update();
     }
   }
 
 
   /**
-   * Constructs a image copier functor for copying images used in the bundle adjustment to the
-   * bundle solution info results (when the bundle is accepted).
-   */
-  JigsawDialog::CopyImageToResultsFunctor::CopyImageToResultsFunctor(const QDir &destination) {
-    m_destinationFolder = destination;
-  }
-
-
-  /**
-   * Destructor.
-   */
-  JigsawDialog::CopyImageToResultsFunctor::~CopyImageToResultsFunctor() {
-    m_destinationFolder = QDir();
-  }
-
-
-  /**
-   * @brief Callable operator that copies an image to the bundle solution info results.
-   *
-   * This makes the functor callable - this will copy the passed FileName and return a pointer
-   * to the newly copied external cube.
-   *
-   * @param const FileName &image File name of the image to create an external copy of.
-   *
-   * @return Cube* Returns a pointer to the external cube copy. Returns NULL if an error
-   *               occurs.
-   */
-  Cube *JigsawDialog::CopyImageToResultsFunctor::operator()(const FileName &image) {
-    try {
-      // Get the destination folder and create that path.
-      FileName destination(QFileInfo(m_destinationFolder, image.name()).absoluteFilePath());
-      m_destinationFolder.mkpath(destination.path());
-
-      Cube originalCube(image, "r");
-      return originalCube.copy(destination, CubeAttributeOutput("+External"));
-    }
-    // Error tracking should be more robust, see ImportImagesWorkOrder.
-    catch (IException &e) {
-      std::cout << "\nerror: " << e.what();
-      return NULL;
-    }
-  }
-
-
-  /**
-   * Accepts the bundle results and saves them to the project. The "Accept" and "Reject" buttons
-   * will be disabled.
+   * Accepts the bundle results and saves them to the project. The "Accept" button will be disabled.
    */
-  void JigsawDialog::acceptBundleResults() {
-    m_accept->setEnabled(false);
-    m_reject->setEnabled(false);
+  void JigsawRunWidget::on_JigsawAcceptButton_clicked() {
+    m_ui->JigsawAcceptButton->setEnabled(false);
 
     // create bundle results folder
     QString runTime = m_bundleSolutionInfo->runTime();
@@ -348,83 +292,96 @@ namespace Isis {
     //  Write text summary file
     m_bundleSolutionInfo->outputText();
 
-    m_project->addBundleSolutionInfo( new BundleSolutionInfo(*m_bundleSolutionInfo) );
-
-    // create output control net
-    // Write the new jigged control net with correct path to results folder + runtime
-    FileName jiggedControlName(m_project->bundleSolutionInfoRoot() + "/" + runTime + "/" +
-                               FileName(m_bundleSolutionInfo->controlNetworkFileName()).name());
-
-    m_bundleSolutionInfo->bundleResults().outputControlNet()->Write(jiggedControlName.toString());
+    // create output control net file name
+    FileName outputControlName;
+    if (!m_outputControlName.isEmpty()) {
+      outputControlName
+          = FileName(m_project->bundleSolutionInfoRoot() + "/" + runTime + "/" +
+                     m_outputControlName);
+    }
+    else {
+      outputControlName
+          = FileName(m_project->bundleSolutionInfoRoot() + "/" + runTime + "/Out-" + runTime + "-" +
+                     FileName(m_bundleSolutionInfo->inputControlNetFileName()).name());
+    }
 
-    // Iterate through all of the image lists (the "imports" in the project).
-    QList<ImageList *> imageLists = m_bundleSolutionInfo->imageList();
-    foreach (ImageList *imageList, imageLists) {
-      // Keep track of the file names of the images that were used in the bundle.
-      QStringList imagesToCopy;
-      int temp = 1;
-      if (!imageList->name().isEmpty()) {
-        imageList->setName("import" + QString::number(temp));
-      }
-      // Now, we iterate through each image in the current image list ("import"), and we determine
-      // the location of the image and where to copy it to (as an ecub).
-      foreach (Image *image, *imageList) {
-        FileName original(image->fileName());
-        // Update our list of tracked file names for the images we are going to copy.
-        imagesToCopy.append(original.expanded());
+    // Write output control net with correct path to results folder + runtime
+    m_bundleSolutionInfo->bundleResults().outputControlNet()->Write(outputControlName.toString());
+
+    // create Control with output control net and add to m_bundleSolutionInfo
+    m_bundleSolutionInfo->setOutputControl(new Control(m_project, outputControlName.expanded()));
+
+    if (m_ui->detachedLabelsCheckBox->isChecked()) {
+      // Iterate through all of the image lists (the "imports" in the project).
+      QList<ImageList *> imageLists = m_bundleSolutionInfo->imageList();
+      foreach (ImageList *imageList, imageLists) {
+        // Keep track of the file names of the images that were used in the bundle.
+        QStringList imagesToCopy;
+
+        // Now, we iterate through each image in the current image list ("import"), and we determine
+        // the location of the image and where to copy it to (as an ecub).
+        foreach (Image *image, *imageList) {
+          FileName original(image->fileName());
+          // Update our list of tracked file names for the images we are going to copy.
+          imagesToCopy.append(original.expanded());
+        }
+        // Concurrently copy the bundled images as ecub's to the bundle solution info results.
+        CopyImageToResultsFunctor copyImage(m_project->bundleSolutionInfoRoot() + "/" +
+                                            m_bundleSolutionInfo->runTime() + "/images/" +
+                                            imageList->name());
+        QFuture<Cube *> copiedCubes = QtConcurrent::mapped(imagesToCopy, copyImage);
+
+        // Prepare for our adjusted images (ecubs)
+        ImageList *adjustedImages = new ImageList(imageList->name(), imageList->path());
+
+        // Update the adjusted images' labels
+        for (int i = 0; i < imagesToCopy.size(); i++) {
+          Cube *ecub = copiedCubes.resultAt(i);
+          if (ecub) {
+            Process propagateHistory;
+            propagateHistory.SetInputCube(ecub);
+
+            // check for existing polygon, if exists delete it
+            if (ecub->label()->hasObject("Polygon")) {
+              ecub->label()->deleteObject("Polygon");
+            }
+
+            // check for CameraStatistics Table, if exists, delete
+            for (int iobj = 0; iobj < ecub->label()->objects(); iobj++) {
+              PvlObject obj = ecub->label()->object(iobj);
+              if (obj.name() != "Table") continue;
+              if (obj["Name"][0] != QString("CameraStatistics")) continue;
+              ecub->label()->deleteObject(iobj);
+              break;
+            }
+
+            // Timestamp and propagate the instrument pointing table and instrument position table
+            QString bundleTimestamp = "Jigged = " + m_bundleSolutionInfo->runTime();
+            Table cMatrix = m_bundleAdjust->cMatrix(i);
+            Table spVector = m_bundleAdjust->spVector(i);
+            cMatrix.Label().addComment(bundleTimestamp);
+            spVector.Label().addComment(bundleTimestamp);
+            ecub->write(cMatrix);
+            ecub->write(spVector);
+            // The ecub is now adjusted, add this to our list of adjusted images
+            Image *newImage = new Image(ecub);
+            adjustedImages->append(newImage);
+            newImage->closeCube();
+          }
+        }
+        // Tell the BundleSolutionInfo what the adjusted images are
+        m_bundleSolutionInfo->addAdjustedImages(adjustedImages);
       }
-      // Concurrently copy the bundled images as ecub's to the bundle solution info results.
-      CopyImageToResultsFunctor copyImage(m_project->bundleSolutionInfoRoot() + "/" +
-                                          m_bundleSolutionInfo->runTime() + "/images/" +
-                                          imageList->name());
-      // Do we need to release the memory for these cubes?
-      // TLS 2017-05-15  I commented following 5 lines of code.  They are causing compile warnings
-      // and are not currently doing anything.  Where are updated cubes written?
-//    QFuture<Cube *> copiedCubes = QtConcurrent::mapped(imagesToCopy, copyImage);
-//    for (int i = 0; i < imagesToCopy.size(); i++) {
-//      Cube *c = copiedCubes.resultAt(i);
-//      Table matrix = m_bundleAdjust->cMatrix(i);
-//    }
+      
     }
 
+    // Tell the project about the BundleSolutionInfo
+    // m_project->addBundleSolutionInfo( new BundleSolutionInfo(*m_bundleSolutionInfo) );
+    m_project->addBundleSolutionInfo(m_bundleSolutionInfo);
+
     // Make sure that when we add our results, we let the use last settings box be checkable.
     m_ui->useLastSettings->setEnabled(true);
-    //  Once the bundle has been accepted, re-enable the close button
-    m_close->setEnabled(true);
-
-      //TODO: move correlation matrix to correct position in project directory
-  //
-  //       for (int i = 0; i < bundleAdjustment.images(); i++) {
-  //         Process p;
-  //         CubeAttributeInput inAtt;
-  //  4-18-2017 TLS  bundleAdjustment.fileName is an .ecub.  code encompassed by my comment
-  //                 is test code.
-  //         Cube *c = p.SetInputCube(bundleAdjustment.fileName(i), inAtt, ReadWrite);
-  //         //check for existing polygon, if exists delete it
-  //         if (c->label()->hasObject("Polygon")) {
-  //           c->label()->deleteObject("Polygon");
-  //         }
-  //
-  //         // check for CameraStatistics Table, if exists, delete
-  //         for (int iobj = 0; iobj < c->label()->objects(); iobj++) {
-  //           PvlObject obj = c->label()->object(iobj);
-  //           if (obj.name() != "Table") continue;
-  //           if (obj["Name"][0] != QString("CameraStatistics")) continue;
-  //           c->label()->deleteObject(iobj);
-  //           break;
-  //         }
-  //
-  //         //  Get Kernel group and add or replace LastModifiedInstrumentPointing
-  //         //  keyword.
-  //         Table cmatrix = bundleAdjustment.cMatrix(i);
-  //         QString jigComment = "Jigged = " + Isis::iTime::CurrentLocalTime();
-  //         cmatrix.Label().addComment(jigComment);
-  //         Table spvector = bundleAdjustment.spVector(i);
-  //         spvector.Label().addComment(jigComment);
-  //         c->write(cmatrix);
-  //         c->write(spvector);
-  //         p.WriteHistory(*c);
-  //       }
+
   //       m_ui->convergenceStatusLabel->setText("Bundle converged, camera pointing updated");
     //This bundle was bad so we should delete all remenants.
 
@@ -437,27 +394,78 @@ namespace Isis {
 
 
   /**
-   * Rejects the bundle results and discards them. The "Accept" and "Reject" buttons will be
-   * disabled.
+   * Constructs a image copier functor for copying images used in the bundle adjustment to the
+   * bundle solution info results (when the bundle is accepted).
+   */
+  JigsawRunWidget::CopyImageToResultsFunctor::CopyImageToResultsFunctor(const QDir &destination) {
+    m_destinationFolder = destination;
+  }
+
+
+  /**
+   * Destructor.
+   */
+  JigsawRunWidget::CopyImageToResultsFunctor::~CopyImageToResultsFunctor() {
+    m_destinationFolder = QDir();
+  }
+
+
+  /**
+   * @brief Callable operator that copies an image to the bundle solution info results.
+   *
+   * This makes the functor callable - this will copy the passed FileName and return a pointer
+   * to the newly copied external cube.
+   *
+   * @param const FileName &image File name of the image to create an external copy of.
+   *
+   * @return Cube* Returns a pointer to the external cube copy. Returns NULL if an error
+   *               occurs.
    */
-  void JigsawDialog::rejectBundleResults() {
-    // TODO should there be a prompt to user (are you sure?) -- Annoying?
-    // TODO Add tooltip/what'sthis for the buttons!!!! (CTR)
-    // Disable the "Accept" and "Reject" buttons, enable the "Close" button
-    m_accept->setEnabled(false);
-    m_reject->setEnabled(false);
-    m_close->setEnabled(true);
-
-    // Clear the dialog so the lcd's are 0 and the status text is cleared.
-    clearDialog();
-    QString statusText("Bundle Rejected.\n\n");
-    m_ui->statusUpdatesLabel->setText(statusText);
-
-    // Cleanup the results (bundle solution info)
-    // How does this affect m_bundleSettings or m_bundleAdjustment?
-    // How does this affect using the last (most recent) settings for the run?
-    delete m_bundleSolutionInfo;
-    m_bundleSolutionInfo = NULL;
+  Cube *JigsawRunWidget::CopyImageToResultsFunctor::operator()(const FileName &image) {
+    try {
+      Cube *result = NULL;
+
+      // Get the destination folder and create that path.
+      FileName destination(QFileInfo(m_destinationFolder, image.name()).absoluteFilePath());
+      m_destinationFolder.mkpath(destination.path());
+
+      // The input FileName will be referencing an imported ecub file.
+      // Need to get the .cub file (via Cube::externalCubeFileName) to copy.
+      // This method returns whatever value is set for the ^DnFile keyword... will not contain
+      // a path if the .ecub and .cub are in the same directory.
+      Cube importCube(image, "r");
+      FileName dnCubeFileName;
+      // The .ecub's ^DnFile is cubeFileName.cub (.ecub sitting next to .cub)
+      if (importCube.externalCubeFileName().path() == ".") {
+
+        QDir relative(m_destinationFolder.absolutePath());
+        dnCubeFileName = FileName(QDir(image.path()).canonicalPath() + "/" + importCube.externalCubeFileName().name());
+        QString s = relative.relativeFilePath(dnCubeFileName.toString());
+        // Locate the DnFile cube by using the input image's (ecub) path and the DnFile name (cub)
+        //dnCubeFileName = FileName(image.path() + "/" + importCube.externalCubeFileName().name());
+        // WHY DO WE NEED TO USE QDIR canonical path? why is the image.path relative and not abs?
+        //dnCubeFileName = FileName(s);
+        dnCubeFileName = FileName(QDir(image.path()).canonicalPath() + "/" +
+                                  importCube.externalCubeFileName().name());
+        Cube dnCube(dnCubeFileName, "r");
+
+
+        result = dnCube.copy(destination, CubeAttributeOutput("+External"));
+        result->relocateDnData(s);
+      }
+      // The .ecub's ^DnFile is an absolute path (.ecub potentially not located next to .cub)
+      else {
+        dnCubeFileName = importCube.externalCubeFileName();
+        Cube dnCube(dnCubeFileName, "r");
+        result = dnCube.copy(destination, CubeAttributeOutput("+External"));
+      }
+      return result;
+    }
+    // Error tracking should be more robust, see ImportImagesWorkOrder.
+    catch (IException &e) {
+      std::cout << "\nerror: " << e.what();
+      return NULL;
+    }
   }
 
 
@@ -466,10 +474,20 @@ namespace Isis {
    * reset the lcd displays to 0, and update the scroll on the scroll bar. This does NOT affect
    * the state of the buttons.
    */
-  void JigsawDialog::clearDialog() {
-    m_ui->iterationLcdNumber->display(0);
-    m_ui->sigma0LcdNumber->display(0);
+  void JigsawRunWidget::clearDialog() {
     m_ui->statusUpdatesLabel->clear();
+    m_ui->iterationLcdNumber->display(0);
+    m_ui->pointLcdNumber->display(0);
+
+    m_ui->imagesLcdNumber->display(0);
+    m_ui->pointsLcdNumber->display(0);
+    m_ui->measuresLcdNumber->display(0);
+
+    m_ui->rmsAdjustedPointSigmasGroupBox->setEnabled(false);
+    m_ui->latitudeLcdNumber->display(0);
+    m_ui->longitudeLcdNumber->display(0);
+    m_ui->radiusLcdNumber->display(0);
+
     updateScrollBar();
   }
 
@@ -477,7 +495,7 @@ namespace Isis {
   /**
    * Updates the scroll bar to position to its maximum setting (the bottom).
    */
-  void JigsawDialog::updateScrollBar() {
+  void JigsawRunWidget::updateScrollBar() {
     m_ui->statusUpdateScrollArea->verticalScrollBar()->setSliderPosition(
         m_ui->statusUpdateScrollArea->verticalScrollBar()->maximum());
   }
@@ -489,7 +507,7 @@ namespace Isis {
    *
    * @param status Current status of bundle.
    */
-  void JigsawDialog::outputBundleStatus(QString status) {
+  void JigsawRunWidget::outputBundleStatus(QString status) {
     QString updateStr = "\n" + status;
 
     m_ui->statusUpdatesLabel->setText( m_ui->statusUpdatesLabel->text().append(updateStr) );
@@ -505,17 +523,13 @@ namespace Isis {
    *
    * @param error Error status of bundle.
    */
-  void JigsawDialog::errorString(QString error) {
+  void JigsawRunWidget::errorString(QString error) {
     QString errorStr = "\n" + error;
-//  qDebug()<<"JIgsawDialog::errorString errorStr = "<<errorStr;
     m_ui->statusUpdatesLabel->setText( m_ui->statusUpdatesLabel->text().append(errorStr) );
 
     updateScrollBar();
 
     update();
-
-    //  Re-enable the close button
-    m_close->setEnabled(true);
   }
 
 
@@ -524,7 +538,7 @@ namespace Isis {
    *
    * @param error Error status of bundle.
    */
-  void JigsawDialog::reportException(QString exception) {
+  void JigsawRunWidget::reportException(QString exception) {
     QString exceptionStr = "\n" + exception;
     m_ui->statusUpdatesLabel->setText( m_ui->statusUpdatesLabel->text().append(exceptionStr) );
 
@@ -539,31 +553,78 @@ namespace Isis {
    *
    * @param error Error status of bundle.
    */
-  void JigsawDialog::updateIterationSigma0(int iteration, double sigma0) {
+  void JigsawRunWidget::updateIteration(int iteration) {
     m_ui->iterationLcdNumber->display(iteration);
-    m_ui->sigma0LcdNumber->display(sigma0);
+    update();
+  }
+
+
+    /**
+   * Update the label or text edit area with the error message by appending to list and refreshing.
+   *
+   * @param error Error status of bundle.
+   */
+  void JigsawRunWidget::updatePoint(int point) {
+    m_ui->pointLcdNumber->display(point);
+    update();
+  }
 
+
+      /**
+   * Update the label or text edit area with the error message by appending to list and refreshing.
+   *
+   * @param error Error status of bundle.
+   */
+  void JigsawRunWidget::updateStatus(QString status) {
+    m_ui->statusOutputLabel->setText(status);
     update();
   }
 
 
   /**
-   * @brief Notifies the dialog that the bundle thread has finished.
+   * @brief Notifies the widget that the bundle thread has finished.
    *
-   * This slot is used to notify the dialog that the bundle has finished. The bundle thread
+   * This slot is used to notify the widget that the bundle has finished. The bundle thread
    * finishes when the bundle adjust finishes (either successfully or unsuccessfully, or if the
    * user aborts the run).
    */
-  void JigsawDialog::notifyThreadFinished() {
+  void JigsawRunWidget::notifyThreadFinished() {
     //QString str = "\nThread Finished signal received";
     //m_ui->statusUpdatesLabel->setText( m_ui->statusUpdatesLabel->text().append(str) );
 
     // set Run button text back to "Run"
     m_ui->JigsawRunButton->setText("&Run");
+
+    if (m_bundleAdjust->isAborted()) {
+      m_ui->statusOutputLabel->setText("Aborted");
+    }
+
+    if (m_bundleSettings->errorPropagation()) {
+      m_ui->rmsAdjustedPointSigmasGroupBox->setEnabled(true);
+      m_ui->latitudeLcdNumber->display(
+                              m_bundleSolutionInfo->bundleResults().sigmaCoord1StatisticsRms());
+      m_ui->longitudeLcdNumber->display(
+                              m_bundleSolutionInfo->bundleResults().sigmaCoord2StatisticsRms());
+
+      if (m_bundleSettings->solveRadius()) {
+        m_ui->radiusLcdNumber->display(
+                              m_bundleSolutionInfo->bundleResults().sigmaCoord3StatisticsRms());
+        m_ui->radiusLcdNumber->setEnabled(true);
+        m_ui->radiusLcdLabel->setEnabled(true);
+      }
+      else {
+        m_ui->radiusLcdNumber->setEnabled(false);
+        m_ui->radiusLcdLabel->setEnabled(false);
+      }
+      
+    }
+    else {
+      m_ui->rmsAdjustedPointSigmasGroupBox->setEnabled(false);
+    }
+
     // Since this slot is invoked when the thread finishes, the bundle adjustment is no longer
     // running.
     m_bRunning = false;
-
     updateScrollBar();
 
     update();
@@ -579,14 +640,43 @@ namespace Isis {
    *
    * @param bundleSolutionInfo The results of the bundle run.
    */
-  void JigsawDialog::bundleFinished(BundleSolutionInfo *bundleSolutionInfo) {
+  void JigsawRunWidget::bundleFinished(BundleSolutionInfo *bundleSolutionInfo) {
 
     bundleSolutionInfo->setRunTime( Isis::iTime::CurrentLocalTime().toLatin1().data() );
     m_bundleSolutionInfo = bundleSolutionInfo;
 
     // Since results are available, the user can accept (save) or reject(discard) the results.
-    m_accept->setEnabled(true);
-    m_reject->setEnabled(true);
+    m_ui->JigsawAcceptButton->setEnabled(true);
+  }
+
+
+  /**
+   * This method is called whenever the widget recieves a close request. If a bundle is running, the
+   * user will be asked if they want to abort the bundle. In this case, the bundle thread must be
+   * scheduled to delete when it has finished aborting. Otherwise, the event will accept. 
+   *
+   * @param event The close event being handled.
+   */
+  void JigsawRunWidget::closeEvent(QCloseEvent *event) {
+    if( m_bRunning ) {
+      QMessageBox::StandardButton resBtn = 
+          QMessageBox::question(this, 
+                                "WARNING",
+                                tr("You are about to abort the bundle adjustment. Are you sure?\n"),
+                                QMessageBox::No | QMessageBox::Yes);
+      if (resBtn != QMessageBox::Yes) { 
+        event->ignore();
+        return;
+      }
+      else if (m_bRunning) { // check m_bRunning again just in case the bundle has finished
+        // We need to wait for the bundle adjust thread to finish before deleting the
+        // JigsawRunWidget so that we dont close the widget before the thread is finished 
+        connect(m_bundleThread, SIGNAL(finished()), this, SLOT(deleteLater()));
+        m_bundleAdjust->abortBundle();
+        return;
+      }
+    }
+    event->accept();
   }
 }
 
@@ -596,7 +686,7 @@ namespace Isis {
    * 2015-08-24 Notes added: Ken Edmundson
    *
    * If a bundle is NOT currently running, we ...
-   *   1) create a QThread object (bundleThread)
+   *   1) create a QThread object (m_bundleThread)
    *   2) create a new pointer to a BundleAdjust object (m_bundleAdjust)
    *   3) move the BundleAdjust object to the QThread
    *   4) connect signals & slots to ...
diff --git a/isis/src/qisis/objs/JigsawDialog/JigsawDialog.h b/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.h
similarity index 67%
rename from isis/src/qisis/objs/JigsawDialog/JigsawDialog.h
rename to isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.h
index 2fd829b5bce6a90bdd4ddc5d8f6abfc10d69c3c5..139460ab054375f3c854252b6355279e940e7d4d 100644
--- a/isis/src/qisis/objs/JigsawDialog/JigsawDialog.h
+++ b/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.h
@@ -1,8 +1,11 @@
-#ifndef JigsawDialog_h
-#define JigsawDialog_h
+#ifndef JigsawRunWidget_h
+#define JigsawRunWidget_h
 
 #include <QDialog>
 #include <QDir>
+#include <QDockWidget>
+#include <QFrame>
+#include <QMessageBox>
 #include <QPointer>
 #include <QWidget>
 
@@ -10,10 +13,11 @@
 #include "IException.h"
 
 namespace Ui {
-  class JigsawDialog;
+  class JigsawRunWidget;
 }
 
 class QString;
+class QThread;
 
 namespace Isis {
   class BundleAdjust;
@@ -77,24 +81,53 @@ namespace Isis {
    *   @history 2017-06-14 Ken Edmundson - Write text summary file.
    *   @history 2017-07-27 Cole Neubauer - Added a project->setClean call if the bundle results are
    *                           accepted. Fixes #4960
+   *   @history 2017-11-01 Ian Humphrey - Create ecubs in the bundle results directory which contain
+   *                           updated SPICE.  Fixes #4804, #4849.
+   *   @history 2018-03-22 Ken Edmundson - Added member variable QString m_outputControlName. Added
+   *                           argument QString outputControlFileName to constructor. Modified
+   *                           acceptBundleResults method to take output control network filename
+   *                           from the JigsawSetupDialog.
+   *   @history 2018-05-22 Ken Edmundson - Modified init() method to not set m_BundleSolutionInfo to
+   *                           NULL because JigsawDialog no longer owns it. Modified destructor to
+   *                           not delete m_BundleSolutionInfo or set it to NULL. Note this is NOT
+   *                           ideal, m_BundleSolutionInfo should be a QSharedPointer, not a raw
+   *                           pointer.
+   *   @history 2018-05-31 Christopher Combs - Name changed from JigsawDialog to JigsawRunWidget.
+   *                           Now inherits from QFrame instead of QDialog. Added support for new
+   *                           workflow in which JigsawSetupDialog is only ever called from a
+   *                           button on this widget. Fixes #5428. 
+   *   @history 2018-06-14 Christopher Combs - Made changes according to new design mockup. Added 
+   *                           status bar, control net info, and rms adj point sigmas sections. 
+   *                           Removed buttons for close and reject. Now inherits from QDockWidget
+   *                           instead of QFrame, and handles close event if a bundle is running. 
+   *   @history 2018-06-15 Christopher Combs - Implemented "Write detached labels" checkbox. 
+   *                           made changes to on_JigsawAcceptButton_clicked to reflect this.
+   *   @history 2018-07-26 Tracie Sucharski - Reformated the widget to get rid of fixed sizes and
+   *                           use layouts to handle sizing instead.  Also put entire widget in
+   *                           a scrolled area.
    */
-  class JigsawDialog : public QDialog {
+  class JigsawRunWidget : public QDockWidget {
     Q_OBJECT
 
   public:
-    explicit JigsawDialog(Project *project, QWidget *parent = 0);
-    explicit JigsawDialog(Project *project,
+    explicit JigsawRunWidget(Project *project, QWidget *parent = 0);
+    explicit JigsawRunWidget(Project *project,
                           BundleSettingsQsp bundleSettings,
                           Control *selectedControl,
+                          QString outputControlFileName,
                           QWidget *parent = 0);
 
-    ~JigsawDialog();
+    ~JigsawRunWidget();
+    void closeEvent(QCloseEvent *event);
+
 
   public slots:
     void outputBundleStatus(QString status);
     void errorString(QString error);
     void reportException(QString exception);
-    void updateIterationSigma0(int iteration, double sigma0);
+    void updateIteration(int iteration);
+    void updatePoint(int point);
+    void updateStatus(QString status);
     void bundleFinished(BundleSolutionInfo *bundleSolutionInfo);
     void notifyThreadFinished();
 
@@ -104,13 +137,12 @@ namespace Isis {
     Project *m_project;
     Control *m_selectedControl;
     QString m_selectedControlName;
+    QString m_outputControlName;
     BundleSettingsQsp m_bundleSettings;
 
   private:
     bool m_bRunning; /**< Indicates whether or not the bundle adjust is running. */
-    QPushButton *m_accept; /**< Dialog's accept button that is used to save the bundle results. */
-    QPushButton *m_close; /**< Dialog's close button that is used to close the dialog. */
-    QPushButton *m_reject; /**< Dialog's reject button that is used to discard the results. */
+    QThread *m_bundleThread; /**< separate thread for running bundle adjust calculations in. */
 
     /**
      * Functor used to copy images to a specified destination directory. This is used by
@@ -132,18 +164,17 @@ namespace Isis {
     };
 
   private slots:
-    void on_JigsawSetupButton_pressed();
+    void on_JigsawSetupButton_clicked();
     void on_JigsawRunButton_clicked();
-    void acceptBundleResults();
-    void rejectBundleResults();
+    void on_JigsawAcceptButton_clicked();
     void clearDialog();
     void updateScrollBar();
 
   private:
-    /** Captures the most recent results of a bundle. JigsawDialog owns this pointer. */
+    /** Captures the most recent results of a bundle. JigsawRunWidget owns this pointer. */
     BundleSolutionInfo *m_bundleSolutionInfo;
     /** Reference to self's UI generated with QtDesigner. */
-    Ui::JigsawDialog *m_ui;
+    Ui::JigsawRunWidget *m_ui;
   };
 };
 #endif
diff --git a/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.ui b/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.ui
new file mode 100644
index 0000000000000000000000000000000000000000..c9cf01791956b605d12b205dbd18ba7e2d91dedf
--- /dev/null
+++ b/isis/src/qisis/objs/JigsawRunWidget/JigsawRunWidget.ui
@@ -0,0 +1,536 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>JigsawRunWidget</class>
+ <widget class="QDockWidget" name="JigsawRunWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>638</width>
+    <height>586</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>88</width>
+    <height>107</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>&amp;Jigsaw</string>
+  </property>
+  <widget class="QWidget" name="dockWidgetContents">
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="sizePolicy">
+    <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+     <horstretch>0</horstretch>
+     <verstretch>0</verstretch>
+    </sizepolicy>
+   </property>
+   <property name="minimumSize">
+    <size>
+     <width>0</width>
+     <height>0</height>
+    </size>
+   </property>
+   <property name="windowTitle">
+    <string>Jigsaw</string>
+   </property>
+   <property name="windowIcon">
+    <iconset>
+     <normaloff>icons/jigsaw.png</normaloff>icons/jigsaw.png</iconset>
+   </property>
+   <layout class="QVBoxLayout" name="verticalLayout_3">
+    <item>
+     <widget class="QScrollArea" name="scrollArea">
+      <property name="widgetResizable">
+       <bool>true</bool>
+      </property>
+      <widget class="QWidget" name="scrollAreaWidgetContents">
+       <property name="geometry">
+        <rect>
+         <x>0</x>
+         <y>0</y>
+         <width>618</width>
+         <height>547</height>
+        </rect>
+       </property>
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <item>
+         <layout class="QVBoxLayout" name="verticalLayout_2">
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout">
+            <item>
+             <widget class="QLabel" name="statusLabel">
+              <property name="text">
+               <string>Status:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="statusOutputLabel">
+              <property name="text">
+               <string/>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="verticalSpacer_3">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeType">
+             <enum>QSizePolicy::Preferred</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>18</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_2">
+            <item>
+             <widget class="QLabel" name="iterationLabel">
+              <property name="text">
+               <string>Iteration</string>
+              </property>
+              <property name="textFormat">
+               <enum>Qt::PlainText</enum>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLCDNumber" name="iterationLcdNumber">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="autoFillBackground">
+               <bool>true</bool>
+              </property>
+              <property name="segmentStyle">
+               <enum>QLCDNumber::Flat</enum>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="pointLabel">
+              <property name="text">
+               <string>Point</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLCDNumber" name="pointLcdNumber">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="autoFillBackground">
+               <bool>true</bool>
+              </property>
+              <property name="segmentStyle">
+               <enum>QLCDNumber::Flat</enum>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="verticalSpacer">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeType">
+             <enum>QSizePolicy::Preferred</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_3">
+            <item>
+             <widget class="QGroupBox" name="groupBox">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="autoFillBackground">
+               <bool>true</bool>
+              </property>
+              <property name="title">
+               <string>   Control Network   </string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+              <layout class="QGridLayout" name="gridLayout">
+               <item row="2" column="1">
+                <widget class="QLCDNumber" name="measuresLcdNumber">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="autoFillBackground">
+                  <bool>false</bool>
+                 </property>
+                 <property name="segmentStyle">
+                  <enum>QLCDNumber::Flat</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="1">
+                <widget class="QLCDNumber" name="pointsLcdNumber">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="autoFillBackground">
+                  <bool>false</bool>
+                 </property>
+                 <property name="segmentStyle">
+                  <enum>QLCDNumber::Flat</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="0" column="1">
+                <widget class="QLCDNumber" name="imagesLcdNumber">
+                 <property name="autoFillBackground">
+                  <bool>false</bool>
+                 </property>
+                 <property name="segmentStyle">
+                  <enum>QLCDNumber::Flat</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="0" column="0" alignment="Qt::AlignRight">
+                <widget class="QLabel" name="label_3">
+                 <property name="text">
+                  <string>Images</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="2" column="0" alignment="Qt::AlignRight">
+                <widget class="QLabel" name="label_6">
+                 <property name="text">
+                  <string>Measures</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="0" alignment="Qt::AlignRight">
+                <widget class="QLabel" name="label_5">
+                 <property name="text">
+                  <string>Points</string>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </widget>
+            </item>
+            <item>
+             <widget class="QGroupBox" name="rmsAdjustedPointSigmasGroupBox">
+              <property name="enabled">
+               <bool>true</bool>
+              </property>
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="autoFillBackground">
+               <bool>true</bool>
+              </property>
+              <property name="title">
+               <string>RMS Adj Point Sigmas</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+              <layout class="QGridLayout" name="gridLayout_2">
+               <item row="2" column="0" alignment="Qt::AlignRight">
+                <widget class="QLabel" name="radiusLcdLabel">
+                 <property name="enabled">
+                  <bool>true</bool>
+                 </property>
+                 <property name="text">
+                  <string>Radius</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="0" column="0" alignment="Qt::AlignRight">
+                <widget class="QLabel" name="label_4">
+                 <property name="text">
+                  <string>Latitude</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="0" alignment="Qt::AlignRight">
+                <widget class="QLabel" name="label_7">
+                 <property name="text">
+                  <string>Longitude</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="0" column="1">
+                <widget class="QLCDNumber" name="latitudeLcdNumber">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="smallDecimalPoint">
+                  <bool>false</bool>
+                 </property>
+                 <property name="segmentStyle">
+                  <enum>QLCDNumber::Flat</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="1">
+                <widget class="QLCDNumber" name="longitudeLcdNumber">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="segmentStyle">
+                  <enum>QLCDNumber::Flat</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="2" column="1">
+                <widget class="QLCDNumber" name="radiusLcdNumber">
+                 <property name="enabled">
+                  <bool>true</bool>
+                 </property>
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="segmentStyle">
+                  <enum>QLCDNumber::Flat</enum>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+              <zorder>label_4</zorder>
+              <zorder>label_7</zorder>
+              <zorder>radiusLcdLabel</zorder>
+              <zorder>latitudeLcdNumber</zorder>
+              <zorder>longitudeLcdNumber</zorder>
+              <zorder>radiusLcdNumber</zorder>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="verticalSpacer_2">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeType">
+             <enum>QSizePolicy::Preferred</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout">
+            <item>
+             <widget class="QCheckBox" name="detachedLabelsCheckBox">
+              <property name="enabled">
+               <bool>true</bool>
+              </property>
+              <property name="text">
+               <string>Write Detached Image Labels on Accept</string>
+              </property>
+              <property name="checked">
+               <bool>true</bool>
+              </property>
+              <property name="tristate">
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QCheckBox" name="useLastSettings">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text">
+               <string>Use Last Accepted Settings</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_8">
+              <item>
+               <widget class="QPushButton" name="JigsawSetupButton">
+                <property name="text">
+                 <string>&amp;Setup</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <spacer name="horizontalSpacer_2">
+                <property name="orientation">
+                 <enum>Qt::Horizontal</enum>
+                </property>
+                <property name="sizeType">
+                 <enum>QSizePolicy::Preferred</enum>
+                </property>
+                <property name="sizeHint" stdset="0">
+                 <size>
+                  <width>40</width>
+                  <height>20</height>
+                 </size>
+                </property>
+               </spacer>
+              </item>
+              <item>
+               <widget class="QPushButton" name="JigsawRunButton">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+                <property name="text">
+                 <string>&amp;Run</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <spacer name="horizontalSpacer">
+                <property name="orientation">
+                 <enum>Qt::Horizontal</enum>
+                </property>
+                <property name="sizeType">
+                 <enum>QSizePolicy::Preferred</enum>
+                </property>
+                <property name="sizeHint" stdset="0">
+                 <size>
+                  <width>40</width>
+                  <height>20</height>
+                 </size>
+                </property>
+               </spacer>
+              </item>
+              <item>
+               <widget class="QPushButton" name="JigsawAcceptButton">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+                <property name="text">
+                 <string>Accept</string>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="verticalSpacer_4">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>18</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <widget class="QScrollArea" name="statusUpdateScrollArea">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+              <horstretch>0</horstretch>
+              <verstretch>2</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="focusPolicy">
+             <enum>Qt::NoFocus</enum>
+            </property>
+            <property name="frameShape">
+             <enum>QFrame::Box</enum>
+            </property>
+            <property name="sizeAdjustPolicy">
+             <enum>QAbstractScrollArea::AdjustIgnored</enum>
+            </property>
+            <property name="widgetResizable">
+             <bool>true</bool>
+            </property>
+            <widget class="QLabel" name="statusUpdatesLabel">
+             <property name="geometry">
+              <rect>
+               <x>0</x>
+               <y>0</y>
+               <width>594</width>
+               <height>151</height>
+              </rect>
+             </property>
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+               <horstretch>1</horstretch>
+               <verstretch>2</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Welcome to Jigsaw</string>
+             </property>
+             <property name="wordWrap">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/isis/src/qisis/objs/JigsawRunWidget/Makefile b/isis/src/qisis/objs/JigsawRunWidget/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/JigsawRunWidget/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.cpp b/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.cpp
index 1d5109eb27b7db142702882d65756bf49074c789..ced53c15e24878afdb80954cd3102a8c1659e40a 100644
--- a/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.cpp
+++ b/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.cpp
@@ -3,18 +3,28 @@
 #include <vector>
 
 #include <QDebug>
+#include <QIdentityProxyModel>
 #include <QMessageBox>
 #include <QPushButton>
+#include <QSortFilterProxyModel>
 #include <QStandardItemModel>
+#include <QItemSelection>
 
+#include "BundleObservationSolveSettings.h"
 #include "BundleSolutionInfo.h"
 #include "BundleSettings.h"
 #include "BundleTargetBody.h"
+#include "Camera.h"
 #include "Control.h"
+#include "Cube.h"
+#include "Image.h"
 #include "IString.h"
 #include "MaximumLikelihoodWFunctions.h"
 #include "Project.h"
+#include "ProjectItem.h"
+#include "ProjectItemProxyModel.h"
 #include "SpecialPixel.h"
+#include "SortFilterProxyModel.h"
 #include "ui_JigsawSetupDialog.h"
 
 namespace Isis {
@@ -28,7 +38,7 @@ namespace Isis {
     // care of in the ui setup.
 
     // For example:
-    //   radiusCheckBox is connected to pointRadiusSigmaLabel and pointRadiusSigmaLineEdit
+    //   pointRadiusSigmaCheckBox is connected to pointRadiusSigmaLineEdit
     //   outlierRejectionCheckBox is connected
     //       to outlierRejectionMultiplierLabel and outlierRejectionMultiplierLineEdit
     //
@@ -47,6 +57,11 @@ namespace Isis {
       makeReadOnly();
     }
 
+    m_bundleSettings = BundleSettingsQsp(new BundleSettings());
+
+    //connect( m_project->directory()->model(), SIGNAL(selectionChanged(QList<ProjectItem *> &)),
+    //         this, SLOT(on_projectItemSelectionChanged(const QList<ProjectItem *> &) ) );
+
     // initializations for general tab
 
     // fill control net combo box from project
@@ -57,36 +72,123 @@ namespace Isis {
 
         QVariant v = qVariantFromValue((void*)control);
 
-        m_ui->controlNetworkComboBox->addItem(control->displayProperties()->displayName(), v);
+        m_ui->inputControlNetCombo->addItem(control->displayProperties()->displayName(), v);
       }
     }
+    // add control nets from bundle solutions, if any
+    int numBundles = project->bundleSolutionInfo().size();
+    for (int i = 0; i < numBundles; i++) {
+      Control *bundleControl = project->bundleSolutionInfo().at(i)->control();
 
-    QList<BundleSolutionInfo *> bundleSolutionInfo = m_project->bundleSolutionInfo();
-    if (useLastSettings && bundleSolutionInfo.size() > 0) {
-     BundleSettingsQsp lastBundleSettings = (bundleSolutionInfo.last())->bundleSettings();
-     // Retrieve the control net name used in the last bundle adjustment.
-     // Note that this returns a fully specified path and filename, while the cnet combo box
-     // only stores file names.
-     selectControl(bundleSolutionInfo.last()->controlNetworkFileName());
-     fillFromSettings(lastBundleSettings);
+      QVariant v = qVariantFromValue((void*)bundleControl);
+
+      m_ui->inputControlNetCombo->addItem(bundleControl->displayProperties()->displayName(), v);
     }
 
-    // Update setup dialog with settings from any active (current) settings in jigsaw dialog.
+    // initialize default output control network filename
+    FileName fname = m_ui->inputControlNetCombo->currentText();
+    m_ui->outputControlNetLineEdit->setText(fname.baseName() + "-out.net");
 
     // initializations for observation solve settings tab
-    m_ui->spkSolveDegreeSpinBox_2->setValue(-1);
+    createObservationSolveSettingsTreeView();
+
+
+    // Create default settings for all of the observations
+    QList<Image *> imagesToAdd;
+    // If we have selected any project items, find the images and add them to imagesToAdd
+    if (!m_project->directory()->model()->selectedItems().isEmpty()) {
+      foreach (ProjectItem * projItem, m_project->directory()->model()->selectedItems()) {
+        if (projItem->isImage()) {
+          imagesToAdd.append(projItem->image());  
+        }
+        else if (projItem->isImageList()) {
+          for (int i = 0; i < projItem->rowCount(); i++) {
+            imagesToAdd.append(projItem->child(i)->image());  
+          }
+        }
+      }
+    }
+    // if we didnt have any images selected in the previous case, or no proj items were selected,
+    // take all images from the project tree
+    if (imagesToAdd.isEmpty()) {
+      ProjectItem *imgRoot = m_project->directory()->model()->findItemData(QVariant("Images"),0);
+      if (imgRoot) {
+        for (int i = 0; i < imgRoot->rowCount(); i++) {
+          ProjectItem * imglistItem = imgRoot->child(i);
+          for (int j = 0; j < imglistItem->rowCount(); j++) {
+            ProjectItem * imgItem = imglistItem->child(j);
+            if (imgItem->isImage()) {
+              imagesToAdd.append(imgItem->image());     
+            }
+          }
+        } 
+      }
+    }
+    
+    // create default  solve settings for supported camera types
+    BundleObservationSolveSettings defaultFramingSettings;
+    BundleObservationSolveSettings defaultLineScanSettings;
+    defaultLineScanSettings.setInstrumentPointingSettings(
+                      BundleObservationSolveSettings::AnglesVelocityAcceleration, true, 2, 2, true);
+
+
+    // sort each chosen image into its camera type 
+    foreach (Image * image, imagesToAdd) {
+      int cameraType = image->cube()->camera()->GetCameraType();
+      if (cameraType == Camera::LineScan) {
+        defaultLineScanSettings.addObservationNumber(image->observationNumber());
+      }
+      else { // assume cameraType == Camera::Framing
+        defaultFramingSettings.addObservationNumber(image->observationNumber());  
+      }
+    }
+
+    // only add defaults that have been applied
+    QList<BundleObservationSolveSettings> solveSettingsList;
+    if (defaultFramingSettings.observationNumbers().count()) 
+      solveSettingsList.append(defaultFramingSettings);
+    if (defaultLineScanSettings.observationNumbers().count())
+      solveSettingsList.append(defaultLineScanSettings);
+
+    m_bundleSettings->setObservationSolveOptions(solveSettingsList);
+
+    // Populate the solve option comboboxes
+    const QStringList positionOptions{"NONE", "POSITION", "VELOCITY", "ACCELERATION", "ALL"};
+    m_ui->positionComboBox->insertItems(0, positionOptions);
+    m_ui->positionComboBox->setCurrentIndex(0);
+
+    const QStringList pointingOptions{"NONE", "ANGLES", "VELOCITY", "ACCELERATION", "ALL"};
+    m_ui->pointingComboBox->insertItems(0, pointingOptions);
+    m_ui->pointingComboBox->setCurrentIndex(1);
+
+    // The degree solve options' minimums are -1 (set in ui file), make the -1's display as N/A
+    m_ui->spkSolveDegreeSpinBox->setSpecialValueText("N/A");
+    m_ui->ckSolveDegreeSpinBox->setSpecialValueText("N/A");
+
 
     QStringList tableHeaders;
-    tableHeaders << "coefficients" << "a priori sigma" << "units";
+    tableHeaders << "coefficients" << "description" << "units" << "a priori sigma";
     m_ui->positionAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
+    m_ui->pointingAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
 
-    m_ui->positionAprioriSigmaTable->setColumnWidth(0, fontMetrics().width(tableHeaders.at(0)));
-    m_ui->positionAprioriSigmaTable->setColumnWidth(1, fontMetrics().width(tableHeaders.at(1)));
-    m_ui->positionAprioriSigmaTable->setColumnWidth(2, fontMetrics().width(tableHeaders.at(2)));
+    // Set the default size of the columns
+    m_ui->positionAprioriSigmaTable->setColumnWidth(0, fontMetrics().width(tableHeaders.at(0)) + 10);
+    m_ui->positionAprioriSigmaTable->setColumnWidth(1, fontMetrics().width(tableHeaders.at(1)) + 10);
+    m_ui->positionAprioriSigmaTable->setColumnWidth(2, fontMetrics().width(tableHeaders.at(2)) + 10);
+    m_ui->positionAprioriSigmaTable->setColumnWidth(3, fontMetrics().width(tableHeaders.at(3)) + 10);
 
-    m_ui->pointingAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
+    m_ui->pointingAprioriSigmaTable->setColumnWidth(0, fontMetrics().width(tableHeaders.at(0)) + 10);
+    m_ui->pointingAprioriSigmaTable->setColumnWidth(1, fontMetrics().width(tableHeaders.at(1)) + 10);
+    m_ui->pointingAprioriSigmaTable->setColumnWidth(2, fontMetrics().width(tableHeaders.at(2)) + 10);
+    m_ui->pointingAprioriSigmaTable->setColumnWidth(3, fontMetrics().width(tableHeaders.at(3)) + 10);
 
 
+    // Add validators to the tables in the observation solve settings tab to validate the a priori
+    // sigma items
+    connect(m_ui->positionAprioriSigmaTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+            this, SLOT(validateSigmaValue(QTableWidgetItem *)));
+    connect(m_ui->pointingAprioriSigmaTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+            this, SLOT(validateSigmaValue(QTableWidgetItem *)));
 
     // initializations for target body tab
 
@@ -121,7 +223,7 @@ namespace Isis {
     m_ui->noneRadiiRadioButton->setChecked(true);
 
     // validators for target body entries...
-    QDoubleValidator *sigmaValidator = new QDoubleValidator(0.0, 1.0e+10, 8, this);
+    QDoubleValidator *sigmaValidator = new QDoubleValidator(0.0, 1.0e+4, 8, this);
     sigmaValidator->setNotation(QDoubleValidator::ScientificNotation);
 
     // right ascension valid range is from 0 to 360 degrees
@@ -168,6 +270,30 @@ namespace Isis {
                                                                 m_ui->meanRadiusLineEdit));
     m_ui->meanRadiusSigmaLineEdit->setValidator(sigmaValidator);
 
+
+
+    // jigsaw run setup general tab validation
+    // global apriori point sigmas
+    m_ui->pointLatitudeSigmaLineEdit->setValidator(new QDoubleValidator(1.0e-10, 1.0e+10, 8, this));
+    m_ui->pointLongitudeSigmaLineEdit->setValidator(new QDoubleValidator(1.0e-10, 1.0e+10, 8,this));
+    m_ui->pointRadiusSigmaLineEdit->setValidator(new QDoubleValidator(1.0e-10, 1.0e+10, 8, this));
+
+    // outlier rejection
+    m_ui->outlierRejectionMultiplierLineEdit->setValidator(
+                                                  new QDoubleValidator(1.0e-10, 1.0e+10, 8, this));
+    m_ui->maximumLikelihoodModel1QuantileLineEdit->setValidator(
+                                                  new QDoubleValidator(1.0e-10, 1.0, 8, this));
+    m_ui->maximumLikelihoodModel2QuantileLineEdit->setValidator(
+                                                  new QDoubleValidator(1.0e-10, 1.0, 8, this));
+    m_ui->maximumLikelihoodModel3QuantileLineEdit->setValidator(
+                                                  new QDoubleValidator(1.0e-10, 1.0, 8, this));
+
+    // convergence criteria
+    m_ui->sigma0ThresholdLineEdit->setValidator(new QDoubleValidator(1.0e-20, 1.0e+10, 8, this));
+    m_ui->maximumIterationsLineEdit->setValidator(new QIntValidator(1, 10000, this));
+
+
+
     // signals for target body tab
 //    connect(m_ui->radiiButtonGroup, SIGNAL(buttonClicked(int)),
 //            this, SLOT(on_radiiGroupClicked(int)));
@@ -180,6 +306,7 @@ namespace Isis {
   }
 
 
+
   JigsawSetupDialog::~JigsawSetupDialog() {
     // delete/null m_ui since we did "new" this pointers in the constructor
     if (m_ui) {
@@ -190,213 +317,195 @@ namespace Isis {
   }
 
 
-  void JigsawSetupDialog::on_radiusCheckBox_toggled(bool checked) {
-    m_ui->pointRadiusSigmaLabel->setEnabled(checked);
+  void JigsawSetupDialog::on_pointRadiusSigmaCheckBox_toggled(bool checked) {
     m_ui->pointRadiusSigmaLineEdit->setEnabled(checked);
-    m_ui->pointRadiusSigmaUnitsLabel->setEnabled(checked);
   }
 
+//  m_ui->positionComboBox has been removed from the general tab, it is planned to be moved to 
+//  the obs solve settings tab. This function will be commented out until it is added back.
+//   void JigsawSetupDialog::on_positionComboBox_currentIndexChanged(int index) {
 
+//     // indices:
+//     // 0 = none, 1 = position, 2 = velocity, 3 = acceleration, 4 = all
+//     bool solvePosition                  = (bool) (index > 0);
+//     bool solveVelocity                  = (bool) (index > 1);
+//     bool solveAcceleration              = (bool) (index > 2);
+// //    bool solveAllPolynomialCoefficients = (bool) (index > 3);
 
-//  void JigsawSetupDialog::on_outlierRejectionCheckBox_toggled(bool checked) {
-//    m_ui->outlierRejectionMultiplierLabel->setEnabled(checked);
-//    m_ui->outlierRejectionMultiplierLineEdit->setEnabled(checked);
-//  }
+//     m_ui->hermiteSplineCheckBox->setEnabled(solvePosition);
+//     m_ui->positionSigmaLabel->setEnabled(solvePosition);
+//     m_ui->positionSigmaLineEdit->setEnabled(solvePosition);
+//     m_ui->positionSigmaUnitsLabel->setEnabled(solvePosition);
 
+//     m_ui->velocitySigmaLabel->setEnabled(solveVelocity);
+//     m_ui->velocitySigmaLineEdit->setEnabled(solveVelocity);
+//     m_ui->velocitySigmaUnitsLabel->setEnabled(solveVelocity);
 
-  void JigsawSetupDialog::on_positionComboBox_currentIndexChanged(int index) {
+//     m_ui->accelerationSigmaLabel->setEnabled(solveAcceleration);
+//     m_ui->accelerationSigmaLineEdit->setEnabled(solveAcceleration);
+//     m_ui->accelerationSigmaUnitsLabel->setEnabled(solveAcceleration);
 
-    // indices:
-    // 0 = none, 1 = position, 2 = velocity, 3 = acceleration, 4 = all
-    bool solvePosition                  = (bool) (index > 0);
-    bool solveVelocity                  = (bool) (index > 1);
-    bool solveAcceleration              = (bool) (index > 2);
-//    bool solveAllPolynomialCoefficients = (bool) (index > 3);
+// //    m_ui->spkDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
+// //    m_ui->spkDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
+// //    m_ui->spkSolveDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
+// //    m_ui->spkSolveDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
 
-    m_ui->hermiteSplineCheckBox->setEnabled(solvePosition);
-    m_ui->positionSigmaLabel->setEnabled(solvePosition);
-    m_ui->positionSigmaLineEdit->setEnabled(solvePosition);
-    m_ui->positionSigmaUnitsLabel->setEnabled(solvePosition);
+//   }
 
-    m_ui->velocitySigmaLabel->setEnabled(solveVelocity);
-    m_ui->velocitySigmaLineEdit->setEnabled(solveVelocity);
-    m_ui->velocitySigmaUnitsLabel->setEnabled(solveVelocity);
+//  m_ui->pointingComboBox has been removed from the general tab, it is planned to be moved to 
+//  the obs solve settings tab. This function will be commented out until it is added back.
+//   void JigsawSetupDialog::on_pointingComboBox_currentIndexChanged(int index) {
 
-    m_ui->accelerationSigmaLabel->setEnabled(solveAcceleration);
-    m_ui->accelerationSigmaLineEdit->setEnabled(solveAcceleration);
-    m_ui->accelerationSigmaUnitsLabel->setEnabled(solveAcceleration);
+//     // indices:
+//     // 0 = angles, 1 = none, 2 = velocity, 3 = acceleration, 4 = all
+//     bool solveAngles                    = (bool) (index == 0 || index > 1);
+//     bool solveAngularVelocity           = (bool) (index > 1);
+//     bool solveAngularAcceleration       = (bool) (index > 2);
+// //    bool solveAllPolynomialCoefficients = (bool) (index > 3);
 
-//    m_ui->spkDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
-//    m_ui->spkDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
-//    m_ui->spkSolveDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
-//    m_ui->spkSolveDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
+//     m_ui->twistCheckBox->setEnabled(solveAngles);
+//     m_ui->fitOverPointingCheckBox->setEnabled(solveAngles);
 
-  }
-
-
-  void JigsawSetupDialog::on_pointingComboBox_currentIndexChanged(int index) {
+// //    m_ui->ckDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
+// //    m_ui->ckDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
+// //    m_ui->ckSolveDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
+// //    m_ui->ckSolveDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
 
-    // indices:
-    // 0 = angles, 1 = none, 2 = velocity, 3 = acceleration, 4 = all
-    bool solveAngles                    = (bool) (index == 0 || index > 1);
-    bool solveAngularVelocity           = (bool) (index > 1);
-    bool solveAngularAcceleration       = (bool) (index > 2);
-//    bool solveAllPolynomialCoefficients = (bool) (index > 3);
+//     m_ui->pointingAnglesSigmaLabel->setEnabled(solveAngles);
+//     m_ui->pointingAnglesSigmaLineEdit->setEnabled(solveAngles);
+//     m_ui->pointingAnglesSigmaUnitsLabel->setEnabled(solveAngles);
 
-    m_ui->twistCheckBox->setEnabled(solveAngles);
-    m_ui->fitOverPointingCheckBox->setEnabled(solveAngles);
+//     m_ui->pointingAngularVelocitySigmaLabel->setEnabled(solveAngularVelocity);
+//     m_ui->pointingAngularVelocitySigmaLineEdit->setEnabled(solveAngularVelocity);
+//     m_ui->pointingAngularVelocitySigmaUnitsLabel->setEnabled(solveAngularVelocity);
 
-//    m_ui->ckDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
-//    m_ui->ckDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
-//    m_ui->ckSolveDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
-//    m_ui->ckSolveDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
+//     m_ui->pointingAngularAccelerationSigmaLabel->setEnabled(solveAngularAcceleration);
+//     m_ui->pointingAngularAccelerationSigmaLineEdit->setEnabled(solveAngularAcceleration);
+//     m_ui->pointingAngularAccelerationSigmaUnitsLabel->setEnabled(solveAngularAcceleration);
 
-    m_ui->pointingAnglesSigmaLabel->setEnabled(solveAngles);
-    m_ui->pointingAnglesSigmaLineEdit->setEnabled(solveAngles);
-    m_ui->pointingAnglesSigmaUnitsLabel->setEnabled(solveAngles);
-
-    m_ui->pointingAngularVelocitySigmaLabel->setEnabled(solveAngularVelocity);
-    m_ui->pointingAngularVelocitySigmaLineEdit->setEnabled(solveAngularVelocity);
-    m_ui->pointingAngularVelocitySigmaUnitsLabel->setEnabled(solveAngularVelocity);
-
-    m_ui->pointingAngularAccelerationSigmaLabel->setEnabled(solveAngularAcceleration);
-    m_ui->pointingAngularAccelerationSigmaLineEdit->setEnabled(solveAngularAcceleration);
-    m_ui->pointingAngularAccelerationSigmaUnitsLabel->setEnabled(solveAngularAcceleration);
-
-  }
+//   }
 
 
   void JigsawSetupDialog::on_maximumLikelihoodModel1ComboBox_currentIndexChanged(int index) {
 
     bool model1Selected = (bool) (index > 0);
-    m_ui->maximumLikelihoodModel1QuantileLabel->setEnabled(model1Selected);
+
+    // lock/unlock current tier's quantile and next tier's model
     m_ui->maximumLikelihoodModel1QuantileLineEdit->setEnabled(model1Selected);
     m_ui->maximumLikelihoodModel2Label->setEnabled(model1Selected);
     m_ui->maximumLikelihoodModel2ComboBox->setEnabled(model1Selected);
+    m_ui->maximumLikelihoodModel2QuantileLineEdit->setEnabled(
+                                            m_ui->maximumLikelihoodModel2ComboBox->currentIndex());
+
+    // when setting "NONE", set remaining max likelihood options to false  
+    if (!model1Selected) {
+      m_ui->maximumLikelihoodModel2QuantileLineEdit->setEnabled(false);
+      m_ui->maximumLikelihoodModel3QuantileLineEdit->setEnabled(false);
+      m_ui->maximumLikelihoodModel3Label->setEnabled(false);
+      m_ui->maximumLikelihoodModel3ComboBox->setEnabled(false);
+    }
+
+    on_maximumLikelihoodModel1QuantileLineEdit_textChanged("");
+    on_maximumLikelihoodModel2QuantileLineEdit_textChanged("");
+    on_maximumLikelihoodModel3QuantileLineEdit_textChanged("");
 
+    // sigma and max likelihood options are exclusive
+    m_ui->outlierRejectionCheckBox->setEnabled(!model1Selected);
   }
 
 
   void JigsawSetupDialog::on_maximumLikelihoodModel2ComboBox_currentIndexChanged(int index) {
 
     bool model2Selected = (bool)(index > 0);
-    m_ui->maximumLikelihoodModel2QuantileLabel->setEnabled(model2Selected);
+
+    // lock/unlock current tier's quantile and next tier's model
     m_ui->maximumLikelihoodModel2QuantileLineEdit->setEnabled(model2Selected);
     m_ui->maximumLikelihoodModel3Label->setEnabled(model2Selected);
     m_ui->maximumLikelihoodModel3ComboBox->setEnabled(model2Selected);
+    m_ui->maximumLikelihoodModel3QuantileLineEdit->setEnabled(
+                                            m_ui->maximumLikelihoodModel3ComboBox->currentIndex());
 
+    // when setting "NONE", set remaining max likelihood options to false  
+    if (!model2Selected) {
+      m_ui->maximumLikelihoodModel3QuantileLineEdit->setEnabled(false);
+    }
+
+    on_maximumLikelihoodModel2QuantileLineEdit_textChanged("");
+    on_maximumLikelihoodModel3QuantileLineEdit_textChanged("");
   }
 
 
   void JigsawSetupDialog::on_maximumLikelihoodModel3ComboBox_currentIndexChanged(int index) {
 
     bool model3Selected = (bool)(index > 0);
-    m_ui->maximumLikelihoodModel3QuantileLabel->setEnabled(model3Selected);
+
     m_ui->maximumLikelihoodModel3QuantileLineEdit->setEnabled(model3Selected);
+    on_maximumLikelihoodModel3QuantileLineEdit_textChanged("");
 
   }
 
 
-  void JigsawSetupDialog::fillFromSettings(const BundleSettingsQsp settings) {
+  void JigsawSetupDialog::on_outlierRejectionCheckBox_stateChanged(int arg1) {
+
+    on_outlierRejectionMultiplierLineEdit_textChanged("");
+    m_ui->outlierRejectionMultiplierLineEdit->setEnabled(arg1);
+
+    // sigma and maxlikelihood options are exclusive
+    m_ui->CQuantileLabel->setEnabled(!arg1);
+    m_ui->maxLikelihoodEstimationLabel->setEnabled(!arg1);
+    m_ui->maximumLikelihoodModel1ComboBox->setEnabled(!arg1);
+    m_ui->maximumLikelihoodModel1Label->setEnabled(!arg1);
+  }
+
 
-    BundleObservationSolveSettings observationSolveSettings = settings->observationSolveSettings(0);
+  void JigsawSetupDialog::fillFromSettings(const BundleSettingsQsp settings) {
 
     // general tab
     m_ui->observationModeCheckBox->setChecked(settings->solveObservationMode());
-    m_ui->radiusCheckBox->setChecked(settings->solveRadius());
-    m_ui->updateCubeLabelCheckBox->setChecked(settings->updateCubeLabel());
+    m_ui->pointRadiusSigmaCheckBox->setChecked(settings->solveRadius());
+    // m_ui->updateCubeLabelCheckBox->setChecked(settings->updateCubeLabel());
     m_ui->errorPropagationCheckBox->setChecked(settings->errorPropagation());
     m_ui->outlierRejectionCheckBox->setChecked(settings->outlierRejection());
     m_ui->outlierRejectionMultiplierLineEdit->setText(toString(settings->outlierRejectionMultiplier()));
     m_ui->sigma0ThresholdLineEdit->setText(toString(settings->convergenceCriteriaThreshold()));
     m_ui->maximumIterationsLineEdit->setText(toString(settings->convergenceCriteriaMaximumIterations()));
 
-
-    m_ui->positionComboBox->setCurrentIndex(observationSolveSettings.instrumentPositionSolveOption());
-    m_ui->hermiteSplineCheckBox->setChecked(observationSolveSettings.solvePositionOverHermite());
-    m_ui->spkDegreeSpinBox->setValue(observationSolveSettings.spkDegree());
-    m_ui->spkSolveDegreeSpinBox->setValue(observationSolveSettings.spkSolveDegree());
-
-
-    int pointingOption = observationSolveSettings.instrumentPointingSolveOption();
-    if (pointingOption == 0) {
-      pointingOption = 1;
-    }
-    if (pointingOption == 1) {
-      pointingOption = 0;
-    }
-
-    if ( pointingOption > 0 ) {
-      m_ui->twistCheckBox->setEnabled(true);
-    }
-    else {
-      m_ui->twistCheckBox->setEnabled(true);
-    }
-
-    m_ui->pointingComboBox->setCurrentIndex(pointingOption);
-//    m_ui->pointingComboBox->setCurrentIndex(observationSolveSettings.instrumentPointingSolveOption());
-
-
-    m_ui->twistCheckBox->setChecked(observationSolveSettings.solveTwist());
-    m_ui->fitOverPointingCheckBox->setChecked(observationSolveSettings.solvePolyOverPointing());
-    m_ui->ckDegreeSpinBox->setValue(observationSolveSettings.ckDegree());
-    m_ui->ckSolveDegreeSpinBox->setValue(observationSolveSettings.ckSolveDegree());
-
     // weighting tab
-    if ( !IsNullPixel(settings->globalLatitudeAprioriSigma()) ) {
-      m_ui->pointLatitudeSigmaLineEdit->setText(toString(settings->globalLatitudeAprioriSigma()));
+    if ( !IsNullPixel(settings->globalPointCoord1AprioriSigma()) ) {
+      m_ui->pointLatitudeSigmaLineEdit->setText(toString(settings->globalPointCoord1AprioriSigma()));
       m_ui->pointLatitudeSigmaLineEdit->setModified(true);
     }
-    if ( !IsNullPixel(settings->globalLongitudeAprioriSigma()) ) {
-      m_ui->pointLongitudeSigmaLineEdit->setText(toString(settings->globalLongitudeAprioriSigma()));
+    if ( !IsNullPixel(settings->globalPointCoord2AprioriSigma()) ) {
+      m_ui->pointLongitudeSigmaLineEdit->setText(toString(settings->globalPointCoord2AprioriSigma()));
       m_ui->pointLongitudeSigmaLineEdit->setModified(true);
     }
-    if ( !IsNullPixel(settings->globalRadiusAprioriSigma()) ) {
-      m_ui->pointRadiusSigmaLineEdit->setText(toString(settings->globalRadiusAprioriSigma()));
+    if ( !IsNullPixel(settings->globalPointCoord3AprioriSigma()) ) {
+      m_ui->pointRadiusSigmaLineEdit->setText(toString(settings->globalPointCoord3AprioriSigma()));
       m_ui->pointRadiusSigmaLineEdit->setModified(true);
 
     }
 
-    QList<double> aprioriPositionSigmas = observationSolveSettings.aprioriPositionSigmas();
-
-    if ( aprioriPositionSigmas.size() > 0 && !IsNullPixel(aprioriPositionSigmas[0]) ) {
-      m_ui->positionSigmaLineEdit->setText(toString(aprioriPositionSigmas[0]));
-      m_ui->positionSigmaLineEdit->setModified(true);
-    }
-
-    if ( aprioriPositionSigmas.size() > 1 && !IsNullPixel(aprioriPositionSigmas[1]) ) {
-      m_ui->velocitySigmaLineEdit->setText(toString(aprioriPositionSigmas[1]));
-      m_ui->velocitySigmaLineEdit->setModified(true);
-    }
+    // If we click setup after changing image selection in the project tree, not all images will
+    // have solve settings. Here we add those images and their default settings to the list
+    QList<BundleObservationSolveSettings> defaultSettings = m_bundleSettings->observationSolveSettings();
+    QList<BundleObservationSolveSettings> fillSettings = settings->observationSolveSettings();
 
-    if ( aprioriPositionSigmas.size() > 2 && !IsNullPixel(aprioriPositionSigmas[2]) ) {
-      m_ui->accelerationSigmaLineEdit->setText(toString(aprioriPositionSigmas[2]));
-      m_ui->accelerationSigmaLineEdit->setModified(true);
-    }
-
-    QList<double> aprioriPointingSigmas = observationSolveSettings.aprioriPointingSigmas();
-
-    if ( aprioriPointingSigmas.size() > 0 && !IsNullPixel(aprioriPointingSigmas[0]) ) {
-      m_ui->pointingAnglesSigmaLineEdit->setText(toString(aprioriPointingSigmas[0]));
-      m_ui->pointingAnglesSigmaLineEdit->setModified(true);
-    }
-
-    if ( aprioriPointingSigmas.size() > 1 && !IsNullPixel(aprioriPointingSigmas[1]) ) {
-      m_ui->pointingAngularVelocitySigmaLineEdit->setText(toString(aprioriPointingSigmas[1]));
-      m_ui->pointingAngularVelocitySigmaLineEdit->setModified(true);
-    }
-
-    if ( aprioriPointingSigmas.size() > 2 && !IsNullPixel(aprioriPointingSigmas[2]) ) {
-      m_ui->pointingAngularAccelerationSigmaLineEdit->setText(toString(aprioriPointingSigmas[2]));
-      m_ui->pointingAngularAccelerationSigmaLineEdit->setModified(true);
+    for (auto &solveSettings : defaultSettings) {      
+      // Remove any images from defaultSettings that exist in fillSettings
+      foreach (QString observationNumber, solveSettings.observationNumbers()) {
+        // The method will return a default with no obs numbers if none are found
+        if (!settings->observationSolveSettings(observationNumber).observationNumbers().isEmpty()) {
+          solveSettings.removeObservationNumber(observationNumber);
+        }
+      }
+      // Append leftover defaultSettings
+      if (!solveSettings.observationNumbers().isEmpty()) {
+        fillSettings.append(solveSettings);
+      }
     }
 
-    // maximum liklihood tab
-
-    // self-calibration tab
-
-    // target body tab
-
+    m_bundleSettings->setObservationSolveOptions(fillSettings);
+    
     update();
 
   }
@@ -404,7 +513,7 @@ namespace Isis {
 
   BundleSettingsQsp JigsawSetupDialog::bundleSettings() {
 
-    BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings);
+    BundleSettingsQsp settings = m_bundleSettings;
     settings->setValidateNetwork(true);
 
     // solve options
@@ -420,66 +529,20 @@ namespace Isis {
     if (m_ui->pointRadiusSigmaLineEdit->isModified()) {
       radiusSigma = m_ui->pointRadiusSigmaLineEdit->text().toDouble();
     }
+    // Stick with the default coordinate types for the bundle and reports until
+    // a gui is added to get the settings
     settings->setSolveOptions(m_ui->observationModeCheckBox->isChecked(),
-                              m_ui->updateCubeLabelCheckBox->isChecked(),
+                              false,
+                              // m_ui->updateCubeLabelCheckBox->isChecked(),
                               m_ui->errorPropagationCheckBox->isChecked(),
-                              m_ui->radiusCheckBox->isChecked(),
+                              m_ui->pointRadiusSigmaCheckBox->isChecked(),
+                              SurfacePoint::Latitudinal, SurfacePoint::Latitudinal,
                               latitudeSigma,
                               longitudeSigma,
                               radiusSigma);
     settings->setOutlierRejection(m_ui->outlierRejectionCheckBox->isChecked(),
                                   m_ui->outlierRejectionMultiplierLineEdit->text().toDouble());
 
-
-
-
-    QList<BundleObservationSolveSettings> observationSolveSettingsList;
-    BundleObservationSolveSettings observationSolveSettings;
-
-    // pointing settings
-    double anglesSigma              = -1.0;
-    double angularVelocitySigma     = -1.0;
-    double angularAccelerationSigma = -1.0;
-
-    if (m_ui->pointingAnglesSigmaLineEdit->isModified()) {
-      anglesSigma = m_ui->pointingAnglesSigmaLineEdit->text().toDouble();
-    }
-    if (m_ui->pointingAngularVelocitySigmaLineEdit->isModified()) {
-      angularVelocitySigma = m_ui->pointingAngularVelocitySigmaLineEdit->text().toDouble();
-    }
-    if (m_ui->pointingAngularAccelerationSigmaLineEdit->isModified()) {
-      angularAccelerationSigma = m_ui->pointingAngularAccelerationSigmaLineEdit->text().toDouble();
-    }
-    observationSolveSettings.setInstrumentPointingSettings(
-        BundleObservationSolveSettings::stringToInstrumentPointingSolveOption(m_ui->pointingComboBox->currentText()),
-        m_ui->twistCheckBox->isChecked(),
-        m_ui->ckDegreeSpinBox->text().toInt(),
-        m_ui->ckSolveDegreeSpinBox->text().toInt(),
-        m_ui->fitOverPointingCheckBox->isChecked(),
-        anglesSigma, angularVelocitySigma, angularAccelerationSigma);
-
-    // position option
-    double positionSigma     = -1.0;
-    double velocitySigma     = -1.0;
-    double accelerationSigma = -1.0;
-    if (m_ui->positionSigmaLineEdit->isModified()) {
-      positionSigma = m_ui->positionSigmaLineEdit->text().toDouble();
-    }
-    if (m_ui->velocitySigmaLineEdit->isModified()) {
-      velocitySigma = m_ui->velocitySigmaLineEdit->text().toDouble();
-    }
-    if (m_ui->accelerationSigmaLineEdit->isModified()) {
-      accelerationSigma = m_ui->accelerationSigmaLineEdit->text().toDouble();
-    }
-    observationSolveSettings.setInstrumentPositionSettings(
-        BundleObservationSolveSettings::stringToInstrumentPositionSolveOption(m_ui->positionComboBox->currentText()),
-        m_ui->spkDegreeSpinBox->text().toInt(),
-        m_ui->spkSolveDegreeSpinBox->text().toInt(),
-        m_ui->hermiteSplineCheckBox->isChecked(),
-        positionSigma, velocitySigma, accelerationSigma);
-
-    observationSolveSettingsList.append(observationSolveSettings);
-    settings->setObservationSolveOptions(observationSolveSettingsList);
     // convergence criteria
     settings->setConvergenceCriteria(BundleSettings::Sigma0,
                                      m_ui->sigma0ThresholdLineEdit->text().toDouble(),
@@ -509,7 +572,6 @@ namespace Isis {
         }
       }
     }
-
     // target body
     // ensure user entered something to adjust
     if (m_ui->poleRaCheckBox->isChecked()              ||
@@ -616,10 +678,6 @@ namespace Isis {
 
       settings->setBundleTargetBody(bundleTargetBody);
     }
-
-     // output options
-//???     settings->setOutputFilePrefix("");
-
     return settings;
   }
 
@@ -645,7 +703,7 @@ namespace Isis {
    * @param const QString &controlName The name of the control to try to find in the combo box.
    */
   void JigsawSetupDialog::selectControl(const QString &controlName) {
-    QComboBox &cnetBox = *(m_ui->controlNetworkComboBox);
+    QComboBox &cnetBox = *(m_ui->inputControlNetCombo);
     int foundControlIndex = cnetBox.findText(FileName(controlName).name());
     // We did not find it, so we need to see if the combo box is empty or not.
     if (foundControlIndex == -1) {
@@ -666,53 +724,209 @@ namespace Isis {
 
   Control *JigsawSetupDialog::selectedControl() {
 
-      int nIndex = m_ui->controlNetworkComboBox->currentIndex();
+      int nIndex = m_ui->inputControlNetCombo->currentIndex();
       Control *selectedControl
-                   = (Control *)(m_ui->controlNetworkComboBox->itemData(nIndex).value< void * >());
+                   = (Control *)(m_ui->inputControlNetCombo->itemData(nIndex).value< void * >());
       return selectedControl;
 
   }
 
 
   QString JigsawSetupDialog::selectedControlName() {
-    return QString(m_ui->controlNetworkComboBox->currentText());
+    return QString(m_ui->inputControlNetCombo->currentText());
+  }
+
+  
+
+  /**
+   * @brief updateBundleObservationSolveSettings:  This function sets the parameters of
+   * a BundleObservationSolveSettings object by reading user settings from the BOSS
+   * tab, as well as reading in the selected images on the BOSS QTreeView these
+   * BOSS settings are to be applied to.
+   * @param BundleObservationSolveSettings &boss The object which stores user-specified
+   * settings from the BOSS tab.
+   */
+  void JigsawSetupDialog::updateBundleObservationSolveSettings(BundleObservationSolveSettings &boss)
+    {
+
+      int ckSolveDegree = m_ui->ckSolveDegreeSpinBox->value();
+      int spkSolveDegree = m_ui->spkSolveDegreeSpinBox->value();
+      int ckDegree = m_ui->ckDegreeSpinBox->value();
+      int spkDegree = m_ui->spkDegreeSpinBox->value();
+      int instrumentPointingSolveOption=m_ui->pointingComboBox->currentIndex();
+      int instrumentPositionSolveOption=m_ui->positionComboBox->currentIndex();
+
+      BundleObservationSolveSettings::InstrumentPointingSolveOption  pointSolvingOption;
+      BundleObservationSolveSettings::InstrumentPositionSolveOption  positionSolvingOption;
+
+      double anglesAprioriSigma(-1.0);
+      double angularVelocityAprioriSigma(-1.0);
+      double angularAccelerationAprioriSigma(-1.0);
+      QList<double> additionalAngularCoefficients;
+
+      double positionAprioriSigma(-1.0);
+      double velocityAprioriSigma(-1.0);
+      double accelerationAprioriSigma(-1.0);
+      QList<double> additionalPositionCoefficients;
+
+      bool solveTwist(false);
+      bool solvePolynomialOverExisting(false);
+      bool positionOverHermite(false);
+
+      if (m_ui->pointingAprioriSigmaTable->item(0,3))
+        anglesAprioriSigma = m_ui->pointingAprioriSigmaTable->item(0,3)->data(0).toDouble();
+
+      if (m_ui->pointingAprioriSigmaTable->item(1,3))
+        angularVelocityAprioriSigma = m_ui->pointingAprioriSigmaTable->item(1,3)->data(0).toDouble();
+
+      if (m_ui->pointingAprioriSigmaTable->item(2,3) )
+        angularAccelerationAprioriSigma = m_ui->pointingAprioriSigmaTable->item(2,3)->data(0).toDouble();
+
+      if (m_ui->positionAprioriSigmaTable->item(0,3))
+        positionAprioriSigma = m_ui->positionAprioriSigmaTable->item(0,3)->data(0).toDouble();
+
+      if (m_ui->positionAprioriSigmaTable->item(1,3))
+        velocityAprioriSigma = m_ui->positionAprioriSigmaTable->item(1,3)->data(0).toDouble();
+
+      if (m_ui->positionAprioriSigmaTable->item(2,3) )
+        accelerationAprioriSigma = m_ui->positionAprioriSigmaTable->item(2,3)->data(0).toDouble();
+
+      //Saving additionalPositional/Angular coefficients (deg >=3) in case they are needed
+      //later.
+      if (spkSolveDegree >2) {
+        for (int i = 3;i <= spkSolveDegree;i++ ) {
+          if (m_ui->positionAprioriSigmaTable->item(i,3))
+            additionalPositionCoefficients.append(m_ui->positionAprioriSigmaTable->item(i,3)->data(0).toDouble() );
+        }
+      }
+
+      if (ckSolveDegree > 2) {
+         for (int i = 3;i <= ckSolveDegree;i++ ) {
+           if (m_ui->pointingAprioriSigmaTable->item(i,3))
+             additionalAngularCoefficients.append(m_ui->pointingAprioriSigmaTable->item(i,3)->data(0).toDouble() );
+         }
+
+      }
+
+
+      if (m_ui->twistCheckBox->checkState() == Qt::Checked)
+        solveTwist = true;
+      if (m_ui->fitOverPointingCheckBox->checkState() == Qt::Checked)
+        solvePolynomialOverExisting = true;
+      if (m_ui->hermiteSplineCheckBox->checkState() == Qt::Checked)
+        positionOverHermite = true;
+
+      switch(instrumentPointingSolveOption) {
+
+      case 0: pointSolvingOption = BundleObservationSolveSettings::InstrumentPointingSolveOption::NoPointingFactors;
+        break;
+      case 1:pointSolvingOption = BundleObservationSolveSettings::InstrumentPointingSolveOption::AnglesOnly;
+        break;
+      case 2:pointSolvingOption = BundleObservationSolveSettings::InstrumentPointingSolveOption::AnglesVelocity;
+        break;
+      case 3:pointSolvingOption = BundleObservationSolveSettings::InstrumentPointingSolveOption::AnglesVelocityAcceleration;
+        break;
+
+      case 4:pointSolvingOption = BundleObservationSolveSettings::InstrumentPointingSolveOption::AllPointingCoefficients;
+        break;
+      default:  pointSolvingOption = BundleObservationSolveSettings::InstrumentPointingSolveOption::NoPointingFactors;
+        break;
+
+      }
+
+      switch(instrumentPositionSolveOption) {
+
+      case 0: positionSolvingOption = BundleObservationSolveSettings::InstrumentPositionSolveOption::NoPositionFactors;
+        break;
+      case 1:positionSolvingOption = BundleObservationSolveSettings::InstrumentPositionSolveOption::PositionOnly;
+        break;
+      case 2:positionSolvingOption = BundleObservationSolveSettings::InstrumentPositionSolveOption::PositionVelocity;
+        break;
+      case 3:positionSolvingOption = BundleObservationSolveSettings::InstrumentPositionSolveOption::PositionVelocityAcceleration;
+        break;
+
+      case 4:positionSolvingOption = BundleObservationSolveSettings::InstrumentPositionSolveOption::AllPositionCoefficients;
+        break;
+      default:  positionSolvingOption = BundleObservationSolveSettings::InstrumentPositionSolveOption::NoPositionFactors;
+        break;
+
+      }
+
+
+      boss.setInstrumentPositionSettings(positionSolvingOption,spkDegree,spkSolveDegree,positionOverHermite,
+                                         positionAprioriSigma,velocityAprioriSigma,accelerationAprioriSigma,
+                                         &additionalPositionCoefficients);
+
+      boss.setInstrumentPointingSettings(pointSolvingOption,solveTwist,ckDegree,ckSolveDegree,solvePolynomialOverExisting,
+                                         anglesAprioriSigma,angularVelocityAprioriSigma,angularAccelerationAprioriSigma,
+                                         &additionalAngularCoefficients);
+
+      //What if multiple instrument IDs are represented?
+      boss.setInstrumentId("");
+
+
+      SortFilterProxyModel* proxyModel = (SortFilterProxyModel *)m_ui->treeView->model();
+      ProjectItemModel* sourceModel = (ProjectItemModel *)proxyModel->sourceModel();
+      QModelIndexList selectedIndexes = m_ui->treeView->selectionModel()->selectedIndexes();
+
+      foreach (QModelIndex index, selectedIndexes) {
+
+        QModelIndex sourceix = proxyModel->mapToSource(index);
+        ProjectItem * projItem = sourceModel->itemFromIndex(sourceix);
+
+        if (projItem) {
+
+          if (projItem->isImage() ) {
+            Image * img = projItem->data().value<Image *>();
+            boss.addObservationNumber(img->observationNumber() );
+
+          }
+        }
+
+      }
+
+    }
+
+
+  QString JigsawSetupDialog::outputControlName() {
+    return QString(m_ui->outputControlNetLineEdit->text());
   }
 
 
   void JigsawSetupDialog::makeReadOnly() {
-    m_ui->controlNetworkComboBox->setEnabled(false);
+    m_ui->inputControlNetCombo->setEnabled(false);
     m_ui->observationModeCheckBox->setEnabled(false);
-    m_ui->radiusCheckBox->setEnabled(false);
-    m_ui->updateCubeLabelCheckBox->setEnabled(false);
+    m_ui->pointRadiusSigmaCheckBox->setEnabled(false);
+    // m_ui->updateCubeLabelCheckBox->setEnabled(false);
     m_ui->errorPropagationCheckBox->setEnabled(false);
     m_ui->outlierRejectionCheckBox->setEnabled(false);
     m_ui->outlierRejectionMultiplierLineEdit->setEnabled(false);
     m_ui->sigma0ThresholdLineEdit->setEnabled(false);
     m_ui->maximumIterationsLineEdit->setEnabled(false);
-    m_ui->positionComboBox->setEnabled(false);
+    // m_ui->positionComboBox->setEnabled(false);
     m_ui->hermiteSplineCheckBox->setEnabled(false);
     m_ui->spkDegreeSpinBox->setEnabled(false);
     m_ui->spkSolveDegreeSpinBox->setEnabled(false);
     m_ui->twistCheckBox->setEnabled(false);
-    m_ui->pointingComboBox->setEnabled(false);
+    // m_ui->pointingComboBox->setEnabled(false);
     m_ui->fitOverPointingCheckBox->setEnabled(false);
     m_ui->ckDegreeSpinBox->setEnabled(false);
     m_ui->ckSolveDegreeSpinBox->setEnabled(false);
 
-    // weighting tab
-    m_ui->pointLatitudeSigmaLineEdit->setEnabled(false);
-    m_ui->pointLongitudeSigmaLineEdit->setEnabled(false);
-    m_ui->pointRadiusSigmaLineEdit->setEnabled(false);
-    m_ui->positionSigmaLineEdit->setEnabled(false);
-    m_ui->velocitySigmaLineEdit->setEnabled(false);
-    m_ui->accelerationSigmaLineEdit->setEnabled(false);
-    m_ui->pointingAnglesSigmaLineEdit->setEnabled(false);
-    m_ui->pointingAngularVelocitySigmaLineEdit->setEnabled(false);
-    m_ui->pointingAngularAccelerationSigmaLineEdit->setEnabled(false);
-
-    // maximum liklihood tab
-
-    // self-calibration tab
+    // observation solve settings tab
+    m_ui->treeView->setEnabled(false);
+    m_ui->positionComboBox->setEnabled(false);
+    m_ui->spkSolveDegreeSpinBox->setEnabled(false);
+    m_ui->spkDegreeSpinBox->setEnabled(false);
+    m_ui->hermiteSplineCheckBox->setEnabled(false);
+    m_ui->positionAprioriSigmaTable->setEnabled(false);
+    m_ui->pointingComboBox->setEnabled(false);
+    m_ui->ckSolveDegreeSpinBox->setEnabled(false);
+    m_ui->ckDegreeSpinBox->setEnabled(false);
+    m_ui->twistCheckBox->setEnabled(false);
+    m_ui->fitOverPointingCheckBox->setEnabled(false);
+    m_ui->pointingAprioriSigmaTable->setEnabled(false);
+    m_ui->applySettingsPushButton->setEnabled(false);
 
     // target body tab
     m_ui->targetBodyComboBox->setEnabled(false);
@@ -847,7 +1061,7 @@ namespace Isis {
 
       // if we're not solving for target body triaxial radii or mean radius, we CAN solve for point
       // radii so we ensure the point radius checkbox under the general settings tab is enabled
-      m_ui->radiusCheckBox->setEnabled(true);
+      m_ui->pointRadiusSigmaCheckBox->setEnabled(true);
     }
     else if (arg1 == 1) {
       m_ui->aRadiusLabel->setEnabled(true);
@@ -865,8 +1079,8 @@ namespace Isis {
       // if we're solving for target body mean radius, we can't solve for point radii
       // so we uncheck and disable the point radius checkbox under the general settings tab
       // and remind the user
-      m_ui->radiusCheckBox->setChecked(false);
-      m_ui->radiusCheckBox->setEnabled(false);
+      m_ui->pointRadiusSigmaCheckBox->setChecked(false);
+      m_ui->pointRadiusSigmaCheckBox->setEnabled(false);
 
       QMessageBox *msgBox = new QMessageBox(QMessageBox::Information, "Triaxial Radii Reminder!",
                   "Individual point radii and target body triaxial radii can't be solved for"
@@ -890,8 +1104,8 @@ namespace Isis {
       // if we're solving for target body triaxial radii, we can't solve for point radii
       // so we uncheck and disable the point radius checkbox under the general settings tab
       // and remind the user
-      m_ui->radiusCheckBox->setChecked(false);
-      m_ui->radiusCheckBox->setEnabled(false);
+      m_ui->pointRadiusSigmaCheckBox->setChecked(false);
+      m_ui->pointRadiusSigmaCheckBox->setEnabled(false);
 
       QMessageBox *msgBox = new QMessageBox(QMessageBox::Information, "Mean Radius Reminder!",
                   "Individual point radii and target body mean radius can't be solved for"
@@ -974,47 +1188,6 @@ namespace Isis {
   }
 
 
-  void Isis::JigsawSetupDialog::on_spkSolveDegreeSpinBox_2_valueChanged(int arg1) {
-    if (arg1 == -1) {
-      m_ui->spkSolveDegreeSpinBox_2->setSuffix("(NONE)");
-      m_ui->positionAprioriSigmaTable->setRowCount(0);
-    }
-    m_ui->positionAprioriSigmaTable->setRowCount(arg1+1);
-    m_ui->positionAprioriSigmaTable->resizeColumnsToContents();
-
-    if (arg1 == 0) {
-      QTableWidgetItem *twItem = new QTableWidgetItem();
-      twItem->setText("POSITION");
-      m_ui->positionAprioriSigmaTable->setItem(arg1,0, twItem);
-      QTableWidgetItem *twItemunits = new QTableWidgetItem();
-      twItemunits->setText("meters");
-      //m_ui->positionAprioriSigmaTable->item(arg1,2)->setText("meters");
-    }
-    else if (arg1 == 1) {
-      m_ui->positionAprioriSigmaTable->item(arg1,0)->setText("VELOCITY");
-      m_ui->positionAprioriSigmaTable->item(arg1,2)->setText("m/sec");
-    }
-    else if (arg1 == 2) {
-      m_ui->positionAprioriSigmaTable->item(arg1,0)->setText("ACCELERATION");
-      m_ui->positionAprioriSigmaTable->item(arg1,2)->setText("m/s^2");
-    }
-  /*
-    else if (arg1 == 0) {
-      m_ui->spkSolveDegreeSpinBox_2->setSuffix("(POSITION)");
-      int nRows = m_ui->positionAprioriSigmaTable->rowCount();
-
-      m_ui->positionAprioriSigmaTable->insertRow(nRows);
-    }
-    else if (arg1 == 1)
-      m_ui->spkSolveDegreeSpinBox_2->setSuffix("(VELOCITY)");
-    else if (arg1 == 2)
-      m_ui->spkSolveDegreeSpinBox_2->setSuffix("(ACCELERATION)");
-    else
-      m_ui->spkSolveDegreeSpinBox_2->setSuffix("");
-  */
-  }
-
-
   void Isis::JigsawSetupDialog::on_rightAscensionLineEdit_textChanged(const QString &arg1) {
     if (!m_ui->rightAscensionLineEdit->hasAcceptableInput()) {
       m_ui->rightAscensionLineEdit->setStyleSheet("QLineEdit { background-color: red }");
@@ -1092,6 +1265,129 @@ namespace Isis {
     update();
   }
 
+  // general tab text validation
+  // global apriori point sigmas
+  void Isis::JigsawSetupDialog::on_pointLatitudeSigmaLineEdit_textChanged(const QString &arg1) {
+    if (arg1 == "" || m_ui->pointLatitudeSigmaLineEdit->hasAcceptableInput()) {
+      m_ui->pointLatitudeSigmaLineEdit->setStyleSheet("QLineEdit { background-color: white }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->pointLatitudeSigmaLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+  void Isis::JigsawSetupDialog::on_pointLongitudeSigmaLineEdit_textChanged(const QString &arg1) {
+    if (arg1 == "" || m_ui->pointLongitudeSigmaLineEdit->hasAcceptableInput()) {
+      m_ui->pointLongitudeSigmaLineEdit->setStyleSheet("QLineEdit { background-color: white }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->pointLongitudeSigmaLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
+  void Isis::JigsawSetupDialog::on_pointRadiusSigmaLineEdit_textChanged(const QString &arg1) {
+    if (arg1 == "" || m_ui->pointRadiusSigmaLineEdit->hasAcceptableInput()) {
+      m_ui->pointRadiusSigmaLineEdit->setStyleSheet("QLineEdit { background-color: white }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->pointRadiusSigmaLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+  // outlier rejection
+  void Isis::JigsawSetupDialog::on_maximumLikelihoodModel1QuantileLineEdit_textChanged(const QString &arg1) {
+    if (!m_ui->maximumLikelihoodModel1QuantileLineEdit->isEnabled() ||
+        m_ui->maximumLikelihoodModel1QuantileLineEdit->hasAcceptableInput()) {
+      m_ui->maximumLikelihoodModel1QuantileLineEdit->setStyleSheet("");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->maximumLikelihoodModel1QuantileLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
+  void Isis::JigsawSetupDialog::on_maximumLikelihoodModel2QuantileLineEdit_textChanged(const QString &arg1) {
+    if (!m_ui->maximumLikelihoodModel2QuantileLineEdit->isEnabled() ||
+        m_ui->maximumLikelihoodModel2QuantileLineEdit->hasAcceptableInput()) {
+      m_ui->maximumLikelihoodModel2QuantileLineEdit->setStyleSheet("");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->maximumLikelihoodModel2QuantileLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
+  void Isis::JigsawSetupDialog::on_maximumLikelihoodModel3QuantileLineEdit_textChanged(const QString &arg1) {
+    if (!m_ui->maximumLikelihoodModel3QuantileLineEdit->isEnabled() ||
+        m_ui->maximumLikelihoodModel3QuantileLineEdit->hasAcceptableInput()) {
+      m_ui->maximumLikelihoodModel3QuantileLineEdit->setStyleSheet("");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->maximumLikelihoodModel3QuantileLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
+  // convergence criteria
+  void Isis::JigsawSetupDialog::on_outlierRejectionMultiplierLineEdit_textChanged(const QString &arg1) {
+    if (!m_ui->outlierRejectionCheckBox->isChecked() || 
+        m_ui->outlierRejectionMultiplierLineEdit->hasAcceptableInput()) {
+      m_ui->outlierRejectionMultiplierLineEdit->setStyleSheet("");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->outlierRejectionMultiplierLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
+  void Isis::JigsawSetupDialog::on_sigma0ThresholdLineEdit_textChanged(const QString &arg1) {
+    if (m_ui->sigma0ThresholdLineEdit->hasAcceptableInput()) {
+      m_ui->sigma0ThresholdLineEdit->setStyleSheet("QLineEdit { background-color: white }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->sigma0ThresholdLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
+  void Isis::JigsawSetupDialog::on_maximumIterationsLineEdit_textChanged(const QString &arg1) {
+    if (m_ui->maximumIterationsLineEdit->hasAcceptableInput()) {
+      m_ui->maximumIterationsLineEdit->setStyleSheet("QLineEdit { background-color: white }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    else {
+      m_ui->maximumIterationsLineEdit->setStyleSheet("QLineEdit { background-color: red }");
+      m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+    }
+    update();
+  }
+
+
   void JigsawSetupDialog::showTargetParametersGroupBox() {
     m_ui->targetParametersGroupBox->setEnabled(true);
   }
@@ -1100,4 +1396,493 @@ namespace Isis {
   void JigsawSetupDialog::hideTargetParametersGroupBox() {
     m_ui->targetParametersGroupBox->setEnabled(false);
   }
+
+  void Isis::JigsawSetupDialog::on_inputControlNetCombo_currentTextChanged(const QString &arg1) {
+    FileName fname = arg1;
+    m_ui->outputControlNetLineEdit->setText(fname.baseName() + "-out.net");
+  }
+
+
+  /**
+   * Validates the a priori sigma values for a given QTableWidgetItem.
+   *
+   * This will only validate items in the a priori sigma column. Valid a priori sigma values are
+   * "FREE" or any positive double. Items that are invalid will be marked with a red background
+   * color.
+   *
+   * @param QTableWidgetItem* Pointer to the QTableWidgetItem to be validated.
+   */
+  void JigsawSetupDialog::validateSigmaValue(QTableWidgetItem *item) {
+    // Only validate the "a priori sigma" column
+    if (item->column() != 3) {
+      return;
+    }
+    // FREE is a valid value for the a priori sigma column
+    int free = item->text().simplified().compare("FREE", Qt::CaseInsensitive);
+
+    // Positive doubles are valid values for the a priori sigma column
+    bool convertSuccess = false;
+    double sigma = item->text().toDouble(&convertSuccess);
+    if ((convertSuccess && sigma >= 0.0) || free == 0) {
+      const QTableWidget *table = item->tableWidget();
+      item->setData(Qt::UserRole, QVariant(true));
+      // Set background color depending on if the table has alternating row colors and row is odd
+      if (table->alternatingRowColors() && item->row() % 2 != 0) {
+        item->setBackground(table->palette().color(QPalette::AlternateBase));
+      }
+      else {
+        item->setBackground(table->palette().color(QPalette::Base));
+      }
+
+      if (sigma == 0.0) {
+        item->setText("FREE");
+      }
+    }
+    else {
+      item->setData(Qt::UserRole, QVariant(false));
+      item->setBackground(Qt::red);
+    }
+
+    validateSigmaTables();
+  }
+
+
+  /**
+   * Validates the tables in the observation solve settings tab and enables/disables the OK
+   * button appropriately.
+   *
+   * This method validates both the position and pointing a priori sigma tables in the observation
+   * solve settings tab. If any of the sigma values are invalid, the JigsawSetupDialog's OK button
+   * is disabled. If all of the sigma values are valid, the JigsawSetupDialog's OK button is
+   * (re)enabled.
+   */
+  void JigsawSetupDialog::validateSigmaTables() {
+    bool tablesAreValid = true;
+    
+    // Evaluate both tables; if any value is invalid, the table is invalid
+    QList<const QTableWidget *> tables{m_ui->positionAprioriSigmaTable,
+                                       m_ui->pointingAprioriSigmaTable};
+                                       
+    for (const auto &table : tables) {
+      for (int i = 0; i < table->rowCount(); i++) {
+        // a priori sigma column is column 3
+        const QTableWidgetItem *item = table->item(i,3);
+        if (item) { 
+          if (item->data(Qt::UserRole).toBool() == false) {
+            tablesAreValid = false;
+            break;
+          }
+        }
+      }
+    }
+
+    m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(tablesAreValid);
+    if (!m_ui->treeView->selectionModel()->selectedRows().isEmpty()) {
+      m_ui->applySettingsPushButton->setEnabled(tablesAreValid);
+    }
+  }
+
+
+  /**
+   * Slot that listens for changes to the SPK Solve Degree spin box.
+   *
+   * This slot populates the Instrument Position Solve Options table according to the value of the
+   * SPK Solve Degree. Rows are added depending on the degree set, where number of rows added is
+   * equal to the SPK Solve Degree + 1. Note that this relies on the updateSolveSettingsSigmaTables
+   * slot, which uses the SPK Solve Degree if the ALL position option is selected.
+   *
+   * @param int Value the SPK Solve Degree spin box was changed to.
+   */
+  void JigsawSetupDialog::on_spkSolveDegreeSpinBox_valueChanged(int i) {
+    // Update the position apriori sigma table and use the position combo box solve option
+    updateSolveSettingsSigmaTables(m_ui->positionComboBox, m_ui->positionAprioriSigmaTable);
+  }
+
+
+  /**
+   * Slot that listens for changes to the CK Solve Degree spin box.
+   *
+   * This slot populates the Instrument Pointing Solve Options table according to the value of the
+   * CK Solve Degree. Rows are added depending on the degree set, where number of rows added is
+   * equal to the CK Solve Degree + 1. Note that this relies on the updateSolveSettingsSigmaTables
+   * slot, which uses the CK Solve Degree if the ALL pointing option is selected.
+   *
+   * @param int Value the CK Solve Degree spin box was changed to.
+   */
+  void JigsawSetupDialog::on_ckSolveDegreeSpinBox_valueChanged(int i) {
+    // Update the pointing apriori sigma table and use the pointing combo box solve option
+    updateSolveSettingsSigmaTables(m_ui->pointingComboBox, m_ui->pointingAprioriSigmaTable);
+  }
+
+
+  /**
+   * Slot that updates the sigma tables based on the current solve option selection.
+   *
+   * This will add/remove rows based on the solve option selected, and if ALL, the current
+   * solve degree value.
+   *
+   * @param const QComboBox * The solve option combo box to read the solve option from
+   * @param QTableWidget * The a priori sigma table we are going to update rows for
+   */
+  void JigsawSetupDialog::updateSolveSettingsSigmaTables(const QComboBox *solveOptionComboBox,
+                                                         QTableWidget *table) {
+    int rowCount = solveOptionComboBox->currentIndex();
+
+    // Position: { NONE, POSITION, VELOCITY, ACCELERATION, ALL }
+    // Pointing: { NONE, ANGLES, ANGULAR VELOCITY, ANGULAR ACCELERATION, ALL }
+    // Need to add to the solve degree value since number of rows == number of solve coefficients,
+    // and for our polynomials the number of solve coefficients == solve degree + 1
+    // When solve option is ALL (index 4), use the spk/ck solve degree value + 1 for number of rows
+    if (rowCount == 4) {
+      if (solveOptionComboBox == m_ui->positionComboBox) {
+        rowCount = m_ui->spkSolveDegreeSpinBox->value() + 1;
+      }
+      else { // if (solveOptionComboBox == m_ui->pointingComboBox)
+        rowCount = m_ui->ckSolveDegreeSpinBox->value() + 1;
+      }
+    }
+
+    // number of rows == position solve option == SolveDegree value + 1 (i+1)
+    const int oldRowCount = table->rowCount();
+    // if solving ALL, don't add extra row
+    table->setRowCount(rowCount);
+    const int newRowCount = table->rowCount();
+
+    // Need to check if table is valid in case a row is removed (a row is removed implicitly when
+    // the setRowCount() is called when newRowCount < oldRowCount
+    validateSigmaTables();
+
+    // Determine the units for either position or pointing
+    QStringList solveOptions;
+    QString longUnits("N/A");
+    QString shortUnits("N/A");
+    if (solveOptionComboBox == m_ui->positionComboBox) {
+      longUnits = "meters";
+      shortUnits = "m";
+      solveOptions += {"POSITION", "VELOCITY", "ACCELERATION"};
+    }
+    else { // if (solveOptionComboBox == m_ui->pointingComboBox) {
+      longUnits = "degrees";
+      shortUnits = "deg";
+      solveOptions += {"ANGLES", "ANGULAR VELOCITY", "ANGULAR ACCELERATION"};
+    }
+
+    // Rows need to be added
+    if (newRowCount > oldRowCount) {
+      for (int row = oldRowCount; row < newRowCount; row++) {
+        // Headers : coefficient, description, units, a priori sigma
+        QTableWidgetItem *coefficient = new QTableWidgetItem();
+        coefficient->setFlags(Qt::ItemIsEnabled);
+        coefficient->setText(QString::number(row + 1));
+        table->setItem(row, 0, coefficient);
+
+        QTableWidgetItem *description = new QTableWidgetItem();
+        description->setFlags(Qt::ItemIsEnabled);
+        description->setText("N/A");
+        table->setItem(row, 1, description);
+
+        QTableWidgetItem *units = new QTableWidgetItem();
+        units->setFlags(Qt::ItemIsEnabled);
+        units->setText(shortUnits + "/s^" + QString::number(row));
+        table->setItem(row, 2, units);
+
+        QTableWidgetItem *sigma = new QTableWidgetItem();
+        sigma->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
+        sigma->setText("0.0");
+        sigma->setData(Qt::UserRole, QVariant(true));
+        table->setItem(row, 3, sigma);
+
+        // Solve option: spk degree { NONE: -1, POSITION: 0, VELOCITY: 1, ACCELERATION: 2, ALL: 2 }
+        // POSITION
+        if (row == 0) { 
+          QTableWidgetItem *description = table->item(0, 1);
+          description->setText(solveOptions.at(row));
+
+          QTableWidgetItem *units = table->item(0, 2);
+          units->setText(longUnits);
+        }
+
+        // VELOCITY
+        else if (row == 1) {
+          QTableWidgetItem *description = table->item(1, 1);
+          description->setText(solveOptions.at(row));
+
+          QTableWidgetItem *units = table->item(1, 2);
+          units->setText(shortUnits + "/s");
+        }
+
+        // ACCELERATION
+        else if (row == 2) {
+          QTableWidgetItem *description = table->item(2, 1);
+          description->setText(solveOptions.at(row));
+
+          QTableWidgetItem *units = table->item(2, 2);
+          units->setText(shortUnits + "/s^2");
+        }
+      }
+    }
+
+    table->resizeColumnToContents(1);
+    table->resizeColumnToContents(2);
+  }
+
+
+  /**
+   * Slot that listens for when the Instrument Position Solve Option combobox changes.
+   *
+   * This slot updates the value of the SPK Solve Degree spin box according to which solve position
+   * option is selected. This slot also disables the SPK spin boxes whenever a solve
+   * position that is not ALL is selected.
+   *
+   * @param const QString & Reference to the value that the position option combobox was changed to.
+   */
+  void JigsawSetupDialog::on_positionComboBox_currentIndexChanged(const QString &arg1) {
+    int solveIndex = m_ui->positionComboBox->currentIndex();
+    QList<QSpinBox *> spinBoxes{m_ui->spkSolveDegreeSpinBox, m_ui->spkDegreeSpinBox};
+    for (auto &spinBox : spinBoxes) {
+      // ALL enables the solve degree spin box, but does not increase the degree
+      // Below shows the corresponding degree for each of the solve options:
+      //   NONE = -1; ANGLES = 0; VELOCITY = 1; ACCELERATION = 2; ALL = 2
+      if (arg1 == "ALL") {
+        spinBox->setValue(solveIndex - 2);
+        spinBox->setEnabled(true);
+      }
+      else {
+        // The default value for the spk solve degree and spk degree spinboxes is 2. This is
+        // emulating jigsaw's defaults for position solve options that are not ALL.
+        spinBox->setValue(2);
+        spinBox->setEnabled(false);
+      }
+    }
+
+    updateSolveSettingsSigmaTables(m_ui->positionComboBox, m_ui->positionAprioriSigmaTable);
+  }
+
+
+  /**
+   * Slot that listens for when the Instrument Pointing Solve Option combobox changes.
+   *
+   * This slot updates the value of the CK Solve Degree spin box according to which solve pointing
+   * option is selected. This slot also disables the CK spin boxes whenever a solve
+   * pointing that is not ALL is selected.
+   *
+   * @param const QString & Reference to the value that the pointing option combobox was changed to.
+   */
+ void JigsawSetupDialog::on_pointingComboBox_currentIndexChanged(const QString &arg1) {
+    int solveIndex = m_ui->pointingComboBox->currentIndex();
+    QList<QSpinBox *> spinBoxes{m_ui->ckSolveDegreeSpinBox, m_ui->ckDegreeSpinBox};
+    for (auto &spinBox : spinBoxes) {
+      // ALL enables the solve degree spin box, but does not increase the degree
+      // Below shows the corresponding degree for each of the solve options:
+      //   NONE = -1; ANGLES = 0; ANGULAR VELOCITY = 1; ANGULAR ACCELERATION = 2; ALL = 2
+      if (arg1 == "ALL") {
+        spinBox->setValue(solveIndex - 2);
+        spinBox->setEnabled(true);
+      }
+      else {
+        // The default value for the ck solve degree and spk degree spinboxes is 2. This is
+        // emulating jigsaw's defaults for pointing solve options that are not ALL.
+        spinBox->setValue(2);
+        spinBox->setEnabled(false);
+      }
+    }
+
+    updateSolveSettingsSigmaTables(m_ui->pointingComboBox, m_ui->pointingAprioriSigmaTable);
+  }
+
+
+
+  void JigsawSetupDialog::createObservationSolveSettingsTreeView() {
+
+    QList<ProjectItem *> selectedBOSSItems = m_project->directory()->model()->selectedBOSSImages();
+
+    ProjectItemModel *model = m_project->directory()->model();
+
+    SortFilterProxyModel *osspm = new SortFilterProxyModel;
+    osspm->setSourceModel(model);
+
+    //osspm->setDynamicSortFilter(true);
+    osspm->setSelectedItems(selectedBOSSItems );
+    m_ui->treeView->setModel(osspm);
+
+
+
+
+         ProjectItem *imgRoot = model->findItemData(QVariant("Images"),0);
+         if (imgRoot) {
+
+            m_ui->treeView->setRootIndex(osspm->mapFromSource(imgRoot->index()));
+         }
+         else {
+          m_ui->treeView->setRootIndex(QModelIndex());
+         }
+  
+    connect(m_ui->treeView->selectionModel(), 
+            SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), 
+            this, 
+            SLOT(treeViewSelectionChanged(const QItemSelection&,const QItemSelection&)));
+
+
+    // Try to loop through the view here to add the "groups" so they aren't part of the model
+
+    // Add apply button to the tab view
+    // set the text to bold?
+
+
+  }
+
+
+  void JigsawSetupDialog::treeViewSelectionChanged(const QItemSelection &selected, 
+                                                   const QItemSelection &deselected) {
+    QModelIndexList indexList = m_ui->treeView->selectionModel()->selectedRows();
+
+    // qDebug() << "\n\nselected: " << selected.indexes();
+    // qDebug() << "deselected: " << deselected.indexes();
+    // qDebug() << "selectedRows: " << m_ui->treeView->selectionModel()->selectedRows();
+
+
+    if (!indexList.isEmpty()) {
+      QModelIndex displayIndex = indexList[0];
+
+      SortFilterProxyModel * proxyModel = (SortFilterProxyModel *) m_ui->treeView->model(); 
+      ProjectItemModel *sourceModel = (ProjectItemModel *) proxyModel->sourceModel();
+
+      QModelIndex sourceIndex = proxyModel->mapToSource(displayIndex);
+      ProjectItem * projItem = sourceModel->itemFromIndex(sourceIndex);
+
+      if (projItem->isImageList()) {
+        projItem = projItem->child(0);  
+      }
+      BundleObservationSolveSettings settings = m_bundleSettings->observationSolveSettings(
+                                                                projItem->image()->observationNumber());
+
+      // Populate RHS of Observation Solve Settings tab with selected image's BOSS
+      // Instrument Position Solve Options
+      m_ui->positionComboBox->setCurrentIndex(settings.instrumentPositionSolveOption());
+      m_ui->spkSolveDegreeSpinBox->setValue(settings.spkSolveDegree());
+      m_ui->spkDegreeSpinBox->setValue(settings.spkDegree());
+      m_ui->hermiteSplineCheckBox->setChecked(settings.solvePositionOverHermite());
+
+      for (int row = 0; row < settings.aprioriPositionSigmas().count(); row++) {
+        QTableWidgetItem * sigmaItem = m_ui->positionAprioriSigmaTable->item(row, 3);
+        double sigma = settings.aprioriPositionSigmas()[row];
+        if (sigma == Isis::Null) {
+          sigmaItem->setText("FREE");
+        }
+        else {
+          sigmaItem->setText(QString::number(sigma));
+        }
+      }
+
+      // Instrument Pointing Solve Options
+      m_ui->pointingComboBox->setCurrentIndex(settings.instrumentPointingSolveOption());
+      m_ui->ckSolveDegreeSpinBox->setValue(settings.ckSolveDegree());
+      m_ui->ckDegreeSpinBox->setValue(settings.ckDegree());
+      m_ui->twistCheckBox->setChecked(settings.solveTwist());
+      m_ui->fitOverPointingCheckBox->setChecked(settings.solvePolyOverPointing());
+
+      for (int row = 0; row < settings.aprioriPointingSigmas().count(); row++) {
+        QTableWidgetItem * sigmaItem = m_ui->pointingAprioriSigmaTable->item(row, 3);
+        double sigma = settings.aprioriPointingSigmas()[row];
+        if (sigma == Isis::Null) {
+          sigmaItem->setText("FREE");
+        }
+        else {
+          sigmaItem->setText(QString::number(sigma));
+        }
+      }      
+
+    } 
+
+    m_ui->applySettingsPushButton->setEnabled(!selected.isEmpty());
+  }
+
+
+
+  /**
+   * Slot for handling the Observation Solve Settings tab's Apply button. Retrieve's the selected
+   * ProjectItems and adds their images' serial numbers to a new BundleObservationSolveSettings
+   * object. Serial numbers will be removed from all other BOSS objects, and empty BOSS objects will
+   * be removed. 
+   */ 
+  void JigsawSetupDialog::on_applySettingsPushButton_clicked() {
+
+    // Get the current selected images and the item models
+    SortFilterProxyModel * proxyModel = (SortFilterProxyModel *) m_ui->treeView->model();
+    ProjectItemModel *sourceModel = (ProjectItemModel *) proxyModel->sourceModel();
+
+    QModelIndexList selectedIndexes = m_ui->treeView->selectionModel()->selectedIndexes();
+    QStringList selectedObservationNumbers;
+
+    // Append selected images' serial numbers to selectedObservationNumbers
+    foreach (QModelIndex index, selectedIndexes) {
+      QModelIndex sourceIndex = proxyModel->mapToSource(index);
+      ProjectItem * projItem = sourceModel->itemFromIndex(sourceIndex);
+
+      if (projItem) {
+        // Tree traversal is top down so we dont need to do this check for imagelists?
+        if (projItem->isImage()) {
+          // Grab the observation up front so we don't need to re-compose the observation number
+          // more than once (@todo: this should not be necessary when 5026 is integrated)
+          const QString observationNumber = projItem->image()->observationNumber();
+          if (!selectedObservationNumbers.contains(observationNumber)) {
+            selectedObservationNumbers.append(observationNumber);
+          }
+        }
+        else if (projItem->isImageList()) {
+          // Use the proxymodel's children as it might not include all of the sourcemodel's children 
+          for (int i = 0; i < proxyModel->rowCount(index); i++) {
+            QModelIndex childProxyIndex = proxyModel->index(i, 0, index);
+            QModelIndex childSourceIndex = proxyModel->mapToSource(childProxyIndex);
+            ProjectItem * childItem = sourceModel->itemFromIndex(childSourceIndex);
+            selectedObservationNumbers.append(childItem->image()->observationNumber());
+          }
+        }
+      }
+    }
+
+    QList<BundleObservationSolveSettings> solveSettingsList = m_bundleSettings->observationSolveSettings();
+
+    //find the bundle observation solve settings for each of the selected observations and remove
+    // the observation number from them 
+    for (auto &solveSettings : solveSettingsList) {      
+      foreach (QString observationNumber, selectedObservationNumbers) {
+        solveSettings.removeObservationNumber(observationNumber);
+      }
+    }
+
+
+    // Remove any existing solve settings that no longer have any observation numbers
+    int iter = 0;
+    while (iter < solveSettingsList.count()) {
+      if (solveSettingsList[iter].observationNumbers().isEmpty() ) {
+        solveSettingsList.removeAt(iter);
+      }
+      else {
+        iter++; // This list shrinks as we remove, so we dont need to iterate every time
+      }
+    }
+
+    // Create a new bundle observation solve settings
+    BundleObservationSolveSettings solveSettings;
+    foreach (QString observationNumber, selectedObservationNumbers) {
+      solveSettings.addObservationNumber(observationNumber);
+    }
+
+    // Grab the data from the right hand side of the observation solve settings tab to set
+    // up the new bundle observation solve settings
+    updateBundleObservationSolveSettings(solveSettings);
+
+    // Add the new solve settings to the solve settings list
+    solveSettingsList.append(solveSettings);
+
+    // Update bundle settings with the new list of bundle observation solve settings
+    m_bundleSettings->setObservationSolveOptions(solveSettingsList);
+
+    // qDebug()<<"Current BOSS list --------";
+    // for (int i = 0; i < solveSettingsList.count(); i++) {
+    //   qDebug() << "solveSettingsList["<<i<<"]: " << solveSettingsList[i].observationNumbers();
+    // }
+  }
+
 }
diff --git a/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.h b/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.h
index ce80da8d40d0d4457eb4a445a9171921c19f221b..0676933761c42cdf360c49b50caf01b3fc223897 100644
--- a/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.h
+++ b/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.h
@@ -9,8 +9,15 @@ namespace Ui {
   class JigsawSetupDialog;
 }
 
+class QComboBox;
+class QItemSelection;
+class QTableWidget;
+class QTableWidgetItem;
+
 namespace Isis {
+  class BundleObservationSolveSettings;
   class Project;
+  class ProjectItem;
   class Control;
 
   /**
@@ -36,9 +43,9 @@ namespace Isis {
    *   @history 2016-08-18 Jeannie Backer - Removed all references to deprecated solve methods
    *                           SpeckialK and OldSparse. References #4162.
    *   @history 2016-08-25 Adam Paquette - Updated documentation. Fixes #4299.
-   *   @history 2017-04-25 Ian Humphrey - Added public loadSettings() to allow JigsawDialog to
+   *   @history 2017-04-25 Ian Humphrey - Added public loadSettings() to allow JigsawRunWidget to
    *                           load its current settings into the setup dialog. Fixes #4817.
-   *   @history 2017-04-27 Ian Humphrey - Added selectControl() to allow JigsawDialog to
+   *   @history 2017-04-27 Ian Humphrey - Added selectControl() to allow JigsawRunWidget to
    *                           properly tell the setup dialog which control to select in its
    *                           combo box. References #4817.
    *   @history 2017-05-16 Tracie Sucharski - Comment qDebug statements.
@@ -50,8 +57,43 @@ namespace Isis {
    *                           allows for proper restoring of user defined weightings.
    *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open 
    *                           source images. Fixes #5105.
+   *   @history 2018-03-19 Ken Edmundson - Added bundle output control network file name. Added
+   *                           method on_controlNetworkComboBox_currentTextChanged to update the
+   *                           output control network filename when the input control network
+   *                           selected filename changes. E.g. if input control net name is
+   *                           fred.net, the output filename QLineEdit is automatically changed to
+   *                           fred-out.net. The user can always manually change the output control
+   *                           net name to anything they choose.
+   *   @history 2018-06-01 Christopher Combs - Added support for ui changes, exclusive options and 
+   *                           input validators.
+   *   @history 2018-06-21 Ian Humphrey - Added on_applySettingsPushButtonClicked() to listen for when
+   *                           the apply button is clicked on the observation solve settings tab.
+   *                           References #497.
+   *   @history 2018-06-21 Tyler Wilson - Added support in the Bundle Observations Solve Settings
+   *                           (BOSS) tab for displaying user-selected images from the main Project
+   *                           treeview.  All changes were made in the
+   *                           createObservationSolveSettingsTreeView() function.  References #497.
+   *   @history 2018-06-25 Ian Humphrey - Implemented the position and pointing a priori sigma
+   *                           tables in the observation solve settings tab. References #497.
+   *   @history 2018-06-26 Tyler Wilson - Added the function 
+   *                           updateBundleObservationSolveSettings(BundleObservationSolveSettings &) 
+   *                           which grabs BOSS settings from the JSD BOSS tab for selected images 
+   *                           in the BOSS QTreeView and saves them in a BOSS object.
+   *   @history 2018-06-26 Tyler Wilson - Added support in
+   *                           updateBundleObservationSolveSettings(BundleObservationSolveSettings &)
+   *                           for the user to set an arbitrary number of position/pointing Apriori
+   *                           Sigma values beyond position/velocity/acceleration.  References #497.
+   *   @history 2018-06-27 Ian Humphrey - Added validateSigmaTables() that checks if there are any
+   *                           invalid a priori sigma values whenever an a priori sigma values changes.
+   *                           If any value is invalid, the OK and Apply Settings buttons are disabled
+   *                           until all the a priori sigma values are valid again. References #497.
+   *   @history 2018-06-28 Christopher Combs - Implemented pseudocode in on_applySettings... method.
+   *                           Added selected images to default BOSS object. References #497.
+   *   @history 2018-07-01 Ian Humphrey - Added updateSolveSettingsSigmaTables() to try to
+   *                           generalize how the sigma tables are updated. Solve options have
+   *                           their respective solve degree and degree combo boxes set to 2 unless
+   *                           the solve option is ALL. References #497.
    */
-
   class JigsawSetupDialog : public QDialog {
     Q_OBJECT
 
@@ -63,26 +105,43 @@ namespace Isis {
                                QWidget *parent = 0);
     ~JigsawSetupDialog();
 
-    Control *selectedControl();// TODO: return const references ???
-    QString selectedControlName();// TODO: return const references ???
-    BundleSettingsQsp bundleSettings();// TODO: return const references ???
+    Control *selectedControl();                                 // TODO: return const references ???
+    QString selectedControlName();                              // TODO: return const references ???
+    QString outputControlName();                                // TODO: return const references ???
+    BundleSettingsQsp bundleSettings();                         // TODO: return const references ???
 
     void loadSettings(const BundleSettingsQsp settings);
     void selectControl(const QString &controlName);
 
   private slots:
 
-    void on_radiusCheckBox_toggled(bool checked);
+    void on_pointRadiusSigmaCheckBox_toggled(bool checked);
+    //void on_projectItemSelectionChanged(const QList<ProjectItem *> selectedItems);
     //void on_outlierRejectionCheckBox_toggled(bool checked);
 
     // general tab
-    void on_positionComboBox_currentIndexChanged(int index);
-    void on_pointingComboBox_currentIndexChanged(int index);
+    // void on_positionComboBox_currentIndexChanged(int index);
+    // void on_pointingComboBox_currentIndexChanged(int index);
+    void on_inputControlNetCombo_currentTextChanged(const QString &arg1);
+
+    // general tab - line edit validators 
+    void on_pointLatitudeSigmaLineEdit_textChanged(const QString &arg1);
+    void on_pointLongitudeSigmaLineEdit_textChanged(const QString &arg1);
+    void on_pointRadiusSigmaLineEdit_textChanged(const QString &arg1);
+
+    void on_outlierRejectionMultiplierLineEdit_textChanged(const QString &arg1);
+    void on_maximumLikelihoodModel1QuantileLineEdit_textChanged(const QString &arg1);
+    void on_maximumLikelihoodModel2QuantileLineEdit_textChanged(const QString &arg1);
+    void on_maximumLikelihoodModel3QuantileLineEdit_textChanged(const QString &arg1);
+
+    void on_sigma0ThresholdLineEdit_textChanged(const QString &arg1);
+    void on_maximumIterationsLineEdit_textChanged(const QString &arg1);
 
-    // maximum liklihood tab
+    // general tab - outlier rejection exclusivity lock/unlocks
     void on_maximumLikelihoodModel1ComboBox_currentIndexChanged(int index);
     void on_maximumLikelihoodModel2ComboBox_currentIndexChanged(int index);
     void on_maximumLikelihoodModel3ComboBox_currentIndexChanged(int index);
+    void on_outlierRejectionCheckBox_stateChanged(int arg1);
 
     // target body tab
     void on_poleRaCheckBox_stateChanged(int arg1);
@@ -94,28 +153,46 @@ namespace Isis {
     void on_radiiButtonGroupClicked(int arg1);
     void on_aRadiusLineEdit_textChanged(const QString &arg1);
     void on_targetBodyComboBox_currentIndexChanged(int index);
-    void on_spkSolveDegreeSpinBox_2_valueChanged(int arg1);
+    void on_spkSolveDegreeSpinBox_valueChanged(int arg1);
+    void on_ckSolveDegreeSpinBox_valueChanged(int arg1);
     void on_rightAscensionLineEdit_textChanged(const QString &arg1);
     void on_declinationLineEdit_textChanged(const QString &arg1);
     void on_rightAscensionVelocityLineEdit_textChanged(const QString &arg1);
     void on_declinationVelocityLineEdit_textChanged(const QString &arg1);
     void on_spinRateLineEdit_textChanged(const QString &arg1);
     void on_primeMeridianOffsetLineEdit_textChanged(const QString &arg1);
+    
+    void on_applySettingsPushButton_clicked();
+
+    void on_positionComboBox_currentIndexChanged(const QString &arg1);
+    void on_pointingComboBox_currentIndexChanged(const QString &arg1);
+
+    void updateSolveSettingsSigmaTables(const QComboBox *solveOptionComboBox, 
+                                        QTableWidget *table);
+    void validateSigmaValue(QTableWidgetItem *);
+    void validateSigmaTables();
+    
 
     public slots:
     void slotTextChanged(const QString &text);
     void checkIsValid();
+    void treeViewSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+
 
 
     private:
-    void makeReadOnly()    ;
+    void makeReadOnly();
     void fillFromSettings(const BundleSettingsQsp settings);
     void showTargetParametersGroupBox();
     void hideTargetParametersGroupBox();
+    void updateBundleObservationSolveSettings(BundleObservationSolveSettings &boss);
+
+    void createObservationSolveSettingsTreeView();
 
   private:
     Ui::JigsawSetupDialog *m_ui;
     Project *m_project;
+    BundleSettingsQsp m_bundleSettings; /**< The BundleSettings Object created by this dialog */
   };
 };
 #endif // JigsawSetupDialog_h
diff --git a/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.ui b/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.ui
index ff00971a6f9a3ea9da5a95e695ae532880a26893..da59e250036bfff562158ccd40aef2c0e777c587 100644
--- a/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.ui
+++ b/isis/src/qisis/objs/JigsawSetupDialog/JigsawSetupDialog.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>977</width>
-    <height>678</height>
+    <width>1000</width>
+    <height>700</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -43,7 +43,7 @@
           </sizepolicy>
          </property>
          <property name="currentIndex">
-          <number>5</number>
+          <number>1</number>
          </property>
          <widget class="QWidget" name="generalSettingsTab">
           <attribute name="title">
@@ -51,568 +51,1144 @@
           </attribute>
           <layout class="QGridLayout" name="gridLayout_2">
            <item row="0" column="0">
-            <layout class="QHBoxLayout" name="horizontalLayout_2">
-             <property name="sizeConstraint">
-              <enum>QLayout::SetFixedSize</enum>
-             </property>
+            <layout class="QHBoxLayout" name="horizontalLayout_7">
              <item>
-              <layout class="QGridLayout" name="solveOptionsAndConvergencCriteriaGridLayout">
-               <item row="4" column="0" colspan="2">
-                <widget class="QCheckBox" name="updateCubeLabelCheckBox">
+              <layout class="QVBoxLayout" name="verticalLayout_6">
+               <item>
+                <layout class="QVBoxLayout" name="verticalLayout_8">
+                 <item>
+                  <widget class="QLabel" name="label">
+                   <property name="minimumSize">
+                    <size>
+                     <width>0</width>
+                     <height>15</height>
+                    </size>
+                   </property>
+                   <property name="text">
+                    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Data&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                   </property>
+                   <property name="scaledContents">
+                    <bool>true</bool>
+                   </property>
+                  </widget>
+                 </item>
+                 <item>
+                  <widget class="QGroupBox" name="groupBox_6">
+                   <property name="sizePolicy">
+                    <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                     <horstretch>0</horstretch>
+                     <verstretch>0</verstretch>
+                    </sizepolicy>
+                   </property>
+                   <property name="minimumSize">
+                    <size>
+                     <width>0</width>
+                     <height>0</height>
+                    </size>
+                   </property>
+                   <property name="autoFillBackground">
+                    <bool>false</bool>
+                   </property>
+                   <property name="title">
+                    <string/>
+                   </property>
+                   <property name="alignment">
+                    <set>Qt::AlignCenter</set>
+                   </property>
+                   <layout class="QGridLayout" name="gridLayout_11">
+                    <item row="1" column="1">
+                     <widget class="QLineEdit" name="outputControlNetLineEdit">
+                      <property name="sizePolicy">
+                       <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                        <horstretch>0</horstretch>
+                        <verstretch>0</verstretch>
+                       </sizepolicy>
+                      </property>
+                     </widget>
+                    </item>
+                    <item row="1" column="0">
+                     <widget class="QLabel" name="outputControlNetLabel">
+                      <property name="sizePolicy">
+                       <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+                        <horstretch>0</horstretch>
+                        <verstretch>0</verstretch>
+                       </sizepolicy>
+                      </property>
+                      <property name="maximumSize">
+                       <size>
+                        <width>150</width>
+                        <height>16777215</height>
+                       </size>
+                      </property>
+                      <property name="text">
+                       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;right&quot;&gt;Output Control Net&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                      </property>
+                      <property name="textFormat">
+                       <enum>Qt::RichText</enum>
+                      </property>
+                     </widget>
+                    </item>
+                    <item row="0" column="0">
+                     <widget class="QLabel" name="inputControlNetLabel">
+                      <property name="sizePolicy">
+                       <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+                        <horstretch>0</horstretch>
+                        <verstretch>0</verstretch>
+                       </sizepolicy>
+                      </property>
+                      <property name="maximumSize">
+                       <size>
+                        <width>150</width>
+                        <height>16777215</height>
+                       </size>
+                      </property>
+                      <property name="text">
+                       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;right&quot;&gt;Input Control Net&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item row="0" column="1">
+                     <widget class="QComboBox" name="inputControlNetCombo">
+                      <property name="sizePolicy">
+                       <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                        <horstretch>0</horstretch>
+                        <verstretch>0</verstretch>
+                       </sizepolicy>
+                      </property>
+                      <property name="sizeAdjustPolicy">
+                       <enum>QComboBox::AdjustToContents</enum>
+                      </property>
+                     </widget>
+                    </item>
+                   </layout>
+                  </widget>
+                 </item>
+                 <item>
+                  <spacer name="verticalSpacer_5">
+                   <property name="orientation">
+                    <enum>Qt::Vertical</enum>
+                   </property>
+                   <property name="sizeType">
+                    <enum>QSizePolicy::Preferred</enum>
+                   </property>
+                   <property name="sizeHint" stdset="0">
+                    <size>
+                     <width>20</width>
+                     <height>50</height>
+                    </size>
+                   </property>
+                  </spacer>
+                 </item>
+                 <item>
+                  <widget class="QLabel" name="label_2">
+                   <property name="minimumSize">
+                    <size>
+                     <width>0</width>
+                     <height>15</height>
+                    </size>
+                   </property>
+                   <property name="text">
+                    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Outlier Rejection Options&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                   </property>
+                  </widget>
+                 </item>
+                </layout>
+               </item>
+               <item>
+                <widget class="QGroupBox" name="groupBox_8">
                  <property name="sizePolicy">
                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
-                 <property name="text">
-                  <string>Update Cube Label</string>
+                 <property name="title">
+                  <string/>
                  </property>
+                 <layout class="QGridLayout" name="gridLayout_4">
+                  <item row="1" column="3">
+                   <spacer name="horizontalSpacer_7">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>40</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="1" column="0">
+                   <spacer name="horizontalSpacer">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>40</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="1" column="2">
+                   <widget class="QLineEdit" name="outlierRejectionMultiplierLineEdit">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Outlier Rejection Multiplier&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="text">
+                     <string>3.0</string>
+                    </property>
+                    <property name="alignment">
+                     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                    </property>
+                    <property name="placeholderText">
+                     <string/>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="1" column="1">
+                   <widget class="QCheckBox" name="outlierRejectionCheckBox">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>0</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>1000</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Image measures are flagged as rejected if their residuals are greater 
+than the multiplier times the current standard deviation (sigma).
+
+Must be positive.</string>
+                    </property>
+                    <property name="layoutDirection">
+                     <enum>Qt::LeftToRight</enum>
+                    </property>
+                    <property name="text">
+                     <string>Sigma Multiplier</string>
+                    </property>
+                   </widget>
+                  </item>
+                 </layout>
                 </widget>
                </item>
-               <item row="7" column="0">
-                <widget class="QCheckBox" name="outlierRejectionCheckBox">
+               <item>
+                <widget class="QGroupBox" name="groupBox_7">
                  <property name="sizePolicy">
-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                  <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
                  <property name="minimumSize">
                   <size>
-                   <width>74</width>
+                   <width>0</width>
                    <height>0</height>
                   </size>
                  </property>
-                 <property name="text">
-                  <string>Outlier Rejection</string>
-                 </property>
-                </widget>
-               </item>
-               <item row="6" column="1" colspan="2">
-                <widget class="QLabel" name="outlierRejectionMultiplierLabel">
-                 <property name="enabled">
+                 <property name="autoFillBackground">
                   <bool>false</bool>
                  </property>
-                 <property name="text">
-                  <string>Multiplier</string>
+                 <property name="title">
+                  <string/>
                  </property>
                  <property name="alignment">
                   <set>Qt::AlignCenter</set>
                  </property>
-                 <property name="buddy">
-                  <cstring>outlierRejectionMultiplierLineEdit</cstring>
-                 </property>
-                </widget>
-               </item>
-               <item row="3" column="0" colspan="2">
-                <widget class="QCheckBox" name="radiusCheckBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
+                 <property name="flat">
+                  <bool>false</bool>
                  </property>
-                 <property name="text">
-                  <string>Radius</string>
+                 <property name="checkable">
+                  <bool>false</bool>
                  </property>
+                 <layout class="QGridLayout" name="gridLayout_14">
+                  <item row="6" column="1" colspan="2">
+                   <widget class="QComboBox" name="maximumLikelihoodModel1ComboBox">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <item>
+                     <property name="text">
+                      <string>NONE</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>HUBER</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>HUBER MODIFIED</string>
+                     </property>
+                    </item>
+                   </widget>
+                  </item>
+                  <item row="8" column="3">
+                   <widget class="QLineEdit" name="maximumLikelihoodModel3QuantileLineEdit">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>0.5</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="7" column="3">
+                   <widget class="QLineEdit" name="maximumLikelihoodModel2QuantileLineEdit">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>0.5</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="6" column="3">
+                   <widget class="QLineEdit" name="maximumLikelihoodModel1QuantileLineEdit">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>0.5</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="7" column="1" colspan="2">
+                   <widget class="QComboBox" name="maximumLikelihoodModel2ComboBox">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <item>
+                     <property name="text">
+                      <string>NONE</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>HUBER</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>HUBER MODIFIED</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>WELSCH</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>CHEN</string>
+                     </property>
+                    </item>
+                   </widget>
+                  </item>
+                  <item row="7" column="0" alignment="Qt::AlignRight">
+                   <widget class="QLabel" name="maximumLikelihoodModel2Label">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>0</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1.0e-10 to 1.0</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Model 2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="buddy">
+                     <cstring>maximumLikelihoodModel2ComboBox</cstring>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="8" column="1" colspan="2">
+                   <widget class="QComboBox" name="maximumLikelihoodModel3ComboBox">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <item>
+                     <property name="text">
+                      <string>NONE</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>HUBER</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>HUBER MODIFIED</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>WELSCH</string>
+                     </property>
+                    </item>
+                    <item>
+                     <property name="text">
+                      <string>CHEN</string>
+                     </property>
+                    </item>
+                   </widget>
+                  </item>
+                  <item row="6" column="0" alignment="Qt::AlignRight">
+                   <widget class="QLabel" name="maximumLikelihoodModel1Label">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>0</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1.0e-10 to 1.0</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Model 1&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="buddy">
+                     <cstring>maximumLikelihoodModel1ComboBox</cstring>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="8" column="0" alignment="Qt::AlignRight">
+                   <widget class="QLabel" name="maximumLikelihoodModel3Label">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>0</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="acceptDrops">
+                     <bool>false</bool>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1.0e-10 to 1.0</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Model 3&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="buddy">
+                     <cstring>maximumLikelihoodModel3ComboBox</cstring>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="4" column="0" colspan="4">
+                   <widget class="QLabel" name="maxLikelihoodEstimationLabel">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="toolTip">
+                     <string>Maximum Likelihood Estimation and Sigma Multiplier are exclusive options. 
+Set Model 1 to &quot;NONE&quot; before checking Sigma Multiplier.</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Maximum Likelihood Estimation&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="5" column="3" alignment="Qt::AlignHCenter">
+                   <widget class="QLabel" name="CQuantileLabel">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="text">
+                     <string>C Quantile</string>
+                    </property>
+                   </widget>
+                  </item>
+                 </layout>
                 </widget>
                </item>
-               <item row="11" column="1">
-                <widget class="QLineEdit" name="sigma0ThresholdLineEdit">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
+              </layout>
+             </item>
+             <item>
+              <spacer name="horizontalSpacer_2">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeType">
+                <enum>QSizePolicy::Preferred</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>50</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item>
+              <layout class="QVBoxLayout" name="verticalLayout_7">
+               <item>
+                <widget class="QLabel" name="label_3">
                  <property name="minimumSize">
                   <size>
-                   <width>78</width>
-                   <height>0</height>
+                   <width>0</width>
+                   <height>20</height>
                   </size>
                  </property>
                  <property name="text">
-                  <string>1.0e-10</string>
-                 </property>
-                </widget>
-               </item>
-               <item row="2" column="0" colspan="2">
-                <widget class="QCheckBox" name="observationModeCheckBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="text">
-                  <string>Observation Mode</string>
+                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Convergence Criteria&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                  </property>
                 </widget>
                </item>
-               <item row="5" column="0" colspan="2">
-                <widget class="QCheckBox" name="errorPropagationCheckBox">
+               <item>
+                <widget class="QGroupBox" name="groupBox_3">
                  <property name="sizePolicy">
-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                  <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
                  <property name="minimumSize">
                   <size>
-                   <width>74</width>
-                   <height>0</height>
+                   <width>0</width>
+                   <height>150</height>
                   </size>
                  </property>
-                 <property name="text">
-                  <string>Error Propagation</string>
-                 </property>
-                </widget>
-               </item>
-               <item row="11" column="0">
-                <widget class="QLabel" name="sigma0ThresholdLabel">
-                 <property name="text">
-                  <string>Sigma0Threshold</string>
-                 </property>
-                 <property name="buddy">
-                  <cstring>sigma0ThresholdLineEdit</cstring>
-                 </property>
-                </widget>
-               </item>
-               <item row="12" column="0">
-                <widget class="QLabel" name="maximumIterationsLabel">
-                 <property name="text">
-                  <string>Maximum Iterations</string>
-                 </property>
-                 <property name="buddy">
-                  <cstring>maximumIterationsLineEdit</cstring>
-                 </property>
-                </widget>
-               </item>
-               <item row="7" column="1" colspan="2">
-                <widget class="QLineEdit" name="outlierRejectionMultiplierLineEdit">
-                 <property name="enabled">
+                 <property name="autoFillBackground">
                   <bool>false</bool>
                  </property>
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="toolTip">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Outlier Rejection Multiplier&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="text">
-                  <string>3.0</string>
-                 </property>
-                 <property name="placeholderText">
+                 <property name="title">
                   <string/>
                  </property>
+                 <property name="alignment">
+                  <set>Qt::AlignCenter</set>
+                 </property>
+                 <layout class="QGridLayout" name="gridLayout_17">
+                  <item row="0" column="2" alignment="Qt::AlignRight">
+                   <widget class="QLineEdit" name="sigma0ThresholdLineEdit">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>78</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>100</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>1.0e-10</string>
+                    </property>
+                    <property name="alignment">
+                     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="0" column="1" alignment="Qt::AlignRight">
+                   <widget class="QLabel" name="sigma0ThresholdLabel">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>150</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1.0e-10 to 1.0e+10</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;right&quot;&gt;Sigma&amp;amp;0 Threshold&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="buddy">
+                     <cstring>sigma0ThresholdLineEdit</cstring>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="1" column="2">
+                   <widget class="QLineEdit" name="maximumIterationsLineEdit">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>100</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>50</string>
+                    </property>
+                    <property name="alignment">
+                     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="0" column="3" rowspan="2">
+                   <spacer name="horizontalSpacer_6">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                     <enum>QSizePolicy::Expanding</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>10</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="1" column="1" alignment="Qt::AlignHCenter">
+                   <widget class="QLabel" name="maximumIterationsLabel">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>150</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1 to 10,000</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;right&quot;&gt;Ma&amp;amp;ximum Iterations&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="buddy">
+                     <cstring>maximumIterationsLineEdit</cstring>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="0" column="0" rowspan="2">
+                   <spacer name="horizontalSpacer_5">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                     <enum>QSizePolicy::Expanding</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>10</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                 </layout>
                 </widget>
                </item>
-               <item row="8" column="0" colspan="2">
-                <spacer name="solveOptionsToConvergenceCriteriaVerticalSpacer">
+               <item>
+                <spacer name="verticalSpacer_3">
                  <property name="orientation">
                   <enum>Qt::Vertical</enum>
                  </property>
                  <property name="sizeType">
-                  <enum>QSizePolicy::Preferred</enum>
+                  <enum>QSizePolicy::Expanding</enum>
                  </property>
                  <property name="sizeHint" stdset="0">
                   <size>
                    <width>20</width>
-                   <height>40</height>
+                   <height>50</height>
                   </size>
                  </property>
                 </spacer>
                </item>
-               <item row="9" column="0" colspan="2">
-                <widget class="QLabel" name="convergenceCriteriaLabel">
-                 <property name="text">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Convergence Criteria&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="alignment">
-                  <set>Qt::AlignCenter</set>
-                 </property>
-                </widget>
-               </item>
-               <item row="0" column="0" colspan="2">
-                <widget class="QLabel" name="solveMethodLabel">
-                 <property name="text">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Solve Method and Options&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="alignment">
-                  <set>Qt::AlignCenter</set>
-                 </property>
-                </widget>
-               </item>
-               <item row="12" column="1">
-                <widget class="QLineEdit" name="maximumIterationsLineEdit">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="text">
-                  <string>50</string>
-                 </property>
-                </widget>
-               </item>
-              </layout>
-             </item>
-             <item>
-              <layout class="QGridLayout" name="controlNetPositionAndPointingOptionsGridLayout">
-               <item row="12" column="0" colspan="2">
-                <widget class="QCheckBox" name="fitOverPointingCheckBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
+               <item>
+                <widget class="QLabel" name="label_4">
                  <property name="minimumSize">
                   <size>
-                   <width>269</width>
-                   <height>0</height>
+                   <width>0</width>
+                   <height>20</height>
                   </size>
                  </property>
                  <property name="text">
-                  <string>Fit Polynomial over Existing Pointing</string>
-                 </property>
-                </widget>
-               </item>
-               <item row="6" column="0">
-                <widget class="QLabel" name="spkDegreeLabel">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="text">
-                  <string>SPKDegree</string>
-                 </property>
-                 <property name="buddy">
-                  <cstring>spkDegreeSpinBox</cstring>
+                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Global Apriori Point Sigmas (meters)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                  </property>
                 </widget>
                </item>
-               <item row="9" column="0" colspan="2">
-                <widget class="QLabel" name="pointingSolveOptionsLabel">
+               <item>
+                <widget class="QGroupBox" name="groupBox_4">
                  <property name="sizePolicy">
-                  <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+                  <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
                  <property name="minimumSize">
                   <size>
-                   <width>269</width>
-                   <height>0</height>
+                   <width>0</width>
+                   <height>200</height>
                   </size>
                  </property>
-                 <property name="text">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Instrument Pointing Solve Options&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="scaledContents">
+                 <property name="autoFillBackground">
                   <bool>false</bool>
                  </property>
+                 <property name="title">
+                  <string/>
+                 </property>
                  <property name="alignment">
                   <set>Qt::AlignCenter</set>
                  </property>
+                 <layout class="QGridLayout" name="gridLayout_13">
+                  <item row="1" column="0">
+                   <spacer name="horizontalSpacer_3">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                     <enum>QSizePolicy::Expanding</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>10</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="1" column="2">
+                   <widget class="QLineEdit" name="pointLongitudeSigmaLineEdit">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>100</height>
+                     </size>
+                    </property>
+                    <property name="alignment">
+                     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="1" column="3">
+                   <spacer name="horizontalSpacer_4">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                     <enum>QSizePolicy::Expanding</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>10</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="1" column="1" alignment="Qt::AlignRight">
+                   <widget class="QLabel" name="pointLongitudeSigmaLabel">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1.0e-10 to 1.0e+10</string>
+                    </property>
+                    <property name="layoutDirection">
+                     <enum>Qt::LeftToRight</enum>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Longitude&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="textFormat">
+                     <enum>Qt::RichText</enum>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="0" column="2">
+                   <widget class="QLineEdit" name="pointLatitudeSigmaLineEdit">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>100</height>
+                     </size>
+                    </property>
+                    <property name="inputMask">
+                     <string/>
+                    </property>
+                    <property name="alignment">
+                     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="2" column="2">
+                   <widget class="QLineEdit" name="pointRadiusSigmaLineEdit">
+                    <property name="enabled">
+                     <bool>false</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>100</height>
+                     </size>
+                    </property>
+                    <property name="alignment">
+                     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="2" column="1" alignment="Qt::AlignRight">
+                   <widget class="QCheckBox" name="pointRadiusSigmaCheckBox">
+                    <property name="enabled">
+                     <bool>true</bool>
+                    </property>
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Solve for local point radii. 
+
+Valid Range: 1.0e-10 to 1.0e+10</string>
+                    </property>
+                    <property name="layoutDirection">
+                     <enum>Qt::LeftToRight</enum>
+                    </property>
+                    <property name="text">
+                     <string>Radius</string>
+                    </property>
+                    <property name="tristate">
+                     <bool>false</bool>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="0" column="1" alignment="Qt::AlignRight">
+                   <widget class="QLabel" name="pointLatitudeSigmaLabel">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>100</width>
+                      <height>16777215</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Valid Range: 1.0e-10 to 1.0e+10</string>
+                    </property>
+                    <property name="text">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Latitude&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
+                    <property name="textFormat">
+                     <enum>Qt::RichText</enum>
+                    </property>
+                   </widget>
+                  </item>
+                 </layout>
                 </widget>
                </item>
-               <item row="5" column="0" colspan="2">
-                <widget class="QCheckBox" name="hermiteSplineCheckBox">
-                 <property name="enabled">
-                  <bool>false</bool>
-                 </property>
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="text">
-                  <string>Solve over Hermite Spline</string>
-                 </property>
-                </widget>
-               </item>
-               <item row="7" column="0">
-                <widget class="QLabel" name="spkSolveDegreeLabel">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="text">
-                  <string>SPKSolveDegree</string>
-                 </property>
-                 <property name="buddy">
-                  <cstring>spkSolveDegreeSpinBox</cstring>
-                 </property>
-                </widget>
-               </item>
-               <item row="6" column="1">
-                <widget class="QSpinBox" name="spkDegreeSpinBox">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="minimum">
-                  <number>1</number>
-                 </property>
-                 <property name="value">
-                  <number>2</number>
-                 </property>
-                </widget>
-               </item>
-               <item row="8" column="0" colspan="2">
-                <spacer name="spkToCkOptionsverticalSpacer">
+               <item>
+                <spacer name="verticalSpacer_4">
                  <property name="orientation">
                   <enum>Qt::Vertical</enum>
                  </property>
                  <property name="sizeType">
-                  <enum>QSizePolicy::Preferred</enum>
+                  <enum>QSizePolicy::Expanding</enum>
                  </property>
                  <property name="sizeHint" stdset="0">
                   <size>
                    <width>20</width>
-                   <height>40</height>
+                   <height>50</height>
                   </size>
                  </property>
                 </spacer>
                </item>
-               <item row="1" column="0" colspan="2">
-                <widget class="QComboBox" name="controlNetworkComboBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                </widget>
-               </item>
-               <item row="3" column="0" colspan="2">
-                <widget class="QLabel" name="positionSolveOptionsLabel">
-                 <property name="text">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Instrument Solve Options&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="scaledContents">
-                  <bool>false</bool>
-                 </property>
-                 <property name="alignment">
-                  <set>Qt::AlignCenter</set>
+               <item>
+                <widget class="QLabel" name="label_5">
+                 <property name="minimumSize">
+                  <size>
+                   <width>0</width>
+                   <height>20</height>
+                  </size>
                  </property>
-                </widget>
-               </item>
-               <item row="0" column="0" colspan="2">
-                <widget class="QLabel" name="controlNetworkLabel">
                  <property name="text">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Control Network&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="alignment">
-                  <set>Qt::AlignCenter</set>
+                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Other&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                  </property>
                 </widget>
                </item>
-               <item row="14" column="1">
-                <widget class="QSpinBox" name="ckSolveDegreeSpinBox">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
+               <item>
+                <widget class="QGroupBox" name="groupBox_5">
                  <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+                  <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
-                 <property name="minimum">
-                  <number>1</number>
-                 </property>
-                 <property name="value">
-                  <number>2</number>
-                 </property>
-                </widget>
-               </item>
-               <item row="13" column="0">
-                <widget class="QLabel" name="ckDegreeLabel">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="text">
-                  <string>CKDegree</string>
-                 </property>
-                 <property name="buddy">
-                  <cstring>ckDegreeSpinBox</cstring>
-                 </property>
-                </widget>
-               </item>
-               <item row="2" column="0" colspan="2">
-                <spacer name="controlNetworkToSpkOptionsVerticalSpacer">
-                 <property name="orientation">
-                  <enum>Qt::Vertical</enum>
-                 </property>
-                 <property name="sizeType">
-                  <enum>QSizePolicy::Preferred</enum>
-                 </property>
-                 <property name="sizeHint" stdset="0">
+                 <property name="minimumSize">
                   <size>
-                   <width>20</width>
-                   <height>40</height>
+                   <width>0</width>
+                   <height>100</height>
                   </size>
                  </property>
-                </spacer>
-               </item>
-               <item row="7" column="1">
-                <widget class="QSpinBox" name="spkSolveDegreeSpinBox">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="minimum">
-                  <number>1</number>
-                 </property>
-                 <property name="value">
-                  <number>2</number>
-                 </property>
-                </widget>
-               </item>
-               <item row="14" column="0">
-                <widget class="QLabel" name="ckSolveDegreeLabel">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="text">
-                  <string>CKSolveDegree</string>
-                 </property>
-                 <property name="buddy">
-                  <cstring>ckSolveDegreeSpinBox</cstring>
-                 </property>
-                </widget>
-               </item>
-               <item row="13" column="1">
-                <widget class="QSpinBox" name="ckDegreeSpinBox">
-                 <property name="enabled">
-                  <bool>true</bool>
-                 </property>
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
+                 <property name="autoFillBackground">
+                  <bool>false</bool>
                  </property>
-                 <property name="minimum">
-                  <number>1</number>
+                 <property name="title">
+                  <string/>
                  </property>
-                 <property name="value">
-                  <number>2</number>
-                 </property>
-                </widget>
-               </item>
-               <item row="4" column="0" colspan="2">
-                <widget class="QComboBox" name="positionComboBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="toolTip">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Instrument Solve Options&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <item>
-                  <property name="text">
-                   <string>NONE</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>POSITIONS</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>VELOCITIES</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>ACCELERATIONS</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>ALL</string>
-                  </property>
-                 </item>
-                </widget>
-               </item>
-               <item row="10" column="0" colspan="2">
-                <widget class="QComboBox" name="pointingComboBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="toolTip">
-                  <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Instrument Pointing Options&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                 </property>
-                 <property name="currentIndex">
-                  <number>0</number>
-                 </property>
-                 <property name="frame">
-                  <bool>true</bool>
-                 </property>
-                 <item>
-                  <property name="text">
-                   <string>ANGLES</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>NONE</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>VELOCITIES</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>ACCELERATIONS</string>
-                  </property>
-                 </item>
-                 <item>
-                  <property name="text">
-                   <string>ALL</string>
-                  </property>
-                 </item>
-                </widget>
-               </item>
-               <item row="11" column="0" colspan="2">
-                <widget class="QCheckBox" name="twistCheckBox">
-                 <property name="sizePolicy">
-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                   <horstretch>0</horstretch>
-                   <verstretch>0</verstretch>
-                  </sizepolicy>
-                 </property>
-                 <property name="text">
-                  <string>Twist</string>
-                 </property>
-                 <property name="checked">
-                  <bool>true</bool>
+                 <property name="alignment">
+                  <set>Qt::AlignCenter</set>
                  </property>
+                 <layout class="QVBoxLayout" name="verticalLayout_4">
+                  <item alignment="Qt::AlignHCenter">
+                   <widget class="QCheckBox" name="observationModeCheckBox">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>16777215</width>
+                      <height>40</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Constrain position and pointing for images within an observation to be identical</string>
+                    </property>
+                    <property name="text">
+                     <string>Observation Mode</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item alignment="Qt::AlignHCenter">
+                   <widget class="QCheckBox" name="errorPropagationCheckBox">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>74</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="maximumSize">
+                     <size>
+                      <width>16777215</width>
+                      <height>40</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>Compute adjusted parameter uncertainties</string>
+                    </property>
+                    <property name="text">
+                     <string>Error Propagation</string>
+                    </property>
+                   </widget>
+                  </item>
+                 </layout>
                 </widget>
                </item>
               </layout>
@@ -629,7 +1205,7 @@
            <item row="0" column="1">
             <widget class="QGroupBox" name="groupBox">
              <property name="title">
-              <string>Position</string>
+              <string>Instrument Position Solve Options</string>
              </property>
              <property name="flat">
               <bool>false</bool>
@@ -638,46 +1214,11 @@
               <bool>false</bool>
              </property>
              <layout class="QGridLayout" name="gridLayout_9">
-              <item row="0" column="0">
-               <widget class="QLabel" name="spkDegreeLabel_2">
-                <property name="enabled">
-                 <bool>true</bool>
-                </property>
-                <property name="text">
-                 <string>SPK Initialization Polynomial Degree</string>
-                </property>
-                <property name="wordWrap">
-                 <bool>true</bool>
-                </property>
-                <property name="buddy">
-                 <cstring>spkDegreeSpinBox</cstring>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="1">
-               <widget class="QSpinBox" name="spkDegreeSpinBox_2">
+              <item row="2" column="2">
+               <widget class="QCheckBox" name="hermiteSplineCheckBox">
                 <property name="enabled">
                  <bool>true</bool>
                 </property>
-                <property name="sizePolicy">
-                 <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="minimum">
-                 <number>1</number>
-                </property>
-                <property name="value">
-                 <number>2</number>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="2">
-               <widget class="QCheckBox" name="hermiteSplineCheckBox_2">
-                <property name="enabled">
-                 <bool>false</bool>
-                </property>
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
                   <horstretch>0</horstretch>
@@ -689,42 +1230,7 @@
                 </property>
                </widget>
               </item>
-              <item row="1" column="0">
-               <widget class="QLabel" name="spkSolveDegreeLabel_2">
-                <property name="enabled">
-                 <bool>true</bool>
-                </property>
-                <property name="text">
-                 <string>SPK Solve Polynomial Degree</string>
-                </property>
-                <property name="wordWrap">
-                 <bool>true</bool>
-                </property>
-                <property name="buddy">
-                 <cstring>spkSolveDegreeSpinBox</cstring>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="1">
-               <widget class="QSpinBox" name="spkSolveDegreeSpinBox_2">
-                <property name="enabled">
-                 <bool>true</bool>
-                </property>
-                <property name="sizePolicy">
-                 <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="minimum">
-                 <number>-1</number>
-                </property>
-                <property name="value">
-                 <number>0</number>
-                </property>
-               </widget>
-              </item>
-              <item row="2" column="0" colspan="3">
+              <item row="4" column="0" colspan="3">
                <widget class="QTableWidget" name="positionAprioriSigmaTable">
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@@ -734,7 +1240,7 @@
                 </property>
                 <property name="maximumSize">
                  <size>
-                  <width>390</width>
+                  <width>16777215</width>
                   <height>16777215</height>
                  </size>
                 </property>
@@ -742,13 +1248,19 @@
                  <enum>Qt::ScrollBarAsNeeded</enum>
                 </property>
                 <property name="horizontalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAlwaysOff</enum>
+                 <enum>Qt::ScrollBarAsNeeded</enum>
+                </property>
+                <property name="autoScroll">
+                 <bool>true</bool>
+                </property>
+                <property name="alternatingRowColors">
+                 <bool>true</bool>
                 </property>
                 <property name="showGrid">
                  <bool>true</bool>
                 </property>
                 <property name="columnCount">
-                 <number>3</number>
+                 <number>4</number>
                 </property>
                 <attribute name="horizontalHeaderCascadingSectionResizes">
                  <bool>false</bool>
@@ -759,6 +1271,9 @@
                 <attribute name="horizontalHeaderMinimumSectionSize">
                  <number>130</number>
                 </attribute>
+                <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
+                 <bool>false</bool>
+                </attribute>
                 <attribute name="horizontalHeaderStretchLastSection">
                  <bool>true</bool>
                 </attribute>
@@ -768,35 +1283,24 @@
                 <column/>
                 <column/>
                 <column/>
+                <column/>
                </widget>
               </item>
-             </layout>
-            </widget>
-           </item>
-           <item row="1" column="1">
-            <widget class="QGroupBox" name="groupBox_2">
-             <property name="title">
-              <string>Pointing</string>
-             </property>
-             <layout class="QGridLayout" name="gridLayout_10">
-              <item row="0" column="0">
-               <widget class="QLabel" name="ckDegreeLabel_2">
+              <item row="1" column="0">
+               <widget class="QLabel" name="spkSolveDegreeLabel">
                 <property name="enabled">
                  <bool>true</bool>
                 </property>
                 <property name="text">
-                 <string>CK Initialization Polynomial Degree</string>
+                 <string>SPK Solve Degree</string>
                 </property>
                 <property name="wordWrap">
                  <bool>true</bool>
                 </property>
-                <property name="buddy">
-                 <cstring>ckDegreeSpinBox</cstring>
-                </property>
                </widget>
               </item>
-              <item row="0" column="1">
-               <widget class="QSpinBox" name="ckDegreeSpinBox_2">
+              <item row="2" column="1">
+               <widget class="QSpinBox" name="spkDegreeSpinBox">
                 <property name="enabled">
                  <bool>true</bool>
                 </property>
@@ -807,50 +1311,124 @@
                  </sizepolicy>
                 </property>
                 <property name="minimum">
-                 <number>1</number>
+                 <number>0</number>
                 </property>
                 <property name="value">
                  <number>2</number>
                 </property>
                </widget>
               </item>
-              <item row="0" column="2">
-               <widget class="QCheckBox" name="fitOverPointingCheckBox_2">
+              <item row="1" column="1">
+               <widget class="QSpinBox" name="spkSolveDegreeSpinBox">
+                <property name="enabled">
+                 <bool>true</bool>
+                </property>
                 <property name="sizePolicy">
-                 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                 <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
                   <horstretch>0</horstretch>
                   <verstretch>0</verstretch>
                  </sizepolicy>
                 </property>
-                <property name="minimumSize">
-                 <size>
-                  <width>0</width>
-                  <height>0</height>
-                 </size>
+                <property name="minimum">
+                 <number>-1</number>
+                </property>
+                <property name="value">
+                 <number>1</number>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="0">
+               <widget class="QLabel" name="spkDegreeLabel">
+                <property name="enabled">
+                 <bool>true</bool>
                 </property>
                 <property name="text">
-                 <string>over Existing Pointing</string>
+                 <string>SPK Degree</string>
+                </property>
+                <property name="wordWrap">
+                 <bool>true</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="0" colspan="2">
+               <widget class="QComboBox" name="positionComboBox"/>
+              </item>
+             </layout>
+            </widget>
+           </item>
+           <item row="3" column="1">
+            <widget class="QPushButton" name="applySettingsPushButton">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="text">
+              <string>Apply Settings to Selected Images</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="0" rowspan="4">
+            <widget class="QTreeView" name="treeView">
+             <property name="editTriggers">
+              <set>QAbstractItemView::NoEditTriggers</set>
+             </property>
+             <property name="selectionMode">
+              <enum>QAbstractItemView::ExtendedSelection</enum>
+             </property>
+             <property name="headerHidden">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QGroupBox" name="groupBox_2">
+             <property name="title">
+              <string>Instrument Pointing Solve Options</string>
+             </property>
+             <layout class="QGridLayout" name="gridLayout_10">
+              <item row="1" column="2">
+               <widget class="QCheckBox" name="twistCheckBox">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="text">
+                 <string>Twist</string>
+                </property>
+                <property name="checked">
+                 <bool>true</bool>
                 </property>
                </widget>
               </item>
               <item row="1" column="0">
-               <widget class="QLabel" name="ckSolveDegreeLabel_2">
+               <widget class="QLabel" name="ckSolveDegreeLabel">
                 <property name="enabled">
                  <bool>true</bool>
                 </property>
                 <property name="text">
-                 <string>CK Solve Polynomial Degree</string>
+                 <string>CK Solve Degree</string>
                 </property>
                 <property name="wordWrap">
                  <bool>true</bool>
                 </property>
-                <property name="buddy">
-                 <cstring>ckSolveDegreeSpinBox</cstring>
+               </widget>
+              </item>
+              <item row="2" column="0">
+               <widget class="QLabel" name="ckDegreeLabel">
+                <property name="enabled">
+                 <bool>true</bool>
+                </property>
+                <property name="text">
+                 <string>CK Degree</string>
+                </property>
+                <property name="wordWrap">
+                 <bool>true</bool>
                 </property>
                </widget>
               </item>
-              <item row="1" column="1">
-               <widget class="QSpinBox" name="ckSolveDegreeSpinBox_2">
+              <item row="2" column="1">
+               <widget class="QSpinBox" name="ckDegreeSpinBox">
                 <property name="enabled">
                  <bool>true</bool>
                 </property>
@@ -861,856 +1439,114 @@
                  </sizepolicy>
                 </property>
                 <property name="minimum">
-                 <number>1</number>
+                 <number>0</number>
                 </property>
                 <property name="value">
                  <number>2</number>
                 </property>
                </widget>
               </item>
-              <item row="1" column="2">
-               <widget class="QCheckBox" name="twistCheckBox_2">
+              <item row="2" column="2">
+               <widget class="QCheckBox" name="fitOverPointingCheckBox">
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
                   <horstretch>0</horstretch>
                   <verstretch>0</verstretch>
                  </sizepolicy>
                 </property>
-                <property name="text">
-                 <string>Twist</string>
-                </property>
-                <property name="checked">
-                 <bool>true</bool>
-                </property>
-               </widget>
-              </item>
-              <item row="2" column="0" colspan="3">
-               <widget class="QTableWidget" name="pointingAprioriSigmaTable">
-                <property name="maximumSize">
+                <property name="minimumSize">
                  <size>
-                  <width>390</width>
-                  <height>16777215</height>
+                  <width>0</width>
+                  <height>0</height>
                  </size>
                 </property>
-                <property name="verticalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAlwaysOn</enum>
-                </property>
-                <property name="horizontalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAlwaysOff</enum>
-                </property>
-                <property name="columnCount">
-                 <number>3</number>
-                </property>
-                <attribute name="horizontalHeaderDefaultSectionSize">
-                 <number>125</number>
-                </attribute>
-                <attribute name="horizontalHeaderMinimumSectionSize">
-                 <number>130</number>
-                </attribute>
-                <column/>
-                <column/>
-                <column/>
-               </widget>
-              </item>
-             </layout>
-             <zorder>pointingAprioriSigmaTable</zorder>
-             <zorder>ckSolveDegreeSpinBox_2</zorder>
-             <zorder>ckDegreeLabel_2</zorder>
-             <zorder>ckDegreeSpinBox_2</zorder>
-             <zorder>ckSolveDegreeLabel_2</zorder>
-             <zorder>fitOverPointingCheckBox_2</zorder>
-             <zorder>twistCheckBox_2</zorder>
-            </widget>
-           </item>
-           <item row="0" column="0">
-            <spacer name="horizontalSpacer">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-          </layout>
-         </widget>
-         <widget class="QWidget" name="weightingTab">
-          <attribute name="title">
-           <string>Weighting</string>
-          </attribute>
-          <layout class="QGridLayout" name="gridLayout_3">
-           <item row="0" column="0">
-            <layout class="QGridLayout" name="globalParameterUncertaintiesGridLayout">
-             <item row="1" column="2">
-              <widget class="QLabel" name="pointLatitudeSigmaUnitsLabel">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>58</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>meters</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointLatitudeSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="2" column="2">
-              <widget class="QLabel" name="pointLongitudeSigmaUnitsLabel">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>58</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>meters</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointLongitudeSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="9" column="1">
-              <widget class="QLineEdit" name="pointingAngularAccelerationSigmaLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="1">
-              <widget class="QLineEdit" name="positionSigmaLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="8" column="0">
-              <widget class="QLabel" name="pointingAngularVelocitySigmaLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Instrument Pointing Angular Velocity Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointingAngularVelocitySigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="0">
-              <widget class="QLabel" name="positionSigmaLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Instrument Position Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>positionSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="1">
-              <widget class="QLineEdit" name="accelerationSigmaLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="1">
-              <widget class="QLineEdit" name="pointLatitudeSigmaLineEdit">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="1">
-              <widget class="QLineEdit" name="pointingAnglesSigmaLineEdit">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="9" column="0">
-              <widget class="QLabel" name="pointingAngularAccelerationSigmaLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>326</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>Instrument Pointing Angular Acceleration Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointingAngularAccelerationSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="9" column="2">
-              <widget class="QLabel" name="pointingAngularAccelerationSigmaUnitsLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>202</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>degrees per second squared</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointingAngularAccelerationSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="8" column="2">
-              <widget class="QLabel" name="pointingAngularVelocitySigmaUnitsLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>141</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>degrees per second</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointingAngularVelocitySigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="8" column="1">
-              <widget class="QLineEdit" name="pointingAngularVelocitySigmaLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="2" column="0">
-              <widget class="QLabel" name="pointLongitudeSigmaLabel">
-               <property name="text">
-                <string>Point Longitude Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointLongitudeSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="5" column="1">
-              <widget class="QLineEdit" name="velocitySigmaLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="5" column="0">
-              <widget class="QLabel" name="velocitySigmaLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Instrument Velocity Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>velocitySigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="2" column="1">
-              <widget class="QLineEdit" name="pointLongitudeSigmaLineEdit">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="2">
-              <widget class="QLabel" name="pointingAnglesSigmaUnitsLabel">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>58</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>degrees</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointingAnglesSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="0">
-              <widget class="QLabel" name="pointingAnglesSigmaLabel">
-               <property name="text">
-                <string>Instrument Pointing Angles Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointingAnglesSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="0" column="0" colspan="3">
-              <widget class="QLabel" name="globalParameterUncertaintiesLabel">
-               <property name="text">
-                <string>Global Parameter Uncertainties</string>
-               </property>
-               <property name="alignment">
-                <set>Qt::AlignCenter</set>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="0">
-              <widget class="QLabel" name="pointLatitudeSigmaLabel">
-               <property name="text">
-                <string>Point Latitude Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointLatitudeSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="3" column="2">
-              <widget class="QLabel" name="pointRadiusSigmaUnitsLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>49</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>meters</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointRadiusSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="2">
-              <widget class="QLabel" name="positionSigmaUnitsLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>49</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>meters</string>
-               </property>
-               <property name="buddy">
-                <cstring>positionSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="5" column="2">
-              <widget class="QLabel" name="velocitySigmaUnitsLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>132</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>meters per second</string>
-               </property>
-               <property name="buddy">
-                <cstring>velocitySigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="0">
-              <widget class="QLabel" name="accelerationSigmaLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Instrument Acceleration Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>accelerationSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="2">
-              <widget class="QLabel" name="accelerationSigmaUnitsLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>193</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>meters per second squared</string>
-               </property>
-               <property name="buddy">
-                <cstring>accelerationSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="3" column="1">
-              <widget class="QLineEdit" name="pointRadiusSigmaLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-              </widget>
-             </item>
-             <item row="3" column="0">
-              <widget class="QLabel" name="pointRadiusSigmaLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Point Radius Sigma</string>
-               </property>
-               <property name="buddy">
-                <cstring>pointRadiusSigmaLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </item>
-          </layout>
-         </widget>
-         <widget class="QWidget" name="maximumLikelihoodTab">
-          <attribute name="title">
-           <string>Maximum Liklihood</string>
-          </attribute>
-          <layout class="QGridLayout" name="gridLayout_4">
-           <item row="0" column="0">
-            <layout class="QGridLayout" name="maximumLikelihoodGridLayout">
-             <item row="2" column="0" colspan="2">
-              <spacer name="maximumLikelihoodModel1ToModel2VerticalSpacer">
-               <property name="orientation">
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeType">
-                <enum>QSizePolicy::Preferred</enum>
-               </property>
-               <property name="sizeHint" stdset="0">
-                <size>
-                 <width>20</width>
-                 <height>40</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item row="5" column="0" colspan="2">
-              <spacer name="maximumLikelihoodModel2ToModel3VerticalSpacer">
-               <property name="orientation">
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeType">
-                <enum>QSizePolicy::Preferred</enum>
-               </property>
-               <property name="sizeHint" stdset="0">
-                <size>
-                 <width>20</width>
-                 <height>40</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item row="0" column="0">
-              <widget class="QLabel" name="maximumLikelihoodModel1Label">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>279</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>Maximum Likelihood Estimator Model 1</string>
-               </property>
-               <property name="buddy">
-                <cstring>maximumLikelihoodModel1ComboBox</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="0">
-              <widget class="QLabel" name="maximumLikelihoodModel3Label">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>279</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>Maximum Likelihood Estimator Model 3</string>
-               </property>
-               <property name="buddy">
-                <cstring>maximumLikelihoodModel3ComboBox</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="0" column="1">
-              <widget class="QComboBox" name="maximumLikelihoodModel1ComboBox">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <item>
-                <property name="text">
-                 <string>NONE</string>
-                </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>HUBER</string>
-                </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>HUBER MODIFIED</string>
-                </property>
-               </item>
-              </widget>
-             </item>
-             <item row="3" column="0">
-              <widget class="QLabel" name="maximumLikelihoodModel2Label">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>279</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>Maximum Likelihood Estimator Model 2</string>
-               </property>
-               <property name="buddy">
-                <cstring>maximumLikelihoodModel2ComboBox</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="0">
-              <widget class="QLabel" name="maximumLikelihoodModel1QuantileLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Model 1 C Quantile</string>
-               </property>
-               <property name="buddy">
-                <cstring>maximumLikelihoodModel1QuantileLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="1">
-              <widget class="QLineEdit" name="maximumLikelihoodModel1QuantileLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="text">
-                <string>0.5</string>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="0">
-              <widget class="QLabel" name="maximumLikelihoodModel2QuantileLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Model 2 C Quantile</string>
-               </property>
-               <property name="buddy">
-                <cstring>maximumLikelihoodModel2QuantileLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="3" column="1">
-              <widget class="QComboBox" name="maximumLikelihoodModel2ComboBox">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <item>
-                <property name="text">
-                 <string>NONE</string>
-                </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>HUBER</string>
-                </property>
-               </item>
-               <item>
                 <property name="text">
-                 <string>HUBER MODIFIED</string>
+                 <string>over Existing Pointing</string>
                 </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>WELSCH</string>
+               </widget>
+              </item>
+              <item row="4" column="0" colspan="3">
+               <widget class="QTableWidget" name="pointingAprioriSigmaTable">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
                 </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>CHEN</string>
+                <property name="maximumSize">
+                 <size>
+                  <width>16777215</width>
+                  <height>16777215</height>
+                 </size>
                 </property>
-               </item>
-              </widget>
-             </item>
-             <item row="4" column="1">
-              <widget class="QLineEdit" name="maximumLikelihoodModel2QuantileLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="text">
-                <string>0.5</string>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="1">
-              <widget class="QComboBox" name="maximumLikelihoodModel3ComboBox">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <item>
-                <property name="text">
-                 <string>NONE</string>
+                <property name="verticalScrollBarPolicy">
+                 <enum>Qt::ScrollBarAsNeeded</enum>
                 </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>HUBER</string>
+                <property name="horizontalScrollBarPolicy">
+                 <enum>Qt::ScrollBarAsNeeded</enum>
                 </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>HUBER MODIFIED</string>
+                <property name="alternatingRowColors">
+                 <bool>true</bool>
                 </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>WELSCH</string>
+                <property name="showGrid">
+                 <bool>true</bool>
                 </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>CHEN</string>
+                <property name="columnCount">
+                 <number>4</number>
                 </property>
-               </item>
-              </widget>
-             </item>
-             <item row="7" column="0">
-              <widget class="QLabel" name="maximumLikelihoodModel3QuantileLabel">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="text">
-                <string>Model 3 C Quantile</string>
-               </property>
-               <property name="buddy">
-                <cstring>maximumLikelihoodModel3QuantileLineEdit</cstring>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="1">
-              <widget class="QLineEdit" name="maximumLikelihoodModel3QuantileLineEdit">
-               <property name="enabled">
-                <bool>false</bool>
-               </property>
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="text">
-                <string>0.5</string>
-               </property>
-              </widget>
-             </item>
-            </layout>
+                <attribute name="horizontalHeaderDefaultSectionSize">
+                 <number>125</number>
+                </attribute>
+                <attribute name="horizontalHeaderMinimumSectionSize">
+                 <number>130</number>
+                </attribute>
+                <attribute name="horizontalHeaderStretchLastSection">
+                 <bool>true</bool>
+                </attribute>
+                <attribute name="verticalHeaderVisible">
+                 <bool>false</bool>
+                </attribute>
+                <column/>
+                <column/>
+                <column/>
+                <column/>
+               </widget>
+              </item>
+              <item row="1" column="1">
+               <widget class="QSpinBox" name="ckSolveDegreeSpinBox">
+                <property name="enabled">
+                 <bool>true</bool>
+                </property>
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="minimum">
+                 <number>-1</number>
+                </property>
+                <property name="value">
+                 <number>2</number>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="0" colspan="2">
+               <widget class="QComboBox" name="pointingComboBox"/>
+              </item>
+             </layout>
+             <zorder>pointingAprioriSigmaTable</zorder>
+             <zorder>ckDegreeLabel</zorder>
+             <zorder>ckDegreeSpinBox</zorder>
+             <zorder>fitOverPointingCheckBox</zorder>
+             <zorder>ckSolveDegreeSpinBox</zorder>
+             <zorder>ckSolveDegreeLabel</zorder>
+             <zorder>twistCheckBox</zorder>
+             <zorder>pointingComboBox</zorder>
+            </widget>
            </item>
           </layout>
          </widget>
-         <widget class="QWidget" name="selfCalibrationTab">
-          <attribute name="title">
-           <string>Self-Calibration</string>
-          </attribute>
-          <layout class="QGridLayout" name="gridLayout_7"/>
-         </widget>
          <widget class="QWidget" name="targetBodyTab">
           <attribute name="title">
            <string>Target Body</string>
@@ -1770,6 +1606,40 @@
                 <string>Target Parameters</string>
                </property>
                <layout class="QGridLayout" name="gridLayout_12">
+                <item row="5" column="1">
+                 <widget class="QLineEdit" name="primeMeridianOffsetLineEdit">
+                  <property name="enabled">
+                   <bool>false</bool>
+                  </property>
+                  <property name="sizePolicy">
+                   <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                    <horstretch>0</horstretch>
+                    <verstretch>0</verstretch>
+                   </sizepolicy>
+                  </property>
+                  <property name="minimumSize">
+                   <size>
+                    <width>0</width>
+                    <height>22</height>
+                   </size>
+                  </property>
+                  <property name="maximumSize">
+                   <size>
+                    <width>16777215</width>
+                    <height>22</height>
+                   </size>
+                  </property>
+                  <property name="toolTip">
+                   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;a priori prime meridian offset&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                  </property>
+                  <property name="text">
+                   <string/>
+                  </property>
+                  <property name="placeholderText">
+                   <string/>
+                  </property>
+                 </widget>
+                </item>
                 <item row="6" column="2">
                  <widget class="QLineEdit" name="spinRateSigmaLineEdit">
                   <property name="enabled">
@@ -1874,28 +1744,6 @@
                   </property>
                  </widget>
                 </item>
-                <item row="1" column="1">
-                 <widget class="QLineEdit" name="rightAscensionLineEdit">
-                  <property name="enabled">
-                   <bool>false</bool>
-                  </property>
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="toolTip">
-                   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;a priori pole right ascension&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                  </property>
-                  <property name="text">
-                   <string/>
-                  </property>
-                  <property name="placeholderText">
-                   <string/>
-                  </property>
-                 </widget>
-                </item>
                 <item row="3" column="1">
                  <widget class="QLineEdit" name="declinationLineEdit">
                   <property name="enabled">
@@ -2128,40 +1976,6 @@
                   </property>
                  </widget>
                 </item>
-                <item row="5" column="1">
-                 <widget class="QLineEdit" name="primeMeridianOffsetLineEdit">
-                  <property name="enabled">
-                   <bool>false</bool>
-                  </property>
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="minimumSize">
-                   <size>
-                    <width>0</width>
-                    <height>22</height>
-                   </size>
-                  </property>
-                  <property name="maximumSize">
-                   <size>
-                    <width>16777215</width>
-                    <height>22</height>
-                   </size>
-                  </property>
-                  <property name="toolTip">
-                   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;a priori prime meridian offset&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-                  </property>
-                  <property name="text">
-                   <string/>
-                  </property>
-                  <property name="placeholderText">
-                   <string/>
-                  </property>
-                 </widget>
-                </item>
                 <item row="5" column="2">
                  <widget class="QLineEdit" name="primeMeridianOffsetSigmaLineEdit">
                   <property name="enabled">
@@ -2249,6 +2063,28 @@
                   </property>
                  </widget>
                 </item>
+                <item row="1" column="1">
+                 <widget class="QLineEdit" name="rightAscensionLineEdit">
+                  <property name="enabled">
+                   <bool>false</bool>
+                  </property>
+                  <property name="sizePolicy">
+                   <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                    <horstretch>0</horstretch>
+                    <verstretch>0</verstretch>
+                   </sizepolicy>
+                  </property>
+                  <property name="toolTip">
+                   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;a priori pole right ascension&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                  </property>
+                  <property name="text">
+                   <string/>
+                  </property>
+                  <property name="placeholderText">
+                   <string/>
+                  </property>
+                 </widget>
+                </item>
                </layout>
               </widget>
              </item>
@@ -2296,7 +2132,7 @@
                    </font>
                   </property>
                   <property name="text">
-                   <string>mean radius</string>
+                   <string>&amp;mean radius</string>
                   </property>
                   <attribute name="buttonGroup">
                    <string notr="true">radiiButtonGroup</string>
@@ -2460,7 +2296,7 @@
                    </font>
                   </property>
                   <property name="text">
-                   <string>triaxial radii</string>
+                   <string>tria&amp;xial radii</string>
                   </property>
                   <attribute name="buttonGroup">
                    <string notr="true">radiiButtonGroup</string>
@@ -2796,38 +2632,6 @@
   </widget>
  </widget>
  <tabstops>
-  <tabstop>observationModeCheckBox</tabstop>
-  <tabstop>radiusCheckBox</tabstop>
-  <tabstop>updateCubeLabelCheckBox</tabstop>
-  <tabstop>errorPropagationCheckBox</tabstop>
-  <tabstop>outlierRejectionCheckBox</tabstop>
-  <tabstop>outlierRejectionMultiplierLineEdit</tabstop>
-  <tabstop>sigma0ThresholdLineEdit</tabstop>
-  <tabstop>controlNetworkComboBox</tabstop>
-  <tabstop>positionComboBox</tabstop>
-  <tabstop>hermiteSplineCheckBox</tabstop>
-  <tabstop>spkDegreeSpinBox</tabstop>
-  <tabstop>spkSolveDegreeSpinBox</tabstop>
-  <tabstop>pointingComboBox</tabstop>
-  <tabstop>twistCheckBox</tabstop>
-  <tabstop>fitOverPointingCheckBox</tabstop>
-  <tabstop>ckDegreeSpinBox</tabstop>
-  <tabstop>ckSolveDegreeSpinBox</tabstop>
-  <tabstop>pointLatitudeSigmaLineEdit</tabstop>
-  <tabstop>pointLongitudeSigmaLineEdit</tabstop>
-  <tabstop>pointRadiusSigmaLineEdit</tabstop>
-  <tabstop>positionSigmaLineEdit</tabstop>
-  <tabstop>velocitySigmaLineEdit</tabstop>
-  <tabstop>accelerationSigmaLineEdit</tabstop>
-  <tabstop>pointingAnglesSigmaLineEdit</tabstop>
-  <tabstop>pointingAngularVelocitySigmaLineEdit</tabstop>
-  <tabstop>pointingAngularAccelerationSigmaLineEdit</tabstop>
-  <tabstop>maximumLikelihoodModel1ComboBox</tabstop>
-  <tabstop>maximumLikelihoodModel1QuantileLineEdit</tabstop>
-  <tabstop>maximumLikelihoodModel2ComboBox</tabstop>
-  <tabstop>maximumLikelihoodModel2QuantileLineEdit</tabstop>
-  <tabstop>maximumLikelihoodModel3ComboBox</tabstop>
-  <tabstop>maximumLikelihoodModel3QuantileLineEdit</tabstop>
   <tabstop>poleRaCheckBox</tabstop>
   <tabstop>rightAscensionLineEdit</tabstop>
   <tabstop>rightAscensionSigmaLineEdit</tabstop>
@@ -2881,38 +2685,6 @@
     </hint>
    </hints>
   </connection>
-  <connection>
-   <sender>outlierRejectionCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>outlierRejectionMultiplierLineEdit</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>100</x>
-     <y>251</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>292</x>
-     <y>251</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>outlierRejectionCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>outlierRejectionMultiplierLabel</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>100</x>
-     <y>251</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>292</x>
-     <y>223</y>
-    </hint>
-   </hints>
-  </connection>
  </connections>
  <buttongroups>
   <buttongroup name="radiiButtonGroup"/>
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp
index 1121259581faeb90be30964ad5f37b05e27dbb5a..a11accc8a325cb9a1cadbb3af50cebfa8ba5e211 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp
+++ b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp
@@ -50,20 +50,15 @@ namespace Isis {
 
     // Providing a width of 0 makes pens cosmetic (i.e. always appear as 1 pixel on screen)
     if (cp->IsIgnored()) {
-      setPen(QPen(Qt::red, 0.0));
+      setPen(QPen(Qt::yellow, 0.0));
     }
-    else if (cp->IsEditLocked()) {
+    else if ( (cp->GetType() == ControlPoint::Fixed)
+      || (cp->GetType() == ControlPoint::Constrained) ) {
       setPen(QPen(Qt::magenta, 0.0));
     }
-    else if (cp->GetType() == ControlPoint::Fixed) {
-      setPen(QPen(Qt::green, 0.0));
-    }
-    else if (cp->GetType() == ControlPoint::Constrained) {
+    else { // Free and editLocked
       setPen(QPen(Qt::darkGreen, 0.0));
     }
-    else {// Free
-      setPen(QPen(Qt::blue, 0.0));
-    }
 
     setBrush(Qt::NoBrush);
 
@@ -96,7 +91,7 @@ namespace Isis {
 
   /**
    * This virtual paint method is called anytime an update() or paintEvent() is called
-   * 
+   *
    * @param painter (QPainter *) Painter used to draw
    * @param style (QStyleOptionGraphicsItem *) Describes parameters used to draw a QGraphicsItem
    * @param widget (QWidget *) Optional argument which indicates the widget that is being painted on
@@ -139,7 +134,7 @@ namespace Isis {
         painter->drawPath(path);
       }
       else {
-        painter->drawLine(centerLeft, centerRight); 
+        painter->drawLine(centerLeft, centerRight);
         painter->drawLine(centerTop, centerBottom);
       }
 
@@ -197,14 +192,14 @@ namespace Isis {
   }
 
 
-  ControlPoint *ControlPointGraphicsItem::controlPoint() { 
-    return m_controlPoint; 
+  ControlPoint *ControlPointGraphicsItem::controlPoint() {
+    return m_controlPoint;
   }
 
-  void ControlPointGraphicsItem::setArrowVisible(bool visible, 
-                                                 bool colorByMeasureCount, 
+  void ControlPointGraphicsItem::setArrowVisible(bool visible,
+                                                 bool colorByMeasureCount,
                                                  int measureCount,
-                                                 bool colorByResidualMagnitude, 
+                                                 bool colorByResidualMagnitude,
                                                  double residualMagnitude) {
     m_showArrow = visible;
     m_colorByMeasureCount = colorByMeasureCount;
@@ -374,4 +369,3 @@ namespace Isis {
 
 
 }
-
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h
index ff6bcfde46a56de93b93031cf01d3c685ebfde49..8d09d5738a011d05db5d92d268ccc727d7f8af5f 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h
+++ b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h
@@ -20,7 +20,7 @@ namespace Isis {
    *
    * @internal
    *   @history 2011-05-09 Steven Lambright - Fixed known issue with paint() when zoomed in.
-   *   @history 2011-05-10 Steven Lambright - Added arrow capabilities, fixed problem with 
+   *   @history 2011-05-10 Steven Lambright - Added arrow capabilities, fixed problem with
    *                           boundingRect() that seemed to cause a crash.
    *   @history 2011-06-07 Debbie A. Cook and Tracie Sucharski - Modified point types
    *                           Ground ------> Fixed
@@ -34,8 +34,13 @@ namespace Isis {
    *   @history 2016-10-20 Tracie Sucharski - Remove obsolete code that was commented out.
    *                           Fixes #4479.
    *   @history 2017-08-02 Tracie Sucharski - Draw the current edit Control Point as a circle with
-   *                           center crosshair in red.  Fixes #5007, #5008. 
-   *                   
+   *                           center crosshair in red.  Fixes #5007, #5008.
+   *   @history 2018-05-01 Kaitlyn Lee - Changed colors of control points to match qnet.
+   *                           Colors Changed: free from blue to darkGreen, locked from magenta
+   *                           to darkGreen, ignored from red to yellow,
+   *                           and constrained (was dark green) and fixed (was green)
+   *                           are now both represented with magenta. Fixes #5401.
+   *
    */
   class ControlPointGraphicsItem : public QGraphicsRectItem {
     public:
@@ -70,7 +75,7 @@ namespace Isis {
       bool m_colorByMeasureCount;
       //! Are we coloring the movement arrow based on max CM residual magnitude
       bool m_colorByResidualMagnitude;
-      //! Measure count threshold for colored vs. black 
+      //! Measure count threshold for colored vs. black
       int m_measureCount;
       //! Residual magnitude threshold for colored vs. black
       double m_residualMagnitude;
@@ -78,4 +83,3 @@ namespace Isis {
 }
 
 #endif
-
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.cpp b/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.cpp
index 3435cde9afa66e04cb0ff49ba8e979c3916c842e..fc90ed2c04e8ad7ad7b13a70fb1fda3bc94a6205 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.cpp
+++ b/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.cpp
@@ -611,18 +611,20 @@ namespace Isis {
     QString netFile = m_controlNetFile;
     closeNetwork();
     m_controlNetFile = netFile;
-    m_controlNetFileLabel->setText( QFileInfo(netFile).fileName() );
 
     if (m_controlNetFile.size() > 0) {
       try {
         //  If qmos application create new control net from chosen filename
         if (!getWidget()->directory()) {
+          m_controlNetFileLabel->setText( QFileInfo(netFile).fileName() );
           m_controlNet = new ControlNet(m_controlNetFile);
         }
         //  If ipce application, get the active control net from the project.  This control has
         //  already been read into memory.
         else {
           m_controlNet = getWidget()->directory()->project()->activeControl()->controlNet();
+          m_controlNetFileLabel->setText( QFileInfo(
+              getWidget()->directory()->project()->activeControl()->fileName()).fileName() );
         }
         m_controlNetGraphics = new ControlNetGraphicsItem(m_controlNet,
             getWidget());
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.h b/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.h
index c844a21e4af52090831fa92840cf653860b43fa8..5261fd3fbfbcc986d9e1a0a4ba92644abdf5056a 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.h
+++ b/isis/src/qisis/objs/MosaicSceneWidget/MosaicControlNetTool.h
@@ -17,7 +17,7 @@ namespace Isis {
 
   /**
    * //TODO: Remove debug printout & comment
-   * //         2016-08-25 Tracie Sucharski - Checking Directory pointer for IPCE code not ideal. 
+   * //         2016-08-25 Tracie Sucharski - Checking Directory pointer for IPCE code not ideal.
    *                           Is there a better design?  This might go away if we emit signals,
    *                           which only IPCE classes would connect to.
    * @brief Handles Control Net displays
@@ -66,6 +66,10 @@ namespace Isis {
    *                           point was added or deleted.  Fixes #5007, #5008.
    *   @history 2017-08-15 Tracie Sucharski - Added check in ::rebuildPointGraphics() to check for
    *                           existence of graphics items.  Fixes #4984.
+   *   @history 2018-07-12 Tracie Sucharski - Made the slot loadNetwork public so that ipce can
+   *                           load a new network.
+   *   @history 2018-09-19 Tracie Sucharski - For the ipce application, update the control net file
+   *                           name in the toolbar when a new active control is set. Fixes #5518.
    */
   class MosaicControlNetTool : public MosaicTool {
       Q_OBJECT
@@ -119,6 +123,7 @@ namespace Isis {
       void deleteControlPoint(QString controlPointId);
 
     public slots:
+      void loadNetwork();
       void rebuildPointGraphics();
       void displayNewControlPoint(QString pointId);
       void displayChangedControlPoint(QString pointId);
@@ -136,7 +141,6 @@ namespace Isis {
       void displayControlNet();
       void displayConnectivity();
       void closeNetwork();
-      void loadNetwork();
       void randomizeColors();
 
       void objectDestroyed(QObject *);
@@ -169,4 +173,3 @@ namespace Isis {
 };
 
 #endif
-
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.cpp b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.cpp
index ccbae1ecd0d5d7254ffa19c802d89e9b463f6518..a4dc3bbf0d641737728b03f72c9a162915d7285b 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.cpp
+++ b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.cpp
@@ -53,6 +53,7 @@
 #include "ProjectionFactory.h"
 #include "PvlObject.h"
 #include "Pvl.h"
+#include "Shape.h"
 #include "TextFile.h"
 #include "Target.h"
 #include "ToolPad.h"
@@ -623,9 +624,9 @@ namespace Isis {
   }
 
 
-  void MosaicSceneWidget::save(QXmlStreamWriter &stream, Project *, FileName) const {
+  void MosaicSceneWidget::save(QXmlStreamWriter &stream, Project *, FileName ) const {
     if (m_projection) {
-      stream.writeStartElement("footprint2DView");
+      stream.writeStartElement("mosaicScene");
 
       stream.writeStartElement("projection");
       PvlGroup mapping = m_projection->Mapping();
@@ -2136,6 +2137,14 @@ namespace Isis {
         QString id = atts.value("id");
         double zValue = atts.value("zValue").toDouble();
         Image *image = m_scene->m_directory->project()->image(id);
+        // If Image for id doesn't exist, check shapes.  If corresponds to Shape, new Image will
+        // need to be created.
+        if (!image) {
+          Shape *shape = m_scene->m_directory->project()->shape(id);
+          if (shape) {
+            image = new Image(shape->cube(), shape->footprint(), id);
+          }
+        }
         if (image) {
           m_imagesToAdd->append(image);
           m_imageZValues.append(zValue);
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.h b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.h
index 5c95ec06c254560144646f78221f60bd7d754546..178dc3f898980dd99730a5aee4e9f704ba178503 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.h
+++ b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.h
@@ -143,6 +143,12 @@ namespace Isis {
    *                           was deleted or added to the control net.  Renamed deleteControlPoint
    *                           signal to controlPointDeleted.  Removed some unneeded connections.
    *                           Fixes #5007, #5008.
+   *   @history 2018-05-14 Tracie Sucharski - Change the xml tag from footprint2DView to
+   *                           mosaicScene. Reference #5422.
+   *   @history 2018-10-04 Tracie Sucharski - When serializing images for ipce project saving, check
+   *                           for shapes in project if image for given id cannot be found.
+   *                           References #5495.
+   *  
    */
   class MosaicSceneWidget : public QWidget {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.truth b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.truth
deleted file mode 100644
index c7f07c9f6f539cba1fd63941b516a8c9f70accb6..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidget.truth
+++ /dev/null
@@ -1,8 +0,0 @@
-********* Start testing of Isis::MosaicSceneWidgetTester *********
-Config: Using QTest library 4.8.0, Qt 4.8.0
-PASS   : Isis::MosaicSceneWidgetTester::initTestCase()
-PASS   : Isis::MosaicSceneWidgetTester::testBasicFunctionality()
-PASS   : Isis::MosaicSceneWidgetTester::testSynchronization()
-PASS   : Isis::MosaicSceneWidgetTester::cleanupTestCase()
-Totals: 4 passed, 0 failed, 0 skipped
-********* Finished testing of Isis::MosaicSceneWidgetTester *********
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidgetTester.cpp b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidgetTester.cpp
deleted file mode 100644
index f242c87e25afc054e20214b4d03316fb191622a0..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidgetTester.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "MosaicSceneWidgetTester.h"
-
-#include <iostream>
-#include <iomanip>
-
-#include <QMetaType>
-#include <QSettings>
-#include <QSignalSpy>
-#include <QStatusBar>
-#include <QTest>
-#include <QtWidgets>
-#include <QTreeWidgetItem>
-
-#include "FileName.h"
-#include "Image.h"
-#include "ImageList.h"
-#include "MosaicSceneItem.h"
-#include "MosaicSceneWidget.h"
-
-namespace Isis {
-  /**
-   * This is a very basic functionality test.
-   */
-  void MosaicSceneWidgetTester::testBasicFunctionality() {
-    QStatusBar status;
-
-    MosaicSceneWidget widget(&status, true, true, NULL);
-    widget.show();
-    QTest::qWaitForWindowExposed(widget.windowHandle());
-    QVERIFY(widget.getProgress());
-    QVERIFY(widget.getView());
-    QVERIFY(widget.getScene());
-    QVERIFY(widget.getProjection() == NULL);
-
-    Image *image = new Image(QString("./lub3994m.342.lev1.cub"));
-    QScopedPointer<QMutex> cameraMutex(new QMutex);
-    image->initFootprint(cameraMutex.data());
-
-    ImageList images;
-    images.append(image);
-
-    widget.addImages(images);
-
-    QCOMPARE(widget.allMosaicSceneItems().count(), 1);
-    QCOMPARE(image, widget.allMosaicSceneItems().first()->image());
-    QVERIFY(widget.cubesSelectable());
-
-    // Check that the bounding rect is approx. the same
-    QRectF expected(QPointF(2376269.37351469, -964957.418535598), QSize(109739, 48049));
-
-    QVERIFY(qAbs(widget.cubesBoundingRect().top() - expected.top()) < 0.0001);
-    QVERIFY(qAbs(widget.cubesBoundingRect().left() - expected.left()) < 0.0001);
-    QVERIFY(qAbs(widget.cubesBoundingRect().bottom() - expected.bottom()) < 1);
-    QVERIFY(qAbs(widget.cubesBoundingRect().right() - expected.right()) < 1);
-  }
-
-
-  void MosaicSceneWidgetTester::testSynchronization() {
-    QStatusBar status;
-
-    MosaicSceneWidget widget(&status, true, true, NULL);
-    widget.show();
-    QTest::qWaitForWindowExposed(widget.windowHandle());
-
-    Image *image = new Image(QString("./lub3994m.342.lev1.cub"));
-    QScopedPointer<QMutex> cameraMutex(new QMutex);
-    image->initFootprint(cameraMutex.data());
-
-    ImageList images;
-    images.append(image);
-
-    widget.addImages(images);
-
-    MosaicSceneItem *sceneItem = widget.allMosaicSceneItems().first();
-
-    ImageDisplayProperties *displayProperties = image->displayProperties();
-    QCOMPARE(sceneItem->color(),
-             displayProperties->getValue(ImageDisplayProperties::Color).value<QColor>());
-    QCOMPARE(sceneItem->isSelected(),
-             displayProperties->getValue(ImageDisplayProperties::Selected).toBool());
-
-    sceneItem->setSelected(true);
-
-    QVERIFY(sceneItem->isSelected());
-    QCOMPARE(sceneItem->isSelected(),
-             displayProperties->getValue(ImageDisplayProperties::Selected).toBool());
-
-    displayProperties->setSelected(false);
-
-    QVERIFY(!displayProperties->getValue(ImageDisplayProperties::Selected).toBool());
-    QCOMPARE(sceneItem->isSelected(),
-             displayProperties->getValue(ImageDisplayProperties::Selected).toBool());
-  }
-}
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidgetTester.h b/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidgetTester.h
deleted file mode 100644
index f1f9292ef5ab7bf03e7654b39b2380c98e84f0ee..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicSceneWidgetTester.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef MosaicSceneWidgetTester_H
-#define MosaicSceneWidgetTester_H
-
-#include <QtTestGui>
-
-namespace Isis {
-  /**
-   * @author 2012-??-?? Steven Lambright
-   * 
-   * @internal
-   */
-  class MosaicSceneWidgetTester : public QObject {
-    Q_OBJECT
-
-    private slots:
-      void testBasicFunctionality();
-      void testSynchronization();
-
-  };
-}
-
-#endif
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/MosaicZoomTool.cpp b/isis/src/qisis/objs/MosaicSceneWidget/MosaicZoomTool.cpp
index 3240c70668616ee31cc86089a85d3847cf32199c..65f776940ae9f25906397d99d6d2c868c7fb6744 100644
--- a/isis/src/qisis/objs/MosaicSceneWidget/MosaicZoomTool.cpp
+++ b/isis/src/qisis/objs/MosaicSceneWidget/MosaicZoomTool.cpp
@@ -413,4 +413,3 @@ namespace Isis {
   }
 
 }
-
diff --git a/isis/src/qisis/objs/MosaicSceneWidget/unitTest.cpp b/isis/src/qisis/objs/MosaicSceneWidget/unitTest.cpp
deleted file mode 100644
index 11ed6d4696402ef57218ab65777c7267f99fd283..0000000000000000000000000000000000000000
--- a/isis/src/qisis/objs/MosaicSceneWidget/unitTest.cpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "MosaicSceneWidgetTester.h"
-QTEST_MAIN(Isis::MosaicSceneWidgetTester)
-
diff --git a/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.cpp b/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.cpp
index 1d288c8cac336737a51856f9d5fa6d00e9cfb9c4..0b5f87a5d8c36dcfd2e78b67bce9a48b29257025 100644
--- a/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.cpp
+++ b/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.cpp
@@ -20,9 +20,15 @@
 
 namespace Isis {
   /**
-   * NewControlPointDialog constructor
-   * @param parent The parent widget for the
-   *               cube points filter
+   * @description Create dialog for creating a new Control Point
+   *  
+   * @param controlNet               The control net the new control point will be contained in 
+   * @param serialNumberList         The serial number list corresponding to the controlNet 
+   * @param defaultPointId           The default pointID, usually empty string 
+   * @param parent                   Parent widget 
+   * @param pointType                Show the Point Type combo box, default = false 
+   * @param groundSource             Show the Ground Source list, default = false 
+   * @param subpixelRegisterMeasures Show the check box for sub-pixel registration option, default = false
    *
    * @internal
    *   @history 2008-11-26 Jeannie Walldren - Set lastPointIdValue
@@ -68,21 +74,30 @@ namespace Isis {
         m_pointTypeCombo->insertItem(i, ControlPoint::PointTypeToString(
                                      (ControlPoint::PointType) i));
       }
-      m_pointTypeCombo->setCurrentIndex(2);
-      QLabel *pointTypeLabel = new QLabel("PointType:");
+      m_pointTypeCombo->setCurrentText("Free");
+      QLabel *pointTypeLabel = new QLabel("Point Type:");
       pointTypeLayout->addWidget(pointTypeLabel);
       pointTypeLayout->addWidget(m_pointTypeCombo);
-      connect(m_pointTypeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(pointTypeChanged(int)));
+      connect(m_pointTypeCombo, SIGNAL(currentIndexChanged(QString)),
+              this, SLOT(pointTypeChanged(QString)));
     }
 
-
+    QHBoxLayout *groundSourceLayout = NULL;
+    QHBoxLayout *radiusSourceLayout = NULL;
     if (groundSource) {
-      m_groundSourceLayout = new QHBoxLayout();
+      groundSourceLayout = new QHBoxLayout();
       m_groundSourceCombo = new QComboBox;
       QLabel *groundSourceLabel = new QLabel("Ground Source:");
-      m_groundSourceLayout->addWidget(groundSourceLabel);
-      m_groundSourceLayout->addWidget(m_groundSourceCombo);
+      groundSourceLayout->addWidget(groundSourceLabel);
+      groundSourceLayout->addWidget(m_groundSourceCombo);
       m_groundSourceCombo->setVisible(false);
+
+      radiusSourceLayout = new QHBoxLayout();
+      m_radiusSourceCombo = new QComboBox;
+      QLabel *radiusSourceLabel = new QLabel("Radius Source:");
+      radiusSourceLayout->addWidget(radiusSourceLabel);
+      radiusSourceLayout->addWidget(m_radiusSourceCombo);
+      m_radiusSourceCombo->setVisible(false);
     }
 
     if (subpixelRegisterMeasures) {
@@ -99,6 +114,7 @@ namespace Isis {
 
     //  Create OK & Cancel buttons
     m_okButton = new QPushButton("OK");
+
     //  If the last point id used was never saved to network, do not set ok
     //  button to faslse
     enableOkButton("");
@@ -124,7 +140,8 @@ namespace Isis {
     }
 
     if (groundSource) {
-      vLayout->addLayout(m_groundSourceLayout);
+      vLayout->addLayout(groundSourceLayout);
+      vLayout->addLayout(radiusSourceLayout);
     }
 
     if (subpixelRegisterMeasures) {
@@ -147,7 +164,14 @@ namespace Isis {
 
 
   int NewControlPointDialog::pointType() const {
-    return m_pointTypeCombo->currentIndex();
+    int result = ControlPoint::Free;
+    if (m_pointTypeCombo->currentText() == "Constrained") {
+      result = ControlPoint::Constrained;
+    }
+    if (m_pointTypeCombo->currentText() == "Fixed") {
+      result = ControlPoint::Fixed;
+    }
+    return result;
   }
 
 
@@ -172,19 +196,49 @@ namespace Isis {
   }
 
 
-  void NewControlPointDialog::pointTypeChanged(int pointType) {
-    if (pointType == ControlPoint::Constrained || pointType == ControlPoint::Fixed) {
+  QString NewControlPointDialog::radiusSource() const {
+    return m_radiusSourceCombo->currentText();
+  }
+
+
+  void NewControlPointDialog::pointTypeChanged(QString pointType) {
+    if (pointType == "Fixed" || pointType == "Constrained") {
       m_groundSourceCombo->setVisible(true);
+      m_radiusSourceCombo->setVisible(true);
     }
   }
 
 
   void NewControlPointDialog::setGroundSource(QStringList groundFiles, int numberShapesWithPoint) {
-    m_groundSourceCombo->addItems(groundFiles);
-    for (int i = 0; i < numberShapesWithPoint; i++) {
-      m_groundSourceCombo->setItemData(i, QColor(Qt::red), Qt::ForegroundRole);
+    //  If groundFiles not empty, add to the list widget for selection
+    if (groundFiles.count() != 0) {
+      m_groundSourceCombo->addItems(groundFiles); 
+      for (int i = 0; i < numberShapesWithPoint; i++) {
+        m_groundSourceCombo->setItemData(i, QColor(Qt::red), Qt::ForegroundRole);
+      }
+      m_groundSourceCombo->insertSeparator(numberShapesWithPoint);
+    }
+    // If groundFiles is empty, remove option to change point type to Constrained or Fixed, add a
+    // tooltip to give user hint as to why they don't have option to change point type and set
+    // default point type back to "Free".
+    else {
+      m_pointTypeCombo->setToolTip("The Point Type cannot be changed to \"Fixed\" or "
+                                   "\"Constrained\", because there are no shapes imported into "
+                                   "your project.");
+      m_pointTypeCombo->removeItem(m_pointTypeCombo->findText("Constrained"));
+      m_pointTypeCombo->removeItem(m_pointTypeCombo->findText("Fixed"));
+      m_pointTypeCombo->setCurrentText("Free");
+    }
+  }
+
+
+  void NewControlPointDialog::setRadiusSource(QStringList radiusFiles) {
+    //  If radiusFiles not empty, add to the radius source combo, first adding "None" as option.
+    m_radiusSourceCombo->addItem("None");
+    m_radiusSourceCombo->setCurrentText("None");
+    if (radiusFiles.count() != 0) {
+      m_radiusSourceCombo->addItems(radiusFiles);
     }
-    m_groundSourceCombo->insertSeparator(numberShapesWithPoint);
   }
 
 
@@ -227,7 +281,15 @@ namespace Isis {
    *            to the ptIdValue
    */
   void NewControlPointDialog::enableOkButton(const QString &) {
-    m_okButton->setEnabled(!m_ptIdEdit->text().isEmpty() &&
-                           !m_controlNet->ContainsPoint(m_ptIdEdit->text()));
+    bool enable = !m_ptIdEdit->text().isEmpty() &&
+                  !m_controlNet->ContainsPoint(m_ptIdEdit->text());
+    m_okButton->setEnabled(enable);
+    if (enable) {
+      m_okButton->setToolTip("");
+    }
+    else {
+      m_okButton->setToolTip("Cannot create point because Point Id is either empty or the active "
+                             "control net already contains a control point with this point Id.");
+    }
   }
 }
diff --git a/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.h b/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.h
index d2a287b693f7fc5b93d027e6f104681d3120ea46..e7a846a5233dff404d22686943be28bd0090ce01 100644
--- a/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.h
+++ b/isis/src/qisis/objs/NewControlPointDialog/NewControlPointDialog.h
@@ -33,8 +33,18 @@ namespace Isis {
    *   @history 2016-10-18 Tracie Sucharski - Added method to return value of the
    *                          subpixelRegister radio button.  If set, all measures in the control
    *                          point created will be subpixel registered.
-   *   @history 2017-07-04 Christopher Combs - Added bools to toggle on specific elements of the
-   *                          dialog to remove similar classes like QnetNewPointDialog. Fixes #4383.
+   *   @history 2017-07-04 Christopher Combs - Combined functionality of dialogs from qnet,
+   *                          qview and ipce applications by adding bools to toggle on specific
+   *                          elements of the dialog to remove similar classes like
+   *                          QnetNewPointDialog. Fixes #4383.
+   *   @history 2018-05-02 Tracie Sucharski - If no shapes available remove option to change point
+   *                          type to "Constrained" or "Fixed". Because pointType combo dependent on
+   *                          having all 3 types to use ControlPoint's enum, change comparisons to
+   *                          check text instead of int values. Add tool tip explaining why point
+   *                          type cannot be changed.  Set tool tip on Ok button explaining why it
+   *                          is not enabled. Fixes #5087.
+   *   @history 2018-10-05 Tracie Sucharski - Add radius source combo for choosing the radius
+   *                          source. References #5504.
    */
   class NewControlPointDialog : public QDialog {
 
@@ -52,13 +62,15 @@ namespace Isis {
       QString pointId() const;
       int pointType() const;
       void setGroundSource(QStringList groundFiles, int numberShapesWithPoint);
+      void setRadiusSource(QStringList radiusFiles);
       QString groundSource() const;
+      QString radiusSource() const;
       QStringList selectedFiles() const;
       void setFiles(QStringList pointFiles);
       bool subpixelRegisterPoint();
 
     private slots:
-      void pointTypeChanged(int pointType);
+      void pointTypeChanged(QString pointType);
       void enableOkButton(const QString &text);
 
     private:
@@ -68,7 +80,7 @@ namespace Isis {
       QLabel *m_ptIdLabel;
       QComboBox *m_pointTypeCombo;
       QComboBox *m_groundSourceCombo;
-      QHBoxLayout *m_groundSourceLayout;
+      QComboBox *m_radiusSourceCombo;
       QRadioButton *m_subpixelRegisterButton;
       QPushButton *m_okButton;
       QLineEdit *m_ptIdEdit;
diff --git a/isis/src/qisis/objs/ProgressBar/ProgressBar.cpp b/isis/src/qisis/objs/ProgressBar/ProgressBar.cpp
index 87a5150a069953312bd3e8cb224eb12ff1b6b245..59e369df537f2f77c68dbd1fa605ed85f817c583 100644
--- a/isis/src/qisis/objs/ProgressBar/ProgressBar.cpp
+++ b/isis/src/qisis/objs/ProgressBar/ProgressBar.cpp
@@ -6,6 +6,7 @@ namespace Isis {
    *
    */
   ProgressBar::ProgressBar(QWidget *parent): QProgressBar(parent) {
+    
   }
 
   /**
diff --git a/isis/src/qisis/objs/ProgressBar/ProgressBar.h b/isis/src/qisis/objs/ProgressBar/ProgressBar.h
index 49cdc0a219ce03374311a3978b63bae50036c479..81d3314638c8e691c1ba394c06e86f69f8d26d3f 100644
--- a/isis/src/qisis/objs/ProgressBar/ProgressBar.h
+++ b/isis/src/qisis/objs/ProgressBar/ProgressBar.h
@@ -4,12 +4,12 @@
 #include <QProgressBar>
 
 namespace Isis {
-  /**
-   * @brief QProgressBar with customizable text
+  /**   
    *
    * @author ????-??-?? Steven Lambright
+   * @internal ????-??-?? Steven Lambright - QProgressBar with customizable text
    *
-   * @internal
+   *                            
    */
 
   class ProgressBar : public QProgressBar {
diff --git a/isis/src/qisis/objs/Project/Project.cpp b/isis/src/qisis/objs/Project/Project.cpp
index 2211736a67652371b7d35cb2d05c28e14aa418fb..a84abc6183e9d3dd2de90c40e38800ca0b93346a 100644
--- a/isis/src/qisis/objs/Project/Project.cpp
+++ b/isis/src/qisis/objs/Project/Project.cpp
@@ -1,4 +1,3 @@
-
 /**
  * @file
  * $Revision: 1.19 $
@@ -27,7 +26,9 @@
 #include <unistd.h>
 
 #include <QApplication>
+#include <QDateTime>
 #include <QDir>
+#include <QDebug>
 #include <QFile>
 #include <QFileDialog>
 #include <QFuture>
@@ -36,13 +37,16 @@
 #include <QMutex>
 #include <QMutexLocker>
 #include <QProgressBar>
+#include <QRegExp>
+#include <QSettings>
 #include <QStringList>
 #include <QtDebug>
 #include <QTextStream>
+#include <QWidget>
 #include <QXmlStreamWriter>
 
-#include "BundleSolutionInfo.h"
 #include "BundleSettings.h"
+#include "BundleSolutionInfo.h"
 #include "Camera.h"
 #include "Control.h"
 #include "ControlList.h"
@@ -54,30 +58,35 @@
 #include "FileName.h"
 #include "GuiCamera.h"
 #include "GuiCameraList.h"
-#include "IException.h"
 #include "ImageList.h"
 #include "ImageReader.h"
+#include "IException.h"
 #include "ProgressBar.h"
 #include "ProjectItem.h"
 #include "ProjectItemModel.h"
 #include "SerialNumberList.h"
+#include "SetActiveControlWorkOrder.h"
+#include "SetActiveImageListWorkOrder.h"
 #include "Shape.h"
 #include "ShapeList.h"
 #include "ShapeReader.h"
 #include "Target.h"
 #include "TargetBodyList.h"
+#include "Template.h"
+#include "TemplateList.h"
 #include "WorkOrder.h"
 #include "WorkOrderFactory.h"
 #include "XmlStackedHandlerReader.h"
 
 namespace Isis {
 
+
+
   /**
    * Create a new Project. This creates a project on disk at /tmp/username_appname_pid.
    */
   Project::Project(Directory &directory, QObject *parent) :
       QObject(parent) {
-    //qDebug()<<"Project::Project";
     m_bundleSettings = NULL;
     m_clearing = false;
     m_directory = &directory;
@@ -92,6 +101,8 @@ namespace Isis {
     m_imageReader = NULL;
     m_shapeReader = NULL;
     m_shapes = NULL;
+    m_mapTemplates = NULL;
+    m_regTemplates = NULL;
     m_warnings = NULL;
     m_workOrderHistory = NULL;
     m_isTemporaryProject = true;
@@ -155,6 +166,7 @@ namespace Isis {
                                          arg( QApplication::applicationName() ) );
     }
 
+    QCoreApplication* ipce_app = static_cast<QCoreApplication *>(directory.parent());
 
     try {
       QString tmpFolder = QDir::temp().absolutePath() + "/"
@@ -162,8 +174,10 @@ namespace Isis {
             + QApplication::applicationName() + "_" + QString::number( getpid() );
       QDir temp(tmpFolder + "/tmpProject");
       m_projectRoot = new QDir(temp);
-      //qDebug()<<"          Create temp project";
-      createFolders();
+
+      if (ipce_app->arguments().count() == 1) {
+        createFolders();
+      }
     }
     catch (IException &e) {
       throw IException(e, IException::Programmer, "Error creating project folders.", _FILEINFO_);
@@ -183,12 +197,6 @@ namespace Isis {
     connect( m_imageReader, SIGNAL( imagesReady(ImageList) ),
              this, SLOT( imagesReady(ImageList) ) );
 
-    connect( this, SIGNAL(imagesAdded(ImageList *) ),
-             this, SLOT(addTargetsFromImportedImagesToProject(ImageList *) ) );
-
-    connect( this, SIGNAL(imagesAdded(ImageList *) ),
-             this, SLOT(addCamerasFromImportedImagesToProject(ImageList *) ) );
-
     // Project will be listening for when both cnets and images have been added.
     // It will emit a signal, controlsAndImagesAvailable, when this occurs.
     // Directory sets up a listener on the JigsawWorkOrder clone to enable itself
@@ -197,6 +205,8 @@ namespace Isis {
             this, SLOT(checkControlsAndImagesAvailable()));
     connect(this, SIGNAL(controlListAdded(ControlList *)),
             this, SLOT(checkControlsAndImagesAvailable()));
+    connect(m_directory, SIGNAL(cleanProject(bool)),
+            this, SLOT(setClean(bool)));
 
     m_images = new QList<ImageList *>;
 
@@ -214,6 +224,10 @@ namespace Isis {
 
     m_targets = new TargetBodyList;
 
+    m_mapTemplates = new QList<TemplateList *>;
+
+    m_regTemplates = new QList<TemplateList *>;
+
     m_guiCameras = new GuiCameraList;
 
     m_bundleSolutionInfo = new QList<BundleSolutionInfo *>;
@@ -242,6 +256,7 @@ namespace Isis {
    */
   Project::~Project() {
 
+
     if (m_images) {
       foreach (ImageList *imageList, *m_images) {
         foreach (Image *image, *imageList) {
@@ -255,6 +270,7 @@ namespace Isis {
       m_images = NULL;
     }
 
+
     if (m_shapes) {
       foreach (ShapeList *shapeList, *m_shapes) {
         foreach (Shape *shape, *shapeList) {
@@ -268,6 +284,7 @@ namespace Isis {
       m_shapes = NULL;
     }
 
+
     if (m_controls) {
       foreach (ControlList *controlList, *m_controls) {
         foreach (Control *control, *controlList) {
@@ -280,6 +297,35 @@ namespace Isis {
       m_controls = NULL;
     }
 
+
+    if (m_mapTemplates) {
+      foreach (TemplateList *templateList, *m_mapTemplates) {
+        foreach (Template *templateFile, *templateList) {
+          delete templateFile;
+        }
+
+        delete templateList;
+      }
+
+      delete m_mapTemplates;
+      m_mapTemplates = NULL;
+    }
+
+
+    if (m_regTemplates) {
+      foreach (TemplateList *templateList, *m_regTemplates) {
+        foreach (Template *templateFile, *templateList) {
+          delete templateFile;
+        }
+
+        delete templateList;
+      }
+
+      delete m_regTemplates;
+      m_regTemplates = NULL;
+    }
+
+
     m_activeControl = NULL;
     m_activeImageList = NULL;
 
@@ -324,7 +370,7 @@ namespace Isis {
     delete m_warnings;
     m_warnings = NULL;
 
-    delete m_workOrderHistory;
+    m_workOrderHistory->removeAll(NULL);
     m_workOrderHistory = NULL;
 
     delete m_bundleSettings;
@@ -359,7 +405,7 @@ namespace Isis {
         warn(msg);
         throw IException(IException::Io, msg, _FILEINFO_);
       }
-//      qDebug()<<"shape directory = "<<shapeDataRoot();
+
       if ( !dir.mkdir( shapeDataRoot() ) ) {
         QString msg = QString("Unable to create folder [%1] when trying to initialize project")
                         .arg( shapeDataRoot() );
@@ -379,6 +425,24 @@ namespace Isis {
         warn(msg);
         throw IException(IException::Io, msg, _FILEINFO_);
       }
+      if ( !dir.mkdir( templateRoot() ) ) {
+        QString msg = QString("Unable to create folder [%1] when trying to initialize project")
+                        .arg( templateRoot() );
+        warn(msg);
+        throw IException(IException::Io, msg, _FILEINFO_);
+      }
+      if ( !dir.mkdir( templateRoot() + "/maps" ) ) {
+        QString msg = QString("Unable to create folder [%1] when trying to initialize project")
+                        .arg( templateRoot() + "/maps" );
+        warn(msg);
+        throw IException(IException::Io, msg, _FILEINFO_);
+      }
+      if ( !dir.mkdir( templateRoot() + "/registrations" ) ) {
+        QString msg = QString("Unable to create folder [%1] when trying to initialize project")
+                        .arg( templateRoot() + "/registrations" );
+        warn(msg);
+        throw IException(IException::Io, msg, _FILEINFO_);
+      }
     }
     catch (...) {
       warn("Failed to create project directory structure");
@@ -402,6 +466,10 @@ namespace Isis {
     bool images = false;
     QStringList cnetDirList;
     bool controls = false;
+    QStringList mapTemplateDirList;
+    bool mapTemplates = false;
+    QStringList regTemplateDirList;
+    bool regTemplates = false;
     QStringList bundleDirList;
     bool bundles = false;
     QFile projectXml(projectRoot() + "/project.xml");
@@ -410,6 +478,7 @@ namespace Isis {
       QTextStream projectXmlInput(&projectXml);
 
       while (!projectXmlInput.atEnd() ) {
+
         QString line = projectXmlInput.readLine();
 
         if (controls || line.contains("<controlNets>") ) {
@@ -436,7 +505,7 @@ namespace Isis {
           }
         }
 
-        else if (shapes ||line.contains("<shapeLists>")) {
+        else if (shapes || line.contains("<shapeLists>")) {
           shapes = true;
 
           if (line.contains("</shapeLists>") ) {
@@ -448,7 +517,33 @@ namespace Isis {
           }
         }
 
-        else if (bundles ||line.contains("<bundleSolutionInfo>") ) {
+        else if (mapTemplates || line.contains("<mapTemplateLists>") ) {
+          mapTemplates = true;
+
+          if (line.contains("</mapTemplateLists>") ) {
+            mapTemplates = false;
+          }
+
+          else if (!line.contains("<mapTemplateLists>") ) {
+            QList<QString> components = line.split('"');
+            mapTemplateDirList.append(components.at(5));
+          }
+        }
+
+        else if (regTemplates || line.contains("<regTemplateLists>") ) {
+          regTemplates = true;
+
+          if (line.contains("</regTemplateLists>") ) {
+            regTemplates = false;
+          }
+
+          else if (!line.contains("<regTemplateLists>") ) {
+            QList<QString> components = line.split('"');
+            regTemplateDirList.append(components.at(5));
+          }
+        }
+
+        else if (bundles || line.contains("<bundleSolutionInfo>") ) {
           bundles = true;
 
           if (line.contains("</bundleSolutionInfo>") ) {
@@ -461,57 +556,81 @@ namespace Isis {
         }
       }
 
-        QDir cnetsDir(m_projectRoot->path() + "/cnets/");
-        cnetsDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
-        QStringList cnetsList = cnetsDir.entryList();
-        foreach (QString dir, cnetsList) {
-          dir = dir.simplified();
+      QDir cnetsDir(m_projectRoot->path() + "/cnets/");
+      cnetsDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
+      QStringList cnetsList = cnetsDir.entryList();
+      foreach (QString dir, cnetsList) {
+        dir = dir.simplified();
 
-          if ( !cnetDirList.contains(dir) ) {
-            QDir tempDir(cnetsDir.path() + "/" + dir);
-            tempDir.removeRecursively();
-          }
+        if ( !cnetDirList.contains(dir) ) {
+          QDir tempDir(cnetsDir.path() + "/" + dir);
+          tempDir.removeRecursively();
         }
+      }
 
-        QDir imagesDir(m_projectRoot->path() + "/images/");
-        imagesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
-        QStringList imagesList = imagesDir.entryList();
-        foreach (QString dir, imagesList) {
-          dir = dir.simplified();
+      QDir imagesDir(m_projectRoot->path() + "/images/");
+      imagesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
+      QStringList imagesList = imagesDir.entryList();
+      foreach (QString dir, imagesList) {
+        dir = dir.simplified();
 
-          if ( !imageDirList.contains(dir) ) {
-            QDir tempDir(imagesDir.path() + "/" + dir);
-            tempDir.removeRecursively();
-          }
+        if ( !imageDirList.contains(dir) ) {
+          QDir tempDir(imagesDir.path() + "/" + dir);
+          tempDir.removeRecursively();
         }
+      }
 
-        QDir shapesDir(m_projectRoot->path() + "/shapes/");
-        shapesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
-        QStringList shapesList = shapesDir.entryList();
-        foreach (QString dir, shapesList) {
-          dir = dir.simplified();
+      QDir shapesDir(m_projectRoot->path() + "/shapes/");
+      shapesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
+      QStringList shapesList = shapesDir.entryList();
+      foreach (QString dir, shapesList) {
+        dir = dir.simplified();
 
-          if ( !shapeDirList.contains(dir) ) {
-            QDir tempDir(shapesDir.path() + "/" + dir);
-            tempDir.removeRecursively();
-          }
+        if ( !shapeDirList.contains(dir) ) {
+          QDir tempDir(shapesDir.path() + "/" + dir);
+          tempDir.removeRecursively();
         }
+      }
 
-        QDir bundlesDir(m_projectRoot->path() + "/results/bundle/");
-        bundlesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
-        QStringList bundleList = bundlesDir.entryList();
-        foreach (QString dir, bundleList) {
-          dir = dir.simplified();
+      QDir mapTemplatesDir(m_projectRoot->path() + "/templates/maps");
+      mapTemplatesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
+      QStringList mapTemplatesList = mapTemplatesDir.entryList();
+      foreach (QString dir, mapTemplatesList) {
+        dir = dir.simplified();
 
-          if ( !bundleDirList.contains(dir) ) {
-            QDir tempDir(bundlesDir.path() + "/" + dir);
-            tempDir.removeRecursively();
-          }
+        if ( !mapTemplateDirList.contains("maps/" + dir) ) {
+          QDir tempDir(mapTemplatesDir.path() + "/" + dir);
+          tempDir.removeRecursively();
+        }
+      }
+
+      QDir regTemplatesDir(m_projectRoot->path() + "/templates/registrations");
+      regTemplatesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
+      QStringList regTemplatesList = regTemplatesDir.entryList();
+      foreach (QString dir, regTemplatesList) {
+        dir = dir.simplified();
+
+        if ( !regTemplateDirList.contains("registrations/" + dir)) {
+          QDir tempDir(regTemplatesDir.path() + "/" + dir);
+          tempDir.removeRecursively();
         }
+      }
+
+      QDir bundlesDir(m_projectRoot->path() + "/results/bundle/");
+      bundlesDir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
+      QStringList bundleList = bundlesDir.entryList();
+      foreach (QString dir, bundleList) {
+        dir = dir.simplified();
 
-        projectXml.close();
+        if ( !bundleDirList.contains(dir) ) {
+          QDir tempDir(bundlesDir.path() + "/" + dir);
+          tempDir.removeRecursively();
+        }
       }
 
+      projectXml.close();
+    }
+
     try {
       QString tmpFolder = QDir::temp().absolutePath() + "/"
             + Environment::userName() + "_"
@@ -532,12 +651,14 @@ namespace Isis {
     m_images->clear();
     m_shapes->clear();
     m_controls->clear();
+    m_mapTemplates->clear();
+    m_regTemplates->clear();
     m_targets->clear();
     m_guiCameras->clear();
     m_bundleSolutionInfo->clear();
     m_workOrderHistory->clear();
+
     directory()->clean();
-    setName("Project");
     setClean(true);
   }
 
@@ -547,13 +668,18 @@ namespace Isis {
   }
 
 
-  ImageList *Project::createOrRetrieveImageList(QString name) {
+  ImageList *Project::createOrRetrieveImageList(QString name, QString path) {
     ImageList *result = imageList(name);
     if (!result) {
       result = new ImageList;
 
       result->setName(name);
-      result->setPath(name);
+      if (path == "") {
+        result->setPath(name);
+      }
+      else {
+        result->setPath(path);
+      }
 
       connect( result, SIGNAL( destroyed(QObject *) ),
                this, SLOT( imageListDeleted(QObject *) ) );
@@ -563,13 +689,18 @@ namespace Isis {
   }
 
 
-  ShapeList *Project::createOrRetrieveShapeList(QString name) {
+  ShapeList *Project::createOrRetrieveShapeList(QString name, QString path) {
     ShapeList *result = shapeList(name);
     if (!result) {
       result = new ShapeList;
 
       result->setName(name);
-      result->setPath(name);
+      if (path == "") {
+        result->setPath(name);
+      }
+      else {
+        result->setPath(path);
+      }
 
       connect( result, SIGNAL( destroyed(QObject *) ),
                this, SLOT( shapeListDeleted(QObject *) ) );
@@ -626,19 +757,48 @@ namespace Isis {
       stream.writeEndElement();
     }
 
-    if ( !m_templates.isEmpty() ) {
-      stream.writeStartElement("templates");
+    if ( !m_mapTemplates->isEmpty() ) {
+      stream.writeStartElement("mapTemplateLists");
 
-      for (int i = 0; i < m_templates.count(); i++) {
-        stream.writeStartElement("template");
-        stream.writeAttribute("fileName", m_templates.at(i).dir().dirName() + "/" + m_templates.at(i).name());
-        stream.writeEndElement();
+      for (int i = 0; i < m_mapTemplates->count(); i++) {
+        m_mapTemplates->at(i)->save(stream, this, newProjectRoot);
       }
 
       stream.writeEndElement();
     }
 
-    //  Write general look of gui, including docked widges
+    if ( !m_regTemplates->isEmpty() ) {
+      stream.writeStartElement("regTemplateLists");
+
+      for (int i = 0; i < m_regTemplates->count(); i++) {
+        m_regTemplates->at(i)->save(stream, this, newProjectRoot);
+      }
+
+      stream.writeEndElement();
+    }
+
+    // TODO:  Finish implementing serialization of TargetBody & GuiCameras
+//  if (!m_targets->isEmpty()) {
+//    stream.writeStartElement("targets");
+//
+//    for (int i = 0; i < m_targets->count(); i++) {
+//      m_targets->at(i)->save(stream, this, newProjectRoot);
+//    }
+//
+//    stream.writeEndElement();
+//  }
+//
+//  if (!m_guiCameras->isEmpty()) {
+//    stream.writeStartElement("cameras");
+//
+//    for (int i = 0; i < m_guiCameras->count(); i++) {
+//      m_guiCameras->at(i)->save(stream, this, newProjectRoot);
+//    }
+//
+//    stream.writeEndElement();
+//  }
+
+//  Write general look of gui, including docked widges
 //  QVariant geo_data = saveGeometry();
 //  QVariant layout_data = saveState();
 //
@@ -802,7 +962,7 @@ namespace Isis {
     connect( this, SIGNAL( projectRelocated(Project *) ),
              control, SLOT( updateFileName(Project *) ) );
 
-    createOrRetrieveControlList( FileName( control->fileName() ).dir().dirName() )->append(control);
+    createOrRetrieveControlList( FileName( control->fileName() ).dir().dirName(), "" )->append(control);
 
     (*m_idToControlMap)[control->id()] = control;
 
@@ -810,14 +970,19 @@ namespace Isis {
   }
 
 
-  ControlList *Project::createOrRetrieveControlList(QString name) {
+  ControlList *Project::createOrRetrieveControlList(QString name, QString path) {
     ControlList *result = controlList(name);
 
     if (!result) {
       result = new ControlList;
 
       result->setName(name);
-      result->setPath(name);
+      if (path == "") {
+        result->setPath(name);
+      }
+      else {
+        result->setPath(path);
+      }
 
       connect( result, SIGNAL( destroyed(QObject *) ),
                this, SLOT( controlListDeleted(QObject *) ) );
@@ -865,7 +1030,6 @@ namespace Isis {
    * @param QStringList names of imageFiles
    */
   void Project::addImages(QStringList imageFiles) {
-//  qDebug()<<"Project::addImages(QStringList imageFiles)";
     if (m_numImagesCurrentlyReading == 0) {
       m_imageReadingMutex->lock();
     }
@@ -881,6 +1045,10 @@ namespace Isis {
    */
   void Project::addImages(ImageList newImages) {
     imagesReady(newImages);
+
+    //  The each
+    emit guiCamerasAdded(m_guiCameras);
+    emit targetsAdded(m_targets);
   }
 
 
@@ -938,23 +1106,23 @@ namespace Isis {
 
 
   /**
-   * Add new templates to m_templates and update project item model
+   * Add new templates to m_mapTemplates or m_regTemplates and update project item model
    *
    * @param newFileList QList of FileNames for each new imported template
    */
-  void Project::addTemplates(QList<FileName> newFileList) {
-    m_templates.append(newFileList);
-    emit templatesAdded(newFileList);
-  }
-
+  void Project::addTemplates(TemplateList *templateList) {
+    foreach (Template *templateFile, *templateList) {
+      connect( this, SIGNAL( projectRelocated(Project *) ),
+               templateFile, SLOT( updateFileName(Project *) ) );
+    }
+    if (templateList->type() == "maps") {
+      m_mapTemplates->append(templateList);
+    }
+    else if (templateList->type() == "registrations") {
+      m_regTemplates->append(templateList);
+    }
 
-  /**
-   * Remove a FileName from m_templates
-   *
-   * @param file FileName to be removed
-   */
-  void Project::removeTemplate(FileName file) {
-    m_templates.removeOne(file);
+    emit templatesAdded(templateList);
   }
 
 
@@ -965,14 +1133,25 @@ namespace Isis {
    */
   QDir Project::addTemplateFolder(QString prefix) {
     QDir templateFolder = templateRoot();
+    prefix += "%1";
+    int prefixCounter = 0;
+    QString numberedPrefix;
 
-    if ( !templateFolder.mkpath(prefix) ) {
+    do {
+      prefixCounter++;
+      numberedPrefix = prefix.arg( QString::number(prefixCounter) );
+    }
+    while ( templateFolder.exists(numberedPrefix) );
+
+    if ( !templateFolder.mkpath(numberedPrefix) ) {
       throw IException(IException::Io,
           tr("Could not create template directory [%1] in [%2].")
-            .arg(prefix).arg( templateFolder.absolutePath() ),
+            .arg(numberedPrefix).arg( templateFolder.absolutePath() ),
           _FILEINFO_);
     }
 
+    templateFolder.cd(numberedPrefix);
+
     return templateFolder;
   }
 
@@ -1025,13 +1204,18 @@ namespace Isis {
 
   /**
    * Loads bundle solution info into project
+   *
    * @param BundleSolutionInfo
    */
   void Project::loadBundleSolutionInfo(BundleSolutionInfo *bundleSolutionInfo) {
     m_bundleSolutionInfo->append(bundleSolutionInfo);
 
+    // add BundleSolutionInfo to project's m_idToBundleSolutionInfoMap
     (*m_idToBundleSolutionInfoMap)[bundleSolutionInfo->id()] = bundleSolutionInfo;
 
+    // add BundleSolutionInfo's control to project's m_idToControlMap
+    (*m_idToControlMap)[bundleSolutionInfo->control()->id()] = bundleSolutionInfo->control();
+
     emit bundleSolutionInfoAdded(bundleSolutionInfo);
   }
 
@@ -1047,6 +1231,105 @@ namespace Isis {
   }
 
 
+  void Project::writeSettings() {
+
+    QString appName = QApplication::applicationName();
+
+
+    QSettings globalSettings(
+        FileName("$HOME/.Isis/" + appName + "/" + appName + "_" + "Project.config")
+          .expanded(),
+        QSettings::NativeFormat);
+
+    globalSettings.beginGroup("recent_projects");
+    QStringList keys = globalSettings.allKeys();
+    QMap<QString,QString> recentProjects;
+
+    foreach (QString key,keys) {
+
+      recentProjects[key]=globalSettings.value(key).toString();
+
+    }
+
+    QList<QString> projectPaths = recentProjects.values();
+
+    if (keys.count() >= m_maxRecentProjects) {
+
+      //Clear out the recent projects before repopulating this group
+      globalSettings.remove("");
+
+
+
+      //If the currently open project is a project that has been saved and is not within the current
+      //list of recently open projects, then remove the oldest project from the list.
+      if (!this->projectRoot().contains("tmpProject") && !projectPaths.contains(this->projectRoot()) ) {
+        QString s=keys.first();
+        recentProjects.remove( s );
+      }
+
+      //If the currently open project is already contained within the list,
+      //then remove the earlier reference.
+
+      if (projectPaths.contains(this->projectRoot())) {
+        QString key = recentProjects.key(this->projectRoot());
+        recentProjects.remove(key);
+      }
+
+      QMap<QString,QString>::iterator i;
+
+      //Iterate through the recentProjects QMap and set the <key,val> pairs.
+      for (i=recentProjects.begin();i!=recentProjects.end();i++) {
+
+          globalSettings.setValue(i.key(),i.value());
+
+      }
+
+      //Get a unique time value for generating a key
+      long t0 = QDateTime::currentMSecsSinceEpoch();
+      QString projName = this->name();
+
+      QString t0String=QString::number(t0);
+
+      //Save the project location
+      if (!this->projectRoot().contains("tmpProject") ) {
+              globalSettings.setValue(t0String+"%%%%%"+projName,this->projectRoot());
+
+      }
+
+    }
+
+    //The numer of recent open projects is less than m_maxRecentProjects
+    else {
+
+      //Clear out the recent projects before repopulating this group
+      globalSettings.remove("");
+      if (projectPaths.contains(this->projectRoot())) {
+        QString key = recentProjects.key(this->projectRoot());
+        recentProjects.remove(key);
+      }
+      QMap<QString,QString>::iterator i;
+
+      //Iterate through the recentProjects QMap and set the <key,val> pairs.
+      for ( i=recentProjects.begin(); i!=recentProjects.end(); i++ ) {
+          globalSettings.setValue(i.key(),i.value());
+      }
+
+      long t0 = QDateTime::currentMSecsSinceEpoch();
+      QString projName = this->name();
+      QString t0String=QString::number(t0);
+
+      //if (!this->projectRoot().contains("tmpProject") && !projectPaths.contains( this->projectRoot() ) ) {
+      if (!this->projectRoot().contains("tmpProject") ) {
+        globalSettings.setValue(t0String+"%%%%%"+projName,this->projectRoot());
+      }
+
+    }
+
+
+    globalSettings.endGroup();
+  }
+
+
   /**
    * Open the project at the given path.
    * @param The path to the project folder
@@ -1060,8 +1343,10 @@ namespace Isis {
    *                  directory is chosen Fixes #4969
    * */
   void Project::open(QString projectPathStr) {
-    FileName projectPath(projectPathStr);
-    QString projectXmlPath = projectPath.toString() + "/project.xml";
+    // Expand projectPathStr to contain absolute path
+    QString projectAbsolutePathStr = QDir(projectPathStr).absolutePath();
+
+    QString projectXmlPath = projectAbsolutePathStr + "/project.xml";
     QFile file(projectXmlPath);
 
     if ( !file.open(QFile::ReadOnly) ) {
@@ -1071,7 +1356,7 @@ namespace Isis {
                        _FILEINFO_);
     }
 
-    QString projectXmlHistoryPath = projectPath.toString() + "/history.xml";
+    QString projectXmlHistoryPath = projectAbsolutePathStr + "/history.xml";
     QFile historyFile(projectXmlHistoryPath);
 
     if ( !historyFile.open(QFile::ReadOnly) ) {
@@ -1081,7 +1366,7 @@ namespace Isis {
                        _FILEINFO_);
     }
 
-    QString projectXmlWarningsPath = projectPath.toString() + "/warnings.xml";
+    QString projectXmlWarningsPath = projectAbsolutePathStr + "/warnings.xml";
     QFile warningsFile(projectXmlWarningsPath);
 
     if (!warningsFile.open(QFile::ReadOnly)) {
@@ -1091,7 +1376,7 @@ namespace Isis {
                        _FILEINFO_);
     }
 
-    QString directoryXmlPath = projectPath.toString() + "/directory.xml";
+    QString directoryXmlPath = projectAbsolutePathStr + "/directory.xml";
     QFile directoryFile(directoryXmlPath);
 
     if (!directoryFile.open(QFile::ReadOnly)) {
@@ -1113,10 +1398,8 @@ namespace Isis {
     reader.pushContentHandler(&handler);
     reader.setErrorHandler(&handler);
 
-
-
     QDir oldProjectRoot(*m_projectRoot);
-    *m_projectRoot = projectPath.expanded();
+    *m_projectRoot =  QDir(projectAbsolutePathStr);
 
     QXmlInputSource xmlInputSource(&file);
 
@@ -1128,12 +1411,12 @@ namespace Isis {
         }
     catch (IException &e) {
       directory()->showWarning(QString("Failed to open project completely [%1]")
-                               .arg(projectPath.original()));
+                               .arg(projectAbsolutePathStr));
       directory()->showWarning(e.toString());
       }
     catch (std::exception &e) {
       directory()->showWarning(QString("Failed to open project completely[%1]")
-                               .arg(projectPath.original()));
+                               .arg(projectAbsolutePathStr));
       directory()->showWarning(e.what());
     }
 
@@ -1141,25 +1424,26 @@ namespace Isis {
     QXmlInputSource xmlHistoryInputSource(&historyFile);
 
     try {
-        reader.parse(xmlHistoryInputSource);
-        }
+      reader.parse(xmlHistoryInputSource);
+      }
 
     catch (IException &e) {
       directory()->showWarning(QString("Failed to read history from project[%1]")
-                               .arg(projectPath.original()));
+                               .arg(projectAbsolutePathStr));
       directory()->showWarning(e.toString());
       }
     catch (std::exception &e) {
       directory()->showWarning(QString("Failed to read history from project[%1]")
-                                .arg(projectPath.original()));
+                                .arg(projectAbsolutePathStr));
       directory()->showWarning(e.what());
     }
 
     reader.pushContentHandler(&handler);
 
     QXmlInputSource xmlWarningsInputSource(&warningsFile);
+
     if (!reader.parse(xmlWarningsInputSource)) {
-      warn(tr("Failed to read warnings from project [%1]").arg(projectPath.original()));
+      warn(tr("Failed to read warnings from project [%1]").arg(projectAbsolutePathStr));
     }
 
     reader.pushContentHandler(&handler);
@@ -1171,13 +1455,13 @@ namespace Isis {
          }
     catch (IException &e) {
       directory()->showWarning(QString("Failed to read GUI state from project[%1]")
-                               .arg(projectPath.original()));
+                               .arg(projectAbsolutePathStr));
       directory()->showWarning(e.toString());
 
       }
     catch (std::exception &e) {
       directory()->showWarning(QString("Failed to read GUI state from project[%1]")
-                               .arg(projectPath.original()));
+                               .arg(projectAbsolutePathStr));
       directory()->showWarning(e.what());
     }
 
@@ -1187,7 +1471,9 @@ namespace Isis {
       bundleRoot.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); // sym links ok???
 
       QFileInfoList bundleDirs = bundleRoot.entryInfoList();
+
       for (int dirListIndex = 0; dirListIndex < bundleDirs.size(); dirListIndex++) {
+
         // get QFileInfo for each file in this directory
         QDir bundleSolutionDir(bundleDirs[dirListIndex].absoluteFilePath());
         bundleSolutionDir.setFilter(QDir::Files | QDir::NoSymLinks); // sym links ok???
@@ -1204,6 +1490,8 @@ namespace Isis {
       }
     }
     m_isOpen = true;
+
+    setClean(true);
     emit projectLoaded(this);
   }
 
@@ -1219,6 +1507,7 @@ namespace Isis {
    * @return Image matching id
    */
   Image *Project::image(QString id) {
+
     return (*m_idToImageMap)[id];
   }
 
@@ -1379,9 +1668,19 @@ namespace Isis {
   }
 
 
+  /**
+   * Get the top-level folder of the new project. This is where the project is opened from/saved to.
+   * This is set when a Save As operation is in progress.
+   */
+  QString Project::newProjectRoot() const {
+    return m_newProjectRoot;
+  }
+
+
   /**
    * Change the project's name (GUI only, doesn't affect location on disk).
    */
+
   void Project::setName(QString newName) {
     m_name = newName;
     emit nameChanged(m_name);
@@ -1509,16 +1808,53 @@ namespace Isis {
    *                           being chosen Fixes #4969
    *  @history 2017-08-02 Cole Neubauer - Added functionality to switch between active controls
    *                           Fixes #4567
+   *  @history 2018-03-30 Tracie Sucharski - If current activeControl has been modified, prompt for
+   *                           saving. Emit signal to discardActiveControlEdits.
+   *  @history 2018-07-12 Tracie Sucharski - Moved the close/open control net from
+   *                           Directory::reloadActiveControlInCnetEditorView to this method to
+   *                           prevent seg fault when there are multiple cnetEditorViews with same
+   *                           cnet.
    *
    */
   void Project::setActiveControl(QString displayName) {
     Control *previousControl = m_activeControl;
     if (m_activeControl) {
+
+      // If the current active control has been modified, ask user if they want to save or discard
+      // changes.
+      if (m_activeControl->isModified()) {
+        QMessageBox msgBox;
+        msgBox.setText("Save current active control");
+        msgBox.setInformativeText("The current active control has been modified.  Do you want "
+                                  "to save before setting a new active control?");
+        msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
+        msgBox.setDefaultButton(QMessageBox::Save);
+        int ret = msgBox.exec();
+        switch (ret) {
+          // Save current active control
+          case QMessageBox::Save:
+            m_activeControl->write();
+            break;
+          // Discard any changes made to cnet
+          case QMessageBox::Discard:
+            // Close, then re-open effectively discarding edits
+            m_activeControl->closeControlNet();
+            m_activeControl->openControlNet();
+            emit discardActiveControlEdits();
+            break;
+          // Cancel operation
+          case QMessageBox::Cancel:
+            return;
+        }
+      }
       emit activeControlSet(false);
       ProjectItem *item = directory()->model()->findItemData(m_activeControl->
                           displayProperties()->displayName(), Qt::DisplayRole);
       item->setTextColor(Qt::black);
-      m_activeControl->closeControlNet();
+      // Make sure active not used in a CnetEditorWidget before closing
+      if (!directory()->controlUsedInCnetEditorWidget(m_activeControl)) {
+        m_activeControl->closeControlNet();
+      }
     }
 
     ProjectItem *item = directory()->model()->findItemData(displayName, Qt::DisplayRole);
@@ -1526,23 +1862,23 @@ namespace Isis {
       m_activeControl = item->control();
 
       try {
-        activeControl()->controlNet()->SetImages(*(activeImageList()->serialNumberList()));
-        item->setTextColor(Qt::darkGreen);
-      }
-      catch(IException e){
-        if (previousControl) {
-          m_activeControl = previousControl;
-          item = directory()->model()->findItemData(m_activeControl->
-                              displayProperties()->displayName(), Qt::DisplayRole);
+          m_activeControl->controlNet()->SetImages(*(activeImageList()->serialNumberList()));
           item->setTextColor(Qt::darkGreen);
-          activeControl()->controlNet()->SetImages(*(activeImageList()->serialNumberList()));
-        }
-        else {
-          m_activeControl = NULL;
+      }
+      catch(IException &e){
+          if (previousControl) {
+            m_activeControl = previousControl;
+            item = directory()->model()->findItemData(m_activeControl->
+                                displayProperties()->displayName(), Qt::DisplayRole);
+            item->setTextColor(Qt::darkGreen);
+            m_activeControl->controlNet()->SetImages(*(activeImageList()->serialNumberList()));
+          }
+          else {
+            m_activeControl = NULL;
+          }
+          throw IException(e);
         }
-        throw IException(e);
       }
-    }
     emit activeControlSet(true);
   }
 
@@ -1550,26 +1886,49 @@ namespace Isis {
   /**
    * @brief Return the Active Control (control network)
    *
-   * Returns the active control (control network) for views which need to operate on
+   * @description Returns the active control (control network) for views which need to operate on
    * the same control, ie. Footprint2dView, CubeDnView, ControlPointEditView.
+   * IMPORTANT:  Returns NULL if no active Control.
+   *
+   * @return @b Control * Returns the active Control if set, otherwise returns NULL
    *
    * @internal
    *   @history 2016-06-23 Tracie Sucharski - Original version.
    *   @history 2017-05-17 Tracie Sucharski - If no active control set & there is only one control
    *                          in the project, default to that control.
+   *   @history 2017-10-16 Ian Humphrey - Check to make sure we have imported images before trying
+   *                           to set an active control when there is only one control in the
+   *                           project. Fixes #5160.
    */
   Control *Project::activeControl() {
 
-    if (!m_activeControl && m_controls->count() == 1) {
-      if (m_controls->at(0)->count() == 1) {
+    if (!m_activeControl && (m_controls->count() == 1 && m_controls->at(0)->count() ==1)) {
+      //  Can only set a default control if an active imageList exists or if a default can be set
+      if (activeImageList()) {
         QString controlName = m_controls->at(0)->at(0)->displayProperties()->displayName();
         setActiveControl(controlName);
       }
     }
+
     return m_activeControl;
   }
 
 
+  /**
+   * When a cnet is modified, set the project state to not clean.
+   * If the active control was modified, send a signal back to Directory
+   * so that other views know that the active was modified. This allows
+   * for CubeDnView and Footprint2DView to be redrawn.
+   * Currently, this was the easiest place to emit this signal.
+   */
+  void Project::cnetModified() {
+    if (m_activeControl && m_activeControl->isModified()) {
+      emit activeControlModified();
+    }
+    setClean(false);
+  }
+
+
   /**
    * @brief Set the Active ImageList from the displayName which is saved in project.xml
    *
@@ -1608,7 +1967,7 @@ namespace Isis {
         try {
           activeControl()->controlNet()->SetImages(*(m_activeImageList->serialNumberList()));
         }
-        catch(IException e){
+        catch(IException &e){
           if (previousImageList) {
             m_activeImageList = previousImageList;
             item = directory()->model()->findItemData(m_activeImageList->
@@ -1633,6 +1992,8 @@ namespace Isis {
    *
    * Returns the active ImageList for views which need to operate on the
    * same list of images, ie. Footprint2dView, CubeDnView, ControlPointEditView.
+   * IMPORTANT:  Returns NULL if active ImageList is not set and a default cannot be set if there
+   *             are multiple image lists in the project.
    *
    * @internal
    *   @history 2016-06-23 Tracie Sucharski - Original version.
@@ -1643,6 +2004,7 @@ namespace Isis {
 
     if (!m_activeImageList && m_images->count() == 1) {
       QString imageList = m_images->at(0)->name();
+
       setActiveImageList(imageList);
     }
     return m_activeImageList;
@@ -1776,12 +2138,33 @@ namespace Isis {
 
 
   /**
-   * Return template FileNames
+   * Return all template FileNames
    *
    * @return QList of FileName
    */
-  QList<FileName> Project::templates() {
-    return m_templates;
+  QList<TemplateList *> Project::templates() {
+    QList<TemplateList *> allTemplates = *m_mapTemplates + *m_regTemplates;
+    return allTemplates;
+  }
+
+
+  /**
+   * Return map template FileNames
+   *
+   * @return QList of FileName
+   */
+  QList<TemplateList *> Project::mapTemplates() {
+    return *m_mapTemplates;
+  }
+
+
+  /**
+   * Return registration template FileNames
+   *
+   * @return QList of FileName
+   */
+  QList<TemplateList *> Project::regTemplates() {
+    return *m_regTemplates;
   }
 
 
@@ -1866,6 +2249,12 @@ namespace Isis {
    * Delete all of the files, that this project stores, from disk.
    */
   void Project::deleteAllProjectFiles() {
+
+    // Currently the deleteFromDisk methods for Image and Shape delete the Cube if it exists, the
+    //  other objects deleteFromDisk methods simply remove files.  This could be achieved easier
+    //  in this method by simply calling QDir::removeRecursively(), but for future functionality
+    //  call each objects deleteFromDisk.  Currently there are no cleanup methods for Bundle results
+    //  or templates, so simply remove directory recursively.
     foreach (ImageList *imagesInAFolder, *m_images) {
       imagesInAFolder->deleteFromDisk(this);
     }
@@ -1874,22 +2263,30 @@ namespace Isis {
       warn( tr("Did not properly clean up images folder [%1] in project").arg( imageDataRoot() ) );
     }
 
+    foreach (ShapeList *shapesInAFolder, *m_shapes) {
+      shapesInAFolder->deleteFromDisk(this);
+    }
+
     if ( !m_projectRoot->rmdir( shapeDataRoot() ) ) {
       warn( tr("Did not properly clean up shapes folder [%1] in project").
             arg( shapeDataRoot() ) );
     }
 
+    foreach (ControlList *controlsInAFolder, *m_controls) {
+      controlsInAFolder->deleteFromDisk(this);
+    }
+
     if ( !m_projectRoot->rmdir( cnetRoot() ) ) {
       warn( tr("Did not properly clean up control network folder [%1] in project")
              .arg( cnetRoot() ) );
     }
 
-    if ( !m_projectRoot->rmdir( resultsRoot() ) ) {
+    if ( !(QDir(resultsRoot()).removeRecursively()) ) {
       warn( tr("Did not properly clean up results folder [%1] in project")
              .arg( resultsRoot() ) );
     }
 
-    if ( !m_projectRoot->rmdir( templateRoot() ) ) {
+    if ( !(QDir(templateRoot()).removeRecursively()) ) {
       warn( tr("Did not properly clean up templates folder [%1] in project")
              .arg( templateRoot() ) );
     }
@@ -1906,42 +2303,68 @@ namespace Isis {
    * @param newProjectRoot The new root directory for the project.
    */
   void Project::relocateProjectRoot(QString newProjectRoot) {
-    QString oldRoot = templateRoot();
     *m_projectRoot = newProjectRoot;
-
     emit projectRelocated(this);
-
-    addTemplateFolder("maps");
-    addTemplateFolder("registrations");
-
-    // This is a temporary fix until we create an object for Templates
-    foreach (FileName templateFile, templates()) {
-      QFile::copy(oldRoot + "/" + templateFile.toString(), templateRoot() + "/" + templateFile.toString());
-      ProjectItem *currentItem =
-          directory()->model()->findItemData(QVariant::fromValue(templateFile.toString()));
-      currentItem->setData(QVariant(templateFile.toString()));
-    }
   }
 
 
-  void Project::save() {
+  /**
+   * Generic save method to save the state of the project.
+   *
+   * This method is used to save the state of the project. If the project is currently a temporary
+   * project, this method will create a file dialog to prompt the user for a place/name to save
+   * the project as. Otherwise, the existing project state will be saved. This method also informs
+   * the caller whether or not the save occurred. It is possible for a save to NOT occur if the
+   * project is a temporary project and the user cancels/closes the dialog prompt.
+   *
+   * @return @b bool Returns true if the save completed. The save is considered incomplete if the
+   * project is a temporary project and the user either cancels or closes the file dialog prompt
+   * that is created.
+   */
+  bool Project::save() {
+    // Let caller know if the save dialog was cancelled
+    bool saveDialogCompleted = true;
+
     if (m_isTemporaryProject) {
       QString newDestination = QFileDialog::getSaveFileName(NULL,
                                                             QString("Project Location"),
                                                             QString("."));
 
       if ( !newDestination.isEmpty() ) {
+        m_isTemporaryProject = false;
         save( QFileInfo(newDestination + "/").absolutePath() );
 
         // delete the temporary project
         deleteAllProjectFiles();
         relocateProjectRoot(newDestination);
-        m_isTemporaryProject = false;
+
+        // 2014-03-14 kle This is a lame kludge because we think that relocateProjectRoot is not
+        // working properly. For example, when we save a new project and try to view a control net
+        // the it thinks it's still in the /tmp area
+        // see ticket #5292
+        open(newDestination);
+      }
+      // Dialog was cancelled
+      else {
+        saveDialogCompleted = false;
       }
     }
     else {
+      // Save all modified controls. If "Save As" is being processed,
+      // the controls are written in the Control::copyToNewProjectRoot, so the controls in
+      // current project are not modified.
+      foreach (ControlList *controlList, *m_controls) {
+        foreach (Control *control, *controlList) {
+          if (control->isModified()) {
+            control->write();
+          }
+        }
+      }
       save(m_projectRoot->absolutePath(), false);
+      emit cnetSaved(true);
     }
+
+    return saveDialogCompleted;
   }
 
 
@@ -1949,7 +2372,7 @@ namespace Isis {
 
   /**
    * @brief Project::save  Saves the project state out to an XML file
-   * @param newPath  The path to the project directory.
+   * @param projectPath  The path to the project directory.
    * @param verifyPathDoesntExist A boolean variable which is set to true
    * if we wish to check that we are not overwriting a pre-existing save.
    *
@@ -2064,10 +2487,16 @@ namespace Isis {
                        _FILEINFO_);
     }
 
-    //  If current project is temporary set project name to path name as a default
-    if (m_isTemporaryProject) {
-      setName(newPath.name());
-    }
+    //  TODO Set newpath member variable.  This is used for some of the data copy methods and is not
+    //  the ideal way to handle this.  Maybe change the data copy methods to either take the new
+    //  project root in addition to the data root or put the data root in the dataList (ImageList,
+    //  etc.). If performing a "Save", m_newProjectRoot == m_projectRoot
+    m_newProjectRoot = newPath.toString();
+
+    //  For now set the member variable rather than calling setName which emits signal and updates
+    //  ProjectItemModel & the project name on the tree.  This will be updated when the new project
+    //  is opened.
+    m_name = newPath.name();
 
     QFile projectSettingsFile(newPath.toString() + "/project.xml");
     if (!projectSettingsFile.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
@@ -2134,15 +2563,19 @@ namespace Isis {
     directoryStateWriter.setAutoFormatting(true);
 
     directoryStateWriter.writeStartDocument();
-    //qDebug()<<"Project::save Before save Directory";
+
     /*
      * TODO: Does Project need to know about Directory?
      * This is the only place that project uses m_directory. This makes me wonder if it is
      * necessary for project to have a Directory member variable.
      */
     m_directory->save(directoryStateWriter, newPath);
-    //qDebug()<<"Project::save After save Directory";
+
     directoryStateWriter.writeEndDocument();
+    m_isOpen = true;
+
+    emit projectSaved(this);
+
   }
 
 
@@ -2242,10 +2675,10 @@ namespace Isis {
 
       (*m_idToImageMap)[image->id()] = image;
       if (images.name() != "") {
-        createOrRetrieveImageList(images.name())->append(image);
+        createOrRetrieveImageList(images.name(), images.path())->append(image);
       }
       else {
-        createOrRetrieveImageList(FileName(images[0]->fileName()).dir().dirName())->append(image);
+        createOrRetrieveImageList(FileName(images[0]->fileName()).dir().dirName(), "")->append(image);
       }
     }
 
@@ -2273,82 +2706,80 @@ namespace Isis {
   }
 
 
-  void Project::addTargetsFromImportedImagesToProject(ImageList *imageList) {
+  /**
+  * @brief This method checks for the existence of a target based on TargetName
+  *
+  * @param id The target string to be compared.
+  * @return bool Returns true if targetBody already exists in project
+  */
+  bool Project::hasTarget(QString id) {
+    foreach (TargetBodyQsp targetBody, *m_targets) {
+      if (QString::compare(targetBody->targetName(), id, Qt::CaseInsensitive) == 0) {
+        return true;
+      }
+    }
+    return false;
+  }
 
-    bool found = false;
-    foreach (Image *image, *imageList) {
 
-      // TODO - I'm a bit worried about being sure the cube is still open at this point (Ken)
-      //   2016-07-25  TLS The cube is created if it doesn't exist (or isn't open)
-      Target *target = image->cube()->camera()->target();
+  /**
+  * Adds a new target to the project.
+  *
+  * @param target The target to be added.
+  */
+  void Project::addTarget(Target *target) {
 
-      // construct TargetBody QSharedPointer from this images cameras Target
-      TargetBodyQsp targetBody = TargetBodyQsp(new TargetBody(target));
+    TargetBodyQsp targetBody = TargetBodyQsp(new TargetBody(target));
 
-      foreach (TargetBodyQsp tb, *m_targets) {
-        if (*tb == *targetBody) {
-          found = true;
-          break;
-        }
-      }
+    m_targets->append(targetBody);
 
-      // if this TargetBody is not already in the project, add it
-      // below is how it probably should work, would have to I think
-      // override the ::contains() method in the TargetBodyList class
-//      if (!m_targets->contains(targetBody))
-//        m_targets->append(targetBody);
+  }
 
-      if (!found) {
-        m_targets->append(targetBody);
-        connect( targetBody.data(), SIGNAL( destroyed(QObject *) ),
-                 this, SLOT( targetBodyClosed(QObject *) ) );
-//      connect( this, SIGNAL( projectRelocated(Project *) ),
-//               targetBody.data(), SLOT( updateFileName(Project *) ) );
 
-        (*m_idToTargetBodyMap)[targetBody->id()] = targetBody.data();
+  /**
+  * @brief This method checks for the existence of a camera based on InstrumentId
+  *
+  * @param id The instrument string to be compared.
+  * @return bool Returns true if GuiCamera already exists in project
+  */
+  bool Project::hasCamera(QString id) {
+    foreach (GuiCameraQsp camera, *m_guiCameras) {
+
+      if (QString::compare(camera->instrumentId(), id, Qt::CaseInsensitive) == 0) {
+        return true;
       }
     }
-
-    emit targetsAdded(m_targets);
+    return false;
   }
 
 
+  /**
+  * Adds a new camera to the project.
+  *
+  * @param camera The camera to be added.
+  */
+  void Project::addCamera(Camera *camera) {
 
-  void Project::addCamerasFromImportedImagesToProject(ImageList *imageList) {
-    bool found = false;
-    foreach (Image *image, *imageList) {
-
-      // TODO - I'm a bit worried about being sure the cube is still open at this point (Ken)
-      Camera *camera = image->cube()->camera();
+    GuiCameraQsp guiCamera = GuiCameraQsp(new GuiCamera(camera));
 
-      // construct guiCamera QSharedPointer from this images cameras Target
-      GuiCameraQsp guiCamera = GuiCameraQsp(new GuiCamera(camera));
+    m_guiCameras->append(guiCamera);
 
-      foreach (GuiCameraQsp gc, *m_guiCameras) {
-        if (*gc == *guiCamera) {
-          found = true;
-          break;
-        }
-      }
+  }
 
-      // if this guiCamera is not already in the project, add it
-      // below is how it probably should work, would have to I think
-      // override the ::contains() method in the GuiCameraList class
-//      if (!m_guiCameras->contains(guiCamera))
-//        m_guiCameras->append(guiCamera);
 
-      if (!found) {
-        m_guiCameras->append(guiCamera);
-//      connect( guiCamera.data(), SIGNAL( destroyed(QObject *) ),
-//               this, SLOT( guiCameraClosed(QObject *) ) );
-//      connect( this, SIGNAL( projectRelocated(Project *) ),
-//               guiCamera.data(), SLOT( updateFileName(Project *) ) );
+  /**
+   * Add images to the id map which are not under the projects main data area, the Images node on
+   * the project tree, such as the images under bundle results.  This is an interim solution since
+   * the Project and model/view does not seem to be properly handling data which is not on the main
+   * data part of the project tree.
+   *
+   * @param ImagesList of images
+   */
+  void Project::addImagesToIdMap(ImageList images) {
 
-        (*m_idToGuiCameraMap)[guiCamera->id()] = guiCamera.data();
-      }
+    foreach (Image *image, images) {
+      (*m_idToImageMap)[image->id()] = image;
     }
-
-    emit guiCamerasAdded(m_guiCameras);
   }
 
 
@@ -2491,10 +2922,10 @@ namespace Isis {
 
       (*m_idToShapeMap)[shape->id()] = shape;
       if (shapes.name() != "") {
-        createOrRetrieveShapeList(shapes.name())->append(shape);
+        createOrRetrieveShapeList(shapes.name(), shapes.path())->append(shape);
       }
       else {
-        createOrRetrieveShapeList(FileName(shapes[0]->fileName()).dir().dirName())->append(shape);
+        createOrRetrieveShapeList(FileName(shapes[0]->fileName()).dir().dirName(), "")->append(shape);
       }
 
     }
@@ -2563,7 +2994,6 @@ namespace Isis {
 
       if (localName == "project") {
         QString name = atts.value("name");
-
         if (!name.isEmpty()) {
           m_project->setName(name);
         }
@@ -2574,11 +3004,14 @@ namespace Isis {
       else if (localName == "imageList") {
         m_imageLists.append(new ImageList(m_project, reader()));
       }
-      else if (localName == "shapeLists") {
+      else if (localName == "shapeList") {
         m_shapeLists.append(new ShapeList(m_project, reader()));
       }
-      else if (localName == "template") {
-        m_templates.append(FileName(m_project->templateRoot() + "/" + atts.value("fileName")));
+      else if (localName == "mapTemplateList") {
+        m_mapTemplateLists.append( new TemplateList(m_project, reader()));
+      }
+      else if (localName == "regTemplateList") {
+        m_regTemplateLists.append( new TemplateList(m_project, reader()));
       }
       //  workOrders are stored in history.xml, using same reader as project.xml
       else if (localName == "workOrder") {
@@ -2649,6 +3082,16 @@ namespace Isis {
         m_project->shapesReady(*shapeList);
       }
     }
+    else if (localName == "mapTemplateLists") {
+      foreach (TemplateList *templateList, m_mapTemplateLists) {
+        m_project->addTemplates(templateList);
+      }
+    }
+    else if (localName == "regTemplateLists") {
+      foreach (TemplateList *templateList, m_regTemplateLists) {
+        m_project->addTemplates(templateList);
+      }
+    }
     else if (localName == "workOrder") {
       m_project->m_workOrderHistory->append(m_workOrder);
       m_workOrder = NULL;
@@ -2665,12 +3108,15 @@ namespace Isis {
     else if (localName == "results") {
       foreach (BundleSolutionInfo *bundleInfo, m_bundleSolutionInfos) {
         m_project->addBundleSolutionInfo(bundleInfo);
+
+        // If BundleSolutionInfo contains adjusted images, add to the project id map.
+        if (bundleInfo->adjustedImages().count()) {
+          foreach (ImageList *adjustedImageList, bundleInfo->adjustedImages()) {
+            m_project->addImagesToIdMap(*adjustedImageList);
+          }
+        }
       }
     }
-    else if (localName == "templates") {
-      m_project->addTemplates(m_templates);
-    }
-
     return XmlStackedHandler::endElement(namespaceURI, localName, qName);
   }
 }
diff --git a/isis/src/qisis/objs/Project/Project.h b/isis/src/qisis/objs/Project/Project.h
index b88b4e1a3226cbc6b6622c5b5455975f86b9fcf5..b50c33b3c3c8f6639f88a189847c6e4a33782f8f 100644
--- a/isis/src/qisis/objs/Project/Project.h
+++ b/isis/src/qisis/objs/Project/Project.h
@@ -40,6 +40,7 @@ class QXmlStreamWriter;
 #include "ImageList.h"
 #include "ShapeList.h"
 #include "TargetBody.h"
+#include "TemplateList.h"
 #include "XmlStackedHandler.h"
 
 namespace Isis {
@@ -53,6 +54,8 @@ namespace Isis {
   class ImageReader;
   class ProgressBar;
   class ShapeReader;
+  class Template;
+  class TemplateList;
   class WorkOrder;
 
   /**
@@ -147,15 +150,11 @@ namespace Isis {
    *                           imports, shape imports, and bundle solution info. Fixes #4855,
    *                           #4979, #4980.
    *   @history 2017-07-17 Cole Neubauer - Changed activeControl signal to emit a bool to be able
-   *
-   *   @history 2017-07-24 Cole Neubauer - Added isOpen, isClean, setClean, and clear functions to
-   *                           allow for opening of a new project. Fixes #4969.
-   *   @history 2017-07-17 Cole Neubauer - Changed activeControl signal to emit a bool to be able
    *                           to slot a setEnabled(bool) call to a QAction. This was necessary to
    *                           reenable the CNet Tool when a control net is made active.
    *                           Fixes #5046.
    *   @history 2017-07-24 Cole Neubauer - Added isOpen, isClean, setClean, and clear functions to
-   *                           allow for opening of a new project. Fixes #4969
+   *                           allow for opening of a new project. Fixes #4969.
    *   @history 2017-07-27 Cole Neubauer - Added check before emmiting workOrderStarting()
    *                           Fixes #4715.
    *   @history 2017-07-27 Cole Neubauer - Added a workordermutex to be used in workorder accessors
@@ -174,6 +173,118 @@ namespace Isis {
    *                           addTemplateFolder(), templateRoot(), and m_templates as well as
    *                           serialization and structure for importing template filenames
    *                           Fixes #5086.
+   *   @history 2017-09-13 Tracie Sucharski - Fixed problems with cleanup on temporary projects.
+   *                           Remove shapes, controls, and results.
+   *   @history 2017-09-26 Tracie Sucharski - Close Image cube in
+   *                           ::addTargetsFromImportedImagesToProject and
+   *                           ::addCamerasFromImportedImagesToProject.  Fixes #4955.
+   *   @history 2017-10-04 Tracie Sucharski - Comment out connections for
+   *                           addTargetsFromImportedImagesToProject and
+   *                           addCamerasFromImportedImagesToProject.  This functionality needs to
+   *                           be put into the asynchronous process of importing images for speed
+   *                           and memory efficiency.  See ticket #5181.  Fixes #4955.
+   *   @history 2017-10-16 Ian Humphrey - Modified activeControl() to check if any images have been
+   *                           imported into the project before trying to set an active control
+   *                           when there is only one control in the project. Fixes #5160.
+   *   @history 2017-11-01 Tracie Sucharski - Added new member variable for the
+   *                           new project root when a Save As is being executed.  Both the old and
+   *                           new project roots are needed for copying files into the new project
+   *                           folders. Also updated the project name based on the new project.
+   *                           Fixes #4849.
+   *   @history 2017-11-02 Tyler Wilson - Added support for opening Recent Projects from the
+   *                           File Menu.  Fixes #4492.
+   *   @history 2017-11-08 Ian Humphrey - Changed save() from a void to a bool return value. This
+   *                           indicates if the save dialog (for a temp project) is successfully
+   *                           saved (i.e. not cancelled). Fixes #5205.
+   *   @history 2017-11-03 Christopher Combs - Added support for new Template and TemplateList
+   *                           classes. Fixes #5117.
+   *   @history 2017-11-13 Makayla Shepherd - Modifying the name of an ImageList, ShapeList or
+   *                           BundeSolutionInfo on the ProjectTree now sets the project to
+   *                           not clean. Fixes #5174.
+   *   @history 2017-11-15 Cole Neubauer - Added a check if there was an arg for the command line
+   *                           to avoid creation of new temp project if a user is opening one from
+   *                           the command line #5222
+   *   @history 2017-12-01 Adam Goins - Added the maxRecentProjects() function to return the max
+   *                           number of recent projects to be displayed. Fixes #5216.
+   *   @history 2017-12-05 Christopher Combs - Added support for TemplateEditorWidget and
+   *                           TemplateEditViewWorkOrder. Fixes #5168. Also fixed issue with saving
+   *                           a project before save as where isOpen was not set to true.
+   *   @history 2017-12-08 Tracie Sucharski - Added public method to add an Image to the
+   *                           idToImageMap.  This was needed to add Images from the results item.
+   *                           We need to access the map when opening saved projects that contain
+   *                           images from groups other than the main project data area.  This is
+   *                           a temporary fix until the project and model/view is improved.
+   *                           Corrected the setting of the project root when pening a project from
+   *                           the command line. Removed m_projectPath, it is no longer needed since
+   *                           m_projectRoot contains the correct path. References #5104.
+   *   @history 2018-03-14 Ken Edmundson - Modified save method to reopen project if we are saving
+   *                           a temporary project to ensure all project files are pointing to the
+   *                           correct directory. Note that this is NOT ideal, particularly it the
+   *                           project has many files.
+   *   @history 2018-03-14 Tracie Sucharski - Call the appropriate workorder from the methods
+   *                           activeControl and activeImageList when returning a default value.
+   *                           This ensures that all the proper error checking is handled and
+   *                           prevents duplicate code.
+   *   @history 2018-03-23 Ken Edmundson - Modified loadBundleSolutionInfo method to add the
+   *                           BundleSolutionInfo's output control id to the project member variable
+   *                           m_idToControlMap.
+   *   @history 2018-03-26 Tracie Sucharski - When setting a new active control do not close the old
+   *                           active control net if it is still being viewed in a CnetEditorWidget.
+   *                           References #5026.
+   *   @history 2018-03-27 Tracie Sucharski - Removed the calls to work orders from activeImageList
+   *                           and activeControl methods.  Additional errors checks needed for
+   *                           default values that are not in work orders.  Fixes #5256.
+   *   @history 2018-03-30 Tracie Sucharski - Added public slot, activeControlModified, which sets
+   *                           the modified state on the active Control. This was done, so that a
+   *                           Control knows if its control net has been modified. Also added
+   *                           signal, discardActiveControlEdits if user does not want to save
+   *                           edits.  This is needed for CnetEditorWidgets that are displaying
+   *                           the modified active control, it will effectively close that
+   *                           CnetEditorView and reload with the original control net.  It was
+   *                           done this way because there is no easy way to reload a control net in
+   *                           the CnetEditor widgets. When saving Project, if there is an active
+   *                           control and it has been modified, write active control to disk.
+   *                           Unfortunately this is done in 2 different places depending on whether
+   *                           a project "Save" or "Save As" is being done.  If "Save As", a
+   *                           modified active cnet is not written out to the original project only
+   *                           to the new project, so this had to be done in
+   *                           Control::copyToNewProjectRoot.  If simply saving current projct,
+   *                           the write is done here in the save method.
+   *  @history 2018-04-25 Tracie Sucharski - Fixed typo in XmlHandler::startElement reading
+   *                           imported shapes from a project which caused the shapes to be put in
+   *                           the wrong place on the project tree. Fixes #5274.
+   *  @history 2018-06-06 Kaitlyn Lee - activeControlModified() calls setClean(false) to enable the save
+   *                           button when the active control net is modified, i.e. a point is modified.
+   *  @history 2018-06-14 Makayla Shepherd - Save and Save As now save the geometry and state of
+   *                           the project.
+   *  @history 2018-07-07 Summer Stapleton - Separated m_templates into m_mapTemplates and 
+   *                           m_regTemplates to keep track of the two template types as well as 
+   *                           adjusted logic to save these serparately into the .xml files in the 
+   *                           project directory. Also added clean-up of unsaved templates at
+   *                           project close in Project::clear().
+   *  @history 2018-07-12 Summer Stapleton - Added hasTemplate() and hasCamera() and modified 
+   *                           addCamera() and addTarget logic in order to determine if a targetBody
+   *                           or a guiCamera already exist in a project. This allows cameras and 
+   *                           targets to be created in ImportImagesWorkOrder only when needed 
+   *                           rather than creating them for every image imported and then removing
+   *                           them if not needed. Fixed segfault occuring on astrovm4 with larger 
+   *                           imports. References #5460.
+   *   @history 2018-07-12 Kaitlyn Lee - Changed activeControlModified() to cnetModified() and
+   *                          removed the line m_activeControl->setModified(true) in cnetModified()
+   *                          since this is now done in the CnetEditorWidget and it caused a seg
+   *                          fault when no images were imported and a user tried to edit a cnet. I
+   *                          changed this because when a user made changes to a cnet, even if it
+   *                          was not the active, the active was the only one that was recognized as
+   *                          being modified. This stopped any changes made to a nonactive cnet from
+   *                          being saved and caused the active to be saved if a nonactive was
+   *                          edited. Fixes #5414.
+   *   @history 2018-07-13 Kaitlyn Lee - Added singal cnetSaved() so that the save net button goes
+   *                          back to black after the cnet is saved. Added signal
+   *                          activeControlModified() that is emitted in cnetModified() and is
+   *                          connected to Directory. This stops views from being redrawn when
+   *                          any cnet is modified. Only the active should cause this. Fixes #5396.
+   *  @history 2018-07-26 Tracie Sucharski - Fixed history entry errors introduced during
+   *                           the merge conflict resolution for PR #255.
    */
   class Project : public QObject {
     Q_OBJECT
@@ -186,18 +297,26 @@ namespace Isis {
 //      static QStringList verifyCNets(QStringList);
 
       QList<QAction *> userPreferenceActions();
+
+      bool hasTarget(QString id);
+      bool hasCamera(QString id);
+
       QDir addBundleSolutionInfoFolder(QString folder);
       QDir addCnetFolder(QString prefix);
       void addControl(Control *control);
       QDir addImageFolder(QString prefix);
       void addImages(QStringList imageFiles);
       void addImages(ImageList newImages);
+      void addImagesToIdMap(ImageList images);
       QDir addShapeFolder(QString prefix);
       void addShapes(QStringList shapeFiles);
       void addShapes(ShapeList newShapes);
-      void addTemplates(QList<FileName> templateFiles);
+      void addTemplates(TemplateList *templateFiles);
       QDir addTemplateFolder(QString prefix);
       void addBundleSolutionInfo(BundleSolutionInfo *bundleSolutionInfo);
+      void addTarget(Target *target);
+      void addCamera(Camera *camera);
+
       void loadBundleSolutionInfo(BundleSolutionInfo *bundleSolutionInfo);
       void clear();
       bool clearing(); //! Accessor for if the project is clearing or not
@@ -217,12 +336,14 @@ namespace Isis {
       QMutex *workOrderMutex();
       QMutex *mutex();
       QString projectRoot() const;
-      void setClean(bool value);
+      QString newProjectRoot() const;
+
       void setName(QString newName);
       QUndoStack *undoStack();
       void waitForImageReaderFinished();
       void waitForShapeReaderFinished();
       QList<WorkOrder *> workOrderHistory();
+      void writeSettings(FileName projName) const;
 
       void setActiveControl(QString displayName);
       Control  *activeControl();
@@ -254,7 +375,9 @@ namespace Isis {
 
       static QString templateRoot(QString projectRoot);
       QString templateRoot() const;
-      QList<FileName> templates();
+      QList<TemplateList *> templates();
+      QList<TemplateList *> mapTemplates();
+      QList<TemplateList *> regTemplates();
       void removeTemplate(FileName file);
 
       void deleteAllProjectFiles();
@@ -266,12 +389,18 @@ namespace Isis {
        */
       BundleSettings *bundleSettings() {return m_bundleSettings;}
 
+      /**
+       * Return max number of recent projects to be displayed.
+       * @return Max number of recent Projects
+       */
+      static int maxRecentProjects() { return m_maxRecentProjects; }
+
       QProgressBar *progress();
 
       void removeImages(ImageList &imageList);
 
-      void save();
-      void save(FileName newPath, bool verifyPathDoesntExist = true);
+      bool save();
+      void save(FileName projectPath, bool verifyPathDoesntExist = true);
 
       void addToProject(WorkOrder *);
 
@@ -380,31 +509,53 @@ namespace Isis {
        */
       void projectLoaded(Project *);
 
+      /**
+       * Emitted when project is saved.
+       * receivers: IpceMainWindow
+       */
+      void projectSaved(Project *);
+
       /**
        * Emitted when project location moved
        * receivers: Control, BundleSolutionInfo, Image, TargetBody
        */
       void projectRelocated(Project *);
+
       /**
        * Emitted when work order starts
        */
       void workOrderStarting(WorkOrder *);
+
       /**
        * Emitted when work order ends
        */
       void workOrderFinished(WorkOrder *);
 
-      void templatesAdded(QList<FileName> newFileList);
+      void templatesAdded(TemplateList *newTemplates);
+
+      void discardActiveControlEdits();
+
+      /**
+       * Emmited in cnetModified() when the actice control is modified.
+       * Connected to Directory so that other views can redraw measures.
+       */
+      void activeControlModified();
+
+      /**
+       * Emmited in save() when the project is being saved
+       * Connected to Directory so that ControlPointEditWidget can recolor the save net button.
+       */
+      void cnetSaved(bool value);
 
     public slots:
       void open(QString);
+      void setClean(bool value);
+      void cnetModified();
 
     private slots:
       void controlClosed(QObject *control);
       void controlListDeleted(QObject *controlList);
       void imagesReady(ImageList);
-      void addTargetsFromImportedImagesToProject(ImageList *imageList);
-      void addCamerasFromImportedImagesToProject(ImageList *imageList);
       void imageClosed(QObject *image);
       void imageListDeleted(QObject *imageList);
       void bundleSolutionInfoClosed(QObject *bundleSolutionInfo);
@@ -419,9 +570,12 @@ namespace Isis {
       Project(const Project &other);
       Project &operator=(const Project &rhs);
       void createFolders();
-      ControlList *createOrRetrieveControlList(QString name);
-      ImageList *createOrRetrieveImageList(QString name);
-      ShapeList *createOrRetrieveShapeList(QString name);
+
+      ControlList *createOrRetrieveControlList(QString name, QString path = "");
+      ImageList *createOrRetrieveImageList(QString name, QString path = "");
+      ShapeList *createOrRetrieveShapeList(QString name, QString path = "");
+
+      void writeSettings();
 
 
       QString nextImageListGroupName();
@@ -457,13 +611,16 @@ namespace Isis {
           QList<ShapeList *> m_shapeLists;
           QList<ControlList *> m_controls;
           QList<BundleSolutionInfo *> m_bundleSolutionInfos;
-          QList<FileName> m_templates;
+          QList<TemplateList *> m_mapTemplateLists;
+          QList<TemplateList *> m_regTemplateLists;
           WorkOrder *m_workOrder;
       };
 
     private:
 
+      static const int m_maxRecentProjects = 5;
       QDir *m_projectRoot;
+      QString m_newProjectRoot;
       QDir *m_cnetRoot;
       QDir m_currentCnetFolder;
       QPointer<Directory> m_directory;
@@ -471,7 +628,8 @@ namespace Isis {
       QList<ControlList *> *m_controls;
       QList<ShapeList *> *m_shapes;
       TargetBodyList *m_targets;
-      QList<FileName> m_templates;
+      QList<TemplateList *> *m_mapTemplates;
+      QList<TemplateList *> *m_regTemplates;
       GuiCameraList *m_guiCameras;
       QList<BundleSolutionInfo *> *m_bundleSolutionInfo;
 
diff --git a/isis/src/qisis/objs/ProjectItem/ProjectItem.cpp b/isis/src/qisis/objs/ProjectItem/ProjectItem.cpp
index 87fab314a2ea80f1c47a0c9736b5b1c8e8443f11..a51eb7a50e3717c32c8ca28a0d80bd2b4e739e63 100644
--- a/isis/src/qisis/objs/ProjectItem/ProjectItem.cpp
+++ b/isis/src/qisis/objs/ProjectItem/ProjectItem.cpp
@@ -27,6 +27,7 @@
 #include <QIcon>
 #include <QStandardItem>
 #include <QVariant>
+#include <QDebug>
 
 #include "BundleResults.h"
 #include "BundleSolutionInfo.h"
@@ -39,6 +40,8 @@
 #include "ProjectItemModel.h"
 #include "Shape.h"
 #include "ShapeList.h"
+#include "Template.h"
+#include "TemplateList.h"
 
 namespace Isis {
   /**
@@ -139,12 +142,11 @@ namespace Isis {
     setBundleSolutionInfo(bundleSolutionInfo);
 
     appendRow( new ProjectItem( bundleSolutionInfo->bundleSettings() ) );
-    QString cNetFileName = bundleSolutionInfo->controlNetworkFileName();
-    Control *control = new Control(cNetFileName);
-    appendRow( new ProjectItem(control) );
-
+    appendRow( new ProjectItem(bundleSolutionInfo->control()) );
     appendRow( new ProjectItem( bundleSolutionInfo->bundleResults() ) );
-    appendRow( new ProjectItem( bundleSolutionInfo->imageList() ) );
+    if (!bundleSolutionInfo->adjustedImages().isEmpty()) {
+      appendRow( new ProjectItem( bundleSolutionInfo->adjustedImages() ) );
+    }
   }
 
 
@@ -250,7 +252,7 @@ namespace Isis {
    *
    * @param[in] shape (Shape *) The Shape to construct from.
    */
-  ProjectItem::ProjectItem(Shape *shape) {\
+  ProjectItem::ProjectItem(Shape *shape) {
     setTextColor(Qt::black);
     setEditable(false);
     setShape(shape);
@@ -287,6 +289,48 @@ namespace Isis {
   }
 
 
+  /**
+   * Constructs an item from a Template.
+   *
+   * @param[in] template (Template *) The Template to construct from.
+   */
+  ProjectItem::ProjectItem(Template *newTemplate) {
+    setTextColor(Qt::black);
+    setEditable(false);
+    setTemplate(newTemplate);
+  }
+
+
+  /**
+   * Constructs an item from an TemplateList.
+   *
+   * @param[in] templateList (TemplateList *) The TemplateList to construct from.
+   */
+  ProjectItem::ProjectItem(TemplateList *templateList) {
+
+    setTextColor(Qt::black);
+    setEditable(false);
+    setTemplateList(templateList);
+    foreach (Template *currentTemplate, *templateList) {
+      appendRow(new ProjectItem(currentTemplate));
+    }
+  }
+
+
+  /**
+   * Constructs an item from a list of TemplateList.
+   *
+   * @param[in] shapes (QList<TemplateList *>) The list to construct from.
+   */
+  ProjectItem::ProjectItem(QList<TemplateList *> templates) {
+    setTextColor(Qt::black);
+    setEditable(false);
+    setTemplates();
+    foreach (TemplateList *templateList, templates) {
+      appendRow( new ProjectItem(templateList) );
+    }
+  }
+
   /**
    * Constructs an item from a GuiCameraQsp
    *
@@ -323,13 +367,12 @@ namespace Isis {
   ProjectItem::ProjectItem(Project *project) {
     setTextColor(Qt::black);
     setProject(project);
-//  qDebug()<<"ProjectItem::ProjectItem(Project *project)  rowCount() = "<<rowCount();
     appendRow( new ProjectItem( project->controls() ) );
-//  qDebug()<<"                                            rowCount() afterControls = "<<rowCount();
     appendRow( new ProjectItem( project->images() ) );
-//  qDebug()<<"                                            rowCount() afterImages = "<<rowCount();
     appendRow( new ProjectItem( project->shapes() ) );
 
+    appendRow( new ProjectItem( project->templates() ) );
+
     ProjectItem *targetBodyListItem = new ProjectItem();
     targetBodyListItem->setTargetBodyList();
     appendRow(targetBodyListItem);
@@ -342,10 +385,6 @@ namespace Isis {
     spaceCraftItem->setSpacecraft();
     appendRow(spaceCraftItem);
 
-    ProjectItem *templatesItem = new ProjectItem();
-    templatesItem->setTemplate();
-    appendRow(templatesItem);
-
     appendRow( new ProjectItem( project->bundleSolutionInfo() ) );
   }
 
@@ -469,6 +508,26 @@ namespace Isis {
   }
 
 
+  /**
+   * Returns the Template stored in the data of the item.
+   *
+   * @return (Template *) The Template of the item.
+   */
+  Template *ProjectItem::getTemplate() const {
+    return data().value<Template *>();
+  }
+
+
+  /**
+   * Returns the TemplateList stored in the data of the item.
+   *
+   * @return (TemplateList *) The TemplateList of the item.
+   */
+  TemplateList *ProjectItem::templateList() const {
+    return data().value<TemplateList *>();
+  }
+
+
   /**
    * Returns the Control stored in the data of the item.
    *
@@ -541,7 +600,7 @@ namespace Isis {
 
 
   bool ProjectItem::isTemplate() const {
-    return data().canConvert<QString>();
+    return data().canConvert<Template *>();
   }
 
 
@@ -850,20 +909,60 @@ namespace Isis {
     setData( QVariant() );
   }
 
-  void ProjectItem::setTemplate() {
+
+  /**
+   * Sets the text, icon, and data corresponding to a Template.
+   *
+   * @param[in] shape (Shape *) The Shape.
+   */
+  void ProjectItem::setTemplate(Template *newTemplate) {
+    setTextColor(Qt::black);
+    setText( QFileInfo( newTemplate->fileName() ).fileName() );
+    setIcon( QIcon(":folder"));
+    setData( QVariant::fromValue<Template *>(newTemplate) );
+  }
+
+
+  /**
+   * Sets the text, icon, and data corresponding to an TemplateList.
+   *
+   * @param[in] templateList (TemplateList *) The TemplateList.
+   */
+  void ProjectItem::setTemplateList(TemplateList *templateList) {
+    setTextColor(Qt::black);
+    if (templateList->name() != "") {
+      setText( templateList->name() );
+    }
+    else {
+      setText( templateList->path() );
+    }
+    setIcon( QIcon(FileName("$base/icons/folder-orange.png")
+                           .expanded()));
+    setData( QVariant::fromValue<TemplateList *>(templateList) );
+  }
+
+
+  /**
+   * Sets the text, icon, and data corresponding to a list of TemplateList.
+   */
+  void ProjectItem::setTemplates() {
     setText("Templates");
-    setIcon( QIcon(":folder") );
+    setIcon( QIcon(FileName("$base/icons/folder-red.png")
+                           .expanded()));
     setData( QVariant() );
 
     ProjectItem *mapsItem = new ProjectItem();
     mapsItem->setText("Maps");
-    mapsItem->setIcon( QIcon(":folder") );
+    setIcon( QIcon(FileName("$base/icons/folder-red.png")
+                           .expanded()));
     mapsItem->setData( QVariant() );
     appendRow(mapsItem);
 
+
     ProjectItem *registrationsItem = new ProjectItem();
     registrationsItem->setText("Registrations");
-    registrationsItem->setIcon( QIcon(":folder") );
+    setIcon( QIcon(FileName("$base/icons/folder-red.png")
+                           .expanded()));
     registrationsItem->setData( QVariant() );
     appendRow(registrationsItem);
   }
@@ -939,6 +1038,7 @@ namespace Isis {
     setIcon( QIcon(FileName("$base/icons/folder-activities.png")
                            .expanded()));
     setData( QVariant::fromValue<Project *>(project) );
+    setToolTip(project->projectRoot());
   }
 
 
@@ -1016,7 +1116,7 @@ namespace Isis {
     else
       setIcon( QIcon(FileName("$base/icons/view-web-browser-dom-tree.png")
                              .expanded()));
-    
+
     setData( QVariant::fromValue<TargetBodyQsp>(targetBody) );
   }
 
@@ -1043,16 +1143,12 @@ namespace Isis {
    * @return @b ProjectItem* The found item.
    */
   ProjectItem *ProjectItem::findItemData(const QVariant &value, int role) {
-//  qDebug()<<"ProjectItem::findItemData  incoming value = "<<value;
-//  qDebug()<<"ProjectItem::findItemData  ProjectItem::data(role) = "<<data(role);
     if ( data(role) == value ) {
       return this;
     }
 
     for (int i=0; i<rowCount(); i++) {
-//    qDebug()<<"ProjectItem::findItemData  BEFORE call: child(i)->findItemData...";
       ProjectItem *item = child(i)->findItemData(value, role);
-//    qDebug()<<"ProjectItem::findItemData  AFTER call: child(i)->findItemData...";
       if (item) {
         return item;
       }
diff --git a/isis/src/qisis/objs/ProjectItem/ProjectItem.h b/isis/src/qisis/objs/ProjectItem/ProjectItem.h
index 4e99537211a2afe7296697e41599ed253ae4e7a2..b2a5268eebeff0191b7cdde7c20f6027c8a44ac4 100644
--- a/isis/src/qisis/objs/ProjectItem/ProjectItem.h
+++ b/isis/src/qisis/objs/ProjectItem/ProjectItem.h
@@ -48,6 +48,8 @@ namespace Isis {
   class Shape;
   class ShapeList;
   class TargetBodyList;
+  class Template;
+  class TemplateList;
 
   /**
    * Represents an item of a ProjectItemModel in Qt's model-view
@@ -128,8 +130,17 @@ namespace Isis {
    *                             Qt::Black Fixes #5095
    *     @history 2017-08-11 Christopher Combs - Added isTemplate() and setTemplate() to allow for
    *                             imported templates to show on the project tree. Fixes #5086.
-   *     @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open 
+   *     @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open
    *                             source images. Fixes #5105.
+   *     @history 2017-11-01 Ian Humphrey - Changed imageList to adjustedImages in the constructor
+   *                             taking a BundleSolutionInfo.  Fixes #4849.
+   *     @history 2017-11-03 Christopher Combs - Added support for new Template and TemplateList
+   *                             classes. Fixes #5117.
+   *     @history 2018-03-22 Ken Edmundson - Modified constructor taking a BundleSolutionInfo to
+   *                             append a row for a Control object containing the output control
+   *                             net from the bundle adjustment.
+   *     @history 2018-07-02 Tracie Sucharski - Added tooltip containing project path to the project
+   *                             root item.
    *
    */
   class ProjectItem : public QStandardItem {
@@ -155,6 +166,9 @@ namespace Isis {
       ProjectItem(QList<BundleSolutionInfo *> results);
       ProjectItem(TargetBodyQsp targetBody);
       ProjectItem(TargetBodyList *targetBodyList);
+      ProjectItem(QList<TemplateList *> templates);
+      ProjectItem(Template *newTemplate);
+      ProjectItem(TemplateList *templateList);
       ProjectItem(FileItemQsp filename, QString treeText, QIcon icon);
       ProjectItem(FileItemQsp filename, QString treeText, QString toolTipText, QIcon icon);
 
@@ -173,6 +187,8 @@ namespace Isis {
       Project *project() const;
       GuiCameraQsp guiCamera() const;
       TargetBodyQsp targetBody() const;
+      Template *getTemplate() const;
+      TemplateList *templateList() const;
       FileItemQsp fileItem() const;
 
       bool isBundleResults() const;
@@ -212,7 +228,9 @@ namespace Isis {
       void setSpacecraft();
       void setTargetBody(TargetBodyQsp targetBody);
       void setTargetBodyList();
-      void setTemplate();
+      void setTemplate(Template *newTemplate);
+      void setTemplates();
+      void setTemplateList(TemplateList *templateList);
 
       ProjectItem *findItemData(const QVariant &value, int role = Qt::UserRole+1);
 
diff --git a/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.cpp b/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.cpp
index 9377bda05c7909abfc22020d104c97fefe6a271c..a49a293addd2f9c009221d1b0325a6d9668898a0 100644
--- a/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.cpp
+++ b/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.cpp
@@ -44,6 +44,7 @@
 #include "ProjectItem.h"
 #include "ShapeList.h"
 #include "TargetBodyList.h"
+#include "TemplateList.h"
 
 
 namespace Isis {
@@ -131,8 +132,8 @@ namespace Isis {
             this, SLOT( onShapesAdded(ShapeList *) ) );
     connect(project, SIGNAL( targetsAdded(TargetBodyList *) ),
             this, SLOT( onTargetsAdded(TargetBodyList *) ) );
-    connect(project, SIGNAL( templatesAdded(QList<FileName>)),
-            this, SLOT( onTemplatesAdded(QList<FileName>)));
+    connect(project, SIGNAL( templatesAdded(TemplateList *)),
+            this, SLOT( onTemplatesAdded(TemplateList *)));
     connect(project, SIGNAL( guiCamerasAdded(GuiCameraList *) ),
             this, SLOT( onGuiCamerasAdded(GuiCameraList *) ) );
     ProjectItem *projectItem = new ProjectItem(project);
@@ -148,7 +149,16 @@ namespace Isis {
    * @return @b ProjectItem* The current item.
    */
   ProjectItem *ProjectItemModel::currentItem() {
-    return itemFromIndex( selectionModel()->currentIndex() );
+
+    ProjectItem *item = itemFromIndex( selectionModel()->currentIndex() );
+
+    // We do this because if the user was in a footprint or cubeDN view, then
+    // There is no valid currentIndex(). In that case, we grab whichever item
+    // was right clicked that triggered this call.
+    if (item == NULL) {
+      item = selectedItems().at(0);
+    }
+    return item;
   }
 
 
@@ -161,12 +171,122 @@ namespace Isis {
     QItemSelection selection = selectionModel()->selection();
     QList<ProjectItem *> items;
 
+
     foreach ( QModelIndex index, selection.indexes() ) {
       items.append( itemFromIndex(index) );
     }
 
     return items;
   }
+  /**
+   * @brief ProjectItemModel::selectedBOSSImages
+   * @return This is a refinement of the selectedItems function which
+   * was needed to display a subset of Images/ImageLists in the
+   * Bundle Observation Solve Settings (BOSS) tab of the JigsawSetupDialog widget.
+   * The primary consumer of the selected images is going to be the SortFilterProxyModel
+   * class.
+   */
+  QList<ProjectItem *> ProjectItemModel::selectedBOSSImages() {
+
+    QItemSelection selection = selectionModel()->selection();
+    QList<ProjectItem *> items;
+    QModelIndexList indices = selection.indexes();
+
+    // If nothing is selected, fill items with all image lists and images.
+    if (indices.size() == 0) {
+      ProjectItem *imageRoot = findItemData(QVariant("Images"), 0);
+      items.append(imageRoot);
+      for (int i = 0; i < imageRoot->rowCount(); i++) {
+        ProjectItem *imglistItem = imageRoot->child(i);
+        items.append(imglistItem);
+        for (int j = 0; j < imglistItem->rowCount(); j++) {
+          ProjectItem *imgItem = imglistItem->child(j);
+          if (imgItem->isImage()) {
+            items.append(imgItem);
+          }
+        }
+      }
+      return items;
+    }
+
+    //Query the selected items to see if they have children
+    foreach ( QModelIndex ix, indices ) {
+
+      ProjectItem *item = this->itemFromIndex(ix);
+
+      //Anything that is not an image or an image list does
+      //not make sense to display in the BOSS treeview tab,
+      //so we need to exclude these items.
+      if (item->isImageList() || item->isImage() ) {
+        items.append( item );
+      }
+      else {
+        return items;
+      }
+
+      //If the selected ImageList has children, we have to handle
+      //the case where some of the children are selected, or
+      //the possibility that the user wants all of the children selected.
+      if (this->hasChildren(ix)) {
+
+        //If the node has children, loop through all of them
+        //and add them to selected items.
+        bool childrenSelected(false);
+        int numChildren = this->rowCount(ix);
+
+        //First loop through the children to see if any of them are also selected
+        for (int i = 0; i < numChildren;i++) {
+          QModelIndex ixchild = this->index(i,0,ix);
+          if (indices.contains(ixchild) ){
+              childrenSelected=true;
+              break;
+          }
+        }
+          //If they are, then add them to selected items
+          if (childrenSelected) {
+            for (int i =0;i < numChildren;i++) {
+              QModelIndex ixchild = this->index(i,0,ix);
+              if (indices.contains(ixchild))
+                items.append(this->itemFromIndex(ixchild ));
+            }
+          }
+          //No children selected, so we are assuming that the user
+          //wanted to select all of the children under the parent.
+          else {
+            for (int i =0;i < numChildren;i++) {
+               QModelIndex ixchild = this->index(i,0,ix);
+               items.append(this->itemFromIndex(ixchild ));
+            }
+
+          }
+
+      }//end if
+
+      //Append the parent of any selected child.  This is so
+      //the children aren't hanging on the tree without
+      //a collapsible parent node.
+      if( item->parent() ->hasChildren()) {
+        ProjectItem * parent = item->parent();
+        if (!items.contains(parent)){
+          items.append(parent);
+        }// end inner if
+      }//end outer if
+      //Also include the grandparent.  This handles the event
+      //that we may have multiple image lists selected to the treeview
+      //and we need a grandparent node attached to group them under.
+      if (this->itemFromIndex(ix)->parent()->parent() ){
+        ProjectItem *grandparent = this->itemFromIndex(ix)->parent()->parent();
+        if (!items.contains(grandparent)) {
+          items.append(grandparent);
+        } //end inner if
+
+      } //end outer if
+
+  }// end foreach
+
+    return items;
+
+  }
 
 
   /**
@@ -374,7 +494,13 @@ namespace Isis {
             ProjectItem *pItem = new ProjectItem(bundleSolutionInfo);
             resultsItem->appendRow( pItem );
 
-            // Append the CSV files to the Statistics in the project
+            // Append text bundle summary and CSV files to the Statistics in the project
+            ProjectItem *bundleSummaryItem = new ProjectItem(FileItemQsp(
+               new FileItem(bundleSolutionInfo->savedBundleOutputFilename())),
+                            "Summary", bundleSolutionInfo->savedBundleOutputFilename(),
+                            QIcon(FileName("$base/icons/office-chart-pie.png")
+                            .expanded()));
+            pItem->child(2)->appendRow(bundleSummaryItem);
             ProjectItem *residualsItem = new ProjectItem(FileItemQsp(
                new FileItem(bundleSolutionInfo->savedResidualsFilename())),
                             "Measure Residuals", bundleSolutionInfo->savedResidualsFilename(),
@@ -383,7 +509,7 @@ namespace Isis {
             pItem->child(2)->appendRow(residualsItem);
             ProjectItem *imagesItem = new ProjectItem(FileItemQsp(
                new FileItem(bundleSolutionInfo->savedImagesFilename())),
-                            "Images", bundleSolutionInfo->savedImagesFilename(),
+                            "Image", bundleSolutionInfo->savedImagesFilename(),
                             QIcon(FileName("$base/icons/office-chart-pie.png")
                             .expanded()));
             pItem->child(2)->appendRow(imagesItem);
@@ -403,35 +529,32 @@ namespace Isis {
   /**
    * Slot connected to the templatesAdded() signal from a project. Adds a ProjectItem for
    * each newly added template FileName to the model. The Item is added to the corresponding
-   * ProjectItem under "Templates" (currently only "Maps" and "Registrations" ).
+   * ProjectItem under "Templates" (currently only "Maps" and "Registrations" ) and the name
+   * of the TemplateList (import1, import2, etc...).
    *
-   * @param newFileList QList of FileNames being added to the project.
+   * @param templateList TemplateList of Templates being added to the project.
    */
-  void ProjectItemModel::onTemplatesAdded(QList<FileName> newFileList) {
+  void ProjectItemModel::onTemplatesAdded(TemplateList *templateList) {
     Project *project = qobject_cast<Project *>( sender() );
+    if (!project) { return; }
 
-    if (!project) {
-      return;
-    }
-
+    // Start at our project's node
+    // Start at our project's node
     for (int i = 0; i<rowCount(); i++) {
       ProjectItem *projectItem = item(i);
       if (projectItem->project() == project) {
+
+        // Find the "Templates" node
         for (int j = 0; j < projectItem->rowCount(); j++) {
           ProjectItem *templatesItem = projectItem->child(j);
           if (templatesItem->text() == "Templates"){
-            foreach (FileName newFile, newFileList) {
-              QString type = newFile.dir().dirName();
-              for (int k = 0; k < templatesItem->rowCount(); k++) {
+
+            // Find either the "Maps" or "Registrations" node
+            QString type = templateList->type();
+            for (int k = 0; k < templatesItem->rowCount(); k++) {
                 ProjectItem *templateType = templatesItem->child(k);
                 if (templateType->text().toLower() == type) {
-                  ProjectItem *fileItem = new ProjectItem(FileItemQsp(
-                    new FileItem(newFile.expanded())),
-                    newFile.name(),
-                    QIcon(":folder"));
-                  fileItem->setData(QVariant(newFile.toString()));
-                  templateType->appendRow(fileItem);
-                }
+                  templateType->appendRow( new ProjectItem(templateList));
               }
             }
           }
@@ -684,6 +807,7 @@ namespace Isis {
         item->image()->displayProperties()->setSelected(false);
       }
     }
+
   }
 
 
@@ -763,21 +887,26 @@ namespace Isis {
     else if (item->isBundleSolutionInfo() && role == Qt::EditRole) {
       item->setText(name);
       item->bundleSolutionInfo()->setName(name);
+      emit cleanProject(false);
     }
     else if (item->isImageList() && role == Qt::EditRole) {
       item->setText(name);
       item->imageList()->setName(name);
+      emit cleanProject(false);
     }
     else if (item->isControlList() && role == Qt::EditRole) {
       item->setText(name);
       item->controlList()->setName(name);
+      emit cleanProject(false);
     }
     else if (item->isShapeList() && role == Qt::EditRole) {
       item->setText(name);
       item->shapeList()->setName(name);
+      emit cleanProject(false);
     }
     else if (item->isTemplate() && role == Qt::EditRole) {
       item->setText(name);
+      emit cleanProject(false);
     }
     return true;
   }
@@ -833,15 +962,28 @@ namespace Isis {
    * Used to clean the ProjectItemModel of everything but the headers
    */
    void ProjectItemModel::clean() {
-
      for (int i=0; i<rowCount(); i++) {
        ProjectItem *projectItem = item(i);
        if (projectItem->project()) {
          for (int j=0; j < projectItem->rowCount(); j++) {
            if (projectItem->hasChildren()) {
              ProjectItem *subProjectItem = projectItem->child(j);
-             while (subProjectItem->hasChildren()) {
-               removeItem(subProjectItem->child(0));
+
+             // The header "Templates" has two subheaders that we want to keep
+             if (subProjectItem->text() == "Templates") {
+               if (subProjectItem->hasChildren()) {
+                 for (int k=0; k < subProjectItem->rowCount(); k++) {
+                   ProjectItem *tempProjectItem = subProjectItem->child(k);
+                   while (tempProjectItem->hasChildren()) {
+                       removeItem(tempProjectItem->child(0));
+                   }
+                 }
+               }
+             }
+             else {
+               while (subProjectItem->hasChildren()) {
+                   removeItem(subProjectItem->child(0));
+               }
              }
            }
          }
diff --git a/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.h b/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.h
index bc8ed65a99b566bc61e4e56c280e726d382c42f4..0bcf772b71a0759d19b664311707f070c14c9035 100644
--- a/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.h
+++ b/isis/src/qisis/objs/ProjectItemModel/ProjectItemModel.h
@@ -47,6 +47,7 @@ namespace Isis {
   class Project;
   class ProjectItem;
   class TargetBodyList;
+  class TemplateList;
 
   /**
    * Provides access to data stored in a Project through Qt's model-view
@@ -114,8 +115,33 @@ namespace Isis {
    *                           Fixes #5113
    *   @history 2017-08-11 Christopher Combs - Added onTemplatesAdded() and connected it to the
    *                           signal sent by Project. Fixes #5086.
-   *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open 
+   *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open
    *                           source images. Fixes #5105.
+   *   @history 2017-10-30 Adam Goins - Modified currentItem() to return the first selected item
+   *                           in the project tree if there is no valid currentIndex. This would
+   *                           happen if the user was interacting with a cubeDN or footprint view
+   *                           and then tried right clicking on the project tree. Fixes #5111.
+   *   @history 2017-11-13 Makayla Shepherd - Modifying the name of an ImageList, ShapeList or
+   *                           BundeSolutionInfo on the ProjectTree now sets the project to
+   *                           not clean. Fixes #5174.
+   *   @history 2017-11-03 Christopher Combs - Added support for new Template and TemplateList
+   *                           classes. Fixes #5117.
+   *   @history 2018-03-22 Ken Edmundson - Modified method onBundleSolutionInfoAdded to append the
+   *                           bundleoutput.txt (Summary) file to the BundleSolution Statistics
+   *                           node. Also changed the name of the Images node under Statistics to
+   *                           Image to prevent Import Images to appear on it's context menu.
+   *   @history 2018-06-21 Tyler Wilson - Added the function selectedBOSSImages().  This is a
+   *                           refinement of selectedItems and is used by the JigsawSetupDialog
+   *                           Bundle Observation Solve Settings (BOSS) tab when displaying a
+   *                           subset of user-selected images.  References #497
+   *   @history 2018-06-24 Tyler Wilson - Fixed an edge-case scenario in the selection criteria for
+   *                           selectedBOSSImages().   If a user selected an image list and some
+   *                           (but not all) of the images within that list, the function returned
+   *                           all of the images in the list and not just the selected ones.
+   *                           References #497.
+   *   @history 2018-07-10 Kaitlyn Lee - If a user does not select any images in the project tree,
+   *                           all image lists and images will be returned in selectedBOSSImages().
+   *                           References #497.
    */
   class ProjectItemModel : public QStandardItemModel {
 
@@ -141,6 +167,8 @@ namespace Isis {
 
       ProjectItem *currentItem();
       QList<ProjectItem *> selectedItems();
+      QList<ProjectItem *> selectedBOSSImages();
+
 
       void appendRow(ProjectItem *item);
       void clean();
@@ -166,6 +194,11 @@ namespace Isis {
        */
       void itemRemoved(ProjectItem *);
 
+      /**
+       * This signal is emitted whrn a ProjectItem's name is changed.
+       */
+      void cleanProject(bool);
+
 
       /**
        * This signal is emitted when the project name is edited.
@@ -183,7 +216,7 @@ namespace Isis {
       void onControlAdded(Control *control);
       void onControlListAdded(ControlList *controlList);
       void onTargetsAdded(TargetBodyList *targets);
-      void onTemplatesAdded(QList<FileName> newFileList);
+      void onTemplatesAdded(TemplateList *templateList);
       void onGuiCamerasAdded(GuiCameraList *cameras);
       void onRowsInserted(const QModelIndex &parent, int start, int end);
       void onRowsRemoved(const QModelIndex &parent, int start, int end);
diff --git a/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.cpp b/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.cpp
index bfb37768ebd3e5d30e75f4a39ae98466139ee0c5..415594fb9cf1987a56bc19aa07afd731358a7b25 100644
--- a/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.cpp
+++ b/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.cpp
@@ -179,7 +179,6 @@ namespace Isis {
    * @return @b ProjectItem* The item in the proxy model.
    */
   ProjectItem *ProjectItemProxyModel::addItem(ProjectItem *sourceItem) {
-//  qDebug()<<"ProjectItemProxyModel::addItem";
     if (!sourceItem) {
       return 0;
     }
@@ -208,10 +207,10 @@ namespace Isis {
    *                                              source model.                                              
    */
   void ProjectItemProxyModel::addItems(QList<ProjectItem *> sourceItems) {
-//  qDebug()<<"ProjectItemProxyModel::addItem";
     foreach (ProjectItem *item, sourceItems) {
       addItem(item);
     }
+    emit itemsAdded();
   }
 
   
diff --git a/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.h b/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.h
index f90e487fec12d6166402c237794f5c650b02af54..e078445b3236fadf99cc6c1501c744697fbcf8de 100644
--- a/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.h
+++ b/isis/src/qisis/objs/ProjectItemProxyModel/ProjectItemProxyModel.h
@@ -78,6 +78,8 @@ namespace Isis {
    *                           dropMimeData() methods. Checked coding standards. Fixes #4006.
    *   @history 2016-08-11 Tracie Sucharski - Added itemRemoved signal.
    *   @history 2016-08-25 Adam Paquette - Updated documentation. Fixes #4299.
+   *   @history 2018-08-10 Tracie Sucharski - Added itemsAdded signal to indicate that all items
+   *                           in a list have been added to the model. References #5296.
    */
   class ProjectItemProxyModel : public ProjectItemModel {
 
@@ -106,6 +108,12 @@ namespace Isis {
                               int row, int column, const QModelIndex &parent);
 
   signals:
+    // This signal was added to speed up the Footprint2DView. Previously images were added one at a
+    // time which was extremely slow. This not the ideal handling, but without re-writing
+    // ProjectItemModel  and ProjectItemProxyModel to add insertRows method so that beginInsertRows
+    // and endInsertRows are called which would automatically emit the signal rowsInserted after 
+    // alls items are inserted into the model rather than calling after each row that is inserted.
+    void itemsAdded();
     void itemRemoved(ProjectItem *);
   
   public slots:
diff --git a/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.cpp b/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.cpp
index 8635a3d542c879bcbec993598d0c9ed7161d7c7d..185a21a3139971ee47a11ced4f199c7474a48ffe 100644
--- a/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.cpp
+++ b/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.cpp
@@ -23,8 +23,10 @@
 #include "ProjectItemTreeView.h"
 
 #include <QAbstractItemView>
+#include <QDesktopWidget>
 #include <QEvent>
 #include <QObject>
+#include <QRect>
 #include <QTreeView>
 #include <QVBoxLayout>
 #include <QWidget>
@@ -39,9 +41,10 @@ namespace Isis {
    * @param[in] parent (QWidget *) The parent widget.
    */
   ProjectItemTreeView::ProjectItemTreeView(QWidget *parent) : AbstractProjectItemView(parent) {
-        
+
     m_treeView = new QTreeView(this);
     m_treeView->installEventFilter(this);
+
     setInternalModel( internalModel() );
     // 2017-04-12 TSucharski Turn off for now, since not accepting drops, not point in allowing
     // drags
@@ -50,19 +53,32 @@ namespace Isis {
     m_treeView->setAcceptDrops(false);
     m_treeView->setHeaderHidden(true);
 
+    //  Simply doing this creates scrollbar when the dock widget within the main window is made too
+    //  small- looks like QMainWindow and/or QDockWidget handles the scrollbars for us.
+    setCentralWidget(m_treeView);
+
+    //This works so that it cannot be shrunk in width, only grown
+    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
+
     //  Currently set all items on view to un-editable
     //m_treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
 
 //  setAcceptDrops(true);
-    
-    QBoxLayout *layout = new QVBoxLayout;
-    layout->addWidget(m_treeView);
-    layout->setContentsMargins(0, 0, 0, 0);
+  }
+
 
-    setLayout(layout);
+  /**
+   * Returns the suggested size
+   *
+   * @return @b QSize The size hint
+   */
+  QSize ProjectItemTreeView::sizeHint() const {
+    QDesktopWidget deskTop;
+    QRect availableSpace = deskTop.availableGeometry(deskTop.primaryScreen());
+    return QSize(.15 * availableSpace.width(), .5 * availableSpace.height());
   }
 
-  
+
   /**
    * Default destructor.
    */
@@ -78,7 +94,7 @@ namespace Isis {
     return m_treeView;
   }
 
-  
+
   /**
    * Sets the model so that the internal proxy model exactly matches the
    * source model.
@@ -115,8 +131,8 @@ namespace Isis {
       m_treeView->expand( parent->index() );
     }
   }
-  
-  
+
+
   /**
    * Filters out drag and drop events so that they are handled by the
    * ProjectItemTreeView.
@@ -136,5 +152,5 @@ namespace Isis {
 
     return AbstractProjectItemView::eventFilter(watched, event);
   }
-  
+
 }
diff --git a/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.h b/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.h
index 1ddf11fde344ec4b044b911f1ff14bbdebe62e0e..bafbf26af888197ad9f6bcee8f0d7b9d6ad23345 100644
--- a/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.h
+++ b/isis/src/qisis/objs/ProjectItemTreeView/ProjectItemTreeView.h
@@ -45,16 +45,27 @@ namespace Isis {
    *
    * @internal
    *   @history 2015-10-21 Jeffrey Covington - Original version.
-   *   @history 2016-01-13 Jeffrey Covington - Added destructor and treeView() methods. Added 
+   *   @history 2016-01-13 Jeffrey Covington - Added destructor and treeView() methods. Added
    *                           onItemAdded() slot. Replaced setSourceModel() with
    *                           setInternalModel() method.
-   *   @history 2016-06-27 Ian Humphrey - Added documentation (treeView() and onItemAdded()), 
+   *   @history 2016-06-27 Ian Humphrey - Added documentation (treeView() and onItemAdded()),
    *                           checked coding standards. Fixes #4006.
    *   @history 2016-08-25 Adam Paquette - Updated documentation. Fixes #4299.
    *   @history 2016-12-01 Ian Humphrey - Updated #define header guard to match #ifndef pattern.
    *                           Resolves [-Wheader-guard] warnings for prog17 (clang).
    *   @history 2017-04-12 Tracie Sucharski - Turn off dragging on the treeView for now since it is
    *                           does not work and is causing errors.
+   *   @history 2018-05-29 Summer Stapleton - updated the view to include a central widget and to
+   *                           remove layout capacity. This change was made to adjust to parent
+   *                           class now inheriting from QMainWindow instead of QWidget.
+   *   @history 2018-07-12 Kaitlyn Lee - Changed the sizeHint to be calculated based on the deskTop
+   *                           size, instead of being hard-coded. The percentages chosen allow for
+   *                           2 CubeDnViews to be opened at once, since CubeDnView has an internal
+   *                           size policy and cannot be made smaller. Changed the setSizePolicy to
+   *                           minimum so that the tree does not expand when a view is closed. References #5433
+   *   @history 2018-07-25 Tracie Sucharski - Changed vertical sizePolicy so that other widgets such
+   *                           as JigsawRunWidget, ControlHealthMonitor can be split with the
+   *                           Project view.
    */
   class ProjectItemTreeView : public AbstractProjectItemView {
 
@@ -63,7 +74,9 @@ namespace Isis {
     public:
       ProjectItemTreeView(QWidget *parent=0);
       ~ProjectItemTreeView();
-      
+
+      virtual QSize sizeHint() const;
+
       virtual void setInternalModel(ProjectItemModel *model);
 
       QTreeView *treeView();
@@ -72,7 +85,7 @@ namespace Isis {
       bool eventFilter(QObject *watched, QEvent *event);
 
     private slots:
-      void onItemAdded(ProjectItem *item);  
+      void onItemAdded(ProjectItem *item);
 
     private:
       QTreeView *m_treeView; //!< The tree view (widget)
diff --git a/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp b/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp
index 6881dfa2c78d84605dd13b3e6bbe50a52661dab0..3fc1af0f655bba16be435603d5b5317ae319017c 100644
--- a/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp
+++ b/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp
@@ -7,11 +7,6 @@
 #include <QObject>
 #include <QMessageBox>
 #include <QUrl>
-#if defined(__APPLE__)
-#include <QtWebEngineWidgets/QWebEngineView>
-#else
-#include <QWebEngineView>
-#endif
 
 #include "FileName.h"
 #include "Preference.h"
@@ -24,25 +19,24 @@ namespace Isis {
    *
    * @param argc Pass this in from main(argc, argv)
    * @param argv Pass this in from main(argc, argv)
-   * 
+   *
    * @internal
-   * @history 2017-10-06 Adam Goins - QIsisApplication now checks for a "-pref" flag 
-   *                        in the command-line arguments and loads the following 
+   * @history 2017-10-06 Adam Goins - QIsisApplication now checks for a "-pref" flag
+   *                        in the command-line arguments and loads the following
    *                        preference file if it exists. Fixes # 814
    */
   QIsisApplication::QIsisApplication(int &argc, char *argv[]) :
     QApplication(argc, argv) {
     // try to use US locale for numbers so we don't end up printing "," instead
     //   of "." where it might count.
-        
-    
+
     for (int i = 1; i < argc; i++) {
         QString arg(argv[i]);
         if (arg.startsWith("-pref")) {
-            
+
             // So that we can grab the file located after the current '-pref' flag.
             int nextIndex = i + 1;
-            
+
             if (nextIndex < argc) {
                 FileName preferenceFile(argv[nextIndex]);
                 QString filePath = preferenceFile.expanded();
@@ -53,7 +47,7 @@ namespace Isis {
                 QMessageBox::warning(NULL, "Warning", "Preference flag set but no preference file given.");
             }
         }
-    } 
+    }
     setlocale(LC_NUMERIC, "en_US");
 
     QDesktopServices::setUrlHandler("http", this, "openUrl");
@@ -92,9 +86,6 @@ namespace Isis {
    * Open a URL in the browser specified by Isis.
    */
   void QIsisApplication::openUrl(QUrl url) {
-     QWebEngineView *view = new QWebEngineView(NULL);
-     view->setAttribute(Qt::WA_DeleteOnClose);
-     view->load(url);
-     view->show();
+     QDesktopServices::openUrl(url);
   }
 }
diff --git a/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp b/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp
index 7fd48638312da42c2f237b68db6df49d56f4aff0..929cd80e93a2580903a816511c7f598cfcdb9a35 100644
--- a/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp
+++ b/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp
@@ -82,7 +82,7 @@ namespace Isis {
     FileTool::addTo(menu);
   }
 
-  
+
   ControlNet *QnetFileTool::controlNet() {
     return m_qnetTool->controlNet();
   }
@@ -219,11 +219,19 @@ namespace Isis {
     emit newControlNetwork(controlNet());
   }
 
-
   /**
-   * Exit the program
+   *  Exit the program
+   *
+   *  @internal
+   *  @history 2018-04-24 Adam Goins - Added QCloseEvent optional parameter to
+   *                          set the CloseEvent triggered by an onwindowclose
+   *                          to ignore the event if the 'cancel' option was selected
+   *                          after clicking the close button of the viewport window.
+   *                          This fixes an issue where clicking the close button and then clicking
+   *                          'cancel' from the QMessageBox would close the window but keep the
+   *                          application running. Fixes #4146.
    */
-  void QnetFileTool::exit() {
+  void QnetFileTool::exit(QCloseEvent *event) {
     //  If control net has been changed , prompt for user to save
     if (m_isDirty) {
       int resp = QMessageBox::warning((QWidget *)parent(), "QnetTool",
@@ -236,14 +244,15 @@ namespace Isis {
         saveAs();
       }
       if (resp == QMessageBox::Cancel) {
+        if (event) {
+          event->setAccepted(false);
+        }
         return;
       }
     }
     qApp->quit();
   }
 
-
-
     /**
    *  Save control network with given file
    *  @internal
diff --git a/isis/src/qisis/objs/QnetTools/QnetFileTool.h b/isis/src/qisis/objs/QnetTools/QnetFileTool.h
index c67ccac02199efcf86adff07e075bb1f67a270c4..b7e5db59521fc8000bc2cd93880c77f8b8a8f72a 100644
--- a/isis/src/qisis/objs/QnetTools/QnetFileTool.h
+++ b/isis/src/qisis/objs/QnetTools/QnetFileTool.h
@@ -24,6 +24,7 @@
  */
 
 #include "FileTool.h"
+#include <QCloseEvent>
 
 class QString;
 class QWidget;
@@ -71,14 +72,21 @@ namespace Isis {
    *                           signals.
    *   @history 2011-07-07 Tracie Sucharski - Disable Open Ground and Open Dem
    *                           until list & net open.
-   *   @history 2011-11-01 Tracie Sucharski - Added save slot. 
-   *   @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis 
+   *   @history 2011-11-01 Tracie Sucharski - Added save slot.
+   *   @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis
    *                           coding standards. References #972.
-   *   @history 2012-10-11 Debbie A. Cook, Updated to use new Target class.  References Mantis tickets 
+   *   @history 2012-10-11 Debbie A. Cook, Updated to use new Target class.  References Mantis tickets
    *                           #775 and #1114.
    *   @history 2016-04-22 Jeannie Backer - Modified to use cube labels to set
    *                           ControlNet's target instead of the TargetName.
    *                           References #3892
+   *  @history 2018-04-24 Adam Goins - Added QCloseEvent optional parameter to slot "exit()" to
+   *                          set the CloseEvent triggered by an onwindowclose
+   *                          to ignore the event if the 'cancel' option was selected
+   *                          after clicking the close button of the viewport window.
+   *                          This fixes an issue where clicking the close button and then clicking
+   *                          'cancel' from the QMessageBox would close the window but keep the
+   *                          application running. Fixes #4146.
    *
    */
 
@@ -103,7 +111,7 @@ namespace Isis {
 
     public slots:
       virtual void open();
-      virtual void exit();
+      virtual void exit(QCloseEvent *event = NULL);
       virtual void save();
       virtual void saveAs();
       void loadPointImages(ControlPoint *point);
diff --git a/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.cpp b/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.cpp
index 4eb46d8c5f57307f571bcd4167a2fa7a1710a1bc..2f9f7102da8bab4d28d5478f8ae0759971776ab3 100644
--- a/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.cpp
+++ b/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.cpp
@@ -32,21 +32,21 @@ using namespace std;
 namespace Isis {
   QnetSetAprioriDialog::QnetSetAprioriDialog(QnetTool *qnetTool, QWidget *parent) : QDialog(parent) {
     m_qnetTool = qnetTool;
-    
+
     m_aprioriDialog = NULL;
     m_aprioriGridLayout = NULL;
     m_okButton = NULL;
     m_cancelButton = NULL;
     m_applyButton = NULL;
     m_pointInfoStack = NULL;
-    
+
     m_singlePointInfoGroup = NULL;
     m_pointIDLabel = NULL;
     m_pointTypeLabel = NULL;
     m_pointMeasureNumber = NULL;
     m_editLockedBoolLabel = NULL;
     m_ignoredBoolLabel = NULL;
-    
+
     m_multiplePointsInfoGroup = NULL;
     m_pointsCount = NULL;
     m_pointsMeasuresCount = NULL;
@@ -55,7 +55,7 @@ namespace Isis {
     m_freePointsCount = NULL;
     m_pointsEditLockedCount = NULL;
     m_pointsIgnoredCount = NULL;
-    
+
     m_pointGroup = NULL;
     m_aprioriLatLabel = NULL;
     m_aprioriLonLabel = NULL;
@@ -66,7 +66,7 @@ namespace Isis {
     m_currentAprioriButton = NULL;
     m_referenceAprioriButton = NULL;
     m_averageAprioriButton = NULL;
-    
+
     m_sigmaGroup = NULL;
     m_sigmaWarningLabel = NULL;
     m_currentSigmaButton = NULL;
@@ -75,38 +75,38 @@ namespace Isis {
     m_radiusSigmaLabel = NULL;
     m_latSigmaLineEdit = NULL;
     m_lonSigmaLineEdit = NULL;
-    m_radiusSigmaLineEdit = NULL;    
-    
+    m_radiusSigmaLineEdit = NULL;
+
     m_multiPointsMeasureCount = 0;
     m_multiPointsConstraintedCount = 0;
     m_multiPointsFixedCount = 0;
     m_multiPointsFreeCount = 0;
     m_multiPointsEditLockedCount = 0;
     m_multiPointsIgnoredCount = 0;
-    
+
     createSetAprioriDialog(parent);
-        
+
     connect(m_currentAprioriButton, SIGNAL(clicked()), this, SLOT(fillCurrentAprioriLineEdits()));
-    connect(m_referenceAprioriButton, SIGNAL(clicked()), this, 
+    connect(m_referenceAprioriButton, SIGNAL(clicked()), this,
             SLOT(fillReferenceAprioriLineEdits()));
     connect(m_averageAprioriButton, SIGNAL(clicked()), this, SLOT(fillAverageAprioriLineEdits()));
-    
-    //TODO create a ground button that retrieves the lat/lon/radius of the ground source if there 
+
+    //TODO create a ground button that retrieves the lat/lon/radius of the ground source if there
     //is one. The basic connections are already done, just need to actually do it
-//     connect(m_groundAprioriButton, SIGNAL(clicked()), this, 
+//     connect(m_groundAprioriButton, SIGNAL(clicked()), this,
 //     SLOT(fillGroundSourceAprioriLineEdits()));
-    
+
     connect(m_currentSigmaButton, SIGNAL(clicked()), this, SLOT(fillSigmaLineEdits()));
     connect(m_currentSigmaButton, SIGNAL(clicked()), this, SLOT(fillSigmaLineEdits()));
-    
+
     connect(m_aprioriDialog, SIGNAL(rejected()), this, SLOT(reject()));
-    
+
     connect(m_okButton, SIGNAL(clicked()), this, SLOT(setApriori()));
     connect(m_okButton, SIGNAL(clicked()), this, SLOT(closeEvent()));
     connect(m_okButton, SIGNAL(clicked()), m_aprioriDialog, SLOT(close()));
-    
+
     connect(m_applyButton, SIGNAL(clicked()), this, SLOT(setApriori()));
-    connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(closeEvent()));   
+    connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(closeEvent()));
     connect(m_cancelButton, SIGNAL(clicked()), m_aprioriDialog, SLOT(close()));
   }
 
@@ -117,17 +117,17 @@ namespace Isis {
    * @param parent The parent widget for the set apriori dialog
    *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::createSetAprioriDialog(QWidget *parent) {
-        
-    //Create all of the individual elements 
+
+    //Create all of the individual elements
     m_pointIDLabel = new QLabel("Point ID: ");
     m_pointTypeLabel = new QLabel("Point Type: ");
     m_pointMeasureNumber = new QLabel("Number of Measures: ");
     m_editLockedBoolLabel = new QLabel("EditLocked: ");
     m_ignoredBoolLabel= new QLabel("Ignored: ");
-    
+
     m_pointsCount = new QLabel("Number of Points: ");
     m_pointsMeasuresCount = new QLabel("Total Number of Measures: ");
     m_constrainedPointsCount = new QLabel("Number of Constrained Points: ");
@@ -135,50 +135,50 @@ namespace Isis {
     m_freePointsCount = new QLabel("Number of Free Points: ");
     m_pointsEditLockedCount = new QLabel("Number of Edit Locked Points: ");
     m_pointsIgnoredCount = new QLabel("Number of Ignored Points: ");
-    
+
     m_currentAprioriButton = new QPushButton("Current");
     m_currentAprioriButton->setDefault(false);
     m_currentAprioriButton->setToolTip("Populate with the current Apriori Position");
-    
+
     m_referenceAprioriButton = new QPushButton("Reference");
     m_referenceAprioriButton->setToolTip("Populate with Apriori Position of the reference measure");
-    
+
     m_averageAprioriButton = new QPushButton("Average");
     m_averageAprioriButton->setToolTip("Calculate and populate with the average Apriori Position");
-    
+
 //     m_groundAprioriButton = new QPushButton("Ground");
 //     m_groundAprioriButton->setToolTip("Populate with the Ground Source position, if a Ground Source is loaded");
-    
+
     m_aprioriLatLabel = new QLabel(tr("Apriori Latitude"));
     m_aprioriLonLabel = new QLabel(tr("Apriori Longitude"));
     m_aprioriRadiusLabel = new QLabel(tr("Apriori Radius"));
     m_latLineEdit = new QLineEdit();
     m_lonLineEdit = new QLineEdit();
     m_radiusLineEdit = new QLineEdit();
-    
+
     m_sigmaWarningLabel = new QLabel("");
-    
+
     m_currentSigmaButton = new QPushButton("Current");
     m_currentSigmaButton->setToolTip("Populate the current sigma values");
-    
+
     m_latSigmaLabel = new QLabel(tr("Latitude Sigma"));
     m_lonSigmaLabel = new QLabel(tr("Longitude Sigma"));
     m_radiusSigmaLabel = new QLabel(tr("Radius Sigma"));
     m_latSigmaLineEdit = new QLineEdit();
     m_lonSigmaLineEdit = new QLineEdit();
     m_radiusSigmaLineEdit = new QLineEdit();
-    
+
     m_okButton = new QPushButton("&OK");
     m_okButton->setToolTip("Apply changes and close this dialog");
-    
+
     m_cancelButton = new QPushButton("&Cancel");
     m_cancelButton->setToolTip("Discard changes and close this dialog");
-    
+
     m_applyButton = new QPushButton("&Apply");
     m_applyButton->setAutoDefault(true);
     m_applyButton->setDefault(true);
     m_applyButton->setToolTip("Apply changes");
-        
+
     //Create the point group box and layout
     m_pointGroup = new QGroupBox(tr("Apriori Point"));
     m_pointGroup->setToolTip("Apriori Point Position");
@@ -195,7 +195,7 @@ namespace Isis {
     pointGridLayout->addWidget(m_lonLineEdit, 3, 2, 1, -1);
     pointGridLayout->addWidget(m_radiusLineEdit, 4, 2, 1, -1);
     m_pointGroup->setLayout(pointGridLayout);
-    
+
     //Create the sigma group box and layout
     m_sigmaGroup = new QGroupBox(tr("Apriori Constraints"));
     QGridLayout *sigmaGridLayout = new QGridLayout(m_sigmaGroup);
@@ -207,11 +207,11 @@ namespace Isis {
     sigmaGridLayout->addWidget(m_lonSigmaLineEdit, 3, 2, 1, 3);
     sigmaGridLayout->addWidget(m_radiusSigmaLineEdit, 4, 2, 1, 3);
     m_sigmaGroup->setLayout(sigmaGridLayout);
-    
+
     //Create group box for the single point information labels
     m_singlePointInfoGroup = new QGroupBox(tr("Point Information"));
     m_singlePointInfoGroup->setToolTip("Information on Point selected");
-    
+
     QVBoxLayout *m_singlePointInfoLayout = new QVBoxLayout(m_singlePointInfoGroup);
     m_singlePointInfoLayout->addWidget(m_pointIDLabel);
     m_singlePointInfoLayout->addWidget(m_pointTypeLabel);
@@ -219,7 +219,7 @@ namespace Isis {
     m_singlePointInfoLayout->addWidget(m_editLockedBoolLabel);
     m_singlePointInfoLayout->addWidget(m_ignoredBoolLabel);
     m_singlePointInfoGroup->setLayout(m_singlePointInfoLayout);
-    
+
     //Create group box for the multiple point information labels
     m_multiplePointsInfoGroup = new QGroupBox(tr("Multiple Point Information"));
     m_multiplePointsInfoGroup->setToolTip("Information on Points selected");
@@ -230,14 +230,14 @@ namespace Isis {
     m_multiplePointsInfoLayout->addWidget(m_fixedPointsCount);
     m_multiplePointsInfoLayout->addWidget(m_freePointsCount);
     m_multiplePointsInfoLayout->addWidget(m_pointsEditLockedCount);
-    m_multiplePointsInfoLayout->addWidget(m_pointsIgnoredCount); 
+    m_multiplePointsInfoLayout->addWidget(m_pointsIgnoredCount);
     m_multiplePointsInfoGroup->setLayout(m_multiplePointsInfoLayout);
-    
+
     //Create a stacked widget to switch between the single point and multiple point labels
     m_pointInfoStack = new QStackedWidget;
     m_pointInfoStack->addWidget(m_singlePointInfoGroup);
     m_pointInfoStack->addWidget(m_multiplePointsInfoGroup);
-    
+
     //Add all of the major widgets to the main dialog layout
     m_aprioriGridLayout = new QGridLayout(m_aprioriDialog);
     m_aprioriGridLayout->addWidget(m_pointInfoStack, 1, 1, 1, -1);
@@ -247,59 +247,59 @@ namespace Isis {
     m_aprioriGridLayout->addWidget(m_okButton, 8, 2);
     m_aprioriGridLayout->addWidget(m_cancelButton, 8, 3);
     m_aprioriGridLayout->addWidget(m_applyButton, 8, 4);
-    
-    
+
+
     m_aprioriDialog = new QDialog(parent);
     m_aprioriDialog->setWindowTitle("Set Apriori Point and Constraints");
     m_aprioriDialog->setLayout(m_aprioriGridLayout);
-   
+
     setVisiblity();
   }
-  
-  
+
+
   /**
    * This is called when the user selects the X button on the top right or they hit ESC.
    * Disconnect all slots on close event.
-   * 
+   *
    * @author 2016-11-18 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::reject() {
     closeEvent();
     QDialog::reject();
   }
-  
-  
+
+
   /**
    * Disconnect all of the slots on a close event
-   * 
+   *
    * @author 2016-11-18 Makayla Shepherd
    */
   void QnetSetAprioriDialog::closeEvent() {
-    
-      disconnect(m_currentAprioriButton, SIGNAL(clicked()), this, 
+
+      disconnect(m_currentAprioriButton, SIGNAL(clicked()), this,
                 SLOT(fillCurrentAprioriLineEdits()));
-      disconnect(m_referenceAprioriButton, SIGNAL(clicked()), this, 
+      disconnect(m_referenceAprioriButton, SIGNAL(clicked()), this,
                 SLOT(fillReferenceAprioriLineEdits()));
-      disconnect(m_averageAprioriButton, SIGNAL(clicked()), this, 
+      disconnect(m_averageAprioriButton, SIGNAL(clicked()), this,
                 SLOT(fillAverageAprioriLineEdits()));
-      
+
       disconnect(m_currentSigmaButton, SIGNAL(clicked()), this, SLOT(fillSigmaLineEdits()));
       disconnect(m_currentSigmaButton, SIGNAL(clicked()), this, SLOT(fillSigmaLineEdits()));
-      
+
       disconnect(m_okButton, SIGNAL(clicked()), this, SLOT(setApriori()));
       disconnect(m_applyButton, SIGNAL(clicked()), this, SLOT(setApriori()));
-      
+
       emit aprioriDialogClosed();
-    
+
   }
-  
-  
+
+
   /**
-   * Shows the dialog box 
-   * 
+   * Shows the dialog box
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::setVisiblity() {
     if (m_aprioriDialog != NULL) {
@@ -320,27 +320,27 @@ namespace Isis {
    */
   void QnetSetAprioriDialog::setPoints(QList<QListWidgetItem *> selectedPoints) {
     m_points = selectedPoints;
-    
+
     checkPointInfoDisable(m_points);
     resetInfoLabels();
     clearLineEdits();
 
     setInfoStack(m_points);
-    
+
     if (m_points.size() == 1) {
       fillCurrentAprioriLineEdits();
       fillSigmaLineEdits();
     }
   }
-  
+
 
   /**
    * Populates the apriori lat/lon/radius line edits with the current values. If
    * there are no current values, the line edits are empty. This only works on single points
    * and is disabled for multiple points.
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::fillCurrentAprioriLineEdits() {
     if (m_points.size() == 0) {
@@ -348,17 +348,13 @@ namespace Isis {
       QMessageBox::warning((QWidget *)parent(), "Warning", msg);
       return;
     }
-    
+
     //we can only populate the line edits if there is one point selected
     if (m_points.size() == 1) {
       QString id = m_points.at(0)->text();
       ControlPoint *pt = m_qnetTool->controlNet()->GetPoint(id);
       SurfacePoint sPt = pt->GetAprioriSurfacePoint();
-      vector<Distance> targetRadii = m_qnetTool->controlNet()->GetTargetRadii();
-      
-      sPt.SetRadii(Distance(targetRadii[0]),
-                   Distance(targetRadii[1]),
-                   Distance(targetRadii[2]));
+
       if (sPt.GetLatitude().degrees() != Null) {
         m_latLineEdit->setText(
           QString::number(sPt.GetLatitude().degrees()));
@@ -384,15 +380,15 @@ namespace Isis {
       m_aprioriSource = (Source) USER;
     }
   }
-  
+
 
   /**
-   * Populates the apriori lat/lon/radius line edits with the reference measure values. 
+   * Populates the apriori lat/lon/radius line edits with the reference measure values.
    * This only works on single points and is disabled for multiple points. The calculations
    * were moved from setApriori.
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::fillReferenceAprioriLineEdits() {
     if (m_points.size() == 0) {
@@ -400,24 +396,20 @@ namespace Isis {
       QMessageBox::warning((QWidget *)parent(), "Warning", msg);
       return;
     }
-    
+
     //we can only populate the line edits if there is one point selected
     if (m_points.size() == 1) {
-      
+
       QString id = m_points.at(0)->text();
       ControlPoint *pt = m_qnetTool->controlNet()->GetPoint(id);
       ControlMeasure *m = pt->GetRefMeasure();
-      vector<Distance> targetRadii = m_qnetTool->controlNet()->GetTargetRadii();
-      
+
       // Find camera from network camera list
       int camIndex = m_qnetTool->serialNumberList()->serialNumberIndex(
           m->GetCubeSerialNumber());
       Camera *cam = m_qnetTool->controlNet()->Camera(camIndex);
       cam->SetImage(m->GetSample(),m->GetLine());
       SurfacePoint refSPt = cam->GetSurfacePoint();
-      refSPt.SetRadii(Distance(targetRadii[0]),
-                   Distance(targetRadii[1]),
-                   Distance(targetRadii[2]));
       if (refSPt.GetLatitude().degrees() != Null) {
          m_latLineEdit->setText(
           QString::number(refSPt.GetLatitude().degrees()));
@@ -440,9 +432,9 @@ namespace Isis {
       else {
         m_radiusLineEdit->clear();
       }
-      
+
       //If all of the line edits are empty something went wrong, tell the user, and return
-      if ((m_latLineEdit->text() == "") && (m_lonLineEdit->text() == "") 
+      if ((m_latLineEdit->text() == "") && (m_lonLineEdit->text() == "")
           && (m_radiusLineEdit->text() == "")) {
         QString msg = "Cannot retrieve the latitude, longitude, and radius from the reference";
         msg = msg + "measure; this is the result of a known problem in our system. Please select ";
@@ -453,22 +445,22 @@ namespace Isis {
       m_aprioriSource = (Source) REFERENCE;
     }
   }
-  
+
 
   /**
-   * Populates the apriori lat/lon/radius line edits with the average measure values. 
+   * Populates the apriori lat/lon/radius line edits with the average measure values.
    * This only works on single points and is disabled for multiple points. The calculations
    * were moved from setApriori.
-   * 
-   * the code used to compute the average of the measures is copied from 
+   *
+   * the code used to compute the average of the measures is copied from
    * ControlPoint::ComputeApriori
-   * 
+   *
    * There is a known issue with this code that if something goes wrong and the average cannot be
-   * computed then the lat, lon, radius is set to null. In that case, clear the line edits 
+   * computed then the lat, lon, radius is set to null. In that case, clear the line edits
    * and display an error message.
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::fillAverageAprioriLineEdits() {
     if (m_points.size() == 0) {
@@ -476,7 +468,7 @@ namespace Isis {
       QMessageBox::warning((QWidget *)parent(), "Warning", msg);
       return;
     }
-    
+
     //we can only populate the line edits if there is one point selected
     if (m_points.size() == 1) {
       double xB = 0.0;
@@ -485,14 +477,14 @@ namespace Isis {
       double r2B = 0.0;
       int goodMeasures = 0;
       SurfacePoint aprioriSurfacePoint;
-      
+
       QString id = m_points.at(0)->text();
       ControlPoint *pt = m_qnetTool->controlNet()->GetPoint(id);
-      
-      
-      
+
+
+
       //this code is copied from ControlPoint::ComputeApriori
-      
+
       for (int i = 0; i < pt->GetNumMeasures(); i++) {
         ControlMeasure *m = pt->GetMeasure(i);
         if (m->IsIgnored()) {
@@ -532,7 +524,7 @@ namespace Isis {
            "project to lat/lon/radius (x/y/z)";
         throw IException(IException::User, msg, _FILEINFO_);
       }
-      
+
       // Compute the averages
       //if (NumberOfConstrainedCoordinates() == 0) {
       if (pt->GetPointTypeString() == "Free" || pt->NumberOfConstrainedCoordinates() == 0) {
@@ -551,26 +543,21 @@ namespace Isis {
       // longitude must be constrained.  This constrains x and y as well.
       else if (!(pt->GetPointTypeString() == "Fixed") &&
                !(pt->NumberOfConstrainedCoordinates() == 3) &&
-               !pt->IsLatitudeConstrained() &&
-               !pt->IsLongitudeConstrained() &&
-               !pt->IsRadiusConstrained()){
-        
-        aprioriSurfacePoint.SetRectangular(
+               !pt->IsCoord1Constrained() &&
+               !pt->IsCoord2Constrained() &&
+               !pt->IsCoord3Constrained()){
+          aprioriSurfacePoint.SetRectangular(
           Displacement(aprioriSurfacePoint.GetX().meters(), Displacement::Meters),
           Displacement(aprioriSurfacePoint.GetY().meters(), Displacement::Meters),
           Displacement((zB / goodMeasures), Displacement::Kilometers));
       }
-      
+
       //End of copied code
-      
-      
-      
+
+
+
       SurfacePoint sPt = aprioriSurfacePoint;
-      vector<Distance> targetRadii = m_qnetTool->controlNet()->GetTargetRadii();
-  
-      sPt.SetRadii(Distance(targetRadii[0]),
-                   Distance(targetRadii[1]),
-                   Distance(targetRadii[2]));
+
       if (sPt.GetLatitude().degrees() != Null) {
         m_latLineEdit->setText(
           QString::number(sPt.GetLatitude().degrees()));
@@ -593,10 +580,10 @@ namespace Isis {
       else {
         m_radiusLineEdit->clear();
       }
-      
+
       //If all of the line edits are empty something went wrong
       //tell the user that the average canot be computed and leave the apriori source alone
-      if ((m_latLineEdit->text() == "") && (m_lonLineEdit->text() == "") 
+      if ((m_latLineEdit->text() == "") && (m_lonLineEdit->text() == "")
           && (m_radiusLineEdit->text() == "")) {
         QString msg = "Average cannot be computed for this point [" + m_points.at(0)->text();
         msg = msg + "]; this is the result of a known problem in our system. Please select ";
@@ -607,15 +594,15 @@ namespace Isis {
       m_aprioriSource = (Source) AVERAGE;
     }
   }
-  
+
 //   /**
 //    This is the base for a new ticket that allows for a ground source button
 //
-//    * Populates the apriori lat/lon/radius line edits with the ground source values, if there is a 
+//    * Populates the apriori lat/lon/radius line edits with the ground source values, if there is a
 //    * ground source. This only works on single points and is disabled for multiple points.
-//    * 
+//    *
 //    * @author 2016-08-05 Makayla Shepherd
-//    * 
+//    *
 //    */
 //   void QnetSetAprioriDialog::fillGroundSourceAprioriLineEdits() {
 //     if (m_points.size() == 0) {
@@ -624,18 +611,18 @@ namespace Isis {
 //       return;
 //     }
 //     if (m_points.size() == 1) {
-//       
+//
 //     }
 //   }
-  
+
 
   /**
    * Populates the sigma lat/lon/radius line edits with the current values. If
    * there are no current sigma values, the line edits are empty. This only works on
    * single points and is disabled for multiple points.
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::fillSigmaLineEdits() {
     if (m_points.size() == 0) {
@@ -643,16 +630,12 @@ namespace Isis {
       QMessageBox::warning((QWidget *)parent(), "Warning", msg);
       return;
     }
-    
+
     //we can only populate the sigma line edits if there is one point selected
     if (m_points.size() == 1) {
       QString id = m_points.at(0)->text();
       ControlPoint *pt = m_qnetTool->controlNet()->GetPoint(id);
       SurfacePoint sPt = pt->GetAprioriSurfacePoint();
-      vector<Distance> targetRadii = m_qnetTool->controlNet()->GetTargetRadii();
-      sPt.SetRadii(Distance(targetRadii[0]),
-                   Distance(targetRadii[1]),
-                   Distance(targetRadii[2]));
       if (sPt.GetLatSigmaDistance().meters() != Null) {
         m_latSigmaLineEdit->setText(
           QString::number(sPt.GetLatSigmaDistance().meters()));
@@ -674,9 +657,9 @@ namespace Isis {
   /**
    * Switches what information is visible based on how many points are selected. Defaults to single point
    * information.
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::setInfoStack(QList<QListWidgetItem *> selectedPoints) {
     if (selectedPoints.size() > 1) {
@@ -686,15 +669,15 @@ namespace Isis {
       m_pointInfoStack->setCurrentWidget(m_singlePointInfoGroup);
     }
   }
-  
+
 
   /**
    * Enables/Disables features based on if there are multiple points selected or not. If multiple points are
-   * selected it also counts how many are EditLocked, Ignored, the number of each type of point, and the total 
+   * selected it also counts how many are EditLocked, Ignored, the number of each type of point, and the total
    * number of measures.
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::checkPointInfoDisable(QList<QListWidgetItem *> selectedPoints) {
     m_points = selectedPoints;
@@ -703,14 +686,14 @@ namespace Isis {
     m_pointGroup->setEnabled(true);
     m_currentSigmaButton->setEnabled(true);
     m_sigmaWarningLabel->clear();
-    
+
     m_multiPointsMeasureCount = 0;
     m_multiPointsConstraintedCount = 0;
     m_multiPointsFixedCount = 0;
     m_multiPointsFreeCount = 0;
     m_multiPointsEditLockedCount = 0;
     m_multiPointsIgnoredCount = 0;
-    
+
     //handle multiple points
     if (m_points.size() > 1) {
       for (int i = 0; i < m_points.size(); i++) {
@@ -774,13 +757,13 @@ namespace Isis {
       }
     }
   }
-  
+
 
   /**
    * Clears the line edits
-   * 
+   *
    * @author ????-??-?? Unknown
-   * 
+   *
    * @internal
    * @history 2016-02-05 Makayla Shepherd - Modified to work with new UI
    */
@@ -792,17 +775,17 @@ namespace Isis {
     m_lonSigmaLineEdit->clear();
     m_radiusSigmaLineEdit->clear();
   }
-  
+
 
   /**
    * Resets and populates the information stack labels
-   * 
+   *
    * @author 2016-02-05 Makayla Shepherd
-   * 
+   *
    */
   void QnetSetAprioriDialog::resetInfoLabels() {
-    
-    if (m_points.size() < 0) { 
+
+    if (m_points.size() < 0) {
       m_pointIDLabel->setText("Point ID: ");
       m_pointTypeLabel->setText("Point Type: ");
       m_pointMeasureNumber->setText("Number of Measures: ");
@@ -816,7 +799,7 @@ namespace Isis {
       m_pointIDLabel->setText("Point ID: " + QString(id));
       m_pointTypeLabel->setText("Point Type: " + QString(pt->GetPointTypeString()));
       m_pointMeasureNumber->setText("Number of Measures: " + QString::number(pt->GetNumMeasures()));
-      
+
       if (pt->IsEditLocked()) {
         m_editLockedBoolLabel->setText("EditLocked: True");
       }
@@ -831,19 +814,19 @@ namespace Isis {
       }
     }
     //reset all of the information needed for multiple points
-    else if (m_points.size() > 1) { 
+    else if (m_points.size() > 1) {
       m_pointsCount->setText("Number of Points: " + QString::number(m_points.size()));
-      m_pointsMeasuresCount->setText("Total Number of Measures: " + 
+      m_pointsMeasuresCount->setText("Total Number of Measures: " +
                                      QString::number(m_multiPointsMeasureCount));
-      m_constrainedPointsCount->setText("Number of Constrained Points: " + 
+      m_constrainedPointsCount->setText("Number of Constrained Points: " +
                                         QString::number(m_multiPointsConstraintedCount));
-      m_fixedPointsCount->setText("Number of Fixed Points: " + 
+      m_fixedPointsCount->setText("Number of Fixed Points: " +
                                   QString::number(m_multiPointsFixedCount));
       m_freePointsCount->setText("Number of Free Points: " +
                                  QString::number(m_multiPointsFreeCount));
       m_pointsEditLockedCount->setText("Number of Edit Locked Points: " +
                                        QString::number(m_multiPointsEditLockedCount));
-      m_pointsIgnoredCount->setText("Number of Ignored Points: " + 
+      m_pointsIgnoredCount->setText("Number of Ignored Points: " +
                                     QString::number(m_multiPointsIgnoredCount));
     }
   }
@@ -868,19 +851,19 @@ namespace Isis {
    *                        only takes the values in the line edits and uses them to set the
    *                        Apriori values. The calculations for reference and average values
    *                        are made and populated in the fill methods.
-   * @history 2016-10-14 Makayla Shepherd - Fixed an issue that caused the apriori sigmas to be set 
+   * @history 2016-10-14 Makayla Shepherd - Fixed an issue that caused the apriori sigmas to be set
    *                        to NULL. You can now set the apriori sigmas.
    * @history 2016-11-16 Makayla Shepherd - Fixed the sigma setting for Fixed and Free points.
-   *                        
+   *
    */
   void QnetSetAprioriDialog::setApriori() {
-    
+
     if (m_points.size() == 0) {
       QString msg = "There are no Points selected. Please select a Point.";
       QMessageBox::warning((QWidget *)parent(), "Warning", msg);
       return;
     }
-    
+
     double latSigma = Null;
     double lat = Null;
     double lonSigma = Null;
@@ -888,7 +871,7 @@ namespace Isis {
     double radiusSigma = Null;
     double radius = Null;
     bool lineEditModified = false;
-    
+
     //retrieve all of the line edit values and check if the line edits have been modified
     if (m_latLineEdit->text() != "") {
       lat = m_latLineEdit->text().toDouble();
@@ -922,20 +905,20 @@ namespace Isis {
     if (m_radiusSigmaLineEdit->text() != "") {
       radiusSigma = m_radiusSigmaLineEdit->text().toDouble();
     }
-    
-    
-    //if any of the line edits have been modified then the AprioriSurfacePointSource and 
+
+
+    //if any of the line edits have been modified then the AprioriSurfacePointSource and
     //RadiusSource are the user
     if (lineEditModified) {
       m_aprioriSource = (Source) USER;
     }
-    
+
     for (int i = 0; i < m_points.size(); i++) {
       QString id = m_points.at(i)->text();
       ControlPoint *pt = m_qnetTool->controlNet()->GetPoint(id);
       if (m_points.size() == 1) {
         pt->SetAprioriSurfacePoint(SurfacePoint(
-                                   Latitude(lat, Angle::Degrees), 
+                                   Latitude(lat, Angle::Degrees),
                                    Longitude(lon, Angle::Degrees),
                                    Distance(radius,Distance::Meters)));
         if (m_aprioriSource == (Source) REFERENCE) {
@@ -948,7 +931,7 @@ namespace Isis {
         else if (m_aprioriSource == (Source) USER) {
           pt->SetAprioriSurfacePointSource(ControlPoint::SurfacePointSource::User);
 //          pt->SetAprioriRadiusSource(ControlPoint::RadiusSource::User);
-        } 
+        }
       }
       if (!pt->HasAprioriCoordinates()) {
         QString msg = "Point [" + id + "] does not have an Apriori coordinate.  "
@@ -968,10 +951,6 @@ namespace Isis {
         //  Read Surface point from the control point and set the sigmas,
         //  first set the target radii
         SurfacePoint spt = pt->GetAprioriSurfacePoint();
-        vector<Distance> targetRadii = m_qnetTool->controlNet()->GetTargetRadii();
-        spt.SetRadii(Distance(targetRadii[0]),
-                     Distance(targetRadii[1]),
-                     Distance(targetRadii[2]));
 
         spt.SetSphericalSigmasDistance(Distance(latSigma,Distance::Meters),
                                         Distance(lonSigma,Distance::Meters),
diff --git a/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.h b/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.h
index 3a60ca27702317836334123abc0386185fb51a5a..ef8a134c7fef30e77e1444a39668e1d24d44af76 100644
--- a/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.h
+++ b/isis/src/qisis/objs/QnetTools/QnetSetAprioriDialog.h
@@ -26,14 +26,18 @@ namespace Isis {
    * @author ????-??-?? Unknown
    *
    * @internal
-   *   @history 2016-08-09 Makayla Shepherd - Complete redesign of the user interface. 
+   *   @history 2016-08-09 Makayla Shepherd - Complete redesign of the user interface.
    *                           Fixes #2325, #2383.
-   *   @history 2016-10-14 Makayla Shepherd - Fixed an issue that caused the apriori sigmas to be 
+   *   @history 2016-10-14 Makayla Shepherd - Fixed an issue that caused the apriori sigmas to be
    *                           set to NULL. You can now set the apriori sigmas. Fixes #4457.
    *   @history 2016-11-18 Makayla Shepherd - Corrected the deletion of this dialog. The incorrect
-   *                           deletion caused an error message to pop up when selecting multiple 
-   *                           Free or Fixed points after closing the Set Apriori dialog. Fixes 
+   *                           deletion caused an error message to pop up when selecting multiple
+   *                           Free or Fixed points after closing the Set Apriori dialog. Fixes
    *                           #4490.
+   *   @history 2018-06-28 Debbie A. Cook - Removed calls to SurfacePoint::SetRadii
+   *                           which is now obsolete. Fixes #5457.
+   *   @history 2018-07-06 Jesse Mapel - Removed calls to ControlNet::GetTargetRadii because it is
+   *                           both no longer needed and no longer available. Fixes #5457.
    */
   class QnetSetAprioriDialog : public QDialog {
       Q_OBJECT
@@ -41,12 +45,12 @@ namespace Isis {
     public:
       QnetSetAprioriDialog(QnetTool *qnetTool, QWidget *parent = 0);
       void setPoints(QList<QListWidgetItem *> selectedPoints);
-      
-    
+
+
     public slots:
       void setVisiblity();
       virtual void reject();
-      
+
     signals:
       void pointChanged(QString pointId);
       void netChanged();
@@ -62,28 +66,28 @@ namespace Isis {
       void resetInfoLabels();
       void setApriori();
       void closeEvent();
-      
-      
+
+
     private:
-      
+
       void createSetAprioriDialog(QWidget *parent);
       void setInfoStack(QList<QListWidgetItem *> selectedPoints);
       void checkPointInfoDisable(QList<QListWidgetItem *> selectedPoints);
-      
+
       QDialog *m_aprioriDialog;
       QGridLayout *m_aprioriGridLayout;
       QPushButton *m_okButton;
       QPushButton *m_cancelButton;
       QPushButton *m_applyButton;
       QStackedWidget *m_pointInfoStack;
-      
+
       QGroupBox *m_singlePointInfoGroup;
       QLabel *m_pointIDLabel;
       QLabel *m_pointTypeLabel;
       QLabel *m_pointMeasureNumber;
       QLabel *m_editLockedBoolLabel;
       QLabel *m_ignoredBoolLabel;
-      
+
       QGroupBox *m_multiplePointsInfoGroup;
       QLabel *m_pointsCount;
       QLabel *m_pointsMeasuresCount;
@@ -92,7 +96,7 @@ namespace Isis {
       QLabel *m_freePointsCount;
       QLabel *m_pointsEditLockedCount;
       QLabel *m_pointsIgnoredCount;
-      
+
       QGroupBox *m_pointGroup;
       QLabel *m_aprioriLatLabel;
       QLabel *m_aprioriLonLabel;
@@ -103,7 +107,7 @@ namespace Isis {
       QPushButton *m_currentAprioriButton;
       QPushButton *m_referenceAprioriButton;
       QPushButton *m_averageAprioriButton;
-      
+
       QGroupBox *m_sigmaGroup;
       QLabel *m_sigmaWarningLabel;
       QPushButton *m_currentSigmaButton;
@@ -113,18 +117,18 @@ namespace Isis {
       QLineEdit *m_latSigmaLineEdit;
       QLineEdit *m_lonSigmaLineEdit;
       QLineEdit *m_radiusSigmaLineEdit;
-      
+
       QList<QListWidgetItem *> m_points;
       QnetTool *m_qnetTool;
-      
+
       enum Source {
         USER,
         AVERAGE,
         REFERENCE,
       };
-      
+
       Source m_aprioriSource;
-      
+
       int m_multiPointsMeasureCount;
       int m_multiPointsConstraintedCount;
       int m_multiPointsFixedCount;
diff --git a/isis/src/qisis/objs/QnetTools/QnetTool.cpp b/isis/src/qisis/objs/QnetTools/QnetTool.cpp
index 74be1f6a70d50a8383b1f225f417ba12628a3a95..f665e05dd184bfa5d39de1efbedde6dded12f25c 100644
--- a/isis/src/qisis/objs/QnetTools/QnetTool.cpp
+++ b/isis/src/qisis/objs/QnetTools/QnetTool.cpp
@@ -1008,12 +1008,8 @@ namespace Isis {
       //  Read apriori surface point if it exists so that point is
       //  replaced, but sigmas are retained.  Save sigmas because the
       //  SurfacePoint class will change them if the coordinates change.
-      vector<Distance> targetRadii = m_controlNet->GetTargetRadii();
       if (m_editPoint->HasAprioriCoordinates()) {
         SurfacePoint aprioriPt = m_editPoint->GetAprioriSurfacePoint();
-        aprioriPt.SetRadii(Distance(targetRadii[0]),
-                           Distance(targetRadii[1]),
-                           Distance(targetRadii[2]));
         Distance latSigma = aprioriPt.GetLatSigmaDistance();
         Distance lonSigma = aprioriPt.GetLonSigmaDistance();
         Distance radiusSigma = aprioriPt.GetLocalRadiusSigma();
@@ -2648,9 +2644,6 @@ namespace Isis {
     m_pointAprioriRadius->setText(s);
 
     if (aprioriPoint.Valid()) {
-      vector<Distance> targRadii = m_controlNet->GetTargetRadii();
-      aprioriPoint.SetRadii(targRadii[0],targRadii[1],targRadii[2]);
-
       if (aprioriPoint.GetLatSigmaDistance().meters() == Null) {
         s = "Apriori Latitude Sigma:  Null";
       }
diff --git a/isis/src/qisis/objs/QnetTools/QnetTool.h b/isis/src/qisis/objs/QnetTools/QnetTool.h
index 0937c3be50cda75c38d54b6a112e8b283879c498..d32f20f2a04be013ed713e18f7b276c1288c9c42 100644
--- a/isis/src/qisis/objs/QnetTools/QnetTool.h
+++ b/isis/src/qisis/objs/QnetTools/QnetTool.h
@@ -237,18 +237,21 @@ namespace Isis {
    *   @history 2016-08-28 Kelvin Rodriguez - Removed unused member variables to eliminate warnings
    *                              in clang. Part of porting to OS X 10.11
    *
-   *   @history 2016-10-07 Makayla Shepherd - Modified the Radius Source File label behavior on the 
-   *                           Qnet Tool. When there is not a radius source open, a point is 
-   *                           selected, and a ground source is opened, the radius source will be 
-   *                           the ShapeModel of the reference measure if the ShapeModel is a cube. 
-   *                           If the ShapeModel is not a cube, the ABC of the target body will be 
-   *                           displayed as the Radius Source on the Qnet Tool. If there is not a 
-   *                           radius source open, there is not a point selected, and a ground 
-   *                           source is opened, the tool will exhibit the same behavior as before. 
+   *   @history 2016-10-07 Makayla Shepherd - Modified the Radius Source File label behavior on the
+   *                           Qnet Tool. When there is not a radius source open, a point is
+   *                           selected, and a ground source is opened, the radius source will be
+   *                           the ShapeModel of the reference measure if the ShapeModel is a cube.
+   *                           If the ShapeModel is not a cube, the ABC of the target body will be
+   *                           displayed as the Radius Source on the Qnet Tool. If there is not a
+   *                           radius source open, there is not a point selected, and a ground
+   *                           source is opened, the tool will exhibit the same behavior as before.
    *                           Fixes #2099.
    *   @history 2017-08-09 Adam Goins - Changed method references of SerialNumberList.Delete() to
    *                           SerialNumberList.remove()
-   *                           
+   *   @history 2018-06-28 Debbie A Cook - Removed all calls to obsolete method
+   *                           SurfacePoint::SetRadii. Fixes #5457.
+   *   @history 2018-07-06 Jesse Mapel - Removed calls to ControlNet::GetTargetRadii because it is
+   *                           both no longer needed and no longer available. Fixes #5457.
    */
   class QnetTool : public Tool {
     Q_OBJECT
diff --git a/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.h b/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.h
index a8a75ed59a8eeaf9512e516385cd4fd48fe8dd77..6adbc7d013511e3ef587af8f12c792ab9c6dc878 100644
--- a/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.h
+++ b/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.h
@@ -23,6 +23,9 @@ namespace Isis {
    *   @history 2015-07-10 Ken Edmundson - Original version.
    *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open 
    *                           source images. Fixes #5105.
+   *   @history 2018-07-26 Tracie Sucharski - Reformated the widget to get rid of fixed sizes and
+   *                           use layouts to handle sizing instead.  Also put entire widget in
+   *                           a scrolled area.
    */
   class SensorInfoWidget : public QFrame {
     Q_OBJECT
diff --git a/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.ui b/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.ui
index 30c03515439125786a3209c1be9167e6b0f60a00..4b9ec27f07518b7b52daf6ee6ec985b7e53f138a 100644
--- a/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.ui
+++ b/isis/src/qisis/objs/SensorInfoWidget/SensorInfoWidget.ui
@@ -6,556 +6,545 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>420</width>
-    <height>581</height>
+    <width>444</width>
+    <height>625</height>
    </rect>
   </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>420</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>420</width>
-    <height>16777215</height>
-   </size>
-  </property>
   <property name="windowTitle">
-   <string>DockWidget</string>
+   <string>Sensor Information</string>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QLabel" name="targetImage">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>391</width>
-       <height>181</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>391</width>
-       <height>181</height>
-      </size>
-     </property>
-     <property name="frameShape">
-      <enum>QFrame::Panel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Sunken</enum>
-     </property>
-     <property name="lineWidth">
-      <number>2</number>
-     </property>
-     <property name="text">
-      <string/>
-     </property>
-     <property name="scaledContents">
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="widgetResizable">
       <bool>true</bool>
      </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="spacecraftlabel">
-     <property name="text">
-      <string>Spacecraft</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeType">
-      <enum>QSizePolicy::Preferred</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>37</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>391</width>
-       <height>231</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>391</width>
-       <height>231</height>
-      </size>
-     </property>
-     <property name="tabPosition">
-      <enum>QTabWidget::South</enum>
-     </property>
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="tab">
-      <attribute name="title">
-       <string>Specifications</string>
-      </attribute>
-      <widget class="QWidget" name="layoutWidget">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>10</y>
-         <width>524</width>
-         <height>261</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout">
-        <item row="0" column="0" colspan="2">
-         <widget class="QLabel" name="label">
-          <property name="font">
-           <font>
-            <pointsize>14</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>Right Ascension</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="2">
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>424</width>
+        <height>605</height>
+       </rect>
+      </property>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <item>
+         <widget class="QLabel" name="targetImage">
+          <property name="minimumSize">
            <size>
-            <width>40</width>
-            <height>20</height>
+            <width>391</width>
+            <height>181</height>
            </size>
           </property>
-         </spacer>
-        </item>
-        <item row="3" column="0" colspan="3">
-         <widget class="QLabel" name="poleDeclinationLabel">
-          <property name="font">
-           <font>
-            <pointsize>10</pointsize>
-           </font>
+          <property name="maximumSize">
+           <size>
+            <width>391</width>
+            <height>181</height>
+           </size>
           </property>
-          <property name="text">
-           <string>Now is the time for all good men to come to the aid of their countrymen</string>
+          <property name="frameShape">
+           <enum>QFrame::Panel</enum>
           </property>
-          <property name="wordWrap">
-           <bool>true</bool>
+          <property name="frameShadow">
+           <enum>QFrame::Sunken</enum>
           </property>
-         </widget>
-        </item>
-        <item row="2" column="0" colspan="2">
-         <widget class="QLabel" name="label_2">
-          <property name="font">
-           <font>
-            <pointsize>14</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
+          <property name="lineWidth">
+           <number>2</number>
           </property>
           <property name="text">
-           <string>Declination</string>
+           <string/>
+          </property>
+          <property name="scaledContents">
+           <bool>true</bool>
           </property>
          </widget>
         </item>
-        <item row="1" column="0" colspan="3">
-         <widget class="QLabel" name="poleRightAscensionLabel">
-          <property name="font">
-           <font>
-            <pointsize>10</pointsize>
-           </font>
-          </property>
+        <item>
+         <widget class="QLabel" name="spacecraftlabel">
           <property name="text">
-           <string>Now is the time for all good men to come to the aid of their countrymen</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
+           <string>Spacecraft</string>
           </property>
          </widget>
         </item>
-        <item row="2" column="2">
-         <spacer name="horizontalSpacer_4">
+        <item>
+         <spacer name="verticalSpacer">
           <property name="orientation">
-           <enum>Qt::Horizontal</enum>
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeType">
+           <enum>QSizePolicy::Preferred</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
-            <width>40</width>
-            <height>20</height>
+            <width>20</width>
+            <height>13</height>
            </size>
           </property>
          </spacer>
         </item>
-       </layout>
-      </widget>
-     </widget>
-     <widget class="QWidget" name="tab_2">
-      <attribute name="title">
-       <string>Calibration</string>
-      </attribute>
-      <widget class="QWidget" name="layoutWidget_2">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>10</y>
-         <width>351</width>
-         <height>181</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_2">
-        <item row="1" column="0" colspan="3">
-         <widget class="QLabel" name="polePMOffsetLabel">
-          <property name="font">
-           <font>
-            <pointsize>10</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>Now is the time for all good men to come to the aid of their countrymen</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
+        <item>
+         <widget class="QTabWidget" name="tabWidget">
+          <property name="minimumSize">
+           <size>
+            <width>391</width>
+            <height>181</height>
+           </size>
           </property>
+          <property name="tabPosition">
+           <enum>QTabWidget::South</enum>
+          </property>
+          <property name="currentIndex">
+           <number>0</number>
+          </property>
+          <widget class="QWidget" name="tab">
+           <attribute name="title">
+            <string>Specifications</string>
+           </attribute>
+           <widget class="QWidget" name="layoutWidget">
+            <property name="geometry">
+             <rect>
+              <x>10</x>
+              <y>10</y>
+              <width>301</width>
+              <height>211</height>
+             </rect>
+            </property>
+            <layout class="QGridLayout" name="gridLayout">
+             <item row="0" column="0" colspan="2">
+              <widget class="QLabel" name="label">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>75</weight>
+                 <bold>true</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>Right Ascension</string>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="2">
+              <spacer name="horizontalSpacer">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item row="3" column="0" colspan="3">
+              <widget class="QLabel" name="poleDeclinationLabel">
+               <property name="font">
+                <font>
+                 <pointsize>10</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>Now is the time for all good men to come to the aid of their countrymen</string>
+               </property>
+               <property name="wordWrap">
+                <bool>true</bool>
+               </property>
+              </widget>
+             </item>
+             <item row="2" column="0" colspan="2">
+              <widget class="QLabel" name="label_2">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>75</weight>
+                 <bold>true</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>Declination</string>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="0" colspan="3">
+              <widget class="QLabel" name="poleRightAscensionLabel">
+               <property name="font">
+                <font>
+                 <pointsize>10</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>Now is the time for all good men to come to the aid of their countrymen</string>
+               </property>
+               <property name="wordWrap">
+                <bool>true</bool>
+               </property>
+              </widget>
+             </item>
+             <item row="2" column="2">
+              <spacer name="horizontalSpacer_4">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+            </layout>
+           </widget>
+          </widget>
+          <widget class="QWidget" name="tab_3">
+           <attribute name="title">
+            <string>What else?</string>
+           </attribute>
+           <widget class="QWidget" name="layoutWidget_3">
+            <property name="geometry">
+             <rect>
+              <x>20</x>
+              <y>20</y>
+              <width>311</width>
+              <height>191</height>
+             </rect>
+            </property>
+            <layout class="QGridLayout" name="gridLayout_3">
+             <item row="0" column="2">
+              <spacer name="horizontalSpacer_11">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item row="2" column="2">
+              <widget class="QLabel" name="bRadiiLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>TextLabel</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="4" column="2">
+              <widget class="QLabel" name="meanRadiiLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>TextLabel</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="3" column="2">
+              <widget class="QLabel" name="cRadiiLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>TextLabel</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="4" column="0">
+              <widget class="QLabel" name="meanLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>50</weight>
+                 <bold>false</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>mean</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="2">
+              <widget class="QLabel" name="aRadiiLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>TextLabel</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="2" column="3">
+              <widget class="QLabel" name="bRadiiUnitsLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>km</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="4" column="3">
+              <widget class="QLabel" name="meanRadiiUnitsLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>km</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="3" column="3">
+              <widget class="QLabel" name="cRadiiUnitsLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>km</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="0">
+              <widget class="QLabel" name="aLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>50</weight>
+                 <bold>false</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>a</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="3" column="0">
+              <widget class="QLabel" name="cLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>50</weight>
+                 <bold>false</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>c</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="3">
+              <widget class="QLabel" name="aRadiiUnitsLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>km</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="2" column="0">
+              <widget class="QLabel" name="bLabel">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>50</weight>
+                 <bold>false</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>b</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="0" colspan="2">
+              <widget class="QLabel" name="label_9">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>50</weight>
+                 <bold>false</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>Radii</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </widget>
+          <widget class="QWidget" name="tab_2">
+           <attribute name="title">
+            <string>Calibration</string>
+           </attribute>
+           <widget class="QWidget" name="">
+            <property name="geometry">
+             <rect>
+              <x>10</x>
+              <y>10</y>
+              <width>291</width>
+              <height>151</height>
+             </rect>
+            </property>
+            <layout class="QGridLayout" name="gridLayout_2">
+             <item row="0" column="0">
+              <widget class="QLabel" name="label_6">
+               <property name="font">
+                <font>
+                 <pointsize>14</pointsize>
+                 <weight>75</weight>
+                 <bold>true</bold>
+                </font>
+               </property>
+               <property name="text">
+                <string>Prime Meridian (W)</string>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="1">
+              <spacer name="horizontalSpacer_6">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item row="1" column="0" colspan="2">
+              <widget class="QLabel" name="polePMOffsetLabel">
+               <property name="font">
+                <font>
+                 <pointsize>10</pointsize>
+                </font>
+               </property>
+               <property name="text">
+                <string>Now is the time for all good men to come to the aid of their countrymen</string>
+               </property>
+               <property name="wordWrap">
+                <bool>true</bool>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </widget>
          </widget>
         </item>
-        <item row="0" column="0" colspan="2">
-         <widget class="QLabel" name="label_6">
-          <property name="font">
-           <font>
-            <pointsize>14</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
+        <item>
+         <widget class="QLabel" name="label_10">
           <property name="text">
-           <string>Prime Meridian (W)</string>
+           <string>where</string>
           </property>
          </widget>
         </item>
-        <item row="0" column="2">
-         <spacer name="horizontalSpacer_6">
+        <item>
+         <spacer name="verticalSpacer_2">
           <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
+           <enum>Qt::Vertical</enum>
           </property>
-         </spacer>
-        </item>
-       </layout>
-      </widget>
-     </widget>
-     <widget class="QWidget" name="tab_3">
-      <attribute name="title">
-       <string>What else?</string>
-      </attribute>
-      <widget class="QWidget" name="layoutWidget_3">
-       <property name="geometry">
-        <rect>
-         <x>20</x>
-         <y>20</y>
-         <width>351</width>
-         <height>161</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_3">
-        <item row="0" column="2">
-         <spacer name="horizontalSpacer_11">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
+          <property name="sizeType">
+           <enum>QSizePolicy::Preferred</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
-            <width>40</width>
-            <height>20</height>
+            <width>20</width>
+            <height>37</height>
            </size>
           </property>
          </spacer>
         </item>
-        <item row="2" column="2">
-         <widget class="QLabel" name="bRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="2">
-         <widget class="QLabel" name="meanRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
+        <item>
+         <widget class="QLabel" name="label_7">
           <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
+           <string>T = interval in Julien centuries (of 36525 days) from the standard epoch.</string>
           </property>
-         </widget>
-        </item>
-        <item row="3" column="2">
-         <widget class="QLabel" name="cRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="0">
-         <widget class="QLabel" name="meanLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>mean</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="2">
-         <widget class="QLabel" name="aRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="3">
-         <widget class="QLabel" name="bRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="3">
-         <widget class="QLabel" name="meanRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="3">
-         <widget class="QLabel" name="cRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="aLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>a</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="0">
-         <widget class="QLabel" name="cLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>c</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
+          <property name="wordWrap">
+           <bool>true</bool>
           </property>
          </widget>
         </item>
-        <item row="1" column="3">
-         <widget class="QLabel" name="aRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
+        <item>
+         <widget class="QLabel" name="label_11">
           <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
+           <string>d = interval in days from the standard epoch.</string>
           </property>
          </widget>
         </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="bLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
+        <item>
+         <widget class="QLabel" name="label_12">
           <property name="text">
-           <string>b</string>
+           <string>The standard epoch is JD 2451545.0, i.e. 2000 January 1 12 hours TDB.</string>
           </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0" colspan="2">
-         <widget class="QLabel" name="label_9">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>Radii</string>
+          <property name="wordWrap">
+           <bool>true</bool>
           </property>
          </widget>
         </item>
        </layout>
-      </widget>
      </widget>
     </widget>
    </item>
-   <item>
-    <widget class="QLabel" name="label_10">
-     <property name="text">
-      <string>where</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <spacer name="verticalSpacer_2">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>37</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_7">
-     <property name="text">
-      <string>T = interval in Julien centuries (of 36525 days) from the standard epoch.</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_11">
-     <property name="text">
-      <string>d = interval in days from the standard epoch.</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_12">
-     <property name="text">
-      <string>The standard epoch is JD 2451545.0, i.e. 2000 January 1 12 hours TDB.</string>
-     </property>
-    </widget>
-   </item>
   </layout>
  </widget>
  <resources/>
diff --git a/isis/src/qisis/objs/Shape/Shape.cpp b/isis/src/qisis/objs/Shape/Shape.cpp
index b97e86ac745a59c0a8d132349c4cb87057d59b0d..c5c9cdc9f34bf9c43887fda0f82055bd7404f44c 100644
--- a/isis/src/qisis/objs/Shape/Shape.cpp
+++ b/isis/src/qisis/objs/Shape/Shape.cpp
@@ -5,6 +5,7 @@
 #include <QDebug>
 #include <QDir>
 #include <QFileInfo>
+#include <QMessageBox>
 #include <QMutexLocker>
 #include <QScopedPointer>
 #include <QString>
@@ -17,19 +18,20 @@
 
 #include "Angle.h"
 #include "CameraFactory.h"
+#include "ControlPoint.h"
 #include "Cube.h"
 #include "CubeAttribute.h"
 #include "DisplayProperties.h"
 #include "Distance.h"
-#include "ShapeDisplayProperties.h"
-#include "IString.h"
 #include "FileName.h"
+#include "IException.h"
 #include "ImagePolygon.h"
-
+#include "IString.h"
 #include "PolygonTools.h"
 #include "Project.h"
 #include "ProjectionFactory.h"
 #include "SerialNumber.h"
+#include "ShapeDisplayProperties.h"
 #include "Target.h"
 #include "XmlStackedHandlerReader.h"
 
@@ -43,9 +45,9 @@ namespace Isis {
   Shape::Shape(QString imageFileName, QObject *parent) : QObject(parent) {
 
     m_fileName = imageFileName;
-    cube();
 
     initMemberData();
+    cube();
     initShape();
   }
 
@@ -59,9 +61,9 @@ namespace Isis {
   Shape::Shape(Cube *shapeCube, QObject *parent) : QObject(parent) {
 
     m_fileName = shapeCube->fileName();
-    m_cube = shapeCube;
 
     initMemberData();
+    m_cube = shapeCube;
     initShape();
   }
 
@@ -126,50 +128,91 @@ namespace Isis {
 
   void Shape::initShape() {
 
+    m_displayProperties = new ShapeDisplayProperties(FileName(m_fileName).name(), this);
+    m_id = new QUuid(QUuid::createUuid());
+    m_serialNumber = SerialNumber::Compose(m_fileName, true);
+
+    m_radiusSource = ControlPoint::RadiusSource::None;
+
     if (cube()->hasTable("ShapeModelStatistics")) {
+      m_surfacePointSource = ControlPoint::SurfacePointSource::Basemap;
+      m_radiusSource = ControlPoint::RadiusSource::DEM;
       m_shapeType = Dem;
     }
     // Is this a level 1 or level 2?
     else {
       try {
         ProjectionFactory::CreateFromCube(*(cube()));
+        m_surfacePointSource = ControlPoint::SurfacePointSource::Basemap;
+        m_radiusSource = ControlPoint::RadiusSource::Ellipsoid;
         m_shapeType = Basemap;
       }
       catch (IException &) {
+        // TODO  Determine if unprojected shape has been bundle adjusted. Otherwise, ??
         try {
           CameraFactory::Create(*(cube()));
+          m_surfacePointSource = ControlPoint::SurfacePointSource::Reference;
+
+          PvlGroup kernels = cube()->group("Kernels");
+          if (kernels.hasKeyword("ShapeModel")) {
+            QString shapeFile = kernels["ShapeModel"]; 
+            if (shapeFile.contains("dem")) {
+              m_radiusSource = ControlPoint::RadiusSource::DEM;
+            }
+            else {
+              m_radiusSource = ControlPoint::RadiusSource::Ellipsoid;
+            }
+          }
           m_shapeType = Unprojected;
         }
-        catch (IException &) {
-          QString message = "Cannot create either Camera or Projections ";
-          message += "for the ground source file.  Check the validity of the ";
-          message += " cube labels.  The cube must either be projected or ";
-          message += " run through spiceinit.";
-          //TODO 2016-07-25 TLS  Where should info msgs go in IPCE?
+        catch (IException &e) {
+          m_surfacePointSource = ControlPoint::SurfacePointSource::None;
+          m_radiusSource = ControlPoint::RadiusSource::None;
           m_shapeType = Unknown;
+          QString message = "Cannot create either Camera or Projections "
+            "for the ground source file [" + displayProperties()->displayName() + "].  "
+            "Check the validity of the  cube labels.  The cube must either be projected or "
+            " run through spiceinit.";
+          throw IException(e, IException::Io, message, _FILEINFO_);
         }
       }
     }
 
-    if (m_shapeType == Unprojected) {
-      initCamStats();
-    }
-    else if (m_shapeType == Basemap || m_shapeType == Dem) {
-      initMapStats();
-      if (m_shapeType == Dem) {
-        initDemStats();
+    try {
+      if (m_shapeType == Unprojected) {
+        initCamStats();
       }
+      else if (m_shapeType == Basemap || m_shapeType == Dem) {
+        initMapStats();
+        if (m_shapeType == Dem) {
+          initDemStats();
+        }
+      }
+    }
+    catch (IException &e) {
+      QString message = "Cannot initialize the camera, map or dem statistics for this shape file [" +
+          displayProperties()->displayName() + "]. Check the validity of the  cube labels.  The "
+          "cube must either be projected or run through spiceinit. \n";
+      message += e.toString();
+      QMessageBox::warning((QWidget *) parent(), "Warning", message);
     }
 
     try {
       initQuickFootprint();
     }
-    catch (IException &) {
+    catch (IException &e) {
+      
     }
+  }
 
-    m_displayProperties = new ShapeDisplayProperties(FileName(m_fileName).name(), this);
 
-    m_id = new QUuid(QUuid::createUuid());
+  ControlPoint::SurfacePointSource::Source Shape::surfacePointSource() {
+    return m_surfacePointSource;
+  }
+
+
+  ControlPoint::RadiusSource::Source Shape::radiusSource() {
+    return m_radiusSource;
   }
 
 
@@ -282,7 +325,7 @@ namespace Isis {
   Cube *Shape::cube() {
     if (!m_cube) {
       try {
-        m_cube = new Cube(m_fileName); 
+        m_cube = new Cube(m_fileName);
       }
       catch (IException &e) {
         throw IException(e, IException::Programmer, "Cube cannot be created", _FILEINFO_);
@@ -337,11 +380,11 @@ namespace Isis {
 
 
   /**
-   * Get the serial number. 
-   * @return SerialNumber The cube's serial number. 
+   * Get the serial number.
+   * @return SerialNumber The cube's serial number.
    */
   QString Shape::serialNumber() {
-    return SerialNumber::Compose(*(cube()));
+    return m_serialNumber;
   }
 
   /**
@@ -617,9 +660,9 @@ namespace Isis {
   }
 
 
-  /** 
-   * TODO 
-   */ 
+  /**
+   * TODO
+   */
   void Shape::initCamStats() {
     bool hasCamStats = false;
 
@@ -634,7 +677,8 @@ namespace Isis {
           }
         }
       }
-      catch (IException &) {
+      catch (IException &e) {
+        e.print();
       }
     }
 
@@ -693,7 +737,8 @@ namespace Isis {
             m_instrumentId = obj.findGroup("Instrument")["InstrumentId"][0];
         }
       }
-      catch (IException &) {
+      catch (IException &e) {
+        e.print();
       }
     }
   }
@@ -755,7 +800,8 @@ namespace Isis {
             m_scale = obj.findGroup("Mapping")["Scale"];
         }
       }
-      catch (IException &) {
+      catch (IException &e) {
+        e.print();
       }
     }
   }
@@ -804,6 +850,7 @@ namespace Isis {
 
     stream.writeAttribute("id", m_id->toString());
     stream.writeAttribute("fileName", FileName(m_fileName).name());
+    stream.writeAttribute("serialNumber", m_serialNumber);
 
     QString type;
     if (m_shapeType == Unprojected) {
@@ -816,6 +863,10 @@ namespace Isis {
       type = "Dem";
     }
     stream.writeAttribute("shapeType", type);
+    stream.writeAttribute("surfacePointSource",
+               ControlPoint::SurfacePointSourceToString(m_surfacePointSource));
+    stream.writeAttribute("radiusSource",
+               ControlPoint::RadiusSourceToString(m_radiusSource));
 
     if (m_shapeType == Unprojected) {
       stream.writeAttribute("instrumentId", m_instrumentId);
@@ -892,6 +943,7 @@ namespace Isis {
       if (localName == "shape") {
         QString id = atts.value("id");
         QString fileName = atts.value("fileName");
+        m_shape->m_serialNumber = atts.value("serialNumber");
 
         if (!id.isEmpty()) {
           delete m_shape->m_id;
@@ -903,6 +955,14 @@ namespace Isis {
           m_shape->m_fileName = m_shapeFolder.expanded() + "/" + fileName;
         }
 
+        if (m_shape->m_serialNumber.isEmpty()) {
+          m_shape->m_serialNumber = SerialNumber::Compose(*m_shape->cube(), true);
+        }
+
+        m_shape->m_surfacePointSource =
+          ControlPoint::StringToSurfacePointSource(atts.value("surfacePointSource"));
+        m_shape->m_radiusSource =
+          ControlPoint::StringToRadiusSource(atts.value("radiusSource"));
         QString shapeType = atts.value("shapeType");
 
         if (shapeType == "Unprojected") {
@@ -1002,18 +1062,26 @@ namespace Isis {
                                      const QString &qName) {
     if (localName == "footprint" && !m_characters.isEmpty()) {
       geos::io::WKTReader wktReader(&globalFactory);
-      m_shape->m_footprint = PolygonTools::MakeMultiPolygon(
-          wktReader.read(m_characters.toStdString()));
+      try {
+        m_shape->m_footprint = PolygonTools::MakeMultiPolygon(
+            wktReader.read(m_characters.toStdString()));
+      }
+      catch (IException &e) {
+        e.print();
+      }
     }
     else if (localName == "shape" && !m_shape->m_footprint) {
-      QMutex mutex;
-      m_shape->initFootprint(&mutex);
-      m_shape->closeCube();
+      try {
+        QMutex mutex; 
+        m_shape->initFootprint(&mutex);
+        m_shape->closeCube();
+      }
+      catch (IException &e) {
+        e.print();
+      }
     }
 
     m_characters = "";
     return XmlStackedHandler::endElement(namespaceURI, localName, qName);
   }
 }
-
-
diff --git a/isis/src/qisis/objs/Shape/Shape.h b/isis/src/qisis/objs/Shape/Shape.h
index b4f4013200e8801f1500b5a760910bcdbc5af43d..e9add6d1864d0a5997610e0bc6a2a3c97f77b879 100644
--- a/isis/src/qisis/objs/Shape/Shape.h
+++ b/isis/src/qisis/objs/Shape/Shape.h
@@ -24,6 +24,7 @@
 #include <QString>
 
 #include "Angle.h"
+#include "ControlPoint.h"
 #include "Distance.h"
 #include "FileName.h"
 #include "Latitude.h"
@@ -62,10 +63,17 @@ namespace Isis {
    *
    * @author 2016-07-25 Tracie Sucharski
    *
-   * @internal 
+   * @internal
    *   @history 2016-10-21 Tracie Sucharski - Add Image to the Shape class.  This was done because
    *                          the qmos class expect Images, and we want to display a footprint of
    *                          a Shape.
+   *   @history 2018-09-10 Tracie Sucharski - Added surface point source and radius source along
+   *                          with access methods.
+   *   @history 2018-09-21 Tracie Sucharski - Serial number is composed on construction and is
+   *                          always the filename.
+   *   @history 2018-10-03 Tracie Sucharski - Fixed problem in constructor with cube being
+   *                          set before member data was initialized. Fixed the computation for
+   *                          surfacePointSource and radiusSource. References #5504.
    */
   class Shape : public QObject {
     Q_OBJECT
@@ -85,12 +93,12 @@ namespace Isis {
       PvlObject toPvl() const;
 
       bool isFootprintable() const;
-//    bool hasImage() const;
-//    Image *image();
       Cube *cube();
       void closeCube();
-      ShapeType shapeType();
+      ControlPoint::SurfacePointSource::Source surfacePointSource();
+      ControlPoint::RadiusSource::Source radiusSource();
       ShapeDisplayProperties *displayProperties();
+      ShapeType shapeType();
       const ShapeDisplayProperties *displayProperties() const;
       QString fileName() const;
       QString serialNumber();
@@ -168,7 +176,8 @@ namespace Isis {
        *   initializing because no more than a thousand of these should ever be open at once.
        */
       Cube *m_cube;
-
+      ControlPoint::SurfacePointSource::Source m_surfacePointSource;
+      ControlPoint::RadiusSource::Source m_radiusSource;
       ShapeType m_shapeType;
 
       /**
@@ -179,6 +188,10 @@ namespace Isis {
        * The on-disk file name of the cube associated with this Shape.
        */
       QString m_fileName;
+      /**
+       * This will always be simply the filename and is created on construction.
+       */
+      QString m_serialNumber;
       /**
        * Instrument id associated with this Shape.
        */
diff --git a/isis/src/qisis/objs/SortFilterProxyModel/Makefile b/isis/src/qisis/objs/SortFilterProxyModel/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/SortFilterProxyModel/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/SortFilterProxyModel/SortFilterProxyModel.cpp b/isis/src/qisis/objs/SortFilterProxyModel/SortFilterProxyModel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7272ef3902d8cc5f568c513de8a221f65c392eb1
--- /dev/null
+++ b/isis/src/qisis/objs/SortFilterProxyModel/SortFilterProxyModel.cpp
@@ -0,0 +1,97 @@
+#include "SortFilterProxyModel.h"
+
+#include <QAbstractItemModel>
+#include <QIdentityProxyModel>
+#include <QModelIndex>
+#include <QObject>
+#include <QPersistentModelIndex>
+#include <QSortFilterProxyModel>
+#include <QStandardItem>
+#include <QVariant>
+
+#include "ProjectItem.h"
+#include "ProjectItemModel.h"
+
+namespace Isis {
+
+  SortFilterProxyModel::SortFilterProxyModel(QObject *parent) :
+      QSortFilterProxyModel(parent) {
+  }
+
+
+  void SortFilterProxyModel::setSelectedItems(QList<ProjectItem *> selected){
+
+    QList<QModelIndex> selIx;
+    foreach(ProjectItem * item,selected) {
+      selIx.append(item->index() );
+
+    }
+
+    foreach(QModelIndex ix,selIx) {
+      selectedIndexRows.append(ix.row() );
+    }
+
+    selectedIndices=selIx;
+
+  }
+
+  void SortFilterProxyModel::setSourceModel(ProjectItemModel *newSourceModel) {
+     
+     QPersistentModelIndex persistentIndex(newSourceModel->index(0,0,QModelIndex()));
+    
+
+
+     if (persistentIndex.isValid()) {
+       //qDebug() << "persistent index is valid: " << persistentIndex;
+       m_root = persistentIndex;
+     }
+     else {
+       //qDebug() << "persistent index NOT valid.";
+       m_root = QPersistentModelIndex(QModelIndex());
+     }
+
+     baseModel = newSourceModel;
+     QSortFilterProxyModel::setSourceModel(newSourceModel);
+   }
+
+
+  bool SortFilterProxyModel::setRoot(const QStandardItem *item) {
+
+    m_root = QPersistentModelIndex(item->index());   
+    return true;
+
+
+  }
+
+
+  bool SortFilterProxyModel::filterAcceptsRow(int sourceRow,
+                                                        const QModelIndex &sourceParent) const {
+    bool accept(false);
+
+    if (selectedIndices.count() == 0) {
+      accept = true;
+    }
+
+    if (this->sourceModel()!=nullptr) {
+       QModelIndex ix = this->sourceModel()->index( sourceRow, 0, sourceParent );
+       if (ix.isValid() ) {
+        ProjectItem * item = baseModel->itemFromIndex(ix);
+        if (selectedIndices.contains(ix)  ) {
+           accept = true;
+         }         
+        if (item->text() == "Images" ) {
+          accept = true;
+        }
+     }//end if (ix.isValid() )
+
+  }
+  return accept;
+
+ }
+
+
+
+
+}//end namespace
+
+
diff --git a/isis/src/qisis/objs/SortFilterProxyModel/SortFilterProxyModel.h b/isis/src/qisis/objs/SortFilterProxyModel/SortFilterProxyModel.h
new file mode 100644
index 0000000000000000000000000000000000000000..9a697014f2cd96054d4590fc4e1183e9d3e77395
--- /dev/null
+++ b/isis/src/qisis/objs/SortFilterProxyModel/SortFilterProxyModel.h
@@ -0,0 +1,83 @@
+
+#ifndef SortFilterProxyModel_h
+#define SortFilterProxyModel_h
+
+/**
+ * @file
+ * $Date: 2018/06/88 16:40:33 $ $Revision: 1.0 $
+ *
+ *  Unless noted otherwise, the portions of Isis written by the USGS are public domain. See
+ *  individual third-party library and package descriptions for intellectual property information,
+ *  user agreements, and related information.
+ *
+ *  Although Isis has been used by the USGS, no warranty, expressed or implied, is made by the
+ *  USGS as to the accuracy and functioning of such software and related material nor shall the
+ *  fact of distribution constitute any such warranty, and no responsibility is assumed by the
+ *  USGS in connection therewith.
+ *
+ *  For additional information, launch $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *  in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *  http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *  http://www.usgs.gov/privacy.html.
+ */
+
+#include <QList>
+#include <QIdentityProxyModel>
+#include <QModelIndex>
+#include <QPersistentModelIndex>
+#include <QSortFilterProxyModel>
+
+class QAbstractProxyModel;
+class QObject;
+class QStandardItem;
+
+class QVariant;
+
+namespace Isis {
+
+class ProjectItem;
+class ProjectItemModel;
+
+  /**  
+   *
+   * @author 2018-06-18 Tyler Wilson
+   *
+   * @internal
+   *   @history 2018-06-18 Tyler Wilson - Original version. A proxy class for filtering data
+   *   within the JigsawSetupDialog Bundle Observation Solve Settings (BOSS) tab.
+   */
+     
+    class SortFilterProxyModel : public QSortFilterProxyModel  {
+    Q_OBJECT
+
+    public:
+      explicit SortFilterProxyModel(QObject *parent = 0);
+
+      //QModelIndex mapFromSource(const QModelIndex &sourceIndex) const Q_DECL_OVERRIDE;
+      //QModelIndex mapToSource(const QModelIndex &proxyIndex) const Q_DECL_OVERRIDE;
+
+      //void setSourceModel(ProjectItemModel *newSourceModel) Q_DECL_OVERRIDE;
+      void setSourceModel(ProjectItemModel *newSourceModel);
+
+      bool setRoot(const QStandardItem *item);
+
+      void setSelectedItems(QList<ProjectItem*> selected);
+
+
+     protected:
+       bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
+
+    private:
+      ProjectItemModel * baseModel;
+      QList<QModelIndex> selectedIndices;
+      QList<int> selectedIndexRows;
+      QPersistentModelIndex m_root;
+      QModelIndex root;
+
+
+  };
+
+};
+
+
+#endif
diff --git a/isis/src/qisis/objs/StereoTool/StereoTool.cpp b/isis/src/qisis/objs/StereoTool/StereoTool.cpp
index aed1e36bd3b53c9de87069f06a8d2d5963d21655..c87d94dbebc9b534836f13d15e486ab0a898f868 100644
--- a/isis/src/qisis/objs/StereoTool/StereoTool.cpp
+++ b/isis/src/qisis/objs/StereoTool/StereoTool.cpp
@@ -55,10 +55,10 @@ using namespace std;
 namespace Isis {
   // initialize static
 /*        !!!!   TODOS   !!!!
- 
-1.  If DEM radius comboBox, update to DEM  ,  when? 
- 
- 
+
+1.  If DEM radius comboBox, update to DEM  ,  when?
+
+
 */
 
 
@@ -300,7 +300,7 @@ namespace Isis {
     m_radiusLineEdit->setToolTip("Custom local radius used for elevation "
                                  "calculations.  To enter a value, set box to "
                                  "the left to \"Custom Radius\"");
-    text = 
+    text =
       "<b>Function: </b>Custom local radius used to calculate elevations.  "
       "This can be changed by selecting \"Custom Radius\" in the box to "
       "the left.";
@@ -591,7 +591,7 @@ namespace Isis {
     mainLayout->addLayout(buttonsLayout);
 
     helpDialog->show();
-   
+
 
   }
 
@@ -621,7 +621,7 @@ namespace Isis {
   }
 
 
-  
+
   void StereoTool::updateRadiusLineEdit() {
 
 
@@ -673,12 +673,12 @@ namespace Isis {
   void StereoTool::setupFiles() {
 
     /*   TODO
-      .5   Get vector of all linked viewports 
-       1.  If no files linked or > 2 linked, print errror & return 
-       2.  Check if new files 
+      .5   Get vector of all linked viewports
+       1.  If no files linked or > 2 linked, print errror & return
+       2.  Check if new files
           if yes:  clear old
           if no: return
-         
+
     */
     m_linkedViewports.clear();
     for (int i = 0; i < (int) cubeViewportList()->size(); i++) {
@@ -706,7 +706,7 @@ namespace Isis {
         return;
       }
     }
-     
+
     //  Control net already exists, make sure new cubes are the same target
     //  as the current control net.
     if (m_controlNet) {
@@ -803,10 +803,11 @@ namespace Isis {
       m_serialNumberList->add( m_rightCube->fileName() );
     }
 
-    std::vector<Distance> targetRadius = m_controlNet->GetTargetRadii();
-    m_targetRadius = Distance(targetRadius[0]);
-    //  If radius combo box set to ellipsoid, update the radius line edit
-    if ( !m_targetRadius.isValid() ) {
+    try {
+      PvlGroup pvlRadii = Target::radiiGroup(m_controlNet->GetTarget());
+      m_targetRadius = Distance(pvlRadii["EquatorialRadius"], Distance::Meters);
+    }
+    catch(IException &e) {
       QString message = "Could not determine target radius.";
       QMessageBox::critical(m_stereoTool,"Error",message);
       m_baseRadius = Distance(0., Distance::Meters);
@@ -904,11 +905,11 @@ namespace Isis {
       rubberBandTool()->clear();
       return;
     }
-    
+
     MdiCubeViewport *cvp = cubeViewport();
     if (cvp  == NULL)
       return;
-    
+
     QString file = cvp->cube()->fileName();
     QString sn;
     try {
@@ -1066,7 +1067,7 @@ namespace Isis {
     m_endPoint = NULL;
     rubberBandTool()->clear();
     delete m_profileDialog;
-    m_profileDialog = NULL;  
+    m_profileDialog = NULL;
   }
 
 
@@ -1374,7 +1375,7 @@ namespace Isis {
   void StereoTool::paintViewport(MdiCubeViewport *vp, QPainter *painter) {
 
     AbstractPlotTool::paintViewport(vp, painter);
-    
+
     //  Make sure we have points to draw
     if ( m_controlNet == NULL || m_controlNet->GetNumPoints() == 0 )
       return;
@@ -1391,7 +1392,7 @@ namespace Isis {
 //  }
 
     //  Get all measures for this viewport
-    QList<ControlMeasure *> measures = 
+    QList<ControlMeasure *> measures =
         m_controlNet->GetMeasuresInCube(serialNumber);
     // loop through all measures contained in this cube
     for (int i = 0; i < measures.count(); i++) {
@@ -1445,14 +1446,14 @@ namespace Isis {
 
 
 
-  /** 
+  /**
    * This method will repaint the control measures in each viewport
    * @internal
-   */    
+   */
   void StereoTool::paintAllViewports() {
 
     // Take care of drawing things on all viewPorts.
-    // Calling update will cause the Tool class to call all registered tools 
+    // Calling update will cause the Tool class to call all registered tools
     // if point has been deleted, this will remove it from the main window
     MdiCubeViewport *vp;
     for (int i = 0; i < (int) cubeViewportList()->size(); i++) {
@@ -1636,8 +1637,8 @@ namespace Isis {
       data = p.GetId() + "," +
              QString::number( apriori.GetLatitude().degrees() ) + "," +
              QString::number( apriori.GetLongitude().degrees() ) + "," +
-             QString::number( p.GetMeasure(Left)->GetDiameter(), 'f', 6 ) + 
-             "," + 
+             QString::number( p.GetMeasure(Left)->GetDiameter(), 'f', 6 ) +
+             "," +
              QString::number( p.GetMeasure(Left)->GetFocalPlaneMeasuredX(), 'f',
                               6 ) + "," +
              QString::number( p.GetMeasure(Left)->GetFocalPlaneMeasuredY(), 'f',
@@ -1650,7 +1651,7 @@ namespace Isis {
       text << data << endl;
     }
     m_currentFile.close();
-  
+
   }
 
 
@@ -1681,7 +1682,7 @@ namespace Isis {
 
 //  calculateElevation(m_startPoint);
 //  calculateElevation(m_endPoint);
-  
+
     QPointF leftStart( (*m_startPoint)[Left]->GetSample(),
                       (*m_startPoint)[Left]->GetLine() );
     QPointF leftEnd( (*m_endPoint)[Left]->GetSample(),
@@ -1739,7 +1740,7 @@ namespace Isis {
     QVector<QPointF> profileData;
     double elevation = 0.;
     double elevationError = 0.;
-    
+
     Pvl regDef = m_pointEditor->templateFileName();
     AutoReg *ar = AutoRegFactory::Create(regDef);
 
@@ -1847,11 +1848,11 @@ namespace Isis {
     QList<int> bands;
     bands.push_back(1);
     bands.push_back(1);
-    plotCurve->setSource(m_linkedViewports, rubberBandVertices, bands); 
+    plotCurve->setSource(m_linkedViewports, rubberBandVertices, bands);
     plotWindow->add(plotCurve);
-  
+
     delete m_profileDialog;
-    m_profileDialog = NULL;  
+    m_profileDialog = NULL;
 //  m_startPoint = NULL;
 //  m_endPoint = NULL;
 //  rubberBandTool()->clear();
@@ -1924,4 +1925,3 @@ namespace Isis {
 
   }
 }
-
diff --git a/isis/src/qisis/objs/StereoTool/StereoTool.h b/isis/src/qisis/objs/StereoTool/StereoTool.h
index 8be53e82d92210778f716b5ddb420f8c00319726..e2f232cea79dc7bd441de1204fd86b0afcf57d62 100644
--- a/isis/src/qisis/objs/StereoTool/StereoTool.h
+++ b/isis/src/qisis/objs/StereoTool/StereoTool.h
@@ -38,13 +38,13 @@ namespace Isis {
    *
    * @author 2011-12-07 Tracie Sucharski
    * @internal
-   *   @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis 
+   *   @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis
    *                           coding standards. References #972.
-   *   @history 2012-10-11 Debbie A. Cook, Updated to use new Target class.  References Mantis tickets 
+   *   @history 2012-10-11 Debbie A. Cook, Updated to use new Target class.  References Mantis tickets
    *                          #775 and #1114.
    *   @history 2013-05-09 Tracie Sucharski - When deleting (right button) a point, check for empty
    *                             network immediately print warning and return.  References #1493.
-   *   @history 2014-05-15 Ian Humphrey - Removed the shortcut from StereoTool to avoid conflict 
+   *   @history 2014-05-15 Ian Humphrey - Removed the shortcut from StereoTool to avoid conflict
    *                           with StretchTool shortcut. Minor corrections for coding standards.
    *                           Fixes #2086.
    *   @history 2016-04-22 Jeannie Backer - Modified to use cube labels to set
@@ -52,6 +52,8 @@ namespace Isis {
    *                           References #3892
    *   @history 2016-08-10 Jeannie Backer - Added std:: scope to vector to distinguish with boost
    *                           vectors. References #4163.
+   *   @history 2018-07-06 Jesse Mapel - Changed call to get the target radius from using the
+   *                           control network to using the Target class. Fixes #5457.
    *
    */
   class StereoTool : public AbstractPlotTool {
diff --git a/isis/src/qisis/objs/SubTreeProxyModel/Makefile b/isis/src/qisis/objs/SubTreeProxyModel/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/SubTreeProxyModel/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/SubTreeProxyModel/SubTreeProxyModel.cpp b/isis/src/qisis/objs/SubTreeProxyModel/SubTreeProxyModel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4f13dd42d5eaeea7dacd302ff53d1f5c331a23df
--- /dev/null
+++ b/isis/src/qisis/objs/SubTreeProxyModel/SubTreeProxyModel.cpp
@@ -0,0 +1,97 @@
+#include "SubTreeProxyModel.h"
+
+#include <QAbstractItemModel>
+#include <QIdentityProxyModel>
+#include <QModelIndex>
+#include <QObject>
+#include <QPersistentModelIndex>
+#include <QSortFilterProxyModel>
+#include <QStandardItem>
+#include <QVariant>
+
+#include "ProjectItem.h"
+
+namespace Isis {
+
+
+  /**
+   * @brief Constructs a SubTreeProxyModel.
+   *
+   * Constructs a SubTreeProxyModel that can be used to operate on a sub-section of the source
+   * model. By default, the sub tree will be identical to the source model. The setRoot() method
+   * can be used to specify where the subtree starts. An example of usage can be found in
+   * JigsawDialog::createObservationSolveSettingsTreeView().
+   *
+   * @param QObject *parent The parent of this SubTreeProxyModel.
+   *
+   * @see JigsawDialog::createObservationSolveSettingsTreeView()
+   * @see SubTreeProxyModel::setRoot()
+   */
+  SubTreeProxyModel::SubTreeProxyModel(QObject *parent) : QIdentityProxyModel(parent) {
+  }
+
+
+  // Returns the model index in the proxy model corresponding to the sourceIndex from the
+  // source model
+  QModelIndex SubTreeProxyModel::mapFromSource(const QModelIndex &sourceIndex) const {
+    // check if the model index corresponds to the invisible root item in source model
+    if (sourceIndex == 
+            static_cast<QStandardItemModel *>(sourceModel())->invisibleRootItem()->index()) {
+      qDebug() << "creating index for invisible root item "
+          << static_cast<QStandardItemModel *>(sourceModel())->invisibleRootItem()->index();
+      return createIndex(sourceIndex.row(), 0, sourceIndex.internalId());
+    }
+
+    // First check to see if the source index is the proxy root
+    if (sourceIndex == m_root) {
+      return createIndex(sourceIndex.row(), 0, sourceIndex.internalId());
+    }
+
+    // If the source index is a child of the proxy root, one if its ancestors IS proxy root
+    QModelIndex ancestorIndex = sourceIndex.parent();
+    while (ancestorIndex.isValid() && ancestorIndex != m_root) {
+      ancestorIndex = ancestorIndex.parent();
+    }
+    if (ancestorIndex.isValid()) {
+      return createIndex(sourceIndex.row(), 0, sourceIndex.internalId());
+    }
+    else {
+      return QModelIndex();
+    }
+  }
+
+
+  //Returns the model index in the source that corresponds to the proxy index
+  //in the proxy model
+  QModelIndex SubTreeProxyModel::mapToSource(const QModelIndex &proxyIndex) const {
+    return QIdentityProxyModel::mapToSource(proxyIndex);
+  }
+
+
+  void SubTreeProxyModel::setSourceModel(QAbstractItemModel *newSourceModel) {
+    QPersistentModelIndex persistentIndex(newSourceModel->index(0,0,QModelIndex()));
+
+    if (persistentIndex.isValid()) {
+      m_root = persistentIndex;
+    }
+    else {
+      m_root = QPersistentModelIndex(QModelIndex());
+    }
+
+    QIdentityProxyModel::setSourceModel(newSourceModel);
+  }
+
+
+  bool SubTreeProxyModel::setRoot(const QStandardItem *item) {
+    QAbstractItemModel::removeRows(1,2,item->index());
+
+    if (m_root.isValid()) {
+      return true;
+    }
+    else {
+      return false;
+    }
+  }
+
+
+}
diff --git a/isis/src/qisis/objs/SubTreeProxyModel/SubTreeProxyModel.h b/isis/src/qisis/objs/SubTreeProxyModel/SubTreeProxyModel.h
new file mode 100644
index 0000000000000000000000000000000000000000..96fe3aa60b5b799095c05c1815d60eaf3d6cae9c
--- /dev/null
+++ b/isis/src/qisis/objs/SubTreeProxyModel/SubTreeProxyModel.h
@@ -0,0 +1,57 @@
+
+#ifndef SubTreeProxyModel_h
+#define SubTreeProxyModel_h
+
+#include <QIdentityProxyModel>
+#include <QPersistentModelIndex>
+#include <QSortFilterProxyModel>
+
+class QAbstractProxyModel;
+class QObject;
+class QStandardItem;
+class QVariant;
+
+namespace Isis {
+  
+/**
+ *
+ * @author ????-??-?? Ian Humphrey
+ * @internal ????-??-?? Ian Humphrey
+ *
+ *
+ */
+
+  class SubTreeProxyModel : public QIdentityProxyModel {
+    Q_OBJECT
+
+    public:
+      explicit SubTreeProxyModel(QObject *parent = 0);
+
+      QModelIndex mapFromSource(const QModelIndex &sourceIndex) const Q_DECL_OVERRIDE;
+      QModelIndex mapToSource(const QModelIndex &proxyIndex) const Q_DECL_OVERRIDE;
+
+      void setSourceModel(QAbstractItemModel *newSourceModel) Q_DECL_OVERRIDE;
+
+      bool setRoot(const QStandardItem *item);
+
+
+      // Allow reading of the model
+      //QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+      //Qt::ItemFlags flags(const QModelIndex &index) const override;
+
+      // Allow re-sizing the model
+      //bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+
+    // Use the method below to change how filtering chooses to accept the row
+    // protected:
+      // bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
+
+    private:
+      QPersistentModelIndex m_root;
+
+  };
+
+};
+
+
+#endif
diff --git a/isis/src/qisis/objs/TableMainWindow/TableMainWindow.cpp b/isis/src/qisis/objs/TableMainWindow/TableMainWindow.cpp
index f13312e3d06c9660c5ccc679229aaea0b6a9ed64..e0f6295258868d96348613a3ac4ffc4466814910 100644
--- a/isis/src/qisis/objs/TableMainWindow/TableMainWindow.cpp
+++ b/isis/src/qisis/objs/TableMainWindow/TableMainWindow.cpp
@@ -140,6 +140,7 @@ namespace Isis {
 
     QAction *clear = new QAction(this);
     clear->setText("Clear table");
+    clear->setShortcut(Qt::CTRL + Qt::Key_Delete);
     connect(clear, SIGNAL(triggered()), this, SLOT(clearTable()));
 
     QAction *close = new QAction(this);
@@ -222,7 +223,6 @@ namespace Isis {
         destinationColumn = startCol + i;
         p_table->insertColumn(startCol + i);
       }
-
       QTableWidgetItem *header = new QTableWidgetItem(htext);
       if (insertAt >= 0) {
 
@@ -370,6 +370,10 @@ namespace Isis {
   /**
    * This method checks to see if the table has been created. If
    * not it calls the createTable method before calling show.
+   * 
+   * @history 2017-10-06 Adam Goins - showTable() now calls syncColumns() after it calls
+   *                        this->show() so that it hides the unselected columns appropriately.
+   *                        Fixes #5141.
    *
    * @history 2017-10-06 Adam Goins - showTable() now calls syncColumns() after it calls
    *                        this->show() so that it hides the unselected columns appropriately.
diff --git a/isis/src/qisis/objs/TableMainWindow/TableMainWindow.h b/isis/src/qisis/objs/TableMainWindow/TableMainWindow.h
index e7f849b2c74574bcacff517385d386074ab1637e..815af0f8411315cd5cf9112f87b1a8a44514ed66 100644
--- a/isis/src/qisis/objs/TableMainWindow/TableMainWindow.h
+++ b/isis/src/qisis/objs/TableMainWindow/TableMainWindow.h
@@ -51,6 +51,8 @@ namespace Isis {
   *                          Added resizeColumn() slot and readColumnSettings().
   *                          modified writeSettings() to write updated settings on destroy.
   *                          Fixes #5142.
+  *   @history 2018-04-20 Adam Goins - Added the ctrl+del keyboard shortcut to the TableMainWindow's
+  *                          "Clear Table" menu option. Fixes #4912.
   */
   class TableMainWindow : public MainWindow {
       Q_OBJECT
diff --git a/isis/src/qisis/objs/TargetBody/TargetBody.cpp b/isis/src/qisis/objs/TargetBody/TargetBody.cpp
index 9bbc4745ccd7ad552bd50466976250ff9f52d723..7185ab17c9b52dd964c5928707055eb2c68a7c23 100644
--- a/isis/src/qisis/objs/TargetBody/TargetBody.cpp
+++ b/isis/src/qisis/objs/TargetBody/TargetBody.cpp
@@ -28,6 +28,8 @@ TargetBody::TargetBody(Target *target, QObject *parent) : QObject(parent) {
 
     m_bodyCode = new SpiceInt;
     m_systemCode = new SpiceInt;
+    
+    m_targetName = target->name();
 
     m_systemName = target->systemName();
 
@@ -203,7 +205,15 @@ TargetBody::TargetBody(Target *target, QObject *parent) : QObject(parent) {
   const TargetBodyDisplayProperties *TargetBody::displayProperties() const {
     return m_displayProperties;
   }
-
+  
+  
+  /**
+   * @brief Returns the value stored at TargetName in the original pvl label.
+   * @return QString Returns m_targetName
+   */
+  QString TargetBody::targetName() {
+    return m_targetName;
+  }
 
 
   /**
diff --git a/isis/src/qisis/objs/TargetBody/TargetBody.h b/isis/src/qisis/objs/TargetBody/TargetBody.h
index f5fc80efaa47149de8e522dbe220494892a8d33d..94b2bef234f26eda63e1d0e74a61cf04d145e832 100644
--- a/isis/src/qisis/objs/TargetBody/TargetBody.h
+++ b/isis/src/qisis/objs/TargetBody/TargetBody.h
@@ -72,6 +72,9 @@ namespace Isis {
    *   @history 2016-06-13 Tyler Wilson - Added new documentation and corrected
    *                          formatting to be consisten with ISIS3 coding standards.
    *                          Fixes #3997 and #4018.
+   *   @hitsory 2018-07-12 Summer Stapleton - Added m_targetName and targetName() in order to 
+   *                           collect the TargetName from the original cube label for 
+   *                           comparisons related to image imports in ipce. References #5460.
    *  
    */
   class TargetBody : public QObject {
@@ -91,6 +94,7 @@ namespace Isis {
       const TargetBodyDisplayProperties *displayProperties() const;
 
       QString id() const;
+      QString targetName();
 //    void deleteFromDisk();
 
       int frameType();
@@ -167,6 +171,11 @@ namespace Isis {
        *   when saving to disk).
        */
       QUuid *m_id;
+      
+      /**
+       * The TargetName as it appears in the original cube.
+       */
+      QString m_targetName;
 
       /**
        * TODO -   RETHINK MEMBER VARIABLES AND METHODS
diff --git a/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.h b/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.h
index 5efd30e536fe5f00c5ae64ce3cd39b9d4dfedead..46c42763a7ccd51c032a709ddc25074fe0e71526 100644
--- a/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.h
+++ b/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.h
@@ -27,7 +27,9 @@ namespace Isis {
    *                           target info.  Fixes #4954.
    *   @history 2017-08-14 Summer Stapleton - Updated icons/images to properly licensed or open 
    *                           source images. Fixes #5105.
-   *
+   *   @history 2018-07-26 Tracie Sucharski - Reformated the widget to get rid of fixed sizes and
+   *                           use layouts to handle sizing instead.  Also put entire widget in
+   *                           a scrolled area.
    */
 
   class TargetInfoWidget : public QFrame {
diff --git a/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.ui b/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.ui
index 23a137856dd535e8e80f4256296ffd822eef8c1b..1c3ac7b17977695923d7bd10ead1eee06734772d 100644
--- a/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.ui
+++ b/isis/src/qisis/objs/TargetInfoWidget/TargetInfoWidget.ui
@@ -6,556 +6,549 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>420</width>
-    <height>648</height>
+    <width>463</width>
+    <height>669</height>
    </rect>
   </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>420</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>420</width>
-    <height>16777215</height>
-   </size>
-  </property>
   <property name="windowTitle">
-   <string>DockWidget</string>
+   <string>Target Information</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="targetImage">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>391</width>
-       <height>181</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>391</width>
-       <height>181</height>
-      </size>
-     </property>
-     <property name="frameShape">
-      <enum>QFrame::Panel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Sunken</enum>
-     </property>
-     <property name="lineWidth">
-      <number>2</number>
-     </property>
-     <property name="text">
-      <string/>
-     </property>
-     <property name="scaledContents">
-      <bool>false</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="bodySystemlabel">
-     <property name="text">
-      <string>System</string>
-     </property>
-    </widget>
-   </item>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeType">
-      <enum>QSizePolicy::Preferred</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>37</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>391</width>
-       <height>231</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>391</width>
-       <height>231</height>
-      </size>
-     </property>
-     <property name="tabPosition">
-      <enum>QTabWidget::South</enum>
-     </property>
-     <property name="currentIndex">
-      <number>0</number>
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="widgetResizable">
+      <bool>true</bool>
      </property>
-     <widget class="QWidget" name="tab">
-      <attribute name="title">
-       <string>Pole Position</string>
-      </attribute>
-      <widget class="QWidget" name="layoutWidget">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>10</y>
-         <width>351</width>
-         <height>191</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout">
-        <item row="1" column="0" colspan="3">
-         <widget class="QLabel" name="poleRightAscensionLabel">
-          <property name="font">
-           <font>
-            <pointsize>10</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>Now is the time for all good men to come to the aid of their countrymen</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0" colspan="2">
-         <widget class="QLabel" name="label">
-          <property name="font">
-           <font>
-            <pointsize>14</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>Right Ascension</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="2">
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item row="2" column="2">
-         <spacer name="horizontalSpacer_4">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item row="3" column="0" colspan="3">
-         <widget class="QLabel" name="poleDeclinationLabel">
-          <property name="font">
-           <font>
-            <pointsize>10</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>Now is the time for all good men to come to the aid of their countrymen</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="0" colspan="2">
-         <widget class="QLabel" name="label_2">
-          <property name="font">
-           <font>
-            <pointsize>14</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>Declination</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </widget>
-     </widget>
-     <widget class="QWidget" name="tab_2">
-      <attribute name="title">
-       <string>Prime Meridian</string>
-      </attribute>
-      <widget class="QWidget" name="layoutWidget_2">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>10</y>
-         <width>351</width>
-         <height>181</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_2">
-        <item row="1" column="0" colspan="3">
-         <widget class="QLabel" name="polePMOffsetLabel">
-          <property name="font">
-           <font>
-            <pointsize>10</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>Now is the time for all good men to come to the aid of their countrymen</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0" colspan="2">
-         <widget class="QLabel" name="label_6">
-          <property name="font">
-           <font>
-            <pointsize>14</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>Prime Meridian (W)</string>
-          </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>443</width>
+        <height>649</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QLabel" name="bodySystemlabel">
+         <property name="text">
+          <string>System</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="targetImage">
+         <property name="minimumSize">
+          <size>
+           <width>391</width>
+           <height>181</height>
+          </size>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>391</width>
+           <height>181</height>
+          </size>
+         </property>
+         <property name="frameShape">
+          <enum>QFrame::Panel</enum>
+         </property>
+         <property name="frameShadow">
+          <enum>QFrame::Sunken</enum>
+         </property>
+         <property name="lineWidth">
+          <number>2</number>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+         <property name="scaledContents">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Preferred</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>37</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QTabWidget" name="tabWidget">
+         <property name="minimumSize">
+          <size>
+           <width>391</width>
+           <height>181</height>
+          </size>
+         </property>
+         <property name="tabPosition">
+          <enum>QTabWidget::South</enum>
+         </property>
+         <property name="currentIndex">
+          <number>2</number>
+         </property>
+         <widget class="QWidget" name="tab">
+          <attribute name="title">
+           <string>Pole Position</string>
+          </attribute>
+          <widget class="QWidget" name="layoutWidget">
+           <property name="geometry">
+            <rect>
+             <x>12</x>
+             <y>13</y>
+             <width>361</width>
+             <height>181</height>
+            </rect>
+           </property>
+           <layout class="QGridLayout" name="gridLayout">
+            <item row="0" column="0" colspan="2">
+             <widget class="QLabel" name="label">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>75</weight>
+                <bold>true</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>Right Ascension</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="2">
+             <spacer name="horizontalSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="1" column="0" colspan="3">
+             <widget class="QLabel" name="poleRightAscensionLabel">
+              <property name="font">
+               <font>
+                <pointsize>10</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>Now is the time for all good men to come to the aid of their countrymen</string>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_2">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>75</weight>
+                <bold>true</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>Declination</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <spacer name="horizontalSpacer_4">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="3" column="0" colspan="3">
+             <widget class="QLabel" name="poleDeclinationLabel">
+              <property name="font">
+               <font>
+                <pointsize>10</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>Now is the time for all good men to come to the aid of their countrymen</string>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
          </widget>
-        </item>
-        <item row="0" column="2">
-         <spacer name="horizontalSpacer_6">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </widget>
-     </widget>
-     <widget class="QWidget" name="tab_3">
-      <attribute name="title">
-       <string>Radii</string>
-      </attribute>
-      <widget class="QWidget" name="layoutWidget_3">
-       <property name="geometry">
-        <rect>
-         <x>20</x>
-         <y>20</y>
-         <width>351</width>
-         <height>161</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_3">
-        <item row="0" column="2">
-         <spacer name="horizontalSpacer_11">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item row="2" column="2">
-         <widget class="QLabel" name="bRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="2">
-         <widget class="QLabel" name="meanRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="2">
-         <widget class="QLabel" name="cRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="0">
-         <widget class="QLabel" name="meanLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>mean</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="2">
-         <widget class="QLabel" name="aRadiiLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>TextLabel</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="3">
-         <widget class="QLabel" name="bRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="3">
-         <widget class="QLabel" name="meanRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="3">
-         <widget class="QLabel" name="cRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="aLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>a</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
+         <widget class="QWidget" name="tab_2">
+          <attribute name="title">
+           <string>Prime Meridian</string>
+          </attribute>
+          <widget class="QWidget" name="layoutWidget_2">
+           <property name="geometry">
+            <rect>
+             <x>12</x>
+             <y>13</y>
+             <width>341</width>
+             <height>161</height>
+            </rect>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_2">
+            <item row="0" column="0">
+             <widget class="QLabel" name="label_6">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>75</weight>
+                <bold>true</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>Prime Meridian (W)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_6">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="1" column="0" colspan="2">
+             <widget class="QLabel" name="polePMOffsetLabel">
+              <property name="font">
+               <font>
+                <pointsize>10</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>Now is the time for all good men to come to the aid of their countrymen</string>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
          </widget>
-        </item>
-        <item row="3" column="0">
-         <widget class="QLabel" name="cLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>c</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="3">
-         <widget class="QLabel" name="aRadiiUnitsLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>km</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="bLabel">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>b</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0" colspan="2">
-         <widget class="QLabel" name="label_9">
-          <property name="font">
-           <font>
-            <pointsize>16</pointsize>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
+         <widget class="QWidget" name="tab_3">
+          <attribute name="title">
            <string>Radii</string>
-          </property>
+          </attribute>
+          <widget class="QWidget" name="layoutWidget_3">
+           <property name="geometry">
+            <rect>
+             <x>20</x>
+             <y>20</y>
+             <width>351</width>
+             <height>171</height>
+            </rect>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_3">
+            <item row="0" column="2">
+             <spacer name="horizontalSpacer_11">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="2" column="2">
+             <widget class="QLabel" name="bRadiiLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>TextLabel</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="2">
+             <widget class="QLabel" name="meanRadiiLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>TextLabel</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="2">
+             <widget class="QLabel" name="cRadiiLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>TextLabel</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0">
+             <widget class="QLabel" name="meanLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>50</weight>
+                <bold>false</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>mean</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="2">
+             <widget class="QLabel" name="aRadiiLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>TextLabel</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="3">
+             <widget class="QLabel" name="bRadiiUnitsLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>km</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="3">
+             <widget class="QLabel" name="meanRadiiUnitsLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>km</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="3">
+             <widget class="QLabel" name="cRadiiUnitsLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>km</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="aLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>50</weight>
+                <bold>false</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>a</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0">
+             <widget class="QLabel" name="cLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>50</weight>
+                <bold>false</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>c</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="3">
+             <widget class="QLabel" name="aRadiiUnitsLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>km</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0">
+             <widget class="QLabel" name="bLabel">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+                <weight>50</weight>
+                <bold>false</bold>
+               </font>
+              </property>
+              <property name="text">
+               <string>b</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="0" colspan="2">
+             <widget class="QLabel" name="label_9">
+              <property name="font">
+               <font>
+                <pointsize>14</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>Radii</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
          </widget>
-        </item>
-       </layout>
-      </widget>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_10">
+         <property name="text">
+          <string>where</string>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Preferred</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>37</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_7">
+         <property name="text">
+          <string>T = interval in Julien centuries (of 36525 days) from the standard epoch.</string>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_11">
+         <property name="text">
+          <string>d = interval in days from the standard epoch.</string>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_12">
+         <property name="text">
+          <string>Standard epoch:JD 2451545.0 (2000 Jan 1 12 hours TDB)</string>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
      </widget>
     </widget>
    </item>
-   <item>
-    <widget class="QLabel" name="label_10">
-     <property name="text">
-      <string>where</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <spacer name="verticalSpacer_2">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>37</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_7">
-     <property name="text">
-      <string>T = interval in Julien centuries (of 36525 days) from the standard epoch.</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_11">
-     <property name="text">
-      <string>d = interval in days from the standard epoch.</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_12">
-     <property name="text">
-      <string>Standard epoch:JD 2451545.0 (2000 Jan 1 12 hours TDB)</string>
-     </property>
-    </widget>
-   </item>
   </layout>
  </widget>
  <resources/>
diff --git a/isis/src/qisis/objs/Template/Makefile b/isis/src/qisis/objs/Template/Makefile
new file mode 100755
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/Template/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/Template/Template.cpp b/isis/src/qisis/objs/Template/Template.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..bcf2ab1e7a11f621700728bc1f7ff4e5c8dd6e18
--- /dev/null
+++ b/isis/src/qisis/objs/Template/Template.cpp
@@ -0,0 +1,167 @@
+#include "Template.h"
+
+#include <QFile>
+
+#include "FileName.h"
+#include "IException.h"
+#include "Project.h"
+#include "XmlStackedHandlerReader.h"
+
+namespace Isis{
+  /**
+   * Create a Template from template file's name.
+   *
+   * @param fileName The name of the template file on disk
+   * @param templateType The type of template being imported (Options are maps or registrations)
+   * @param importName The name of the TemplateList this Template is imported in
+   * @param parent The Qt-relationship parent
+   */
+  Template::Template(QString fileName, QString templateType, QString importName, QObject *parent) : QObject(parent) {
+    m_fileName = fileName;
+    m_templateType = templateType;
+    m_importName = importName;
+
+  }
+
+  /**
+   * Construct this template from XML.
+   *
+   * @param templateFolder Location of template xml
+   * @param xmlReader An XML reader that's up to an <template/> tag.
+   * @param parent The Qt-relationship parent
+   */
+  Template::Template(FileName templateFolder, XmlStackedHandlerReader *xmlReader, QObject *parent) :
+      QObject(parent) {
+    xmlReader->pushContentHandler(new XmlHandler(this, templateFolder));
+  }
+
+
+  /**
+   * Destroys Template object.
+   */
+  Template::~Template() {
+  }
+
+
+  /**
+   * @brief Get the file name that this Template represents.
+   * @return @b QString A string containing the path to the template file associated.
+   */
+  QString Template::fileName() const {
+    return m_fileName;
+  }
+
+
+  /**
+   * @brief Get the type of template
+   * @return @b QString The name of the directory to find this file under "templates".
+   */
+  QString Template::templateType() const {
+    return m_templateType;
+  }
+
+
+  /**
+   * @brief Get the name of the TemplateList this file was imported under.
+   * @return @b QString A string containing TemplateList's name.
+   */
+  QString Template::importName() const {
+    return m_importName;
+  }
+
+
+  /**
+   * @brief Change the file name for this template to be where it now is with
+   * the given project.
+   * @param project The project that this file is stored in.
+   */
+  void Template::updateFileName(Project *project) {
+    m_fileName = project->templateRoot() + "/" + m_templateType + "/" + m_importName +"/" + FileName(m_fileName).name();
+  }
+
+
+  /**
+   * Delete the template from disk.
+   *
+   * @throws IException::Io  "Could not remove file."
+   */
+  void Template::deleteFromDisk() {
+    if (!QFile::remove(m_fileName)) {
+      throw IException(IException::Io,
+                       tr("Could not remove file [%1]").arg(m_fileName),
+                       _FILEINFO_);
+    }
+  }
+
+
+  /**
+   * Method to write this Template object's member data to an XML stream.
+   *
+   * @param stream The stream to which the Template will be saved.
+   * @param project The Project to which this Template will be added.
+   * @param newProjectRoot The location of the project root directory.
+   *
+   */
+  void Template::save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot)
+      const {
+        stream.writeStartElement("template");
+        stream.writeAttribute("fileName", FileName(m_fileName).name());
+        stream.writeAttribute("templateType", m_templateType);
+        stream.writeAttribute("importName", m_importName);
+        stream.writeEndElement();
+
+  }
+
+
+  /**
+   * Constructor for the Template object's XmlHandler
+   *
+   * @param currentTemplate A pointer to the Template object.
+   * @param templateFolder The name of the folder for the Template xml
+   *
+   */
+  Template::XmlHandler::XmlHandler(Template *currentTemplate, FileName templateFolder) {
+    m_xmlHandlerTemplate = currentTemplate;
+    m_xmlHandlerTemplateFolderName = templateFolder;
+  }
+
+
+  /**
+   * Method to read the given XML formatted attribute for a Template object
+   * into the XmlHandler.
+   *
+   * @param namespaceURI ???
+   * @param localName The keyword name given to the member variable in the XML.
+   * @param qName ???
+   * @param atts The attribute containing the keyword value for the given
+   *             localName.
+   *
+   * @return @b bool Indicates whether the localName is recognized.
+   */
+  bool Template::XmlHandler::startElement(const QString &namespaceURI, const QString &localName,
+                                         const QString &qName, const QXmlAttributes &atts) {
+    if (XmlStackedHandler::startElement(namespaceURI, localName, qName, atts)) {
+      if (localName == "template") {
+        QString fileName = atts.value("fileName");
+        QString templateType = atts.value("templateType");
+        QString importName = atts.value("importName");
+
+        if (!fileName.isEmpty()) {
+          m_xmlHandlerTemplate->m_fileName = m_xmlHandlerTemplateFolderName.expanded() 
+                                             + "/" + templateType 
+                                             + "/" + importName
+                                             + "/" + fileName;
+        }
+        
+        if (!templateType.isEmpty()) {
+          m_xmlHandlerTemplate->m_templateType = templateType;
+        }
+        
+        if (!importName.isEmpty()) {
+          m_xmlHandlerTemplate->m_importName = importName;
+        }
+      }
+    }
+    return true;
+  }
+}
diff --git a/isis/src/qisis/objs/Template/Template.h b/isis/src/qisis/objs/Template/Template.h
new file mode 100755
index 0000000000000000000000000000000000000000..cebd8946b63f4e83e00931fd276a22a6c86de13e
--- /dev/null
+++ b/isis/src/qisis/objs/Template/Template.h
@@ -0,0 +1,96 @@
+#ifndef Template_H
+#define Template_H
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+ #include <QObject>
+ #include <QString>
+ #include <QXmlStreamWriter>
+
+ #include "FileName.h"
+ #include "XmlStackedHandler.h"
+
+ namespace Isis {
+   class FileName;
+   class Project;
+
+   /**   
+    * @author 2017-11-01 Christopher Combs
+    * @internal
+    *   @history 2017-11-01 Christopher Combs -  This represents an ISIS template in a
+    *                       project-based GUI interface.  This encapsulates ideas about a
+    *                       template such as it's filename and import name.
+    */
+   class Template : public QObject {
+     Q_OBJECT
+
+   public:
+     explicit Template(QString fileName, QString templateType, QString importName, QObject *parent = 0);
+     Template(FileName templateFolder, XmlStackedHandlerReader *xmlReader, QObject *parent = 0);
+     ~Template();
+
+     QString importName() const;
+     QString fileName() const;
+     QString templateType() const;
+
+     void deleteFromDisk();
+     void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
+
+   public slots:
+     void updateFileName(Project * project);
+
+   private:
+     /**     
+      * @author ????-??-?? Steven Lambright
+      *
+      * @internal
+      *   @history ????-??-?? Steven Lambright -  Nested class used to write the Template object
+      *                             information to an XML file for the purpose of saving and
+      *                             restoring the state of the project.
+      */
+     class XmlHandler : public XmlStackedHandler {
+       public:
+         XmlHandler(Template *currentTemplate, FileName templateFolder);
+
+         virtual bool startElement(const QString &namespaceURI, const QString &localName,
+                                   const QString &qName, const QXmlAttributes &atts);
+
+       private:
+         Q_DISABLE_COPY(XmlHandler);
+
+         Template *m_xmlHandlerTemplate;        /**< A pointer to the Template object to be read or
+                                                   written.*/
+         FileName m_xmlHandlerTemplateFolderName; /**< The name of the folder for the template xml.*/
+     };
+
+   private:
+     QString m_fileName; // File name of the template associated with this object
+     QString m_templateType; // Type of template (maps/registrations)
+     QString m_importName; // Name of TemplateList this was imported in
+
+   };
+ }
+
+Q_DECLARE_METATYPE(Isis::Template *);
+
+ #endif
diff --git a/isis/src/qisis/objs/TemplateEditorWidget/Makefile b/isis/src/qisis/objs/TemplateEditorWidget/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateEditorWidget/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.cpp b/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ee4311e823b173b2fca7774687e4614aff60fe63
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.cpp
@@ -0,0 +1,181 @@
+#include "TemplateEditorWidget.h"
+#include "ui_TemplateEditorWidget.h"
+
+#include "Directory.h"
+#include "IException.h"
+#include "Template.h"
+
+#include <QCheckBox>
+#include <QCloseEvent>
+#include <QDir>
+#include <QFileDialog>
+#include <QMessageBox>
+
+namespace Isis {
+
+
+  TemplateEditorWidget::TemplateEditorWidget(Template* currentTemplate, Directory *directory,
+                                             QWidget *parent) : m_ui(new Ui::TemplateEditorWidget) {
+    m_ui->setupUi(this);
+    m_template = currentTemplate;
+    m_directory = directory;
+    m_fileType = m_template->templateType();
+    m_textChanged = false;
+
+    QFile templateFile(m_template->fileName());
+    templateFile.open(QFile::ReadOnly | QFile::Text);
+    QTextStream textStream(&templateFile);
+    m_ui->templateTextEdit->setText(textStream.readAll());
+    templateFile.close();
+
+    connect(m_ui->templateTextEdit, SIGNAL(textChanged()), this, SLOT(textChanged()));
+    connect(m_ui->templateTextSave, SIGNAL (released()),this, SLOT (saveText()));
+    connect(m_ui->templateTextSaveAs, SIGNAL (released()),this, SLOT (saveAsText()));
+
+  }
+
+
+  TemplateEditorWidget::~TemplateEditorWidget() {
+    
+    saveOption();
+    
+    delete m_ui;
+  }
+
+
+  /**
+  * @brief Called when a user clicks the "Save" button
+  *
+  */
+  void TemplateEditorWidget::saveText() {
+    //We create a new QFile just in case the template's file name has changed
+    QFile templateFile(m_template->fileName());
+
+    if (templateFile.open(QFile::WriteOnly | QFile::Text)) {
+      templateFile.resize(0);
+      templateFile.write(m_ui->templateTextEdit->toPlainText().toUtf8());
+      templateFile.close();
+    }
+    
+    m_textChanged = false;
+  }
+
+  
+  /**
+  * @brief Called when a user clicks the "Save As" button
+  *
+  */
+  void TemplateEditorWidget::saveAsText() {
+
+    // Create a filedialog for the user to choose a save location and name as well as whether they 
+    // would like to import the saved template file into the project.
+    QFileDialog *fileDialog = new QFileDialog(qobject_cast<QWidget *>(parent()), 
+                                                            "Save Template File");
+    QGridLayout *layout = static_cast<QGridLayout*>(fileDialog->layout());
+    QCheckBox *checkbox = new QCheckBox(this);
+    checkbox->setText("Automatically Import Template File on Save");
+    checkbox->setCheckState(Qt::Checked);
+    layout->addWidget( checkbox );
+    
+    fileDialog->setAcceptMode(QFileDialog::AcceptSave);
+    fileDialog->setDirectory(QDir::currentPath());
+    if (m_fileType == "maps") {
+      fileDialog->setNameFilter("Maps (*.map);;All Files (*)");
+    }
+    else if (m_fileType == "registrations") {
+      fileDialog->setNameFilter("Registrations (*.def);;All Files (*)");
+    }
+    fileDialog->exec();
+
+    // Simply return if the user cancelled the save
+    if (!fileDialog->result()){
+      return;
+    }
+
+    // Add file extension based on selected filter if extension not provided, defaulting to ".def"
+    // or ".map", respectively.
+    QString extension = fileDialog->selectedNameFilter().split("(")[1].mid(1, 4);
+    
+    if (QString::compare(extension, ".def") == 0 || QString::compare(extension, ".map") == 0) {
+      fileDialog->setDefaultSuffix(extension);
+    }
+    else {
+      if (m_fileType == "maps") {
+        fileDialog->setDefaultSuffix(".map");
+      }
+      else if (m_fileType == "registrations") {
+        fileDialog->setDefaultSuffix(".def");
+      }
+    }
+    QString templateFileName = fileDialog->selectedFiles().first();
+
+    // Write the file out
+    QFile templateFile(templateFileName);
+    if (templateFile.open(QFile::WriteOnly | QFile::Text)) {
+      templateFile.resize(0);
+      templateFile.write(m_ui->templateTextEdit->toPlainText().toUtf8());
+      templateFile.close();
+    } 
+    
+    // Import the newly created template file to the project if user checked the optional checkbox.
+    if (checkbox->checkState()) {
+      if (templateFile.exists()) {
+        QDir templateFolder = m_directory->project()->addTemplateFolder(m_fileType + "/import");
+        
+        TemplateList *templateList = new TemplateList(templateFolder.dirName(), m_fileType, m_fileType 
+                                                      + "/" + templateFolder.dirName() );
+            
+        QFile::copy(templateFileName, templateFolder.path() + "/" + templateFileName.split("/").last());
+        templateList->append(new Template(templateFolder.path() + "/" 
+                             + templateFileName.split("/").last(), 
+                             m_fileType, 
+                             templateFolder.dirName()));
+
+        m_directory->project()->addTemplates(templateList);
+        m_directory->project()->setClean(false);
+      }
+      else {
+        throw IException(IException::Io,
+                         QString("Could not import file [%1]").arg(templateFileName),
+                         _FILEINFO_);      }
+    }
+
+    m_textChanged = false;
+  }
+  
+  
+  /**
+  * @brief Slot called when text within widget has been changed
+  *
+  */
+  void TemplateEditorWidget::textChanged() {
+    m_textChanged = true;
+  }
+
+  
+  /**
+  * @brief This slot is called when the widget is closed (either via the widget itself or on 
+  *        project close).
+  *
+  */
+  void TemplateEditorWidget::saveOption() {
+
+    if (m_textChanged) {
+      QMessageBox *box = new QMessageBox(QMessageBox::NoIcon, QString("Current Template Has Unsaved Changes"),
+                             QString("Would you like to save your current template?"),
+                             NULL, qobject_cast<QWidget *>(parent()), Qt::Dialog);
+      QPushButton *save = box->addButton("Save", QMessageBox::AcceptRole);
+      box->addButton("Don't Save", QMessageBox::RejectRole);
+      QPushButton *cancel = box->addButton("Cancel", QMessageBox::NoRole);
+      box->exec();
+  
+      if (box->clickedButton() == (QAbstractButton*)cancel) {
+        return;
+      }
+      else if (box->clickedButton() == (QAbstractButton*)save) {
+        saveAsText();
+      }
+    }
+    m_textChanged = false;
+  }
+}
diff --git a/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.h b/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..6370fa65cf8bafa995eefc834ce949b7df77f1a7
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.h
@@ -0,0 +1,61 @@
+#ifndef TemplateEditorWidget_H
+#define TemplateEditorWidget_H
+
+#include <QFile>
+#include <QFrame>
+#include <QPushButton>
+#include <QString>
+#include <QTextEdit>
+#include <QTextStream>
+
+namespace Ui {
+  class TemplateEditorWidget;
+}
+
+namespace Isis {
+  class Directory;
+  class Template;
+
+  /**
+   * @brief Widget for displaying information about a target
+   *
+   * @author 2017-12-05 Christopher Combs
+   *
+   * @internal
+   *   @history 2017-12-05 Christopher Combs - Original version.
+   *   @history 2018-07-07 Summer Stapleton - Implemented the SaveAs option in the widget. This 
+   *                          allows a user to save the file externally to the project as well as
+   *                          to immediately import the template with a simple checkbox in the
+   *                          filedialog. Users are also prompted to save if there have been 
+   *                          changes made to the template file since saving if the widget or the 
+   *                          ipce main window is closed.
+   *
+   */
+
+   class TemplateEditorWidget : public QFrame {
+     Q_OBJECT
+
+     public:
+       explicit TemplateEditorWidget(Template * currentTemplate, Directory *directory, QWidget *parent = 0);
+
+       ~TemplateEditorWidget();
+
+     public slots:
+       void saveText();
+       void saveAsText();
+       void saveOption();
+       void textChanged();
+
+     private:
+       Ui::TemplateEditorWidget *m_ui;
+
+       Directory *m_directory;  // The directory of the open project
+       Template *m_template;    // The template being modified
+       QString m_fileType;      // The file type of the template ("Maps" or "Registrations")
+       bool m_textChanged;      // Whether the text in the widget has been changed since last save
+   };
+}
+
+
+
+#endif
diff --git a/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.ui b/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.ui
new file mode 100644
index 0000000000000000000000000000000000000000..151ae1fb8fa0adbacd703045e12459be4881c5e5
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateEditorWidget/TemplateEditorWidget.ui
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TemplateEditorWidget</class>
+ <widget class="QFrame" name="TemplateEditorWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>0</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>420</width>
+    <height>16777215</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>DockWidget</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+      <widget class="QTextEdit" name="templateTextEdit">
+       <property name="font">
+        <font>
+         <pointsize>10</pointsize>
+        </font>
+       </property>
+
+      </widget>
+    </item>
+    <item>
+      <widget class="QPushButton" name="templateTextSave">
+        <property name="text">
+         <string> Save Changes </string>
+        </property>
+      </widget>
+    </item>
+    <item>
+      <widget class="QPushButton" name="templateTextSaveAs">
+        <property name="text">
+         <string> Save Changes As... </string>
+        </property>
+      </widget>
+    </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/isis/src/qisis/objs/TemplateList/Makefile b/isis/src/qisis/objs/TemplateList/Makefile
new file mode 100755
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateList/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/TemplateList/TemplateList.cpp b/isis/src/qisis/objs/TemplateList/TemplateList.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..c0f9b41946fabda4e7e15ed0c37a207bc38181f6
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateList/TemplateList.cpp
@@ -0,0 +1,353 @@
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include "TemplateList.h"
+#include <QDir>
+
+#include "FileName.h"
+#include "IException.h"
+#include "Project.h"
+#include "XmlStackedHandlerReader.h"
+
+namespace Isis {
+  /**
+   * Create a template from a file name, type, and path.
+   *
+   * @param name The TemplateList's name (i.e. import1, import2, ...)
+   * @param type The TemplateList's folder name (i.e. maps, registrations, ...)
+   * @param path Path to the TemplateList's folder from the template root
+   * @param parent The Qt-relationship parent
+   */
+  TemplateList::TemplateList(QString name, QString type, QString path, QObject *parent) : QObject(parent){
+    m_name = name;
+    m_path = path;
+    m_type = type;
+  }
+  
+  
+  /**
+   * Creates a blank template list.
+   *
+   * @param parent The Qt-relationship parent.
+   */
+  TemplateList::TemplateList(QObject *parent) : QObject(parent) {
+  }
+
+
+  /**
+   * Copy constructor.
+   *
+   * @param other The TemplateList to copy
+   */
+  TemplateList::TemplateList(const TemplateList &other) :
+      QList<Template *>(other) {
+    m_path = other.m_path;
+    m_name = other.m_name;
+    m_type = other.m_type;
+  }
+
+
+  /**
+   * Create an TemplateList from XML
+   *
+   * @param project The project with the TemplateList
+   * @param xmlReader The XML reader currently at an <templateList /> tag.
+   * @param parent The Qt-relationship parent
+   */
+  TemplateList::TemplateList(Project *project, XmlStackedHandlerReader *xmlReader, QObject *parent) :
+      QObject(parent) {
+    xmlReader->pushContentHandler(new XmlHandler(this, project));
+  }
+
+
+  /**
+   * Destructor.
+   */
+  TemplateList::~TemplateList() {
+    // At the moment, this only occurs during an ImportTemplateWorkOrder undo, where it is handled
+  }
+
+
+  /**
+   * Get the human-readable name of this TemplateList
+   *
+   * @return @b QString The name of the TemplateList.
+   */
+  QString TemplateList::name() const{
+    return m_name;
+  }
+
+
+  /**
+   * Get the type of template in this TemplateList
+   *
+   * @return @b QString The type of template found in this TemplateList.
+   */
+  QString TemplateList::type() const{
+    return m_type;
+  }
+
+
+  /**
+   * Get the path to these Templates in the TemplateList (relative to project root).
+   *
+   * @return @b QString The path to the Templates in the TemplateList.
+   */
+  QString TemplateList::path() const{
+    return m_path;
+  }
+
+
+  /**
+   * Set the human-readable name of this TemplateList.
+   *
+   * @param newName The name to give this TemplateList
+   */
+  void TemplateList::setName(QString newName) {
+    m_name = newName;
+  }
+
+
+  /**
+   * Set the type of template for of this TemplateList.
+   *
+   * @param newType The type to give this TemplateList
+   */
+  void TemplateList::setType(QString newType) {
+    m_type = newType;
+  }
+
+
+  /**
+   * Set the relative path (from the project root) to this TemplateList's folder.
+   *
+   * @param newPath The path to the templates in this TemplateList
+   */
+  void TemplateList::setPath(QString newPath) {
+    m_path = newPath;
+  }
+
+
+  /**
+   * Delete all of the contained Templates from disk
+   *
+   * @param project Project to delete templates from
+   *
+   * @see Template::deleteFromDisk()
+   */
+  void TemplateList::deleteFromDisk(Project *project) {
+    foreach (Template *currentTemplate, *this) {
+      currentTemplate->deleteFromDisk();
+    }
+
+    if (!m_path.isEmpty()) {
+      QFile::remove(project->templateRoot() + "/" + m_path + "/templates.xml");
+
+      QDir dir;
+      dir.rmdir(project->templateRoot() + "/" + m_path);
+    }
+  }
+
+
+  /**
+   * Convert this TemplateList into XML format for saving/restoring capabilities.
+   *
+   * This writes:
+   * <pre>
+   *   <templateList name="..." type= "..." path="..."/>
+   * </pre>
+   * to the given xml stream, and creates an 'templates.xml' inside the folder with the templates.
+   * Inside the templates.xml, this writes:
+   *
+   * <pre>
+   *   <templates>
+   *     ...
+   *   </templates>
+   * </pre>
+   *
+   * @param stream XML stream that contains the TemplateList data
+   * @param project Project to save TemplateList from
+   * @param newProjectRoot Filename root to save TemplateList to
+   *
+   * @throws IException::Io "Unable Failed to create directory"
+   * @throws IException::Io "Unable to save template information, could not be opened for writing"
+   */
+  void TemplateList::save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot)
+      const {
+    
+    if (m_type == "maps") {
+      stream.writeStartElement("mapTemplateList");
+    }
+    else if (m_type == "registrations") {
+      stream.writeStartElement("regTemplateList");
+    }
+    else {
+      throw IException(IException::Io,
+                       QString("Attempting to save unsupported template file type: [%1]").arg(m_type),
+                       _FILEINFO_);
+    }
+    stream.writeAttribute("name", m_name);
+    stream.writeAttribute("type", m_type);
+    stream.writeAttribute("path", m_path);
+
+    FileName settingsFileName(Project::templateRoot(newProjectRoot.toString()) 
+                              + "/" + m_type + "/" + m_name + "/templates.xml");
+
+    if (!settingsFileName.dir().mkpath(settingsFileName.path())) {
+      throw IException(IException::Io,
+                       QString("Failed to create directory [%1]").arg(settingsFileName.path()),
+                       _FILEINFO_);
+    }
+
+    QFile templateListContentsFile(settingsFileName.toString());
+
+    if (!templateListContentsFile.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
+      throw IException(IException::Io,
+          QString("Unable to save template information for [%1] because [%2] could not be opened "
+                  "for writing")
+            .arg(m_name).arg(settingsFileName.original()),
+          _FILEINFO_);
+    }
+
+    QXmlStreamWriter templateDetailsWriter(&templateListContentsFile);
+    templateDetailsWriter.setAutoFormatting(true);
+    templateDetailsWriter.writeStartDocument();
+    templateDetailsWriter.writeStartElement("templates");
+
+    foreach (Template *currentTemplate, *this) {
+      currentTemplate->save(templateDetailsWriter, project, newProjectRoot);
+
+      QString newPath = newProjectRoot.toString() + "/templates/" + m_type + "/" + m_name;
+
+      if (currentTemplate->fileName() !=
+          newPath + "/" + FileName(currentTemplate->fileName()).name()) {
+        QFile::copy(currentTemplate->fileName(),
+                    newPath + "/" + FileName(currentTemplate->fileName()).name() );
+      }
+    }
+
+    templateDetailsWriter.writeEndElement();
+    templateDetailsWriter.writeEndDocument();
+
+    stream.writeEndElement();
+  }
+
+
+  /**
+   * Create an XML Handler (reader/writer) that can populate the TemplateList class data. See
+   * TemplateList::save() for the expected format.
+   *
+   * @param templateList The template list we're going to be initializing
+   * @param project The project that contains the TemplateList
+   */
+  TemplateList::XmlHandler::XmlHandler(TemplateList *templateList, Project *project) {
+    m_templateList = templateList;
+    m_project = project;
+  }
+
+
+  /**
+   * Handle an XML start element. This expects <templateList/> and <template/> elements (it reads both
+   * the project XML and the templates.xml file).
+   *
+   * @param namespaceURI ???
+   * @param localName The keyword name given to the member variable in the XML
+   * @param qName ???
+   * @param atts The attribute containing the keyword value given for the given localName
+   *
+   * @return @b bool If we should continue reading the XML (usually true).
+   */
+  bool TemplateList::XmlHandler::startElement(const QString &namespaceURI, const QString &localName,
+                                           const QString &qName, const QXmlAttributes &atts) {
+    if (XmlStackedHandler::startElement(namespaceURI, localName, qName, atts)) {
+      if (localName == "mapTemplateList" || localName == "regTemplateList") {
+        QString name = atts.value("name");
+        QString type = atts.value("type");
+        QString path = atts.value("path");
+
+        if (!name.isEmpty()) {
+          m_templateList->setName(name);
+        }
+
+        if (!type.isEmpty()) {
+          m_templateList->setType(type);
+        }
+        
+        if (!path.isEmpty()) {
+          m_templateList->setPath(path);
+        }
+      }
+      else if (localName == "template") {
+        m_templateList->append(new Template(m_project->templateRoot(), reader()));
+      }
+    }
+
+    return true;
+  }
+
+
+  /**
+   * Handle an XML end element. This handles <templateList /> by opening and reading the templates.xml
+   * file.
+   *
+   * @param namespaceURI ???
+   * @param localName The keyword name given to the member variable in the XML
+   * @param qName ???
+   *
+   * @return @b bool If we should continue reading the XML (usually true).
+   *
+   * @throws IException::Io "Unable to open with read access"
+   * @throws IException::Io "Failed to open TemplateList XML"
+   */
+  bool TemplateList::XmlHandler::endElement(const QString &namespaceURI, const QString &localName,
+                                           const QString &qName) {
+    if (localName == "mapTemplateList" || localName == "regTemplateList") {
+      XmlHandler handler(m_templateList, m_project);
+
+      XmlStackedHandlerReader reader;
+      reader.pushContentHandler(&handler);
+      reader.setErrorHandler(&handler);
+
+      QString templateListXmlPath = m_project->templateRoot() + "/" + m_templateList->type() + "/" 
+                                    + m_templateList->name() + "/templates.xml";
+      templateListXmlPath = QDir::cleanPath(templateListXmlPath);
+      
+      QFile file(templateListXmlPath);
+
+      if (!file.open(QFile::ReadOnly)) {
+        throw IException(IException::Io,
+                         QString("Unable to open [%1] with read access")
+                           .arg(templateListXmlPath),
+                         _FILEINFO_);
+      }
+
+      QXmlInputSource xmlInputSource(&file);
+      if (!reader.parse(xmlInputSource))
+        throw IException(IException::Io,
+                         tr("Failed to open TemplateList XML [%1]").arg(templateListXmlPath),
+                         _FILEINFO_);
+    }
+
+    return XmlStackedHandler::endElement(namespaceURI, localName, qName);
+  }
+}
diff --git a/isis/src/qisis/objs/TemplateList/TemplateList.h b/isis/src/qisis/objs/TemplateList/TemplateList.h
new file mode 100755
index 0000000000000000000000000000000000000000..71bd34927d1a54ecbd0dd323efd65f83ee38c711
--- /dev/null
+++ b/isis/src/qisis/objs/TemplateList/TemplateList.h
@@ -0,0 +1,104 @@
+#ifndef TemplateList_H
+#define TemplateList_H
+/**
+ * @file
+ * $Revision: 1.19 $
+ * $Date: 2010/03/22 19:44:53 $
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+
+#include <QDebug>
+#include <QList>
+#include <QMetaType>
+#include <QObject>
+
+#include "Project.h"
+#include "Template.h"
+
+
+ namespace Isis {
+
+   /**    
+    *
+    * @author 2017-11-01 Christopher Combs
+    *
+    * @internal
+    *   @history 2017-11-01 Christopher Combs - Maintains a list of Templates so that templates
+    *                           can easily be copied from one Project to another, saved to disk, or
+    *                           deleted from disk. Adapted from ControlList.
+    *   @history 2018-07-07 Summer Stapleton - Fixed a few errors in how the xmlhandling was 
+    *                           occuring and added additional handling of separating map templates
+    *                           from registration templates to reflect chagnes in Project.cpp.
+    */
+   class TemplateList : public QObject, public QList<Template *> {
+     Q_OBJECT
+
+     public:
+       TemplateList(QString name, QString type, QString path, QObject *parent = NULL);
+       explicit TemplateList(QObject *parent = NULL);
+       explicit TemplateList(Project *project, XmlStackedHandlerReader *xmlReader,
+                            QObject *parent = NULL);
+       TemplateList(const TemplateList &);
+       ~TemplateList();
+
+       QString name() const;
+       QString type() const;
+       QString path() const;
+
+       void setName(QString newName);
+       void setType(QString newType);
+       void setPath(QString newPath);
+
+       void deleteFromDisk(Project *project);
+       void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
+
+     private:
+       QString m_path;
+       QString m_name;
+       QString m_type;
+
+       /**
+        *
+        * @author 2017-11-01 Christopher Combs
+        * @internal
+        *   @history 2017-11-01 Christopher Combs - Maintains a list of Templates so that templates
+        *     can easily be copied from one Project to another, saved to disk, or deleted from disk.
+        *     Adapted from ControlList.
+        */
+       class XmlHandler : public XmlStackedHandler {
+
+         public:
+           XmlHandler(TemplateList *templateList, Project *project);
+
+           virtual bool startElement(const QString &namespaceURI, const QString &localName,
+                                     const QString &qName, const QXmlAttributes &atts);
+           virtual bool endElement(const QString &namespaceURI, const QString &localName,
+                                   const QString &qName);
+
+         private:
+           Q_DISABLE_COPY(XmlHandler);
+
+           TemplateList *m_templateList; //!< TemplateList to be read or written
+           Project *m_project; //!< Project that contains the template list
+       };
+
+   };
+ }
+
+#endif
diff --git a/isis/src/qisis/objs/ViewSubWindow/Makefile b/isis/src/qisis/objs/ViewSubWindow/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82
--- /dev/null
+++ b/isis/src/qisis/objs/ViewSubWindow/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.objs
+endif
\ No newline at end of file
diff --git a/isis/src/qisis/objs/ViewSubWindow/ViewSubWindow.cpp b/isis/src/qisis/objs/ViewSubWindow/ViewSubWindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a361743839df70c4c6519e8aa1a844d4306ff79b
--- /dev/null
+++ b/isis/src/qisis/objs/ViewSubWindow/ViewSubWindow.cpp
@@ -0,0 +1,54 @@
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include "ViewSubWindow.h"
+
+namespace Isis {
+    
+  /**
+   * Constructs a ViewSubWindow object
+   */
+  ViewSubWindow::ViewSubWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
+    
+  }
+
+
+  /**
+   *  Destructor
+   */
+  ViewSubWindow::~ViewSubWindow() {
+      
+  }
+
+
+
+  /**
+   * This emits a signal on close so that we can handle removing the window from the
+   *
+   * @param event
+   */
+  void ViewSubWindow::closeEvent(QCloseEvent *event) {
+    emit closeWindow();
+    QMainWindow::closeEvent(event);
+  }
+}
+
diff --git a/isis/src/qisis/objs/ViewSubWindow/ViewSubWindow.h b/isis/src/qisis/objs/ViewSubWindow/ViewSubWindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..6ab67388f7ffa3439dfd3fdb6f00d248dbe03877
--- /dev/null
+++ b/isis/src/qisis/objs/ViewSubWindow/ViewSubWindow.h
@@ -0,0 +1,57 @@
+#ifndef ViewSubWindow_h
+#define ViewSubWindow_h
+/**
+ * @file
+ * $Date$
+ * $Revision$
+ *
+ *   Unless noted otherwise, the portions of Isis written by the USGS are
+ *   public domain. See individual third-party library and package descriptions
+ *   for intellectual property information, user agreements, and related
+ *   information.
+ *
+ *   Although Isis has been used by the USGS, no warranty, expressed or
+ *   implied, is made by the USGS as to the accuracy and functioning of such
+ *   software and related material nor shall the fact of distribution
+ *   constitute any such warranty, and no responsibility is assumed by the
+ *   USGS in connection therewith.
+ *
+ *   For additional information, launch
+ *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
+ *   in a browser or see the Privacy &amp; Disclaimers page on the Isis website,
+ *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
+ *   http://www.usgs.gov/privacy.html.
+ */
+#include <QMainWindow>
+
+namespace Isis {
+
+  /**
+   * @brief This class exists to contain detached views from ipce.
+   *          the purpose is for it to emit the closeWindow() signal
+   *          so that we can track when detached windows are closed. 
+   *
+   * @ingroup Visualization Tools
+   *
+   * @author 2017-10-25 Adam Goins
+   *
+   * @internal
+   *
+   *  @history 2017-10-25 Adam Goins - This class created. 
+   */
+  class ViewSubWindow : public QMainWindow {
+      Q_OBJECT
+
+    signals:
+      void closeWindow(); //!< Signal called when the window receives a close event
+
+    public:
+      ViewSubWindow(QWidget *parent, Qt::WindowFlags flags = 0);
+      virtual ~ViewSubWindow();
+
+    protected:
+      virtual void closeEvent(QCloseEvent *event);
+  };
+};
+
+#endif
diff --git a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp
index 22471ac425fa8da01947502aa9db283c4902f7c3..100c211df5a4042ff5b23ec08118b4583f61a89c 100644
--- a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp
+++ b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp
@@ -103,15 +103,27 @@ namespace Isis {
    * signal and ignores the close event.
    *
    * @param event
+   *
+   *  @internal
+   *  @history 2018-04-24 Adam Goins - Added optional parameter QCloseEvent to
+   *                          the closeWindow() signal so that the close event can be caught
+   *                          and set to rejected by listening applications (such as qnet).
+   *                          Fixes an issue where closing qnet and clicking 'cancel' from the
+   *                          proceeding popup dialogue would still close the window but leave
+   *                          the application running. Fixes #4146.
    */
   void ViewportMainWindow::closeEvent(QCloseEvent *event) {
     if (p_workspace->confirmClose()) {
-      emit closeWindow();
-      MainWindow::closeEvent(event);
+      emit closeWindow(event);
+      if (event->isAccepted()) {
+        MainWindow::closeEvent(event);
+      }
+      else {
+        event->ignore();
+      }
     }
     else {
       event->ignore();
     }
   }
 }
-
diff --git a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h
index a0ff5b00db4fabf3fc232fb9be9c99d858c961fa..6e44d6a303776509fcfa7ae81530783a4e0373ba 100644
--- a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h
+++ b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h
@@ -33,12 +33,18 @@ namespace Isis {
    *           when exception occured
    *  @history 2012-05-29 Steven Lambright - Updated closeEvent() to ask the user to save any
    *                          unsaved modifications to the opened cube. References #854.
+   *  @history 2018-04-24 Adam Goins - Added optional parameter QCloseEvent to
+   *                          the closeWindow() signal so that the close event can be caught
+   *                          and set to rejected by listening applications (such as qnet).
+   *                          Fixes an issue where closing qnet and clicking 'cancel' from the
+   *                          proceeding popup dialogue would still close the window but leave
+   *                          the application running. Fixes #4146.
    */
   class ViewportMainWindow : public MainWindow {
       Q_OBJECT
 
     signals:
-      void closeWindow(); //!< Signal called when the window receives a close event
+      void closeWindow(QCloseEvent *event = NULL); //!< Signal called when the window receives a close event
 
     public slots:
       void displayWarning(std::string &pStr, const std::string &pExStr);
diff --git a/isis/src/qisis/objs/WindowTool/WindowTool.cpp b/isis/src/qisis/objs/WindowTool/WindowTool.cpp
index 351737eeefc74014afae0d44af40a4d121e50030..bbe797d1c8d4c025d5c4797c5faabc40060bdf4c 100644
--- a/isis/src/qisis/objs/WindowTool/WindowTool.cpp
+++ b/isis/src/qisis/objs/WindowTool/WindowTool.cpp
@@ -166,8 +166,7 @@ namespace Isis {
     return std::max(sx,sy);
   }
 
-
-  /**
+ /**
    * Tiles the cube viewports over the Cube DN View.
    *
    * @internal
diff --git a/isis/src/qisis/objs/WorkOrder/WorkOrder.cpp b/isis/src/qisis/objs/WorkOrder/WorkOrder.cpp
index 5c7094216071642828d6edf73047d9d42949697b..8050613fc84a98ffcb88b233c41c4aea35e91a9e 100644
--- a/isis/src/qisis/objs/WorkOrder/WorkOrder.cpp
+++ b/isis/src/qisis/objs/WorkOrder/WorkOrder.cpp
@@ -40,6 +40,7 @@
 #include "Project.h"
 #include "ProjectItem.h"
 #include "ShapeList.h"
+#include "Template.h"
 #include "XmlStackedHandlerReader.h"
 
 
@@ -55,12 +56,14 @@ namespace Isis {
     m_project = project;
 
     m_context = NoContext;
+    m_data = "";
     m_imageList = new ImageList;
     m_shapeList = new ShapeList;
     m_controlList = NULL;
     m_correlationMatrix = CorrelationMatrix();
     m_guiCamera = GuiCameraQsp();
     m_targetBody = TargetBodyQsp();
+    m_template = NULL;
     m_fileItem = FileItemQsp();
 
     m_isUndoable = true;
@@ -122,6 +125,7 @@ namespace Isis {
     m_targetBody = other.m_targetBody;
     m_fileItem = other.m_fileItem;
     m_internalData = other.m_internalData;
+    m_template = other.m_template;
 
     m_isUndoable = other.m_isUndoable;
     m_isSavedToHistory = other.m_isSavedToHistory;
@@ -165,10 +169,10 @@ namespace Isis {
    * @brief The Destructor
    */
   WorkOrder::~WorkOrder() {
+
     delete m_imageList;
     delete m_shapeList;
     delete m_futureWatcher;
-    delete m_progressBar;
     delete m_progressBarDeletionTimer;
     delete m_progressBarUpdateTimer;
     delete m_transparentConstMutex;
@@ -259,6 +263,10 @@ namespace Isis {
     m_context = context;
   }
 
+  void WorkOrder::setData(QString data) {
+    m_data = data;
+  }
+
 
   /**
    * @brief Sets the ImageList data for this WorkOrder
@@ -314,6 +322,8 @@ namespace Isis {
   }
 
 
+
+
   /**
    * @brief Sets the TargetBody data for this WorkOrder.
    * @param targetBody A QSharedPointer to the TargetBody.
@@ -323,6 +333,15 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Sets the TargetBody data for this WorkOrder.
+   * @param targetBody A QSharedPointer to the TargetBody.
+   */
+  void WorkOrder::setData(Template *currentTemplate) {
+    m_template = currentTemplate;
+  }
+
+
   /**
    * @brief Sets the GuiCamera data for this WorkOrder.
    * @param guiCamera A QSharedPointer to the GuiCamera.
@@ -386,9 +405,15 @@ namespace Isis {
     else if ( item->isFileItem() ) {
       setData( item->fileItem() );
     }
+    else if ( item->isTemplate() ) {
+      setData( item->getTemplate() );
+    }
   }
 
 
+
+
+
   /**
    * @brief Re-implement this method if your work order utilizes a control list (a list of control
    * networks) for data in order to operate.
@@ -401,6 +426,18 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief Re-implement this method if your work order utilizes a control list (a list of control
+   * networks) for data in order to operate.
+   * @param controls A list of control networks.
+   * @return @b bool Upon re-implementation, returns True if the WorkOrder is executable, and False
+   * if it is not.
+   */
+  bool WorkOrder::isExecutable(Template *currentTemplate) {
+    return false;
+  }
+
+
   /**
    * @brief Re-implement this method if your WorkOrder utilizes GuiCameraQsp (a QSharedPointer to a
    * GuiCamera object) for data in order to operate.
@@ -483,6 +520,9 @@ namespace Isis {
     else if ( item->isFileItem() ) {
       return isExecutable( item->fileItem() );
     }
+    else if ( item->isTemplate() ) {
+      return isExecutable( item->getTemplate() );
+    }
 
     return false;
   }
@@ -703,6 +743,16 @@ namespace Isis {
   }
 
 
+  /**
+   * @brief WorkOrder::getTemplate
+   * @return @b QSharedPointer Returns a shared pointer to the Template.
+   */
+  Template *WorkOrder::getTemplate() {
+    QMutexLocker locker(project()->workOrderMutex());
+    return m_template;
+  }
+
+
   /**
    * @brief WorkOrder::targetBody
    * @return @b QSharedPointer Returns a shared pointer to the TargetBody.
@@ -1525,8 +1575,6 @@ namespace Isis {
       delete m_progressBarDeletionTimer;
       m_progressBarDeletionTimer = new QTimer;
       m_progressBarDeletionTimer->setSingleShot(true);
-      connect(m_progressBarDeletionTimer, SIGNAL(timeout()),
-              this, SLOT(deleteProgress()));
 
       m_progressBarDeletionTimer->start(5 * 1000); // 5 seconds
 
@@ -1599,20 +1647,6 @@ namespace Isis {
   }
 
 
-  /**
-   * @brief Deletes the progress bar.
-   */
-  void WorkOrder::deleteProgress() {
-    ProgressBar *progress = m_progressBar;
-
-    if (m_progressBar) {
-      m_progressBar = NULL;
-      emit deletingProgress(this);
-      delete progress;
-    }
-  }
-
-
   /**
    * @brief Updates the progress bar.
    */
diff --git a/isis/src/qisis/objs/WorkOrder/WorkOrder.h b/isis/src/qisis/objs/WorkOrder/WorkOrder.h
index 8b7e1a5fbf4ebd6057233d964636e50626db2dd2..1e391fa658d2b7bf36cd02d93cb5b524bc082de1 100644
--- a/isis/src/qisis/objs/WorkOrder/WorkOrder.h
+++ b/isis/src/qisis/objs/WorkOrder/WorkOrder.h
@@ -49,6 +49,7 @@ namespace Isis {
   class Project;
   class ProjectItem;
   class ShapeList;
+  class Template;
   class XmlStackedHandlerReader;
 
   /**
@@ -309,6 +310,14 @@ namespace Isis {
    *                           if a workorder errors Fixes #5026
    *   @history 2017-08-11 Cole Neubauer - Updated documentation for accessor methods and when one
    *                           of these accessors should be used in the workorder template #5113
+   *   @history 2017-11-02 Tyler Wilson - Added a virtual setData method for a QString, and
+   *                           a private QString object called m_data.  References #4492.
+   *   @history 2017-12-05 Christopher Combs - Added support for TemplateEditorWidget and
+   *                           TemplateEditViewWorkOrder. Fixes #5168.
+   *   @history 2018-06-28 Makayla Shepherd - Removed the ProgressBar cleanup because it was 
+   *                           causing a seg fault when the ProgressBar was added to the 
+   *                           HistoryTreeWidget. The HistoryTreeWidget will now clean up the
+   *                           ProgressBar. Fixes #5228.
    */
   class WorkOrder : public QAction, public QUndoCommand {
     Q_OBJECT
@@ -354,6 +363,7 @@ namespace Isis {
       virtual bool isExecutable(ControlList *controls);
       virtual bool isExecutable(CorrelationMatrix);
       virtual bool isExecutable(TargetBodyQsp targetBody);
+      virtual bool isExecutable(Template *currentTemplate);
       virtual bool isExecutable(GuiCameraQsp guiCamera);
       virtual bool isExecutable(FileItemQsp fileItem);
       virtual bool isExecutable(ProjectItem *item);
@@ -362,9 +372,11 @@ namespace Isis {
       void save(QXmlStreamWriter &stream) const;
 
       virtual void setData(Context);
+      virtual void setData(QString data);
       virtual void setData(ImageList *images);
       virtual void setData(ShapeList *shapes);
       virtual void setData(ControlList *controls);
+      virtual void setData(Template *currentTemplate);
       virtual void setData(CorrelationMatrix);
       virtual void setData(TargetBodyQsp targetBody);
       virtual void setData(GuiCameraQsp guiCamera);
@@ -372,6 +384,7 @@ namespace Isis {
       virtual void setData(ProjectItem *item);
 
 
+
       void setNext(WorkOrder *nextWorkOrder);
       void setPrevious(WorkOrder *previousWorkOrder);
 
@@ -428,6 +441,8 @@ namespace Isis {
 
       QPointer<ControlList> controlList();
 
+      Template *getTemplate();
+
       TargetBodyQsp targetBody();
 
       GuiCameraQsp guiCamera();
@@ -469,7 +484,6 @@ namespace Isis {
       void executionFinished();
       void clearImageList();
       void clearShapeList();
-      void deleteProgress();
       void updateProgress();
       void startRedo();
 
@@ -568,6 +582,7 @@ namespace Isis {
       int m_progressValue;
 
       Context m_context;
+      QString m_data;
       QPointer<ImageList> m_imageList;
       QPointer<ShapeList> m_shapeList;
       QPointer<ControlList> m_controlList;
@@ -579,6 +594,13 @@ namespace Isis {
       GuiCameraQsp m_guiCamera;
 
 
+      /**
+       * A QSharedPointer to the Template (A Template object but encapsulated within a Gui
+       * framework.
+       */
+      Template *m_template;
+
+
       /**
        * A QSharedPointer to the TargetBody (A Target object but encapsulated within a Gui
        * framework.
diff --git a/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.cpp b/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.cpp
index 692a935e18adaf1155438abde55d169d75b68bb3..f2f47a832a19f9edf5044c0fae93883ccd2af971 100644
--- a/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.cpp
+++ b/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.cpp
@@ -2,6 +2,7 @@
 
 #include "BundleObservationViewWorkOrder.h"
 #include "CnetEditorViewWorkOrder.h"
+#include "ControlHealthMonitorWorkOrder.h"
 #include "CubeDnViewWorkOrder.h"
 #include "ExportControlNetWorkOrder.h"
 #include "ExportImagesWorkOrder.h"
@@ -12,7 +13,8 @@
 #include "ImportControlNetWorkOrder.h"
 #include "ImportImagesWorkOrder.h"
 #include "ImportShapesWorkOrder.h"
-#include "ImportTemplateWorkOrder.h"
+#include "ImportMapTemplateWorkOrder.h"
+#include "ImportRegistrationTemplateWorkOrder.h"
 #include "IString.h"
 #include "JigsawWorkOrder.h"
 #include "MatrixViewWorkOrder.h"
@@ -29,6 +31,7 @@
 #include "SetActiveControlWorkOrder.h"
 #include "SetActiveImageListWorkOrder.h"
 #include "TargetGetInfoWorkOrder.h"
+#include "TemplateEditViewWorkOrder.h"
 
 namespace Isis {
   /**
@@ -49,6 +52,7 @@ namespace Isis {
 
     tryType<BundleObservationViewWorkOrder>(type, project, result);
     tryType<CnetEditorViewWorkOrder>(type, project, result);
+    tryType<ControlHealthMonitorWorkOrder>(type, project, result);
     tryType<CubeDnViewWorkOrder>(type, project, result);
     tryType<ExportImagesWorkOrder>(type, project, result);
     tryType<ExportControlNetWorkOrder>(type, project, result);
@@ -58,7 +62,8 @@ namespace Isis {
     tryType<ImportControlNetWorkOrder>(type, project, result);
     tryType<ImportImagesWorkOrder>(type, project, result);
     tryType<ImportShapesWorkOrder>(type, project, result);
-    tryType<ImportTemplateWorkOrder>(type, project, result);
+    tryType<ImportMapTemplateWorkOrder>(type, project, result);
+    tryType<ImportRegistrationTemplateWorkOrder>(type, project, result);
     tryType<JigsawWorkOrder>(type, project, result);
     tryType<MatrixViewWorkOrder>(type, project, result);
     tryType<MoveDownOneSceneWorkOrder>(type, project, result);
@@ -74,6 +79,7 @@ namespace Isis {
     tryType<SetActiveControlWorkOrder>(type, project, result);
     tryType<SetActiveImageListWorkOrder>(type, project, result);
     tryType<TargetGetInfoWorkOrder>(type, project, result);
+    tryType<TemplateEditViewWorkOrder>(type, project, result);
 
     if (!result) {
       throw IException(IException::Unknown,
diff --git a/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.h b/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.h
index 1b759b95728aed30bd7c99637cfc54c9722bfb99..06745a76657f2ba1591d961ff81d9f000bed45dc 100644
--- a/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.h
+++ b/isis/src/qisis/objs/WorkOrder/WorkOrderFactory.h
@@ -52,6 +52,16 @@ namespace Isis {
    *                         SetActiveControlWorkOrder, SetActiveImageListWorkOrder.  Fixes #4485.
    *   @history 2017-05-04 Tracie Sucharski - Added BundleObservationViewWorkOrder.  Fixes #4840.
    *   @history 2017-08-11 Christopher Combs - Added ImportTemplateWorkOrder. Fixes #5086.
+   *   @history 2017-11-02 Tyler Wilson - Added the OpenRecentProjectsWorkOrder. Fixes #4492.
+   *   @history 2017-11-09 Tyler Wilson - Merged the functionality of OpenRecentProjectsWorkOrder
+   *                              into OpenProjectWorkOrder to reduce unnecessary code duplication,
+   *                              and removed references to OpenRecentProjectWorkOrder in this
+   *                              class.  Fixes #5220.
+   *   @history 2018-06-18 Adam Goins - Added ControlHealthMonitorWorkOrder to WorkOrderFactory.
+   *                           Fixes #5435.
+   *   @history 2018-07-07 Summer Stapleton - Removed importTemplateWorkOrder and replaced it with 
+   *                           the new map and registration import work orders to reflect changes
+   *                           in Project.cpp for handling these differently.
    */
   class WorkOrderFactory {
     public:
diff --git a/isis/src/qisis/objs/Workspace/Workspace.cpp b/isis/src/qisis/objs/Workspace/Workspace.cpp
index 108f8042f915493a92b115b4c200aedfb90c72a8..9ecb205ffcaa20bcd53f70ea62c1c075cc9c8999 100644
--- a/isis/src/qisis/objs/Workspace/Workspace.cpp
+++ b/isis/src/qisis/objs/Workspace/Workspace.cpp
@@ -321,7 +321,7 @@ namespace Isis {
    *           deallocation is already taking place in
    *           addCubeViewport(cube).
    *  @history 2015-05-13 Ian Humphrey - Caught exception now handled by sending a QMessageBox
-   *                          to the Workspace. This prevents undefined behavior caused by not 
+   *                          to the Workspace. This prevents undefined behavior caused by not
    *                          handling an exception within a connected slot.
    *  @history 2017-08-17 Adam Goins - Added the ability for this method to receive a cubelist
    *                          file as input to qview, parse out the .cub files from the
@@ -330,44 +330,89 @@ namespace Isis {
    *  @history 2017-10-12 Kristin Berry - Reverted to using relative instead of full file paths,
    *                          as this caused errors when working with cubelists that contained
    *                          relative paths. Fixes # 5177
+   *  @history 2018-09-12 Adam Goins - Modified logic to attempt to open the file as a cube or
+   *                          detached label first, if that fails attempt to open it as a cube list
+   *                          and if that fails, throw an error to the user. This allows cubes and
+   *                          cube lists to be saved under any extension and opened. Fixes #5439,
+   *                          Fixes #5476.
    */
-  void Workspace::addCubeViewport(QString cubename) {
-    
-    QFileInfo cubeFileName(cubename);
+  void Workspace::addCubeViewport(QString filename) {
 
-    QList<QString> cubesToOpen;
+    QFileInfo cubeFileName(filename);
+
+    QString cubename = cubeFileName.filePath();
 
-    // If the file is a cub file, we add the path to it to our list of cubes to open.
-    if ( cubeFileName.suffix() == "cub" || cubeFileName.suffix() == "cube" ) {
-       // cubesToOpen.append(cubeFileName.absoluteFilePath());
-       cubesToOpen.append(cubeFileName.filePath());
+    try {
+      Cube *cube = new Cube;
+
+      // Read in the CubeAttribueInput from the cube name
+      CubeAttributeInput inAtt(cubename);
+      std::vector<QString> bands = inAtt.bands();
+
+      // Set the virtual bands to the bands specified by the input
+      cube->setVirtualBands(bands);
+      cube->open(cubename);
+
+      MdiCubeViewport *cvp = addCubeViewport(cube);
+
+      // Check for RGB format (#R,#G,#B)
+      if(bands.size() == 3) {
+        IString st = IString(bands.at(0));
+        int index_red = st.ToInteger();
+        st = IString(bands.at(1));
+        int index_green = st.ToInteger();
+        st = IString(bands.at(2));
+        int index_blue = st.ToInteger();
+        cvp->viewRGB(index_red, index_green, index_blue);
+      }
     }
-    else {
-      // If the file received isn't a .cub, it has to be a cubelist. We read every cube in the cubelist
-      // And append it to the cubesToOpen QList so that we can open them.
-      QFile file(cubename);
-      file.open(QIODevice::ReadOnly);
 
-      QTextStream in(&file);
+    catch (IException &e) {
+
+      QString message("Error opening cube [" + cubename + "]...\n");
+      message += "Attempting to open [" + cubename + "] as a cube list...\n";
 
-      while(!file.atEnd()){
-        QString line = file.readLine().replace("\n", "");
-        cubesToOpen.append(line);
+      try {
+        addCubeViewportFromList(cubename);
       }
-      file.close();
+      catch (IException &e) {
+        message += e.toString();
+        throw IException(e, IException::User, message, _FILEINFO_);
+      }
+
     }
-    
-    if (cubesToOpen.size() == 0){
-        QMessageBox::critical((QWidget *)parent(), "Error", "No cubes to open from [" + cubename + "]");
-        return;
+  }
+
+  /**
+   *  @history 2018-09-12 Adam Goins - Added this method to attempt to open a file as a cube list.
+   *                          It's called by addCubeViewport() when that method attempts to open a
+   *                          file as a cube but fails. Fixes #5439, Fixes #5476.
+   */
+  void Workspace::addCubeViewportFromList(QString cubelist) {
+
+    QFileInfo cubeFileName(cubelist);
+
+    QList<QString> cubesToOpen;
+
+    QFile file(cubeFileName.filePath());
+    file.open(QIODevice::ReadOnly);
+
+    QTextStream in(&file);
+
+    // Loop through every cube name in the cube list and add it to a list of cubes to open.
+    while ( !file.atEnd() ) {
+      QString line = file.readLine().replace("\n", "");
+      cubesToOpen.append(line);
     }
 
+    file.close();
+
     for (int i = 0; i < cubesToOpen.size(); i++) {
-      
+
       QString cubename;
       try {
         Cube *cube = new Cube;
-        cubename = cubesToOpen.value(i);
+        cubename = cubesToOpen.at(i);
 
         // Read in the CubeAttribueInput from the cube name
         CubeAttributeInput inAtt(cubename);
@@ -376,7 +421,7 @@ namespace Isis {
         // Set the virtual bands to the bands specified by the input
         cube->setVirtualBands(bands);
         cube->open(cubename);
-          
+
         MdiCubeViewport *cvp = addCubeViewport(cube);
 
         // Check for RGB format (#R,#G,#B)
@@ -391,20 +436,9 @@ namespace Isis {
         }
       }
       catch (IException &e) {
-        QString title("Error opening cube from list...");
-        QString message(e.toString() + "\n\nWould you like to continue?");
-        
-        int response = QMessageBox::critical((QWidget *)parent(), 
-                                             title, 
-                                             message, 
-                                             QMessageBox::Yes|QMessageBox::No);
-        
-        if (response == QMessageBox::Yes) { 
-          continue;
-        }
-        else {
-          return;
-        }
+	       QString message("Error attempting to open [" + cubename + "] from list [" + cubelist + "]...\n");
+
+	       throw IException(e, IException::User, message, _FILEINFO_);
       }
     }
   }
diff --git a/isis/src/qisis/objs/Workspace/Workspace.h b/isis/src/qisis/objs/Workspace/Workspace.h
index 63c131af08fb121985304e437b9bacfa755a3c22..054fdddbc9365809d55111e4e925433765b322e5 100644
--- a/isis/src/qisis/objs/Workspace/Workspace.h
+++ b/isis/src/qisis/objs/Workspace/Workspace.h
@@ -70,8 +70,8 @@ namespace Isis {
   *                           status areas externally. No longer inherits from QMdiArea because
   *                           of the need to place widgets around the mdi area.
   *   @history 2015-05-13 Ian Humphrey - Modified addCubeViewport(QString) to handle any exceptions
-  *                           that are thrown within the slot. This prevents undefined behavior 
-  *                           when an exception is not handled within a connected slot. 
+  *                           that are thrown within the slot. This prevents undefined behavior
+  *                           when an exception is not handled within a connected slot.
   *                           References #2210.
   *   @history 2016-09-08 Tracie Sucharski - Changed imageToMdiWidget to cubeToMdiWidget.  Workspace
   *                           deals with cubes.  Since Image contains a cube, simply pass in cube
@@ -79,6 +79,13 @@ namespace Isis {
   *                           class, Shape, which also contains a cube, but not an Image.
   *   @history 2017-09-11 Adam Goins - Added the ability to accept cubelists under any file format.
   *                           Fixes #5099.
+  *   @history 2018-04-13 Christopher Combs - Added .lbl files to the list of single-cube file-extensions
+  *                           to check before reading a cube list in addCubeViewport. Fixes #5350.
+  *  @history 2018-09-12 Adam Goins - Modified logic to attempt to open the file as a cube or
+  *                          detached label first, if that fails attempt to open it as a cube list
+  *                          and if that fails, throw an error to the user. This allows cubes and
+  *                          cube lists to be saved under any extension and opened. Fixes #5439,
+  *                          Fixes #5476.
   */
   class Workspace : public QWidget {
       Q_OBJECT
@@ -86,36 +93,36 @@ namespace Isis {
     public:
       /**
        * Constructor for Workspace
-       * 
+       *
        * @param selfContained if this Workspace should be self contained or note
        * @param parent The parent QWidget, defaults to 0
-       * 
+       *
        */
       Workspace(bool selfContained, QWidget *parent = 0);
-      
+
       /**
        * Constructor for Workspace
-       * 
+       *
        * @param other The other Workspace to load from.
        */
       Workspace(const Workspace &other);
-      
+
       /**
        * Deconstructor
-       * 
+       *
        */
       virtual ~Workspace();
-      
+
       /**
        * This method returns a Vector of MdiCubeViewports
-       * 
+       *
        * @return QVector a vector of MdiCubeViewports
        */
       QVector< MdiCubeViewport * > * cubeViewportList();
-      
+
       /**
        * Is equal to comparsion
-       * 
+       *
        * @param other The Workspace to compare against
        * @return bool True of False if they're equal to eachother .
        */
@@ -123,29 +130,29 @@ namespace Isis {
 
       /**
        * Adds a list of Images to a viewport
-       * 
+       *
        * @param images The ImageList of images to add to the Workspace
        */
       void addImages(ImageList *images);
-      
+
       /**
        * Confirms that the user wishes toc lose the Workspace
-       * 
+       *
        * @return True of False if the user wishes to close the Workspace
        */
       bool confirmClose();
-      
+
       /**
        * Converts a cube to an MdiWidget
-       * 
+       *
        * @param cube The cube to reference
        * @return QWidget The widget associated with the cube
        */
       QWidget *cubeToMdiWidget(Cube *cube);
-      
+
       /**
        * This method returns the QMdiArea
-       * 
+       *
        * @return QMdiArea the Area of the mdi
        */
       QMdiArea *mdiArea();
@@ -155,41 +162,49 @@ namespace Isis {
        * Signal triggered when a Cube is added to the Workspace
        */
       void cubeViewportAdded(MdiCubeViewport *);
-      
+
       /**
        * Signal triggered when a Cube is activated in the Workspace
-       * 
+       *
        */
       void cubeViewportActivated(MdiCubeViewport *);
 
     public slots:
-      
+
       /**
        * Method adds the name of a cube into Workspace as a CubeViewport
-       * 
+       *
        * @param cubename The cube to be added to the Workspace
        */
       void addCubeViewport(QString cubename);
-      
+
+      /**
+       * Method adds cubes into Workspace as a CubeViewport from a list of cubes.
+       *
+       * @param cubename The name of the cube list file.
+       */
+      void addCubeViewportFromList(QString cubelist);
+
+
       /**
        * Method adds a cube into the Workspace as a CubeViewport.
-       * 
+       *
        * @param cube The cube to be added into the Workspace.
        */
       MdiCubeViewport *addCubeViewport(Cube *cube);
 
       /**
        * Method is called to add a Cube from BrowseView.
-       * 
+       *
        * @param cube The cube being browsed
        */
       void addBrowseView(QString cube);
 
     protected slots:
-      
+
       /**
        * This method activates the Viewport.
-       * 
+       *
        * @param w The subwindow to activate
        */
       void activateViewport(QMdiSubWindow *w);
diff --git a/isis/src/qisis/tsts/SquishTests/Makefile b/isis/src/qisis/tsts/SquishTests/Makefile
deleted file mode 100644
index c4e9452c0bc09880ded63dedaf046d632baf110d..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/Makefile
+++ /dev/null
@@ -1,92 +0,0 @@
-include $(ISISROOT)/make/isismake.tsts
-
-.ONESHELL:
-
-SQUISHBIN=/opt/Squish/bin
-
-commands: configsquish
-	$(SQUISHBIN)/squishserver >& /dev/null & 
-	$(SQUISHBIN)/squishserver --config addAppPath '$(ISISROOT)/bin' >& /dev/null
-	$(SQUISHBIN)/squishrunner --config setCursorAnimation off >& /dev/null
-	cd $(OUTPUT) >& /dev/null
-	ABSOUTPUT=`pwd`
-	cd - >& /dev/null
-	DELETEINPUT=false
-	if [ ! -d input ]; then
-	  ln -s "$(INPUT)"
-	  DELETEINPUT=true
-	fi
-	for SUITE in `ls -1 suites/`; do
-	  if [ -d "suites/$$SUITE" ] && [ -f "suites/$$SUITE/suite.conf" ]; then
-	    touch $$ABSOUTPUT/$$SUITE.xml
-	    $(SQUISHBIN)/squishrunner --testsuite "suites/$$SUITE" \
-	      --reportgen xml2.1,$$ABSOUTPUT/$$SUITE.xml 2>&1 >& /dev/null
-	    if [ -f "$$ABSOUTPUT/$$SUITE.xml" ]; then
-	      $(CAT) $$ABSOUTPUT/$$SUITE.xml | sed 's/time="[^"]*"/time="..."/g' | \
-	        sed 's/file="[^"]*"/file="..."/g' | sed 's/Images match.*</Images match</' \
-	        > $$ABSOUTPUT/$$SUITE.tmp.xml
-	      $(MV) $$ABSOUTPUT/$$SUITE.tmp.xml $$ABSOUTPUT/$$SUITE.xml
-	      $(MV) $$ABSOUTPUT/$$SUITE.xml $$ABSOUTPUT/$$SUITE.xml.txt
-	    else
-	      echo "File $$ABSOUTPUT/$$SUITE.xml not created by squishrunner"
-	    fi
-	  fi
-	done
-	$(SQUISHBIN)/squishserver --stop >& /dev/null
-	if [ -L input ]; then
-	  $(RM) input
-	fi
-
-configsquish:
-	if [ ! -d input ]; then
-	  ln -s "$(INPUT)";
-	fi    
-	if [ -f "$$HOME/.squish/ver1/server.ini" ]; then
-	  $(RM) "$$HOME/.squish/ver1/server.ini"
-	fi                  
-	$(SQUISHBIN)/squishserver >& /dev/null & 
-	$(SQUISHBIN)/squishserver --config addAppPath '$(ISISROOT)/bin' >& /dev/null
-	$(SQUISHBIN)/squishrunner --config setCursorAnimation off >& /dev/null
-	$(SQUISHBIN)/squishserver --stop >& /dev/null
-	$(LS) $$PWD/input/Ground/Extracted_AllOverlaps/I*.cub > input/Ground/Extracted_AllOverlaps.lis
-	$(LS) $$PWD/input/Ground/Extracted_AllOverlaps/f*.cub >> input/Ground/Extracted_AllOverlaps.lis
-	$(LS) $$PWD/input/m01018/N1597182735_2_tr.cub > input/m01018/tr.lis
-	$(LS) $$PWD/input/m01018/N1597182896_2_tr.cub >> input/m01018/tr.lis
-	$(LS) $$PWD/input/m01018/N1597183061_2_tr.cub >> input/m01018/tr.lis
-	$(LS) $$PWD/input/m01018/N1597183216_2_tr.cub >> input/m01018/tr.lis
-	$(LS) $$PWD/input/m01018/N1602275390_1_tr.cub >> input/m01018/tr.lis
-	$(LS) $$PWD/input/m01018/N1604169204_2_tr.cub >> input/m01018/tr.lis
-	$(CAT) input/m01018/tr.lis | grep -v 'N1602275390_1_tr.cub' > input/m01018/tr_no390.lis
-	$(LS) $$PWD/input/Ground/Mini/*.cub > input/Ground/Mini.lis
-
-suite_%: configsquish
-	$(SQUISHBIN)/squishserver >& /dev/null & 
-	
-	if [ ! -d output ]; then
-	  $(MKDIR) output;
-	fi
-	
-	cd $(OUTPUT) >& /dev/null
-	ABSOUTPUT=`pwd`
-	cd - >& /dev/null
-	
-	if [ -d "suites/$@" ] && [ -f "suites/$@/suite.conf" ]; then
-	  touch $$ABSOUTPUT/$@.xml
-	  $(SQUISHBIN)/squishrunner --testsuite "suites/$@" \
-	    --reportgen xml2.1,$$ABSOUTPUT/$@.xml 2>&1 >& /dev/null
-	  if [ -f "$$ABSOUTPUT/$@.xml" ]; then
-	    $(CAT) $$ABSOUTPUT/$@.xml | sed 's/time="[^"]*"/time="..."/g' | \
-	      sed 's/file="[^"]*"/file="..."/g' > $$ABSOUTPUT/$@.tmp.xml
-	    $(MV) $$ABSOUTPUT/$@.tmp.xml $$ABSOUTPUT/$@.xml
-	    $(MV) $$ABSOUTPUT/$@.xml $$ABSOUTPUT/$@.xml.txt
-	    grep -Hn -A 1 '<result type="FAIL" time="...">' $(OUTPUT)/$@.xml.txt 2>>/dev/null
-	    grep -Hn -A 2 '<message .*>' $(OUTPUT)/$@.xml.txt 2>>/dev/null
-	  else
-	    echo "File $$ABSOUTPUT/$@.xml not created by squishrunner"
-	  fi
-	fi
-	$(SQUISHBIN)/squishserver --stop >& /dev/null
-	if [ -L input ]; then
-	  $(RM) input
-	fi
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/envvars b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/envvars
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/objects.map b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/objects.map
deleted file mode 100644
index 406e523fc9100d9b080c91525a28cd903cd21cd3..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/objects.map
+++ /dev/null
@@ -1,72 +0,0 @@
-:Auto Grid_QCheckBox	{buddy=':Grid Options.Auto Grid_QLabel' type='QCheckBox' unnamed='1' visible='1'}
-:Color Criteria_QComboBox	{buddy=':Movement Options.Color Criteria_QLabel' type='QComboBox' unnamed='1' visible='1'}
-:Control Point Information.<div>Point ID: THM_AEOLIS_auto_035066<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />I03415002RDR.cub (Odyssey/THEMIS_IR/717091315.204) [residual: <font color='red'>0.34334690243932</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color='red'>0.26169018459583</font>]<br />I11104002RDR.cub (Odyssey/THEMIS_IR/771779441.102) [residual: <font color='red'>0.41863100293464</font>]<br />I16021002RDR.cub (Odyssey/THEMIS_IR/806757253.179) [residual: <font color='red'>0.46134858380318</font>]<br />Odyssey/THEMIS_IR/701643163.076 [residual: <font color='red'>0.43597701233739</font>]<br />I04576001RDR.cub (Odyssey/THEMIS_IR/725348214.153) [residual: <font color='red'>0.30914060868133</font>]<br />I09257002RDR.cub (Odyssey/THEMIS_IR/758640718.179) [residual: <font color='red'>0.46836807082174</font>]<br />I11416002RDR.cub (Odyssey/THEMIS_IR/773998971.153) [residual: <font color='red'>0.91150500491869</font>]<br />I12639002RDR.cub (Odyssey/THEMIS_IR/782699009.153) [residual: <font color='red'>1.1778289552804</font>]<br />I02691002RDR.cub (Odyssey/THEMIS_IR/711942122.000) [residual: <font color='red'>0.34370476346785</font>]<br />Odyssey/THEMIS_IR/824157276.000 [residual: <font color='red'>0.18355145849252</font>]<br />Odyssey/THEMIS_IR/751627267.051 [residual: <font color='red'>0.36767426891234</font>]<br />I11728002RDR.cub (Odyssey/THEMIS_IR/776218444.204) [residual: <font color='red'>0.45722231944607</font>]<br />I19091002RDR.cub (Odyssey/THEMIS_IR/828596080.230) [residual: <font color='red'>0.27598739181935</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color='red'>0.27221605600613</font>]<br />Odyssey/THEMIS_IR/830815439.153 [residual: <font color='red'>0.74485039589228</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color='red'>0.3135765348542</font>]</div>_QLabel	{name='qt_msgbox_label' text='<div>Point ID: THM_AEOLIS_auto_035066<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />I03415002RDR.cub (Odyssey/THEMIS_IR/717091315.204) [residual: <font color=\\'red\\'>0.34334690243932</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color=\\'red\\'>0.26169018459583</font>]<br />I11104002RDR.cub (Odyssey/THEMIS_IR/771779441.102) [residual: <font color=\\'red\\'>0.41863100293464</font>]<br />I16021002RDR.cub (Odyssey/THEMIS_IR/806757253.179) [residual: <font color=\\'red\\'>0.46134858380318</font>]<br />Odyssey/THEMIS_IR/701643163.076 [residual: <font color=\\'red\\'>0.43597701233739</font>]<br />I04576001RDR.cub (Odyssey/THEMIS_IR/725348214.153) [residual: <font color=\\'red\\'>0.30914060868133</font>]<br />I09257002RDR.cub (Odyssey/THEMIS_IR/758640718.179) [residual: <font color=\\'red\\'>0.46836807082174</font>]<br />I11416002RDR.cub (Odyssey/THEMIS_IR/773998971.153) [residual: <font color=\\'red\\'>0.91150500491869</font>]<br />I12639002RDR.cub (Odyssey/THEMIS_IR/782699009.153) [residual: <font color=\\'red\\'>1.1778289552804</font>]<br />I02691002RDR.cub (Odyssey/THEMIS_IR/711942122.000) [residual: <font color=\\'red\\'>0.34370476346785</font>]<br />Odyssey/THEMIS_IR/824157276.000 [residual: <font color=\\'red\\'>0.18355145849252</font>]<br />Odyssey/THEMIS_IR/751627267.051 [residual: <font color=\\'red\\'>0.36767426891234</font>]<br />I11728002RDR.cub (Odyssey/THEMIS_IR/776218444.204) [residual: <font color=\\'red\\'>0.45722231944607</font>]<br />I19091002RDR.cub (Odyssey/THEMIS_IR/828596080.230) [residual: <font color=\\'red\\'>0.27598739181935</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color=\\'red\\'>0.27221605600613</font>]<br />Odyssey/THEMIS_IR/830815439.153 [residual: <font color=\\'red\\'>0.74485039589228</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color=\\'red\\'>0.3135765348542</font>]</div>' type='QLabel' visible='1' window=':Control Point Information_QMessageBox'}
-:Control Point Information.<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />I09881002RDR.cub (Odyssey/THEMIS_IR/763079637.076) [residual: <font color='red'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color='red'>0.19328122482455</font>]<br />I14486003RDR.cub (Odyssey/THEMIS_IR/795837905.025) [residual: <font color='red'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color='red'>0.4287836943445</font>]<br />I23384003RDR.cub (Odyssey/THEMIS_IR/859135323.128) [residual: <font color='red'>0.24759365861102</font>]<br />I04963002RDR.cub (Odyssey/THEMIS_IR/728100510.128) [residual: <font color='red'>0.22138667256272</font>]<br />I04576001RDR.cub (Odyssey/THEMIS_IR/725348214.153) [residual: <font color='red'>0.15371356223479</font>]<br />I01967002RDR.cub (Odyssey/THEMIS_IR/706792855.230) [residual: <font color='red'>0.27622761966836</font>]<br />I02691002RDR.cub (Odyssey/THEMIS_IR/711942122.000) [residual: <font color='red'>0.24848443615479</font>]<br />I14798002RDR.cub (Odyssey/THEMIS_IR/798057327.153) [residual: <font color='red'>0.068010234920038</font>]<br />I01605002RDR.cub (Odyssey/THEMIS_IR/704218148.204) [residual: <font color='red'>0.054820451973017</font>]<br />I11728002RDR.cub (Odyssey/THEMIS_IR/776218444.204) [residual: <font color='red'>0.38205196382913</font>]<br />I19091002RDR.cub (Odyssey/THEMIS_IR/828596080.230) [residual: <font color='red'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color='red'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color='red'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color='red'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color='red'>0.24197426398359</font>]</div>_QLabel	{name='qt_msgbox_label' text='<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />I09881002RDR.cub (Odyssey/THEMIS_IR/763079637.076) [residual: <font color=\\'red\\'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color=\\'red\\'>0.19328122482455</font>]<br />I14486003RDR.cub (Odyssey/THEMIS_IR/795837905.025) [residual: <font color=\\'red\\'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color=\\'red\\'>0.4287836943445</font>]<br />I23384003RDR.cub (Odyssey/THEMIS_IR/859135323.128) [residual: <font color=\\'red\\'>0.24759365861102</font>]<br />I04963002RDR.cub (Odyssey/THEMIS_IR/728100510.128) [residual: <font color=\\'red\\'>0.22138667256272</font>]<br />I04576001RDR.cub (Odyssey/THEMIS_IR/725348214.153) [residual: <font color=\\'red\\'>0.15371356223479</font>]<br />I01967002RDR.cub (Odyssey/THEMIS_IR/706792855.230) [residual: <font color=\\'red\\'>0.27622761966836</font>]<br />I02691002RDR.cub (Odyssey/THEMIS_IR/711942122.000) [residual: <font color=\\'red\\'>0.24848443615479</font>]<br />I14798002RDR.cub (Odyssey/THEMIS_IR/798057327.153) [residual: <font color=\\'red\\'>0.068010234920038</font>]<br />I01605002RDR.cub (Odyssey/THEMIS_IR/704218148.204) [residual: <font color=\\'red\\'>0.054820451973017</font>]<br />I11728002RDR.cub (Odyssey/THEMIS_IR/776218444.204) [residual: <font color=\\'red\\'>0.38205196382913</font>]<br />I19091002RDR.cub (Odyssey/THEMIS_IR/828596080.230) [residual: <font color=\\'red\\'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color=\\'red\\'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color=\\'red\\'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color=\\'red\\'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color=\\'red\\'>0.24197426398359</font>]</div>' type='QLabel' visible='1' window=':Control Point Information_QMessageBox'}
-:Control Point Information.<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />Odyssey/THEMIS_IR/763079637.076 [residual: <font color='red'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color='red'>0.19328122482455</font>]<br />Odyssey/THEMIS_IR/795837905.025 [residual: <font color='red'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color='red'>0.4287836943445</font>]<br />Odyssey/THEMIS_IR/859135323.128 [residual: <font color='red'>0.24759365861102</font>]<br />Odyssey/THEMIS_IR/728100510.128 [residual: <font color='red'>0.22138667256272</font>]<br />Odyssey/THEMIS_IR/725348214.153 [residual: <font color='red'>0.15371356223479</font>]<br />Odyssey/THEMIS_IR/706792855.230 [residual: <font color='red'>0.27622761966836</font>]<br />Odyssey/THEMIS_IR/711942122.000 [residual: <font color='red'>0.24848443615479</font>]<br />Odyssey/THEMIS_IR/798057327.153 [residual: <font color='red'>0.068010234920038</font>]<br />Odyssey/THEMIS_IR/704218148.204 [residual: <font color='red'>0.054820451973017</font>]<br />Odyssey/THEMIS_IR/776218444.204 [residual: <font color='red'>0.38205196382913</font>]<br />Odyssey/THEMIS_IR/828596080.230 [residual: <font color='red'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color='red'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color='red'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color='red'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color='red'>0.24197426398359</font>]</div>_QLabel	{name='qt_msgbox_label' text='<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />Odyssey/THEMIS_IR/763079637.076 [residual: <font color=\\'red\\'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color=\\'red\\'>0.19328122482455</font>]<br />Odyssey/THEMIS_IR/795837905.025 [residual: <font color=\\'red\\'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color=\\'red\\'>0.4287836943445</font>]<br />Odyssey/THEMIS_IR/859135323.128 [residual: <font color=\\'red\\'>0.24759365861102</font>]<br />Odyssey/THEMIS_IR/728100510.128 [residual: <font color=\\'red\\'>0.22138667256272</font>]<br />Odyssey/THEMIS_IR/725348214.153 [residual: <font color=\\'red\\'>0.15371356223479</font>]<br />Odyssey/THEMIS_IR/706792855.230 [residual: <font color=\\'red\\'>0.27622761966836</font>]<br />Odyssey/THEMIS_IR/711942122.000 [residual: <font color=\\'red\\'>0.24848443615479</font>]<br />Odyssey/THEMIS_IR/798057327.153 [residual: <font color=\\'red\\'>0.068010234920038</font>]<br />Odyssey/THEMIS_IR/704218148.204 [residual: <font color=\\'red\\'>0.054820451973017</font>]<br />Odyssey/THEMIS_IR/776218444.204 [residual: <font color=\\'red\\'>0.38205196382913</font>]<br />Odyssey/THEMIS_IR/828596080.230 [residual: <font color=\\'red\\'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color=\\'red\\'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color=\\'red\\'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color=\\'red\\'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color=\\'red\\'>0.24197426398359</font>]</div>' type='QLabel' visible='1' window=':Control Point Information_QMessageBox'}
-:Control Point Information.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Control Point Information_QMessageBox'}
-:Control Point Information_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Control Point Information'}
-:File List.Tree_Isis::MosaicTreeWidget	{container=':qmos.File List_QDockWidget' name='Tree' type='Isis::MosaicTreeWidget' visible='1'}
-:Grid Options.Auto Grid_QLabel	{text='Auto Grid' type='QLabel' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Latitude Range_QComboBox	{leftWidget=':Grid Options.Latitude Range_QLabel' type='QComboBox' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Latitude Range_QLabel	{text='Latitude Range' type='QLabel' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Longitude Range_QComboBox	{leftWidget=':Grid Options.Longitude Range_QLabel' type='QComboBox' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Longitude Range_QLabel	{text='Longitude Range' type='QLabel' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Minimum Longitude_QLabel	{text='Minimum Longitude' type='QLabel' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Minimum Longitude_QSlider	{leftWidget=':Grid Options.Minimum Longitude_QLabel' type='QSlider' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options.Ok_QPushButton	{text='Ok' type='QPushButton' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options_Isis::MosaicGridToolConfigDialog	{type='Isis::MosaicGridToolConfigDialog' unnamed='1' visible='1' windowTitle='Grid Options'}
-:Grid Options_QLineEdit	{occurrence='5' type='QLineEdit' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options_QLineEdit_2	{occurrence='6' type='QLineEdit' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options_QLineEdit_3	{occurrence='7' type='QLineEdit' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Grid Options_QLineEdit_4	{occurrence='8' type='QLineEdit' unnamed='1' visible='1' window=':Grid Options_Isis::MosaicGridToolConfigDialog'}
-:Group1.42.5087_QModelIndex	{column='7' container=':Tree.Group1_QModelIndex' text='42.5087' type='QModelIndex'}
-:Latitude Extent Failure.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Latitude Extent Failure_QMessageBox'}
-:Latitude Extent Failure_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Latitude Extent Failure'}
-:Load Project.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Load Project_QFileDialog'}
-:Load Project.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Load Project_QFileDialog'}
-:Load Project_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Load Project'}
-:Longitude Extent Failure.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Longitude Extent Failure_QMessageBox'}
-:Longitude Extent Failure_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Longitude Extent Failure'}
-:Min measure count to color_QLineEdit	{buddy=':Movement Options.Min measure count to color_QLabel' type='QLineEdit' unnamed='1' visible='1'}
-:Movement Options.Apply_QPushButton	{text='Apply' type='QPushButton' unnamed='1' visible='1' window=':Movement Options_Isis::MosaicControlNetToolMovementConfigDialog'}
-:Movement Options.Color Criteria_QLabel	{text='Color Criteria' type='QLabel' unnamed='1' visible='1' window=':Movement Options_Isis::MosaicControlNetToolMovementConfigDialog'}
-:Movement Options.Min measure count to color_QLabel	{text='Min measure count to color' type='QLabel' unnamed='1' visible='1' window=':Movement Options_Isis::MosaicControlNetToolMovementConfigDialog'}
-:Movement Options.Show Movement_QLabel	{text='Show Movement' type='QLabel' unnamed='1' visible='1' window=':Movement Options_Isis::MosaicControlNetToolMovementConfigDialog'}
-:Movement Options_Isis::MosaicControlNetToolMovementConfigDialog	{type='Isis::MosaicControlNetToolMovementConfigDialog' unnamed='1' visible='1' windowTitle='Movement Options'}
-:Ok_QPushButton	{text='Ok' type='QPushButton' unnamed='1' visible='1' window=':_Isis::ProjectionConfigDialog'}
-:Open Cubes.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Open Cubes_QFileDialog'}
-:Open Cubes_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Open Cubes'}
-:Save Map File..._QPushButton	{text='Save Map File...' type='QPushButton' unnamed='1' visible='1' window=':_Isis::ProjectionConfigDialog'}
-:Save Map File..._QTextEdit	{aboveWidget=':Save Map File..._QPushButton' type='QTextEdit' unnamed='1' visible='1' window=':_Isis::ProjectionConfigDialog'}
-:Show Movement_QCheckBox	{buddy=':Movement Options.Show Movement_QLabel' type='QCheckBox' unnamed='1' visible='1'}
-:THM_AEOLIS_auto_035068	{acceptDrops='no' container=':qmos_MosaicSceneWidget' enabled='yes' focusable='no' lineColor='#0000ff' lineWidth='0' movable='no' parentItem=':_Isis::ControlNetGraphicsItem_2' selectable='no' toolTip?='*THM_AEOLIS_auto_035068*' type='QGraphicsRectItem' visible='yes'}
-:Tree.Group1_QModelIndex	{column='0' container=':File List.Tree_Isis::MosaicTreeWidget' text='Group1' type='QModelIndex'}
-:View.Show Footprint Column_QAction	{container=':qmos.View_QMenu_2' text='Show Footprint Column' type='QAction' unnamed='1' visible='true'}
-:View.Show Outline Column_QAction	{container=':qmos.View_QMenu_2' text='Show Outline Column' type='QAction' unnamed='1' visible='true'}
-:_Isis::ControlNetGraphicsItem	{acceptDrops='no' container=':qmos_Isis::MosaicGraphicsView' enabled='yes' focusable='no' movable='no' selectable='no' type='Isis::ControlNetGraphicsItem' visible='yes'}
-:_Isis::ControlNetGraphicsItem_2	{acceptDrops='no' container=':qmos_MosaicSceneWidget' enabled='yes' focusable='no' movable='no' selectable='no' type='Isis::ControlNetGraphicsItem' visible='yes'}
-:_Isis::ProjectionConfigDialog	{type='Isis::ProjectionConfigDialog' unnamed='1' visible='1'}
-:_QGraphicsRectItem	{acceptDrops='no' container=':qmos_Isis::MosaicGraphicsView' enabled='yes' focusable='no' lineColor='#0000ff' lineWidth='0' movable='no' parentItem=':_Isis::ControlNetGraphicsItem' selectable='no' toolTip='<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />I09881002RDR.cub (Odyssey/THEMIS_IR/763079637.076) [residual: <font color=\\'red\\'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color=\\'red\\'>0.19328122482455</font>]<br />I14486003RDR.cub (Odyssey/THEMIS_IR/795837905.025) [residual: <font color=\\'red\\'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color=\\'red\\'>0.4287836943445</font>]<br />I23384003RDR.cub (Odyssey/THEMIS_IR/859135323.128) [residual: <font color=\\'red\\'>0.24759365861102</font>]<br />I04963002RDR.cub (Odyssey/THEMIS_IR/728100510.128) [residual: <font color=\\'red\\'>0.22138667256272</font>]<br />I04576001RDR.cub (Odyssey/THEMIS_IR/725348214.153) [residual: <font color=\\'red\\'>0.15371356223479</font>]<br />I01967002RDR.cub (Odyssey/THEMIS_IR/706792855.230) [residual: <font color=\\'red\\'>0.27622761966836</font>]<br />I02691002RDR.cub (Odyssey/THEMIS_IR/711942122.000) [residual: <font color=\\'red\\'>0.24848443615479</font>]<br />I14798002RDR.cub (Odyssey/THEMIS_IR/798057327.153) [residual: <font color=\\'red\\'>0.068010234920038</font>]<br />I01605002RDR.cub (Odyssey/THEMIS_IR/704218148.204) [residual: <font color=\\'red\\'>0.054820451973017</font>]<br />I11728002RDR.cub (Odyssey/THEMIS_IR/776218444.204) [residual: <font color=\\'red\\'>0.38205196382913</font>]<br />I19091002RDR.cub (Odyssey/THEMIS_IR/828596080.230) [residual: <font color=\\'red\\'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color=\\'red\\'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color=\\'red\\'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color=\\'red\\'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color=\\'red\\'>0.24197426398359</font>]</div>' type='QGraphicsRectItem' visible='yes'}
-:_QGraphicsRectItem_2	{acceptDrops='no' container=':qmos_Isis::MosaicGraphicsView' enabled='yes' focusable='no' lineColor='#0000ff' lineWidth='0' movable='no' parentItem=':_Isis::ControlNetGraphicsItem' selectable='no' toolTip='<div>Point ID: THM_AEOLIS_auto_035066<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />I03415002RDR.cub (Odyssey/THEMIS_IR/717091315.204) [residual: <font color=\\'red\\'>0.34334690243932</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color=\\'red\\'>0.26169018459583</font>]<br />I11104002RDR.cub (Odyssey/THEMIS_IR/771779441.102) [residual: <font color=\\'red\\'>0.41863100293464</font>]<br />I16021002RDR.cub (Odyssey/THEMIS_IR/806757253.179) [residual: <font color=\\'red\\'>0.46134858380318</font>]<br />Odyssey/THEMIS_IR/701643163.076 [residual: <font color=\\'red\\'>0.43597701233739</font>]<br />I04576001RDR.cub (Odyssey/THEMIS_IR/725348214.153) [residual: <font color=\\'red\\'>0.30914060868133</font>]<br />I09257002RDR.cub (Odyssey/THEMIS_IR/758640718.179) [residual: <font color=\\'red\\'>0.46836807082174</font>]<br />I11416002RDR.cub (Odyssey/THEMIS_IR/773998971.153) [residual: <font color=\\'red\\'>0.91150500491869</font>]<br />I12639002RDR.cub (Odyssey/THEMIS_IR/782699009.153) [residual: <font color=\\'red\\'>1.1778289552804</font>]<br />I02691002RDR.cub (Odyssey/THEMIS_IR/711942122.000) [residual: <font color=\\'red\\'>0.34370476346785</font>]<br />Odyssey/THEMIS_IR/824157276.000 [residual: <font color=\\'red\\'>0.18355145849252</font>]<br />Odyssey/THEMIS_IR/751627267.051 [residual: <font color=\\'red\\'>0.36767426891234</font>]<br />I11728002RDR.cub (Odyssey/THEMIS_IR/776218444.204) [residual: <font color=\\'red\\'>0.45722231944607</font>]<br />I19091002RDR.cub (Odyssey/THEMIS_IR/828596080.230) [residual: <font color=\\'red\\'>0.27598739181935</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color=\\'red\\'>0.27221605600613</font>]<br />Odyssey/THEMIS_IR/830815439.153 [residual: <font color=\\'red\\'>0.74485039589228</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color=\\'red\\'>0.3135765348542</font>]</div>' type='QGraphicsRectItem' visible='yes'}
-:_QListView	{type='QListView' unnamed='1' visible='1'}
-:_QMenu	{type='QMenu' unnamed='1' visible='1'}
-:fileNameEdit_QLineEdit	{buddy=':Open Cubes.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_2	{buddy=':Load Project.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:qmos.Auto Grid_QCheckBox	{leftWidget=':qmos.Auto Grid_QLabel' type='QCheckBox' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.Auto Grid_QLabel	{text='Auto Grid' type='QLabel' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.Configure Movement Display_QPushButton	{text='Configure Movement Display' type='QPushButton' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.File List_QDockWidget	{name='FileListDock' type='QDockWidget' visible='1' window=':qmos_Isis::MosaicMainWindow' windowTitle='File List'}
-:qmos.File_QMenu	{title='File' type='QMenu' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.Grid Options_QPushButton	{text='Grid Options' type='QPushButton' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.View/Edit Equirectangular Projection_QToolButton	{text='View/Edit Equirectangular Projection' type='QToolButton' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.View_QMenu	{title='View' type='QMenu' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos.View_QMenu_2	{title='View' type='QMenu' unnamed='1' visible='0' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_ControlNetToolButton	{type='QToolButton' unnamed='1' visible='1' whatsThis='<b>Function:</b>  Display and analyze a control network<br><br>This tool shows you all of the control points in your network for which a latitude/longitude can be calculated. The control points are shown as color-coded \\'+\\' marks. The control points have a right-click menu and information about them can be seen just by hovering over them.<p><b>Shortcut:</b>  c</p> ' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_GridToolButton	{type='QToolButton' unnamed='1' visible='1' whatsThis='<b>Function:</b>  Superimpose a map grid over the area of displayed footprints in the \\'mosaic scene.\\'<br><br>This tool allows you to overlay a ground grid onto the mosaic scene. The inputs are standard ground grid parameters and a grid density.<p><b>Shortcut:</b>  g</p> ' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_Isis::MosaicGraphicsView	{occurrence='2' type='Isis::MosaicGraphicsView' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_Isis::MosaicMainWindow	{name='MosaicMainWindow' type='Isis::MosaicMainWindow' visible='1' windowTitle='qmos'}
-:qmos_MosaicSceneWidget	{occurrence='2' type='Isis::MosaicGraphicsView' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_QMenuBar	{type='QMenuBar' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_QToolButton	{occurrence='10' type='QToolButton' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_QToolButton_3	{occurrence='7' type='QToolButton' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
-:qmos_QToolButton_4	{occurrence='12' type='QToolButton' unnamed='1' visible='1' window=':qmos_Isis::MosaicMainWindow'}
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/suite.conf b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/suite.conf
deleted file mode 100644
index dead8573ed60c3f0b35928963f6a51a8759e1a66..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/suite.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-AUT=qmos
-CWD=<AUT_path>
-ENVVARS=envvars
-HOOK_SUB_PROCESSES=false
-IMPLICITAUTSTART=0
-LANGUAGE=Python
-TEST_CASES=tst_phaseAngle tst_movementArrowColors tst_gridTool
-VERSION=2
-WRAPPERS=Qt
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_gridTool/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_gridTool/test.py
deleted file mode 100644
index d5935b5b592d6925d8617942e55be50c4aeb195c..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_gridTool/test.py
+++ /dev/null
@@ -1,225 +0,0 @@
-import os                                                                                               
-import shutil                                                                                           
-      
-def main():
-    # Backup current qmos settings                                                                     
-    try:                                                                                                
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qmos.squishbackup'))                             
-    except Exception:                                                                                   
-        pass                                                                                            
-                                                                                                        
-    try:                                                                                                
-        os.rename(os.path.expandvars('$HOME/.Isis/qmos'), os.path.expandvars('$HOME/.Isis/qmos.squishbackup'))
-    except Exception:                                                                                   
-        pass
-    
-    startApplication("qmos")
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qmos.File_QMenu", "Open Cube..."))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/lub2675j.342.lev1.cub")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    snooze(3)
-    
-    # Change the projection to orthographic
-    clickButton(waitForObject(":qmos.View/Edit Equirectangular Projection_QToolButton"))
-    mouseClick(waitForObject(":Save Map File..._QTextEdit"), 3, 9, 0, Qt.LeftButton)
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Shift+End>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "Orthographic")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Down>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Right>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Del>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Del>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Del>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "157.9")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Left>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Up>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Up>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Up>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Up>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Up>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Up>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Del>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "<Del>")
-    type(waitForObject(":Save Map File..._QTextEdit"), "18")
-    clickButton(waitForObject(":Ok_QPushButton"))
-    
-    clickButton(waitForObject(":qmos_GridToolButton"))
-    clickButton(waitForObject(":Latitude Extent Failure.OK_QPushButton"))
-    clickButton(waitForObject(":Longitude Extent Failure.OK_QPushButton"))
-    clickButton(waitForObject(":qmos.Grid Options_QPushButton"))
-
-
-    clickButton(waitForObject(":Auto Grid_QCheckBox"))
-    mouseClick(waitForObject(":Grid Options.Latitude Range_QComboBox"), 127, 3, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Grid Options.Latitude Range_QComboBox", "Manual"), 53, 3, 0, Qt.LeftButton)
-    mouseDrag(waitForObject(":Grid Options_QLineEdit"), 77, 10, -92, -5, 1, Qt.LeftButton)
-    type(waitForObject(":Grid Options_QLineEdit"), "0")
-    mouseDrag(waitForObject(":Grid Options_QLineEdit_2"), 73, 1, -101, 2, 1, Qt.LeftButton)
-    type(waitForObject(":Grid Options_QLineEdit_2"), "2")
-    mouseClick(waitForObject(":Grid Options.Longitude Range_QComboBox"), 126, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Grid Options.Longitude Range_QComboBox", "Manual"), 67, 1, 0, Qt.LeftButton)
-    mouseDrag(waitForObject(":Grid Options_QLineEdit_3"), 76, 10, -90, -7, 1, Qt.LeftButton)
-    mouseDrag(waitForObject(":Grid Options_QLineEdit_3"), 74, 6, -74, 2, 1, Qt.LeftButton)
-    type(waitForObject(":Grid Options_QLineEdit_3"), "-113")
-    mouseDrag(waitForObject(":Grid Options_QLineEdit_4"), 65, 7, -67, -1, 1, Qt.LeftButton)
-    # This froze for mantis ticket #1060 - we're just checking that qmos doesn't lock up.
-    type(waitForObject(":Grid Options_QLineEdit_4"), "-110")
-    
-    # Verify sliders are accurate (part of #1392)
-    waitFor("object.exists(':Grid Options.Minimum Longitude_QSlider')", 20000)
-    test.compare(findObject(":Grid Options.Minimum Longitude_QSlider").value, -113)
-    test.compare(findObject(":Grid Options.Minimum Longitude_QSlider").minimum, -180)
-    test.compare(findObject(":Grid Options.Minimum Longitude_QSlider").maximum, 180)
-    clickButton(waitForObject(":Grid Options.Ok_QPushButton"))                                                           
-
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "View"))
-    activateItem(waitForObjectItem(":_QMenu", "Hide Outline Column"))
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "View"))
-    activateItem(waitForObjectItem(":_QMenu", "Hide Footprint Column"))
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "Settings"))
-    activateItem(waitForObjectItem(":_QMenu", "Set Current File List Columns as Default"))
-    snooze(1)   
-
-    sendEvent("QCloseEvent", waitForObject(":qmos_Isis::MosaicMainWindow"))
-
-                                                                           
-    snooze(1)                        
-    
-    startApplication("qmos")
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qmos.File_QMenu", "Open Cube..."))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/lub2675j.342.lev1.cub")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    snooze(3)
-    
-    # Test remembered column view states
-    waitFor("object.exists(':View.Show Footprint Column_QAction')", 20000)
-    test.compare(findObject(":View.Show Footprint Column_QAction").visible, True)
-    test.compare(findObject(":View.Show Footprint Column_QAction").iconText, "Show Footprint Column")
-    waitFor("object.exists(':View.Show Outline Column_QAction')", 20000)
-
-    test.compare(findObject(":View.Show Outline Column_QAction").iconText, "Show Outline Column")
-    test.compare(findObject(":View.Show Outline Column_QAction").visible, True)
-    clickButton(waitForObject(":qmos_GridToolButton"))                                      
-    snooze(1)   
-
-    # Test remembered auto grid state
-    waitFor("object.exists(':qmos.Auto Grid_QCheckBox')", 20000)
-    test.compare(findObject(":qmos.Auto Grid_QCheckBox").checked, False)
-    test.compare(findObject(":qmos.Auto Grid_QCheckBox").enabled, True)
-    sendEvent("QCloseEvent", waitForObject(":qmos_Isis::MosaicMainWindow"))
-
-                                                                           
-    snooze(1)                        
-         
-    # Restore original qmos settings                                                                   
-    try:                                                                                                
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qmos'))                                          
-    except Exception:                                                                                   
-        pass                                                                                            
-                                                                                                        
-    try:                                                                                                
-        os.rename(os.path.expandvars('$HOME/.Isis/qmos.squishbackup'), os.path.expandvars('$HOME/.Isis/qmos'))
-    except Exception:                                                                                   
-        pass                                                                                            
-             
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/test.py
deleted file mode 100644
index 46346d5f651edc35b0299444d15014203f54a86a..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/test.py
+++ /dev/null
@@ -1,74 +0,0 @@
-import os                                                                                               
-import shutil                                                                                           
-      
-def main():
-    # Backup current qmos settings                                                                     
-    try:                                                                                                
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qmos.squishbackup'))                             
-    except Exception:                                                                                   
-        pass                                                                                            
-                                                                                                        
-    try:                                                                                                
-        os.rename(os.path.expandvars('$HOME/.Isis/qmos'), os.path.expandvars('$HOME/.Isis/qmos.squishbackup'))
-    except Exception:                                                                                   
-        pass
-    
-    startApplication("qmos")
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qmos.File_QMenu", "Load Project..."))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 149, 11, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "../src/qisis/tsts/SquishTests/input/small_project.mos")
-
-    type(waitForObject(":_QListView"), "<Return>")
-    snooze(3)
-    test.vp("MosaicScene_ColoredArrows")
-    
-    waitForObject(":qmos_MosaicSceneWidget")
-    
-    waitForObject(":THM_AEOLIS_auto_035068")
-
-    #openContextMenu(":qmos_MosaicSceneWidget", 225, 200, 0)
-    openContextMenu(":THM_AEOLIS_auto_035068", 50, 25, 0)
-
-    activateItem(waitForObjectItem(":_QMenu", "Show Point Info"))
-    
-
-    waitFor("object.exists(':Control Point Information.<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />Odyssey/THEMIS_IR/763079637.076 [residual: <font color=\\'red\\'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color=\\'red\\'>0.19328122482455</font>]<br />Odyssey/THEMIS_IR/795837905.025 [residual: <font color=\\'red\\'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color=\\'red\\'>0.4287836943445</font>]<br />Odyssey/THEMIS_IR/859135323.128 [residual: <font color=\\'red\\'>0.24759365861102</font>]<br />Odyssey/THEMIS_IR/728100510.128 [residual: <font color=\\'red\\'>0.22138667256272</font>]<br />Odyssey/THEMIS_IR/725348214.153 [residual: <font color=\\'red\\'>0.15371356223479</font>]<br />Odyssey/THEMIS_IR/706792855.230 [residual: <font color=\\'red\\'>0.27622761966836</font>]<br />Odyssey/THEMIS_IR/711942122.000 [residual: <font color=\\'red\\'>0.24848443615479</font>]<br />Odyssey/THEMIS_IR/798057327.153 [residual: <font color=\\'red\\'>0.068010234920038</font>]<br />Odyssey/THEMIS_IR/704218148.204 [residual: <font color=\\'red\\'>0.054820451973017</font>]<br />Odyssey/THEMIS_IR/776218444.204 [residual: <font color=\\'red\\'>0.38205196382913</font>]<br />Odyssey/THEMIS_IR/828596080.230 [residual: <font color=\\'red\\'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color=\\'red\\'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color=\\'red\\'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color=\\'red\\'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color=\\'red\\'>0.24197426398359</font>]</div>_QLabel')", 20000)
-    test.compare(findObject(":Control Point Information.<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />Odyssey/THEMIS_IR/763079637.076 [residual: <font color='red'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color='red'>0.19328122482455</font>]<br />Odyssey/THEMIS_IR/795837905.025 [residual: <font color='red'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color='red'>0.4287836943445</font>]<br />Odyssey/THEMIS_IR/859135323.128 [residual: <font color='red'>0.24759365861102</font>]<br />Odyssey/THEMIS_IR/728100510.128 [residual: <font color='red'>0.22138667256272</font>]<br />Odyssey/THEMIS_IR/725348214.153 [residual: <font color='red'>0.15371356223479</font>]<br />Odyssey/THEMIS_IR/706792855.230 [residual: <font color='red'>0.27622761966836</font>]<br />Odyssey/THEMIS_IR/711942122.000 [residual: <font color='red'>0.24848443615479</font>]<br />Odyssey/THEMIS_IR/798057327.153 [residual: <font color='red'>0.068010234920038</font>]<br />Odyssey/THEMIS_IR/704218148.204 [residual: <font color='red'>0.054820451973017</font>]<br />Odyssey/THEMIS_IR/776218444.204 [residual: <font color='red'>0.38205196382913</font>]<br />Odyssey/THEMIS_IR/828596080.230 [residual: <font color='red'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color='red'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color='red'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color='red'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color='red'>0.24197426398359</font>]</div>_QLabel").text, "<div>Point ID: THM_AEOLIS_auto_035068<br />Point Type: Free<br />Number of Measures: 17<br />Ignored: No<br />Edit Locked: No<br />Odyssey/THEMIS_IR/763079637.076 [residual: <font color='red'>0.064050352600319</font>]<br />Odyssey/THEMIS_IR/760860152.204 [residual: <font color='red'>0.19328122482455</font>]<br />Odyssey/THEMIS_IR/795837905.025 [residual: <font color='red'>0.06646671233399</font>]<br />Odyssey/THEMIS_IR/743903678.230 [residual: <font color='red'>0.4287836943445</font>]<br />Odyssey/THEMIS_IR/859135323.128 [residual: <font color='red'>0.24759365861102</font>]<br />Odyssey/THEMIS_IR/728100510.128 [residual: <font color='red'>0.22138667256272</font>]<br />Odyssey/THEMIS_IR/725348214.153 [residual: <font color='red'>0.15371356223479</font>]<br />Odyssey/THEMIS_IR/706792855.230 [residual: <font color='red'>0.27622761966836</font>]<br />Odyssey/THEMIS_IR/711942122.000 [residual: <font color='red'>0.24848443615479</font>]<br />Odyssey/THEMIS_IR/798057327.153 [residual: <font color='red'>0.068010234920038</font>]<br />Odyssey/THEMIS_IR/704218148.204 [residual: <font color='red'>0.054820451973017</font>]<br />Odyssey/THEMIS_IR/776218444.204 [residual: <font color='red'>0.38205196382913</font>]<br />Odyssey/THEMIS_IR/828596080.230 [residual: <font color='red'>0.20693319566613</font>]<br />Odyssey/THEMIS_IR/765298995.000 [residual: <font color='red'>0.092469166851159</font>]<br />Odyssey/THEMIS_IR/817676676.076 [residual: <font color='red'>0.087222014470049</font>]<br />Odyssey/THEMIS_IR/746478164.204 [residual: <font color='red'>0.33879874333558</font>]<br />Odyssey/THEMIS_IR/819896153.230 [residual: <font color='red'>0.24197426398359</font>]</div>")
-
-    clickButton(waitForObject(":Control Point Information.OK_QPushButton"))
-
-    clickButton(waitForObject(":qmos_ControlNetToolButton"))
-    clickButton(waitForObject(":qmos.Configure Movement Display_QPushButton"))
-    mouseClick(waitForObject(":Color Criteria_QComboBox"), 67, 15, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Color Criteria_QComboBox", "Measure Count"), 53, 2, 0, Qt.LeftButton)
-    mouseDrag(waitForObject(":Min measure count to color_QLineEdit"), 28, 12, -16, 0, 1, Qt.LeftButton)
-    type(waitForObject(":Min measure count to color_QLineEdit"), "5")
-    clickButton(waitForObject(":Movement Options.Apply_QPushButton"))
-    test.vp("MosaicScene_MeasureCountColoredArrows")
-    mouseClick(waitForObject(":Color Criteria_QComboBox"), 81, 13, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Color Criteria_QComboBox", "No Color"), 63, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Movement Options.Apply_QPushButton"))
-    test.vp("MosaicScene_NoColorArrows")
-    mouseClick(waitForObject(":Color Criteria_QComboBox"), 58, 11, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Show Movement_QCheckBox"))
-    clickButton(waitForObject(":Movement Options.Apply_QPushButton"))
-    test.vp("MosaicScene_NoArrows")
-    
-    sendEvent("QCloseEvent", waitForObject(":qmos_Isis::MosaicMainWindow"))
-
-                                                                           
-    snooze(1)                             
-    # Restore original qmos settings                                                                   
-    try:                                                                                                
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qmos'))                                          
-    except Exception:                                                                                   
-        pass                                                                                            
-                                                                                                        
-
-    try:                                                                                                
-        os.rename(os.path.expandvars('$HOME/.Isis/qmos.squishbackup'), os.path.expandvars('$HOME/.Isis/qmos'))
-    except Exception:                                                                                   
-        pass                                                                                            
-             
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_ColoredArrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_ColoredArrows
deleted file mode 100644
index ee1739617150f83e7216467bc259405bffe8989d..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_ColoredArrows
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":qmos_Isis::MosaicGraphicsView" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_MeasureCountColoredArrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_MeasureCountColoredArrows
deleted file mode 100644
index 11d8aed1120aeb04b5e9d8c3dfaf6e1da6fb2554..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_MeasureCountColoredArrows
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":qmos_MosaicSceneWidget" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_NoArrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_NoArrows
deleted file mode 100644
index 956c657aba2cbbe9293ea1daf3a7660c8a6bed47..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_NoArrows
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":qmos_MosaicSceneWidget" type="PNG">iVBORw0KGgoAAAANSUhEUgAAAeIAAAH0CAIAAABuBLlyAAAACXBIWXMAAAuJAAALiQE3ycutAAAgAElEQVR4nOzdd3hT59kG8Nt7773wBA8wEKYTgyGBQIBmJ80gu2lGk7RpM5vRJm0GSUiTtuFLSgYJIZA9CAnT7L1twGYYvJe8ty1b0vfHkWX5aFiSZenY3L/Llyqd856j417m7dNXt57jkJd7/OChw0XFxSAiIimJi42dNnWKszBHj05Ksvf1EBFRP+cKCgA4C3P07XfeZe/rISIa4fJP5JRXVWdv2TLgyDlz50aFh8XHxW7aku1sgysjIiIAwhz9wvPPDjjylVeXzJk718vdDYDj0F8YEREBgDBHq0xw5x23a4puVtNERDalUCjMGs9pmojIpsydprnoQURkU4r+pk7NUOjQHs9pmojIphQKpeYnIyMTQEZGpvZGhUKpPZ7TNBGRTWlK5szMmZqNmZkzWU0TEUmCUqlQKhVZWbNF27OyZgu7lMp+0zQ/QiQisilhTSM7e7OhXSKcpomIbIqBPCIiSeM0TUQkaZymiYgkTaVSmTWeSQ8iItspLi4x9xBW00RENjJn7tzPV602fbDwhNM0EZGNBAQGvf7Gm/knclLTJ5jyuG/XDnDRg4jIZiZPnmz6HH3kyBHhKE7TREQ2cuTIERPn6PwTOZMnTxaO4jRNRGQjrKaJiCSN1TQRkaSxmiYikjRW00REksZqmohI0lhNExFJGqtpIiJJYzVNRCRprKaJiCSN1TQRkaSxmiYikjRW00REksZqmohI0lhNExFJGqtpIiJJYzVNRCRprKaJiCSN1TQRkaSxmiYikjRW00REksZqmohI0iyrpp3te9FEkrUC9Xq334tAG18JjRiWVdOcpon0WIH6hfA1tEvznFM2meXIkSOmz9STJ0/et2sHOE0TmUszff+KZvteCQ07XJsmIpI0Jj2IiCSN1TSR7fyKZi5Mk7lYTRNZh5HPD4kGg9U0EZGksZomIpI0VtNERJLGapqISNJYTRMRSRqraSIiSWM1TWQFpqTxGJomy7BDHpHZVjzxoHjT26//+t5b2hsWPvqU7S6IRjR2yCMyz4onHtSdgn8FMm68TfNy/3drbHtRNJJZ1iGPix5ERDbCtWkiIklj0oOISNJYTRMRSRqraaLB+jU+MKNygHuyMI1HFmPSg8gMp9JvnQbUbnpBe+M0QCka9+AEG14UjXC8FyKRefyW3C/asj/Cd2xdu+al8i8fMDRNVsS1aSIiSePaNJGpTqXfmj/Vy95XQRcdVtNE1qT8ywcHuTBNVsVqmohI0lhNExFJGjvkEekxQ/WD7sb/Aesemb4OFzRbXqlKEMU89GJomgaDuWki/f7PIUtn21e/r4/UvPgwsELvgUzjkXWxQx4RkaRxbZqISNKY9CASm6H6QXfFwyn9kT3XhGtefhhY8UpVgmgM03g0FFhNExFJGqtpIiJJYzVNZDmm8cgGmJsm0qNk71bhSc3h6cKTaUCg6vrKbb0jbkThNwFhABbb4fLoosLcNFE/Z9Z9jUUuYeMmAzj5qXP8AoV6x4cISG/qbmrQjIy4vOVUkBe+8Ale3KLZyNA0WR1z00RmcPELcPELsPdV0MWFa9NEAwu54a/Hb55k76ugixSTHkT9/G6RyzstBrPPu/KbduU3fTm1K+1/3t/v6fdlcYamaYiwmiYyz4RYbwBZ44KzxgWfWXsOwMrvzq787iyA7IqUJ577+YnnfrbzJdLIwmqayEJF/h7TJoYCmD8rZv6sGACTg4ofeSDT3tdFIw2raaI+Z9Z9bWTvrvymCbHe3W0tRsYsW77n7deu1rxkaJoGj9U0kUnCR6fobnQ6GKCYL9O8zLjxdhteEV0sWE0T6dcvNE1kP6ymiYgkjdU0UR+9aTxRaPrXzM6H9sTZ9LLo4sZqmsgKQl77bNM9Gfa+ChqZWE0TEUkaq2kiNbPSeEX+HuGtXaIxTOPRUGA1TTQwvWk8IttgNU2khylpPIamyTbYb5pGgm2Hd10+ZSaAv9c+a8r4l4OXDPEVEVmNZf2mOU2TPW07vMvI3t/5PWT88I+bPjDlXQ5s2gngNx+sP37zpM6883AIriwqDw7xBZB3MNdz3nQAeQdz0qaxKx4NLVbTNAyI5uVJKeKZ8ejpnMG/i25oOm3aRHywHkBkXFRpcVdweMivGU13bwxBWki11jAhjcc4Hg0RVtMkddsO79Kdl4kuHkx60MXl46YPBr8wXR0dHChrMj6GaTyyFt5ZnIarN8vWa57PRSSAv9c+O+DCtCHCnWoN7T1Q3JUW5gqFOCitTRSaJrIWrk3TsPRm2frbQ/pWg2WtJQ+c+ywioN/cDeDp6AWDf6/AqDgUG5ugAWTcePuR5XsG/15Eurg2TcOerLAkZmzy00j+vC1fe+5eXbPfshMm3N6WAACTsB5VwMQ13hPhDQDwmbkWAFLQAjge/20h8gd78UQDYjVNpMe6jDNxqaMBBL+EgrntedXdcQEuUMr3pcsXHPSvD/GfuKFdM/jH9bXA7al/wEdly7RP8mr/cz4fvcUWl04jDqtpIsBAC9Pgl14vmj/D18AhhfkFmtD0JMXff1h7QvtGiPvRthB9h66sedy6F0wXDyY9SNIklcYTSmnRxpDXPrPLxdDFgz09iPpJuL1tzzQv08f/uL7WPfuyobseIlbTNPyIYh6Cz9v+Nd/9Fs3L1TX7dWMehkLTxluYahamhZfCwnRBdJj2mAFXPLgwTRZjbppGghuXlV53D174Xqa1LeEenNEe8+ltyRac2Tc4HNXdg7s6okFh0oNGjt/PCtA839x4anH/ivueNWdmLjTpPBEZyoaDA4xpvawvjZc2+8oza0+Yc6VEZrAs6cFFD5IKITRt76sgGkKsponE8g4ej0sdbXoaT7Dzmyuzbt4sPN/7/id7tXaNuQk3PvOY8Py7N/5r/SumEY25aSL9oWkRURrPIe6lfPVK+IyCXTem9y234F/v/3fc9Ysuhadmyw689crD6tw052syF5MeJF0mhqZvXFb6yg2hxse8uqXElI8QjaTxwsoeOhp569HIW4tcrvrx6htUVffFBrxWf+MMj60JURNePd9y34AnF7zy8OOaKZvIFEx60MVi8C1Mx9S+3OzvPfpAZ1lo4AWfQ0ZG9iulnd66oed/g3lfusixmqZhRm9o+rDvspS2GzQvdWMeRpgSmr7gd0d96FOGxuzcff6Ga9JNfDsic7GapovLhY460RaXOXNWdgIuAND0jd84ALi89NcymBaajrtkasnu80NxqUQCVtM0jFmWxot089P+6Tly5BXXnKaetqaeNq8X65pyWgY8Q8e4yn6v4z2+P1EAYNmenH+9/1+XxAmf5p79NPesocNfeP9dfn5IpmNPD7rY7alpBrDz2NGdx44CyK86M9AR/ewsr0BlV1ZCFIDr0xMBjEoMWZAYsyAxRjNZ/3PPUetfN100mJumi8iFjrpINz/tLWt++jHd32sXMHGMuirPmD/lzNpzo15599iNM9FZ7eWHGqX4PJXFZXGpSdpbyg8+lzT/B9GwBYkxAE5b93egiw+/hUgSZcU0nnH/l+V2d02E7nafDoS5BXa2qb/gkpHnLRrg//mGwbwvkYm4Nk0jn4mh6ZSlTkfHq4wMaPb39mrp0LzctkLpsTXBCtdHZBSTHjScmJ7Ga8zO0RoS8HHTBw9+ltH5B9R+uavfwR7G3q64vifMx6nM74n60KdQCwCReQ5loYFAv2hHVmZCuVarprFw1zw/7fvelPq3T8Hgx4lEA+LaNI1Anee7ALhGxKpfVzQD8Eyb0gn4zRmvGdaUnWvkJJ7+gajvMf5GJaFRqOyC0ZL6sxNnX8ycZNJ1E+nDnh40YrkE9/6hVgCAe6IbgK7zciOH+MXpfFyoo2NcJYr17/ryixWJ8+YaP5xpPDIX16ZpuLIsNO0a5SL8CC/T/Qe4n1aTssGSiyOyHuam6WJREeMYLDP2CSGA8KmhQhqvYOFMQ2N003hEQ4rVNEnRIG8orimWDZGXd7slusJwGk/EeBpPb2iayFpYTdMwZig03bznhFd6olmnGjCNJ8I0HtkMq2ka4d7MrZ+5cNtf658QbW/Kzt3sIW7DpE1I42lealqYioZlZfabrHXTeBZeN1Ev5qZp2DAxNH1j8yWdBr6h/UL039TPooHpAOANfBcCAHgDAJLl/xT2a9J4LQF9oWkRpvHINpibpovI72t+JzzprlHIq4oPuTXlZPouaAwCELvG6UySCrMsP7kpaTwiC7CnBw1LVrmheIJ3v+8geoebFpoeBIamyQJcmyZSq68WL23ohqaZxiPbY9KDRhq9abyKGMe2piLheXeNwiVKz8LdrKy5A4amdTGNR0ON1TRJjs1amP4wwUVYmDaOLUzJvlhN00ijHZp+M7d++YywAQ9Rf35o5JymtTDVTuMRWQuraRoeTE/jicZ87vulbmi67cj5Q25NAC7k74I+QmhancYD0NfCVE1I44lC09oYmiZrYTVNF7XI2AnaM3V50SEAXT2NvsqSjqbCQZ6coWmyClbTNPK913gCwPaOCuFHtFfl6wKg0+M8AHi5A3B0d2t3CFO6qpvn1bQUCU+MpPHYwpSGDqtpGn7MDU3f4J0AYKJbsPAjbHRuzAdwQtlY7xcJwLHTA4C/ZzgAdxc/AD1u6sSIsJHIXlhN04iivzdevE95g/7bXPm0qtt6zMq66jH3m1Lf+eLcgksBlB6NLNwZL+w6tiPw9PdKADs+9Du7aeymf7sNxZUTGcKeHiQtg2xhOiCvOqfmiB73KhxZNH16uaNMa9e9K/4CfKF5GTmhUg4k7/FoTS1yDU1AAWKmFobHRcdn/7oNaPw0GEC5C0PTNORYTdOwZMUWpjf9HG88jecamuDe3ql5uW2FUvltuveCJrPehchiXJumYUBvGm/go3Lr509s093ufqxcSOMZUtvqAEAe94gmjTemAifd/Y2/HVuY0hBhNU3DlSmh6fbIg3fLHjJykhZv8bcQnT09S49GJqTra13aqzogBHXdxi+PaTyyFq5NkyRc2XKb8OQ5/OHP7S+JdwfibcUBAE84/cm212VQ68Hga/7hVn4QYAtTGmLsN01S8Y7nSwBqIHvM/T7RrtWy/Vf6j/1S+Q00abztpYN5L+fGfPV9AQAATv5NAPIjI1INH9KZUIcqy9+RoWmymGX9pjlN00ggaymCdxCAjqa+JeySsJCgm+VN8HWQA0BDkhvQiQLIEpyQEFEOhb2uli5arKZJQmqOyfzHBOjdlXKH50u4G2iUvYKAlJqtcP/PPRj3x77pdRzigIazN+kcqRWaNpTGE0LTbz4Vdur62WH1DWdzQoOT6nrCAMC5sNY5IBKQO56sCwwPqQ3uu3UAW5iSbbCaJvu7suU2YcXDuBUvrL/V8Wag+U83yn8/KwBA4eN9t1851FL424/DzU3jaWRsfAtYKtqYeMSzA83aW7qvWK/8Nh36/6eEaEgw6UHDwGOPTi15sdP4mN9+HH72pmrNS0NpPBHd0HRjR78/b+eASLdOufBcu5QWYQtTGjrMTZPUrZbtB5Ct2nar482ajVszP5h84jrNy0MterrZ6U3jGQ9NO7mpvwjeE/aAJjSddgGHw/vuDDBgGu+073undjzINB5ZC9em6eKlG5oGIDsbHJXQqKnDk/YUIyAiIedkAoADLbuuwPzdVQDgU1cEuD6wC8BdSGqcZ6NrposQ7yxOFzshjWdcyfTQvDTPU4siABwcH7S9fVTP7YkAup+esGFi+YCHM41Hg8G1aRpOKlwr4jsN3jDFREILU5mmi3STeAm7y5GpO5IQrk3TiKaTxtMdIqTxbnhq6anrZ4t2xebUlaWHA2htafUL0t/T46rjUXtejbPiJROJsJomqTASmtb2wvcyIY1nMSE0rb3l3hV/0R2WeMRTtGXC5u2a52Xlr45O/Gwwl0FkIlbTZGcDhqZNT+NZ3MI0PzLC0BhXuTrU0eir2rZC6bEyXXeM3jRe1YqyqhVlZl0PkV5MepCkrZbtfwxTs1Xbko4lH0Zu5KXB0Enj6Xozt/61S/3W62zvTeP5GjpQCE0LabyAUgBIlLme9O6rSxp8/NE0QBpv4vnXT6EocGEIAM1MXfTyOe1hcX8fbeQkRNr4LUSSri1bdmG8+qZZyclJAFrQKLw8faZAM6wl0ike4tsVrg/48W7ZQ4g3eHLdNJ6Tm5ssp18azzJflBU9kzRWeC5M1vge4fdGawawyiazsJqmYSk2Jkp4Ulw6cB4OQNwfTwlPooDr/qP+/nf1bEveuj3ff8b9LmXlAJC96derEGXJWYhMxmqaRo6qGk0jpFkA3H6zsuvUI8IEXfV4vHuTY0991dmuU2cuTUurdZz+31YAcocKYLzx0/YEt6LF8qv6x/fvf/HIm5YfTxc9Jj1o2GgJbAyoCtbe0tC4W/tlUMBM4eetH/YBeOurowDKHws99zvxF1ga2iu1X2qn8TShaVPSeEQ2wKQHSYKJaTyz/HHcx7KDe9rbz/n4THRvcmwPUgAQSmnNGCE0be6ZNWk8hqbJBrg2TfZkJI23ZcuuKVMmJD7gdebJRs3GpVs7b5vselDfeNdUP0PvUva1EwDAGYhIPwQAwQgHCi7IPAKBh0avhMdTokMSj3gCHa7ybsBV2FJ/+1aPlemdPib/bkRWwp4eNIw1t8QnJPiLWpi+k9fv77Np/eTQy5VR01VBVyrCU+suXFunmFXXlHEOQM+4TgDn/twgjBS1MNXW6KuCgTSedmi6eV/DYH8lIh2spkm6fpXnPYape933LWpfpNl4cP7naQfmGz9w7Yedd2yehf7RapeyxmLnTsAdQKebF9CuvdfJzQ0dgNHQtEhNyGd4C8BxzZaK+bXJ7ZHJU38+h5+1BvYr86tWlDE0TWZh0oOGt5zOlmR4ASip2Nu7bQaA0so9cZi2cq8nInpwWtjuB/ihFueBvx4pundOGuqQAZzPPg8gf7dQJpcDcPq5uwhNsUbf94vCmHkhOJh/94Somr6t7iu3n1x4ZUgkgF+Kw+9LLSrzWWXVX5cuRqymSXLKliwDkAKkHAYwFYDr8m8B4Nm5z2d/+OVzvpGrvwdQcfsN2keFBvV+jbux7+WVaU2NuwKdkssCnKKVbc2ynkpZQnhYqwOO4CFl9xnfZgBRUyJxDnHjnUsL/IOjWnsAVaZz0EmgpgdAi0ulkxJCxyb/+saKs1Hxk86rgHkRMgCXHj25KbzvazJCkfyJmzLsbOR9qUXCRqbxaJC4Nk0S4pjr55jrByB08Q0lKYk5i5KF7T3XzK57dm7QAfnKyVcDqL1yFnTSeABafJ5r8XlOSOOVOL4IoNlhr2PWOlXY8frgdY2xO10Tz0U77Cop6xDGe/Z4AkgucAIQKvOf7IvYFvVdWpI61CsVE1qDW7zUnyK2+HoDOBUxCwBilp/ZngjAvbNF8yMMWyh3APCSh/IlDyWAJD89bfmITMdqmqTCMddPmdgKYNTC59CAGQkpUKHhBVyHxUgAUOQ8bsKd4/AVdhg5iWfHA8Kic8pN+5a+eyxrTHRH3ij/OFWXi9ylpafFRe4QmK8ZfO2tEx9zv+nNQ2FnHe6R+8tkFd5eIa3CLo/y6pqkYJ86YxecVu6/aWHQGKgAlHS2jvEM6NDae2+ng5P3F2s+9sNzFv4XQiRgNU32JwpNV+9bmVuR3eR8Zo/Ddp/Pmndhk7KiDMDG9fl1p87pPYMyYYC/yfbOGgA1ga6i7Ruu/1h3cNwpNwBOCiWAo7516N/CNE35x7bqvw/8WxFZCatpshu9oemaVd8HzJtVfaYAwFWfTipZVK29N2hsX0ZCSOMlL/M6e1M14Nji85xnxwOis3XkjfIc3YVuVwB/qktFHYBUAJ9MAVqAf1+IyMD8jCeEcyMMAJ7XuU6PcM9tf1E6r5rQ7Wbs15FXdgpnILIuVtMkUScVlQBOBhdmVqRpNn41dunEdVOCN+8QfX6o8WN53y3Arxjb14jOrzsAwM1xxb+Py17kUPHB6fO3Bra/d3Nk3Sm/tzd/9UhD8e9rixefkwFodH5SOCS20a3dRXHXUcXd39UDuCG/ffHxWiMXrJj4deXB+9NDDbauBtN4ZBFW0zSMadJ42tZ+2HnNr4G4ud/GP9Wl3ut/3hlFivaJQJdm+yOJjagAgPYGDy+/rv5nwrgC2YZkR0R4A9g82g8dyofKzmPzjcDJ/dcipftsyk8AsOHaDKv/akQarKbponN1fkfepOiBx+loL/bNzQo5MHX7jsQEACXO0QdmjrX21RGJsUMeDUu6abwBOfS0A6iuUZfMcie5aMDy0JjnPWaKNna59vv/jvldUQDcbj9StzHG0BsdKYqYk1YoPD/w3GsFTfx/nzQo7JBHw0BjQk/wCRdTRj71uQxAwM2/W/ruMdEuJzfxLWgBTN31dSkWiDbGnWuqSQrWHWyIkMYzfTyRWVhNk50JaTxNaNqKerobALh2u3a5yAE0+vSraq+Ynfau64vqFwqVz7z9wtPI0BNnHzjXcMW+hOLKbbeV+Y674BaRB8B30oXw23PjlO92qq4EEFfjffBSY02o1aFpokGzrJrm/4mjwTLSwlRZUDPGyS/k0zGVM4oBuNZ0IMFly5nu+QtSv8IvesYnDJDGa++s6f0it5rMXTEGOPDcsw9jOQA5HJx6dzkfTYkoa2uO8AXkPWfDulyczj2VG/VNXKezs3tiPQC0hAIyAKM6jk877LxxTk9sz/GuZhhP452/7g/Ck1M/GRs29ugKY7vposSkB0lIzarv/RLSSpWtskhcBSi8XAHI/dwAJYCvxi6dviJN+JKhEJqua2oSQtPC4WccXEf39r27YmxZS47B5tBXzFghx6s/PHMnAD/sUm8tvAbAxDv/A2HK3fEIABdfNwA9zs7oVolOUu06GihUeaRXyzsjWl2BUkNvd/66P0S9/gSA+l9rtO9dK1J432vG/tuhixU75JF05YYXZxalaG+R+7sHbd9VP/tKKJrrmprGbQo+Oa8WFQrg5SYgHFj7YdWkdyfgefhXhvuHAk1eLZ6tf6u6TJTGO5q7cNxUPP/Fi8/Vrq0Yk9YNB6eUAgBuYdcXbHQOknUG3LlO+31Tp6uXRAov6L9UxfgNA4amjc/RRIZwbZqkxSHavM/i/OSOPsHOTqM+9gqrOerUBiBklAxAmXt9dUOnaHB7V/fV+R2OT28QXl4fpV4N72oRf4lcV3FuWvmxqfHT3FLnfgvA55qNM8LXAbgkdsVVo9cAWHzZiwOcwqjC+17jigfpxaQHDT+dkcZudVVc7QDA273fRiGN5+ai//8Iek7Ne+vUXbppPLlLaE+zN4DyY1OdFV6unsrKvO4LgSmKg/4tB6aXV18K4FzVwgOlczWHaKfx/vzHN8z8zYj0YDVNUteYogw53O9PzlBo+oHPK4yfqrZOnZWWOykMjQmSdZZ5OgjPVWh28uoAoHDpdIislymMfUr4xd5/irbc6q1gaJoGj9U02ZPFaTy/IAeZq/6/w+lPLl6x7KhSpf4sscWxEzqh6UmTsr5zfCI1Z6sMer7n7e/tGX/vI79kGFx+8W/yKI9Tv3t9tzzM1UM0gGk8siJW02QHRtJ4JSWlYWGhoo2bi5RTI/T/1SkjDf41hgW4t3i2dnU1QSc0DSBv+R26hwRVOgNwUPZtyf/D/tkV6o5Lgfipu119G8Z6hW+xwhdAbXfEqTZ/AGccDH4vkWgwWE2TVAhpPOH5VZ9OKptfqb03cGKy5nlzSzyAK9YFls6uB9Du+T/3rmtKHPq+pjghpqa7yODXCI/mLtR+2Q0HQyOdvdTndBKH8QBg0f6yzdeH+jvXjVI2Ahilqv62xrnQq+ajYm8AJ8Y+4/lTk6EzE5mO1TRJzgknGXTSeF+NXXrJD5PUaTx9imv0f5v8Zdm0e/3PG3qvnjHNmuduYdcLT6IXfCUaplDqm6d7dccfvMK5ODEg+HJ/RWSn/9Xh7QASC78Q9gqhaabxyGKspklCtna3n1P0/XWdqGs6UddXkObWNQLYKm83dPjaDzvnf68/ueyPAnnrBO0tA6bxnHsaDb3RiRh/X8c2Q3stwDQeGcFqmqQl2qlvYTjR3yvRv6+ddJKft74j+hHSeCJp/rFjMGuct78Qmk6K8gEwPTocwOigKENpPG2KdnGp7gFj9TWRFbGaphHCeBqvFMePVTUIzwvrWgDkyeoBlDXVGDqk21n9d15yMt0tobmhLhlAz7wKxUGDHZfOVAVNjlNfxvn4xbmzg8z7HYj0YTVNkiYf6+i+z2DGWZfeNJ5e0Yc2NPtkijYGyTpbQ8W3gzGipacnwMUNwEd7+U0WGiqspslu9IamAwPEaeX95U5jQ5TaW4yEpjW003giqemZn3+Za+hAByX0hqY1aTz/JnFKWiQy6POP1/CuLmQ1rKbJ1gzdUFw7jVcwt0x7b/QU/bOeMtJRSOOJtovSePnoW9nIO3219q4erTSeEJrud6BWaFpkyt7GXTOCACjaevQOILIWVtMkLcUeDbobvxq7NPmb8dpbNKFpwa7avi8ZTogxuNwsoojpS2vopvE0oWko9H9a2BnipHe7Nk0LUyKLsZomqdja3a6JeZyNKrvkfJJoQMzufYWz5hg6XG8a72XZtLfierxR3tMhPptArhPhEBhJ42m0NSjQG5p2K/IsO2YwKcjQNA0Gq2kaTo50d0Y5WbjIkHW8WdPCNCukw+JrOBHjH4ZWAO4+fdV0yBi3kDFulp2QoWkyjtU0jRx6Q9OCxqZuvdtV43P0hqa103jO4R0ujf4YKI1X1BLqW3RGeJ53l/iOX0QWYzVN0mV6Gk8ITZ+edmLAkd2OChhO42lamIrobWHajh5fuEJfGs9tVxtD02QtrKbJPoaihendWUsGDE2npmd+52jwMz1TWpgaubbRs32YxiOrYzVNNmWkhSmAwIAAURpPNzSt4ejZ7tzY6lux2LXO5/xdMWN3jT684cf0xBK4Obgk19WHlrt7dv0rOVc3jde++m7hpZhFpAEAACAASURBVG4az5QWpv3IzfjqDZFlWE2T/WmHpnXphqb7WpgGb+7xay/3k0dtkBVOKEuZPtOx262nxM+3IcS5w7utRW7xJRlP403Z37jhanFTbF1M45FVsJomSRDSeEJoWpTGE0LTRtJ4VY36b2S1oiHVyDsaD02bSEjjRbsau80u03g0SKymaSTY/Yx8+g79H9nphqY1aTwLQtOaNJ61MI1HA2I1TcOG8dB0Vb3BNF6Poks7NK0xYBoPWi1MjafxiIYOq2mSKNPTeNdsVH/QNyFqjPb2XY/PvuWG3z1z28Otreq/WCGNp5dCqWeXdgtT47RD02xhStbFaprsZjBpPEfPdoV3v2xc2m1XAlCiS3jZ7mDw80O9oenQ2u5aNx8hjads0H8/F216Q9NM49FQYDVNtqNJ4wmhadFeU1qYiiSqkmOc+3WwG+vSFejjOia04DIfPQ2YjIemvf3V31R0ClUHrhUtzjC5heno2T5G9hJZjNU02ZllLUwBdLmvBXBaqV5eEFY8zsv8ARS0hxxvEXfYMBKaDpX163Xn5OomhKbd/fSU5FP2q1uYMjRNtsFqmqTCsham9S2W/DXqTeNFzPtWNKzHQCnfFtA3rRtK4/GG4mQtrKbJ/gbZwnT3M/IZO/xEG9+VWbhG7IY6E0cKoWnL3kXANB6ZwrJqWv+3CYiGTm8ar2+l4t6sL3WHXfvQ7bob3/rzwrcAfCa8ivoeCz781/91JeW5l8frDu5ycTLU7d/qoWkiUxw5csT0mXry5Mn7du0Ap2mSgp07/i5T+Id/2bn7GXnaz37XPP44gJ8+WO3q4u3o3fRKZcyux2cLI3+++0vHpzfknF2Ymp5ZnH0g+tCGBkwE8M/Gmc97zASu13v+0tPjnEI6GuqSA3FaHZr21X8l6jRenA+AvLsecNvVpn8ckUW4Nk1SZO4NxWNvXqj9shP6u0vDQBrPv7LLUAtTvdjClGzJsrVpVtNkOUM3FG+Bno8QtWmHpm+54Xd9O5bj2d6nehc9BEIa7zoDJXGwj1tvC1P93xT3b/IoNVBNQ7uFqZ51FKJB4do02YjxFqbQSeMJoek9Bgav2Hlroir5tDIobU3b7mfkC9xvEwJ56z9e6+jd1Kpo7nF3157K805fnTRBSOP9AD1pvH7fQRfSeJXKMFVfaLpC2NWbxlMxjUc2Y9naNBc9yDqMtzDdc/d642m8wdOk8TScXNWBa6bxSCK4Nk12ZqSFqcBIGs9QaNp4Gk87NK0hhKZtmcYjMhHXpmkY0E3jaex+Rp663kcIa/z0wWrAW7Nr2Zr3xzg5biqPwXH1lqyQDhRZeA1sYUr2wmqahqVEVfJJpUnlgt4Wpl1JeXpbmHa5qBc0Sk+P02xkC1OyL34LkSTH9DTejHUtAGTRVQOONHJDcYVKfw9rp5BOvS1MNWk8AVuY0lBjNU02ZSiNN+CBui1M/VXqfnXTpt6/f92Jn775SHjZ7qDuZape8RhIUJWiM8zd+A3F9dKEpnlDcRpSrKbJFgZM44kM2MIUQKuDuCu08P3DHkWXaHve6atT0zM//zJXeNmjb41bQ0jjOStVMNLClGk8siFW02Q3g2xhqi0isBl1npqXj446X9Jl0mqyqIWpht40nok3FCeyLlbTZE8D3lBce7CJLUz/U21qGk+3hakmNG2c8RuKMzRN1sVqmiRtwBam03d46d3lCZnmeWdBMYCkms0HvbzPFRcUFp+ryHYB0L5dUZQnP97gsO0/VwNA/WlDb8Q0HtkRq2mSOt0bimun8Zrbjf01aqfxguPGp3V0xIRFB0/uiRwVAsD9EseIOJfRPqpJNxn6UjrTeGR/rKZpuBLSeAIVzPtM7y353OdV14q3hoUL/1l6epyhNJ6Idhov764HzLoGIhOxmiZbM35DceOhaUfPdpVfAIBAqO8PG3f9b/avO+Hg4CK8NJLGC80/0OaZLjqhd53cwytg4vO3/TKmOr7Zf1StB4DQ9n6LzuHd4ZrnbGFKtsdqmmzH4huKa0LTA9JN4wEYd+Mt66r+Kjw3UnVXeLVu/Nu22RW1De4tAALxE1qvASDv7P8/Kv3TeAxN01BjNU1DztwWpsZ1uHwNoFnrjzAiqFVV6yKEpqGTxhNuKN65eYHuqQIa9KfxnFV6NvbdUJzItlhNk33UrPr+SEycJo0nYnELU+NpPG0ugVkAPLwCWl06hS1OzuqPJXsMlNxsYUp2wWqaJMFaLUyNU4Z26m70n55t1knYwpRsjNU0SZpuGk9D3cJUH93Q9AR/PWvWJsqJ8klp1rcOYimGpsksrKZpmBFC09ppPEP0tjCVRxf9u/xO3TSeW7B6jaIqbyIAIY3XcVWh4/5QAA2+vFk42Q2raZIQE1uYitJ4mu2aNJ4uQ2k8vYOVYfr/N4AtTMkuWE2TjVilhakQmjZEk8Yz1MJU7/8CCKFpQ+f0aRP34QNbmJJtsZqmoWXZDcUNDdZN4wEwnsYbd+Mt336+05RLPf6nfbMraoU0niY0LcYWpmRzrKbJDjRpPL17dVuYGknjRQRZ0hHJJTBLFJo2nsYTtTA1lMYTMI1H1sVqmuzJxBamIpa1MNVN43l4BTjP+MXUawUwUBpPCE2bdUKiAfHO4iRRMbv3fXtZpik3FBfxhExTSXQWFGNCxgT/LlRaeBlM45HdNdTX/fWZpwEAXwz4OGdutZe7GzhNk72YfUPxdf2qcnl0kWtNhJGjhDSeQJ3G82caj+wse8uWF55/1sTBr7y65JrfLAKnabKjQPiMX9eyeyxk0VVx5h/e28I0y7tODi/1LQU0oWkAyrCWhrrkQIhvESCk8bp7X6rTeHE+YBqPbKK7u1vZn0Kh1NnS99EK16bJEsbTeHpD00bSeMINxTUvzW1hKjCextOLaTwaFlhNk0k0aTx1C9PcAcYLaTyDd1IB0D+NJw9ML1YB6kI2BajQHpl3+upxN2asq/rrTHjBaAtT9KbxalXR8r40XqFPmyu079zCNB4NH5ymyXLqG4p3t8PgDcXX6z3wbG3YWcwDUDUHrtgCIBwnVU0uLs7uZV6x4T2bHx3lXtLlH+hUq31U5+YFgDg3HdDgpHfeNpTG2zUjCDDpg0Sm8UgiuOhBg6J9Q3ER3TRea0fa2jnhAEKDvr0k8FBQwOnJh3N0D7RKC1NDTG9hauI1EA01TtNkNWejyiLKwqrc+tpoVLm1xOzet+mWy3xj1AXsaEWRZm9zu/5e/gLd3ngCy1qYitJ4g29hyjQe2QwXPcgKYjvUZWlcRwCAZii1t9edc0hy7EZ0X00QpYotVDkCOPFQTcyG2N0hP8/IvFrYlQB8/Q0ARE69phW4bBJ6rsY4AEIL00rAemm83KkFAICCbQAw0/0h7Pmss+XLcgv+GyAaOpymyfqSH/kkGcA2AOvPJ3kbGjZ+T/uJ3tTG0XV7VXWuri5eBb6pwpYLm5dPcnJsWxHktPzzbR9l1t1cm4wrNMdq0njaJ9RO4wEwnsZ70+HpxNNRVe0Bd3c2nIpQuoVu2Nj66AN3bwOAuy8D9mEigIJlb6u/VOl/O9epyT44TdNgidJ4zenKCGDrpEUtt+1Lyh4zdsP+Fwo29u7cohk2CTg+ayqAxpC6pvNxnoEDd53uTeP1W/QQQtNCGs8N/ULTqBv44oU5WnjudF7+guMVACrf+HfQ4pvbT7X8545y7ytDAbRulhk7C9FQ4jRNZtDbwlSvMX6OQtuY8mjPLWPSk8IUIcqwHHglu5zucg/wcywfs7zA+BkmOTmuOj/mep251vQ0nsaAaTy30A052RMRbPyKiOyDHyHSwPS2MFWn8QAAqV/FF89R99pIfuSTrZMWGTmb3OmoaEtEYItmxSO2+4tHR53Pr+5ruXfg8P0w84biAoMtTImGFU7TZDkhjad315GFe5Kyx2hvyYFXjKJqwHN+0nO5ie9u7g3FRS1MDdGsePhcql7Mad0s48I02RGnabKOU9HFl55LEW30P5nbkDZFd/CY5QUrn5tlwbtY64bih11uSTwdZcEFENkep2kaWkd6uqId9d9Q/MRDNZO2pAFwh/j2Vz7o+0Jj+/H8uptrbX9D8VcTT36We5neXQxNky1xmiZbC1GFaZ6XdzcB6HDQUyMDuH5nndPyz0UbeUNxuthwmqZB0U3jmXjg+D3tANpDm5rOx5kyfihuKF7V3nfxNcHTXhjtZcqVEA3e0eMnjueeEp7nnT535tx54XlhcWlxqfgLVpymyVSmp/FE3EMcInwjAXi6N3Z5+A84Hr1pPN3tptxQ3Nn48oZWGk/zxZac7IlGjiAaCpdOnzLgcwGnaRrAgDcU103jjfEz+Hcldzymd7smjSfaLqTxTCSEpoXnmjSeT5t44ZvI7iZNTO/o6BCep6WMrq9XNy+Lj42pqBDfR47TNFnC+A3F/VNHmX6q8KAm1LprXopC0wLd0LTuDcU1mMajEYbTNFlfdvwaUWj6SKO7JjQ9ZnnBN6/oT1AYD00bv6H4gC1MBUzjkRRwbZpszVBoesuYdL1pvI52lxMP1YSt1z9XMo1HFwOuTZNEaafxjDOUxjO7hSnTeCQ9XJsmqTM3jaett4UplKq+RWjdG4rrHmgkjVc1fYa5l0FkM5ymyQzGbyiuNzRtlTSeEJoWfTToW6+ARTcUF4hbmDI0TTbEtWmyGvENxU1gJI03pIQ0nig0LU7jGWphSmRzpq9Ns980mU07jacnNG34QLeOxk54Ami91C0+JxrOCE5uBIDgDqAjFbtSgfxqZWhv0O7A4fuBfAtuKN4bmi4UNpp1Q/HeNF45mMajIcO1abIn3RamQhqv3Tukwffk+FW5n79+qd+v7admnivvrmmqcGg65NWVG3mw7Nq/nBlv6Jwig7mhuJE0nhCaNvEaiGyG0zQNlrlpvNYWg18LdKgO1H4ppPGE59a6objx8US2wbVpkqgoVazwZO/r5TGfJeodI4SmtdN4mtD0gGk8bZo0ngUYmiYbYG6apGvGuhYAjj5uADodzPsLNJ7G025hqiGEpkVpPCL74to02YLFLUwFTf4VdbmpHsq+o8r/OlXvSL0tTA2l8Qy1MBWZXw9NGo8tTEniOE3TwMy6obj2S01oWq9XXxW39s9DrVktTDWYxqPhhWvTZB1GWpgaSuMZPFewS5fjNt3NqgpPdze/nMCpYzteE+0yckNxQ/qn8YgkjWvTNFSE0LShvbppPI8t7aac9kXlbSZegNDC1PQ0nnYL0wHTeGxhSrbBtWmyHb1pPIGQxts9JVDTwjTp/cL37XpDcQvemsjuOE2TMX9uf+nP7S8B+G/nJwC+k/+y87duAx4lhKYN7d37enn0R3F6dxlsYWrR3ylbmNLIwC+Lk0GbfdYIT7Zh1zueLxWh6TH3+8qWLPvh8cozAFCdinjTzxaligUKZ6xr2ZsJAH+55VkAD7x+a+/+YABPPPyy8OJjAPuAf+PNdz4FoFKq5NHFvTcUzzKSxhOoQ9P+/dJ43eb+/kTSwGmazOb3a9yMyGDhuaEVD12z7v0bABwEPjI2bNvyl9tWBDkt/3zbR5l1N9eGrvRq80zv6T/H+tYroC9BJ7QwDcRp41cyvx7bWtpDI9zBNB4NB5ymaQDbDu+alDKh6HhTuOHprDldqfvtQCGNV9GofrljxT+S3i88MX7S3tfL/bf61+Wmvvrqtcv/+qWQ9PiyrbD8r1O3LX951fkx16NOdCrHLj1fOhdC057OccJLZxXkRn6N/mm80DHuhgYSSQ2naRqUgL3+ACI+WOrgdeecM/gRiDnkD2Rdn4MT82o9trRjirs6jdf7TXGBEJoWLXpc/sDfIax4pD8KAP/GzAceNn4Bim75iSePzK6orVJEQ6s3nk+bK4x2t1aHpoMt+a2JbInTNJmhbMmyrWNSk3pvKF79mxrhSWwu1kyunhzkCODMvJrQvbvWTMqcCaeW23xwTv+pPvzvJ79/7L6VL60XQtMvKm/rq6Z31h1+wK39eH65/1SIs0kIrHMw/YJNbGHaP43HFqYkLUx6kNXkXXYw8mi/DxVzzrlop/Fy3kjTe+CLytve8S/Tu0tE08JUc0Nxj4G6gggtTHlDcRq+OE2TlQmldJKjnmDFutrova+Xu//ofVmdV7pTv9vIhjjlar/s18I0xKQvyIhYlsYjkiBO02Rr7kWjfo5oOiwP0t5YppgB4JuWGO0WptO81VO5PKbYrSbcyDmtdUNxhqZJgjhNk9nCwyzs43zNxloAdVNKqnZPA/DWn34QDeiSeWi/9Dt3RNMb7035leoWpi4umgFuQf36Opl7Q3GiYYHTNBljShqvM8pJd2OEq3tIYoxVrkGBfp8Z+sg6oNPC1FlltIWpVhpP+4biDE3TsMBpmqxDiHnoEeyif3t/B1H+4vt/E54LvfFMdPCJQ7MrakUbxS1MdbCFKQ0jnKbJVKI0nkbyI598mTXPyIFdjttclJO0t1wSU9tR6BEW4J4TODWkdoneo/S2MDWUxtPbwrQ3jTcA3d54RJLC3DRZh+E0nguAyz44vG7JnNjVDboH/tfjliX+zaY0r3MJzEIdPLwC2p07AV+YmsbrAXDY5Zako+GAAnDqrut2611db97XAKD9VL8FE4amaegUF5eYewinaTJbVbVM+6Xmy4X19Q0pp0/2pvHEC9Y5dU6xMIk6jbcZUKfxxBW0b0Y2fjbWn1rfDcXjVT4uANCpdIvoa/IXuCi0bSdYR5NtzJk79/NVq00fLDzhNE3miR1lsMwMDwsVuh5NnTyh7MQZ3QF7Xy/3fzetboq4mghYmT8fAELR280j6Jtg4FCehwdkFQAgc0Y4Oo8pK4AKNOLbTO11Zb298SzANB4NtYDAoLvuWJyaPiH/RI4pj42NjeA0TZZpCu7LThjLM2u5ZmPt3tnI3N6F7WFAG9AGIOeWqQCqn5t2DN9fyJ8aEuR867TXnI7cU5q1Y+av1wcdz25MGd865sxbp+563mOm2+zrQ+rdopu9XK/5BPc+opvG0+6NxxamJEGers6mz9HtcnXHMU7TZJCQxjt6OgfuqC8FFs+eAjRBASCo3NhfTtmJMyGJMRX9u3msnR8cjPLl75cWrZ03e0xF2ymvmFAvI3eiDTqe3eyT2Y1+N8kNKG2Dn1f8vY/8khHghmZho7MK8rAWnbZ6esyvUeb3rrzUBE97abpFVTeRpdrlPSbO0cKjvB1g0oOMO3o6J6wtdfrojOmjMwLf+HbzppKgcmfdOTojYuBbuhixCerbKo+WeZt1oGVpPBf/X5nGI7uwrJrmNE0GXT5l5uVTZgrPz93/5FeXTLt1bIJoTPBry42l8YJddNN4mlL6gmJcp/sr2rsm/+a5A4fvL83a0b76btOvkzcUp+HCrGra01VdD3GaJivImbIn7kS/G4pr98Yz4se6xf8YZ1KDJLew68OqHLz8QltcTOrUIb6h+Dn9X4ksfWZp6MP9QiNM49HQYTVNknDbVHG30ss+OPzqU/OyIvTcgcU4ZZSe738HLfgKgJtDs6HQdNOcsriU/FP3tMQEnU8OKu6O2gcgMXKdue9OZHWWVdP8CJGsxn/H1jWTMg3lmfOSTyk+H4e5Z7efjYQLYtA3a184FXkBkSGOtQD85U4AxjvKADQ0qQCVSV82BwBUeodjd3iFuyJE7nR19un3bpsBIHTcCgA/H3nm6slvFETC0NmYxiMbYNKDhtYtxw6qjpnybcE+DY3nPQPFG69I3OKcfwngp9myYPpnNWWXHS4fDWC3g5M7cJkioBkYp/Q5M/2IkMZLP7cYgO4sqx2ajm8q6kRXhXuSt3sVAAe/YxHwFP7S08IqzpfdeWOh08EU4csyx8z6RYiswrKkB6dpMknCojsfbat+IiNdvOMPf7/qzJ4dV7v579iqe1RoUHqrqgRASsiWWoRUzT2bUl2JYGBmOc4uFg2enVAHYIan4jDQXLyuyeVyeUiHZu/urNbJv3T5BEYJaTxfeb3QW8S5RyEPa3cr8ZFrtbprcnYAIHf1LAaE+7Vs88N7x53eSVKiB4F5uUzjkV1wbZqGStHxptL4uGfGTXdu9RT9AHC+8R4Asht+K5t+JXpD05pjvR0WAThUpr41bSjuCsVdih/7euAVe3+g/V4yl76gdKWbwd6kbh4eh5/LmV1R6+DkBEDR4wbA1Vud5wvrBoDkTiR3qsf/tg4ArnZ1vtqVpQnZDZMeNCTSZgWPOZX3+30buv1bRD/+Tz/15OU3FkL/ZOoS5qd3e+WPrkEz+xamz6mu666/EcAVqW8cy3vQ3MuTKwFA4bfbV3EDgJBaH3PPQGQzXJsm+7gQvy6yQv+Hb4bI67ovKMZ92VYIYOeBiJ0AELq27L3eM156HT7UHt858dox5xx9AqMavNoAD/HpdFz6a8NP10S49PbGyzg1Xu8wpvHIxrg2TXaW3d1+29S0shNnekPTfgAmL/s5e+n9KNFz29l3JzRGefqu9isOKSj19wy/Zer92w+8vn/eqkVrH7oHvweAxiQ06vkfAJ+eBji7G78Yl/AeAK2xe4FbBv+rEVkFq2myq3I9vaQFm0vaF6f47tXZ7l5QgfG+eg/Zmvt8xZwpzXB2SswpydnYiWuF7WFzvsKqR7IOA+jc82eELrs0FAA8gFBA/a3x+0qaB/mrEA0RVtMkXXtjf2h7/wpct9v4sEY0ar90SsxxrU4UnrfLW4BAAB8vCA3x6RI27ry5DT0qVXSDQ9VhL8dH2mRVW0eNn+pY0VPn5AIzvk3D0DTZBpMeJGmN1+3Oqr7SlJGjvv+61u3mZjgDUPSogx9hRX0lhUd7t0e7uDupRyeMyCp1KkjjXzvZGZMeZH+iNJ5xQeNTVvsVj63Wc2NyE7n3qFTRDc5HIgce2mvP8aMMTZO9sJqmIdHzfztnNZf834JM0faQB/7x5OU33p3qpfcoE9N4GsLnh7rbFVHVAGJbxV2cTt6791LXc6ICOrqCky9JGnt6kNTl5qciGTUygwNOz1u3aO1DwNfCS/fy8eOQWIKNnqVJtbMKatGQDACoG1UoDFBFNwBQRK317FjYjkJ3RADoQoETkjtw3PjFlD6zFIDs/TUAsDRdeBkw967B/YpExjDpQUNIubNA7/YL8esiD6UCfTEPIY13oTYcwM1fff3vPz8eAQDw3/7HGdMOFb3v5p/R5h0rxOl8Achaivw9wwHMnv7X2U3ArMcwC37YJXx0+P1qVdaVDqU7kbbn0jq/5q2HFgVV1Aap0ivnVAJQnY6KCPWpxmFf53EAhFspOtUlu4V7uWEWgK0uvoZC0zFvPKn1auOYte83ri6TfflqwxbL/1siMo5JDxoSzn/IwpJVTtdPEO/ovUGyQ1IogC35RUJoGkCpU3ik4wVhb4LTySnjE9YCNTc9jpK+Ph6iNN5Xhz5yqgv+9Y4l9y1fkvLeOxfuv6qu1dHPUwXHBz+o/tNDWf9WAP4Avn5ZdBWyM52IVz9fmTHqhtKewt47wDTHrjc3NM1QBw0pVtNkf9HpydFA65ECj2Thg8TDX3UEVwT9FP9tZjzQiB7/jB4AW48WL/Tt1+zOqS64BuLbZWmc/eGptDPRlUH18ENQRLBme+K8DQAAN+DfAH4HYBwCevfuk4825Zr/5rTx6+47Tf8diSzGapqk65sH//Vq7T8BbPmdYsqzTnEIaD2ivv9hZ0dgVYc8qndkynvvVHg+Xtd61s9T1d0mgw8A1LQUAX3f4T7rAAC536lrcyefj3oa/qGsrf5hUtZCD63kddoyAPvH5gLYPxYAnt5wSZLrRDTLWzfLAHhfGTp0vzKRLlbTNCx5eVeFeMd1V8FLYTD5nLLPD7FwbPCBX9tZB0xSYjsQHxBaWN7oWuqumILxPnHHa6t1D1RsjvmNd+z2/1bf9M4oAG9ela33/I2ry6z02xAZw2qahkTmklXv36HnprQLbn50/TfvYRuAHwBMAfCDGb32hdD05Ca3csNj5D4Boi0RF8oj4qK2P7Bp0muO8izT302t84P68/GLz96l01zpabNPRWQBVtNka3v/948T0csSZTcAWHMw/8l50wA0Zud4T07sG3S4XvNUWPEwdLbtd6+6b/kS4B0T372wvHFsYsjpsJfTelYCmH4u5IdJ4jG/8Y418WxENsBqmmxNM0eLaNad+83X+pTX54V4xxna24JH88Y/fsVe17DYhMqgeseGvl7SZyZloUnP12R+7ej7hssCYGmzDwDc7XNYSFHHi28ZQ2RLrKbJbjSlNAD/OX3RvVe3lCx1kP0EAGjKzgXGamZwt/Ephs7W/JvDgG93W4fw+WFbVQ0Q3dZY7wMfFydFbWmJoQNX7HfeOVf9fcWq5P+d2vHg+4GNAL77c8ljm5MBvPD+u9+98d/B/KZEg8FqmobKw6s2ibboXa3W66cFp14OXrJIdXnwrTOxut5vzngAO75/ew76punuqsB2Rd+HeB6BgS2NPa6+3lABgG9sDHLhGxKmkiFydAqAkzgtjDy3vQVTAOB44YHpCLH09yOyEVbTNCT2PHuH7sbMJavgnApgzcF8C87ZHTrNyF5ZY4+/T1+3mbLGvGQM/HFhWGy6ppQmkiZW02Q7e569Y8LSIwA0ax1GLFJd/qbDf3S3394Ui8BYABgFwH87kPLeO0H3PX0VAAUA/OAIAON2BUDng8B4b+/CpkbxVn244kHSwWqabGfC0iOf3pb84yDO8GZw/pxaj4Lqg9H+aV1FYS2KAqFi3vN2Z8EDx0ICHJtUbe6qvvEqmXu14lwckjbd9aNlaTwiu7OsmmYjU7KR9dfUT1+i/5ZaFhDSeIop/9Kk8XTH/M4v1VpvR2QV7DdNNvWj2ytZ8rsHcwahlBaen3jop2vee157r7vqhbzxj195xDcsNl0W3qK968wk1tI0LLHfNEnX06o/4idMz/8XgB3fvw3DHyGmBPwn5RsA2Hk/bnvtKIA6wKkSAKKA7qo8mNARWkjjZei/MwGR3XBtmqTl1S0ln96W+x2ZHgAAD1lJREFU/HHTtl8ctgH4NKx6SdWtAPA8hO+Xn0vDORzVPuSQ7N8dK3efLeuODnXyvPDjW59esTg7cPLuqNK4BmWpZ0nPsbRpE4APhMFCGu/s9ub22HwhjXf8m/qJNwfa9rckMgOTHiQ5Hzd98HLwEs3LTw5uArDmpx+npSW8ndSYun9PUsj0zrzY+p6coOggYYwwR2sOOVdzYDLUX3RMm9av5/Xo2T6nW3HJTYF7DiEsNj33zrrZCNv+n2oA4S8AwHd/NvhFGCK7YDVNI0d71SlPAMBlP4VB5+uKRtJ4s/8YBqi//SLk8Iikg0kPshEhjTeYM7yd1HhruffA43oJKx4ANi74wGvDbAvekaFpkgImPUi6Pg2rXrDWjFXj9tAYI3uFNJ7mpd403ouZOu3yiOzNsqQHp2myxODTeDmlG5NCpgvPNQvTGqOKHtl000uLswNHpWSWxjXoHA0Ap1tfnuq/ejDXQGRjXJumYeC7ZQ8jej6A/IxMdTeQxHLAYd4hldHjiEYCrk2ThAhpPEN7nyjwn/rrz/fndt+f2337h4mLNyk3TXVweyX9o6q9h+5z++E3ZlQPew7tEW057fveqR0PWnjdREOJa9MkLaI0nkAePX9aWoLmZfuBlKruXQAWb1ICeGaV4sqXOv7wUTeAxdmB52oOaEaK0nhEwxHXpmmYySnbIDwpa8wra8wDcLRA7ul1tqV4P4BzNQcu+ylM96h4b3FERAhND/HFElkBq2myhcGn8QRZY+7MGnOn8DwpZFpSiPrr40mh6s8VJ0bPF54wjUcjBqtpkihz03gtMWOM7BWl8fRiGo+kidU02cjg03ja4lOTRFu8Oh+PC18JwJQ0nt7QNJE0sZomqftu2cP2vgQie2I1TVJhPI2nl+zdhJj/nhj8WzONR1LGftMkIaak8QQdBRHCk7bj8ZcgHmeBMCiOBQhHKEs9YTiNt+fQHt5QnIYRVtM0/BR3/eg9sdB7YiGA7W4beiYdLXJ6EoDzbJnP3m0AHEe3CDEPAdN4NKxxbZpGMqbxaARgNU1DzlqhaSPkvXFpvUxJ4xFJFqtpkiIjoen9G3aNnd5v0Xn3KZlX5+MnGl5au79U2JJb2NDsHrQ/t0x7mPE0HkPTJFmspskWLA5ND5jGuzYj5tqMGAAPLhzz4MIxo1Iymyc3zxwXFthWuXCGOlvNUpqGNVbTdLFjGo8kjtU0SYIFoenKV9LiVx7Qu+vUgeMZ82fq3aXbwpRI4pibJqkwPTQtkrN7hUtw38uO74sTECD75CQAZCLleKsCrQCQoR7ANB4NL7x7C4003o+k7N+4c8Ed1wEAtrjc3tuS6QJ6Vp+djhDE2u/iiMzHu7fQ0LJBGs+QT2P+gX1ztbe4Pn3JhonlAx7I0DRJCtemSXLMSuNhoNC0KZjGIylj0oOG3NCl8QRenY9fdulqAL4fubX9plvvmLwLz04f95MF10Bkd6ymiYgkjdU02Z9103hanx+Krd20LnPaZdpbGJom6WM1TZIwmDSe3u3vVPwTQItf9ubWNZtb1wBY3bgUQNJGX6bxaHhhbppsYafrZwB0V6j9KuIBvJkWj6JZh4s6rf6+Uz3mCE8qkHOl9637cBzAF01LNQMm+7pb/U2JrIu5aRpC6jRe1wvCyx/dXhENuBov7Yn4RHj+O7+H1Ft/8SuFAsCMG64WNshPn9IccupADoBApO3fuBOAh5f+tw6YrlIcnKy3+/88r9uEJ5va1ujuZRqPpMay3DSnabLEdb3ztYYCyJLfrb02vf6a+ulLfIXnW3bvSouLdB4VrxmfcZX6K+BnN2PBndcB2HTwpEvn+vWf/wDgFtzqtc4FLnin4p8BMaZeFdN4JHGspsluFJXOTkEKQ3t3fP82QqcNeBKvzsevu3mr9pY5L82Zs3HO6unvXHVK3SHvQPzzV536DqcwBlcN8pqJbI/VNI007i8FPHrhjklIWHlpbkZUKAAcwbHHigH88vX2S6+4xM7XR2QmJj3IzixI4519InrShnPmvpHuHD05xp1pPJI+5qZJorpDp6XFRRofs/37t43sVZfSBuj9/JBIglhNk6Q5j4rXjnkQXYSYm6ahYsfeeIJinx3qZ7PHNys/HXMT6lCk2Ts5UE9immk8kiAmPUhCtNN4ppBHz3fpXC/a+OiFO/4S+eKnh88uSFSH8qq3/mXUbzd+8u63i347WzPsi6alYZV/YRqPpI/9psk+Bk7jmUA3jadLmKPNuzgiKeHaNBGRpDHpQfZkQRrPMqIVD6JhhGvTNITuWXPG0K6PZ481cqCRNJ4poelPc/sWpvX6omnp08EffFZ51vh5iKSA30KkoZLz5GQjew8f7nx1S8lgzr/9+7e1byhONFKxmia7GXC5g6FpIjDpQdJhbhpPLyGNZ8rIz06cFaXxGJomaWI1TXZw+HBnSoqrob0m9sZzCV5vKI03qfid6mLxxl++3q557o8pXdj5Qu5OU66WyL64Nk3D24/fXKH9ci6Qe+Thban/vTt9jPb2+x6/Sfvlm7UPxRQtW3V1v2OJpInVNA1jP35zxcN/6ndrrlknUt9LWLVtz1F7XRKR1XFtmiTHxDRem/u7ojla8M89R0WltMibtQ8tj9o3+Osksg1+C5GGJeMtTIlGEn4LkSSKaTwiAdemSRKsksYTFqb/WXn0sxNGv14YgX/uOcrPD2m4YNKDbM2UNF5eUcX4UfEH8y6I9vojetPBkwAQPf/JBx/Se4YBe5M+egGco2kYYTVNkjMtNQFAJzBv2jjRroMfY/G8SwF8t+xhQP80TTTCMOlBRCRpTHrQsHHwwcD5+6vsfRVEtsakBw0/3y17+NGley079tELd+xIz7fu9RANKVbTJEWdIRGeZYX2vgoiSWA1TfZnxTSeVa6HSFJYTZNNDZjGu2TWrba8HiLpYzVNRCRprKaJiCSN1TQND0zj0UWL1TQNM0zj0cWG1TRJDtN4RNpYTZOdWSWNRzSCsZom2xm6NB5D0zSCsZomIpI0VtNERJLGapqISNJYTdMwoAlNM41HFyHevYUk5NiOL1Nv+vPB/zyqvXH2DU/Y63qIpID3QiR70k7jzbrhCQAyKG985H3tMd8te9gTr3637GE7XB+RBLCaJhsxnsYz4sZH3l+/sd7IWgfTeDSy8V6IRESSxqQHEZGkMelBRCRprKZJ6tZfU39PddggT8I0Hg1frKaJiCSN1TTZjW5vPJmjMkbhZK/rIZImVtNkCxan8QbENB6NeKymiYgkjdU0EZGksZomIpI0VtMkaVZJ4xENa6ymaeRjaJqGNVbTZB9M4xGZiNU0DTmm8YgGg9U0EZGksZomIpI0VtNERJLGapqki2k8IrCaphGPaTwa7lhNkx0wjUdkOsuqad6ylkw1pGk8AI9euEN4yWQejVS8szgNudOn5UNxWtFShjBrE408lt1ZnNM0mWrKFHc9W9+EDErrvhEXoGmk4to02cHJRU0xCifRj70vikiimPQgIpI0rk2THdxTHfZpWLUpw2xwMUQSx7Vpsg9OwUQm4to0EZGkcW2aiEjSWE0TEUkaq2kiIkljNU1EJGmspomIJI3VNBGRpLGaJiKSNFbTRESSxmqaiEjSWE0TEUkaq2kiIkljNU1EJGmspomIJI3VNBGRpPHO4kREkubp6lxeVb1y1dMAgC+MPM6ZWx0Vru7kzmmaiMhGyquqs7dseeH5Zwcc+cqrS+bMnevl7gYuehAR2YwwR6tMcOcdt2dv2SIcxWqaiMimFAqFWeM5TRMR2ZS50zQXPYiIbErR39SpGQod2uM5TRMR2ZRCodT8ZGRkAsjIyNTeqFAotcdzmiYisilNyZyZOVOzMTNzJqtpIiJJUCoVSqUiK2u2aHtW1mxhl1LZb5rmR4hERDYlrGlkZ282tEuE0zQRkU0xkEdEJGmcpomIJI3TNBGRpKlUKrPGM+lBRGQ7xcUl5h7CapqIyEbmzJ37+arVpg8WnrCaJiKyEU3TO7MGs5omIrIdU5pNC155dYnwhNM0EZFNmfIRYklJqeY5p2kiIptiII+ISNI4TRMRSZowTQstTEX279+ju5FJDyIimxI6Su/Zs0u0fc+eXew3TURkf5qm0jt3btds3LlzO/tNExFJgqaptFKp2L49G8D27dnaG9lvmojInkRrGtnZm/W2mdbgNE1EZFNMehARSRqnaSIiSeM0TUQkaew3TUQkUXPmztU0VDLu81WrNY1MWU0TEdlIVHiYiS2n58ydGxUe1tjYCM00nX8iJyc3Nyf3hCnvNGF8+uiUtMmTJx85coSPfDT9saG+zqx+u8b/iAMCgzxdndvlPXzkoxUfzZoJAZg+eML48QCiwsPuumOxeX/uL/3txS9WfrZm1cpnn36qtanOlJ9nn35KpVLl5R7nIx/NejT9b8yUP0Ip/EZ8HGGP5s6EZg1es2plXu5xs3727tz+0t9eVE/Twpu1NNYO+HMq9xj/hfDRskfhz6yhtmqQP8IfoRR+Iz6OsEdzZ0ILZk6zfvRM04111QP+8F8IHwf5b6BOVjHIH9YKfByiR3NnQnPH5w1+mtb995AQO4r/Qvho3X8DNVVlg/xhrcDHIXo0dyYUjdcdpjtzmvWjZ5qWVZZq/yTEjkqIHSXayH8hfBzkv4HqipJB/rBW4OMQPZo7E4rG6x2pPT5v8NN0ZVmx5kd4v4TYUdobK8uK+S+Ej4P8N1BZVjTIH9YKfByiR3Nnwv9v5/xSGgbCIJ6Cd1AQuqXUZxXaXkDxDIJ4FMWDKHiOND2D0j9r08SkCfqeI/gQCHGb0k6/LmnLDMMPXL6yRTrD97TG/KrhcnNCrqjpnyTKXVzWVs3iMDcTQgoz8JtGQnNXIC0RbUJ0XstrOo2DwsVl5cM0DpgQUpiBNA6F5q5AWiLahMb8quFyc0KuqOk49MvO7zMOmRBSmIHF91xo7gqkJaJNaMxXTpbntbymQ18bbqumccKEkMIMRMFMaO4KpCWiTWjML48tNyfkipr29XitmRBy5xlAzV2BtES0CdF5La9pPf5cayaEFGZg/jURmrsCaYloE27RnJArano6+tjETAgpycBsOhKauwJpiWgTovNaUtP5gyPQZfvwPyUPi5v/xrgrkLUQbUJoeOunlxovz08Xnc711SX0fN/9w2Ptr2KSB0dv4O7wIdPzs9N9ePeSPCY6jmP7IVNIWZa53rDx/va6SJK72xv08xRFUZRVud6wpdRJv9fN/6j7+1AURVH/1FKq3+v+AcP62qfyRx0TAAAAAElFTkSuQmCC<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_NoColorArrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_NoColorArrows
deleted file mode 100644
index 07488815dd364316c78b1b18cbc913fb9e79e79e..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_movementArrowColors/verificationPoints/MosaicScene_NoColorArrows
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":qmos_MosaicSceneWidget" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_phaseAngle/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_phaseAngle/test.py
deleted file mode 100644
index 69ed004a6776467c9e334ba80258f03fd6ec6631..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_phaseAngle/test.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import os                                                                                               
-import shutil                                                                                           
-      
-def main():
-    # Backup current qmos settings                                                                     
-    try:                                                                                                
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qmos.squishbackup'))                             
-    except Exception:                                                                                   
-        pass                                                                                            
-                                                                                                        
-    try:                                                                                                
-        os.rename(os.path.expandvars('$HOME/.Isis/qmos'), os.path.expandvars('$HOME/.Isis/qmos.squishbackup'))
-    except Exception:                                                                                   
-        pass
-    
-    startApplication("qmos")
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qmos.File_QMenu", "Open Cube..."))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/lub2675j.342.lev1.cub")
-    type(waitForObject(":_QListView"), "<Return>")
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "View"))
-    activateItem(waitForObjectItem(":qmos.View_QMenu", "Show Phase Angle Column"))
-    setWindowState(waitForObject(":qmos_Isis::MosaicMainWindow"), WindowState.Normal)
-    test.vp("Phase Angle Value")
-    
-    # Verify load project->cancel doesn't affect anything
-    activateItem(waitForObjectItem(":qmos_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":_QMenu", "Load Project..."))
-    clickButton(waitForObject(":Load Project.Cancel_QPushButton"))
-    test.vp("Phase Angle Value")
-    
-    sendEvent("QCloseEvent", waitForObject(":qmos_Isis::MosaicMainWindow"))
-
-                                                                           
-    snooze(1)                             
-    # Restore original qmos settings                                                                   
-    try:                                                                                                
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qmos'))                                          
-    except Exception:                                                                                   
-        pass                                                                                            
-                                                                                                        
-    try:                                                                                                
-        os.rename(os.path.expandvars('$HOME/.Isis/qmos.squishbackup'), os.path.expandvars('$HOME/.Isis/qmos'))
-    except Exception:                                                                                   
-        pass                                                                                            
-             
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_phaseAngle/verificationPoints/Phase Angle Value b/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_phaseAngle/verificationPoints/Phase Angle Value
deleted file mode 100644
index 7a5d307acff0badddfdfa839fd316c0d56814a45..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qmos/tst_phaseAngle/verificationPoints/Phase Angle Value	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="ObjectProperties" version="2"><Description></Description><Verification object=":Group1.42.5087_QModelIndex" property="text" type="char" valueType="Value"><![CDATA[42.5087]]><base64EncodedValue>NDIuNTA4Nw==</base64EncodedValue></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/envvars b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/envvars
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/objects.map b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/objects.map
deleted file mode 100644
index 8166bf0cdef8a7c710ded73d723af10fc4669b4d..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/objects.map
+++ /dev/null
@@ -1,282 +0,0 @@
-:0_15_QModelIndex	{column='15' container=':_QTableWidget' row='0' type='QModelIndex'}
-:0_1_QModelIndex	{column='1' container=':_QTableWidget' row='0' type='QModelIndex'}
-:1_15_QModelIndex	{column='15' container=':_QTableWidget' row='1' type='QModelIndex'}
-:1_1_QModelIndex	{column='1' container=':_QTableWidget' row='1' type='QModelIndex'}
-:2_15_QModelIndex	{column='15' container=':_QTableWidget' row='2' type='QModelIndex'}
-:2_1_QModelIndex	{column='1' container=':_QTableWidget' row='2' type='QModelIndex'}
-:3_15_QModelIndex	{column='15' container=':_QTableWidget' row='3' type='QModelIndex'}
-:3_1_QModelIndex	{column='1' container=':_QTableWidget' row='3' type='QModelIndex'}
-:4_15_QModelIndex	{column='15' container=':_QTableWidget' row='4' type='QModelIndex'}
-:4_1_QModelIndex	{column='1' container=':_QTableWidget' row='4' type='QModelIndex'}
-:Add Measures to ControlPoint.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Add Measures to ControlPoint_Isis::QnetNewMeasureDialog'}
-:Add Measures to ControlPoint.Select Files:_QLabel	{text='Select Files:' type='QLabel' unnamed='1' visible='1' window=':Add Measures to ControlPoint_Isis::QnetNewMeasureDialog'}
-:Add Measures to ControlPoint.Select Files:_QListWidget	{aboveWidget=':Add Measures to ControlPoint.Select Files:_QLabel' type='QListWidget' unnamed='1' visible='1' window=':Add Measures to ControlPoint_Isis::QnetNewMeasureDialog'}
-:Add Measures to ControlPoint_Isis::QnetNewMeasureDialog	{type='Isis::QnetNewMeasureDialog' unnamed='1' visible='1' windowTitle='Add Measures to ControlPoint'}
-:Cannot set ground source.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Cannot set ground source_QMessageBox'}
-:Cannot set ground source_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Cannot set ground source'}
-:Choose filename to save under.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Choose filename to save under_QFileDialog'}
-:Choose filename to save under.Save_QPushButton	{text='Save' type='QPushButton' unnamed='1' visible='1' window=':Choose filename to save under_QFileDialog'}
-:Choose filename to save under.lookInCombo_QComboBox	{name='lookInCombo' type='QComboBox' visible='1' window=':Choose filename to save under_QFileDialog'}
-:Choose filename to save under.toParentButton_QToolButton	{name='toParentButton' type='QToolButton' visible='1' window=':Choose filename to save under_QFileDialog'}
-:Choose filename to save under_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Choose filename to save under'}
-:Control Network Navigator - Ignore Points.Yes_QPushButton	{text='Yes' type='QPushButton' unnamed='1' visible='1' window=':Control Network Navigator - Ignore Points_QMessageBox'}
-:Control Network Navigator - Ignore Points_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Control Network Navigator - Ignore Points'}
-:Control Network Navigator.Filter_QPushButton	{text='Filter' type='QPushButton' unnamed='1' visible='1' window=':Navigator'}
-:Control Network Navigator.Ignore Points_QPushButton	{text='Ignore Points' type='QPushButton' unnamed='1' visible='1' window=':Navigator'}
-:Control Network Navigator.Modify Point_QPushButton	{text='Modify Point' type='QPushButton' unnamed='1' visible='1' window=':Navigator'}
-:Control Network Navigator.Set Apriori/Sigmas_QPushButton	{text='Set Apriori/Sigmas' type='QPushButton' unnamed='1' visible='1' window=':Navigator'}
-:Control Network Navigator.View Cube(s)_QPushButton	{text='View Cube(s)' type='QPushButton' unnamed='1' visible='1' window=':Navigator'}
-:Control Network Navigator.qt_tabwidget_stackedwidget_QStackedWidget	{name='qt_tabwidget_stackedwidget' type='QStackedWidget' visible='1' window=':Navigator'}
-:Control Network Navigator.qt_tabwidget_tabbar_QTabBar	{name='qt_tabwidget_tabbar' type='QTabBar' visible='1' window=':Navigator'}
-:Control Network Navigator_QComboBox	{type='QComboBox' unnamed='1' visible='1' window=':Navigator'}
-:Control Network Navigator_QToolButton	{occurrence='2' type='QToolButton' unnamed='1' visible='1' window=':Navigator'}
-:Control Point.Apriori Latitude QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text?='Apriori Latitude:  *' type='QLabel' unnamed='1' visible='1'}
-:Control Point.Apriori Latitude Sigma QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text?='Apriori Latitude Sigma:  *' type='QLabel' unnamed='1' visible='1'}
-:Control Point.Apriori Longitude QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text?='Apriori Longitude:  *' type='QLabel' unnamed='1' visible='1'}
-:Control Point.Apriori Longitude Sigma QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text?='Apriori Longitude Sigma:  *' type='QLabel' unnamed='1' visible='1'}
-:Control Point.Apriori Radius QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text?='Apriori Radius:  *' type='QLabel' unnamed='1' visible='1'}
-:Control Point.Apriori Radius Sigma QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text?='Apriori Radius Sigma:  *' type='QLabel' unnamed='1' visible='1'}
-:Control Point.Edit Lock Point_QCheckBox	{container=':QnetToolScroll.Control Point_QGroupBox' text='Edit Lock Point' type='QCheckBox' unnamed='1' visible='1'}
-:Control Point.Ignore Point_QCheckBox	{container=':QnetToolScroll.Control Point_QGroupBox' text='Ignore Point' type='QCheckBox' unnamed='1' visible='1'}
-:Control Point.Point ID:  grnd2_QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text='Point ID:  grnd2' type='QLabel' unnamed='1' visible='1'}
-:Control Point.PointType:_QComboBox	{aboveWidget=':Control Point.Point ID:  grnd2_QLabel' container=':QnetToolScroll.Control Point_QGroupBox' leftWidget=':Control Point.PointType:_QLabel' type='QComboBox' unnamed='1' visible='1'}
-:Control Point.PointType:_QLabel	{container=':QnetToolScroll.Control Point_QGroupBox' text='PointType:' type='QLabel' unnamed='1' visible='1'}
-:Create Fixed or Constrained ControlPoint.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Create Fixed or Constrained ControlPoint_Isis::QnetFixedPointDialog'}
-:Create Fixed or Constrained ControlPoint.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Create Fixed or Constrained ControlPoint_Isis::QnetFixedPointDialog'}
-:Create Fixed or Constrained ControlPoint.Point ID:_QLabel	{text='Point ID:' type='QLabel' unnamed='1' visible='1' window=':Create Fixed or Constrained ControlPoint_Isis::QnetFixedPointDialog'}
-:Create Fixed or Constrained ControlPoint.Select Files:_QLabel	{text='Select Files:' type='QLabel' unnamed='1' visible='1' window=':Create Fixed or Constrained ControlPoint_Isis::QnetFixedPointDialog'}
-:Create Fixed or Constrained ControlPoint.Select Files:_QListWidget	{aboveWidget=':Create Fixed or Constrained ControlPoint.Select Files:_QLabel' type='QListWidget' unnamed='1' visible='1' window=':Create Fixed or Constrained ControlPoint_Isis::QnetFixedPointDialog'}
-:Create Fixed or Constrained ControlPoint_Isis::QnetFixedPointDialog	{type='Isis::QnetFixedPointDialog' unnamed='1' visible='1' windowTitle='Create Fixed or Constrained ControlPoint'}
-:Create New ControlPoint.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Create New ControlPoint_Isis::QnetNewPointDialog'}
-:Create New ControlPoint.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Create New ControlPoint_Isis::QnetNewPointDialog'}
-:Create New ControlPoint.Point ID:_QLabel	{text='Point ID:' type='QLabel' unnamed='1' visible='1' window=':Create New ControlPoint_Isis::QnetNewPointDialog'}
-:Create New ControlPoint_Isis::QnetNewPointDialog	{type='Isis::QnetNewPointDialog' unnamed='1' visible='1' windowTitle='Create New ControlPoint'}
-:Delete ControlPoint.Delete ControlPoint_QCheckBox	{name='deleteAllCheckBox' text='Delete ControlPoint' type='QCheckBox' visible='1' window=':Delete ControlPoint_QnetDeletePointDialog'}
-:Delete ControlPoint.OK_QPushButton	{name='okButton' text='OK' type='QPushButton' visible='1' window=':Delete ControlPoint_QnetDeletePointDialog'}
-:Delete ControlPoint.fileList_QListWidget	{name='fileList' type='QListWidget' visible='1' window=':Delete ControlPoint_QnetDeletePointDialog'}
-:Delete ControlPoint.pointIdValue_QLineEdit	{name='pointIdValue' type='QLineEdit' visible='1' window=':Delete ControlPoint_QnetDeletePointDialog'}
-:Delete ControlPoint_QnetDeletePointDialog	{name='QnetDeletePointDialog' type='QnetDeletePointDialog' visible='1' windowTitle='Delete ControlPoint'}
-:Delete Reference measure?.Yes_QPushButton	{text='Yes' type='QPushButton' unnamed='1' visible='1' window=':Delete Reference measure?_QMessageBox'}
-:Delete Reference measure?_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Delete Reference measure?'}
-:EditLocked Points.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':EditLocked Points_QMessageBox'}
-:EditLocked Points.editLockPointsListBox_QListWidget	{container=':Set Apriori Point and Constraints.EditLocked Points_QGroupBox' name='editLockPointsListBox' type='QListWidget' visible='1'}
-:EditLocked Points.editLockPointsListBox_QListWidget_2	{container=':Set Apriori Point and Constraints.EditLocked Points_QGroupBox_2' name='editLockPointsListBox' type='QListWidget' visible='1'}
-:EditLocked Points_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='EditLocked Points'}
-:Error.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Error_QMessageBox'}
-:Error_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Error'}
-:File.E&xit_QAction	{container=':qnet.File_QMenu_2' text='E&xit' type='QAction' unnamed='1' visible='true'}
-:Filter by Edit Lock Status_QGroupBox	{container=':qt_tabwidget_stackedwidget_Isis::QnetPointTypeFilter' title='Filter by Edit Lock Status' type='QGroupBox' unnamed='1' visible='1'}
-:Filter by Ignore Status_QGroupBox	{container=':qt_tabwidget_stackedwidget_Isis::QnetPointTypeFilter' title='Filter by Ignore Status' type='QGroupBox' unnamed='1' visible='1'}
-:Filter by Point Type(s).Constrained_QCheckBox	{container=':Filter by Point Type(s)_QGroupBox' text='Constrained' type='QCheckBox' unnamed='1' visible='1'}
-:Filter by Point Type(s).Free_QCheckBox	{container=':Filter by Point Type(s)_QGroupBox' text='Free' type='QCheckBox' unnamed='1' visible='1'}
-:Filter by Point Type(s)_QGroupBox	{container=':qt_tabwidget_stackedwidget_Isis::QnetPointTypeFilter' title='Filter by Point Type(s)' type='QGroupBox' unnamed='1' visible='1'}
-:Find Latitude/Longitude Coordinate.Close_QPushButton	{text='Close' type='QPushButton' unnamed='1' visible='1' window=':Find Latitude/Longitude Coordinate_QDialog'}
-:Find Latitude/Longitude Coordinate.Ok_QPushButton	{text='Ok' type='QPushButton' unnamed='1' visible='1' window=':Find Latitude/Longitude Coordinate_QDialog'}
-:Find Latitude/Longitude Coordinate.qt_tabwidget_stackedwidget_QStackedWidget	{name='qt_tabwidget_stackedwidget' type='QStackedWidget' visible='1' window=':Find Latitude/Longitude Coordinate_QDialog'}
-:Find Latitude/Longitude Coordinate_QDialog	{type='QDialog' unnamed='1' visible='1' windowTitle='Find Latitude/Longitude Coordinate'}
-:IO Error.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':IO Error_QMessageBox'}
-:IO Error_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='IO Error'}
-:Isis::CubeViewport - I26586032RDR.cub	{parent?=':Isis::ViewportMdiSubWindow - I26586032RDR.cub' type='Isis::CubeViewport' whatsThis?='*I26586032RDR.cub*'}
-:Isis::MdiCubeViewport - I26586032RDR.cub	{parent?=':Isis::ViewportMdiSubWindow - I26586032RDR.cub' type='Isis::MdiCubeViewport' whatsThis?='*I26586032RDR.cub*'}
-:Isis::ViewportMdiSubWindow - I08528020RDR.cub	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle?='I08528020RDR.cub*'}
-:Isis::ViewportMdiSubWindow - I26586032RDR.cub	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle?='I26586032RDR.cub*'}
-:Isis::ViewportMdiSubWindow - I27759024RDR.cub	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle?='I27759024RDR.cub*'}
-:Latitude Constraints.Latitude Sigma:_QLabel	{container=':Set Apriori Point and Constraints.Latitude Constraints_QGroupBox' name='latSigmaLabel' text='Latitude Sigma:' type='QLabel' visible='1'}
-:Latitude Constraints.Latitude Sigma:_QLabel_2	{container=':Set Apriori Point and Constraints.Latitude Constraints_QGroupBox_2' name='latSigmaLabel' text='Latitude Sigma:' type='QLabel' visible='1'}
-:Left Measure.Edit Lock Measure_QCheckBox	{container=':QnetToolScroll.Left Measure_QGroupBox' text='Edit Lock Measure' type='QCheckBox' unnamed='1' visible='1'}
-:Left Measure_QComboBox	{container=':QnetToolScroll.Left Measure_QGroupBox' type='QComboBox' unnamed='1' visible='1'}
-:Line_QLabel	{container=':qt_tabwidget_stackedwidget_Isis::ImageTab' text='Line' type='QLabel' unnamed='1' visible='1'}
-:Line_QLineEdit	{container=':qt_tabwidget_stackedwidget_Isis::ImageTab' leftWidget=':Line_QLabel' type='QLineEdit' unnamed='1' visible='1'}
-:Longitude Constraints.Longitude Sigma:_QLabel	{container=':Set Apriori Point and Constraints.Longitude Constraints_QGroupBox' name='longSigmaLabel' text='Longitude Sigma:' type='QLabel' visible='1'}
-:Longitude Constraints.Longitude Sigma:_QLabel_2	{container=':Set Apriori Point and Constraints.Longitude Constraints_QGroupBox_2' name='longSigmaLabel' text='Longitude Sigma:' type='QLabel' visible='1'}
-:MdiArea	{occurrence='2' type='QWidget' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:Name_HeaderViewItem	{container=':treeView_QHeaderView' text='Name' type='HeaderViewItem'}
-:Navigator	{type='QDialog' unnamed='1' visible='1' windowTitle='Control Network Navigator'}
-:Navigator_CP1	{container=':Navigator_List' row='0' type='QModelIndex'}
-:Navigator_CP19	{container=':Navigator_List' text='ssides19' type='QModelIndex'}
-:Navigator_CP2	{container=':Navigator_List' text='ssides2' type='QModelIndex'}
-:Navigator_CP3	{container=':Navigator_List' text='ssides3' type='QModelIndex'}
-:Navigator_CP37	{container=':Navigator_List' text='ssides37' type='QModelIndex'}
-:Navigator_List	{parent=':Navigator' type='QListWidget' unnamed='1' visible='1'}
-:New Point Id.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':New Point Id_QMessageBox'}
-:New Point Id_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='New Point Id'}
-:No intersection.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':No intersection_QMessageBox'}
-:No intersection_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='No intersection'}
-:Open DEM.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Open DEM_QFileDialog'}
-:Open DEM.lookInCombo_QComboBox	{name='lookInCombo' type='QComboBox' visible='1' window=':Open DEM_QFileDialog'}
-:Open DEM.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Open DEM_QFileDialog'}
-:Open DEM.toParentButton_QToolButton	{name='toParentButton' type='QToolButton' visible='1' window=':Open DEM_QFileDialog'}
-:Open DEM_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Open DEM'}
-:Open ground source.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Open ground source_QFileDialog'}
-:Open ground source.Open_QPushButton	{text='Open' type='QPushButton' unnamed='1' visible='1' window=':Open ground source_QFileDialog'}
-:Open ground source.lookInCombo_QComboBox	{name='lookInCombo' type='QComboBox' visible='1' window=':Open ground source_QFileDialog'}
-:Open ground source.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Open ground source_QFileDialog'}
-:Open ground source.toParentButton_QToolButton	{name='toParentButton' type='QToolButton' visible='1' window=':Open ground source_QFileDialog'}
-:Open ground source_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Open ground source'}
-:Point ID:_QLineEdit	{buddy=':Create Fixed or Constrained ControlPoint.Point ID:_QLabel' type='QLineEdit' unnamed='1' visible='1'}
-:Point ID:_QLineEdit_2	{buddy=':Create New ControlPoint.Point ID:_QLabel' type='QLineEdit' unnamed='1' visible='1'}
-:Qnet Tool	{objectName='QnetTool' type='Isis::MainWindow' visible='1'}
-:Qnet Tool Save Measure.No_QPushButton	{text='No' type='QPushButton' unnamed='1' visible='1' window=':Qnet Tool Save Measure_QMessageBox'}
-:Qnet Tool Save Measure.Yes_QPushButton	{text='Yes' type='QPushButton' unnamed='1' visible='1' window=':Qnet Tool Save Measure_QMessageBox'}
-:Qnet Tool Save Measure_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Qnet Tool Save Measure'}
-:Qnet Tool.Geom_QRadioButton	{text='Geom' type='QRadioButton' unnamed='1' visible='1' window=':Qnet Tool'}
-:Qnet Tool_QMenuBar	{type='QMenuBar' unnamed='1' visible='1' window=':Qnet Tool'}
-:Qnet Tool_QScrollArea	{aboveWidget=':Qnet Tool_QToolBar' type='QScrollArea' unnamed='1' visible='1' window=':Qnet Tool'}
-:Qnet Tool_QToolBar	{name='TemplateEditorToolBar' type='QToolBar' visible='1' window=':Qnet Tool'}
-:QnetTool.No_QPushButton	{text='No' type='QPushButton' unnamed='1' visible='1' window=':QnetTool_QMessageBox'}
-:QnetTool.QnetToolScroll_QScrollArea	{name='QnetToolScroll' type='QScrollArea' visible='1' window=':Qnet Tool'}
-:QnetTool.View/edit registration template_QToolButton	{text='View/edit registration template' type='QToolButton' unnamed='1' visible='1' window=':Qnet Tool'}
-:QnetToolScroll.Add Measure(s) to Point_QPushButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Add Measure(s) to Point' type='QPushButton' unnamed='1' visible='1'}
-:QnetToolScroll.Control Point_QGroupBox	{container=':QnetTool.QnetToolScroll_QScrollArea' title='Control Point' type='QGroupBox' unnamed='1' visible='1'}
-:QnetToolScroll.Find_QPushButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Find' type='QPushButton' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: -2.60529    Longitude:  297.374_QLabel	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Latitude: -2.60529    Longitude:  297.374' type='QLabel' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: -2.60529    Longitude:  297.374_QToolButton	{aboveWidget=':QnetToolScroll.Latitude: -2.60529    Longitude:  297.374_QLabel' container=':QnetTool.QnetToolScroll_QScrollArea' occurrence='2' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: -2.60529    Longitude:  297.374_QToolButton_2	{aboveWidget=':QnetToolScroll.Latitude: -2.60529    Longitude:  297.374_QLabel' container=':QnetTool.QnetToolScroll_QScrollArea' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox	{aboveWidget=':QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QLabel' container=':QnetTool.QnetToolScroll_QScrollArea' type='QDoubleSpinBox' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QLabel	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Latitude: 17.1381    Longitude:  300.307' type='QLabel' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QToolButton	{aboveWidget=':QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QLabel' container=':QnetTool.QnetToolScroll_QScrollArea' occurrence='2' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QToolButton_2	{aboveWidget=':QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QLabel' container=':QnetTool.QnetToolScroll_QScrollArea' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Left Measure_QGroupBox	{container=':QnetTool.QnetToolScroll_QScrollArea' title='Left Measure' type='QGroupBox' unnamed='1' visible='1'}
-:QnetToolScroll.No geom/rotate_QRadioButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='No geom/rotate' type='QRadioButton' unnamed='1' visible='1'}
-:QnetToolScroll.OK_QPushButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='OK' type='QPushButton' unnamed='1' visible='1'}
-:QnetToolScroll.Open registration template_QToolButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Open registration template' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Register_QPushButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Register' type='QPushButton' unnamed='1' visible='1'}
-:QnetToolScroll.Right Measure_QGroupBox	{container=':QnetTool.QnetToolScroll_QScrollArea' title='Right Measure' type='QGroupBox' unnamed='1' visible='1'}
-:QnetToolScroll.Save Measure_QPushButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Save Measure' type='QPushButton' unnamed='1' visible='1'}
-:QnetToolScroll.Save Point_QPushButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Save Point' type='QPushButton' unnamed='1' visible='1'}
-:QnetToolScroll.Save template as_QToolButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Save template as' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Save template file_QToolButton	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Save template file' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll.Template Editor ToolBar_QTextEdit	{aboveWidget=':QnetToolScroll.Template Editor ToolBar_QToolBar' container=':QnetTool.QnetToolScroll_QScrollArea' type='QTextEdit' unnamed='1' visible='1'}
-:QnetToolScroll.Template Editor ToolBar_QToolBar	{container=':QnetTool.QnetToolScroll_QScrollArea' type='QToolBar' unnamed='1' visible='1' windowTitle='Template Editor ToolBar'}
-:QnetToolScroll.Zoom Factor: 1_QLabel	{container=':QnetTool.QnetToolScroll_QScrollArea' text='Zoom Factor: 1' type='QLabel' unnamed='1' visible='1'}
-:QnetToolScroll.Zoom Factor: 1_QLabel_2	{container=':QnetTool.QnetToolScroll_QScrollArea' occurrence='2' text='Zoom Factor: 1' type='QLabel' unnamed='1' visible='1'}
-:QnetToolScroll_Isis::ControlPointEdit	{container=':QnetTool.QnetToolScroll_QScrollArea' type='Isis::ControlPointEdit' unnamed='1' visible='1'}
-:QnetToolScroll_QScrollBar	{container=':QnetTool.QnetToolScroll_QScrollArea' type='QScrollBar' unnamed='1' visible='1'}
-:QnetToolScroll_QToolButton	{container=':QnetTool.QnetToolScroll_QScrollArea' occurrence='8' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll_QToolButton_2	{container=':QnetTool.QnetToolScroll_QScrollArea' occurrence='7' type='QToolButton' unnamed='1' visible='1'}
-:QnetToolScroll_QWidget	{container=':QnetTool.QnetToolScroll_QScrollArea' type='QWidget' unnamed='1' visible='1'}
-:QnetTool_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='QnetTool'}
-:Radius Constraints.Radius Sigma:_QLabel	{container=':Set Apriori Point and Constraints.Radius Constraints_QGroupBox' name='radiusSigmaLabel' text='Radius Sigma:' type='QLabel' visible='1'}
-:Radius Constraints.Radius Sigma:_QLabel_2	{container=':Set Apriori Point and Constraints.Radius Constraints_QGroupBox_2' name='radiusSigmaLabel' text='Radius Sigma:' type='QLabel' visible='1'}
-:Right Measure.Edit Lock Measure_QCheckBox	{container=':QnetToolScroll.Right Measure_QGroupBox' text='Edit Lock Measure' type='QCheckBox' unnamed='1' visible='1'}
-:Right Measure.Ignore Measure_QCheckBox	{container=':QnetToolScroll.Right Measure_QGroupBox' text='Ignore Measure' type='QCheckBox' unnamed='1' visible='1'}
-:Right Measure_QComboBox	{container=':QnetToolScroll.Right Measure_QGroupBox' type='QComboBox' unnamed='1' visible='1'}
-:Sample_QLabel	{container=':qt_tabwidget_stackedwidget_Isis::ImageTab' text='Sample' type='QLabel' unnamed='1' visible='1'}
-:Sample_QLineEdit	{container=':qt_tabwidget_stackedwidget_Isis::ImageTab' leftWidget=':Sample_QLabel' type='QLineEdit' unnamed='1' visible='1'}
-:Save registration template.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Save registration template_QFileDialog'}
-:Save registration template.Yes_QPushButton	{text='Yes' type='QPushButton' unnamed='1' visible='1' window=':Save registration template_QMessageBox'}
-:Save registration template.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Save registration template_QFileDialog'}
-:Save registration template.toParentButton_QToolButton	{name='toParentButton' type='QToolButton' visible='1' window=':Save registration template_QFileDialog'}
-:Save registration template_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Save registration template'}
-:Save registration template_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Save registration template'}
-:Select Files:_QScrollBar	{container=':Add Measures to ControlPoint.Select Files:_QListWidget' type='QScrollBar' unnamed='1' visible='1'}
-:Select Files:_QScrollBar_2	{container=':Create Fixed or Constrained ControlPoint.Select Files:_QListWidget' type='QScrollBar' unnamed='1' visible='1'}
-:Select a control network.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Select a control network_QFileDialog'}
-:Select a control network.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Select a control network_QFileDialog'}
-:Select a control network.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Select a control network_QFileDialog'}
-:Select a control network_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Select a control network'}
-:Select a list of cubes.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Select a list of cubes_QFileDialog'}
-:Select a list of cubes.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Select a list of cubes_QFileDialog'}
-:Select a list of cubes.backButton_QToolButton	{name='backButton' type='QToolButton' visible='1' window=':Select a list of cubes_QFileDialog'}
-:Select a list of cubes.lookInCombo_QComboBox	{name='lookInCombo' type='QComboBox' visible='1' window=':Select a list of cubes_QFileDialog'}
-:Select a list of cubes.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Select a list of cubes_QFileDialog'}
-:Select a list of cubes.toParentButton_QToolButton	{name='toParentButton' type='QToolButton' visible='1' window=':Select a list of cubes_QFileDialog'}
-:Select a list of cubes_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Select a list of cubes'}
-:Select a registration template.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Select a registration template_QFileDialog'}
-:Select a registration template.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Select a registration template_QFileDialog'}
-:Select a registration template_QFileDialog	{name='QFileDialog' type='QFileDialog' visible='1' windowTitle='Select a registration template'}
-:Set Apriori Point and Constraints.Close_QPushButton	{name='closeButton' text='Close' type='QPushButton' visible='1' window=':Set Apriori Point and Constraints_QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Close_QPushButton_2	{name='closeButton' text='Close' type='QPushButton' visible='1' window=':Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.EditLocked Points_QGroupBox	{name='editLockPointsGroupBox' title='EditLocked Points' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.EditLocked Points_QGroupBox_2	{name='editLockPointsGroupBox' title='EditLocked Points' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Latitude Constraints_QGroupBox	{name='latitudeConstraintsGroupBox' title='Latitude Constraints' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Latitude Constraints_QGroupBox_2	{name='latitudeConstraintsGroupBox' title='Latitude Constraints' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Longitude Constraints_QGroupBox	{name='longitudeConstraintsGroupBox' title='Longitude Constraints' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Longitude Constraints_QGroupBox_2	{name='longitudeConstraintsGroupBox' title='Longitude Constraints' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Radius Constraints_QGroupBox	{name='radiusConstraintsGroupBox' title='Radius Constraints' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Radius Constraints_QGroupBox_2	{name='radiusConstraintsGroupBox' title='Radius Constraints' type='QGroupBox' visible='1' window=':Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Set Apriori_QPushButton	{name='setAprioriButton' text='Set Apriori' type='QPushButton' visible='1' window=':Set Apriori Point and Constraints_QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints.Set Apriori_QPushButton_2	{name='setAprioriButton' text='Set Apriori' type='QPushButton' visible='1' window=':Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog'}
-:Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog	{name='QnetSetAprioriDialog' type='Isis::QnetSetAprioriDialog' visible='1' windowTitle='Set Apriori Point and Constraints'}
-:Set Apriori Point and Constraints_QnetSetAprioriDialog	{name='QnetSetAprioriDialog' type='QnetSetAprioriDialog' visible='1' windowTitle='Set Apriori Point and Constraints'}
-:VP1	{aboveWidget=':QnetToolScroll.Zoom Factor: 1_QLabel' container=':QnetTool.QnetToolScroll_QScrollArea' type='Isis::ChipViewport' unnamed='1' visible='1'}
-:VP2	{aboveWidget=':QnetToolScroll.Zoom Factor: 1_QLabel_2' container=':QnetTool.QnetToolScroll_QScrollArea' type='Isis::ChipViewport' unnamed='1' visible='1'}
-:Warning.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Warning_QMessageBox'}
-:Warning_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Warning'}
-:_Isis::QnetTool	{type='Isis::QnetTool' unnamed='1'}
-:_QHeaderView	{container=':_QTableWidget' orientation='1' type='QHeaderView' unnamed='1' visible='1'}
-:_QListView	{occurrence='3' type='QListView' unnamed='1' visible='1'}
-:_QMainWindow	{type='QMainWindow' unnamed='1' visible='1'}
-:_QScrollBar	{container=':_QTableWidget' type='QScrollBar' unnamed='1' visible='1'}
-:_QTableWidget	{type='QTableWidget' unnamed='1' visible='1' window=':_QMainWindow'}
-:_QWhatsThat	{type='QWhatsThat' unnamed='1' visible='1'}
-:fileNameEdit_QLineEdit	{buddy=':Select a list of cubes.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_2	{buddy=':Open ground source.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_3	{buddy=':Choose filename to save under.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_4	{buddy=':Open DEM.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_5	{buddy=':Select a registration template.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_6	{buddy=':Save registration template.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_7	{buddy=':Select a control network.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:frame.stackedWidget_QStackedWidget	{container=':splitter.frame_QFrame' name='stackedWidget' type='QStackedWidget' visible='1'}
-:frame.stackedWidget_QStackedWidget_2	{container=':splitter.frame_QFrame_2' name='stackedWidget' type='QStackedWidget' visible='1'}
-:frame.stackedWidget_QStackedWidget_3	{container=':splitter.frame_QFrame_3' name='stackedWidget' type='QStackedWidget' visible='1'}
-:frame.stackedWidget_QStackedWidget_4	{container=':splitter.frame_QFrame_4' name='stackedWidget' type='QStackedWidget' visible='1'}
-:frame.stackedWidget_QStackedWidget_5	{container=':splitter.frame_QFrame_5' name='stackedWidget' type='QStackedWidget' visible='1'}
-:frame.stackedWidget_QStackedWidget_6	{container=':splitter.frame_QFrame_6' name='stackedWidget' type='QStackedWidget' visible='1'}
-:grnd1_QModelIndex	{container=':Navigator_List' text='grnd1' type='QModelIndex'}
-:grnd2_QModelIndex	{container=':Navigator_List' text='grnd2' type='QModelIndex'}
-:latSigmaEdit_QLineEdit	{buddy=':Latitude Constraints.Latitude Sigma:_QLabel' name='latSigmaEdit' type='QLineEdit' visible='1'}
-:latSigmaEdit_QLineEdit_2	{buddy=':Latitude Constraints.Latitude Sigma:_QLabel_2' name='latSigmaEdit' type='QLineEdit' visible='1'}
-:lonSigmaEdit_QLineEdit	{buddy=':Longitude Constraints.Longitude Sigma:_QLabel' name='lonSigmaEdit' type='QLineEdit' visible='1'}
-:lonSigmaEdit_QLineEdit_2	{buddy=':Longitude Constraints.Longitude Sigma:_QLabel_2' name='lonSigmaEdit' type='QLineEdit' visible='1'}
-:qnet.Exit_QToolButton	{text='Exit' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.File_QMenu	{title='File' type='QMenu' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.File_QMenu_2	{title='File' type='QMenu' unnamed='1' visible='0' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.I01812006RDR.cub @ 50% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I01812006RDR.cub @ 50% (Gray = 1)'}
-:qnet.I08528020RDR.cub @ 3.45596% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I08528020RDR.cub @ 3.45596% (Gray = 1)'}
-:qnet.I18649010RDR.cub @ 6.90423% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I18649010RDR.cub @ 6.90423% (Gray = 1)'}
-:qnet.I19273007RDR.cub @ 50% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I19273007RDR.cub @ 50% (Gray = 1)'}
-:qnet.I26586032RDR.cub @ 13.7778% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I26586032RDR.cub @ 13.7778% (Gray = 1)'}
-:qnet.I26586032RDR.cub @ 49.6707% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I26586032RDR.cub @ 49.6707% (Gray = 1)'}
-:qnet.I26586032RDR.cub @ 50% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='I26586032RDR.cub @ 50% (Gray = 1)'}
-:qnet.Link_QToolButton	{text='Link' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.Open control network  cube list_QToolButton	{text='Open control network  cube list' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.Shade_Mola_Radius.cub @ 1.57881% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow' windowTitle='Shade_Mola_Radius.cub @ 1.57881% (Gray = 1)'}
-:qnet.Statistics_QToolButton	{text='Statistics' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.Statistics_QToolButton_2	{aboveWidget=':qnet.Statistics_QToolButton' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.What's This?_QToolButton	{text='What\\'s This?' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.Window_QMenu	{title='Window' type='QMenu' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.viewport_QWidget	{name='viewport' type='QWidget' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.viewport_QWidget_2	{name='viewport' occurrence='2' type='QWidget' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.viewport_QWidget_3	{name='viewport' occurrence='3' type='QWidget' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.viewport_QWidget_4	{name='viewport' occurrence='4' type='QWidget' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet.viewport_QWidget_5	{name='viewport' occurrence='7' type='QWidget' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnetToolMainWindow	{name='QnetTool' type='Isis::MainWindow' visible='0' windowTitle?='Qnet Tool - Control Network File:*'}
-:qnet_Isis::MdiCubeViewport	{occurrence='7' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_Isis::ViewportMainWindow	{name='MainWindow' type='Isis::ViewportMainWindow' visible='1' windowTitle='qnet'}
-:qnet_QMenuBar	{type='QMenuBar' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QMenuBar_2	{occurrence='2' type='QMenuBar' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QToolButton	{occurrence='13' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QToolButton_2	{occurrence='8' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QToolButton_3	{occurrence='12' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QToolButton_4	{occurrence='10' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QToolButton_5	{occurrence='9' type='QToolButton' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qnet_QWidget	{occurrence='31' type='QWidget' unnamed='1' visible='1' window=':qnet_Isis::ViewportMainWindow'}
-:qt_tabwidget_stackedwidget_Isis::ImageTab	{container=':Find Latitude/Longitude Coordinate.qt_tabwidget_stackedwidget_QStackedWidget' type='Isis::ImageTab' unnamed='1' visible='1'}
-:qt_tabwidget_stackedwidget_Isis::QnetPointTypeFilter	{container=':Control Network Navigator.qt_tabwidget_stackedwidget_QStackedWidget' type='Isis::QnetPointTypeFilter' unnamed='1' visible='1'}
-:radiusSigmaEdit_QLineEdit	{buddy=':Radius Constraints.Radius Sigma:_QLabel' name='radiusSigmaEdit' type='QLineEdit' visible='1'}
-:radiusSigmaEdit_QLineEdit_2	{buddy=':Radius Constraints.Radius Sigma:_QLabel_2' name='radiusSigmaEdit' type='QLineEdit' visible='1'}
-:splitter.frame_QFrame	{container=':Select a list of cubes.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.frame_QFrame_2	{container=':Select a control network.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.frame_QFrame_3	{container=':Open ground source.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.frame_QFrame_4	{container=':Open DEM.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.frame_QFrame_5	{container=':Select a registration template.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.frame_QFrame_6	{container=':Save registration template.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:stackedWidget.listView_QListView	{container=':frame.stackedWidget_QStackedWidget_2' name='listView' type='QListView' visible='1'}
-:stackedWidget.treeView_QTreeView	{container=':frame.stackedWidget_QStackedWidget' name='treeView' type='QTreeView' visible='1'}
-:stackedWidget.treeView_QTreeView_2	{container=':frame.stackedWidget_QStackedWidget_2' name='treeView' type='QTreeView' visible='1'}
-:stackedWidget.treeView_QTreeView_3	{container=':frame.stackedWidget_QStackedWidget_3' name='treeView' type='QTreeView' visible='1'}
-:stackedWidget.treeView_QTreeView_4	{container=':frame.stackedWidget_QStackedWidget_4' name='treeView' type='QTreeView' visible='1'}
-:stackedWidget.treeView_QTreeView_5	{container=':frame.stackedWidget_QStackedWidget_5' name='treeView' type='QTreeView' visible='1'}
-:stackedWidget.treeView_QTreeView_6	{container=':frame.stackedWidget_QStackedWidget_6' name='treeView' type='QTreeView' visible='1'}
-:treeView_QHeaderView	{container=':stackedWidget.treeView_QTreeView' orientation='1' type='QHeaderView' unnamed='1' visible='1'}
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/suite.conf b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/suite.conf
deleted file mode 100644
index 1f0f306f6d98eaea94b884632b273fcf72a33802..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/suite.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-AUT=qnet
-CWD=<AUT_path>
-ENVVARS=envvars
-HOOK_SUB_PROCESSES=false
-IMPLICITAUTSTART=0
-LANGUAGE=Python
-TEST_CASES="tst_Cnet exists" "tst_Clean open and close" "tst_Control to Ground" "tst_Auto Registration and Setting Sigmas" "tst_Ground Without Radius Source" "tst_Network from Scratch" "tst_Duplicate Serial m01018" "tst_Ground Network from Scratch" "tst_Multiple Ground Sources"
-VERSION=2
-WRAPPERS=Qt
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Auto Registration and Setting Sigmas/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Auto Registration and Setting Sigmas/test.py
deleted file mode 100644
index c2d36c803ac72e2b12afd0bda61863284624c99a..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Auto Registration and Setting Sigmas/test.py	
+++ /dev/null
@@ -1,263 +0,0 @@
-import os
-
-def main():
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'MiniUpdate2.net')
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'reg.def.txt')
-    except Exception:
-        pass
-
-    
-    startApplication("qnet")
-    
-    # Open cube list
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/Ground/Extracted_AllOverlaps.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    # Open control net
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_7"), 95, 13, 0, Qt.LeftButton)
-
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "Mini\\.net")
-    doubleClickItem(":stackedWidget.treeView_QTreeView_2", "Mini\\.net", 66, 5, 0, Qt.LeftButton)
-    
-    # Open ground source file
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    clickButton(waitForObject(":Open ground source.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "src/qisis/tsts/SquishTests/input/Ground/Shade_Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "<Return>")
-    
-    # Open radius source file
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Radius Source"))
-    clickButton(waitForObject(":Open DEM.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_4"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_4"), "src/qisis/tsts/SquishTests/input/Ground/Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_4"), "<Return>")
-    
-    # Create measure from ground source file
-    mouseClick(waitForObject(":qnet.viewport_QWidget"), 235, 337, Qt.NoModifier, Qt.RightButton)
-    type(waitForObject(":Point ID:_QLineEdit"), "newpoint001")
-    type(waitForObject(":Point ID:_QLineEdit"), "<Return>")
-    
-    # Edit Measure - Update using registration templates then register measures
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 83, 17, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I08528020RDR\\.cub"), 83, 8, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":VP2"), 41, 159, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 77, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I27759024RDR\\.cub"), 80, 8, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.OK_QPushButton"))
-    clickButton(waitForObject(":QnetTool.View/edit registration template_QToolButton"))
-    clickButton(waitForObject(":QnetToolScroll.Open registration template_QToolButton"))
-    
-    # Open default registration template
-    type(waitForObject(":fileNameEdit_QLineEdit_5"), "/usgs/cpkgs/isis3/data/base/templates/autoreg/qnetReg.def")
-    type(waitForObject(":fileNameEdit_QLineEdit_5"), "<Return>")
-
-    mouseClick(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), 0, 6, 0, Qt.LeftButton)
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "1")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Home>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "1")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Home>")
-    
-    # Try to save to file we can't write to
-    clickButton(waitForObject(":QnetToolScroll.Save template file_QToolButton"))
-    clickButton(waitForObject(":IO Error.OK_QPushButton"))
-    
-    # Save as - this will be an output file
-    clickButton(waitForObject(":QnetToolScroll.Save template as_QToolButton"))
-    
-    clickButton(waitForObject(":Save registration template.toParentButton_QToolButton"))
-    type(waitForObject(":fileNameEdit_QLineEdit_6"), "src/qisis/tsts/SquishTests/output/reg.def.txt")
-    type(waitForObject(":fileNameEdit_QLineEdit_6"), "<Return>")
-    
-    mouseClick(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), 77, 158, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.OK_QPushButton"))
-
-    mouseClick(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), 0, 6, 0, Qt.LeftButton)
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Down>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Right>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "<Del>")
-    type(waitForObject(":QnetToolScroll.Template Editor ToolBar_QTextEdit"), "64")
-
-    clickButton(waitForObject(":QnetToolScroll.Save template file_QToolButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 152, 14, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "Shade\\_Mola\\_Radius\\.cub"), 108, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Qnet Tool.Geom_QRadioButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 171, 9, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "Shade\\_Mola\\_Radius\\.cub"), 112, 3, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 133, 13, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":QnetToolScroll_QWidget"), 920, 689, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":VP2"), 87, 118, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 148, 1, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "Shade\\_Mola\\_Radius\\.cub"), 87, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":QnetToolScroll_Isis::ControlPointEdit"), 357, 455, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    sendEvent("QWheelEvent", waitForObject(":VP2"), 166, 165, -120, 0, 2)
-    clickButton(waitForObject(":QnetToolScroll.No geom/rotate_QRadioButton"))
-    doubleClick(waitForObject(":QnetToolScroll_QToolButton"), 14, 17, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll_QToolButton"))
-    clickButton(waitForObject(":QnetToolScroll_QToolButton_2"))
-    clickButton(waitForObject(":QnetToolScroll_QToolButton_2"))
-    clickButton(waitForObject(":QnetToolScroll_QToolButton_2"))
-    clickButton(waitForObject(":QnetToolScroll_QToolButton_2"))
-    mouseClick(waitForObject(":QnetToolScroll_QWidget"), 749, 1122, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":Control Network Navigator.View Cube(s)_QPushButton"))
-    
-    # Viewport must be active before doing the mouse click...
-    nativeMouseClick(waitForObject(":Isis::ViewportMdiSubWindow - I27759024RDR.cub"), 150, 25, Qt.NoModifier, Qt.LeftButton)
-    mouseClick(waitForObject(":qnet.viewport_QWidget_2"), 252, 232, Qt.NoModifier, Qt.RightButton)
-    
-    type(waitForObject(":Point ID:_QLineEdit_2"), "newpomt-")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Backspace>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Backspace>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Backspace>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "int002")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Return>")
-    mouseClick(waitForObject(":VP2"), 149, 83, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 180, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    waitForObjectItem(":Navigator_List", "newpoint001")
-    clickItem(":Navigator_List", "newpoint001", 89, 8, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Modify Point_QPushButton"))
-    clickButton(waitForObject(":Control Network Navigator.Set Apriori/Sigmas_QPushButton"))
-
-    mouseClick(waitForObject(":latSigmaEdit_QLineEdit_2"), 43, 6, 0, Qt.LeftButton)
-
-    type(waitForObject(":latSigmaEdit_QLineEdit_2"), "100")
-    type(waitForObject(":latSigmaEdit_QLineEdit_2"), "<Tab>")
-
-    type(waitForObject(":Set Apriori Point and Constraints.Longitude Constraints_QGroupBox_2"), "<Tab>")
-
-    type(waitForObject(":lonSigmaEdit_QLineEdit_2"), "100")
-    type(waitForObject(":lonSigmaEdit_QLineEdit_2"), "<Tab>")
-
-    type(waitForObject(":Set Apriori Point and Constraints.Radius Constraints_QGroupBox_2"), "<Tab>")
-
-    type(waitForObject(":radiusSigmaEdit_QLineEdit_2"), "500")
-    clickButton(waitForObject(":Set Apriori Point and Constraints.Set Apriori_QPushButton_2"))
-
-
-    sendEvent("QMoveEvent", waitForObject(":Set Apriori Point and Constraints_Isis::QnetSetAprioriDialog"), 3569, 403, 3733, 406)
-    
-
-    # Viewport must be active before clicking on it
-    nativeMouseClick(waitForObject(":Isis::ViewportMdiSubWindow - I08528020RDR.cub"), 150, 25, Qt.NoModifier, Qt.LeftButton)
-    mouseClick(waitForObject(":qnet.viewport_QWidget_3"), 245, 325, Qt.NoModifier, Qt.RightButton)
-    
-    mouseClick(waitForObject(":Point ID:_QLineEdit_2"), 87, 15, 0, Qt.LeftButton)
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Backspace>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "3")
-    clickButton(waitForObject(":Create New ControlPoint.OK_QPushButton"))
-    
-    # Save resulting network
-    activateItem(waitForObjectItem(":Qnet Tool_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Save Control Network As..."))
-    clickButton(waitForObject(":Choose filename to save under.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_3"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "src/qisis/tsts/SquishTests/output/MiniUpdate2.net")
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "<Return>")
-    
-    activateItem(waitForObjectItem(":qnet_QMenuBar_2", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-
-    snooze(1)
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Clean open and close/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Clean open and close/test.py
deleted file mode 100644
index 4c51443997cfe622ee9af3a7a70770437dd52e21..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Clean open and close/test.py	
+++ /dev/null
@@ -1,7 +0,0 @@
-
-def main():
-    startApplication("qnet")
-    clickButton(waitForObject(":qnet.Exit_QToolButton"))
-    snooze(1)
-
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/test.py
deleted file mode 100644
index a16ae6ce8e6400a800aa76028cd1896f50eb9f9b..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/test.py	
+++ /dev/null
@@ -1,47 +0,0 @@
-import os
-
-def main():
-    startApplication("qnet")
-    
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"))
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/cube.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_7"), 100, 16, 0, Qt.LeftButton)
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "moc3HandLockPoint1\\.net")
-
-
-
-    doubleClickItem(":stackedWidget.treeView_QTreeView_2", "moc3HandLockPoint1\\.net", 58, 5, 0, Qt.LeftButton)
-    waitFor("object.exists(':Navigator_CP1')", 20000)
-    test.compare(findObject(":Navigator_CP1").text, "ssides1")
-    test.compare(findObject(":Navigator_CP1").toolTip, "2 image(s) in point")
-    waitFor("object.exists(':Navigator_CP2')", 20000)
-    test.compare(findObject(":Navigator_CP2").text, "ssides2")
-    test.compare(findObject(":Navigator_CP2").toolTip, "2 image(s) in point")
-    waitFor("object.exists(':Navigator_CP3')", 20000)
-    test.compare(findObject(":Navigator_CP3").text, "ssides3")
-    test.compare(findObject(":Navigator_CP3").toolTip, "2 image(s) in point")
-    waitFor("object.exists(':Navigator_CP19')", 20000)
-    test.compare(findObject(":Navigator_CP19").text, "ssides19")
-    test.compare(findObject(":Navigator_CP19").selected, False)
-    test.compare(findObject(":Navigator_CP19").toolTip, "2 image(s) in point")
-    test.compare(findObject(":Navigator_CP19").enabled, True)
-    waitFor("object.exists(':Navigator_CP37')", 20000)
-    test.compare(findObject(":Navigator_CP37").toolTip, "3 image(s) in point")
-    test.compare(findObject(":Navigator_CP37").editable, False)
-    test.compare(findObject(":Navigator_CP37").text, "ssides37")
-    test.compare(findObject(":Navigator_CP37").enabled, True)
-    doubleClickItem(":Navigator_List", "ssides1", 46, 8, 0, Qt.LeftButton)
-    snooze(0.5)
-    test.vp("InitialQnetToolView")
-    clickButton(waitForObject(":Qnet Tool.Geom_QRadioButton"))
-    test.vp("GeomQnetToolView")
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    clickButton(waitForObject(":qnet.Exit_QToolButton"))
-    snooze(1)
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/verificationPoints/GeomQnetToolView b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/verificationPoints/GeomQnetToolView
deleted file mode 100644
index 0cdd2d705f81469deaf8ce23344dc4ddf89bb97d..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/verificationPoints/GeomQnetToolView	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":QnetToolScroll_QWidget" type="PNG">iVBORw0KGgoAAAANSUhEUgAAA3AAAAQPCAIAAADeW54aAAAACXBIWXMAAAuJAAALiQE3ycutAAAgAElEQVR4nOzdeVxUVf8H8O/A7AMkoMYmqKAGKhSpZZbpU6LsIpAorolrpmVimrmllAsuiRqiouCWsoiKoFhPZmU/0zTgkdxAwERUFERmmBkG7u+PAWSZGQaG1T7vV38wd84953vuzPPM13vOPYd1LfUqAQAAAAA0lV5bBwAAAAAAHRsSSgAAAADQCRJKAAAAANAJEkoAAAAA0AkSSgAAAADQCRJKAAAAANAJEkoAAAAA0AkSSgAAAADQCRJKAAAAANBJmyaU4vTgyZ+niTtsc60cf8t5YTryr9XwJ6h49NO3H48fPcoPHzQAADQ/TQllsJ+ry6ja/7Xyr1ETEh1xeq2w/T5Pe9R82VKrJ16ynD3TZ+3LKWrrhE/njld2RN7a7WqviRGqUyfy6q+lq5ubz/jpX3yXclfGNFNTWpHlHj183Xn5gaTYdY6i1mwYAAD+Fdga3tsQm0xEJE4PnnNg4o6O8zskcgyNqhXthqh1REQ65SWKJxf2rPnudEaBYuX8pS6Bs6YM68bXLUwtlD26cIXp/5kZp6PfU6rqCLetA1Gr5SOs/FoyCvGDtMQtoWuP993ygSWnxZqrQyHOkRsFWhlgjgsAALQETQmlCoqCC/vD9p1J/Ucq6v6m//x53n2ELBKnB8/67tV3uv737NVHXNuRsz99+97ebXF/PuD08vxs+TRnIz1xevCs8Nf/Y3Eu5fJdqchu6MTP5rhY81g16q2Q3LsYs3t/8l93n5YLLZ3cZn42YSAnI3jyotQSSvV1JYOqHFFlAJpVJ8QNdkQDWe7BPZdsgj5h9pz0D/Z/+OOJ3Dc+6k1EFSUZR0N21O2Xqu500idSPLl4cMvelNR/ivU6v/LuB7NnuvYUsNQHo3h8+YKsz7QnX05eptV1aPsPQl0HH1++IOvzkTlP3ZWp848W5cvQCftn122Xkd5Nidh68Ocbj8m0z7vjPpkxwprPInF68OydA0dY/5JyMUva65t9ax15qi8pI81J3rF5/y9ZYn63gS7v3Pvv1Tnhyu5UR0iM7O7pHRv3n88q4Xcb5DL03n+vzA5f50jpwbMj3nSz/e30rzcLyg27Dx674GPvngKWyu8S87+6V+z5FWaxRWavuY4xO32iUP6BJauRcdZQJ86SCvXf7ap4/vKr8QkCAAA0n0bdsJDnHvkqPNtpbtjhhOgQX37Suoi/xcpxu9L755iRq/d+Hx7U6ZfQLyKeuayKPLRjquH5iFN5ZcoCucey+83fcSQ+8svhTw+t3n9HWrNi8fXQLb+95L1055FjiUe+nd7jz+3b/yoW9t8Qtd7pZcfQuOSUynE69QE0jpp6NAywlksfVhg69ejEZukbWL06es5HvYXq+6WyOwxR6Z094b90nbT+YMKxQ+un9Mo7e0+qqVPlRennxD1G2r3eiOvQth+E6g5WdcSKr/bKqKSi3dLMqNXRBUMW746N373o7YIDq6IyS5WFJbnH85zmhR1OjFnrKFJ3faSZ0SGHS0as3Bsbs2Oe090TuaVVH291hCTNil5z8OnwZZGxMTvmOmQlZFeVIUlOQk6voND9CfGRy4Y9PropOV+h5lKoiLwaoxDnX02Oe2Dwqgmv0XHWoC7OxsYDAADQDBqTUMryks4znjO9HLsIuEbdh08MMMo4kycjIiJh9wkfvGlhIDB/3dXCoPNY3zcsDESWg9y6SP9XpJyUxrXynelub8zlGb/iMcOD80fyPVmNmkUOyzcsHP2q5Utctr7AbJDvONOcc/nSxgRQkzhtoW+NOZSSptZTk8BqtOOz8JDI7GcFv1648VRRdVxlv9R1h6XH1SsveXT/YVEZr2tf96CZdgINwTDFf/9QZDmyu6jerdN2+0Go7GDNjmhZvzqy+0mXOV6z3B2MuTxje8+ZHtzLpys7zrMJnPp+r05clobwZHnJl7le00f26cTlGfdxCxpjxVPWWyNCWV7SJY7XDOUlsvec5WNVPQgu6DklyNWhs4DNNbZ38TMrufJY1pjvUuXX0s3Nd+qXxztNWeptUd7YOGt/BCrjbMJ3GwAAQGeNGfJWlOQWZiYEee8hhlHeVRI5lpYTERGLa8xlERFLn6+vz+1U/TejqByI4xjYGVa2xTa0FZb9VaqoWXVFybXj4ftO/XH7wVOpgmGIZeAkraC6NARQU505lOJ0besR9a+cbVkfy+j1T8I2Xj62ct2p3KQ1cy/N2rp4iLG6fvHUdEfUY9oi/+jDB1YfyikSObgFLZj6lilbXTDMs9spj7q42BrWH4pvtx+Eyg7W6oh29aujkNxXiN42rJx4yDGyEylSK+NnCy2F+g1dH0lemXCIQXX3exqyLxHVvtQKSV6ZcEjVJeIY2Rlx/qysVo/XhV/5DzCWPl+fKavQ/FnUofxaChWS/NS4LbuuZJW859TIOGtfCtVxah8PAABA82lMQskWWZn0Hrwt1LNr7bO0eWJEUXL7mcLZkE1EimeZEo6FgE1UncrIsvduPsWesGTHgG7GIq5e0a+fzj9ZfSpTPSSqLoDGalo9LIGlQ/9OotSABR77lp2+Jx1irK5farujZ9DHbc5KN2LkD/6IXBK+993XFvZWEwxTkp18r9MIe6PqfLLh69D2H4SKDvYqr9ERtfWz2KwKaTlDxCKiCunDmlnm83b1heZs8a1nZc6GHCIqK74tZptXx8+qvlLqwpMJLTilmSXV3c96piAiYsQ1ImQLLTiSmpeouEzj9dT4WTD1R/NZbKH56+MW5Ad/Ef7n2rGNirN2u2ri1OW7AQAA0FSNGfLmWXq8S3E7Eq7kicvKZYV3Lh7dtu1m/QFllWT/xO9KvlEklxfdSNqVKB8wyrLmKF6ForScuDw+n68nL8hI3rPntrJaPa6pfsnNJ3JG9wC06YiGOZSlmRFR/71VKKtgFE8yU5/qvyzQV98vdd2R3ArbFvdHTrG8vIL09FjE0hCM9J+UbNEwx076zXwdWvSDUNXBWh1RVz/PdIBBfszZ64Vl5dKCjFO7orNKVbXLNx/lLD+xM+nvQrm88HrizkSZ80iL+sPB6sLjmY9ylp3YfebGU7m86Gby7vh/ZFQ3Qp6F6wD5yapLlBhx7J7mhYTUtVUn8trYXd8JsLr1/V9Ct8bEWev7qS7O5vrfCAAAQGM06lYf19p/xby4XVFLJmc+Voisnd0nBNkIiLT5uRJYj7ZO2zx7T26pge3QwGWTetZac0fQ88Npg9ZHzB+7Rs7rbDt4hLu18BIREd/a771Oq+aP2a3fd0PUOkeRmgAarfEd4VuOtDy9bdlPGY+kmfs4brM+784jUqjpl7ruCLp59/t5Z8j0VXkyA6tXXefMtxWoC0b2z483uW+NM1V+Plpeh7b/IOp3UJZdsyPq6mebuS3wv7U5ZMreYv3OvYaM8rbJuKiqXUGvqUsDw8O+nrbnCRn3Hjp++VQ7VZ+/uvAEdpO/+GD7phWTwsXCbgPfd7fOvK7HkuXVjJD4tpOWBmzftGJKhERgPdDF2ybzisYLqq6t2pHXOYll2M/fPjz8N27oinnHtYyTqFZyqi5OHb4bAAAATcW6lnq1xRvpcCtZqtNqHZHnRs77unzJ1uk2zbouYut/EC3UkeZQdu/wvNUli0JH/rRQfYTt4KtbGefW6T3a3SUEAACopNtkRGghXOsPw8PbOojm0N46Upq1K/7ucNc3rCgrOSJZ5rTc3KCdRahUP05kkwAA0I4hoWwMDY+BQ4fAN3tXFPvtJ1vvPBP2GOy7ZLJty2931CQdJU4AAAAiaqUhbwAAAAB4cWFrXwAAAADQCRJKAAAAANAJEkoAAAAA0AkSSgAAAADQCRJKAAAAANBJ+04oNeyF2CF09PgBAAAAtNDgOpSMJPNs9L7j5zP+KSrjdbV9bfiYiQFvW/FYrRGcOoonl4/sPHD6zzuP5byuvQeN8gv0ecO8zUISpwdPXpRaUvXSwDH0uwn7Fx6YuKPehnsAAAAAL6IGEkpZbuyXK3/pOfGjTZ/bdebKHt7+88cz8dmvz+sjbJ3wVFE8SA4Ju+w4e80cZyuB9P6N/zuT/H2246dtGZLIMTSq1u58leuf494kAAAA/AtoTCiZ4rTI0zRh7WyXLvpERFwLh2ETHYYREYnTg2fvHDjC+peUi1nSXt/sW9tf/25KxNaDP994TKZ93h33yYwR1nxW3a2Qq19SevDsiDfdbH87/evNgnLD7oPHLvjYu6eARcTI7p7esXH/+awSfrdBLkNLKupFJS/4vyddA3zesDFiEXGt+rtM6+9SGa+0sTHU7gIn/5fo7dFn0/MrXn5j7IIFvn1ELCJFwYX9YfvOpP4jFXV/03/+PO8+wobuhT5vooYm1AMAAADQEWicQyl7cP6eoYuzib7KdyW5x/Oc5oUdToxZ6ygqzYxaHV0wZPHu2Pjdi94uOLAqKrNUc8uSnIScXkGh+xPiI5cNe3x0U3K+goikWdFrDj4dviwyNmbHXIeshOz6tXBNB7z04PDRcxn3xQqm5htNiKFmF2TZh76KuOP4cdjh+Mgv3pX/mi8lInnuka/Cs53mhh1OiA7x5Seti/hbzGiuVCU19WCSJQAAAHR8GhPKclmBgtuVr09EJE4P9nN1GeXq4leVAPFsAqe+36sTl0VEsvtJlzles9wdjLk8Y3vPmR7cy6fzZBpbFvScEuTq0FnA5hrbu/iZlVx5LCOS5SVd4njNcLdX1jPLx4pb70S2mefyT94u+eHbhZN8/CbP+/rgxQIFNS2GWl24d+oCy2POaKeuAq6hzdDx02wFRLK8pPOM50wvxy4CrlH34RMDjDLOqKhTnLbQ19VlVNX1kdQroGU9AAAAAB2QxiFvfV5ntvyhtJwM9UnUf0NssnIwt+pUoaWw6t6lQnJfIXrbkKN8xTGyEylSSxUaW9bjdeFXprMsfb4+U1ZBRApJXplwiCG7uh4jzp8qgjZx9vvE2Y8YRXHOxbiwrWsMN4Z6mTUhhtpduFcmesuIU6uAoiS3MDMhyHsPMYzyxqTIsbS8Xj115lCK0+sWUFePqH/lbEsAAACADktjQsl7+W3zZzF/FY4Y0VnlqDerehKgvtCcLb71rMzZkENEZcW3xWxzAZtIwWKzKqTlDBGLiCqkD6X150TWCkdowZHcfqZwNmQTkeJZZnGZhtIstlH3t3zHxp0/WSD3MmtSDM+7wBZacsQ3iytPrzoosjLpPXhbqGfXBh+H19yvZqoHAAAAoP3ROOTNMnr1w/fl0SG7frzxSKKoKCvJu55epPKeH998lLP8xM6kvwvl8sLriTsTZc4jLXhEPNMBBvkxZ68XlpVLCzJO7YrO0jyrkWfhOkB+clfyjSK5vOhGYsSxe/J6ZSQ3Nm3Ym5J+r1heXlZy7/LJmAeGr5lwdY6BZ+k2uCLxu+Npj6RlJTnnD0VmlhLxLD3epbgdCVfyxGXlssI7F49u23az/oh2g9TVgzmUAAAA0PE1cMOM133s10sN9uzbOHfb/WcVIjO719/76JM+QqK6SZWg19SlgeFhX0/b84SMew8dv3yqnYCI2GZuC/xvbQ6ZsrdYv3OvIaO8bTIuamyQbztpacD2TSumREgE1gNdvG0yr9QtIugR8M5fB6OX77zxQMo2tu4/bMYSD3O27jHwegSuCNoXtmXO/odk/mbAp5/yiYhr7b9iXtyuqCWTMx8rRNbO7hOCbASar5lKauppQm4KAAAA0M6wrqVebesYAAAAAKADa99bLwIAAABAu4eEEgAAAAB0goQSAAAAAHSChBIAAAAAdIKEEgAAAAB0goQSAAAAAHSChBIAAAAAdIKEEgAAAAB00pIJ5b9zX8F/Z68BAADgX0zj1ovi9ODJi1JLiFgsNr+Tpf07/rM/HNGNx2psI+L04DkHJu5Y5yhqeqCKJ5eP7Dxw+s87j+W8rr0HjfIL9HnDvPGhNJPqK6Nk4Bj63YT9Cw9M3LHOsY0iAgAAAGgrDezlTSLH0Kh1jiJGIX6QlrgldO3xvls+sOQ0shFR/w1R65oaIRERKR4kh4Rddpy9Zo6zlUB6/8b/nUn+Ptvx0z5CnWrVSeWVeX6gso+4NwkAAAD/MloOebPYIrPXXMeYSdIK5URUIbn3e9SqOQE+nq5eY4OWRV0qKleWY2R3kzd/Mt7Hy2vcR2uOZpRUEFGNUeA6w8HPXyqeXIxaPivQ28PTZ0rwlqSsUqZ2+/KC/3vSNcDnDZuXuPpcI6v+LtMWVWaTjPTuma3Bk3y93H2nLtiakitlatdcL4BJc4/uX//xRF93/8VpYmLk+ed3LwsaO9rDf+bq2BtiZbuKggt7V8wIGO02OnDO2oQbkjrRqKJypLsJ9QAAAAB0NFomlIxCnH81Oe6BwasmPCLx9dAtv73kvXTnkWOJR76d3uPP7dv/KmaISJoVvebg0+HLImNjdsx1yErILtWu+tI7e8J/6Tpp/cGEY4fWT+mVd/aetHYBrumAlx4cPnou475YUSsrK82MWh1dMGTx7tj43YveLjiwKiqzgTYlucfznOaFHU6MWesokmUf+irijuPHYYfjI794V/5rvpSI5LlHvgrPdpobdjghOsSXn7Qu4m9xU1JBNfVgkiUAAAC8WBoa8hanLfR1rSxqMvTTTd4WbCK2w/INDlUlzAb5jjsafC5f+rqRXl7SJY7XSnd7YzaRvecsn+TgP7WKgqXH1SsveXT/YZFJ96593YP61gvTzHP5J+XRcd8u3JYnNejxukvgjLFvdGaT7H7SZY7XKncHYw6RvedMj7MrT+dNmWuroS2eTeDU93t10icikt07dYHlsWK0U1cOkc3Q8dOIiGR5SecZzxVejl3YRN2HTww4ueRMnsyhF1/tlVHOoazbkLp6tLoiAAAAAB2GdnMohQpJfmrcll1XskreMzPWo4qSa8fD95364/aDp1IFwxDLwElaQVQhySsTDjGsrJNjZGfE0S6h5PeYtsg/+vCB1YdyikQObkELpr5lWicytomz3yfOfsQoinMuxoVtXWO4MdTLTCG5rxC9bcipblGkSC1VaO6x0FKoX/m3QnKvTPSWUe05oYqS3MLMhCDvPcQwTOVFKC1Xc2Wq51CK0+sWUFeP7jNKAQAAANqThhJKJRZbaP76uAX5wV+E/9lv8UBe9t7Np9gTluwY0M1YxNUr+vXT+SeJiNhCC47k9jOFsyGbiBTPMovL6lXEqpCWM0QsIqqQPpQqJ1mSnkEftzkr3YiRP/gjckn43ndfW9hboCYUo+5v+Y6NO3+yQO5lpi80Z4tvPStzNuQQUVnxbTHbXMAmUqhriIiIVf1sOFtoyRHfLK48veqgyMqk9+BtoZ5dtbs46jRXPQAAAADtWyPWoWR3fSfA6tb3F5+UVyhKy4nL4/P5evKCjOQ9e25LiIiIZ+E6QH5yV/KNIrm86EZixLF78tpV8EwHGOTHnL1eWFYuLcg4tSs6SznhUXIrbFvcHznF8vIK0tNjUb3VgCQ3Nm3Ym5J+r1heXlZy7/LJmAeGr5lwifjmo5zlJ3Ym/V0olxdeT9yZKHMeacFT31AdPEu3wRWJ3x1PeyQtK8k5fygys5SIZ+nxLsXtSLiSJy4rlxXeuXh027abEu2v0/PKVdeDOZQAAADwYmnMzTOWYT9/+/Dwcw+Ge384bdD6iPlj18h5nW0Hj3C3Fl4iIiK+7aSlAds3rZgSIRFYD3Txtsm8Urs1M7cF/rc2h0zZW6zfudeQUd42GReJiATdvPv9vDNk+qo8mYHVq65z5tvWuT0p6BHwzl8Ho5fvvPFAyja27j9sxhIPczYRCXpNXRoYHvb1tD1PyLj30PHLp9oJNDRUF69H4IqgfWFb5ux/SOZvBnz6KZ+IuNb+K+bF7YpaMjnzsUJk7ew+IchG9e1SzdTU04TcFAAAAKAdY11LvdrWMQAAAABAB4a9vAEAAABAJ0goAQAAAEAnSCgBAAAAQCdIKAEAAABAJ0goAQAAAEAnSCgBAAAAQCdIKAEAAABAJ0goAQAAAEAnSCgBAAAAQCdIKAEAAABAJ0goAQAAAEAnSCgBAAAAQCdIKAEAAABAJ0goAQAAAEAnSCgBAAAAQCdIKAEAAABAJ0goAQAAAEAnL2JCKU5bMCE4VdzWYQAAAAD8O7RcQqko+L/9K+eM93TzGD1l0dbTd0qZxtfRjKmhOG2Bj8t7I1zecxk50ntc0NLwH/NkmiJqsGmkrQAAAABERMRumWoZyfXIxVvvDPt0/WdOXang7/+eTL5bOqe3sGVa05LIadOBDU4ipuzZvasJmzatOWG/1d9C3QUQOW46sKFVwwMAAADomFomoWSeXtl3wXjGpvEDTfSIyMLJe6ZT5TvS3NM7txz46cZjMn1leOCCmS7WfBaJ0xbMCH/Lw+6XpF9vFigMe7wVsHC+z8u3PpuwMLWEFox2IQOnTQc2OFHaghnhb7hYnz/zf5nSXuv2b3DUV1VbA1gcQ6uBXmPNzp54Ive3YKsPaeb+yTsrG204NlGLXEgAAACA9q9lhrylD397+NL7fV+qV3vp7b2roh69szQy/njk4nceRa/Ym1mqfEeSE5/de+amgycT9q0Y/vhoaFI+z3HTgVCnl502JaT8eKwqY5PkHMt7df6Oo8nxG5xE6mvThFGU5F0+eSTf4FVjrsaQqmkZGwAAAMC/UssklBXyJwpOF4F+3eOyvFOXuKPneDiY8HgmDl6zPbmXku/JiIhI0PPDGW4OXQRsnonDSH+zZ38WyFTVzLeZMG1E705clubaVBKnLhjt8p7LKPfxC8L/Z/fhF14WbO0q0TI2AAAAgH+lpg95X7p8OTs7p85Bfz9fIiI9rgm77FFpORnUzikVpfcVoncMOcpXHKPeIkVqqYKIiPT4XfiV2S1Ln6/HlFWobFVf1E1YVaeG2lQSqRqb1qYSLWMjiomNU988AAAAQPvVvbvNwAEDmnZuExNKZTZZmT7Wx+86pOvTk38/HdHFpNYtUH2BOVt861nZ64YcIiorvilmmwvYROqzQBYRMfUPNbE2FXSopH5sai8IAAAAQPumvC/WtJyyiUPemrJJImK95Dxl8OOIjUf+zCspKyvJSz2xc8ctCRHfwnWALOG7UxmFcnnh3ye/OykbMMqSpyE6nql+yY3Hatb3aWxtzVuJ5tgAAAAAOhR/P9/6g89aaqF1KFnCV6Z981Hv67s/G+ftM+GLQzndXa0ERCTo/eHyicY/r5ni4zXl659NAld82EugoRq+tf+Il47PGz3CR+WKj42sTbWmVtJAbAAAAAD/FqxrqVebcFpMbByGdwEAAABeJE1O8F7ErRcBAAAAoBUhoQQAAAAAnSChBAAAAACdIKEEAAAAAJ0goQQAAAAAnSChBAAAAACdIKEEAAAAAJ0goQQAAAAAnSChBAAAAACdIKEEAAAAAJ0goQQAAAAAnSChBAAAAACdIKEEAAAAAJ0goQQAAAAAnSChbFbi9ODJn6eJ2zoMAAAAgFbUYgmlOD3Yz9VllKuLq5ubz4QZyyL+mydnNJfXnIppKFD9VmWjbiM9Ro8JnLng671nMyWaGm2y5k0cq6+VH5JRAAAA6HjYLVi3yDE0ap2jiCl7lvfX8c2bvz75yhZfC3UNivpviFrXbI0KFZIn/1z7NX73l4vz1qybZCtgNUPVNVtppmira4tNJnF68JwDzVYnAAAAQGtpyYSyEotjaDnAy9/sx8Qncl8LNjHSuykRWw/+fOMxmfZ5d9wnM0ZY81nKdGrijnWOlB48O+JNN9vfTv96s6DcsPvgsQs+9n759qLJi1JLKNXXlQyUearmNtlC0+4DvedZcz5fuOeqd8hbnbTKKBVPLh7csjcl9Z9ivc6vvPvB7JmuPQUsVQclVdGKiJHdPb1j4/7zWSX8boNchpZUVFdWcGF/2L4zqf9IRd3f9J8/z7uPkKWmCR2vMAAAAEBbaoU5lIyiJO/yydh8kZMJl4hKM6NWRxcMWbw7Nn73orcLDqyKyiytc4YkJyGnV1Do/oT4yGXDHh/dlJzP678har3Ty46hcckpsQ1lk8+xOw8c0enhhYdS7QapS+/sCf+l66T1BxOOHVo/pVfe2XtSNQefk2ZFrzn4dPiyyNiYHXMdshKyKzsjzz3yVXi209ywwwnRIb78pHURf4uZBmsDAAAA6HhaMqEUpy30dXVxdfeauDAiw3bqEk9zNpHsftJljtcsdwdjLs/Y3nOmB/fy6TxZ7RMFPacEuTp0FrC5xvYufmYlVx7LVLfQIH1+V155kbyi4ZJERCw9rl55yaP7D4vKeF37ugfNtBOoOVhNlpd0ieM1w91e2Z1ZPlbcquPnGc+ZXo5dBFyj7sMnBhhlnMmTNVQbAADAC681HmBVPPrp24/Hjx6FhxNaSyvMoax9UCG5rxC9bchRvuIY2YkUqaWK2mX0eF34lZkuS5+vz5RpmRDWV176UKZvwtMjEmgx65HfY9oi/+jDB1YfyikSObgFLZj6lilb5cEa3ckrEw4xZFd3x4jzJxGRoiS3MDMhyHsPMYzysSCRY2k5kUhjbQAAAO2KOD148uc3LYK+2zjGglN1pGrSV/slyz16+Lrz8gPfvmJQ686ZOD14ylfMjO/WjeisX3mIKflr44xvHi2ObN89ahAjz7988nDcmQt/35fyutgNdJsyw8fpJf2GT2wmrZ7M6AvN2eJbz8qcDTlEVFZ8W8w2F7CJFA2eSUTENO6ZbUXB5R+evuzbla9leT2DPm5zVroRI3/wR+SS8L3vvrawt0DVweoz2EILjuT2M4WzIZuIFM8yi8uUx0VWJr0Hbwv17MrWoolGdQoAAKAV8c2H6p3edWn4sreMO8xagwpxjtwo0MpARcCssgdxx++8M81OmRso8s9GpT6tsGjlAJtf6Z39Zwte8V08qV83kfTuhSMb160x+PabUV1aK9Fr9e8G33yUs/zEzqS/C+XywuuJOxNlziMteFqcqMc11S+5+UTj2kPVGEXpk+zLx8NWHKQaARAAACAASURBVCgb8eFrRiztbrBLboVti/sjp1heXkF6eixiqT1YjWfhOkB+clfyjSK5vOhGYsSxe3LlcUuPdyluR8KVPHFZuazwzsWj27bdlDRUGwAAQHuj33nojGEPo4/eKq39C1znh7XmEn4T5xyMWDnN39srcMH2X++mHvlq+gfeXoELd10prhxyrCjJOBoya5yPu8+E+ZvP5MqqalYUXNi7YkbAaLfRgXPWJtxQLv0nTg+eNPfo/vUfT/R1919c56eckd49szV4kq+Xu+/UBVtTcqUMidODJy/6Kz8t2E/VenwCG58+adF/FFYQETHP0g+d6+phU31nR2UAVCG593vUqjkBPp6uXmODlkVdKipXln5yMWr5rEBvD0+fKcFbkrJKGY2XpU4vVLelqk5tCPsEfzHTc2BPUwGHb9xz+LiJZgW/P5Rrd25zaP1/bAh6TV0aaHz+62l+PtO+OW8yfvlU7aYR8q393ut0Yv6YBuZDiNMW+rqN9PAdN/frQ9c6+a7+ZoItX9usTdDNu1/h8ZDpPqMD5u3Je2fOh7YCNQdrhGU7aWmAwQ8rpvj6zd6abuNd9aXkWvuvmGefFbVkso/32Fkbzkidx9ioq025DqXvotQHaQt9sRolAAC0Lzxr7xmvXN2Z8kC70USi0vvnmJGr934fHtTpl9AvIp65rIo8tGOq4fmIU3nKcbzS3GPZ/ebvOBIf+eXwp4dW778jJVL7PCsRSXKP5znNCzucGLO29sC0qid9RZof5OXbeA4vjkm8KydS3D+z/+6bY+xElYmCmgDE10O3/PaS99KdR44lHvl2eo8/t2//q7gJD9rW6kVjHt5t9KxTpvjmL8WdB3fhan+KrlrsTqj6lRpZ/O5un2x0+0Rd+donPj8usAsM2R+oua3+G2KTGxtPzcishwWFDAtq+GCN2lh8G/fPvnX/rOqtqWMr/2AbO49d5DyWalNTm7qwAQAA2hxL1G/iWOEXkZeGLR6sTeIg7D7hgzctDFjM664WBoWjfd+wMGAxg9y6HEgokpMVEXGtfGe62xuziV7xmOGRsjL53sSPbCkv6TzjucLLsQubqPvwiQEnl5zJkzn0IiKeTeDU93t1qjcjUPmk7yp3B2MOkb3nTI+zK0/nTZlrqzE6Ttd3fTt9HnXVYz77wBm+91pz7pXK2tQEIHJYvsGh6myzQb7jjgafy5e+bvT8QVuT7l37ugf1JSLSkPbV7IW6thpbpwpMaWb8uvCnHl/9p+60u5aEB0IAAACgAfqmQ2b95/iamMxXA7QozeIac1mkfLJWn9up+m9GUTnkzTGwq3qelW1oKyz7q1RBRGqeZyUittBSqOr5Em2e9FXRmU7OAa/s3RoVybrZ66OPTPSzqmpTF0BFybXj4ftO/XH7wVOpgmGIZeAkrWj8g7Y1e9Goh3cbsZ1KRfFfB1Zt+d9ri1d4W7bi/UkklAAAAKAFrqXH9L6f7fpheHVGyWKzKqTlDBGLiCqkD6Xar8miKKn5PKuEYyFgE5Ga51nFREQsldPXmvikL0vUy39YxdyjjO/2PiJWWdVhdQ/UyrL3bj7FnrBkx4BuxiKuXtGvn84/SUSqH7TVeFme96JFHt6V5/+0fdnegve+XDm2t7CVn9LoMA9sAQAAQBtiiewDxxsk7rv6VHlHjWc6wCA/5uz1wrJyaUHGqV3RWXX3KVFP9k981fOsSbsS5QNGWfLUP8+qQZOf9OV2m7TreOLuSTY17+KpC6BCUVpOXB6fz9eTF2Qk79lzWxmVygdttbwsjXp4V5s5lIzkVnzIwmjJ6DXLWz+bJNyhBAAAAO3omQye9n7MvN0SOyIitpnbAv9bm0Om7C3W79xryChvm4yL2tYksB5tnbZ59p7cUgPboYHLJvXkE1U+zxq3K2rJ5MzHCpG1s/uEIBsBkaacUtBr6tLA8LCvp+15Qsa9h2r9pK9qagJg9fxw2qD1EfPHrpHzOtsOHuFuLbxEpHzQ9uedIdNX5ckMrF51nTPfVkBEWl4WNW2Rqjq1mUMpyYw49MfDEvp2xq/fKo8I7VdEbhyi3d7TumNdS73ahNNiYuP8/XybPRoAAAAAaCtNTvAw5A0AAAAAOkFCCQAAAAA6wRxKXV26fDk7O6eto+hgune3GThgQFtHAQAAAM0DCaVOlNnklCmT2jqQtnfiZKKXp4eWhfftiyYi5JQAAAAvBiSUOsnOzhk37oOSkpK2DqTtSaVS7a+Dp6f7yZOnkFACAAC8GJBQ6ophGKZC+7VcX1iNug5V2wIAAADAiwAJZTNAekSkzCi1vQ64YgAAAC+SFksoxenBkxellhCxWGy+iVW/oQGzpwy34KpdXlOcHjznwMQd6xxFWhSorrwmA8fQKPWntxiGYSqq0yPx/xZ/+EV69QKkov5rI0P6t3pIbaKi5nVoCBJKAACAF0lL3qEUKTM8puxZ3l/HN2/++uQrW3wt1DXYiI3PiUT9N8QmE2mRhrY8hqmRHjEMifqt3RPST1Tj/X9N7oQ7lAAAAP9OrTDkzeIYWg7w8jf7MfGJ3NeCTYz0bkrE1oM/33hMpn3eHffJjBHWfNbz1JDSg2dHvOlm+9vpX28WlBt2Hzx2wcfeL99eNHlRagml+rrWvxNZUfTr0nlJIzasGWaiR0Qk/l/I/KhBKyakfBHx+n8szqVcvisV2Q2d+NkcF2sei4hIUXBhf9i+M6n/SEXd3/SfP8+7j06bXjIV1XMHGYaIKmocIMm1pfMiX/+P1YUfL9+R2q7a9VU/7uOLh787cPZ/92RCm0E+c2Z79FK2rlBzvIOoqNXtBiChBAAAeJG0wsLmjKIk7/LJ2HyRkwmXiEozo1ZHFwxZvDs2fveitwsOrIrKrLttuiQnIadXUOj+hPjIZcMeH92UnM/rvyFqvdPLjqFxySmxde9H6nV6fdJrBUfP3i+rPDs5u4vn6530qDT3WHa/+TuOxEd+OfzpodX770iJiOS5R74Kz3aaG3Y4ITrEl5+0LuJvMaPdzusqu8coZw9WodovGYYpvZt4v9+sjXtjDqzqK5Ddjf1md3b/GRv3Ho5Y4cU7szHyuriCYRh1xzuMOv328vap/1/t8gAAAPCCaMmEUpy20NfVxdXda+LCiAzbqUs8zdlEsvtJlzles9wdjLk8Y3vPmR7cy6fzZLVPFPScEuTq0FnA5hrbu/iZlVx5LFPdQvUJtr5u7B/jbpcSUWnumWwzbydjPSKule9Md3tjLs/4FY8ZHpw/ku/JiGR5SecZz5lejl0EXKPuwycGGGWcqRtA49TOq8T/Wzp+jPfoMd6jx3gHLvufmCFetw8mDOtpxCaGYaR5p39jRn3o2teUxzHs9k6An9HfP+RJ1R/vsBKOxdW5TAnH4moW0OWKAwAAQLvSCnMoax9USO4rRG8bcpSvOEZ2IkVqqaJ2GT1eF35lpsvS5+szZQ2OpLLNho+3Cj50tWjVa49S7liMDjJiERHHwM6wsoNsQ1th2V+lCiIqyS3MTAjy3lM97ipyLC1v5CTOGhiGng/1VjAk6rs6fGVfYdXbkgzSF5jxWZVlykruFt45NXfc/uet95UoKipIzfGOsx4Rw9Qd8o6Pixnj61/9d813kU4CAAC8SFp92SB9oTlbfOtZmbMhh4jKim+L2eYCNpGiwTOJKucoqsJ66dXAAfvCzuWY5Gd18/rQgEUSIkXJ7WcKZ0M2ESmeZUo4FgI2EYmsTHoP3hbq2bW5+l7jfhtTPfRLNY88nzSoJ7Awth20fvXILvq1apCpOd5xMi+V9x3jYo/6+n0QF3u0zlsdqWMAAADQkFaYQ1kb33yUs/zEzqS/C+XywuuJOxNlziMteFqcqMc11S+5+USuLhPh24z2YCd+tz+ju4edgfJpFtk/8buSbxTJ5UU3knYlygeMsuQR8Sw93qW4HQlX8sRl5bLCOxePbtt2U9JscyjrzamsfYRr7jKETuxJTL1fIldIC7P/PBax+7ZE/fGOg+pPHmUYhmFiY46oKw8AAAAvhtZf2FzQa+rSwPCwr6fteULGvYeOXz7VTqDNeXxrv/c6rZo/Zrd+3w0q15tkdxk6rsfhbS9N71FVn8B6tHXa5tl7cksNbIcGLpvUk09ExLX2XzEvblfUksmZjxUia2f3CUE2AiJJk3vE1BryJqqoqDG6W/eIvoXnwukn9x/+am72k3KhVf8R/oGW3IqKCnXHmxxVa6uo1e0GIKEEAOgQrmX8nZGRobmMg4NDXwf7ptTemmv/tYN1Bl9srGupV5twWkxsnL+fb7NHoxvFozPLV96dsSmoO49a6asTExs3Zszo4uLiFmyjg/jhx/++/95/tCxcXlHx03/Ptb+vEAAA1BITG7ds5SqquhHAYlWuZ1fz5eqVK+r+/3n9/UdUbj5Sc8XAOn/U/+3W8Wddm/1TWm5Dlo6jyQnei7P1IlOcdjCBPL6y0mb8vDnbbcwOMS8w7JQDAPCiYhhm4WcLiCh04yYWi6V8ySLWho0bq1PMulQ+mKtO9XOxjZ941pxabkOWf4EXIqEUpwdPXpQmNX59+oY5XdqgR0iPiLCXNwDAi6mioiJ44WffHz5MRCxirduwYVHwwsqXenrr1q9vVG2M7O7pHRv3n88q4Xcb5DK0RDlVSnkzL3TC/tlqNzFRXZvKrVKIGHn+L9Hbo8+m51e8/MbYBQt8+9SoiZHcjP9mzQk9n2WLR9sJVOTDLb4hywvphUgoq3dirHOwVf7pwDAM04GmOraYRl0HJJQAAB1FRUVF9f9pHz586OLF/8vKyqr5bmMqk2ZFrzn41G1Z5PqelHlq01e/lVo/f1PYf0PU+sYMEyu3SnFbujvEljJPbf5mVVTPbTPtBCTLPvRVxJ3hwWFf2Ase/t/JH/KlfWyVZzCKx7/vXhaW7vDRxllDOqvJgRhFyf2rJ2PzRW/U2JClfis1SHISckYtCZ3Z20h688TaNZuS39gyppF96fBeiISy7XTvbpOQcGLgoAFtHUjbk8nlYom2TzZd+uNy9+42LRoPAAA0l3XrN7CI9f33h4moOpscHzjh62++UXuOOG2hr+vzl8q7dOy8pEscr5Xu9sZsInvPWT7JwX82PSzlVimr3B2MOUT2njM9zq48nTdlri3dO3WB5bFitFNXDpHN0PHTiIjERExp5slvQpPlHsvX+78iUnFrUhkzi8Xmd7J0GFprQxYVrdSg3JDFVI9IYO/iZ5Z4/LFsjHnTO9YhIaHUycABA4jo0h+X2zqQtifkC7S/Dt272ygvHQAAtHPK25Nfr137xx8Xq7NJW1u7NSEhpGHESeUcSrEkr0w4pGrPEY6RnRFHh4RS7VYpkntloreMOHXLy/NTTuTzR6327KMqm1QXc8tsyPLiQUKpq4EDBiA3AgCAFxjDMIs/X1RzpDsz8/YXS5Z8s3at2odyVGILLTiSmnuOFJepbE672tRtlUJCS474ZnHl8ed4Paav8jgXsmaVcPkKv16qZk82phUdN2R54bT6wuYAAADQcZSXl3++KPjokSPKlz1t7ZR/fH/40OLPPy8vL29EXTwL1wHyk1V7jiRGHLsnr12goU1MalG3VQrP0m1wReJ3x9MeSctKcs4fiswsrTyD3eWdeWtnmf3w1fKjNyRapnottiHLCwYJJQAAAKjFMAxV5UQB48afSUkZGzBO+VK5hJDq08RpC31dXUZV/een3IuObztpaYDBDyum+PrN3ppu421TZ2sTvrXfe51OzB8zyk/V3nU16/T7PE0s6DV1aaDx+a+n+flM++a8SfVWKbwegSuCrK9umTPWZ+o353lDzPjP62CbDpm79iPrn9YsP/y3WKtcT10rDdHclxfOi7SwOQAAADSnmNi4hZ8vZhjmy6VLWSzW6jVrlElkzZeh69YiJXhhYGFzAAAAaBEsFkv5CI5yxmSdlwCEhBIAAADUcXBwCF23tsEyrRMMtGdIKAEAAEC1vg72fR3s2zoK6ADwUA4AAAAA6AQJZTMRpwdPbovHuKrbbasAAAAA4F+vhRNKeU7kNC/3aXtz5A2XraWx6VET8qo6JdtDZiZOD/Zz854Xn1dW4wjSRAAAAGjfWjahlOae+o15403m95O50sadKeq/of72R81YviVqaBZ886F6p3ddKvwX7toEAAAAHVSLJpSSrONXeG4TJ7lxrxy/I1EeE6cHT/zo+70hs8b5uPtMmL/5TK6MqTw+ae7R/es/nujr7r847dHzO3OM9O6ZrcGTfL3cfacu2JqSK22gfD0Vknu/R62aE+Dj6eo1NmhZ1KWichKnB09elPogbaFv1WqrynuBj9Qcr38jk4iR3U3e/Ml4Hy+vcR+tOZpRUp0DKgou7F0xI2C02+jAOWsTtF6Mn4iI9DsPnTHsYfTRW6W1z1IfBgAAAEDbasGEkim5FX/NwG2oheVQV4Nrx26WVGVIpbnHsvvN33EkPvLL4U8Prd5/p/LupST3eJ7TvLDDiTFrHYXV1ZRmRq2OLhiyeHds/O5FbxccWBVVtYWS6vL1iK+HbvntJe+lO48cSzzy7fQef27f/lexsP+GqPVOLzuGxiWnxNa4ManuuArSrOg1B58OXxYZG7NjrkNWQnZlWPLcI1+FZzvNDTucEB3iy09aF/G3mGlECsiz9p7xytWdKQ+02yYUAAAAoI21XELJFGfE3zb1GtyZzTZ909v0dlzGs8qMkmvlO9Pd3pjLM37FY4YH54/kezIiIuLZBE59v1cnbq1lUmX3ky5zvGa5Oxhzecb2njM9uJdP52koX5/IYfmGhaNftXyJy9YXmA3yHWeacy6/kSPwKsjyki5xvGYoO2LvOcvHilt1/DzjOdPLsYuAa9R9+MQAo4wzlQFriSXqN3GsMCny0lOMewMAAEAH0GLrUFYUpcbfNfdxNtEjIpPXfcz3x6cWDnjHhIg4BnaGle2yDW2FZX+VKu/FsYWWQv269Sgk9xWitw05ylccIzuRIlVTeVWhlFw7Hr7v1B+3HzyVKhiGWAZOUt1TNYUkr0w4pKojHCM7I86fRESKktzCzIQg7z1UtcGpyLG0vHKOppZ165sOmfWf42tiMl8N0DlOAACAprqW8XdGRobmMg4ODlirEloqoSx/cjn+Zn7GV+NGVh1hCUsvP3nLRUCkKLn9TOFsyCYixbNMCcdCwCZSEBGp2MNJX2jOFt96VuZsyCGisuLbYra5pvL1ybL3bj7FnrBkx4BuxiKuXtGvn84/Wf2muk3taxxnsVkV0nKGiEVEFdKHlckoW2jBkdTsSLHy0Wy2yMqk9+BtoZ5ddbm2XEuP6X0/2/XD8OqMUk0YAAAALSYjI2PZylWay6xeuaJuQilOD55zYOKONn3UVfmwRAkRi8Xmm1j1Gxowe8pwC/Wjmg3G3B461Y611JB3wYXEooFr45OTU04np5xOTkmO3fhG8ckLBQoikv0Tvyv5RpFcXnQjaVeifMAoS576ivjmo5zlJ3Ym/V0olxdeT9yZKHMeaaGhfH0VitJy4vL4fL6evCAjec+e28rng/S4pvolN5/I66aUdY7zTAcY5MecvV5YVi4tyDi1KzpLOVeSZ+E6QH6yqiOJEcfuKZdG4ll6vEtxOxKu5InLymWFdy4e3bbtpqTRj9GwRPaB4w0S9119ymgMAwAAAFQSOYbGJacknzoevW56n5u7vz55X8PTCe1ksZcOq6XuUP50RuL4cS+D6n8IsES2o/uLt557MNSBBNajrdM2z96TW2pgOzRw2aSefE01CXpNXRoYHvb1tD1PyLj30PHLp9oJNLctTlvo61r5t4FjaFTIh9MGrY+YP3aNnNfZdvAId2vhJSIivrXfe51WzR+zW7/vhqh1jtWn1zkuMnNb4H9rc8iUvcX6nXsNGeVtk3FRWc520tKA7ZtWTImQCKwHunjbZF4hIiKutf+KeXG7opZMznysEFk7u08IshEQSRp7CfVMBk97P2bebokdERFbXRgAAAAtiFE3lqfl6dKc5B2b9/+SJeZ3G+jyzr3/Xp0Tvs6R0oNnR7zpZvvb6V9vFpQbdh88dsHH3j0FLCJGejclYuvBn288JtM+7477ZMYIaz6LxOnBs3cOHGH9S8rFLGmvb/atdeQVXNgftu9M6j9SUfc3/efP8+4jVHfzkcUxtBzg5W/2Y+ITua8FW30TyhuQKmN7+faiyYtSSyjV15UMHEORetbDupZ6tQmnxcTG+fv5NqVB3DEGAADoIGJi475Ytlxzma9Xf1U3JXj+Wy+9HTFvVb73l/NGdGfunAlbFZ7WbW3UOkdKD568NH/gzCXT/tPbSHrzxNo1597YuGWMObv09s75K+65Lf3UzZYyT23+5pTl8m0z7QTi9ODJS/MGfrRy5nC7TlwWyXMPLvzy5rCFc11f4T34JfLrg/RJ2HwHEUtlDIyi5P7V45s3//5G6BY/Cw1NVCeUKmOT/SsSmCYneNh6EQAAANRiGqLpZFle8mWu1/SRfTpxecZ93ILGWFVPWhP0nBLk6tBZwOYa27v4mZVceSzTemkXLRdUEact9HV1cXX3mrgwIsN26hJPc7bGJkhjbKBRiz3lDQAAAB2fTkPeyhVRDKqXdulpyL5U+ZYerwu/8q4WS5+vz5RVkNZLu6hbUKUOkaqxaQ1NVFMZG2jU6gllY1bPAQAAgA6MLbTglGaWVK+IkvVM86YdWi7tosuCKhqbaJBuE0pfZBjyBgAAALUqGqLpZJ75KGfZid1nbjyVy4tuJu+O/0fz2LGWS7uoW1BFG01ePUbd4jBARBjyBgAAAA10e8pbYDf5iw+2b1oxKVws7DbwfXfrzOt6LCK1VWq5tIuaBVW0C6nRq8co1V0ERsvm/i1a/SlvAAAA6CBiYuMWfr5Yc5nQdWu1TAnK7h2et7pk0dbpPbjNERy0ADzlDQAAAO1Padaugz/ffiKVPslIjEiWOQ03Rzb5IsKQNwAAAKjm4OAQum5tg2U0vc03e1cU++0nW+88E/YY7Ltksq3G3Uygo0JC2RbaanX3mqu2/gtWZwUAAB31dbCvu093Y7GEvUcvChvdTAFBe9XCQ97ynMhpXu7T9ubIG3liI3e+Vl2+sZVor7rmlmtCmxj83LznxeeV1YsKAAAAoBW1bEIpzT31G/PGm8zvJ3OljTuzsXu0t/Ke7u1kC3m++VC907suFWLBVQAAAGhDLZpQSrKOX+G5TZzkxr1y/E7l+lDi9OCJH32/N2TWOB93nwnzN5/JlTGVxyfNPbp//ccTfd39F6c9en6zjZHePbM1eJKvl7vv1AVbU3KlDZTXTH1tH8d9v2XBFD8PD59xc9cnZJUyleVzkjZ9Ms7Hy2vcR6v3fj9rYo0bk4/SgycvSn2QttDX1cVP1Q3LGi8Z2d3kzZ+M9/HyGvfRmqMZJdU5oKLgwt4VMwJGu40OnLM24YakMasz6HceOmPYw+ijt0prn6U+DAAAAIBm14IJJVNyK/6agdtQC8uhrgbXjt0sqUp6SnOPZfebv+NIfOSXw58eWr3/TuXdS0nu8TyneWGHE2PWOgqrqynNjFodXTBk8e7Y+N2L3i44sCoqs1RTec001JaTkNMrKHR/QnzksmGPj25KzlcQkTQzOuRwyYiVe2Njdsxzunsit7RGZcL+G6LWO73sGBqXnBKr+YalNCt6zcGnw5dFxsbsmOuQlZBdWY8898hX4dlOc8MOJ0SH+PKT1kX8LWYakQLyrL1nvHJ1Z8oD7Vb4BwAAAGh+LZdQMsUZ8bdNvQZ3ZrNN3/Q2vR2X8awyo+Ra+c50tzfm8oxf8Zjhwfkj+V79fd+rablPvJY01KZ6l3r1u9o3iiwv6RLHa4ay1/aes3ysuFXHtdneXgOWqN/EscKkyEtPMe4NAAAAbaPFnvKuKEqNv2vu42yiR0Qmr/uY749PLRzwjgkRcQzsDKv3ibcVlv2lYt/3alruE68lDbWp2aVe7a72jWw3r0w4pKrXHCM7I86fROq3t2/Mjuf6pkNm/ef4mpjMVwOaEhoAAACAjloqoSx/cjn+Zn7GV+NGVh1hCUsvP3nLRUCkKLn9rHqf+EwJx0LFvu/VtNwnXkuN3RJeu13ta+xKxWKzKqTlDBGLiCqkD6UV1fVIava6WPloti7b2z/HtfSY3vezXT8Mr84o1YQBAAAA0AJaasi74EJi0cC18cnJKaeTU04npyTHbnyj+OSFAgURyf6J35V8o0guL7qRtCtRPmCUpYZx5CZv4t4stTW4q32dreJ5pgMM8mPOXi8sK5cWZJzaFZ2lnCvJs3AdID9Z1evEiGP3lOsoqdvevpGP0bBE9oHjDRL3XX3KaAwDAAAAoAW01B3Kn85IHD/uZVB9B5Elsh3dX7z13IOhDiSwHm2dtnn2ntxSA9uhgcsm9dS4aH5TN3FXEqct9HWt/NvAMTRqXf/G1dbQrvZ1t4o3c1vgf2tzyJS9xfqdew0Z5W2TcVFZznbS0oDtm1ZMiZAIrAe6eNtkXiEitdvbS7TvoZKeyeBp78fM2y2xIyJiqwsDAAAAoPmxrqVebcJpTd47vM02iWkO2NUeAAAAXmBNTvBaeKecFwB2tQcAAADQCHt5NwS72gMAAABo1OoJZWMWxGkXsKs9AAAAgEYY8gYAAADdtMkev+1qY+G2Cqa63ba+GkgoAQAAQCN5TuQ0L/dpe3PkDZVsWlrTjMmQ9lXVKdkeMjNxerCfm/e8+LwyNUG2Y0goAQAAQBNp7qnfmDfeZH4/mSttoKio/4aoDrmQS3uJnG8+VO/0rkuFHW5DEiSUAAAAoIEk6/gVntvESW7cK8fvVC+UzMjuJm/+ZLyPl9e4j9YczShRZkDq7vM9f6l4cjFq+axAbw9PnynBW5KySkvSgycvSn2QttDX1cWv6hRFwYW9K2YEjHYbHThnbcINCaOp0QZUSO79HrVqToCPp6vX2KBlUZeKyklcr1FlhI/UHFfREfXBqAleK/qdh84Y9jD66K3S2mepD6OdBgVxfgAAIABJREFUQEIJAAAAajElt+KvGbgNtbAc6mpw7djNEmWiI82KXnPw6fBlkbExO+Y6ZCVka7klW+mdPeG/dJ20/mDCsUPrp/TKO3tPv/+GqPVOLzuGxiWnxCrvEcpzj3wVnu00N+xwQnSILz9pXcTfYqapjYqvh2757SXvpTuPHEs88u30Hn9u3/5XsbB+o0REpO64CuqCURO81ikgz9p7xitXd6Y8ULctdPuEhFK99pf+E7WPSR4AAPBvwRRnxN829Rrcmc02fdPb9HZcxjOGiGR5SZc4XjPc7Y25PGN7z1k+Vlou0szS4+qVlzy6/7CojNe1r3vQTBUb1snyks4znjO9HLsIuEbdh08MMMo4kydraqMih+UbFo5+1fIlLltfYDbId5xpzrn8hobuG6YuGHXBa48l6jdxrDAp8tLTjjTu3cLLBslzImd/HEc+O76batOo9cAbu6GOyvLKG9olRCwWm9/J0v4d/9kfjujGY6mtpZmCaVTNkz+/aRH03cYxFpwWbgsAAKCxKopS4++a+zib6BGRyes+5vvjUwsHvGOikOSVCYcYVmYRHCM7I86fWlXI7zFtkX/04QOrD+UUiRzcghZMfcu0bi6iKMktzEwI8t5DDKO8HypyLC0noqY1WlFy7Xj4vlN/3H7wVKpgGGIZOEl1T9XUXQF1wTdm2UR90yGz/nN8TUzmqwE6x9laWjahrJzGS7+fzB03164xK4I3drlKdeVFjqFR6xxFjEL8IC1xS+ja4323fGDJaUTFTQmmUSqn3w5f9pYxbhcDAEC7Uv7kcvzN/Iyvxo2sOsISll5+8paLodCCI7n9TOFsyCYixbPM4rI6p7LYrAppOUPEIqIK6cOqHE7PoI/bnJVuxMgf/BG5JHzvu68t7E1EREz1pEG2yMqk9+BtoZ5da2cpsgYbVUWWvXfzKfaEJTsGdDMWcfWKfv10/snqNxk18xtrHFfTEbaaYNQF3zhcS4/pfT/b9cPw6oxS3fVsL1o0h1E1jVecHjzxo+/3hswa5+PuM2H+5jO5Mqby+KS5R/ev/3iir7v/4rRHNSa9Su+e2Ro8ydfL3Xfqgq0pudIGyqvCYovMXnMdYyZJK5ST6vm5RNSMU4y1n4DbYaffAgDAC6/gQmLRwLXxyckpp5NTTienJMdufKP45IUCBc/CdYD85K7kG0VyedGNxIhj9+qsKMQzHWCQH3P2emFZubQg49Su6CzlFEPJrbBtcX/kFMvLK0hPj0UsIiI9rql+yc0n8sofQp6lx7sUtyPhSp64rFxWeOfi0W3bbkqIGmxUpQpFaTlxeXw+X09ekJG8Z89tZUZSp9FqdYNR0xF1wagLvpG/4yyRfeB4g8R9V58yGsNoN1owoVQzjZeoNPdYdr/5O47ER345/Omh1fvvVM5kkOQez3OaF3Y4MWato7C6mtLMqNXRBUMW746N373o7YIDq6IySzWVVx2LQpx/NTnugcGrJjw183ObPNuXVE0xlr74028BAOCF99MZiaNPL4PquWIske3o/uIz5x6U8W0nLQ0w+GHFFF+/2VvTbbxt6kyFZJu5LfA3PRcyxcdn/MI9N7t72yh/qQXdvPsVHg+Z7jM6YN6evHfmfGgrIOJb+73X6cT8MaMqn/LmWvuvmGefFbVkso/32Fkbzkidx9gIiKihRpXEaQt9XV1GubqMcnXx+zytoueH0wZlR8wf6z0mcOGua2bu1spI6jZapc5xdR1RG4y64BtLz2TwtPeLknIkGq9nu9FyQ96V03hnd2azmTe9TePiMp45DTJiERHXynemu70xm+gVjxkeKSuT7038yJaIeDaBU9/v1Um/VjWy+0mXOV6r3B2MOUT2njM9zq48nTdlrtrydYjTFvq6Kv9kmwz9dJO3BZuI7bB8g0NVCbNBvuOOBp/Ll75upJeXdInjtVIZm73nLJ/kYO1mhDyfYmzSvWtf96C+RETa301UTr/9IvLSsMWDsbk6AAC0GwHbd9U5IugzP3I7ERFxbNw/+9b9s6o3po4lIipRMCw9FhERS9DTa3GYV426xhAREd96WFDIsKBalbIEdoEh+wNrHGEbO49d5Dy2bjwsvqpGaxL13xCbXPfg2zPWvz3j+csJfsqu1G60enpbnePqOqI+GJXBazN9rk4ZjqV/WJx/A2FUn9LGW1u3WP6ibhovEXEM7KomsbINbYVlf5Uqb82xhZbCetmhQnJfIXrbsHLaI8fITqRI1VS+DuUcSqFCkp8at2XXlayS98yM9dTNz61o1inGL/r0WwAAgNqY0gf/e8axFOLmyL9PS33maqfxCogUJTUnsUo4FgI2kYKIiFX/AWx9oTlbfOtZmbMhh4jKim+L2eaayqvEYgvNXx+3ID/4i/A/+y0eyFMzP1fdBNuaFWk/xbhx97c73vRbAACAWsT/W7HsrOmYECteW0cCra6l5lCqncZLRLJ/4qsmsSbtSpQPGGWp4ZvHNx/lLD+xM+nvQrm88HrizkSZ80iLJn1T2V3fCbC69f3FJ+Xq5uc27xTjF336LQAAQC2i/usPRX/t1w355L9QS92h/OmMxPHjetN4t557MNSBBNajrdM2z96TW2pgOzRw2aSeGtcTEvSaujQwPOzraXuekHHvoeOXT1WxBqpWWIb9/O3Dw889GO794bRB6yPmj10j53W2HTzC3Vp4iYgqJ9hu37RiSoREYD3Qxdsm80qtGthmbgv8b20OmbK3WL9zryGjvG0yLhIppxj/vDNk+qo8mYHVq65z5tsKGjOHspKeyeBp78fM2y2x09QWAAAAQDvDupZ6tQmnxcTG+fv5NqVBLNwNAAAA0C41OcHDWtoAAAAAoBMklAAAAACgk1Z/sr9FtzEEAAAAgFaHO5QAAAAAoBMklAAAAACgEySUAAAAAKATJJQAAAAAoBMklAAAAACgEySULaCRmy6+IKp7/e/sPgAAwL9YCyeU8pzIaV7u0/bmyBsuW0tjkxKV5bWvpE7J1s2NFE8uH/zmk4l+3m5eH0xZGPr9/92XMW2dlonTg/3cvOfF55XVOII0EQAAAFRp2YRSmnvqN+aNN5nfT+ZKG3emqP+GqMZsz9jY8q1Zm2aKB8khYZctAtbsiTkZu3vNZEfx+e+zS1s3BpX45kP1Tu+6VFjRdiEAAABAh9CiCaUk6/gVntvESW7cK8fvSJTHxOnBEz/6fm/IrHE+7j4T5m8+kytjKo9Pmnt0//qPJ/q6+y9Oe/T8fhgjvXtma/AkXy9336kLtqbkShsor1GF5N7vUavm/D97dx4XVfX+Afy5M8OsoAJqLAq4oIkKRmqapVmJArIJKO6auGaYBubydddyIU1RwhXBXRZRURT7frOsfrmkokluoGgiJAICM8zG3N8fLAIyw+YA6uf96g/mcu5Zrvn4zD3n3Ovn5ebsPsJ/UcTF3CKSXg8aPzcp81qgt7OTT7kbk0+0HH/xRiYRq3iYsOHLUV7u7iM/X3k4uaAsC1Nn/R6+ZIqfp4vn6Bmr427J2Mo9Umb9kd3az+s96+Z8Lr9Zm+5Ok+bO7iyuWLk87eT6L0d6ubuP/HxF+MFpY0s7M3bGvm1LJ/l6uI+es+XXh0mHlk8e7uE+OnD75TyNtsHWHLdl/ykf/Rt5+E5hxT5rvwgAAADwZtJjQskW3Im9YejS38Kyv7PhjSO3C0rzksIHR+53mxV6KHbXfwY+279iz72Su5eyB0fTHQJCDsRHrbYXl1VTmBKxIjKr37wd0bE75n6QtXdZREqhrvI6SW8Gf/9bc4+FWw8diT+0cXK7P7dsuZon7r4uYq3DW/bBMQmJ0eVuCmo7XgV5auTKfc8GLtoVHRU60y417n5JF5UPDi0Pu+8wM+RAXOQqb+HJNdv+llZKKfmmPZtnHjh8NvmxVP1CtllceUrkqgMFg5aGR0eFBjg8PPagsOzaPD7LDl4RfjDMv8W54AXb8p2W7dofOtHol20n0lVaBlubyXSBlceUt69sTcxUV18WAAAA3lz6SyjZvOTYu6bufVvyeKZ9PEzvxiTnl+RL/DbeU127GPMFxm8PnTLU4ELCIwUREQmsR0/81LYFnylfjeLxyUsG7tNc7Yz5AuMublOH8i+dStdRXjeJ3eJ1gZ49LJvzeVyRWW/vkaZpZzNqORtfBUX6yYsG7lOKB9XFbZpXG37p8V9Yt6nu9q1E/GY2A8f6NUs+XdL5Mjwzt8VfflDw48bAcV4+4wO+2Xc+S12p8oRLfPfJgzu34AuMO7v4D2sjKP2V2GbM8D4WhiLzd50tDFuO8H7PwlBi2dullfyvXOXLGCwj6TZ2hPjkrovPMO8NAADaNcps1as1RdZYvW2obSF6Syg1uUmxD829HE04RFyTd73MH8YmlSzHMzDsaFTyDnGeUQexKr2wOIPiiS3F3Mr1qGWP1RJbI4PiTwbNOkrUj3WVr65bBTeOBAf5D/dyG+zsPHjE8r+yn8jrnyypZekqcdmgDJp1bFbcX3XBg5yUnf4eQ1xcBju7OI8J/js7s/CFaWeeiaPPl6u27os+Er5shPnlTStPZqgrV97BsOyKtTcqewE7wzfmM0TEcIVcLr9F2c+sWqNjsLVZnck17Tft438jolIKq757CgAAb4Cab7GtW9byEnMd/aVNTeFhJk14yyyv+iJ1UpR9KfZ2RvLykYNLjzDiwkvZ7zuJiNQFd/PVjkY8IlLnp8gMLEQ8IjUREfPizUau2JwnvZOvcjQyICJV3l0pz1xXed0U98M3nOCNmR/as62xhM/J/XX2rONlv2S15EzljjM8RiMvYokYItLI/y1JRnliCwNZ+UHlFf9J8yRtTDr13Rzs1rom15nhNbN533tEzC/Hs5TuZmWHeWILg8KUgrLKU/NrOAOtc7A1xrccOrnrV9t/HOj3vJ9VXgQAAHhNlWyxpf87/mDkzI5CXUUl3ddFrGmofjWssqE1bvZWsmV24KL3jZvUox/11Zms3+Nze62OTUhIPJWQeCohMSH6u/fyjv+epSYixT+x2xNu5SqVubdObo9X9hxiKdBekdB8iKPy2NaTf+colTk347fGKxwHW+gor5tGXVhEfIFQKOQos5ITdu68W7xXiMM35RbczlZWTikrHReY9jTMiDpzM0dVJM9KPrE9MrV4OaPAwrmn8njpoOK3HXlU/B1OYDl0AMWExl1Ol6qKFDn3zh/evPm2rGITslvr14UnXn+UpyxSFTy6dDwq0+gdE365AgLzIY6KYztO33qmVObeTtgR+0+lSfPaDraW32YYSZfRowzjd195xuq8CAAA8Hqqaouttt2o2m7jPf+ozj4fsXjaaI+hbl4Tgr4/mVpY8MIWWNK6pVXrFlidtO/u/SLm4PdzJvgMHeo1cubauNSS2Tite2EbbMOuDk11y6y+EsqfTsvsvWwNy+4gMpIOnt2lp89mqohEVp5W1zZMH+45YcUZI79F49rr/LIjsp24cLTxL99M8vGa9O0vJqMWT+woqnk/pNcCvZ2dhjg7DXF28vn6mqb9Z5N63982a4THsNGB22+YuVoV7+YRWvl80uLYrGFDfCpe/UrHeWYuc3xNz66a4OU1KnDnbRsP65LNQMIO4xb6Gf64ZIK3z/RN1609rEu6yLfyXRLQJTVi/ngvjxHT1p2WOw6zrtR7UTu/D8VJkYsn+nh4jpu36/bbU+YPNa9wQ1PUcfyC4aLTS8Z5e0///oqlq5WEz6nJrVmRlsHWGsek76RPc0+mFUcRrRcBAABeQ1q22GrbjVqdwns7w861Hrd2X9yR/Wsn2KafecR9cQusti2tdWtUx+7etLg0W//gPXGxuxZ99PTw+oQMNenaC0v63LD7im+Z1deUt9+W7ZWOiDrP2rWFSHqdOIZ2wxf6Taz460o3yct9ZIQ2Ll9+5/JlTctXOBidUPngB1PWfjDl+ccxPsW96zh61Z7RZUfLaqt0nBG1d58X4l5unMNKO2nt+tVG169Kj08cUfIDz9hxxFzHEaQVw7foMyKozwslyl8BkY1b4Ca3QCIi1aMDARetJDwifrkhS6r8mdey6sHWYD6i0vU0sPQNifEt7bGWi1B2yus73wEA8MYp2WI7vSWPx/bxMI2JSc536N2MKd6NutS1izGPqIvbNK+EoD9rVB/D4XOKCp48/jfXxKZ1V1f/rkQvTCIXb2ld4m7fikdkM3Cs3/H5p9MVdrZMnRot3t27zNXO2ICoi9vUoWeWnkqfMLMDEYnaT/B3tjPlEIm6OPmYxR99qhhmXpSecInvvmxw5xY8os4u/sPigy7W9qqVjKLK3mobXc1rLt4yu2DXxY/m9dVXHldrTaYjoENh6vbYhwOd32tDqQnbEhQOi8351Z8EAABQX+W32JLJu17me2KTcnp+aKKWpavE/SrsRq1ZQilsN2mub+SBvSv2p+VK7Fz850x837RyLqIueJCTEufvsZPYkm0MEvvCIiKqU6Nq2WO15IMKu3uTSnb3cgSthCVTtQxXyGVVGirZC9uvwl7YOiWU2i6RttHVZvkp17TftI+ProxK6eFXfeGGgYTyVSA0GyCJ3vjlpnv54nZ9veeP76BzkQAAAMDLoXWLrZGW3ajPadvByTHs7DJjqQuxyswLu+aHhQ94J7ATEZXfAqttS6ui2karonN3bxVqthe2oTbsatPktsw2+A6hRn+j4KuIEXfynBsSGRN/ZE/IXE9bcW03twMAANSF1i222najltG2g1N2J2RzzIW0PGWRhjgchhiiF7fAatnSWm2jVart7t5q98LqacPuK75lFncoAQAAoGo/nZbZf/HCFttNZzOdR3QYt9Bvy/olE7bJRFa9nDysUy5XOJNn5jLH986GVRPC87gtbfsN8bBOPk9EJGrr0e3nrasmL0tXGLbp4TxjVgcREWvl80mLZbOG7eB2XRexxl7Ct/JdEhCzPWL++JSnaomVo+sYf2sRlWyB1dFoMem1QG/nkp8N7YMj1nSfuHB0WMg3k3Zmk3Gn/tXu7hV1HL9g+Jb1S8aFScVte33qapVyk8MQld2SFFbqrZaRau2tltHJqu6NdhyTvpM+jQrYIeuo64I3FOZG0pU6nBYVHePr4/3SewMAAACvsIIrgTMPj9/ybffXZSpS9ehAwIqCuZsmt3szdi/UOcFrUg/FBAAAgFcXW5j5V76BpfhVn/4sTN2+7+e72XJ5dnL8tgSFw0Dsha3Wq/5nDgAAAE2D9K8li86YDlvVps7vH2kisBe29pBQAgAAwMsg6b52f2Rjd+JlKN4L69nY3XilYMq7MTSZV7k3KG3v4wIAAIBXnJ4TSmXarknurpPC02qysb+82uYcVZbXX+LSsLmROvvSvm+/HOvj4eI+fEJg8ME/Hitq844mvZBeD/Jx8QiITVeVO4I0EQAA4I2k34RS/uDEb+x7fdj/O/5AXrsza/u4ygZ+vGVDNqfOTFgVcsnCb+XOqOPRO1aOt5f+cvB+YRN4oqfQvD/n1PaLOQ375FQAAABocvS6hlKWevSywGXxOFq77Og92VddxEQkvR40Lezdjy3OJl56KJd07D/2qxlOVgKGpNeDpm/tNcjqXOL5VLntt6Gj9wTuHRu6xl5CrPxh4rZN+36+9ZRMOw8Y+eWUQVZCXeV1017btj4uHX479evtrCIjm74j5nzh0V7EELHytITQDXvOpUqFbXs5ffjof1dmhK2xp+tBM/aODR6zZ/rcpAJK8nYuftJVyfGybkiff2QVD0+Ffrfnl9QCYdveTv0LyrIwddbve0J2n076Ry6x6eM7K8Cjc6Xnliuz/shu7ef1nnUzhojfprvTpO5OlSvX1slpP/T4sPX/zlx5wu8wePrsDx6Fb475M9PA1u2rxZMcm3FII3t0PmrHnoSrD58ViS0dXKZ+NaZXC25N/3i5LftPcdi96fCdd6Z0FpXrs1TLRahpvQAAAPCK0eMdSrbgTuwNQ5f+Fpb9nQ1vHLldUPpI0MIHR+53mxV6KHbXfwY+279iz72Su5eyB0fTHQJCDsRHrbYXl1VTmBKxIjKr37wd0bE75n6QtXdZREqhrvK66agtLS7N1j94T1zsrkUfPT28PiFDTUTylMhVBwoGLQ2PjgoNcHh47EH5586Lu6+LWOvwln1wTEJitO5cVp4auXLfs4GLdkVHhc60S427X1KP8sGh5WH3HWaGHIiLXOUtPLlm299StuKpfNOezTMPHD6b/FiqZl+sWWcnCx+fZQevCD8Y5t/iXPCCbflOy3btD51o9Mu2E+kqIunN4O9/a+6xcOuhI/GHNk5u9+eWLVfzajOZLrDymPL2la2JmdreXwUAAABvAv0llGxecuxdU/e+LXk80z4epndjkvNL0iF+G++prl2M+QLjt4dOGWpwIeFR8UuNBNajJ35q24Jf4Qad4vHJSwbu01ztjPkC4y5uU4fyL51K11FeNx21idpP8He2ayni8Y27OPmYFVx+qiBSpCdc4rtPHty5BV9g3NnFf1gdH4WgSD950cB9SvGou7hN82rDLz3+C+s21d2+lYjfzGbgWL9myafTK73iiWfmtvjLDwp+3Bg4zstnfMA3+85nqStVrrWTYpsxw/tYGIrM33W2MGw5wvs9C0OJZW+XVvK/cpVEErvF6wI9e1g25/O4IrPe3iNN085m1GptAiPpNnaE+OSui88w7w0AAPDm0tuUtyY3KfahuZejCYeITN71Mt8Tm5TT80MTIjIw7GhU0i7PqINYdbWwOEHiiS3FL8y3qmWP1ZIPjAyKPxk06yhRJ+kqr5uO2jiCVsKS9JrhCrmsSkNEalm6StzPsKy37Y14F2vXYmm76Spxv9JRGzTr2MzgTyIidcGDnJQ4f4+dxJa8Zl5iX1hU+WyeiaPPl44+xKrz0s7HhGxaafRdsLtZpcqr7CTDN+YzJSPi8luU/cyqNUREmoIbR8N2n7hwN/OZXM2yxBg6yDUlqzNrODKuab9pHx9dGZXSw6/6wgAAAPBa0ldCWZR9KfZ2RvLykYNLjzDiwkvZ7zuJiNQFd/PVjkY8IlLnp8gMLEQ8IjUREfPizUau2JwnvZOvcjQyICJV3l0pz1xXed101lYFntjCoDCloKy3qflVlWSfz0QzPEYjL2KJGCLSyP+Va8rqkZUfdV7x5miepI1Jp76bg91a1+QPguE1s3nfe0TML8ezlOUSypp1sgqK++EbTvDGzA/t2dZYwufk/jp71vGanVke33Lo5K5fbf9xYFlGqeUiAAAAwGtKX1PeWb/H5/ZaHZuQkHgqIfFUQmJC9Hfv5R3/PUtNRIp/Yrcn3MpVKnNvndwer+w5xFLHPLLQfIij8tjWk3/nKJU5N+O3xiscB1vU+RH8ta1NYD7EUXFsx+lbz5TK3NsJO2L/qTQfzeGbcgtuZytLUkqBaU/DjKgzN3NURfKs5BPbI1OLlzMKLJx7Ko+Xjjp+25FHxc9RElgOHUAxoXGX06WqIkXOvfOHN2++Xen18LJb69eFJ15/lKcsUhU8unQ8KtPoHZPy74CqtpPaaNSFRcQXCIVCjjIrOWHnzrvFTdfyAUCMpMvoUYbxu688Y3VeBAAAAHhN6esO5U+nZfZf2BqW3UFkJB08u0s3nc3sb0ciK0+raxum73xQaNih/+hF49rrfKORyHbiwtFhId9M2plNxp36j1o8saOo5v2QXgv0di752dA+OGJN99rVJuo4fsHwLeuXjAuTitv2+tTVKuUmhyEquyUptPL5pMWyWcN2cLuui1hjLzFzmeN7Z8OqCeF53Ja2/YZ4WCefLy7XYdxCvy3rl0zYJhNZ9XLysE65TEREfCvfJQEx2yPmj095qpZYObqO8beu1CFRO78Pr+6LXLz1VqacZ2zV/aMp84ea84gUNe6k1sG1/2xS77XbZo1YqRS07NB3kKuVuE4T+sQx6Tvp06iAHbKOREQ8bRcBAAAAXk/MjaQrdTgtKjrG18e7Lg1WeqbMK0X16EDAioK5mya3a8IviX8lOgkAAABNUJ0TPLx6sTqFqdv3/Xw3Wy7PTo7flqBwGGjeBBO1V6KTAAAA8JrS64PNXwtCswGS6I1fbrqXL27X13v++A46J+gbySvRSQAAAHhNNfiUNwAAAAA0SZjyBgAAgEZSy8eDNN1GG2Ug1SrrVdPsHhEhoQQAAIBqKNN2TXJ3nRSepqyuZN0ynpeYJ0mvB/k4Ow1xdnJ2cfEaNXnBD4kPFdU+9US/XXqxZh8Xj4DYdJX+22pASCgBAABAF/mDE7+x7/Vh/+/4g+rezyvpvi6isR/kIrEPjklITDhxbO/66Q5pu1cffZ661aISfQ5EaN6fc2r7xZzX6b0fSCgBAABAB1nq0csCl7HjXPiXj94re/kGq3iYsOHLUV7u7iM/X3k4uaA4OdI2Ofv8ozr7fMTiaaM9hrp5TQj6/mRqYcH1oPFzkzKvBXo7O/mUnqLO+j18yRQ/TxfP0TNWx92SsboarRrDk5i94zzMTHYtR0lEGtmj/4tYNsPPy83ZfYT/ooiLuUUveSA1vxHKbdl/ykf/Rh6+U+kcrW29ApBQAgAAgFZswZ3YG4Yu/S0s+zsb3jhyu6A4B5KnRq7c92zgol3RUaEz7VLj7tfwpWiF93aGnWs9bu2+uCP7106wTT/ziNt9XcRah7fsg2MSEqOLbwoqHxxaHnbfYWbIgbjIVd7Ck2u2/S1la9soq5ZmXEmIyTTsYSIgkt4M/v635h4Ltx46En9o4+R2f27ZcjWv1nXqHIi8FimgwMpjyttXtiZm1vBlyU0fEkrtXqlvBg3kVVgXDAAALw+blxx719S9b0sez7SPh+ndmOR8logU6ScvGrhPce1izBcYd3Gb5tWmhs8/Zjh8TlHBk8f/5qoErbu6+k+t4oV1ivSTv7BuU93tW4n4zWwGjvVrlnw6XVHjRqXXAr2dnYa4uHhP/M/RFhMWeljwiCR2i9cFevawbM7ncUVmvb1HmqadzZDreSC6Tpd0GzuvGLE+AAAgAElEQVRCfHLXxWevyby3nhPKmi/jraS2+UqV5ZvSylx19qV933451sfDxX34hMDgg388VrCNnZa9puuCAQDgpdHkJsU+NPdyNOEQcU3e9TJ/GJuUoyFSy9JV4o5GJU+zNmjWsZlBzSoUtps017fZlb0rPh/l/dnC7b8/reIWnbrgQU7KTn+PIS4ug51dnMcE/52dWVhU40ZL1lAejwtfObJt2uXU4klsTcGNI8FB/sO93AY7Ow8esfyv7Cfylz6Q2qy85Jr2m/bxvxFRKbWYK2/C9Ptg85JlvPR/xx+MnNmxNg/blnRfF7HmJZSX2AdHrLGXsGpp5rX474NXH+36/XDLGv6/UufOvEidmbAq5JL99JUzHNuI5I9v/XE64eB9+9md619zPZWsCx646H1j3KwGAIBKirIvxd7OSF4+cnDpEUZceCn7fScjsYWB7G6+2tGIR0Tq/JS8yhtfGB6jkRexRAwRaeT/ykvuxHEMO7vMWOpCrDLzwq75YeED3gnsREREbFlexZO0MenUd3OwW+uKWYqi2kYrtC82f3fknIygBWF/dpvXS3A/fMMJ3pj5oT3bGkv4nNxfZ886TkTEe6kDqdVNSuJbDp3c9avtPw70q66tV4Bes4iqlvFKrweN/fxg+KppI71cvcbM2nD6QfFNQ+n1oHEzD+9Z+8VYb1ffedeePL9Vxsofnt4UNM7b3dV74pxNiQ/k1ZSvSmOvzFVm/ZHd2s/rPevmfC6/WZvuTpPmzu4srlAhK087uf7LkV7u7iM/XxF+cNrY0hbHzti3bekkXw/30XO2/Pow6dDyycM93EcHbr+cV/yVS9tYauR1XBcMAAAvS9bv8bm9VscmJCSeSkg8lZCYEP3de3nHf89SCyyceyqPb0+4latU5t6K33bkUaWpSIFpT8OMqDM3c1RF8qzkE9sjU4vXJsruhGyOuZCWpyzSEIfDEENExOGbcgtuZytL/ikSWA4dQDGhcZfTpaoiRc6984c3b74tI6q20RfwWn/o1+bOwfPZRRp1YRHxBUKhkKPMSk7YufNucV7ycgdSy38uGUmX0aMM43dfecbqbOtVoMeEUssyXqLCB0fud5sVeih2138GPtu/Ys+9kocQyB4cTXcICDkQH7XaXlxWTWFKxIrIrH7zdkTH7pj7QdbeZREphbrKV92XRliZWx7ftGfzzAOHzyY/lqqrvrMtT4lcdaBg0NLw6KjQAIeHxx6UNV34+Cw7eEX4wTD/FueCF2zLd1q2a3/oRKNftp1IV2kfyxu8LhgAAF6Wn07L7L1sDZnSz4ykg2d36emzmSphh3EL/Qx/XDLB22f6puvWHtaVbs7xzFzm+JqeXTXBy2tU4M7bNh7Wxf9Si9p6dMs5umqyl6dfwM70D2d81kFEJLTy+aTFsVnDhpTs8uZb+S4J6JIaMX+8l8eIaetOyx2HWYuIqLpGX8QYdfPtkn30bKZB+88m9b6/bdYIj2GjA7ffMHO1KskcXupAao1j0nfSp7kn02Q623oV6G/Ku2QZ7/SWPB7bx8M0JiY536F3M4aI+G28p7p2MeYRvT10ytDEpQmPxn7egYgE1qMnfmrbgluhGsXjk5cM3Je52hkbEHVxmzr0zNJT6RNmai1fifRaoLdz8Y88k/6z13tY8Ih4dovX2ZWWMOvtPfJw0NkM+bvNOOknLxq4Ly3uWxe3aV4JQX/WaKzPV+aa2LTu6urftXIBnpnb4i+LImM2Bm5Olxu2e9dp9JQR77Usd/EV6QmX+O7LBnduwSPq7OI/LD7oYsmvxDZjhvexMGTYd50tDHM8vd+zMGTY3i6t9sblKqmNRMtYatTv4s5Luo0dIV6w6+JH8/ri1e4AAFCO35btlY6IOs/atYWIiAysXb/a6PpV6S8mjiAiKlCzDIchImJE7d3nhbiXq2sYEREJrT7yX/WRf4VKGVHH0av2jC53hGfsOGKu44jK/WGEVTVaXuW1ZIykW1D4ZiIi+mDK2g+mPP/NGB+ddZbVU5uB1GQlW6UyBpa+ITG+pb3V0lbZKY29Uk47vWUQ5Zfxksm7XuZ7YpNyen5oQkQGhmWrX3lGHcSqq4XFN8d4YkvxC9mhWvZYLfnAqGTZo0GzjhJ1kq7ylRSvoRSrZRlJMd9vv5xa8ImZMYc0BTeOhu0+ceFu5jO5mmWJMXSQa4g0snSVuF+Flbk1SyiF7SbN9Y08sHfF/rRciZ2L/5yJ75tWurI8E0efLx19iFXnpZ2PCdm00ui7YHezcsNMV4n7GZZdlvZGvNKEkuEb8xkiYrhCLpffouxnVl26yriqsdRmdSbXtN+0j4+ujErp4Vd9YQAAAC3Ywsy/8g0sxbg98ebR15+51mW8IiJ1QfnVrzIDCxGPSE1ExDAvVMQVm/Okd/JVjkYGRKTKuyvlmesqX6UmtDKX4TWzed97RMwvx7OU5RJKntjCoDCloKzp1PwazkArtIyldl6rdcEAANA4pH8tWXTGdNiqNoLG7gk0OH2todS6jJeIFP/Elq5+Pbk9XtlziKWO//OE5kMclce2nvw7R6nMuRm/NV7hONiiTv+nNvTK3PJkt9avC0+8/ihPWaQqeHTpeFSm0Tsm5Z90JTAf4qg4tuP0rWdKZe7thB2x/yhqNiptY3mD1wUDAEDjkHRfuz/yG5+2yCffQPq6Q/nTaZn9Fy8s4910NrO/HYmsPK2ubZi+80GhYYf+oxeNa6/zeUIi24kLR4eFfDNpZzYZd+o/avHE2j069DnGqJtvl7Cws5kDPT6b1HvttlkjVioFLTv0HeRqJS6eXxZ2GLfQb8v6JRO2yURWvZw8rFMuV6iBZ+Yyx/fOhlUTwvO4LW37DfGwTj5PVLwy9+etqyYvS1cYtunhPGNW5ZW5onZ+H17dF7l4661MOc/YqvtHU+YPNecRPc8aRR3HLxi+Zf2ScWFScdten7papdzkMETVPptK1F7LWGqLY9J30qdRATtkHXWNFAAAAOAFzI2kK3U4LSo6xtfHuy4NSq8Hzdg7NrSx3xzftKkeHQhYUTB30+R2NXxePwAAAEC91TnBw9Osm4zC1O37fr6bLZdnJ8dvS1A4DDRHNgkAAACvAmzEajKEZgMk0Ru/3HQvX9yur/f88R1q82YhAAAAgEbT4Allo79ssMlixJ0854Z4NnY3AAAAAGoJU94AAAAAUC9IKAEAAACgXpBQAgAAAEC9IKEEAAAAgHpBQgkAAAAA9YKEEgAAAADqBQklAAAAANQLEkoAAAAAqJc6JpQ2NtZR0TEvtysAAAAA0FiiomNsbKzrdi5zI+lK3c68eOnS/ftpdTsXAAAAAJoUGxvrXj171u3cuieUAAAAAACENZQAAAAAUE9IKAEAAACgXpBQAgAAAEC9IKEEAAAAgHpBQgkAAAAA9YKEEgAAAADqBQklAAAAANQLEkoAAAAAqBcklAAAAABQL0goAQAAAKBekFACAAAAQL00ekKpfvK/DTNGuA3yCkqSNnZfAAAal/TanDEIhgDw6tFPQlnzmKh4cHDf3+8uPXD6yDoH0n6W9NqcYcPmJGYVPT/E5l9dO8IHkRcAmh7ptTleTp8McvrEafBgd7/P5m05/VDBUj3yRR0nIjwCQBPQ2Hco1QVpyubvtjWsvh8cVWb0kXvyshMfnwm/+kyj184BANSVxGF9XOJ/E0+dOLBhpsP98FVH0lVEEvv1e9c5SF52WwiPANDYGjChVGf9tmuRv6/bYDe/ad/E3pKxJL02Z0zglYykr7ycPvGcPnV0YFJm0hxPp0+qnP4W2gzrfG33+WwNERGbf23fT63dbcTaKyci0sj++X33kmnD3V2chvpOXLj7Ym7xd3h19h+7/zPFb6izi/vYORtOpMjYF24AlH2UXpszesahiNWfj/IcMiwoSaqtLQCAFzE8ifk7Lj5msmvZygpxhpWnxQd/Mdzd1XXEtGU7D0wZVRp/WOmdY+tnjR3m7Ow+fMbq2NRCVnptzhiERwBo0hosoVQ8OLgk9F6PL0IPH9+72kd44puwZKnYfv3eYIe3HNbHJf437oet+0p/PlLlN3ihtfvAZ4eOP1AQqR+finzQ17ujWEflLJH077Ubfmvm+Z/tUccSDm+a2u5iSMiVPJaoMHX7Dz+3Hv/dwePHDgZ/Zpue+KhQZ99laUfSe8wKPZwQu85BoqUtAIAqsGrp4ysnozMM3zERlD8uv7t7xf4CpxWRsbFhs3s8PJpWFoVkabH3O01dv+943O4lA58eDj6ZISgXKhEeAaBJaqiEUpEe/zPrPt3DoZWI39zm4/Gjmt849UhRuzoM3hroa3xu95Wc3KTIBKHXYAt+NZVLui79LmjYO22aC3hcsfl7vqNN0356LCdiOHymqOBJemaOSvhWt6GTp9uKdTYstB4zaVCnFnzmJQ0EAF5/0qQ5nk6fDBo82HP8/LgWny32tOSV+63i0cmLfM8pzp1bCATGnV2neLctSzdF7T+b4mLXSsQTmNgN9jXL/zOrBhEG4REAGhev+iJaXLx06f79tEoHfX28qy6tlj7ITjkycegOYtniL6wSh8KiqstqxW3x7si3d24M38nc7jRzpgk3tbrKNfk34n7YGX/+bsYzuZpliTHsIdcQSdpPnjciYv+eZXvv50rsXKcETurXUteF4Erairk1GUhUdEwthwQATYuNjXWvnj1rUrKaGChxWL93nYNYLcu4GrV+658pBZ+aGT//Bq8uTFeJPzAqCTw8ow5GvAslv+IIWwlLCjJcIYdV1WgxJMIjANRbzQPgi+qYUBZHUq3pYxXtiNuYdHo/dIP7WxVbrLgYiCEiXfMjjKTT8IFFMw6RT9jbhoyqusoV98K/O24wdmFYLysTCZ+Tey5g5jEiIuIYvu36+XLXz1lFxvmdX/8Q/pFjUGfiGDBF8iK2uBeawn/l5aM4U11bRKQjnwaAV0Rx3lNtSK1pDGR4YvOeowMffzUv9FL3Bb1LUy/iiSwMZCn56neNeESkzk/JV1dXEyE8AoB+1TAAVqmOU961yyaJSNDGfSATtfnI5fQCVZEiJ/X8oU0ht2SV+iIw5RbceqrQFTP5VhN2xSfsmmDNL3dQW+UatUzN8AUikZCjzEo+sX3H3eIWZbc3hkSdv/9MWcQyHE7JJRCY9DLKOJT4d46qSP4kOX7b7tQqVw7VZCAA8Mry9fF+8b7ji2oVA3mt+49sc+fAH0+fz8oILJzfVcRtT7j1TKnMvXViW8xD3VPDCI8AoH81DIBVqvuUdzWkSXM8nUp+NnRYv3edw/Bls6O3hs8dd/epSmL17tBxU2xEROVjjdDKd1DzpQGe2zjdvqvdkzX4VlVWznTwn9x79dYvfJYrBC07vj94qJX4AhGRyMqr288/rJi0JF1h2OYdl89ndxQRkblr4PDbwSvG7szjtuz0oYuXzY0/atEWAIA2TLPuw7uE/vBT5nudSw+JbCf+xy/ku0WjfygQW/V2crW+e5PLaL8HifAIAE0bcyPpSh1Oi4qOwfwFALyWahLfXm4MVP2zf+ay/Hmbp7YTVF8YAEB/6hzcGvvB5gAAbyZZyra9Z+9ky+XZyce3npD3+MQc2SQAvLL0NuUNAAA6iMwHSKI2fPH9vQJxu76+Cyd2EDZ2jwAA6gwJJQBAY2DEnb3mhXo1djcAAF4GTHkDAAAAQL0goQQAAACAekFCCQAAAAD1goQSAAAAAOoFCSUAAAAA1AsSSgAAAACoFySUAAAAAFAvSCgBAAAAoF6QUAIAAABAvSChBAAAAIB60eOrFy9eunT/fpr+6gcAqC0bG+tePXs2TFuIgQDQpOg1AOoroSyOpBMmjNNT/QAAxY4dj3d3G1rDwrt3RxJRA+SUiIEA0ACaTgDUV0J5/37ayJHDCwoK9FQ/AEAxuVxe81Dj5uZ6/PiJBkgoEQMBoAE0nQCoxylvlmVZjUZ/9QMAUC1DDcuyeu1MpbYQAwFAr5pOANRjQkkNG7ubOulfX3+xf0zIN90ljd0TgNcMy9Y81DRwUEIMfA4xEEAfmkwA1O8dSk2tuq7OubBv445Tfz2hVt2HfDZ7dC9jHpH0r3mfLbguJZJ0X71rVYVIVGV5rcdZ5eNfIsIOn72RXkBGFnb9h08f95E5n2GVmX+eOHTkzB83M+T8lh16DRk7ycO+OVdr+fpcDiINy2rw7wvAS6WpTahp4DuUTSkGlp2VeWLBlz+ktf+2cm0vHNddT20hBgLoQdMJgHpNKGvV9aKs/wX/cL3brE1fd6bbsWtC1v3Ubvmnplxx128PHiXpX/MDDlCFLFxLeW3HVelx3+6+22/Wd3O7mtLT68c3bvz2WKdgbwvVvX0/ZnXyChxt10Ys/+eP6I3ffWsYvGJQS1ZLeYN6XQ6qxRcJAKipJvIF/YW2mlIMLD0r+9zWWGm3lgJppdpeOK67njpeDsRAgJeuiQRAvU55s5qyeX3ZjYVf7LDv1/Ln/17L4rf7ZPLM99P3hsVdeWLQwXnW/PE9jDhFWecTsrtPdutuwifq5vFZt1+2X8gaMLhVcfRiWSLSlKuPtJUnLccVOX/J3hrm1K2VkCFqZT/Y660fE7IVXmbijrOCOpbUKbD+0Mfv5NzETPknJqSlfMVoyiozf9+/df//kjOLWvf0mRng2UlceGPhrIMjN67oJi4dePFHYkkjTY5es/XHy//IJe0/9AuY/ElbQd3veAJAMU2F0FCNhk1nmlIM5BIRaZ5d2nFQ6jLb9+La2PK1VXFcd3/KRogYCNComk4AbKg7lCzLyjPOaUb8Z+sc5s+N8zYuvek8ZeEPX2gubly6K8Ep2NdCnX1datS3laD4FEGrdwylf2QrnFqKSk+vtE5AoaU8aTnON/u43bOjiX+1de1iyj796/TRZ+2czPiVri2bd/f3PNPepnyWpZqUV6Qd+nbX/f6zgoM6i55cPPlTRqFtu0pdLftILFv44Nj9jxdsCGhH9xNDg1fvbx88oZ1Qf38AAG+KCne9PDyHvVjiaFxsWdEG6lRTi4EiIlZ6Y/++rEGBX5jnXqgQpqo6rq1+UfkhIgYCNLqmEgD1e4eyfDAlkdWIYb3MxAzr8KmZJGeo+7tmEoZ1dGp5MD5HyZqTKr+Ia8QrHS3PiFtUoNQ8D0lEFedKNFrKa6uH07yP/4gLC1ZM2aNiieG/9WHAN++14JS/tmxh6rH1O545LxzQksOyVG15IkX6qT84gxe4dmtpQNTmfd+xRCwrq9jVsp4TS3xLj8+cOrXgEdkOnjjkv9+cSfeb3E6gxz8AgDcBW3FNetyRGE8v7/IF4o7ElBVo4DuUTSgGsqz8bmz4wwGzP7MwUOWUq03LcW31IwYCNCVNJwDq9w5luQkVlhiDZjxWo2GJw+dyn//MYdVFGo2G4Rpyi54pizQahohY5bMiroRbdh9XwxKRRlPuti6rpTxpOa7KOrN+b9bHX4e6djWl7L9ObNm64b+dFn/asmT6RpN//fCa0L/tZ389xIyr0WioSHd5IiJSSdNVol4SboW7zZW6WvaRWDIwtJFwin/BkbQTqa5LVRpNnRdlAgARFe99qTjjExsTNczbt+zn8r9t2HSyKcVAxeP48Dv9pi0w52o0inK1qbQc11Z/+SuNGAjQ2JpOAGy4O5TPJ0Gq/JnfvKs473Jm4fvNRURUmHklT9y1hcELkyZlF8NAS3nSclz+5HyWqYdT99bFayKd3E3+d+pfxSemIiJS/Xtuxzf7ng4I/Nqzo6gkgddVvhRHZG4gu5untJeUi4gscUkjV2tYliEiTeETuaZ0ukedn5qvspfwiEidnyozMBNy9PptAeCNUOkLerGY6MPePsNjog9XXtfSeHcoGzkGKrKvpP11I2BURGkFf01buvyHJV1Jy3GBzv4UQwwEaGxNJwBy9Fd1yX6+UuU/V/Ezx9hxkPFfu+OvP5XLn/51bPcNU6d3jDlVn87qKK/tOK95V/G/R8/8lSlTq2WZ1xKP/ivu2oLHshpZyvHvFh0sdFkY6NFB+LwJbeWlNxZPX3pDyrIsy/Lf+rSX5vTOkzey5MqCh79H7b0nY1kD4x6G/8b9dDtHqZZn3UqMPJhWWNJzUqQfj/jxTq5SmXvnTESiqsfH5nwWAOqJiKo8Hh11SFv5htG0YqCoy7Ldh6KjDkVHHYqOWNK1ld3y0MV2Iu3HtdWDGAjQlDSdANhQu7zLT4JU/TNj8uHMz9J/2DonLotM7QZN+OIDY0aj0cj+XjZz+Q0pEdHi8SNIYrd08yI7MRFpKa/tOLfV4ADfJzt3fh2dKSPJW536+AUMasXRaKSpEdGXs6S0dfYfW4u7KrIN3Lisd3Mt5SvM5hi08f5q9IEdPwRGZVHrnl7TpvI1GqblJ9PcUsPWz9xfwDVp3/vjIW1uXi6Z7hG2cba88cNX+x7JxTZ9vWcPb2tQ861ZAKCFpsJMcDX0Gk9fbK0JxcDy/XpxAr2K41rqQQwEaEqaTgBkbiRdqcNpUdExvj7eugsMG+aZl5dX144BANTIj//936effFzDwkUazU//O1tt+NJdoCZlEAMBoAE0SgCsUlN6Uw4AQO01nRdFvNgWYiAA6FXTCYB4lzcAvOJqszCogYMSYiAA6FeTCYD6vUPJYnkMAOhZrUJNA9+hRAwEAL1qOgFQXwmljY11XNyxXr176ql+AIBiCqVSKpPVsPDFC5dsbKz12p9iiIEA0ACaTgDUV0LZq2dPIrp44ZKe6gcAKCYWimoeamxsrIujk74hBgJAA2g6AVCPU969evZsmMANANAEIQYCwJtDjw82BwAAAIA3ARJKAAAAAKgXJJQAAAAAUC9IKAEAAACgXpBQAgAAAEC9IKEEAAAAgHpBQgkAAAAA9YKEEgAAAADqBQklAAAAANSLvt6UcyP57+TkZN1l7Ozsutp1qUvt0utBM/aODV1jL6nL2U23LQB4XSAGAsAbRV8JZXJy8qKly3SXWbF0SeVgKr0eNH5uUkG5I4b2wRHaA1lZpCPtIU/f0VB6PWjCcnbKD2sGteSWHGILrn435dsn83YhBAO8ocpiIMuyRMQwTPHx8h8RAwHgtaHHd3nXkURn9KxcuPu6iDVERFJ9dqlajCoz5ui9Dyd1FBIRkTrjTETSM41Fo/YJABofy7KBX80houDv1jMMU/yRIWbdd9+VpZiVIQYCwCtIjwll8Rfxl1ab4uGp0O/2/JJaIGzb26l/gYaISr95B4/ZM31uUgEleTtX822+rDb5w8Rtm/b9fOspmXYeMPLLKYOshAwRscqMc5FbIs9cz9C89d6IOXO8O5eriZXdjv125TGO16J5nh1F5f8tEFl7db4WeSFnaX9jDrH51/efbT3U+unlkt+qs37fE7L7dNI/colNH99ZAR6dxQyRRvbofNSOPQlXHz4rEls6uEz9akyvFlwidfb5fd+HJyb9k8dp+faA4dOnOrcXySreYCh/T2L61l6DrM4lnk+V2367e7W9oMq2AKARaDSaoMCvDh44QEQMMWvWrZsbFFjykcNZs3ZtrWpDDEQMBGjK9LgpR1Od2lQmT41cue/ZwEW7oqNCZ9qlxt0vLPdLcfd1EWsd3rIPjklIjK7JN/vClIgVkVn95u2Ijt0x94OsvcsiUgqJiBT39y/fds/+i5ADsbsWDFD+miEvPYNVP/2/rYFL//fW1O8WeVWMpEREQmu3gXlR8Q+VROrHp/c87DOso6SkjPLBoeVh9x1mhhyIi1zlLTy5ZtvfUpZIejP4+9+aeyzceuhI/KGNk9v9uWXL1TyWqPDezrBzrcet3Rd3ZP/aCbbpZx7JSRfZg6PpDgEhB+KjVttLtLQFAI1Bo9GUfa8+cGD/R/0/LM4my35bm8oQA7VADARoGvSYULLVqfo06bVAb2enIaX/+Xx9TUqkSD950cB9imsXY77AuIvbNK82/Hr0TPH45CUD92mudsW1TR3Kv3QqXUGkeHTid2boDE+H1iK+kXX/UZM6iIpHUphy/NvZPzz6aPHaz/u1rPKmrkHrAd4tzkVcyXmWtPe00MPJvLR/ivSTv7BuU93tW4n4zWwGjvVrlnw6XUEksVu8LtCzh2VzPo8rMuvtPdI07WyGnIjh8DlFBU8e/5urErTu6uo/taNI51gE1qMnfmrbgs/oaAsAGsmatev8/EYW/5yamlr8w6jRY7759lut5yAGIgYCvIKa3pR3leuHpLJ0lbifUUlvDZp1bGbwZ917ppY9Vks+MDIoq02iTipUE5HskUryfjODyuWVGYnHMoRDVrh1lmidO+G2cPR7O3xTxC7mtu3nn5twU0vbKniQkxLn77Gz7HpI7AuLiEhTcONo2O4TF+5mPpOrWZYYQwe5hkjSbtJc38gDe1fsT8uV2Ln4z5n4vqmuPySe2FJcug5ea1sA0AiK/x5+s3r1hQvny7LJDh06rly1inRESMRAxECAV1DT25RTJZ7YwkB2N1/taMQjInV+Sp6qilI1zWC5YnOe9E6+ytHIgIhUeXelPHMRj4jElgbS23klx58TtJu8bOjZVSuXiRcv8bF9Ya6nGCOx9f1IM/Mw672ls4Qp6x5P0sakU9/NwW6tK15qxf3wDSd4Y+aH9mxrLOFzcn+dPes4ERFxDDu7zFjqQqwy88Ku+WHhA94J7EQMj9HIi1gihog08n/l5ebKnq/s19YWADQSlmXnfT23LJskopSUuwvmz/929Wqtm3KqhBiIGAjQtL0iaygFFs49lce3J9zKVSpzb8VvO/JIWbEAh2/KLbidraxROBWaD3FUHtt68u8cpTLnZvzWeIXjYAsBkcDSpa8m/oej157IVQVpv+zflVK6SonX6sOA1dPMfly++PAtmbY2+G3HbT8av2OcdfmpKIHl0AEUExp3OV2qKlLk3Dt/ePPm2zIijbqwiPgCoVDIUWYlJ+zceVdGRESyOyGbYy6k5SmLNMThMMQQEQlMexpmRJ25maMqkmcln9gemVpYVQe0tQUAjaGoqNBWA3QAACAASURBVOjruUGHDx0q/ti+Q8fiHw4e2D/v66+Limpz6wwxEDEQoGlrelPe0muB3s7PP5bsWBR2GLfQb8v6JRO2yURWvZw8rFMuVzhLaOXzSYtls4bt4HZdV8VsUbk6De2DI9Z0n7hwdFjIN5N2ZpNxp/6jFk8sXqUjaDd6if/ukO9n7PmXzPv4zZ4tJCoNRjzTfjNXc3+Yv3Jx0YJlI7ton/iphG/luyQgZnvE/PEpT9USK0fXMf7WIiKm/WeTeq/dNmvESqWgZYe+g1ytxBeJiERtPbr9vHXV5GXpCsM2PZxnzOogIiIzlzm+dzasmhCex21p22+Ih3Xy+Vq0BQCNgWVZKo2CfiNHrVi58j8LFx46eICIih8hVPVpiIGIgQCvIOZG0pU6nBYVHePr4627QODX83RXErxmte5KAAAaXrXxrSZlimMgy7L/WbiQYZgVK1cWJ5HlPyIGAkBTU5MAWCUsNAEA0BeGYYq34BSvmKz0EQDgtaGvhNLOzi54zepqy+ipdQCAxoUYCABvFH0llF3tulR+Ry0AwBsDMRAA3ih63OUNAAAAAG8CJJQAAAAAUC9IKAEAAACgXpBQAgAAAEC9IKEEAAAAgHpBQgkAAAAA9YKEEgAAAADqRV/PobyR/HdycrLuMnZ2dnhOGwC8lhADAeCNoq+EMjk5edHSZbrLrFi6pHIwlV4PmrF3bOgae4me+lUD0utBE5azU35YM6glt+QQW3D1uynfPpm3q1E7BgCvDsRAAHijYMq7KowqM+boPXnpR3XGmYikZ5rG7BEAQMNBDASAWtLXHUoiYlm2XqfL0xJCN+w5lyoVtu3l9OGj/12ZEbbGnq4HTd/Wx6XDb6d+vZ1VZGTTd8ScLzzaixgiVv4wcdumfT/fekqmnQeM/HLKICshQ9LrQdO39hpkdS7xfKrc9tvdq+0FWb/vCdl9OukfucSmj++sAI/OYqZy2yJrr87XIi/kLO1vzCE2//r+s62HWj+9XPJbdZU1aGSPzkft2JNw9eGzIrGlg8vUr8b0asElUmef3/d9eGLSP3mclm8PGD59qnN7kaziTYiyexJUp94CQJOEGIgYCPDm0OMdSk11dJ4tT4lcdaBg0NLw6KjQAIeHxx4Ulv5GlhaXZusfvCcudteij54eXp+QoSaiwpSIFZFZ/ebtiI7dMfeDrL3LIlJKzpA9OJruEBByID5qtb1E+eDQ8rD7DjNDDsRFrvIWnlyz7W9pFTFfaO02MC8q/qGSSP349J6HfYZ1lJQEMS01SG8Gf/9bc4+FWw8diT+0cXK7P7dsuZrHEhXe2xl2rvW4tfvijuxfO8E2/cwj+YvNlVOX3gJAU4QYiBgI8ObQY0LJVkfXyYr0hEt898mDO7fgC4w7u/gPayMo/ZWo/QR/Z7uWIh7fuIuTj1nB5acKIsXjk5cM3Ke52hnzBcZd3KYO5V86la4gIiKB9eiJn9q24DNEpEg/+QvrNtXdvpWI38xm4Fi/ZsmnS4pVZNB6gHeLcxFXcp4l7T0t9HAy55d1rOoaJHaL1wV69rBszudxRWa9vUeapp3NkBMxHD6nqODJ439zVYLWXV39p3YU6bxqdeotADRBiIGIgQBvjqY65a2WpavE/QxLusczam/Eu1jyK46glbAkD2a4Qi6r0hCRWvZYLfnAyKD4uEGzjhJ1UqG6+GSxpbh0Zbm64EFOSpy/x86y3knsC4uq6gC3haPf2+GbInYxt20//9yEm1pdDZqCG0fDdp+4cDfzmVzNssQYOsg1RJJ2k+b6Rh7Yu2J/Wq7EzsV/zsT3TXVd9Lr1FgCaHsRAxECAN4ceE8p64YktDApTCtSORjwiUuen5qt1lueKzXnSO/kqRyMDIlLl3ZXyzEU8IjUREVO25IYnaWPSqe/mYLfW1Q6ckdj6fqSZeZj13tJZwqiqq0FxP3zDCd6Y+aE92xpL+JzcX2fPOk5ERBzDzi4zlroQq8y8sGt+WPiAdwI7EcNjNPIiloghIo38X3m5ua869RYAXi+IgbXrLQA0sqa6hlJgPsRRcWzH6VvPlMrc2wk7Yv/RPc0hNB/iqDy29eTfOUplzs34rfEKx8EWgheKCSyHDqCY0LjL6VJVkSLn3vnDmzfflmmpk9923Paj8TvGWfNrUINGXVhEfIFQKOQos5ITdu68W1yt7E7I5pgLaXnKIg1xOAwxREQC056GGVFnbuaoiuRZySe2R6YWVtWBWvUWAJoYxEAixECAN0VTnfImUcfxC4ZvWb9kXJhU3LbXp65WKTc5DJHWKkW2ExeODgv5ZtLObDLu1H/U4olVLtThW/kuCYjZHjF/fMpTtcTK0XWMv7XuBT01rIFp/9mk3mu3zRqxUilo2aHvIFcr8UUiIlFbj24/b101eVm6wrBND+cZszqIiMjMZY7vnQ2rJoTncVva9hviYZ18vhZtAcCrADGQCDEQ4E3B3Ei6UofToqJjfH28dRcI/Hqe7kqC16zWXUkZ1aMDASsK5m6a3I5ffWEAgPqoNr7VpAxiIAC8imoSAKvUhB9sXpi6fd/Pd7Pl8uzk+G0JCoeB5oikAPDmQAwEgFeHvqa87ezsgtesrraMrl8LzQZIojd+uelevrhdX+/54zsIX2YHAQD0CDEQAN4o+koou9p1qfyO2tpixJ0854Z4vqQOAQA0IMRAAHijNOEpbwAAAAB4FSChBAAAAIB6QUIJAAAAAPWChBIAAAAA6gUJJQAAAADUCxJKAAAAAKgXJJQAAAAAUC9IKAEAAACgXpBQAgAAAEC9NJGEUv3kp41fjPIc4vP1NWlj9+WlkF4PGv+6jAUA9A4xEABebfp69SJJrweNn5tUQMQwPGELyy4f+k7/bFBbAVNlYcWDwwduOi7eu/FtwyaS4VatbFDFDO2DI9bYSxqzRwDQRCEGAsCbRG8JJRFJimMNq5ZmXov/Pnj10a7fD7c0qKqkWpqmbDa6TdOOpMUkCKAAUDOIgQDwxtBnQlmC4UnM3nEeZnbqWI5yuCWT9fuekN2nk/6RS2z6+M4K8OjM/lX8lfeqj3PJ913BC2XEDEmvB03f2muQ1bnE86ly2293r9ZebFsflw6/nfr1dlaRkU3fEXO+8GgvYohYZca5yC2RZ65naN56b8ScOd6dJQyRuqpKakEje3Q+aseehKsPnxWJLR1cpn41plcLbrkC6uzz+74PT0z6J4/T8u0Bw6dPdW4vegntAsCrAjEQMRDg9dcA34dZtTTjSkJMpmEPE4HywaHlYfcdZoYciItc5S08uWbb31Jx93URax3esg+OSUiMXmMvqaoMS0REsgdH0x0CQg7ER63WWSwtLs3WP3hPXOyuRR89Pbw+IUNNRIr7+5dvu2f/RciB2F0LBih/zZATkZZKar76R3oz+Pvfmnss3HroSPyhjZPb/blly9U8tlyBwns7w861Hrd2X9yR/Wsn2KafeaSjXQB4DSEGIgYCvP70mVBKrwV6OzsNcXHxnvifoy0mLPSwKEo/+QvrNtXdvpWI38xm4Fi/Zsmn0xUVz1JoLyOwHj3xU9sWfEZ3MVH7Cf7Odi1FPL5xFycfs4LLTxVEikcnfmeGzvB0aC3iG1n3HzWpg0hnJdUMytlpiLOTz9fXyG7xukDPHpbN+TyuyKy390jTtLMZ8nLlGQ6fU1Tw5PG/uSpB666u/lM71q1dAHjlIAYSYiDAm0L/ayjFallGUsz32y+nFnziUPAgJyXO32MnsSxbUqawqOJZau1leGJLMbf6YhxBK2FJosxwhVxWpSEiteyRSvJ+s4rLl7RVIum+LmKNrkE9Xz+kKbhxNGz3iQt3M5/J1SxLjKGDXFOuvLDdpLm+kQf2rtifliuxc/GfM/F9U56OzgPAawMxkBADAd4U+l9DyfDE5u+OnJMRtCDsz9Uj2ph06rs52K11xXbLT6zwJDrKMEyNilWBJ7Y0kN7OUzkalYun2iqpOcX98A0neGPmh/Zsayzhc3J/nT3reMUSHMPOLjOWuhCrzLywa35Y+IB3AjvVv10AeFUgBiIGArwBGmhPIa/1h35t7hy8KnYZQDGhcZfTpaoiRc6984c3b74tq1hUYDm02jI1L1auvEtfTfwPR689kasK0n7ZvyulUHslNV8/pFEXFhFfIBQKOcqs5ISdO+9W6oPsTsjmmAtpecoiDXE4DDF16TwAvOIQAxEDAV5vDfXtkDHq5tslLOw3fvCSgKPbI+aPT3mqllg5uo7xtxYRVYgjfCvfJQExusvUvFgZQbvRS/x3h3w/Y8+/ZN7Hb/ZsYR0qeYGo/WeTeq/dNmvESqWgZYe+g1ytxBcrFmjr0e3nrasmL0tXGLbp4TxjVgeR9nYB4HWFGIgYCPBaY24kXanDaVHRMb4+3i+9NwAAja4m8Q0xEABeS3UObq/AY3QBAAAAoClDQgkAAAAA9YKEEgAAAADqBQklAAAAANQLEkoAAAAAqBcklAAAAABQL0goAQAAAKBekFACAAAAQL0goXwtVPuetJq/SA0A4JWDGAjQ2PSWUEqvB/n6Bp7JKnp+iC24GjxqRNP7Ky29HuTj7DSk4n8++uunOuuPvctnjvF08/CeNG/z6fuF7Muru85BE9EW4OVCDNQKMRDgNaTPd3kzqsyYo/c+nNRRSERE6owzEUnPNBZ6bLFuJN3XRScQEUmvB83YOzZ0jb1Ef42xhTd3L9hy76NZa+bYt6Ksv386ceof+TTbl/USW0n3dRFrXlJdAFA/iIFVQAwEeD3pM6EUWXt1vhZ5IWdpf2MOsfnX959tPdT66eWS36qzft8Tsvt00j9yiU0f31kBHp3FDJFG9uh81I49CVcfPisSWzq4TP1qTK8WXCJ19vl934cnJv2Tx2n59oDh06c6txfJKsa+slBI14Omb+01yOpc4vlUue23u1fbC6psq2qa3F8XBpwctG7lRyYcIiLpX6tmRfReMiZxwbZ3P7Y4m3jpoVzSsf/Yr2Y4WQkY7QPRgn12OfJ3E//v/Hoac4jIwsFtskNxs1UPXHo9aPq2Pi4dfjv16+2sIiObviPmfOHRXsQQsYqHp0K/2/NLaoGwbW+n/gWaihdBoqVAlQ0ZJAeNn5tUQEnezmRoHxyxxl5Sy3EBwIsQA1+EGAjwmtLrGkqhtdvAvKj4h0oi9ePTex72GdZRUvL3Ufng0PKw+w4zQw7ERa7yFp5cs+1vKUskvRn8/W/NPRZuPXQk/tDGye3+3LLlah5LVHhvZ9i51uPW7os7sn/tBNv0M4/kOluWPTia7hAQciA+arW9REtbWnBavDvunazDZx6rimtKS7jfyu3dFhwqfHDkfrdZoYdid/1n4LP9K/bck+saiJbZE/mT3580/7hrs8rXXdvAiUiWFpdm6x+8Jy5216KPnh5en5ChJiJ5auTKfc8GLtoVHRU60y417n5h5ZaqLlBlQ+Lu6yLWOrxlHxyTkBhd/I9T7S4aAFQFMfCF2hEDAV5T+t2UY9B6gHeLcxFXcp4l7T0t9HAy55f8QpF+8hfWbaq7fSsRv5nNwLF+zZJPpyuIJHaL1wV69rBszudxRWa9vUeapp3NkBMxHD6nqODJ439zVYLWXV39p3bUPT8isB498VPbFnxGR1taiTp4u/D+G3O3kIgKH5y+b+bhYMwh4rfxnuraxZgvMH576JShBhcSHilqX7lGka02aCnkVj6ubeBEJGo/wd/ZrqWIxzfu4uRjVnD5aXG7Fw3cpxT3p4vbNK82/IoVaiugo6FKp9fuogFAFRADK0MMBHhN6XPKm4i4LRz93g7fFLGLuW37+ecm3NSS4+qCBzkpcf4eO4lli7/zSewLi4hIU3DjaNjuExfuZj6Tq1mWGEMHuYZI0m7SXN/IA3tX7E/Lldi5+M+Z+L6prq7zxJbi0oCltS3tZ5sNHNUmaP+V3GXvPEm8Z+Hp34whIgPDjkYlbfKMOohVVwvVRKSlcm3reDgCE54qS15EhpXiqZaBExFH0EpYkvczXCGXVWmISC1LV4n7lfbHoFnHZgZ/VqhPawHtDVU4vdYXDQCqgBhYCWIgwGtKzwklMRJb3480Mw+z3ls6SxhVWbOSNiad+m4OdmtdsQOK++EbTvDGzA/t2dZYwufk/jp71nEiIuIYdnaZsdSFWGXmhV3zw8IHvBPYiRgeo5EXsUQMEWnk/5YPCgxTXVu6et28x+ieu0POpplkpLZ1/8yQIRmRuuBuvtrRiEdE6vwUmYGFiEdEtaxc2Or9Vnnxf+d9+qFxhZvDWgeuBU9sYSAr3588Vc0K6GyILZvQqcNFA4AqIAZWhBgI8JrS/3Mo+W3HbT8av2Ocdfn5CIHl0AEUExp3OV2qKlLk3Dt/ePPm2zIijbqwiPgCoVDIUWYlJ+zceVdGRET/z959x0dRp38Af6bsbE8HQgIBKSIgoYgootgRQokeQVBB8UBQzwMb3s/zRFG4U8nZQKRIFwsQBUEQ1DvFSpF6IF1ACAmE1K3Tvr8/viGGQELI7lKSz/ulr1fY3Zn5THvm2ZndHd+eSZOz1h0sVg2TRFEggYjIGt/ZlbPoy50FmhHI2/H5jHn7K36GpsppVcnW5M4+8vJ35+9o2qeFi9fl4OFPZqzcVaiqhbtWzFiudu6ZbK185JV9fkiI7nj/tSdmvL7wl2yPpnmObl02Y+pef+UzXhlrUq/O6rKTeZZP//SIWr0XVDYhUYmXPLvzVRbCQgOAM0ANLA81EKCWulDvvZSUAS+Mypox99kH9p3QnSmdeg8e3sROJDT787Aur00fPXC8ak1o3vX23imO9URE9sbpV347bcJD47KDrkYdej06urmdiBLTnhyw540JQ2cXSwktu/VMb7Jj7TlMq2pyve73XPbh5OiHLjv5UnvKnSlb33hk5iG/q3n3+56/v5mtipFXWncExxUP/vPRD9+Z9cyHh0rk+m1uGTjyNlvlM14pW/P7nxv0zusvDJ3us6dc3SO9yb6N1XqBvZIJ2VIybo0ZN/pP70ltJ859NdVZo4UGANWFGogaCFCrCNu3bKrBYIsWZw3I6B/2NBcT/fiqsS/+PuL14U2tdH5+ng0ALgrVqW+ogQBQK9W4uOHWi2fGircuWEJ90htZL3QSAIDzDzUQAM4JPm58Gu+2MQ88szUQe9VDEx+th+UDAHUMaiAAnDsUi9OU3YWswoO4nRcA1AWogQBw7nDJGwAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEJy6TeUld3g61KJEYn8ZeO8SBYOAETORbKbowYC1G0RbCj1/A0L/vX4kIz0tH53D30686OfjwZZ5KZWPd5tYzJ69ejZq0evtLS77n3o7++u/v0cQ53/8uTdNiYjLX3UJ9nahcsAAOcONTA8UAMBLgURayj13JUTJm1IGjR+5qJli98b/0Cqd81HB/yRmto5cKZmZq1cvfLzz95//ZH2B+e8svSPIlWtwdtNnHvebz5ma9hd/GLG+gLz/E4WAGoONTCMUAMBLnoR+2FzNe/n/PqD7rqmSZRApDRq12NYux5ERGT6jqxd9N78lZt/LzIcye3TRj41+OoYibzbxjz8bocb6v/ny03HleZ3PPLE9UdmT876JdfSsu9TY4d1ihK928Y8PPWqW5K+Wb3h94CzRfchTz3aI8UqnDJRPe/H+ZPmrNpyOOBseu2A0aPSWzmEM4UjIkF2Jnbs9afELz4rUO9OFs44oJ6/dsGbs1dvOVwsJlxx492PjOzVzO7744a2LPj7F1P+PX/Nfo+tcZce3T281FW44+0f/6xkxqtDSug+ov2ctxfu6Tiilb3cHFU2rXNYTwAQGaiBqIEAdUnEzlAq8Z2jcz9c+M2Oo169/AUV787MN3+ITn9u2sefLv/4rYcu++WddzYX8xf4j37D7nh59kdTh8d8l/n36SU9xs36YMqD7jXTPy99A+0/9OmBK0dP+fiTWf+4ueiDl+f/Fjhlkuqhj1+aeqD9Y5M+XDJvQn/bilen/+qt9FoO0705m1Zm5bo6xFkrGdD/28yp39W//7UFSz794LWhLbO/PHLK9AL7541fUHTz87MWL5ryWJv9S85y7qGKGS99QVUXcawp6SOu2DRtda5e5UQA4GKBGlgBaiBArRaxhlJO7Dv28es9X7319P13ZTww6p8L1ubpRETONmMnPn1nh+RoRZbsiV363xN/8JscXqQcTQfffW2Sy97wql5JroSB/a9JcjmTu6TVC/yvUCUiIqVR/5G9W8cq1tgr+ozoY1m38kiw3BSD2SvWsL4j+6XWsytRTW8eMihqx6rs4GnBvFuf7t+rR8+0tP4P/mNpzNDn0pOMSgYUREU0PMePHivUrPXb9h4+soX91Mmtt/QbwfO07vvwXY2UKhdIFTNeHYLzyiEDHStmrS/CNR+ASwFqYAWogQC1WgTv5S3Hdcp4vFMGMb344NqsSW+Pd/87s1+ibHq2L5065/N1e3OLAjpjJLjaB3h9EJRYRSAiQbJJkhJT9jfTS+uHxdXCXRpYdjd3aJv95d+r6p5DBfuWDE+fSYzxd73OVL9xWixnaubcV1Mdui9nS9abMzbu99zavpIBnZcNe2bAvA/ff/mDg4XONmnDn3zwuvg/lpfuy9Yc3U7msUS1iLL8UuXyqHzGS4Od5Va5Uny3h29ZOn7Rvg6DqpwOAFwcUANPhRoIUJtFsKE8SZCjml7Xf2DWmmV5ar9E48DsNz6XBz87pXPjWKciFn7/xOhl1R2T7tlbondyy0Skl+zzWZLsMlFZPZWdjeIu7zo5s2/9asyUIDsaXnXPkzlj/j71l1cGVjKg6GqV9uiLacTU3HWznp06+8aOT19e9qTsSLL4yucp1k6OWjADBiMSiMgMHCutmMEQZryUktznobZPzfjq5rJqWsm0AOAighpIRKiBALVcxC55+3a9PnH26m1HilVD8xzZsGxRrrtjnEJk6n6DFKvNZhPVvB0rZ87c66v2OIOHP5mxclehqhbuWjFjudq5Z7K13LPW5D43UtaUJRuzvZoRLPht7cLJk3dXOXK5/g2DGu35aLMj7YwD+vZMmpy17mCxapgkigKd+tl2a1Kvzuqyk3mWT//0CL8mZY3v7MpZ9OXOAs0I5O34fMa8/fxzRWed8Wr8EIbgbH3fva7lczYVsSqnBQAXHGogaiBAXRKxM5T2ywbdsHnBvLHTduUG5NiUdjeNeLZPQ5lIbvbnYV1emz564HjVmtC86+29Uxzrqz3OlDtTtr7xyMxDflfz7vc9f38z2ylPKykDXhiVNWPusw/sO6E7Uzr1Hjy8ib2SUXGC+8oBradO/UHJfGHU0tMHbJx+5bfTJjw0LjvoatSh16Ojm9uJ/ih2tub3PzfonddfGDrdZ0+5ukd6k30biYjkxLQnB+x5Y8LQ2cVSQstuPdOb7FhLRGQPYcb/IMZ1HXbbolHv+VpUNS0AuOBQA1EDAeoSYfuWTTUYbNHirAEZ/cOepioVfh4CACAyqlPfUAMBoFaqcXG79G+9CAAAAAAXFBpKAAAAAAjJefiWd5ic7RclAABqM9RAALiI4QwlAAAAAIQEDSUAAAAAhAQNJQAAAACEBA0lAAAAAIQEDSUAAAAAhAQN5UnVuOtXmAeszjgjMXIAgNOhBgJACCLWUJ5eBcJSF7zbxmT06tGzV49eaWl33fvQ399d/XuQhRgs0rzbxmSkpY/6JFu7cBkA4DxDDSw/RdRAgNruPJ6hdLabODccNw1zpmZmrVy98vPP3n/9kfYH57yy9I8idT5jnBNbw+7iFzPWF5jnd7IAcBFBDUQNBKi9zmNDWf4Sxv1/zfrozSeHZvTpc9c9j722ZL+/9B22nvfj7BdGDLoz7c77Hn1lyS5fFW+8BdmZ2LHXnxJ9WwvUygbU89fOHfvwfel9+t41dMybK/b72SnvjFnw95VvPH7vXf363fOX8Qt3eMxTc1aITabvyE9zxz066K6+vfoNHP783PWFRnXnXUroPuKmY/MW7vGfOkeVTgsAah3UQNRAgNrrAn2G0ndwycGWwzPnL/lk1vM3nVj4+socnYjUQx+/NPVA+8cmfbhk3oT+thWvTv/VW2k5Zbo3Z9PKrFxXhzhrJQP6f5s59bv697+2YMmnH7w2tGX2l0cC5ccQ2D9v/IKim5+ftXjRlMfa7F9ywF9lZu/OzDd/iE5/btrHny7/+K2HLvvlnXc2F5ePV2UptKakj7hi07TVuXq1FxIA1FqogQBQu1yghtLebOjwXm0S7LIS27pHRqJn44kgUTB7xRrWd2S/1Hp2JarpzUMGRe1YlR08bVjv1qf79+rRMy2t/4P/WBoz9Ln0JKOSAQVREQ3P8aPHCjVr/ba9h49sYS83nmD2ivWWfiN6t45VrLGt+z58VyOlyszONmMnPn1nh+RoRZbsiV363xN/8JucQJWDlCc4rxwy0LFi1voiXPMBqPNQAwGgdrlA9/IWrfVspb2sINkkpplEpHsOFexbMjx9JjHG3/U6U/2nX1FxpmbOfTXVoftytmS9OWPjfs+t7SsZ0HnZsGcGzPvw/Zc/OFjobJM2/MkHr4v/Y4Z1X7bm6OYufcAS1SLK8kuVoU3P9qVT53y+bm9uUUBnjARX+0D5wni2O+1K8d0evmXp+EX7Ogw62/IBgNoNNRAAapcL1FCekexsFHd518mZfetXI5UgOxpedc+TOWP+PvWXVwZWMqDoapX26ItpxNTcdbOenTr7xo5PX/7H5BxJFt/eEr2TWyYivWRfsXZy1IIZMBiRQERm4FhpxQwemP3G5/LgZ6d0bhzrVMTC758Yvewc51BJ7vNQ26dmfHVzWTWtZFoAUAehBqIGAlyyLqbfobQm97mRsqYs2Zjt1YxgwW9rF06evNtX1RBy/RsGNdrz0WZH2hkH9O2ZNDlr3cFi1TBJFAUSTp1cUq/O6rIZK3cVqmrhruXTPz2i8sfjO7tyFn25s0AzAnk7Pp8xXMQLkgAAIABJREFUbz//XJGp+w1SrDabTVTzdqycOXNvhWzV+Di54Gx9372u5XM2FbEqpwUAdRBqIGogwCUrkmcovVuf7t+r9G9Xaua7g882gJIy4IVRWTPmPvvAvhO6M6VT78HDm9irHEJwXzmg9dSpPyiZL4xaevqAjdOv/HbahIfGZQddjTr0enR0czvRH8XO1vz+5wa98/oLQ6f77ClX90hvsm8jEZGcmPbkgD1vTBg6u1hKaNmtZ3qTHWuJiOzN/jysy2vTRw8cr1oTmne9vXeKY/25LxQxruuw2xaNes/XoqppAUAtgBp4BqiBALWTsH3LphoMtmhx1oCM/mFPAwBwwVWnvqEGAkCtVOPidjFd8gYAAACASxAaSgAAAAAICRpKAAAAAAgJGkoAAAAACAkaSgAAAAAICRpKAAAAAAgJGkoAAAAACAkaSgAAAAAIyaXfUFbjZl/hGIl+/L9v/fXeO3tmhDyt6sQIy0wBQF2AGggAF4EINpR6/oYF/3p8SEZ6Wr+7hz6d+dHPR4MsclOLTKqyohY8tPDDnZ3Gvr9i8aupVL1K5902JiMtfdQn2dppYwOAOgA1EDUQoO6IWEOp566cMGlD0qDxMxctW/ze+AdSvWs+OuCP1NQilcrZbuLcV1OdRLr3oBrVqZHr3JaXrWF38YsZ6wvMEGMDwCUHNZBQAwHqEDlSI1bzfs6vP+iua5pECURKo3Y9hrXrQUREpu/I2kXvzV+5+fciw5HcPm3kU4OvjpHIu23Mw+92uKH+f77cdFxpfscjT1x/ZPbkrF9yLS37PjV2WKco0bttzMNTr7ol6ZvVG34POFt0H/LUoz1SrMIpE9Xzfpw/ac6qLYcDzqbXDhg9Kr2VQ6hWKi8R8+1Z9uacL77fnWe4m3Yd+ORf05vZBe+2MY++PyRz8PxHntnioc0ZvcjZvDnt2+elLf17kSs1k5faykgJ3Ue0n/P2wj0dR7Syl0vCRzvl5LBl/wzHggeAiwJqIKEGAtQhETtDqcR3js79cOE3O4569fLXU7w7M9/8ITr9uWkff7r847ceuuyXd97ZXMxf4D/6Dbvj5dkfTR0e813m36eX9Bg364MpD7rXTP+89IqJ/9CnB64cPeXjT2b94+aiD16e/1vglEmqhz5+aeqB9o9N+nDJvAn9bStenf6rt8KlnMpSEZHv4JKDLYdnzl/yyaznbzqx8PWVOfrJpxztJs59rX2D1MyslauzJr877+Tfi19NdZ7lIo41JX3EFZumrc7Vz/w8ANRSqIFEhBoIUGdErKGUE/uOffx6z1dvPX3/XRkPjPrngrV5OhGRs83YiU/f2SE5WpEle2KX/vfEH/wmhxdFR9PBd1+b5LI3vKpXkithYP9rklzO5C5p9QL/K1SJiEhp1H9k79axijX2ij4j+ljWrTwSLDfFYPaKNazvyH6p9exKVNObhwyK2rEqO1i9VERkbzZ0eK82CXZZiW3dIyPRs/FEhWFrRnBeOWSgY8Ws9UW45gNQl6AGcqiBAHVDxC55E8lxnTIe75RBTC8+uDZr0tvj3f/O7Jcom57tS6fO+Xzd3tyigM4YCa72AV5nBCVWEYhIkGySpMSU/c300jpkcbVwlwaW3c0d2mZ/+fe8uudQwb4lw9NnEmP8nbcz1W9ULxURidZ6ttL2WpBsEtOqW/yc7SbOfbWK56X4bg/fsnT8on0dBlVzjABQG6AGcqiBAHVBBBvKkwQ5qul1/QdmrVmWp/ZLNA7MfuNzefCzUzo3jnUqYuH3T4xeVt0x6Z69JXont0xEesk+nyXJLhOV1VPZ2Sju8q6TM/vWr85MnZrq3OeKncO3NZXkPg+1fWrGVzeXVVNBFsyAwYgEIjIDxwJ46w5Qa6EGogYC1H4Ru+Tt2/X6xNmrtx0pVg3Nc2TDskW57o5xCpGp+w1SrDabTVTzdqycOXOvr9rjDB7+ZMbKXYWqWrhrxYzlaueeydZyz1qT+9xIWVOWbMz2akaw4Le1CydP3l1h5JWlOieiEi95duerpeW0Gj+EIThb33eva/mcTUV8GGt8Z1fOoi93FmhGIG/H5zPm7b/g3/0EgPBCDSwHNRCg1ovYGUr7ZYNu2Lxg3thpu3IDcmxKu5tGPNunoUwkN/vzsC6vTR89cLxqTWje9fbeKY711R5nyp0pW994ZOYhv6t59/uev7+Z7ZSnlZQBL4zKmjH32Qf2ndCdKZ16Dx7exF69VOf0USFbSsatMeNG/+k9qe3EudX8WqIY13XYbYtGvedrQUQkJ6Y9OWDPGxOGzi6WElp265neZMfac0kAABc91MBToAYC1HLC9i2bajDYosVZAzL6hz1NVSr8zAQAQGRUp76hBgJArVTj4nbp33oRAAAAAC4oNJQAAAAAEJLz8C3vMDnbL1MAANRmqIEAcBHDGUoAAAAACAkaSgAAAAAICRpKAAAAAAgJGkoAAAAACAkaSgAAAAAISW1pKM9+7y/9+H/f+uu9d/bMOMstwsIToxr3IgMACBvUQAC4oCLWUJ5eTcJUX/T8DQv+9fiQjPS0fncPfTrzo5+PBlk1YgQPLfxwZ6ex769Y/GoqVS+Jd9uYjLT0UZ9ka2GeBQCo/VADAaAuOY9nKJ3tJs4N+aZheu7KCZM2JA0aP3PRssXvjX8g1bvmowP+akxU9x5Uozo1cp3bDNsadhe/mLG+wAwtNQAAaiAA1GLn8YfNy25ES9vGPDL92rTmP3zx/e48w92068An/5rezC4QkZ734/xJc1ZtORxwNr12wOhR6a0cwikjUfN+zq8/6K5rmkQJREqjdj2GtetBROQlYr49y96cU2GcfKKZg+c/8swWD23O6EXO5s1p3z4vbenfi1ypmVXXdymh+4j2c95euKfjiFb2ckkq3FT3j1kDAKgEaiAA1F4X6DOUvoNLDrYcnjl/ySeznr/pxMLXV+boRKQe+vilqQfaPzbpwyXzJvS3rXh1+q/eCpdylPjO0bkfLvxmx1GvzqozTiIicrSbOPe19g1SM7NWrs6a/O68k38vfjXVeZaLONaU9BFXbJq2Olc/8/MAAOcONRAAapcL1FDamw0d3qtNgl1WYlv3yEj0bDwRJApmr1jD+o7sl1rPrkQ1vXnIoKgdq7KDpw4oJ/Yd+/j1nq/eevr+uzIeGPXPBWvz9KrGGTrBeeWQgY4Vs9YX4ZoPAIQJaiAA1C4X6F7eorWerbSXFSSbxDSTiHTPoYJ9S4anzyTG+DtvZ6rfqDioHNcp4/FOGcT04oNrsya9Pd7978x+iZWNszrOdodcKb7bw7csHb9oX4dB1Z5BAIAqoAYCQO1ygRrKM5KdjeIu7zo5s2/96qQS5Kim1/UfmLVmWZ7aL/Hcp8aq+F5kRUpyn4faPjXjq5vLqqkgC2bAYEQCEZmBYwG8dQeAEKEGAsAl62L6HUprcp8bKWvKko3ZXs0IFvy2duHkybt9p77Gt+v1ibNXbztSrBqa58iGZYty3R3jlHOckKjES57d+WppOa3GD2EIztb33etaPmdTER/GGt/ZlbPoy50FmhHI2/H5jHn7q/iWJQBAdaAGAsAlK5JnKL1bn+7fq/RvV2rmu4PPNoCSMuCFUVkz5j77wL4TujOlU+/Bw5vYT32J/bJBN2xeMG/stF25ATk2pd1NI57t01AmOqePCtlSMm6NGTf6T+9JbSfOrebXEsW4rsNuWzTqPV8LIiI5Me3JAXvemDB0drGU0LJbz/QmO9aeSwIAqANQAwGgzhC2b9lUg8EWLc4akNE/7GkAAC646tQ31EAAqJVqXNwupkveAAAAAHAJQkMJAAAAACFBQwkAAAAAIUFDCQAAAAAhQUMJAAAAACFBQwkAAAAAIUFDCQAAAAAhQUMJAAAAACG5BBvKatwl7LzQj//3rb/ee2fPjIsgTNkyuVgWDgBEzMWym6MGAsAfItpQMt++1VOf/8u9/dPT+t099Il/zf3ucJBFcoLnU/DQwg93dhr7/orFr6Y6yz3u3TYmo1ePnif/y/jb1uPnWOm828ZkpKWP+iRbK/cISiTApQc1EDUQoK6I4L28g4cW/+PF75oN+cvrf2uRoASP7f3l61WfHLhqVCtH5KZ5Huneg2rUfY1cZ2jJnamZc0+psBPnvkpEVP1qaGvYXfxixvqbn78u9hI8hwwARKiBqIEAdUnEGkpWvHXWFzT4lUd61JOIiJSkNjcNaXNT6ZOB31dPf3vBt7tOUHyrG+95fMTtKTahqseDv38x5d/z1+z32Bp36dHdYxIRkXfbmEemX5vW/Icvvt+dZ7ibdh345F/Tm9kFItLzfpw/ac6qLYcDzqbXDhg9Kr2VQyDS89cueHP26i2Hi8WEK268+5GRvZrZhTM+eOqsnJ7K+N+YB57Z4qHNGb3IVbF0VuTdNubR94dkDp7/yDNbPLSlfzUGkRK6j2g/5+2FezqOaFU+DR/VlJPDlv3zHFcOAEQcamAZ1ECAOiBi7/2CuWuOuHt0ipPO8Jx/39yX5+V1+7/3Fn/y3jPX570/bu4+f1WPB/bPG7+g6ObnZy1eNOWxNvuXHPCfHJPv4JKDLYdnzl/yyaznbzqx8PWVOToRqYc+fmnqgfaPTfpwybwJ/W0rXp3+q5cR+X+bOfW7+ve/tmDJpx+8NrRl9pdHApU8eNa0znYT577WvkFqZtbK1YurLItlHKcNUuVFHGtK+ogrNk1bnatXZ2kDwMUGNbAC1ECAWi1iDaURzNOV+jaJqNxHavhnt4NHV2yw9Hu4d5tYxRrbuu/IPsqGL7KDVTyevWK9pd+I3q354w/f1Ug5ORV7s6HDe7VJsMtKbOseGYmejSf469ewviP7pdazK1FNbx4yKGrHquwgkSAqouE5fvRYoWat37b38JEt7JU8WF5lqarg3fp0/3KfH/LVaAEKziuHDHSsmLW+yKzR8ABwQaEGogYC1CURu+QtWRNk9VjAILdEznYTF6/k1yaIiHTfUd15vdvCX2iJauHUt/h1Iqr08WzN0c0tlz0eZfmldCqitZ6ttCcWJJvENJOIdM+hgn1LhqfPJMb459+dqX6DyHnZsGcGzPvw/Zc/OFjobJM2/MkHr4uXbWd6sPyMVJq2chU+P+TdVsnL2pV+rqiyRRjf7eFblo5ftK/DoConBwAXIdRA1ECAuiRiDaW1wfUNSxZtLrj99oSKV3wkR0PZu6dE6+S2EJFWvNcrN7TLRKySx8mRZPHtLdE7uWUi0kv2FWunTa482dko7vKukzP71q8wd6KrVdqjL6YRU3PXzXp26uwbOz59uf2MD1YjbU0vw7Bz+I6nktznobZPzfjq5rJqKsiCGTAYkUBEZuBYAG/dAS5OqIGVQA0EqJUidslbiOrw59vUeRNmfL3ruE83NU/2zm2FvADZGvbspH42bcWvBapasHP5tOXBTnckWSt/3JrUq7O6bMbKXYWqWrhr+fRPj6hVTtqa3OdGypqyZGO2VzOCBb+tXTh58m4fkW/PpMlZ6w4Wq4ZJoiiQQFTJg+VVlqoGRCVe8uzOV0vLaTV+CENwtr7vXtfyOZuK+DDW+M6unEVf7izQjEDejs9nzNvvr2pwALhgUANPhxoIUHtF8GeDrE0H/vM518w5/35s8tES05nY4qpb//J4KwcR2Vs++Nx9Uyf9c9jMfIq9vPu9Yx/kH9qp7HFb8/ufG/TO6y8Mne6zp1zdI73Jvo1VTllJGfDCqKwZc599YN8J3ZnSqffg4U3sRNQ4/cpvp014aFx20NWoQ69HRze3E7EzPXiKylKdO1tKxq0x40b/6T2p7cS51fxaohjXddhti0a952tBRCQnpj05YM8bE4bOLpYSWnbrmd5kx9qaZQGASEMNrAg1EKD2ErZv2VSDwRYtzhqQ0T/saQAALrjq1DfUQAColWpc3PCTsQAAAAAQEjSUAAAAABASNJQAAAAAEBI0lAAAAAAQEjSUAAAAABASNJQAAAAAEBI0lAAAAAAQEjSUAAAAABASNJQAAAAAEBI0lAAAAAAQEjSUAAAAABCSGjaUTZs2WbQ4K7xRAAAuuEWLs5o2bXLWl6EGAkDtU80CeEbC9i2bajbk+g0bDhw4WLNhAQAuTk2bNrm6c+fqvBI1EABqmeoXwNPVvKEEAAAAACB8hhIAAAAAQoSGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCgoYSAAAAAEKChhIAAAAAQoKGEgAAAABCItd4yI2bNm3fviOMUc6obds2nTp2RIBITwVqpQu+iSIAAiAAQB1Rw4aS76JDHxgS3jSnmzN3PhGdvqMiAEDVLvgmigAIgAAAdUcNG0q+i1qttvCmOV1aWs8VK744fS9FAICqXfBNFAEQAAEA6g58hhIAAAAAQlLzz1ASEWMsXDkQACASLvgmigAIgAAAdQHOUAIAAABASHCG8tIOAFC1C76JIkDVAQRBEEVRkmWBBCJixP5glv6PAJd6AIC6IKSGsjJBVc/OKTpYKBYajqBoTRCL61mDDWJtDeq5IzE5BAA4V7phlJSU+H1eXTeISJJli0V2OJwupxMBzk8AQRBEUbIoikaW47qtUFOKdKVYkw2DWUh3isFYyVff4rGJGgLU1gAAtUn4G8qc3KK1B/Q8dxOpQXy0W3DIgpdRgc5+O5adnHugVdN4t8sa9okiAED1eUo8x0/kSaJos9mdTkUURSLSdd3r8XhKimPj4q2KggARDSAIgmyxKIpyTHMf0aLrOahpLMXYyKUQkVAUUHI9yoEi9xfHG7S2Zl/uLhYQoNYFAKhlwnzJ+3B2/le7SWvRsX6CaLcJFotARKrKYqJFqV5KXmH9gq0/XtemgcMenmKNAABVO30TLS4uzs3NdbvdDofDYrGU9VJOp9Ptdvv9/tzcnMQGiRaLBQEiFIC3MqbsXFvSoEk0dalPcfZTXpDgoAQHta1P7erTpqNJcw4n/an+7iiLUVsDXNOAYk/9YZ9atgQA6oJwnqH0+oJrfvWol9+Q3FCKj5XcTkEWBVVjBcVGwM+cLkpKthewDhs3r7++S7MwThcBAKpJ1bSc3JwodxRvpxRFEUVR1/VAIKDruqIo0dHRgiDk5OQ2btwIASIRoLSVsTh/9TdoU481iyUiMhkRkaqqgUAgn9mbRlv4+bBGUdQoiqJttOzg5X1id0dbw9DQVBHglJcRsfMVQDgZQCAiQaByLeB5XgJ8rv9IwlgkAgDUSiF9y5ud6tedh4vjWsTHinHRUmK8mOwWk52CprLLki0xMZLdJggiJbVMKHZE5xeUsOpBgFBWEECFzen4seOKRbHZbDabzeVyORwOh8NhmmZMTIzNZuPdVUJCgigKfr8/EvsIAgiiqCjWzSUNmseyptHMNBkzmWmyY8eO79m7/4W16uVZysPfk1djJiNixEx2fWN2fWP2Yc7lmq5HIgD/jzFWUuIZ8bWv72p64mdijBgrfSqiARijoKr9fvTYtZ8J4kyh6UeUHyDGqCxYpAOUWwKUF6DLPhKkmcI1S4WgzohKk4QYAKAuCOfPBv3vQKEtuaHdLrgcQrRFqE/UkEhn5DRZTLQYFy1GuUSHIjTq3HLnriNhnC4CAFRTfkG+0+myWCyKosiyrCiKoiimaYqi6HA4eJsly3JiYuLx43kIEPapC4KgKNZjmrtxlNkk2jCZyYipupadfWRHdv7w7Y3fPlTPYDRjl3DNZ+KOAmYykwnEiF2fYnRqaG4+4TBNM7wByv3HCgsL1uVbVvwufJ9b+mXnsmcjFIARM0wjNzdn4p6o9cdJEmjBzRRnI3ZKsAgGKD8JxsxYxZx7oyEJtD6Pnt9IjJ+mJBbGAAC1VTjPUOZ4ZKddtFgEUSKJyEJ0LMDcLtEpC1FWwSWRWySbQEkp9Y9k553xTV6I7zvrYACAqlXYnIKBoMUii+UEAgHeQvEGiz8YFxdXXFwUiX2kjgcQRFEVLIfUqESXyU+Jeby+ozm5q4/KA7Zdvq7YVTbUjkK6brk4f69gll6NFjo3NLfpzU54jXAFMExW4T/dZIIoEhExMhljjMo/26GBuVULZwCTMcNkR7KzVx+V39ljJ6LxnalbfWIm00/LFokAp88+I+pan43rZBJR5lbhi8PEGAkk8Kg1DgBQF4TzM5RBJdoikyhSbp5RUGAcsIuSTUh0ijaBHEQykUTEiAyiYDAiv8KAAABVE0SBN0wej8fn8/EWyuFw8C+mEJEoivwEjG5E5LNidTyAJEnHVXuczYxSDJMETdWOFxa/sS9+6n4nESXaiYhy/JTsIKeFdhfRn78Tv8pmk641XBahURRrGWfuOm6NtauSJIUewDj1RJsgCIxIFEQiIoE3YWSUOxvXOIqaxwq7ToQnQLRiMCYezzu+40jB/+1pR0R3JNMzqYwxMpkpEP8YIwkkCAIxRgYzU6LMcAWo5zBjbKYoiIwYlXWDjOkGY4w93sZcc9SyOlt44Bth811mooMEEgzTCMsSAKitwvktb6MkT5QExijaJdoUQSRq4BDjRCohshMpJ9splSgQCIblLR0CAFStwmamqipvmPg5OX6dV5Zlfs2XN1X8BZqmR2IfqeMBRFHK91uTnIZhmAKJmqbfsyFxY75ERHcks/euN9K/knL8QgMH+7qn+dhP4oJ9wgf7hA150pd3mIl2oWmU8c1BR0fVY7fZKp9gdQNUeJkoCKbJStsrRvwEaoWXpbiNH34PTwDGyB8IHj5ydOyB5vmqmGin2d1Nw2C6aWq6oaqqYRiiKFqtVlkSZVG0iFLQ0MMVoFmMyUzmCfrz8vKISJZlQRCIyDTNYCCg6dqbHRvdXBCV6xeGfCusvINJoqjphmGaNQsAUBeE8wylLZCrqizKJWTnGon1pFi3qIpUSOQkshHZiGQig+jwvsPx8RH5fW8EAKiaaRq6rlssFq/X63Q6bTabaZq6rpdd6uUvO3bsmMPhQICwT10Q6IRmaSnrhmmKomCxWDbmS5JA4zqZY640ddNkVHreyynTrBuMWxsKo36WdhcJ2X5qYKcGTvOYHqVpR2rczZQPIAiCIJAoCKz0AjczTZOV9pPEGDMZmYyJQuk5QpOxhi4jLAEul3VBEEs8njk59Td6o4mIBOqzWiASGImMSURKuUGE6xvQ69eYgkCJYQrQ0co03Rj9vb6ppKEsy4Iolv3MJCMixr9rTkT036PCxG30bHsmioKqm4kuCjEAQG0VzjOULRo6c3bsTLi+jdMhqDppjIhIIpKJZCIbkZVII/py4eobOjePxLmHOhgAoGoVNjO3KyrvxInGjRpZLBbTNPm13fJXe/kf2/73v0bJyZHYR+p4AMZYYVC2ikHdYBZJEgWhsZPNucHs1oAZJgtqOjNlotIOj4gGNTOvSmD3r5H4hxqjFaPQcOrneOq0sgCyJJomOx4U4m0kkKCbplbuKr9hMt5lqoZpkqgywSVTjNUMTwApaJhCnm6bdSyGP57joxxfWVNX8UfEGzpIEATGKCZsS0A1DDpGUTs8Z79y/eJG4YGWlKAIhmnGKKwGAQDqgnB+y7vnHVf//tUyn59FuUW5kk51765DWzfsiHJH5OZmCABQtZYtWxw6eIj/4GJZ81RBTk5Odna21RqREzB1PABjFNDJME3DNFXdEAThp95a1/qmbpiaYfgCQfNkm8IYMxnTDaOF2/y2l36Zywyomm6YqkGmWfMPd5YPYJosoGo3rbJ9n0uaYeimqWn8eynEGDOYqel6UYln23H1ti9t+0oEURBMM0wBDFMQqEm0fE9TlT+e5KCr4umqeOqUcMp/V8XTVQnUIoqISOfLLRwBdNOUJbFFNHWMZ50SWKey6cZTpwTWMZ51jGdJjtJ1MawVJTtJNwzdCEMAgNoqnJe8HXbrgDvaLZ0++9bRf64XLwlEOiNDIJ1IJwoQ7d516K0J0zt0aFVQ6ImKsp99jAgAEFYWi6Vly5abt2zpfNVVLpeLd1T844P8j5ycnP9+821SUlLA77daw38/pzoegDFTYlq+n+Jspsk0zTAUUSz2McMwLZLo8fpM5iYi/ps9hslKfEFJFERRJMb8hnnUIyh6cbgCCIJgMsoOSH/61vm3NoGHW/h1wyw78abpRlDVF/9uHfdrtFfnPzZOx7wUlgAn/KTImiJLEzqq6/PlXUWi20L/6c1cFiLG57709cLJr+cENT2gajme8ATI85iNYiz/vtqURCaIgnDynCgjZppM041ild20ykpEbWLojWsYMfIHNd0wczxSiAEAaqsw33qxfWozIvbp+IkdMvpdeX1bIjKIVCKRaMVHq7797JsO7VslJdU7uner5Zu35MY31rvpSQQIJQBA1U7fRBMTGxCxH3/6uVWryy9r2pQ/yK/8bty4ceeu3clJSW63q6Co8PCRI26Xu3FKSDeMQYDyAUzTdAnBox4xStHIJCKj7NYsjCRV04ifICQyiUzGgrrOB+Qv21dgjTJPCIJY4wu+5QNYSBJEoUOssblA+ud224/HpZdaRQsnBykKsr9tcmQdUoiopZs1tDPdNH8rFMMVIMamyrLktAgzuwbu+Mqxq4ge/YHmdC99pW4YJ0/Vkm6aqq4HNF3Xjf2FSlgCHCoSnYrfZpH5L0Wd/EY5mYwFVN2nqk9udO0pFlwyLbyV2WQq9Pr9mmaabH+hpQYBAOqCcJ6h5NqnNr+8ZaPlK9cs/nSJLsmSKIgCKar/2mtaj340PRDUNv+4ptHx95t1SCj4bemhVZRyR5g7KgQAqFpiYmJCfPyuvXv37NkrCCQIIhExMhslJ197TRdd138/dDigBhomJhYVF+//7bdml12GAGGZrmmY8RbfvqLoFtHI0lkKAAAgAElEQVT+Ck8ZgsAYlX0ZhF/yrvAl619PyA2EE7Jc8x+sKR8gqOkWSVrS3fPar7Ypu63fHLP0L0rirdWxgNjzP869JSIR3d1E/3dn1SEzb0DdnmcPY4ASMxDtsrdyG691Cv5lnXXBPuHWJHZfMzOoGyeKPfpp30On8C2BXQXRTd0+f0At/5QsiQ6rcryg6LOj9kUHZSJ65zrWOoZ8AbXEG+AfMA09AEBtFeYzlER0lacDEdHt9Itr8xmHcv829+a/DHK6ol2uT9SNS3cuY6361LCjquw9os2mZNx1fWVD1aYAAFU74yb689q1/I+u115z+rNWq7WopLjL1Z1tNltubu7Rozl79uxt0aJ5GAMQkSTLba644oxP1eIAhmk0tpWs/C3h8mgpxX3Kj9EykmSLpfQfQukP95T/Gci9hZbNxyz3uAplOa7G5+fKB2gapRORRZaeuzLQrZ7+1w2O48HSD5Ue9QtEglNmE69S726iE5E3oP6aRxtzLYPCF6CJWyvykttuHdBEXXNM+viAPOpn8eoE1jJKkkQxqOkVxhP2JVBhFVgtsi+oHvBZJuyOI6LBLdjglmSa7ESJN6hpLIQAAHVBOL+UU2ZZi7H0U6XPNrl55E+fLrXGxjhS05t3ap2Qt3RT1uuRiHGhApimGQgGL2AAgLO6pkuXgoLCyp5t0iRl585dNputXr16DRsmBtXgzp07z2e8SAdgjOl6xX7lPAQwDcMtBa+Lyfkh21bhNi2iIFitVpGfoWTEiHTDKP+Cbw/b2vh+TI6xWMr6ztACaIbpC2q+oMYY3Vhf/+qWkm71/lgmraLMVbf5B6RoJmOFXr83oH590No6rAF0k/EAoiBOvEprGcU8Gg3+VtKYIIqiedqdcsK+BMqP3DSZKIokyn/7NcGrC62i6Z3riDGWU1DsC2p6+AIA1FbhPEPZ2dux/D+v+rIDEW24bVOFoZI73PabxhZNfHvAM09Qar/WzFR/WPLDB+y6e875LF3VAYiIfjqvAUoz/ETrb92oG4au6cFg4BbpxgoxwhgAoGoVNtG169aV/+fKL1YRUc87elQYqkH9+oZufPfd9zfe2J2ITNM8fPjItv9tv7Jtm/AGIKKCgsLzGYBnKCgovKPH7YZpmoZpGPrmLVsqxIhQAP53l7j8GWuTHZLeq6mn7CmTMatFvibBaOik5i5ijPlVrewM5YoDrv8ccjxf75jLmSSKNf8E4ekBDNPQdN1hVRKswoLrPO/usWX+aru3qTa+Q9AmMb+mewOqbpif/+b8OjIBin0BSRKjFHFVDz03KIokBHTSdMM49ZaGkVsC/HFBEDTdYLLtnWt1i8RS3KJDomNFnmJfgK+FUAIA1AVh/gzlshZjS/8YMpaI+s5/6Ywvu+zq23frNO/lN+9//glK7deeMXXNkq/n0q0PhNpRlQXg+v50XgN0/qq0oxUE4ZqvO62/dWO3785wSTFyAQDO6pouXfgfvH/6YtXqM74sKamhycyv//PfW2+5mT9y4OChLVu3tU9tF64A3HkOUDY5QRBWrVp9R4/bv/r62/MZgDFGjF6+cvs//tfaMFnayYbGH9RiXPYJHVVZEkVB8AU1f1DjN/L+/IBr+W+uh11L68UnWK3WUKZ+xgCGYehGwGax2BT5r62CA5toDR2MiEr8qj+oGaYZ6QAFJT7Nbq3ncjR0kMlYgccfUDXTMMtatkgHICKBWEDV3LJ0VbwkS0w3tOx8n8cf1HQj7AEAaqWwfobyJ+r700vUlZa1GFvWSlb2Nq7ltbdtN9iMsW8+NP4JatevbUD/7L1vbrn/iTAEqPo1kQyw9uYN1wQ6009kmub6WzcS0fpbN17t60Q/nSFGWAIAVK3ChldQUPjFqtWxsTHXdOlS1lpVto8kJyUZpvHV11/fduutRKRp2oaNG1PbXRl6gKpfE9EAPW6/bf2GDQUFhaZp3tHjdiK6o8ft69avLygoPD1GJAIwxgRBqGc1xrXe/sTmdtle+YYkb8sYNajr+SU+q0WWRNEwzaCma4axq8Cy5ojzm8POUdFLWzV0uVxOQRDO9dxYNQN4TVXVdcUix0iix2+quqHpPEBUpAN0T/JeHusr8gZEQSBiJmOmyfgvYu4pVM7bEghqulbiLfT4iASTMdM0TcbCEgCgLgjnGUreQl3t61T+n1Vo2+32/zGa/o837hszcuYKcnYYHJYA1Rf2AGW/kywIwtVfdzr/SwCgaryFWrd+ffl/ViGlUWNitPrLL7vfcMPuPXsSGzQIS4DqC3sA4eTXqAVBWLX6y/O/BOhkf5Po0Odfs2Hloai3NjdPTQi0ig02cav1HQEiOuaTD5YoO/OtW/NsV+s/jE88Vi8+we12SVJ4vlxcRYAGjiAJdMwnHyg+fwHePGUJGHRBl0B9h34ygD1yAQBqn/B/y7vsNGF13sO17Xbbyp1bnxnystzmXrsjJsT3nTUQoQCMsXW3/HL6B3fCHgCgamfcospOE1Zne2vcqFFeXt6ixVkJCfE1+OhY6Jt0hAIwxnrcflt1dtLILQFJFNNSijvGblx33LF2jysrEFVgxjOiaCpuIB1vpuSNjCpsHCu7XQ2tVmuNP7eHABc8AEBdEP7foVx3yy/n9Ppew56kYRfyg4PhDbDO/gvdcpZHIhoA4Kx63H7bOb2+Y4cOEUpyQQJc3bnzWR+JaIDyRFFMjqZ+Ll8vrUjTDuiGYRomEYmSKEuSxRJrsVgielYMAS54AIDaIfwNJQAAnBNJkiRJstkicvtyBLgkAgBc6iJwyfs8QgCAql3wTRQBEAABAOqCiPywOQAAAADUHThDeWkHAKjaBd9EEQABEACgLqhhQ9m2bZs5c+enpfUMb5rTrVjxRdsz3ZoCAQCqdsE3UQRAAAQAqDuE7Vsq3pmwmjZu2rR9+47wpjld27ZtOnU87YaKCABQDRd8E0UABEAAgDqi5g0lAAAAAADhSzkAAAAAECI0lAAAAAAQEjSUAAAAABASNJQAAAAAEBI0lAAAAAAQEjSUAAAAABASNJQAAAAAEBI0lAAAAAAQkpDu5Q21wPYdv+7YcZbbSLRp06Ztm9anPOTdNubR94dMeTXVeS4Tq9lQkXOx5QE4E+ykF1EeAKhETRtK77YxDzyzxXPKY4Kr/cS5r0R2t68wXVdq5txzKTThrU1lYc41xsVkx44dz784rurXvPziCxWPVedT7Tgunn/YSQk76fmCnRSgzqtpQ+lsN3Hxyj/+yfx7PnppuvZAC0dYUlU96YvmwMAXgnfbmEffv9BRAE6DnZSwkwIAnCdhueStH//v5LeP9Hzh8SscAhERC/y+evrbC77ddYLiW914z+Mjbk+xCZU+7t025uF3O9xQ/z9fbjquNL/jkSeuPzJ7ctYvuZaWfZ8aO6xT1Nk+5mn6jqxd9N78lZt/LzIcye3TRj41+OoYiYiYmvPdvHfmfbktx2xwzcAnn+ypvjj0mS0e2tK/V9npikojPTLt6ttTvlu9dn+g5b/mRPiMzoXGGAtp8MpWd4Xl379VuaXIfLs/+df4z8S7nv+/O1vYhbLH9fy1C96cvXrL4WIx4Yob735kZHfv2AprjU5bO9a8H+dPmrNqy+GAs+m1A0aPSm/F/sfPS52yrs+Yh/n2LHtzzhff784z3E27Dnzyr+nNysWpPbCTXtqwk9aBnRTg0hb6l3KYd/uCV75KGf2X7gml3al/39yX5+V1+7/3Fn/y3jPX570/bu4+f1WPE/mPfsPueHn2R1OHx3yX+ffpJT3GzfpgyoPuNdM/z9bONn3vzsw3f4hOf27ax58u//ithy775Z13NhczIgoe+OCl6b+l/nXSh5/M+vuN6vc5UruJc19r3yA1M2vl6sX89EnlkXyHlma3HzXpw+WLXkmlbWMe+NtWb8iL6mJlnk2VQ1e2DE9b/oGTQzD9xE/Tnn7xPw1G/vv5u1qccmTw/zZz6nf1739twZJPP3htaMvsL4+cYa2dunac6qGPX5p6oP1jkz5cMm9Cf9uKV6f/6nWcPlQleXwHlxxsOTxz/pJPZj1/04mFr6/M0cO8eC8C2EkvedhJa/tOCnDJC7Wh1I6uen16Uf8xGX+UnODRFRss/R7u3SZWsca27juyj7Lhi+xg5Y8TkaPp4LuvTXLZG17VK8mVMLD/NUkuZ3KXtHqB/xWqp03Su/Xp/r169OzVo2evHhl/20ptxk58+s4OydGKLNkTu/S/J/7gNzkBouCRz38U+jx6Z/v6dsXdpPu9w5rbTxtVFZGsTe578LaWMUpdeB/MzqaqgStd3ZUsf+bft+xfT7x75Kaxr/2lW0LFM+SCqIiG5/jRY4WatX7b3sNHtjh9rdGpayeYvWIN6zuyX2o9uxLV9OYhg6J2rCpdiafkrCSPvdnQ4b3aJNhlJbZ1j4xEz8YTpw97icNOWgtgJ63dOylALRDSJW+zeOPM13668qm/d42V/nhU9x3Vnde7LfxflqgWTn2LXyeiyh4nEpRYRSAiQbJJkhJT9jfTz/C+u+LHs0zP9qVT53y+bm9uUUBnjARX+4BJZPqOaM7roixVzUClUYlkR7Lj5Ew5202c++o5LptLSUhX0ypf3Wde/mrO6s9ybD1f7tvKeYY+wHbZsGcGzPvw/Zc/OFjobJM2/MkHr4s/wzZafu3onkMF+5YMT59ZNh/OVL9xhpxnziNa69lK31YJkk1iWtWnei452ElrB+yk/M9auZMC1A41byiZ+vvSzPfZ4BfTU6ynFB3J0VD27inROrktRKQV7/XKDe0yEavk8RAvXgQPzH7jc3nws1M6N451KmLh90+MXkZEJDuSLd7dxaWTOyV5WWWuLKpORCTUhfMeoatsGVIly9962UPj+nwzYfw4x9gXMlqe9kko0dUq7dEX04ipuetmPTt19o0dn76ciMqvNSIqv3ZkZ6O4y7tOzuxb/9SN2XvqUJVvD7UYdlIgwk4KAOdDTS95G4U/T/33tmvHDL/qtM/j2xr27KR+Nm3FrwWqWrBz+bTlwU53JFkrfzxEpu43SLHabDZRzduxcubMvT4iIrImp3U1l7+7dOvxgOY5uOaDWfv8RKISL3l256us6qgVePHxrMpVtgzPuPyJiEiud8OoVx5O/OqlsQt3+SqcdvHtmTQ5a93BYtUwSRQFEohOW2sVWJP73EhZU5ZszPZqRrDgt7ULJ0/e7TttqMrz1FrYSWsR7KQAcJGr6RnKwO+frNm1ZcWfe79d7sHSb+rZWz743H1TJ/1z2Mx8ir28+71jH+Sfsans8dDYm/15WJfXpo8eOF61JjTvenvvFMd6IiKyXnbfC8PnTHrz0fnHqOG1g554wkZEKRm3xowb/af3pLYTq4paPeV+b6/8FxUvOaF9gbSyZXim5e8rHUaO7/bYK9K7z44fa/x93D2t/7iuZm+cfuW30yY8NC476GrUodejo5vbidipa61iACVlwAujsmbMffaBfSd0Z0qn3oOHN7HTaeu6qjy1E3ZSwk7KYScFgIgTtm/ZdKEzwIW0aHHW03/7v6pfk/nqKwMy+p+fPABQAXZSALj44V7eAAAAABASnKGs62p4m2AAOF+wkwLAxQ8NJQAAAACEBJe8AQAAACAkaCgBAAAAICRoKAEAAAAgJGgoAQAAACAkaCgBAAAAICRoKAEAAAAgJGgoAQAAACAkaCgBAAAAICRoKAEAAAAgJHLNBmvbvmONJ3n//feLoiiKommaoiiqqur3+10ul8vlstvtVqs1GAzabLaoqChZllVVFQSBiFRVlWXZ7XY7nU6r1SqKoiAIsiybpmmapmEYkiQxxrxeryRJkiTpui4Igq7ruq4HAgE+EtM0JUmSZdnv94uiKMuypmmKovBRERF/JR+Vw+GQJEnTND6sx+MhIsZYMBh0Op18bFFRUS6Xy+/3G4bhcrlUVVVVVdd1IvJ6vSdOnCguLrZardHR0V6v12KxOBwOj8djGEYwGPR4PAcOHDhw4IDb7W7UqFF0dHRSUlJycjJPoqoqEfEwFovF7/erqsoYk2XZbrcTkcViSUhIaNq0aXx8PI9RWFhYVFSkKMqhQ4eys7NzcnIEQfB4PAUFBZIkFRUVmaZpsVjy8/OtVuu06dOH/fnPsiwbhmEYhmmaBQUFRUVFoig6nc7CwsITJ044nU63222z2RRFsVgsNptNkiS73e50OqOiohRFkSRJEISCggJBEGJjY10ul8PhcDgc0dHR9erV438HAgGfzycIgmEYfP16vV7GmMVi4ave6/XGxsZaLJbi4mI+y4wx0zT52uHsdjufF4vFwhgLBAKKoiiKEggE+KqXJMnr9fKhrFarzWaz2+0Oh4MxZrVaiaiwsNBqtVqtVr/fzxjjq08QBE3TfD4f31psNlvZqiGievXq8S2WMcZjBINBXdf5CP1+P99ydF33er2GYfDtSlVVRVFEUSzbmA3DEASB5+FbrKZpVqvVMAy+dfEX82ENwyAiWZY9Ho9pmnwQwzD45so3LbfbLYoiESUmxFWxo/3ztUy+TDRN4xsM3xf47AuCEAwG+ZotKiqyWCyKojDG/H6/3W63WCyyLCuKomma0+m0WCwWi8VqtQYCAR6PLxa+ccqybLPZeCRJkvguqes6Y4yPk69QvhkzxpxOZyAQ4DspEdntdp/PV7a6LRaLYRhWq5WvFJfLZbFYynY9VVVjY2MZY7qua5rGF44sy4FAwOFw6LrOVyvfg1wuF3/W6XTyNavruizLsizzUXk8Hr6F8F2AiKxWa2FhIWPMMIzjx48fPXrUZrO53e569erFxMTw6mG32xljoihqmsZLGV+2fNK6rouiaLVa3W53fHx8dHS02+2Oi4uLioriy9zn8xUVFeXm5hYWFvp8Pr64/H4/L2tlO4sgCGNfeOHvzz5rs9kCgQDf1AsLC/l+xGsL33H4lmaxWARBsFqtiqLw/cXhcBQVFfG5c7lcoijGxcUxxngVdblcgiDk5+fzMXg8HkmS+HLgO1RRUZHdbucbJN/8AoGAqqoOh0NRFMMw+L6gqirfPAzDKCkp4dWbv0CWZZ/PxzcMPgZeUvx+Py8sfr+fV2C+8Pni1TSNb/B8M+ZVgm+riqJYrVa+IwSDQf5KvrhkWebbCV+zwWCQlyyHwyGKYjAYlCQpEAjwgwgR8fCGYSiK4vP5vF6vzWZjjF177bU1PrSdEe5FB3VHDRvKEJUdknVddzgcVquV9yKyLPM6wmsrP77ybsw0zbi4OKfTyY/Wfr8/EAjw8qTrOj8YC4JgsVh4lWeM+Xw+fjBTVZUfCF0uF29HeJnjtUbTNFVVnU4nb5j44VaSJFVV+RGOH400TeMdMGMsPz/f4XDExsby5sNqtfKGhr9M1/Xi4mLDMBhjLpcrKirKNE273c47D15z+T8dDkdycnIwGDRNU1GUkpIS3l3pum6z2fgB1WKxlLVNvIDyg67NZmvQoEFMTIzNZjNNk8+Ux+PxeDy///57fn4+L7X8oMsXl9vtttvtmqbxpcEYK+uoeNvBFxc/9PL+tewgzXsI3mrwss67Ad6H8dUaDAb5MSMYDHq9Xn5cNwyDV2r+SCAQ4MVdURQ+Tn7U4YudHxL4GuTNqMVi4YeZQCDAx8PbLD5F3g3wjoQfPPi64zPCe1N+AOYHPH444Ycx3vrwhoBvkF6vt6zlNQyjuLhYFEXeQ/OekohEUSxrqgzDUFVVkiS+FfFsPB5vHXjDzV/M30HxQ6/H4/H7/XwMfK4LCgr4jPPjIu84eU8mCIKiKHx74Es4GAyKoli22CvDJ8cnwfcOwzD4PPJUfFfSdZ1vFXwjtFqtfLnx1/N+kW9vfO54H8nHwDcA/vryk2aM8cB8ifGpBwIBvun6/X4i4t0J3z3L+jxJkoLBIO8Xo6OjDcPgzYQkSXwd8WXLlx7fSPjK4psfbw6IyOl08nd9PBsvIKqqlvWOfJ/iK6UsvGmafNnyiVqtVofDUbYAi4qK4uLiHA4Hb5d5Z8k3AE3TSkpK+FtQvsnJslz2/sput/Pu2TRNr9ebl5d37NgxPlPBYJBvHnyD4TPF85QVIh6VZ+Mri1cG/q4jOjra5/PxGeebhCAIpmnyDpKXprJml78j5XPKK3CFFWe3271eL98UedGIiooSRbG4uDghIYEvCv6ug+9ufOfihZpvP7zulVUGXkD4NsA3PL/fz9+O8laSr0G+SImIF2FVVXljLcsyf1siiiIPJkmS3+/nNYGver7X83MH/MDB21xVVXkvzlttvmP6fL5gMBgdHV22DMv63bK3XgBQMxegoYyKiuJdHd/5+dtTft6Ld0t83+bnsWJiYux2u6IovP3i7035IGUdAxGVnZPg+AkDIuJv/YmIV42yosxrB39rzo9qfKK8GvL36Px9Nu88+DkkItJ1nTdqwWDwxIkT/JjE4/GWgo/N4/HYbLaEhISyPoPnVFWVF0E+ErfbzU/V8MA2m63s/Cg/JvFztCUlJWWngvhCi46ObtSoUUxMDO+cRFE8ceKEx+Pxer3Z2dn5+fl8NsuOFhaLxel08u6Bn08iorLDDz/dywuxw+EIBoOBQIA3W/wEW0JCAu9veIdBRF6vl58w4DNIJ3s73jC5XC4+F/xUn8vlKjue8fOaoigWFhbytkCSJN7R8qMRD8ybLbvdzls6TdN4JxEIBHgLyJu5shaHz6DNZuNLjB/h+MlCOtlaeb1e3lIQUTAY5Ac8foDhLSOfED/oqqqan59vs9n4+Vp++C87ecY3FU3T+EnT/2fv3cMtO6sy3zHnXLe9132tfalbkkoIoLQmIYhKG1o5bUgAAyooXuDwIKCIPglqg4rnYNu2thzxgNyaq1y021a56YEKYOtj4zl6OEBIQIxi7lXZVbvWXve19trrNuf548d4nVWkKuGW0nbPP3iKnbXm+uY3v+8b73jHO8Zg9swMSAERslgssPTY5mq1yk9zYefgUTCWIDkzYx54KTghsIOgYZ5aSPE8F7Qf+J5b8TYBWCx+/bo5EAE+QqkyG0JUcEIEE+D45RikcQkTyAwIcPN34Dj7hVnCbYN45sNak/zufD4vl8vgFRDMaDQqlUpgbkaI7wGnC3hlA7I8yuXyaDQCdsRxPBqN5vM5lCreGsPm8Vmx8jOr1So4dTgcEmEQecZJlcvler0epCCEdBiGlUoFTw9y1xyvDIfDVqvVbrd56vF4vFgsmG3wtxCbJpOpYCZZTuVyudvtsnLgyFlXjUaDg4WTClDOd3XQcbLh4zHVEMYctkEQDIfDZrM5Go1AYzDovHfFeZhGvjgYDNKuRbFYhEhWsKhWq3HU8LIYM0uRxYOfyYLZ3d1lWljtZoYjzePHcbyzs1OpVMrlMocqhgBwzF+IZnCosiyDIIBQ4N0xJ5wkijakz7rz76n9a//av85zXRiGkmuxWBSLRaADFsXM4KLAK9VqlYARIZ7hcAhDGccx2AWmBAAB4sHrFU+p+CngCY+cgI5oAyKkfLFSqYBEzcEBJCWnNihtsViUy+UgCMbj8erqKr+FZYJvIGgI/YnJNI8PglM5HM0M9EkolihtNpsFXfEXACgOOhaUz2xubm5sbGDYoAP39vY6nU6r1ep2u+PxGC4TogV6CQPPeVqpVMysWq0S9eMwxcADBBXBXC6XxWKRedbLAhnwOGmfXswW7gG2lr+kP4O9Nw9iwjsOBgPGSRBKgBIKAUsgIAX4JmRmZlggvsvPVavVs5inbDZbqVSYeUXTeCmsDRG6AEH8FoEwRgUcZwWyMHi/sEp6rcwDRIuZgYB5cOLmhB0VcxeQymazDE+IDU59uVyCw2AreV/81nkuXjoQXJIPzRKwFTTDT6+urmrA+XxeTGR6i7FrMpnM2toa20GkFIymOQYC07ObgAX8hZ8DBe7u7jIG9A/T6bRUKsEqybvArwPNQE0x2/Iu2AKsIlg6hhr7NR6PwUxAQ8QzQCuQqNaJUGwul1NcntHisch/I3TAG2dJAM0BMag+arUaqxf/ikBKt9vt9XrQbKDzxWJB5F1LnTnU4w+HQ9jcxWJB3HyxWDAPiqgEQbC7u1sqlcyFPfg8RKgZFe+UXcZpxjZUfID/Ci7HvderB2sCVfX6eJXFYpFzDBafpWVmHNGdTgd/cjqdlstlfBszY/IlKGIxiynH6d3e3mb2+CNLFDKYd0REHhC/uro6mUzgp/kV1iEIlfPcUrEvJpDNy4ZlPs+/p/av/Wv/Os91wQAlLimOOwaDg16ht0qlcujQoc3NTQwbIjMJpDDwmAfOO0IktVqNWIa0XFhQUT7gS0wmGAvmA/USTBXmBL8ci8XY9vb2MGmQSYpHY1b5h85rfZGbYEIwgYqW8kOchlzcE2MgHAOpAE2FNAo2DtNCmBvJ5tbWFjAX2o/nxRSJRZNaUTHTxWLBGU0kCBDAQ62srEATcprzyhShE1uDQQKUgzuJixE35APpGDShLjgJ6AfwExNVKBQwjQT4uANvGaMIgwLDwZKI43h3dxcYAc8ahmG/359Op8xq7PJKMKJi6wjC5vM56jTuA5JgccI/gVck5eQVY73EmALyRJvxstJB1bM0ALCb5n4FwTtilBhC1idrFWUCj5D4df4tBhaR5gG4IHYcGDedTuVyFAoF8CXIQFwXXCw2PgiCUqkkFhPxJfcPUvJBnsjM8A3ghuHzFBCAJWXqWFHADug6UCNjJuYrJSWjYtsC1MBA5uQoCx5SisfhTTH/oJBarYb4JM26sT0hQVmuYRiura3BicrzZBNx/vT7fSAv64GFwQ5lhTM5XKdOnWKorDToQ2g5RsU5Q9yZCSwUCjCanDyFQoF9ByaGgTZ3/FgwfBHenR2RuIaVYbPvzKEnLqu5UIGxMWm1Wg3QCbLkxNAr4IKq5LUOh0PeHdhX0XZmjIMuduEQ57M2BffnnGEFQvaDrVkbqHh1YiOiwLNlnUBRE/4qFouj0QjtgZYZC48JB46Lb+bxvxJj9jW6BoNBu9Ppdh7mX6kAACAASURBVLv1er3ZaOD271/71z+j68JkeQMpyuUy9F63293e3t7Z2RkMBqPRCAtXrVaR72BsiPcJAkIJmBm8WvqAm81mg8EAwJHmxjA2EIFYL6LJ0D/YxX6/j8UlLmZOt0ynUxR1KysrBLOAjOPxGAvB3YjOm/Nw0FFmBpMHvzWdTnu9HvaVA10MHKY0fQG8isVivV4/cuTIxsZGrVZrNpuQc3AMo9EIbrLX62H4gc7MUrVahfXkFzmFGRWgAaAM5cB/5dkJk0E0WgoRSiCIVcDS84vVanVjYwMmz1xEBXomVwByjkcGf5tZv98HzHHDbDZL0glMGLYN8wC65QO1Wg1LI8yNcRLNA/OX5kf5t2YGc4spAhAA+uM4XltbI8Vqd3cXNwCNF0gl6/kr3Jb7Y5ZYGJKRmVl6rfIxRsuz473wFyYWy8oLwuiK/8PcinFPB9DPtcskz2Cn8A8NmwubKiQBMcZk8hWMOkHS1dXVcrlcKpV4KBg+0CSjQjNnZmwoppfnEj5g5LxuFsZ4PGan87oFlwUatBMnk8loNILFT1LqFIgoLVrofD7GdxXVJfwNayWiFyZs5plwKysroBYITlG2wlIsHihbHnN1dZWXgnyTIYHjx+Nxp9PZ3t7u9/s8C04mvo2ZpdNN8GxFKrPRgDvr6+txHPf7/TRLyk1YG3EcM3LOIol0Y1e+cqKms3bMrNls8kaYJU1CJpOBHOVdSHoLf1kqlUClOhZA0pzS5nQ7vkqakmdCcKi0IFmKWvOQvvLqOaZyuRw+GGIG8B8CKuZBdCPHLASBpEQKfVSrVQQGOMDpgJViFw//dcutt/2/n/p0u9u/6OhlO53eJz51y2duve18Xxh/7mXPeuozbnz/1jz1l+f9/GfHX/+xfvnX9N53vOjF77p39tA+/RAf5J/w8/6LvS4AQzkYDNjY7GeoF/TphIqQ1wB0FosF3ADkB1E/bABHM1/kqOKMxrzxd2yqYkBwDFApimWL5+NHOZh0RHITwnAKj3KIA0YhohAMYRH5CmwQMZrxeEwmOFwX5oEDlNOWp8MeAxqwagCRWq0GTCEUiBlIkmQwGJDl0+v1ENuZmTx1ZoMfJTFIE4VRHAwGkDSYSRSZoHDUCJgZid4IWSaukedbzC0mSjg78fgvH2ZaQANwA3pT5BLBhmY8Z59BEmpnABhgQA9fZw6J1zMSSGJ4ESJ9a2trBFVFrPIIML6ZTAZWGAtHDm+73VbKEcYMn4ckUCCU4uAsHiXfsABYLbxEoXA+BtJCCQdY4bk0GDYFyRnmEWr+oQcHYaQD+ue6YK2YIsYD24rNJv0LWpcPS9SoCWSvKRxfLpfZgHyAvJnhcEiVBv7O3ZROBF2EqUYKMp/PB4OB2CApEPiH3iN0GgODSVXKhTnLyKuEFxSKxTNRxJa1BLIsFouxVw/Qe5GmlqNGQBPVAX+Bbl9fXxfVza+Enrm8ubnJS1lbWwMlj0ajRqMhwLe1tSX1tubTzCDmcT7NrFgsEoAGYppZp9PhnATPKb1Jm7FWq/FOFX5JLy0B/XSInPUgdjZ2cap5ygsbPAzDXq+HP8+q5m7cYXd3d3V1lVgHAs3JZFKv1+W14kolLqiFngRBMkLOWIkiWLRC7aPRaG1tLXSBrxScHN1EMMCaYH3QpPLAWEjsGk5+gg/KW+fw10YDVj7onvo6XZ/45Kc2Dx76kec8l//7xCc+0cxuvvnmT376lsc/7upzfq1w8N+EH3nbJ5/0v//r+j/t+n/z1l/dknzzzx3IXeiB7F9f5+vChLwxvdj1fD4P3MFgcCxCF0EzwDMhjYKMXC6XeNJwYwQ4MHJJkmDAQGDYUfF2MuoZrxuCJknJB8q6IGgLBQh7wRGM7Aa2UnznYDAYDAaNRiOfz5NoAjmBf0xQHquARQEDEdwnZINnj9g865VxRDNAyC2Xy+3tbRSTfJE0edAqcRyQx1lJErFr9ZBemdNp/X4frAauymQyMMRhGFarVWU5EMNiWkhtAZeLTFK+FJSJNKzCbaVSidhrWirAS8QNII8HwyM8DargblJHEMMyDzSzkBghDgCMF4Phzjw4RJpwNlPB2wd5hGFYr9ehe/v9Pu+ReQtTeaCMWdMrCA49w+sWwQb/wbrlpWO3LCV0w+JizHgczG063YEVC0oLXbnxoLsMyaAip6xewse8Ap6FgCDWHbhPHajZbEYoEw9EcXMwB14NpKCAJh/GMQBSaB+Jb2N38JrSsCMIAv6h/SvucDKZsAZYhKhfcHsSL9+z8LRraDNGwtMNh0McJAEjqT+1F9hNimkwfhS6zAxIEeQkn3Bvb69ara6trR06dAgQI3oPv6jf71OSpt/vI3Hh73w39IRuwTUV2Um/X44vVSdg5TMhIpiZQJxDPAEiHrxo9i8jZEFK0QHWhNrEmcExIGFIg1FKk1hbgg+rq6ulUgkPgWOcj3FRoEOYjw2+XC6ZWJwZ4B1eK6+jXC4jA0iSpFqtJl6pbTQawVlqfnTgMFriNoErmKEkOAE4S/GatNeSlBAl8MDFnXfe+YhHPOLLMmdf5XXLrbdtHjx03XXXnbWpr7/++mPHjt1622evuvKKB/5mtPZvfvzKd73uD//hsT/+6JUg/V+SveMfe+vr/sv/+Pu2NR/9nT/80h+/9uJCcNa3k717b37Ta373L+8aFy56/JOfeP+ff+Ylb37VFUWzxc5f/e7r3/XR207sFY9++w/cdOMzHr0anPOe48+97MX/+aonbvz5n36mlXvEdT/5M9fc/843vO/T29lH3vBzr3zB1ZXQzBbtT/3V9NE/dTA//tzLfvItj7/24r/82Cfu2nvkf3rXb3xz9CX3XP7Ny5738ttGdtszn2KlK1797lddUYx37//EH739d2++9Xh/uXr4yqf+xM895/HZv/2Sj51z5PvXw3ZdAMemUqlgFbBkym2EU+SsgVdrNBqcjMIT0Gyz2axUKqE+TFzZBhOA5eA0oWxHs9nE0mPmddhxEhE4NrO0N6+cXzNDuah4NNk2/G+z2QQyhq7mFsiTDea/avz9fr/T6fDIu7u7yPUKhUKz2Ww0GtVqVSydtJgHDx687LLLDhw4wIHb7XY5bbe3t5XWyiMELkKHvJFtC1wVZ24+dQEEC4UCCQQo6pgE/HsQJzYV3oJwpxgy0D8oIYqiWq1GGubm5ma1WkWPD3PDx5ADjkYjmSvzLBZB+TiVtpl4EFyJQcSL4RFZSKoRI7WlJlyAg9kGfIMVKDXVarVOnDgB37a7u9toNMgpVsjVPD0ZwARfJSJ2Pp9XKpVKpaLCVekngonkIjMDOpZo4HA4RF1AdI/1zHpLUhWdgHHIM3AYlJNx/o3GDVk2eEGTyQRkD9QTGQxK4FsYZigrzDNmG6wP5mNg0O2R10klSY4dqhxkRfa5uV6onpFdD5qMvXRDEAQq7WQuWDSvnUlNrsDTYpaeliENAEA58MoPAEqwFK6Xpco/UeKRkcy9ZIHuw6EBnOJYkEgRL6JWqz3qUY8CUjebTf2nlZWV4XDI6yMmA5LT+SAtIB/mPzFs/B+mTooLZSMxLTha3DOtBGXXsLVZ+VlPXlT6lCQi4Mic1wrV5DOlCr+w/ECQSZLARvN5KFXJrLXs5aqxPQHBCLVB+exldiULe+H517lcDtobDTQ4FT8B+YGeFLYSJgLGVwhVTLAu1jxhH3gKRsiBqaojLI+H7RoMBq12+9prr40f6Lr++utPbp8ejkbn+nr+4mf8+Dd85i0f216c8efJne/+1ffsfMcvvP2973/7y6/Z+b1fefedk7O/unfne37t90fX/vt3vveP3nTjlcf/5L4vfmJ23x/8hzffc+VPv/73P/ieX3tm4dir3nr7ODnvPScn/yK57lff+d/e/MLaX776FW8dPvlXfue/vun55Y+/9cOE45e9z/3F+NLrjhTMzHbv++OtK298/e9/6I9+44riA92z+M2/+e7/48rNK179vps/9t5XXVE0G//dq1/7/1Sf8Utv+YMPfOgPfvtFl376jW+8dbD6JR8758j3r4fvujBMuWwPEV4zI7MbY8PhKGvKtbe3h0kgAYVQL0XCdarmvNI15sfMiHdnvZYhKISoaLFYJMjL+RKncmYxZlAIWFZIREiOKIoQ+Sl5hXA2Bgn5JhATUAhrBeSSkBG0B8mKWhQHWiiNs359ff3IkSPNZpMAXBAEFATW11utlnJ9JCSFEyVqJlOB9BNYycMyNiVbgB1hCqHHqNnEi0AtCicBEYJ1EUxnkqXoN4cRyh8nhcK8UrGYOcXRzB0JqcHQA6StHSaHkeOTQPZgpFkqu7u7eguWqoukjBZkYVB0PBd3gG9DYoXkS6K3pacfLRYLeQXZVIEkARdMMgiVgCZAPJ/PD4fDbrcL5FKGMi9dPhXqC0HGwIu2SFDBppDrdf5r5sX/GBv3L5VKjUZjOBwGQYAsz1I8DSuH+dFL1OSnh43AjmEjkJDc2byIDF4Kr48NyHqDg4SyYqGK8GbNsKiUVIQbqUGCuvAoLCWPBmWWy2VIdDw6oBX7mnXFxxIvVCSmUwtGgE/rELAoP81cSlitVnFyWN4CsgAgFXqU9oYXyu8CiRgMwh7ehfSC5qJb5ahx1KRZ6iRVlYyDhZOQ2wKFwXCMU7PNc+EIAeuVL5WuIaAsMR6BAyHtJ4gfVSKR3OnhcAj6B8fzgiBiuXmQ0ilxns+8JjnHab/fZ1Hx1ki057ts5MFggNKXm7MkQLc7OzscOHjvjJP55AFjLzKVPiJwTR+2q93p1Gv15NxXo9nc2dk55/eD4jc999mrx37nk/1UzYfpyWOfyj79xU97TD2Xr3/jDT/xPblPfWRreuYXp1s3fyr39Bdd9+haLl9/9FNf+P1H8l/8+7GPJzf8xNOvWF/JVY4+6bk/VPnbj25Nz3vP1aPP+cFvP1RaOfi4pxwqrT37md92qFQ8/K1PXd/7m97MzJLB7f+9d/i6o8XAzCx/yY8+/7sfWcsFD3GcZlZ8zCt/899971WHq7lMtHLgW5/5w817/+LU3pd87Fwj378exuvChLyVaYihxRuGA0N2DY/VbrexOoPBgKNEXAKRC06EOI6heVQ/IgxDVUBEk0TtCQyV9G35fJ6QivhLhqcjRmFi6gSZF6gDh3EkLZdLsmHABCpXqSRrUYawOBzNcRz3ej1GCKISfg286goEQKPRMDMyi2VXGAAgBrseeFAbumg+nysqjSMehiF/EZ8hFRHV8mJXplJgpVQqKYdGQTpe2XK5pJaTbBsnfjrbiYddeuE3wkkypYBgbPbSuxwBL8xNFOFR2BTJA0BREJ9AIkwCqAt+GvmdwIfyokDMYvhAijKNKA5rtRoFjNJQGxsMsFZ0UmJQSEcwrsywFAIC07ApMl3SkyHsMzOpTlmNsqzE7IgVsuyDVPLEea65l8HXLJEki9uALI+3OR6P4XQhk5T6gGKB54KIAg2wg/BhCMLCOjNgsfK8LMDBaDSCDANjURlb/l4cxyJTl971JEkS5tbMVAZINZ4UXjfPIOZWPLuAbyaTOX36NNFPfoU3ArvJIYBfp0gFq5p3DcEGIqfO0aoX1QcTUxhh6VnbQRCMRqPhcFiv1wFYOzs7vNC9vb1SqZRWAvDSQy+pLUaN2WY2wM3MGzuRCSGyYV4SC/Kb1QLfyXyyg0KvcM4HYI4RyeDSE1totVryiOQ/RJ61xk+zHbS/2A5SLqIawptip2ez2cFgwGsC6fKMSYoJLnh9NPZRNpvd3d1FbgGaFEzXxXGNwkFpN+aJ6nhci8XirM8zwsFgEMcxXKaUV4l3z3qYGcput3vRxRcn51awHL3kkuP33nPp0aPn+kDU/I4X/y9//B//6M6rfsj/tNg9uSheU/7iXshWLi8ubpsszNJZfIvdrfnqd5S+CAAy5cvKmU+amS1G93Xv/OALn/EOvaLiFZOlmZ3jnmYW5Oq5wMyCqBBFuZr+nSxiM0uGd3ystf7kR5R5gZnVw6uRxnDOe55xxaPP//Gb3/Xh/++O7f7eIkksKF2596U108458v3r4bsuTGFzHGWZdkxdxouWQ2xYijUBaC4Wi3q9DnkQeGGgxOuHQe1wQGCrcHnNpTZLr3iXeLoAFldCvTQgMIcg2Wy2VqtxmBIZBPoQDIIuZTxT718ShmGn08FwSkt+loRxsVj0ej3oRmVFpMktGAVVjlAU2FyfDpFABC2KIvJyQIHYWsJD/BYlBhde3ohhAHlVPoORdLtdbFvgOjASVylnDWhWriiWElKTACjWFzTGK8D2YOGY8yBVSp3waJIkBIUxnHgXPEXsajzsE2TVzs5OmCoro6gfL5HlFHhRTByJyLu6iaJotVr1eh0qS4moQiSEzGhVB/fJX/SLPPhgMFC8FWAUe1o6nBNmEijMLPHdhVf2DoIAc4jvIXQCe8rYll77k0ljSA+a5U0BqeFwiKOinPd+v1+r1WhAF3t3x8hLuibeGjF2gV3kLYWEcjRL6YuBKXWGsCm7j5cO0KReII+PsiL2LgOcCUvvgig2UapKM1NaNAs7SCWdTL0alMABWSMzL/PJxbtut9tS3eHQzmYzEsM5JUDAPIhqLgL+zPOl6vU6hFapVDp58mSSyowZjUZpFMiQyD4EKrGwK5UKAfo0GgbZSwxKTp52q4p34mVtbm5Kb6McFFwgFp55LCL0XBzOAcIp4/F4fX29VCrxvMqqjr1yGf45pxOkLxuZ1T4YDJgcViZ+LyuZLY/jHbgu01yJgYCSLYyGh3OMY4pUOVLpiczIcQ1coaHs+6V39mJ4zBsDTrz/FoRC6N1B4SzxS2lXy8+dB9h9na56vX7fvffaNdec6wN333PPgfXmee+RO/w9L/pXP/e2//4kR5TR6sHM+B+G86vLWTObD+4YZw6unGXqM6uHspM7R4uryxkzWwzvGoLkMsUjjUc94Q2vvmHjzC/sneOeD4D/zriS8T0331+79hsrcgj+0TU41zgXZmb/+Cqm97zzNR/OPOcX3/QtF9WLubD3f//MTf/XP95fHzvXyPevh/G6MCHvxLuKLZfLdrutRIfYq9eGLhhnq4cuDUwHMYlvcrotvKTLfD6ngSEWguAmd8bkL1N1g/UxDN5ZQVv5uIkHVUE/gcutUFz1ej0VQ+HgVoESafViz2BVggvaO1SYlUqlWq0C7ALPYSeatrGxYWbUSTHPcGSQRJEyXlQZZSoHrqJ+5vo/Rs79xcVi16FIR6ORMLpeEOxFwbtc8O5yXkKSQ1zcErafmzDDxEOFh9JvkG9JIUc568AzprFJIs+wQ3p2oCqYlRcBdse0EMKbeo3MwHuudLtdEAyGXEWCoijCw8FKtVotZHnK01p42zq5NywGaKTY80Oh6FC18oxnlVbNeul+OGD4PF5N2tTxf5MkgdcBr8iES3GYeI/y81+g88S1cVr5w+EQC4qrwIdR9JpngSiDJOc1lZgZjL2louHmeRjmegYJ3ZQLpYXHe8eV0rfMTACUj8092x0aMpeq02Qe5yW+CcpXUnP6hIHLD1PNDBE9I+ZjH029jVDslWiSJGm1WoFL/Rib4uZcQRBUKhU2CFOq4LJ5acadnR3FB8z7K5qrNi1VR11JKuk7CAxFnkYTeZX1hecvwkGq2EKlUlFcQtpuvHclq7G2WRhIPzmjlIkYeN3HxKtWgbBxqinbtPAaCJwDS09rm3sfV+hz6EDuj+iCx+TYgZVkeWSzWciCKIqGwyF+C96XeT2js94+jgp/393dpRYbZ5p5/9XYs+jSuXRLv4iYz7xUsIb9cF7NRqPT6cTnvrqdztra2vlvEhS/8Ud/pPShd32mzxYpHLz+6tmfvOXY7d3ZrPt3H3rLh6ZXX3forNMif/D6q6d/8vaP/n1/Nut94ea3v/8E0eH84e/5Tnvfmz54y9Z4vpx27/7EH77hDV/YfWj3fKBr78TH7il+1xW1B6oYf657hrlmNPpCZ+bK68Vkabl8oVAIZzt/e/M73nEHiomzPnauke9fD+N1YQAlXAhHkjYzpgv7IesrNMnRhlxm4SVCUAWJFiJWvvQccOSSku5xRgepnD7z5AnJHCkmV/BalZzFnJVcIhEBBEScsdn8Sr/fHw6HnJWKbelZUDf2+331ZoSOBZDlcjkIkvX19Vqttr6+bmZ7e3vdbrfT6dAAmqA2JgElUOjd1WAfgSmWsvHmEdjYq39nvDF3vV5fWVlR7UloUT7A08VxXC6XGaSeyLyhUeJpy7BxYE1sT+LJxeZdWDS2xOsNYVbzXokQ3MxZD10x9VaBQMY4jjFOAsQ8IyQxhgqxAb3pYi+egjwAbWW32yW6jaiRhG4z293dPX36dKvVEmkKiGHepBNIXE2I56CwGssy9LqJWic8i3JmZeOlxF164cnA80yxo+R+LVPlVBiYNlH8YJ1ywNao2YSwRTeiDWDeeLOBV6qC7BF+AlIgaYi9RgFDAhDwD6LM1ENQxrS8tThVf153CDwZSwMT1wWzBTYVlNTkc27EXtNAEXANDHjHU6PM487IOaRf3Eu1ySl4XXeacpHv1Ww2Dxw4IEEIlDxQrFarIeFlL7B6Bdz5N+hKHLyWSuA9NtG9LD2PJP36GBjdwqgjK8aXiE2Uahqko1JlyGDEaQLJogq9QFXeG16nvzgajXq9nnwVDgEFJfiWSg3oTMPtF9w0s8gz5eWgQrqLPmQjqEQo3Dkg1bzJQrfbhTKAS/5S4pAXxxru9/vUWKAOGutWXn2hUDh9+jSSaNY51gH0OU8VV2LnPswh70qlsrm+9pGPfCR5oOvYsQ8f2FwvPbisM2w84QXf3Tt27xfx08ojn/9LP1r/+K+/4Fnf94L/9PHGj7zy+ZevnP2Vlcuf94ofXPnoL/+vz3zmT772M4efdnExFwZmlrv4B375xm+8692/+Lzve8azX/ybH927+vsvWXmI9/zSa7r1Z1/I/evHNR+YNDzHPQsXP+vf1v7kpu+//lk//9mx2cplP/aCb73nrTc9+xnf/6P/7m2fP/C0i9lJZ33snCPfvx6+K/j8bZ/5Cr72r6587Ff8k694xStkGNjb8/mcijmETVdWVhqNxnQ6JdjKBwiK4ZVyjqhKCNgOCIIRklSRfNU0a4JFXHpBb1R3Oe9HHHpqS+DaO0497iw9HwGayWTS6XS2trZms9nBgwcJn3EoizfFNJqnm0wmE1ojEqs6cOBAtVqt1+vVajX0vIFarXbo0KFKpXL48GGCs71eDxikJwWwdjodJd/AtWBFOJoJRaFWhNhjSGY2m81e/Vu/9WPPfz61ijiI9/b2yuXycDi8//77iVjFcazh8YKYT3Ak+StAjUKh0Gg0Dh06RGlD3kW3283lciQDYVypWgfJR4NsUEguVegHG8Y/Yk/VBOKALAEoUkxiAwSSBDgAxzghmKvZbLazswNsok5Tt9tVNQB0fuA2snP29vaGwyGCBzituTd2l45WpKwmkOVBGfZ0+rD4b/hR9gKRXOhkLGjoTQsLhQJwjSUESku8gR6g/BGXXHSejfazL/+FmXfewzfY3d3d2dnJ5XKXX365ShBonPw0lVmiVE9tIo+MAZ+NyQF8MDAoOkKu4DYstLLQst5TivHE3q0KqFSpVLLeVpulkvEm73BXvHr0JwvvVbj0ovpmxud5I6ANCKfjx4+Px+OjR4+yztHP5bzBOmAi8hqNnB6tVisMw/X1dQpJ8oLAoIPBAML+8OHDl112Gfrm3d3dTqdDkxhyRGD4gLx6FjMDWmlVsLv5XWE15iGKona7/ZrXvvaXX/nK1dXVU6dOMRVhGCLKlOay2WwWi0Wi/7goQDdOAA43dhMNEViEuF7j8Vj1z3O53Pb2duB592nvMefFR81rkLHRuBLvwMSoWMZExhkkdGaj0YBuR+LJ5PAScSOHw2Gj0eBAY71Vq1US5qQ95Y2LC2dgFG/a3d0leF3wrujacfiEeEqBJ+cpwMLPWUr+ccUV5yjT8xVdD8XCfvLTt5Srteuuuy79x5tvPrY7Gn3L1V+5qX3o1/z+37/xV0cvf92LLv3aloqc3fc7N/768hdf96JL9ktQ/ou4LozaAHvJ2cRRCHpAJK5IN5ndM+8cKM7DPG8Gli7j9dhIzcZjJmQGdWdfQk9KPRm4UjBO5SZjWdHoYJkALkEQiOeTxVL9lPDM8tEcrNT2IzzHyME36+vr9Xqd0pVppZo08s1mkx+azWYnT54kLcnMeC5AWLPZhKVLa6QAc4mLChQEVIAbkob/GnmqCr9OJ71yudxutyXwJwQGmhQUAEBgwrGXoZf8iLzfmuqMgAtFPk0mk9OnT0+8qKFUDZz1MCLQzHnvKJ14m2YekOxRBKaqcAmy5KFEoEKK6N1hrXkoMVVSl8rOiVHjk0z1YrFotVoExxWwhrSLPUMZ6yWvI/KeQIrjK5ioNBHQANMbeN1sGFAUh3Pv58F7FDk0T3VRf8Ar9jqOMvx8hey3pRf8p68gE57NZnd2dhgJ2UJ4Drz0gjemizwxiJYzhOMplIPizbxQaD7VY12DR18Bvad93ev1sl4FlgjvfD6v1+tCrlEUSeSn+WE95LwXkbQZbPA0N2mprldwhCCeIAiyXqqQ5YH3wtoATQYeNmEvlMtl1YGC61p4nrI0OXoLwOL19XUOHPocht71O+elfCwVNjEzFaQE+ZHFTFmrrCdp7e7uUo3LzJhMKZhDF3OL6wq95VjkLebNI0WBt5apVCo8/sw7PYae8Q2MhooGcfJ+cWygYPkLlTd4iZPJhMALZzVTR0AAklIinDAMUTAvvM45oDCTyTD/nI3UGGo2m9PpFI1Q5Op5Tv68t/xBLYqTw1qdz+e1Wk1FKoCYnBJ8UoT3l2/Qvtrr8Y+7+jO33vamN76x3mhcevToXXff3et2Dx3c/Pqiycldb3v/8Sc95duO2F03v/Xm6ZWvPPg1R325i3/szW/+Wt90//qne12YTjlRqleEpIfgAIwE6QhAB5mcT+YcTQAAIABJREFU8XisnntCh7G30QP/cWCpkxtuKDQDh6M5QxaGIXUuOdDxs6MzE4rTSvb0cTn3ZGHYCEASR5v08vLOEy9bqHh9GIYULyRSE3kBcNKKkVRSSBk6U1ofDAYcEievcpsgYom/c5+ZF00MU8VQEtcmmseaZ16BCCteqVTIz516KcFarcYbMTMwnD42n89Rsq96E2oFoUg46Pf7ZkYglRI85P1QmW8ymaClk8STwz30ak2YnOjM2h+gydgVXZFnoQbeAGk6nVLRk4AvEA2gU6/XkQ8mXjwI7pBXGXiGByFULBnyLMhy6DG9KagOMyMbDAsXu/gM0gvBHPYeLiTrKckYbLBRv9+v1+swZ8VikRKGhI952DBVfg9ko9or57omXsASbAHuWVlZqVarc28Vk3jLTX4XB0wCSqAP/8s8Y54nXj7avCSN6iYG3r7cPIicuJxRL7FarYptYheTPMeLwO1hwAhRwN8wTCzCPW+eZF4ajPfIMMBbrGrAKwko8Mo4AGQcK3k88E73sFxwosKprE/Wdj6fbzabhBQkrkDAx5pUIrO5apNH4FhIvAwkpwo7EX91NBo1m82lJ+dxB5aQsphxh5ZeMsJSnT+Jg7NogXpy2gVb2f6kagmm4xUg/1W1hMh76iBBwXMm/U4ujZ4x8Kr1cy92q0MvdMk4ezCO40qlMvO+uIHngalDkiA188P/JcWNtcopV6lUhLNXV1dPnz4deaInr56tnXiZdzPb2NjgKXjR0gglXj3KUg17Hv7rsVddeflotLOzc//x+w4f2Ljymx7zECLdX91VOPCdxff+9ktfd/dw9dInPPMXn/eIC9nIfP/6n+K6MAwlsU5MF38h2tVsNvFTiZctUrWvzdvbKPiCRZFNMlftAENVFo7/lD4EE09oEN+GISewhW1YLpeQN/yd8AoxUCm9yBfBICExJBLHQRx7SaN8Pr/w/O5ut7tYLOAV+BXRezBwApQYkt3d3e3tbSJT5vX5sMpi44RIsLKxt2DRaa4JDL1iEYZZuCf0RjiKbcEMmafgaG5hDbNeaNrMCB8T4YXAEM0AOoE04mHjOFbaipghiUGprcNgRJuBDyCtecB+v79YLMg07/f7Kysr5BZw88AFjspeMk+rl1YPaJV4g7u0sA8zDHBPUqUxWXulUknCO3wVc2IJPI3wIPbqNsyAKJY41QKOOYGAFFsmumWZSuO1VKdjLgGF8+8yhgfujL3AISCYxQajz+KUII+pBgjy7KwKiCi2LbOn9F4gBapBc0ypx6eUoDn0ZJHQ7QacxHvXHWZeboZL6R1AujiOT548yRdJEAHvBl6OO/T2SKhjF4tFvV5HPzAcDoEd6giQ8bpUuAGtVms8Hq+trbGqQWzMFQCLoyPr9UdZSMimmVskvMxYkEqvCbxQgF7NwtP8zYscgfv1Gb6OICGbzbbb7cB7enF8wf+hTobCF42tGC5bWFuSC9in+IDKQYhlFCSdeXfshbeAghpkuaJTF+WJA8ODi/rlhc6835KUG+zHwGvmx3FM8TUGkKZRkdAEXgyBSlVLzzrHwWs2m8hpIs+045NJKipFMSywO6sXJ5kB7+3tNRqNh19Dmb7KpVK5VDpPhaCv8RWsPup7X/76732Yfm3/+pdwXUiGUgIvog9wPFQzIY4ZemWQKNVldepFKxXCk0sK0pKBBOdlvZhLGlxi13XW6BAEjUFuiX3kGE28GgiHTpgqaQahMveaL51OxzxFceE1kzmdSTYkZEb+EMcifAOkF0Tp3t5ev99vtVrb29sEPYFTitvOZjPyczHz3W4XKECcPfHebuayUSwuiRqJJ5BCPcJFUQIJ/ZPyPSm3AX3F46hZNtI6SvEpaVfNRbDTlAjhlTHhEB5Zr7xjZv1+X/E44Qkzo47Jwi+0DdhFJlz2D9um9w5KA5uSu8Ak5PN5xJQqj8xg9AFeOiSQvJfAqzTzX6GgcCdYbM1mk7CmeVHAIFWlcnZm3mjomcisSXZBkiQsexCGUpGYdhnXwHsZk92ffEmmwlkXdpfFwMImFQmisdPpwLMC7CJP8DfvzgJYUa0AIIUUnGZGZUpEKVrk5hWyLFX7U5gPsi3xGgLaj0Qzw1SKyWQygYkEROZyuXK5TF9Qfpq9z0be8zaGxAo0S9pW8/k8nWUM0EzrMdg4/X4fEo4tM/UWPube1+rqKprgxBOSRqMRUAa+XPB64mXnYy8zlCQJWIflKpUI5CXU3cRL1vNJ8/I3qhQx93q3HBTmwfGzHGbgEWuVK+N1c1k8zCrAEc+5WCz2+/2l12xiP7LwmKKllz5gDJy3RJA51vr9PlpqHAOOvkqlwi5TwiVPx1mHnymVC4NBLTqZTNBAQ/+Xy2X2xd7eHiC4VquxW9fW1nhTsM7azrzKs0jH4XAIQS5UqtV4AenJ/Wv/+p/jujAMJWcNAjUzA39ACyFP7Ha7mFLsNCCGw33hrc+gc/r9PlgB472XKl+c9Q7R0G9YRAbAYYoqn0OqUCjAdiQudBsOh6SbMCTonF6vR23F2WxGduHa2lqtVuv3+ydPnhQlBp4gQIMZBsmFYQhortVqRB7h/FBhVioVGjCGYdhqtfr9PtUlMQPg3Zm3EqYCInfmQRSrYqiYYTiYhZdVSpflA1sQQSMejWmJoqhWq4G6BPWgHol0M2DObsWzIq8nivHD4AFG0QtyfJOLwwhRL/AqzQktnjfvTRTjVJNAfov4lzIAFl6nae5N2HihSy8txBth2YjDxlFhwUjrCbjk1ReLRRiRhSfMhi6oFa8ZpKqZWoqqzHpddJCWShuyLFkGsNH4QmBxzD8QWcFfjVPcj7ShDwooWXhYcd4Oi4HoKvNAIpHEZPh1IggVaTUzdGY4RZE3fgSZsaKWXqcJw084UmJiwFzsJbHOGvzsS8q18GbBH9DzrHN8CfwfgB2YQDWYqEuPTrdcLtfr9Xq9PvV2TYkrQHiJvFDmmZMEcSSBVBAbU7Hwfqpra2uVSgXhRDrYLRlD5NUJFl7KPpvNUpJJHjJjYK1y+nEf3v7e3h7yHp5aVKWZ4RHlUh2/yOxh0sDokdfAIj4QRVHeO4Xy4JJbMHXgS9YYMRYxyhpn6MofvE0GplwZHlBVRS0VLIKPlOfWbrfldE29bj9fgRTXwYuvqwg75SnIMcKXUKl85L9CuqhczHlfZUQpdjQajfL5PL6KFp60B0Rm9q/9a//6Cq4LVgI0zReCFaDu4BsIYiotY+HVqqGIsp7EraolnObSCZnZwpumLBYLCJgvTWJIvHjh0muz8UXsAV/RT4/H4+3t7Z2dHdTrnFMUiB6NRjs7O1g4BfGn3p8QBRK0gZkBowEiVNuBsWMGqtWq8kt6vR7mJONtG81zemBN+v0+EZyld5sEc6Cw5Czm2aFUY++EnvdS6jwgFEulUiFcu/Ci0xzE8FhMO4YKULvwHh55L2SND0CmM+NBmIjFxVRgZQHcsavgIW940sCFjMVicTAY4HhA2PB+mas0HwOxQWkeaGPyYGQORUjjHlAURp4DeHE+nxNGBxQqFikBXOAKVN4jhDojF4iU6JAFQ7De3FyxAgMPfwOAoiiiHD14BcSAcYWtVBRS88nPPWiPOEK95o1kCDsK7vASSXdFHlfw1jXImtNhU3X6YYbNjDFLN4l7BpUbeR8/MY5ssdDrueDGwD8xVHaZXih5u9PplNoC0IE4Y6o7qNRmc+jT6/V6vR7jJ7d6c3NTkf0kSUjEFrww54kzmcxgMCAkmvEaXgxGi2e5XFYqlUOHDknAADPHy9rb24MNhfpiJbCb+MfCq0KmOxAq8YXRBl6TQXNuZqEnTZvLCpU2DiA+S9hDUiNUIjH03JltLXUyECLP5/MkEcJ0Rp6mxlOztpcuE1dqjkJGgbfD5u+og8xziUDk7FYwPYfGzCtIAOIJRLC2+a3FYoHEAllC7LXrk1TpU5HBKg4QeCdxfmjF23YjYsaVVelN3ce8JlfovZr2r/1r//rKrguW5R167cl8Pg/GAp3gVuJzq12KTkDoMUCPYBOsCX526Hkz8C7SaMfehFBHUuxlgGbexAVxmznSynjVNHnJo9GIbpB7e3urq6tHjhxBiIM8C0Modsc8XWA2myE8Aj1wokVez0KPw7f4S7vdphwSnXAFMQGLgScSKR4Ueelj2VdzsTxAGdhNboEsFjwrKEfdiSqVCowsLBpxWzgPIC+ZTAw1l8s1Go1arRad2cVb4wRSEPdceOq3GJ259wZcXV1FCqbAqLL7Ey9hjQ0gxDb1bsXmuermVcFFUUuMRaAfrgh+iwnU0mIBwKcG3rRJOR8KXovhgGXMegs7PAcMauw5EHxd2ffmyAAjN/eaL9hmkpEbjQbAC0IXW55GP3hWSvIIwwcpIssyU2o8JGucqtgqyR0Xv5jz/ofyxAR/FVgA4Z2FaLHo0uoxz3Ov9mWeoRJ4Pep0gXTVQNCwRTUBy4ACAg24HzwXe20wGHQ6ncFggG+DbxB4h3oqG7AU041GOVX4X3aB8k7Mk6DNKTr5TszDfD7XccFTg/xY/OIjF94MLPTa9XgpXIFn39dqNTp7gVPxzcyMXcMG5LbpE4zINf8Go6sVIeeD+mARiAAs4jtxCHN8ycPkMbPePxPu3FJK3LmXDV5ZWaHXF3KFpfdgDFI6IrZM5Knccarn+GKxaLVaONXw2UsvxqnjVz4eDy7lKNGP0AXiYarsLiypqt4Spwo8+SyKIkhN3rik5Mpzwtd9MPO1f+1f+9cDXxcAUBJPRIEXpHp+IEgKUk20sVixdxnhoDRPupx7g2OAGsdE4qVbsBlSAiFM1Ac4zQmyAwsWXkmbD4M5wBZKsj59+nSn0+HmEr2FYcj4yekRgRrHMbSHlFVkTNfrdeoOwjdw4BLvXltb41Du9/tUYxE7G3lGcDqiDdUBzgN+Ka8WqsycKE2SpN/v7+7u8oDVapV3ocAT9+dhmZyc1+bkjRCg17wRD4WwDL1YdzZVjl6vGzgYeMcRdFoQq6ANcx2hiJbQS+0ALMilEFKJPD9UUW8Gj7VDBpDxhm8LTyZg9nZ2dgCCFHnJeEU6bDMRPSaNl4JBxW5B4On+AHSJw1AoTr0dERhIMWvWngRtZB9jFwnQEzRUtWryXRapItIQlqw67PGDxuYYTLFYpIgpS8484ZrZI5JYLpfZFLHXCQq8AhRTh9CW2xa8ww2g0MzmnjMOIBaGDlLZcnp3pFuhZmFrc/+s1/CCYMunerHC6iVesyZIVRmbeT1zugmY62LB98roD71WJf6D0tLnfpkZHC2THHpyDDw0Pg/xEzlC4B4AYpxqjwRqYeFBdlJ7gZUWeP9xc3Ez00KNfXlf6bRuEgEPHDggxl2OsVQ0XGaGVEN1MwCFLK1arWZmFAAHsyJ2BJXS5wmdcd7rpAau91XoQKoSfP5ut6voAdMlbTSfV5GgZapEvxz4rKflmfe20e+y+BfePZx0Lp0SBa9Km/MaTOLXcdtwHeX1ocOhvDFUKx4+Cx7JEH5j9oHaiu5f+9f+9VCuCwAooeiQJyqOprIRRGHY5FjfhTdPS7ypRuBa8qkXpePieJUhFOGUVlDp/onnOGcyGQiMgncHwXhjDxghKTKEoev1euwSTIHO9fX1MKViDL2dN3F5/lKv11H0y4pw9mH8SqUS5Z13dnaofIRoMk41UuMBo1SFYfEl6QCleRBQ9ACndrvdhlsFl5w6dSoIApIzNjY2oATMxUbcCvWbuC68fC66e4tyiD3JKUpVwVx6IieUGxhI+s65FxmZeoNmc0EtRCYQeeYd/5iWjY2NONUdh6gozA22lgmXeg/zLNA59U5xqnhf8PqagfcvSbzEjzgVzSqfr1ar4FHgF2RbkiSNRgMoMBgMCOeBeHCN+BgBd5Ycbk/gRcUD1zvCavOuCVniqCy9WFWS6rxyrovkJJw0QRk2kXYKaDj2AvJiPXnXYhxxfqbTKQkN1PeWv8EVekermReOVeqJeYASZostTNEoc+3s0ltEYt15xbBltOkLvAMN64QQMzVBASvdbhfoA2cmUnDpnU7B9xIaEpEAG9G0kBxBDhNtJT0jbiTeSOwNV4JU+aTIZamxiyn3vMWiXD4mMD0/wFyYQtwtRCOU3Jp4qV2UuJyZzCT3YcAaKucqH5NHxFtmxzE/nFo8ZrFYvP/++yNvair0by7ViDxPUbwj8p6zzhlOCSZKu0YHtT2QgyHaMn1YwaDrOAXkKQbC4cA9pWXKeIoScFzSbbyUwCsrsSp4Tayu9HgUiz//ttq/9q/961zXBdNQckjFcVwul9n58qoJI+Jwz7zacOzFdTEP5p3fuBUfwzwTloI1AVZyZiHsIwY094RuuIEgCApetJlRqXMX3x2Px+12e2dnZzgcrq2tzWazTqeDacRBl3AHwKrCLu12W0FVqKmlp20mSYJXHYah2rhxDQYD1OtAYeRNcRwjAiOyP5lMED9x1AKA8Lkznj4p3NxqtaTyLJfL2CrSerAZoGe+ooQb8ZRmtlwu6/U6HcbBbXj5nOyQDcBrbo4wYOnpTUR1Sc4leMdDiaLGQCoIC6VByBJSEJwHUwIEIQNd+qrYsytkP5SlC8JDdxh780BZEUYuolo48iwoCfUSeS1r8zLawq/mcrGMlx0AmALosVUwc2mJZ8abfQt4wbMSlSbsm3gfSI3hLKT7gBeAD8OJT8IuYLQEMQnBpylqvX0mWfaYGcOKwx1SJhO9HTpg3IbIe7FAJUoJl/FUD+5WLpeJmYJTUa0EKaGqXAIFZ9mkPLjySNitZLDN53NlGZuZqFZ9DHcOSSgQjRgxMKJer4feRgtqHxqvWq0eOnRofX0djEgMAcTPRubQGAwGSFbQp7LridWCyMX8sTbYR0EQUFqV3RGmEpvMjHg0GUJz788ECVoul1Xtn6Bto9FIV9rntZoZM6njBe8FflraDxYDxSK0hJAvL70SgpmBwhF/9/v9IAj4DDXDaUCf9dpAgbfWTENJBQ34Xd4CTrXgKbflQXDD4BfYcf1+H6uhTZpWmZu39ll4Hp7mPPBGu8ynthWM8llPun/tX/vXl3tdGEDJsctRIreYEBgBGjPDwFtKgs1ZzyEYBEG32yVmCnaMvXE2SA64Bsbi8DIzlEPdbte8zTRJBhwiACDlI4deCxpzdeLEie3t7UwmA08GuViv10EACgcnLvYHDRQKBUChORMD6kXoo+BsoVAgv8fMMMCz2QykS0IrpjHvRVKAjJGnDSH8l+3XdGE1x+Px1tYWPfcymQzwjueF4wm8kyFkAJCRQ18QnFBatVq96KKLarVa4kVteEBeJa+MkxpMz6sk1D73JjS89MQr0QC1cSfMqSxlaPKKecviRBNvFE5mBvaV4PjcU84Tl8ma53zM53Om1LxmHsIvYtPK6k08mIi/oUUrYIc2A4if9Sp6GEKUWCB1KFV4IEojKbjGVPM2AVJKFsHZgEYS28f8Kyr9EEkUCYiZTMXWFcc8C5JqE4GwLcVVz7yiatb7dGvLCL4svQwk+AwXBQBKgJIyQ2loAnELWBRhhi6ZfN7EM/Yib20AmSdkxgSS003iDkhiOByyVMgF5if4r/l8XjuxUCjQTZv5l24VySaPxlaiMgMAnfQO9CH8XJTqOw8Sovqm4u8sxdibwgtVWyplipQ1ejIxn2YWeQn0nPcgUA4cRxAYNPEC9UmSbG5usu8ajYZca56FeQMlU+kdr4zxMO2cmVoSZy0qztXE06QWiwUhcpZrsVgkJqCwEr8rF4vXrTMHDxlXNkiJWFh4cg45q4Hmgphyscz9T5wlQVj0l8gezIwgWK/X0805KOI4pkksXmv4YNLkr981GAzanU63263X681Ggy4S+9f+9c/ougCAkmoXnDiE4ULvu421SJKkUqkknlqL0A2MBXZREFBsJdpwtDhIoALvYyZbaJ5hCneFwVN4SxptQJ5oFRJxaBSLtaDWDAYJ4wrtgbIKcwUzF4YhlYBoaQhsynjnXPIxMUWZTGZzczOXy506dYof4rCDrMLUJUkiTm7ibZ0hHSGKolS+p5nxQ7ApPEIURfQprtfrZkZQTGkuIm6xgrCDGOAoilZXVwkLHjhw4MiRI5lMRvWcAXac5plMhkGCnDidMTMoyfSuA++cGbm2FdosCAJitdx8ZWWlUqlglhgYaEbFktCDYh6wNLx6xiOOueAdfnk1PDuW1bxoKNQvKUFJkkynUzIGzPv8cgc6ngvpVqvVmXfgCDxTRMlSsZfBz3o9VHGEsWfwCArIEVosFr1eD8strWrsXXyIYj/oRiM6D5DFNrPXWMDKw0C/u/AaNxoV85zNZvXiWCF8BbcBoANRx7fYR8rJxWcAY0HaEXjNeff2qXftQzrJXwB2YlXNk0JwO4W8gYm7u7t0rFEkXX6pPExx4YJ6OS/ejpYOIal5dSRBWEZVKpUYNl4ikwByAkSqQxXyGOaEI05OJtSypXAVnsx8Pu92u9vb22gAEIOS5G5eaJMFlslk1Ktp4X1itEh4QWl/D7ifeMFIFUYlIQbNaOA5NEq7iVMle8VcahfA8TMJo9GIuVKzJZYxOhmwKQseH3hlZQVSE1oUZ4wZNhcaybmVBkkJW3iVVKBkMzJIHnbmTcATr5rOQcrij7yDKDsxm+r5BNc783L6X4Vl+6quW269bafTadQblxy97J67777jrnvWGvXHXnXleb+U7N75p+951x9//G9P9Ob5jUc89knf/9wfuuZI/sHPhv1r//q6XBeGocSErK2twZ3AJcheLjwdOPYGbvL+zQzaA/yB7QHkYfPy3oHGvF0EKAdQgsXKeJJs1qv9mWcXpgVJM++Og1Ob8ZY2kbdY5Cfwgzm5YFAwNvJ3QYrVarXZbFKKnLM18L4XpVKJiowEQ7GRkD2z2QxgEXslXobNuYk5J6Min2pZAWiD80DMNxwOsYi9Xo/izGZWLpfJhY880SfnBZABFpz46M/q9frm5malUmHaM5lMtVpFzBe7MG65XJItziMwyVMvnhK7ot+8UwjBYqE30SHA9FqthofAC6VTJcsDuM9/VZCUFwQYBWviP2j2+DrxMmokBUGgcptkT7NCEg9HJqksgblXQmaN8YA8PnnfkTcnhHMF2XAfyelYe4qBMjNKzWH5ARGiVPlAKvNxE7wR0bTnucIwHAwGgXckNzMUfuQR53I5ppRf5+cSv0TVLLzMZJAStwXeAxp3SC9aJUiVLDX3SkOgaqgm3Tz2kjGRJy1RdZyP0QEhk8mogBQ8nPQqUOCQ33NP8AKvg8bK5TKsm1YXHKEqFjH5fJ6/h16lktxBYCtojK8vvHkB41x6fTEzYyaZGQmCzalfwXEpEOZetKvVaqGCQBlMzlDoSusgJZUm6EGiEuckCzIIgmq1WqvVlDEmn036QsAlpRahVwGCQaqTbegFqtIXmVtmhsZ07rlcZkbToziOaX7IBIauRJcXVCqVTp8+nZxZZ0P/G6U6WmW95QHDKJVKrBzecr1e1y7DIux5iwd0ycjx+a8zb77Qbreld+ddaz2bA1ncpwsV8v7EJz+1efDQjzznufzfJz7xiWZ28803f/LTtzz+cVef61vT+977v/37v7zsuT/1f/785Wu56ek7Pv1nH33/PY+78dEPIq7ev/avr9d1YQAlZh4KkMMuTNWXkZeceHKMOs9iaDmwyLzG2qVLkAANQ68Oo5RqQmYqmhO7GBy7DrodDAaI/cOUjh5FfMaLAmY95RyQhCiQGGjWK8JkPEGVhFYYHcUxZaI43RAAcAgCs1qt1szrDJsZYAjrxagQkGGEEpcEKPyNHgjU1W63qaWCQgvQrNTLnLdpDlI5xYwKphBFHXJJDMN8Pu90OljiarW6tbUl3ijjFY/peicpXrfbZbTieGazGYnDGU8LZVYxjTNv+AYPIcVhkiRo1wh1YTgB3EwsVhwwAViJ41hJG5gN2Lg4jkulEog2Hbk2TyqSgEHrkCQMABDvWjwHodu0+CHxWn08DitH1Q0jr6mJGZO8MvT8pFKpBHOGWWWRQ6MiEwSOnH+XYVmhTsUDgSGy3mwpCIJarcbwYs+5VukZiCi9Iz4jqCRySxMuCQGQJecdCLnEFIrgNw+h8mihZyaBGnES2Hdxqhdr3ut2oTsMPMUeVpib7O7ubm5uSngQemtTfDC2c7PZxM+MPLMKBwDvBRJ3MpkcPnwYIhBHgjbrSy8sGnlSCIiHV8xGkwJ14cXMl57pLBKdsrLAZeYtnezCP9QvSvTwzLsr4b7izuFbgu1WVlaOHDmSeD3wwGu/SzMTpLSqpOuxAZkEBqmDBdeaF82RWygUqGJm3mOGoIGWBKBZThR7RF0NeXyJEBSaEJ1cLpfF7/I2pX3HuaJtBMsbwlsSpqkXLJt7FeFyuUwIhTOfY43BEG2HLuVMeFA/7Wt+3XLrbZsHD1133XUf+MD7f/s1r73rrjuPXnrpz/zsz37v937fsWPHbr3ts1ddecUDfC0ZfPZ3PmLP+Y2ffPJ6ZGaWO/SY73ruY77ri/91sfNXv/v6d330thN7xaPf/gM33fiMR68GZpbsHf/YW1/3X/7H37et+ejv/OGX/vi1FxcCG3/uZS/+z1c9cePP//QzrdwjrvvJn7nm/ne+4X2f3s4+8oafe+ULrq5cMBHA/vXP7bowS0XbHssKNMx5VT9Sic9qfzL3eopS5yDvIwTDmSLToqNWBJJoP3CPCJ7Y60tnMpkjR47AV3F2w1/KWiz94oZ8TP33Ii/Xp0GWSiUaEh44cGBzcxPFJCPE6mBySHNRbbx+vw+IBF7gYUfeoDz2QhvIrUIv9QcSJVgm8z+dTuFR2u12q9Vqt9tURCdT1ZxQ4fHPSsPkiTCi0BLMIV2CarUaaIAIfhRF4GZUSu12e5kqDMSEY4rSyFXqQCllgzPLZ4Id+RYokC7eYnrExLBgYq/vk6TSEcxZJdB/6MpFDBjEBlBS5lPFRyFB+SFZ9MlkAp6QIC/yNCZvl0dlAAAgAElEQVTxtaPRiJvA1vCiGUDspfLAWygB0tAw8qQ02XuVTlx4ixQEDw8anuMNAnn5XRYPzgmYFaAceqVMtgz4CccjTpWFYvEjw2BO2Ll8HQkBboNmTPQSmFVU7nQ6ZQ0rUTfxzoShl//knZ4+fXq5XNKfhuqMsWv1QAYKLgNfWDNADblSBGcn3g6RuCfgslQqFYtFVH1mRptvos84foknz7HACCOQB8OYmQTiBmk0hsPAUsx7dXTOLohwNgi+X7vdPnHihPLP5GkXCgU+YC495+lAaaFX84VzJVxDohUqnaUXrDXPQ4cDxlWgc6yZwSwmXtvhLJJSvrp8S3GQpMynS4svvZ2sOd+ZJAlTVC6XFT0HbrIylUSVuNgRCRMKV852oU/9ChWLcIGSJAHgrqysqJwWTi/bn7NRnhsbnHnOZDL1ep25jVI9xB+eazAYtNrta6+99gMfeP9Pv+Ql//APX1gul3feccdPv+QlH/jA+6+//vqT26eHo9EDfHO6/fH7y0++uvFAhOrsvj/4D2++58qffv3vf/A9v/bMwrFXvfX2cWJmkzvf/avv2fmOX3j7e9//9pdfs/N7v/LuO7+4JSYn/yK57lff+d/e/MLaX776FW8dPvlXfue/vun55Y+/9cNb+3U596+HfF0YQInpwq5gRWIX1yeeSMvBjXlQUotMmpnlcjkVIl561xxSKwTFOFuBL8PhkJtgZqSUx/hhtgmpoG2CcjAvw4Zkysym0+nOzg6hq9DzJc0MO726utpoNDB1/F9sczpPmTreZjafz5EkEjcfj8eDwYBxJl5ymQMXRxwzLMgraw2CFPknmnYwGJw8efLkyZOnT58eDoerq6vValUBQT6G4w7iMU/DLBaLxEPBlKEX3CHFR5kurVYrm82Wy2VEZpCRUy9sieXj/oilMH4E4sU+kizM5OihACUF70nISLCI4o8lJGVUXEvvZafGP5VKBWSP+UciKYoCWJAOfsGOwIdBaU+nUypEUmmIqVBgHSIKPnKa6lHEqpvNZqwBVr7el9KrpWGIXW0pdKv3wgwAMuBUsH/n32WAIVFuOFpmBpteqVSgoxgqLCb7CARsZowfBymfqk3IbgIaansCOtNYJD2rDBsmWGsGwhvQDPoUUwhGJIhpZiwwDYBB4kcxZrWPSuN4wL2SctBjwGKiM1HIW7iEVadFxTQWvE54v99XJjvnGB4vUWBlt7Df+Uu32028HgUCawAim3pvb29nZ4cCt7wCwDebXYcP3D/fxW9BR4gfnvPKpsPhkMgAUX6mAtoVpC5iO+tVPy3V6EigWfMceCUEXi6nIk5I7JXhV1dX0QaAcXNeiErYGldEKs/NzU0O+Y2NDUW6FQ3gbORtMo2w6SDg4XC45w112JiJt/9JvEuQ2jOyeIRB554GTsUJ/EAUHUyyjqyHbsi++qvd6dRr9SRJfvs1rz3rP/32a16bJEmj2dzZ2XmAby6nO4vcRiEyMxt/7mXPesqTr3/Kk5/1858dm023jn08ueEnnn7F+kqucvRJz/2hyt9+dGtqNj157FPZp7/4aY+p5/L1b7zhJ74n96mPbJF/tXr0OT/47YdKKwcf95RDpbVnP/PbDpWKh7/1qet7f9N7WAH2/vXP+7owSTk4jqR1I8tT2uzc60rKheUUUwBxNBrBI8JhCG2ASlX4jcMIwBd5Key0UE9n5XK5JMNawUE53EmSrKys0MoPjAXmi6Lo4MGDHKAKXxKEohKhSgjF3r4MpgS2g4g/N+ensXynTp06efIkNhIiQRgFLlMCo8irKpqf+yL/YP6QzHc6nZMnT0J5wgZhwpmE0WhEwgEaO9WJ5FzGAGDMoiiCXQAOttvtWq1GqC7nNSMT1zMF3vsR4yTJIyOcei/BbDZLV540zaB65kqGZepYAKFnUwGAll4E1MwUtJWELvF8WywEmfLS44IjtQjT4Czv3WIYDAFrBbjjVNm80IvCABRWVlbgt2BowjCk8UnktWagwSQ0ZPwYYHgdbB68aewJ1xg80JiW/cxLvZzngjYjBw5ubz6fMzCZf7XuBJZJBUH4eOq1MBfejVMKBMy5uXAClCnaGFTNrAbeDAaqGxRuqXZKZhZ7xShWpiIJrEZaBkAxAkCZFoAXiDYIgkqlcvz4cUGKwKPG7COQCvSwRBRAWB4BoAY3Zt5autls0m4AB4/CYcQBwDdzL/SjgwvfuFgsMrdqXM7mkq+FW6LQATQ/ZRP4rbW1NTNjYfAuEBIIGrKdCX2g3obQbTabzJIgcuQJUqRMsY9YUfK04Thh3yMvXivuWeH4MAwppGpepTLxgvMKH0OHS2XR6XTgg1n/lJvAbch4jXe4c/NoeOTZbNJ6oirRNuFNoULBK+AYIeyez+dhZ8U+rK6uUmQNfSqzMfVCsAgDEq9A9Nd//ddPeMITvlL79uVd3W73oosvTpLk7rvvOus/3X33XUmSHL3kkuP33nPp0aNnfzPKr2Vmp/eWVo6s+M2/+d6bbfy5l73k98zMFqP7und+8IXPeIfS9ItXTJZmtntyUbym/MXIRrZyeXFx24TUpiBXzwVmFkSFKMrV9O9ksV+Wc/966NeFAZShpxrEXvmZswxXmOwQ6ZD2vImZ8BPAUSJ6bKGOMMVN9C1Fq80M44o1Ap6SXxKG4WAwGAwGaac29Jpw4/EY4Pv5z3/evFZlv99Hg8VNqExO2g1AAWm/kA1DhcI0M8LiIBvYROwTjzn1FosgDIXUsTdS9HPEL7yI2sJrB0LX7ezsUBUyiqKLLrqoXC5zOme8ImDWa2WLuiDMh901FxTy61MvlcI90ypDQv8Mm3g3NIxeB/E4eK/pdMpTw0oyEpW2EZMEduRFkFQEoJHCIfTEDpbN9vZ2OiGawpN5r82pBJfAe/YQ8FVhc8KRo9EI8EFMGa/AUgUmQf/mOB6UoExn8/LIoFVawImD53F4ZUqLTocvgXQMxszwPaZew0UuBDdfeJbruS6yqehYqFJTUGXihpvNZrvdJlTNGPjFgrfRAyTh8rFQI09rsDNjo9o1kSeVi0dntYTeFBFqjflULRjdRHpT8Byvm1pdPDITCNtUKBTwl9bW1qjWtFgs6AUK+ow9KYTuXBwR/C/gacUbSU89rVjznO5Ao0nr9XqcFfhsSG4om5UkyWg0qlQqBHZn3hFbrhHEHqMi3r2zs3P8+HHqR/LIzJXyr3ER9TpwY0DMLCo+32g0cD9AjUvPghJtzPKbe7IUk4kLt/D2lUw+J7DO0sRrQJqn4OB/ihSUIFtMNkGMghcCwwFga0sggaS10WgMh8PQpcMKf0vOQeeCjGcKBp4/FHiKmPYCK5zs/iClQA28gizbH2SserTmGaJ8hbPi4SQp6/X6fffea9dcc8nRo3fdeWf6P1122SPM7O577jmw3nyAb+Y3rzk4/KNbu9deu3Z21DtTPNJ41BPe8OobNs6073urBzPjfxjOry5nzWw+uGOcObiSMXuQg2T/2r8e6nVhQt6FQmFtbW19fZ3CN9gGHX+KAy4WC8zY3Cv6ctxPvUHOzNs9r3jbX5x7FJDL5XI6ndL/EFOqYJOkeCAh0nGAX8SJOKG4CFDSMhE7OvXKJpEX9Mlms3S1TptGsELWy1VgjIELWLVarUbq92KxOH36tEqf9Pt9dUrEdcYYAHqIQvIUhH4wVIkXUKQu+tbWFsjPzBB0Si/IIBUYkk40CIJqtcqR3Wg0yAGv1Wr8MfJa9IAe83R1IkfpYpP8YuTNtelIDqARr8zcErsMPS2dmeePvCCZQH4i9pqIgJt03FOfUVgw8oyl2JOpF56eH6QyuGPv875cLkEeAuuSAZiXfQk8S4ZFi3FNvOQ4v5L1TiEAWVjwJJXWSkpW4uVjpJrIZrNIOBTlnHnXmdAFiNhINBXn32VISxkY42RzzTz9f7lcdjqdjY0NM4NIY0jAILAFv8gWGAwGmrqz+FE9oOSSrEw8N/OwaTqSDrMI1QdrG6TaQLPFINFnsxkbUz8qP4SGgcVi8eDBgxqJuFKJlVdS3dj1FyEt0atwWuapQs1mc319XfTYfffdJ45QK5kDRwBIKTXpZcOMcf7ooXq9HulrzDPsXTabJVYDxWhmoB+xy5lMplKpQN0R2max8QG8I4S2eS+3qX0BiASPcihpQvgH7i6/ApqceffXmWfOKUeK18TJI4qd45F40Z63HZenAQDlH0TJW61WkgqaWyr+bmYAWc7n9GILXKOJ346uQE5y4gUsQb04uvAICAmQNPDITGOSah8lp+vhuZqNRqfTieP4xptuOus/3XjTTXEcdzsduOqzr6By1Y999+w9v/a2P/v71u4ino+2/u5zPaBh/vD3fKe9700fvGVrPF9Ou3d/4g/f8IYv7JoVDl5/9exP3nLs9u5s1v27D73lQ9Orrzv0IMKZ/Wv/+jKuC5Plvbe3V6lUKpVKJpPp9XpxHOPTEzqJPI3DzESKTCYTQngFL3HH5p+mWiZidGPX7GMhQCFoK7F2sAViI7B84oqwKCAtlElmtra2ViqVCKPwCEA6zvRyuby+vr65uVmtVrFwuLnU5WEYnPXr6+s5r8MHP0QpxOPHj29tbfGMFPrhvENCpBbnnNqKK0G1wgcEQUDIfjabUcyy1+tRtNlcTmep3npmhhZKfxTpRWFzUkCAR7JSwEdss5mR6A2kM7PhcFiv1xV4mk6nHPT5fJ5CfRzZEFQinqGjQCFgL6w7LELgHeoS192b0zYwSWgVoKgBggp8Q6hABPKuwe44IaG30sG4mpfZU3IueGieSjfmKWgkzWfg2CDDqOjJ55eej09CRtbLiWuJAmhmXuYp8bJZoF7RiuS4ZL1WvEKlQkvnueBfJ96ikKGKauIVJEly6aWXkujDaJk9GDJmQDQtnBwbR4kUZsYuE3GY8eqPZhZFEa9ABVOlhAaHpeE4d0i8u1XgxYlYUQwAaMu0oLTO5XI0mlI6xWw2QwHMTmcAgv6B14swMxUiYD+GqR6GgE4BnVarxf6CxhY7CBwUkbzndZ2YEMLfVDNNXKkCrGm3291ut9PpRN4MliWhQhDMuaR+kZdbB9EuvfkCkJFfUTX4pdeuMjNIevq5k32i6U0zcywzJkphIpHxCM1ZQuY9GmAls14ZgFFxXPPidH9q0fPWxAsSttZgtG4Zg7nQk5/Wf+L1kfcNNGf+tfH1u+bQk1c5m82YPRZS6En3oRdF5ydQiZx/Z30Nr0qlsrm+9pGPfOSGG56eJMkbXvf6e+65+9JLL7vxppue+rSnHTv24QOb66Vi8QG/mz/67F//pdI73vVbP/2Gk8O4eODyx/3bn3rpo1fNLHfxD/zyje9727t/8Xl3thfFi69+2nNeeMmKma088vm/9KNvfv2vv+AdHas/6t/8yCuff/mDHCL71/715VwXAFCeOHGCM6jRaBw5cmR9ff3EiRM0n8DSc2JCN3JMrK+vm3chU4iWIxWIg72BZeHE6ff7BIspQSIvWWecgEXi1VtCb6uQ81KLkJ1HjhwxT//UU3AKDwYDfqJerxM7sxRo4yZE5fL5PJmqcJb5fB5V4ng8PnXq1IkTJygZiI2UDi/rfYAEsgeDAY8891q+xCtFYcLPnTp1amtri2EcPny4Vqtx+ue8jLaZERSW+acpdhiGUCAghlqttuLd/2BHVHJyuVyC4Zj8hXe5gPUhRYBBYkTnXmk8jVEwn/Sskz5PNINylZRpofuAzCLvuDjzLucKAjL/iWfaynkQazL3KktpPMfsoaJLPJNa6HDuqcfgLcHiOJVgDorFPzEz3ibSVdXdhH9CiJZ4OZ7A6yVh8nmV/Fdz/n7mHTXxK86/0ZhSBVjVEyWKoo2Njdtvv/3uu+8+fPjw6dOn2UHr6+uZTIYi/MINQRAMBoNmswnEZzYQn+mHhAb2vCZX6PnRideZZ+dmvKwP4WB2XMY7jBN2DzzDScQqoE1VGjgowPGkGYlS1b5TUXfi3RKNaMxsVWXJEKJVNnc2m8XZQ3m5vb0NoERwgr8nyALdhQZxsViQcGaeV8dWmnkBMlbRYDDodrvtdnuxWKytreFO83m+q/eb8RIEALIo1XIdDSL7kSriaIQI++bz+Wq1CkVH5Syphpj/JElarRY/MZvNSJJTvAI4rhkjrAHoB3qym4CSvEr+HXqzIt4ds5TzDrGhZ2rvek927Ueh/Ol0Sl1eko0yqQ7jQRDgRYM4mY2Fl4lIvHGOtLnmtQ5QOMhNWi6XvDWmhZ0Ye1mr82+rr/l19WOv+uSnbwFT3nDD0/X3Y8c+vDsafcvVjz33V8PSN9xw02/ccDa3aWaZ+tXPfvnVzz77z0Hh6FNf+ltPfemZfy1+82+++1UP8u/9a/96CNcFAJT3338/RzwYC/FTq9VSkql5wzHi3XEcY3VURI2dL92PLrnFnU7HzFQyMOPdtLHc/C80gyLmcy++AwAFbg6Hw3K5fPDgQbovKkhqZjB2AFMJBJWRsPAOhNlslu/CX3LkwXzU63XqYoB9wSII5GVOQJNwDDzCysoKMSAsjdJHmJnBYNDr9Uaj0dbWFmcr48TwcKomXuwDwykdEpgV2pL55/zN+wUqnc1mPAgz1uv1lsslxfkgkgGgMLjYIZWcxDBMvfd34mXn9rzRoqSKkfcfwghBtsHlKKkl8O5tYHpgAa9AUlG16QMbCa0GrtVDm6+aU9hsMFPiGVRKtxeFlnhEGwYFM4xqlnmDZ815OxbZrcCDlXPv3x15UlfotUIBo6wE6SUWnppGzFqm+jwX24ewIC9XqrhcLre2tnb//fdvb29D5uFIkA5/8uTJpfezxmOBcoYTAhJRPmZ3dxf6DZ3cWfoz3r5oS7g9YIoGw8CE6WdeH54H5IZC1bxf5d2bWb1eJ2FfFXDMxaYLr5cenJl4zt0E78Do7CP2F2iD581ms51Op9VqcS4BzngiEBgOD4EINSE0M5ZEwZuPJ67e6/V62WyWkjf4HoAYZYlxE7w7M0OSyEqAYGNRzb2qInPIVqVgAuOnKynccLvdDoIAT5JdqZA6d5BiEljMmmdaeINzL3DBKcRpjPshtp5Xz5GCj8fCY5+CBRkSuBP5pvLhRIjOPMsqcAkvGhgegQ+jODKz1dVV+poCEEHDo9GIZmBMbL/fhy2GpOx2u9RLz3gTIxwPxsZ59WXYs6/F9fjHXf2ZW2970xvfWG80Lj169K677+51u4cObp4XTe5f+9c/uevCMJQbGxsbGxuxF2YTpRd7ZiuQLvKuWRz6oDHOUxlUwnYKhZjZxHuvha5Oy3ib4MQ7ccEPLb1IGxYxn8/Tm5s6gpPJpFarHT58OJvNUvAcLIUwEbX4xsaG1PSUumCQoVfKnEwmnU5HWRccYblcrtlsNptNuKherzcYDCh9ApkBKOFZlLeuo3zmJc2hbci/MbNOp3P8+HFlV8BbwIMWvCwzBEzsLYiYhMBzXWEEMSQcwYmX4EnDu/l8Xq/XCQHDaqgHI1BJdWQUgYKhwdiEnhwj3SfWRXAQKaEK+sy98BBkEowIljX0QtmBSxvNbD6fAwWAQcqNCF0XoWCilgEon6wCSzUfJ9FKnByEkwZGpB4MLfoz8ELosKRAVeCLaM56vY6ZhJBGmwupxuPkcjk5OUwRtBaJRKyxBwWUgSfqCkDHnj8bx3G9Xr/jjjv0EkESFIsOvEyjaF3l1hCsx4HZ3d3lW0w4hWMVWQY0ZLzh9czbn4zHY5Fwiat+uQM2Pva2RrDR4nEtVaN0OBxGUaROP8PhsNfrFYtFeZIIY5Q3lpyZ+5XxVlU8CBEDdhPh0UajQYMr1hvbUG7b0vvERt7+m2ZalK4EJxWLRbheHplktfF43Ol0Fl6SjEUuaK5IazoDmqAELXDYg6A0UhLJQst46y82CNpZ9suu94xVTH/ujQ217yQ45nUzYEt1XDSPCzOfzDwLcnFmCV58OZTfc69BG3gVMP5t3sg0iqJRqsIiJxsbs9/vN5vNvb29ZrNJ+IJVh7KFsXHe4lTXajXKM2EIhBQZlfQV9XqdkwrnRwWq4G7hPsPwwuQVPPaqKy8fjXZ2du4/ft/hAxtXftNjzhXp3r/2r3+y1wUAlBwQOPriwECNkIJYtZm3S0m8sd7SEy84nmSWRG+gKN/z4slzTzGGR+HUIHK058XMRIrgPWPbZl4pptFo4LCCscrl8ubmJm0tEMvXajVVRQapQOpAOy0Wi36/P5/PCRyHXiAavAh52ev1hsNht9tFD2Rm8pUZBrK50PNgYASBYpTFRnbJUyPmKxaLzWazWq2m+/TAV1EVRYcmci7EVcwec14qlSBQKbqe9+Lqea9zDjRhHsgXpp2jmY1GIwRbSmERBSW9FK+GkeAkyOonLr9jPcAhpcVnc+9HYmZinZnYxKsssa7ApvgtfIC7ActiL3EsNwaTxq8DMkDhmMaJt1KMPYkHbyTxLFFzyJIkSaPRYA2bGYsnk8moAGqSatvNHMIRYrPNs0YQz5mXoGdfgF+ZmQfdaywJAruABprEAKnX19e3tra2trYuvfRSiCuipXB+CsIyjeyXMAyn0ym7ieY05mJc4AJ4UdQUmIxJA7oxeDAHv0V4NPHcO14WgQJIPrGqQRBQSDwMQ5LMll6XKo5jnD2Jm9mbAuvm4J6ZYYux+PPeSwb2lww2RN67u7utVktbHpKY+6hWtgKy/X6fBw9dY7qzsyPtIDW6OV60K4GJZFUrAMKbUs1wdDJA54VXOcX1VYum2BvMAKdQVQZB0G638U9oRgAmBuAGXqMg65WMmP/Eq2TMvX2AJgp3Aq3w4swSj1SDguZnOzMV6R3NxUHNtoXLl6ZW5xKnPT+U917eTAizLTm1OdhlbKTgIOwOPIyO6JkiHhwIcMO4mvIDJ5NJxjs4PFRj9jW9yqVSuVR6gApB+9f+9c/kujBJObPZ7I477jh48OA3fMM3rKysrK+vLxaLU6dOIeeikARnEPyEOKrAy/gB9WIXzHFyiQWZepdk6JO5t/A2M0wLYXRunvfC3XNvX8ERzGEHIoStQbDV7XZJTsTl5eSdz+dEqbD63ApTR2oOkjJG3mg0YPLQ5rdaLT7JiYYSVCWUsR942PBGaAoBefyb5CGSflQ1AzTJ/9VEAcUynhEpiwiRqfAZA15dXSUJXbEkCvpwgnNAS6gaebVFTObcqxtiegF56tJhHi+Wpsq8d182m0U7FXv78nSZmLzX9zbPIoqiqFQqASNA9vI6Am/VLaKa34o89xlMk3g6yNJTgwUvFt4MCYRKjUMzk94XHletnhIvkAkgI24OKcvbVMauWukwGJWLp+4Mt2VhB95SBfTMCo/OLCH+gBecEK9VHxZg5S3Dy/Z6vQMHDqBV4DEpucomIlardwT1S94J92SVQljypIyZ4o68YtIvolT7IgAEiIGvswvwnVRU3FJ55ewpsCMwEcA9n89BXaVSCfXFoUOHSqVSoVDAL4X84+bmAmjGD0coMUylUqHg+WQyQXVKBXLiAPxRihFuqL0pX5eip0BVcnjnXqIBCUG/31c9/9BzVpgZbq4susC7HIXeFAdAlvE6u5w/sI+KLUipOZ1OEaCD/nFZcQMQw7Ax9X6DVPcdocDECybwn8SOszzCVFnTibcOZ53wGVVL4GLG8DoouLbwpl/p1Tv1nrScdaVSiVMdaY3AonjugvcO4LvZVOGhWq3GMci6VTgLUwILvvSilcT9z7+z9q/9a/96wOsCAMojR46Mx+MvfOELhw8fvuiii5rNZqFQoFvM6urq8ePH6e/Htg+9rRa5h5YqzjeZTOr1+mKxGI1GEg+pei02ACMBuUXIEl5q6WWiV1ZWlIOsxiFo9cQ/KeAFs7W+vk4KEbXoYGtABmngi53I5XKQfwRf4Gw2NjbIpAFDj8fj06dPDwYDjD0swnA4VA4H5OJsNgPdYhUArzq7EeDrfOdk5KkVGBKjgFmdeaUb+BhoA4lKOd8Bf4AMxAZLb6fRarUmkwnPYmbD4ZBxMsnmABEih+gbLBfklsg8xVUZau7Mmo7yClg8gXfphUYNPfE5m81yT+Dswrt1w3gJt0mhz9iCVNFEpQrJVvHqAbIsJO4mdWbiXTpkRPnwzIvPK7aOl8L7Ur1VBgYqggAjFJ54QvdZOS5LbzqsPPHzb7TYG0HxbzBN5M0Ap9MpqOv222+/4447stksJXKYAYAv70XKOd2HtW1mvHqKRfNexC6DeLRWcdL4YuxJQrBEvEFgivJ+APdgDshjGgosl0tKtfND/z97bx4kWXpd992XL7eqyj2zsqq6umt6emYgAAMMBgMSIiSAFM2gAZIi4RBFUtxCtqQgww6HSNmiwhQjJNO2aG62KG5BUqQlmHbYloMRJEUClP0PbcsMY7DOTGOme3qrrn3JPbOqK7f3/McP9/BNz0wPQIHTJFDvj46q6lze+973vnu+c889lyo6plChUFhZWcFvfz6f01znzPtWQwHyLTzakTdwAifxdYVCAVdaAEq73cbACzkKjxUzXDVATCFOst/vy4Ap5UUqzCJyIGwSuC/8gB1v7H5SIK3IC591F4CJIFemcezSZyrtOJl8Ps/62ev1EHcy4Tl/GO6U2xIxl1j9WB+EYgGa7Nk41Zm3kODmshr0+300PzwOPMWMTNZdZpkwJGTYXylFoAxG1o3lzS0tWUV54srl8mQyoYu3tgSx++Ni5M7nR4mavNgtotgMaDeoI7kYplx3m04/HJLl/Dg/vgyOh2NsTrA8PDy8ffv20dFRo9FYWVlBtNRut9E/KQXD4kuOhmwU7j9gFIgBIB0RmtQtgh4O2etIcEnAID51Oh1iPIFNKkZFejg5Vm32u2tra/v7+3t7e+Vy+YknnhBe5APNI2LsTaXn7lMNLGPxOj09vXnz5sHBAaYevV6vXC6TbSSANRoNTgO2QJyKYBCIE6bNzKbekZLlm1ibc2vl0PtbaiuvIEpGHjJV0jTzClMlf2O3OJ5MJkjBwAR8F+Ua5M7FqXcAACAASURBVFihJYrF4uHhIVBDBIw+RAxryl2sxRQq75b2htqQfOYgVSItAiqEBNUh1DmZt/dQMRZoDNAML6Kow7kxB2BByJERHcXvkurlRhPYIi9+B0MAgpWd53pVoJNzJyamR1KqFXmrHv7OnbVX2gkBMmL32CMB+uAHTTRS4JaojAl8EtsbtA137949ODio1WoMbL1eD8Ow0Wh0Op3d3V1uPaxSGIbkf6mCil2pBmgGxzPgZkbpWOwGPXEcUwkXu7ZhNBrB6pGrBYSdeFNm8+4yDDIzGdzPefJcxO6Sk06nq9Vqo9EgLd7tdpvNJvsr0duMDDpIYE3Kq6yy2Wy5XKbTPSPW7/ePj48PDw9ns1m3253NZtVqlZVk4hVvYaIHoxalOGEGzpRgbxN6P3T6gpqZDKcE5hAPkFvQopFyhS7pjpT7WPEsM/NT3jzTHGfjycBGDnoyCIJutxskZM0pt7jiVJm3eJllvdsQ54yl/zjRs4pdHKCZBAWYDBkDtKtY9tgbGSi1fc87xcOCz9z5QVMXApg1kEIltnNIRAI362CFYc1H90lQYIryrmazSdlWlEi+J3Enj0mcKLs8P86P8+OLPR4CoCR47O7u7u/vHxwcPPbYY91ul/q7er1+8eJFrMiTD3/oLYMVSiFscCNTVSx8nplJXA8fRlZ34s4yybrslHdEBGyx6qVcAkVch+oDSBHqyuXy6elpp9PZ2dkplUrNZhNuTC2tiQqo5glOAK9qtVqr1eI4Hg6Hm5ubt27d2tvbI20XhuHx8TF76Kkbc5gvu5w/wAIdYTqdnnqlMCiZtXVhYQHKgXiDLAyKAmm/4gfDSJRNuUazVCpRxE3GEF286D3kBAxvuVzmogDiaMUQUBLtVJ2g3DfYVA0JQy/lxjQ0Cbn4LiALoVoMKywmoUupdkIRl5x2b8jAe9ax5SCcM0+IbYBsABA0EtNJIsUFb3liHuT4any2+RDOioiOs32n02HPwzUyaPIEAAkR+CEamXJoZ6deiC1xAtSXqL7A/SyTofE1Dw07Gxs4VJHHXCOTdj6fUwvMbTWzxcXFQqGwuro6Ho+3trZEkXJ6wD6UBrPZjL7SY29kpzOcuCcliBDxKxoJ3GcVwgeDAbajePuroGruzZ8iL1JJua4aUyoOEVfM23q9fnp62mq1WBDEdTGHzSU0gRuUJvE9dzOdTvd6PfoijsdjDGiZ3lEU0SxHLH7gBlLgbGYmBDzrBloC3kvFoZATEDxwf3XwGXVaYs6YOext0Jwwk7OJpp3C92xrz87OpGfQ0w18Z2JwAsmEjApi2LDJsQsyXvlxiECth7CPfE7G+2BlMplSqaQelalEQxouE0TIXNLmX4OpHxDXgrwZbdL9c7d24iHikklQzF1fzlXLLkrrOZMhds392N2O+XBZv50f58f58Sc4Hk7K+/j4uFAoHB0dUWJCeOh2u8VicWNjYzqdbm9vEw/EM5kZAAXBNQliVpmU1wjnvUODsmlkdkIvYDSztNvKiPvkjyQ7pu5iPfHmJURlSemhiIiRkFWIGqmYBp2IGFtaWiqXy1O33l1YWFhdXaWs5+7du1evXt3f3+90Oiy7hBziROwV4gsLC8VikW8BDStJJMGoVsOpOx+lvQmbXqNEpFCUuXgAAAdqAQSLwVUPRmERwUSBBgqioS6gjriEmXvamddTD4dD2rgzzjQ4EXsBxQhcC8MQHS0ETNrLP4GYcKgzNyeHlVRyU0VL0MzmISrnPcFTXsxOkQRXlHZvAb6Oa1TGHEEbnTYoF1BYir0heOweQ4BjmCEuM0p4JKW9jJ2TYT6HYajWw0piAtOppQDaxnGs4lzNzwccYnA5gdC7aCrcop3NZDJ37txptVrVarVaraIbARVR5F6pVNrttpnN3JMcZKOMvJLOXLsyiVn34km5TBDoA/dGj02YPLDF3D0ftIuI47hSqehJBHlwCTyVxWIRKyL2h1Mv1+t0Ont7e9I7cpLKdTAsyF24lSw1jUaDpSCKouFwePfu3W63CwoheTIYDEi4pxIW6CkXbASJ1oW8QDhPY8JiFSdabFPlzbtGoxF7PBV9S01LpbMmEsylmHJRjMAmTgahDjN25tbo7M2EVil+ojqepHzo3q6B22hoBVDWBTDHPSJBwb2eeZsxdlDmoltGhuECI/b7fdIFGkBN2rlbuvJcMHQUcQr2CbYivWWdZ5x1x80M+W/Ou0EKrXIVDAUPGiZQoZelf7FB7fw4P84Pe1hFOYuLi2tra1haDAYDKDGKPNLp9OOPP95oNEgHT73wU4WBUlLPvf+BEkCEdkLC1L0kWfVQJrH7lxYwSSWCVHgN0QUfCvNmFSyIvV6PzyT4if/Q7jl2uRjrGgGG/C8V01EUnZ2dbW1t3bx5E8pTpZfghsgLqEVTjUYj2A6J98lewZqkvUcfb1QCaO5FISSs8d1gJEM3FUd8yWdCp7FBZ2cP4yIacjKZsEBzySB1htTMsNtEmCU5KecjIEuWDTGccpowl1n3DKI+g+ABmid4SHTI50Teoh1KktuX8r5H9sqeQAwCYYlzU5KOtJ2quICAFDoEQSBnJQF99iHwK8jRGFhOgIAtikXMorlQga8moqs4idMTdUqhFWGbbxHKCd051V5ZhfCaB5/GhQCvAy8HDrzUg6dmfX39xRdfPD4+vnjxokwAztw0cW1tDbEdQBO0l2SVYm9KGSR6KHMOQEnkoTjagCGoETn1djtsY3gqqWvWzQ3DEFMe7i9gK9mxE4jGswnhrQKmtDe+ir3omPWBUmWBGEhEnLCo/7h3796dO3fQdcDt8ZBqS6N0Nt8O58flhGG4uLgIzOVdoH8uwbwLJTcUKaT2IaBVoLb2bCnXhGS8X6J5JSIkHFtZUgE8QTyzUM7MZ7IW7PfiOGbdQ3UQu514o9EgWcQyNfUOAiyesUsSzSXF0+mU7T0sPs+LehoxsOYiENaiwJXT8rLVhOF/tQfmAA7yoAl584gFnsEgZcGeE0SrnaSGK0iUHPF3AKUahUdRRJ8zkcfnx/lxfnyxx8PRUAZBsLa21ul0er3e6elpvV5PpVKj0ej27duLi4u1Wm1tbY3lY3t723zbzXYckSVpbsEaVmFzi1py3CziyN5ZrwENrJVsec0MLCv9DbGBFwMH0+4KDkk5Go1wEimVSmtra5SGaDUUg4idEGllKkkx4sGI5PDwELEmOWKy7bAFhATCD8Reu93m7yS1Y9fvszhykkrR8q4g0RPIzGBQiBPyXp54txLgGiAvm83CIwZBIFip2EYAKBaL9PVRASw1Umg6hTkEYqBsVRVBGwwAkznwEvvLiyEhMHnmigjbkXeUgVNUHDIzIo2ZIUhQSS8HAB3ED10BhI286gWECp1DXIHqhg5n2kh0Jes+PpxIr8Y2gfeGjlylamaEZ86cMFkqlXCiYfyZzFDyoXvTcEVS1BFKFd0ffMRe3q55Yg4FJm45xMS4dOkS6YJOp8NeaDweHxwc9Ho96v03NjbG4/HCwsLR0ZGqlJKocXt7+z7eDrEHUCDrRu5sFWRwray9ashAgeKlVIGkhIA0c9pVmsMRbge2CdlsdmVlRV6qlmjXqdOGC4SN4zlFQxyGYafToXIfyIXTKjg4TpTMs+dh7woyC9z7k880J8hDN9MVT2luFMraBfWIUBVJJfsNuXQxPwuFgnmiPPLCMl42Ho+HwyFwHDVwyi3BOUm20IGXKOnn2BsBsNPLeCd6gXLtBnkZTDn3kZ0YG/LZbIZQIXCpycTt33WPYreg4kN0+9jvmaNAZk4ul1tdXZ1MJqwzKbfcil1sTV4i9IIheQyJJuczkehIAkTGA3+riTdHJV2g83zDh+v8OD/Oj1cfD4ehDLy1LviDRXDifeeOj4+n02mpVHrb296WyWRu3rwJT0B2g3Qqa0fs9ciDwYAcUOyl2XO3gVQ2U5vmU+9FxlvIb0buZajvAuXAzGljDXNJQnZtbQ3bIPM4LV83/RF8RulorVbDRmR/f59mJJPJ5Pj4mC7etVqNSm3ls1KpFFiTpRnYQYDku3CIFGmXjHNavi1Bz7DQk+kzM2hL3gJZBZign7XKKVhqo0SHQ8LAzK2OVItDDGDDQKQk9hOr4OFwByQOSVBINbeZTadTFVpJvMiKL3wPPSkRZOgdsUUba0DAQIEL/OEL2ajA88E+jr01toY38C4pfFfsRuVgJsYBpgr+iXAYJKxMYJQ1hnCoSSSRpGS0i4D5E2sFuk0lxIhoZAm6byj2Aq0y55PlODD3SQqciQ29JNKIDY9wTBiGGNC0222YPDZpKRcca75xCF2posi8fIdPNk+nzr16XWLomTuJnnob0pOTE8Sd5jJKM5tMJoLdwAuMXbPZbL1eX/Tej8llh2dH4lfzqpdarYbAY2Fhod/vHx4ecsKDwWBvbw9PLiQQ3Bo+WVgNqjt2x1z6x0i7Eri+meuCTosT7vdMrXSi4SFqEHNTs9gViuBItmS5XA6fJvMtRxRFzWYTEY6eHXUujV3FuLi4yN5PHWi4NGYXMCs5n/VEsMyiLmAWqeaPd7EAio4FPaP9QF16XxQwV0trpUp7c04uH90ng4YKSHiU/S0LF7LseaK6CIZiOp1WKhXALiCVa1SBFysDo81rYC4e/GT9KR2DwaDd6XS73Wq1Wq/V3syW4ufH+fElOR6OsTkLR+AaHcAZUYfsT7fbPTs7W1lZefLJJzOZzM7ODg69SmCpWkIsEfGb9Q7hWhzH6hsByECMGHvLVyXQQUjY3oqH0wqlPfHp6SkpbzLF9XodWkXwkR0wOa9MJsOuular4TSO3mtnZ2dvb6/f77daLdKIGPhR1BIEATZ48G1Tb/ND4jLrjaeJOiyvoQsr44SBMJEMksw8BgPHA7fkJAUP4F5YWKhUKkAZyFqQR+BNU4iahDFzJz8BzSAIcCfhRkASpN3ykJHhjfKXMa+y1B+1xwCQEUiEArk1ClpBolOiOdPGnWq32wyRbh+hPfKKYL6IKGuedBZKE33LC5ArZLypN0faLQ/1FWnvgcTkWVpagteEeZVjlBgadjjEXX0I15V11xioKdAS5wbWZwa+oVseCBLUK54SAASUCTwniB2MGE0QZOBe/fQJZFrS3ml/f1/Zat0L9BhhoohbF0VEByIDQ0HhIHu2EFwguhdwEqcXuQwUG0j2e5H3lWbfyCZTt5gpzRWhIUkOi7LzzNh8Pl+v12H1eDG9BshCsKPjqZFIwMwoDQSUsHWZTqcqhwd+seXgrvHVZPDJ7Gs7xOmRnYiiiKrk+XzO88KpkuXg1mS9GaYEEpVKpdPp4BbEp/HYClOyIdHKMHP3eJArU8XMFrz9I0/0NNFBIHBlAnfkvpmGUEGS2Vc7MLBqWUILYS5KYXEWkcxTzB7PfKNu7r3Fiid8CdFoniKI3UYAPUOpVIrdwXfu7uUsXIBI7dLRROnDJ19Ay4Av+fHpzz7X6nRq1dojl69s3rlz8/Zmo1Z999Pvet03nLzwI3/zHzw3MguCdL6y/rYPfMd//Le+8VLuteWfJy/8yH/yP33/L//UUw9eM77Al50f58frHA/NcysMw0ql0u/3ebaXl5fx+1VijhTSysrKE088AYsJn0Sph0r8FN3hHc2F2KzIwBGWTqBk6J2CCWzEITGUAnBmpmwdbwefoQhMp9ONRkNbcNAGgQ0BFuEqjuOlpaVSqVStViliODw8vH79+t27d4fDYavVolKVVDivJ1qQPAJlcrGBty8DipEKRMOUpMEIAApIKmdB+LiwsEDKbOotefgukAeowszYr4POoeKg1khSh24QIyJQ9fKhl9CqQAeE0ev1xFkqCwbHgIcoGFRqBK6FYK/8bOQHcUscD0SdXJ80Gnnv3ktokUiRGQIXxQfihzKdTkULhW6aDV8LuLSEB2rOGwczXTVnCOSkKWfenMa8vQdnThkK2DdpzxQnyqcgXdDSEfDOvFk2DJOgwwMOcfl8sn7V/kpkc+yGrMRdRBGq/wAldzqdXC5XrVYR7R0eHmJAA3Mvbkm4IfD6iZS3ubrnzVR4LuC2xeMOh0OAqWQbXMXMrW0gbJA4MwM12mwPoJdSqVS1WmWzFHh5mXjK0DvQzL1SmOwBSHEymfR6vbt37/b7fdLcqgLkNCI3fufBBErOvN5/7tXT7L64ralUil0rGF0bvGKxOPMWiJoVOGDwlDHlgOBLS0tZP7RvpBSsXC53u90wYXTPtgFJpR6fINFEoNfrQYWyGqAQZSsuYji5dwWomTdw4ltS7kuguy+CkBnLhhCcDWLTzAy8n3vgbb45H8nTkw9CUuoqARKXn3G7D8IBzl+B63MYQIrAWHwClwAx+cVrMHUZ6mzCsf9NOz7+iU+urF34nu/7fn79wAc+YGYf+9jHPvGpT3/1e5553bctPfWzH/mpp5bi2cnh87/3cz/7k7/z5M995/obmImdH+fHn+LxcAAlqK5eryvtu7W1Bb7c29s7OztbXl7O5XK9Xq/X662vr6+srADmjo6OiDSUQ7IWUBJBgQ7MVtr7JrO+s0CwaSY1M/dmXyy+sERxHBcKBXAJR8Z7nJiXhyOWYiMLc6DuLOa9W0hgoZtsNptra2tUqp6cnGxvb9++fXt/fx/jyXv37q2trRFcASss91BcnBVrX+CyPF5DqFOmO/S2xTK0E6EonSiyTn5VPQfogaIENIUih8QQ9Pt9qBTiGSMgmM4qLCIKDgOsQFRQHhlkA7EnBgW8ggKMrQLQn8sZv9L0LkgYi8gkGRJa0AT2kVg7c1tEwrYS3Lp2/jdy8zx+BgqErumkugJ4TRZVsBI2K4keYOkIZuxAeCMv43vn3iaOXwElKpIV9uI+YiAQupJVjJ1Xea894CljwswTZdexC0J0MkrLlstlkgCz2axQKKAMJhKzrVINTblcRqWqM1Qm0byl4cS9r2du+sOAawIzUOibQZPibpNmN4hoeS9ZWm4uDzgMpcDiZDLpdrvMZCUKwCuAHlhw+Dn6P9VqtUqlUqlUeLp7vR4F7ywpgHiQFhYEQDS2o1KALC4uYn3KxlLP2szbNUXuzhPHMbSZdlzm7pihW1kFnvLW5nDBO8WzX524kz+bTx7G2WxGibq5jRFnq60ymyLGKufdIHnAzRGe7iBlZ+mETSMPGooUlj7GPPCWM8Visd1usyeU0yQYkQVHtyn2dlz9fn8ymdDiiD/y+MfuZETuCIzY7/d57sys1+uhSIncuj+KInA/2xs5e7Cp4AGfz+cqzWSzxI6ab4miSF8Uvrl1OZ/+7HMraxc++MEPxq/Ubn7oQx/66Ec/+tnnnn/6XU898AOC9NLqu7/pr63+we92J995Yb79f/zaz//P/9f1ttX/wtd99w//wDduzK/CZT737d9kBTBodLr78f/913/zY5/d7s8X19/1zT/4n3/fV2defNXLzGatP/rNX/iX/+a5nbOly1/zHT/0dz/8FxbPS+DPj9c9HpqGcnFxcXl5mbWv2+1ubm7m8/lOp3Pt2rXhcPjII4889thj2WyWwuFarVYoFBqNRrlcvnXrlhrGgCEsUawQeoNpFhGoNRUAzrzHF+IhM5N7HA8zMXjmbm1z7/sXu0odQq7ZbLLkQWywPxZ0U4KsWq2i5TKzk5OTW7duPf/886Tv2+02ziBq+yEigXCicgSqXlIJnzyWy6zXqlM7oj09OHJpaQmFft6t1CniIY3FKZHjI/BwOZBPwSsVhMA7LhkExrkRkyaTCXbfUMgEfmAESIsPAR8DzqToAt9PvU1l4I0xVCAPVo5fKYMTiwZLxEXFLonjBvHhcJAoUDlPJglssbmglvs4814+zBkxbeTFgLawPsyE5eVlKlXprQenyPwB94j8i9w8j1sjNyKl4YAg6N4Cdz9d9Ebn3ESAZt6NSJnPD37KYMWm3hZI+WIulnETVVyv19vtNhXlnU4HNHbv3j18UpeXl9netFot5u10OqVe5969ewcHB7H3RIm9RJdMPagRT2n+zrQBoCD7I58ACQdQhn5mirJLMc+hAytJsIK2Yy+EIpu/vLycfCQXEz0MkfGl3RurVCqtrq7SIyqKouFwuLu7e3h42Gq1BoMBGBG7TTarySUC6j2VKEJizseur0C9DdahjxdzNfaKFjZdPDJApdj9gJiQ9XrdEnJbc/BXrVa1HAGCwzCkK0Tk7bjy+TyPP/gvclcvZiaV8mYWeq/tQqGAcRVSogXvPqotHLMaDI0LTz6fl9ww5bZQodfHTKdT9kjSJt1nSsBqTNEbUJJNiOxOx+NxqVRCN4kIWPtkrUKcHptbvMAODg4gwtmOdjodXqmsOmwxBARPh6gHJcfTb2KznMFgcNxuf9d3f89rJhw+9KEP/fw/+2ePjUbFQuH1PyOenRw+/7HfOix8dS1379Zv/Nf/Y+ubf+zX/8ljduv3/+l/++MfufKLP/jOn/nIT78il31y7Wd/7v996nt/7Fd/dKUwb33yf/mJX/qld/z8P3zP/S+zydb/9l/9yuZf+fu/8F+8NXf4//wPP/FTv/aWX/ihty+dQ8rz43WOhwMoWUQajQaQUX7gJDpffvlldEvr6+vT6XR/f7/dbler1ccff/zChQsU/bECqoSFFVDSPflKEMkIP6zC6tVBjScNMMx18ZOEhbW5JDzjHuPmTZAXFhbw5wu8JhGsgAiJnTGYY3V1FYZjc3PzM5/5zLVr17rdLldEmU7KOyXSNyx2ZRgULBogzjDrxjrm8qO5mxtboiHK3KsEwC6iarJuVYOUzcwKhUKy7IOtOXATIKvQjsn53I2WkMADgLQiR+6jmfbeGCBRldco7QV9oiwhaI+oQMwYDofFYpFVXoo3YS+Q9NRdkcHikevbSIlmvVW60Kd5tpQQRYI7k8nQn13UNWQh5A3EJEEIEEbMA/AxDWq1GuXAyEA5/9grP5iHYK/xeIwrVuRFrIE7vZurSOUdvZhotKgQSyZdRHUqUcP+mkcm4TITeat6LhPWVrcDDFGv12GnoijqdDoMYKvV2t7eXltbe/TRR80MsWDgllUYHaRSqe3tbbV4YVqaC20nr2ykbu7d2G63eUEURaVSicERZJGgBfTDpIV4JmOuHQhLh1hhrpHNA19kXuOvZycIgmq1ur6+rrbpk8mE7AEeDqS80ZMkVZ5AcLkxMMnBKHBdIo+Td0cjwMVGbheQ9go5dLHJ6iVzXYrywjz+k8lkdXU1cu0mPvCa9mDc09NTbCt45MdusM+Ogpxy7J0hs95xkX0OV82Vpt2hk4eCfazoXvXcEqmc91aNXDs7VWQzdKAwx8csU9zElDtiahcnYJ3xPmFsiiQqBYBSchd58VM6nYYlDdy3HJQfurUkqzQPEeWDqviJXV4Zx3GlUnnDrdqX8Gh3OtVK9T5uMnnU6vVWq/XagPLk+b//7d/Ej+na1/69//7DF+bbP//JzLf9+Le8vZoxe9u3/uBf/T//yz/Y+w//08fue+PS2//Rz7zdf1l977d/97/6kT88OHvP/UVA472P/t/xt/7jb3tqOW12+eu//2/86x/9N3vjtz/xBn5l58dX7vFwinKQQ0VRtLKysr6+HrlXbeDSwyAIut1uFEW1Wg0o0+v1Wq1WpVK5fPkymCz1Ssc71kokO0qhkkUVxzMYDMwMr5+FhYVyuVwoFNSVh+VyMpmQUF5YWKAv8MLCAkUqBPLV1dVyucz+mDDDgpv1TmVwS8vLy+vr66Q7Dw8PX375ZTLdW1tbwGVSmWyXQW8smtKzEy9ZE8FbZI3JwjNW/Je5N3u325WciIaKyIPQaHL+hFszkxSd7017lXc6nYYYBuIAekiGjsdjWniTJSc5BeRVuk2BXOl1Es3cGvYStBgGVME3SAJF1BwOhww4udS5uzhBbqXTafLm5mli4U6FE3OQDYBgqAW+5RfDrSfKUp/ODgSWF7DFBCOOBolWPYpb3CngKXsD2CnekvYOllnvy8KviluEOt2slDfUgXHnuyS0gEekQ+CDHzR0AlBisEcML/NhOBxiVhCGIfOh0WgEbnqVch+lOI4PDg6gjTN+ADcpU2s2m8vLy0dHR2Pvhylrd3APz4UKupkAAgqMIY6zoCvyrUpcBkHA4zZNGLmLJ5afObi/Wq0iiwwTlWqwdBpq1gfKupnto9Go0+kcHh4OBoOtrS3sG5HPMj1it8GKvTgPlC8xJfgmdGdTNoe1Wo2JFLjPwNibCQFoeITJIOe9iWLozVTJ+wMcMebkxvGBJycn5PdJGQO/yGaAMiW/5vFkUomD15ROzm2eREra5fsLGo7cljL5emF0/cs9klPBfD5nKNi2JY/kFtHcYl1GtiD1jDcHUoNWbVpmCY99sZW8xXzrqNCgPRVzmAuRSf7MG5WxJiQx/ZtwdLvdSxsbDwCUlx95ZPvu5qOXL7/G/6GhXJydHjz3Wz/3zz99e/QN7zrdny29v/h5HWWm9PjS7Ll7rwGPo9HnfudX/uXvP3vzsH82i2MLCu86e/VFz0Zb3Vu//Xc+/BuaKUtP3Zv/SS7z/PgKOR6OD+XMTVtCr8jjUR8OhyRep95UkJWCZ77b7QJGl5eX7969e+btKFhhKe5mUTAvPASmIIcizY0is1qtqvxCzhcpN7eLvS8z2EUIA5jIys52mdOj0ATKkyRyLpd75JFHms1mt9vt9/u3b9++c+fOzs4O8vnl5WUc78yMDm/gV2m55t6dRUrElPsnZ719sLKWdKDhSgnnS0tLdFhh3KBvWWoJTnwCWSpywfl8ngwgu3nyiZQSK0k3dU8fVPaMDJk1ak4BIlLRgR6ELEEVsNEKtNK8mpffmov6M5mMBJH5fL5cLhPRZ7MZPoVJSJr2mmVNs9jds0kQA8ikVyOu4EUKwkAuyVAT7NnhZNxdnAwdM5Z4ORwOVYJNAGbaMKrSVzAOQKVOpwO6lZoQxAC7Ay00SzQiSvKdYCyeGuX7HnDI/0U5X+2CqPLhE+bz+WAw4KJg2uDveQHk0EPGTAAAIABJREFU1unpabvdpqshlwZlS5fUarW6sbHx8ssvs3MQacStT97rwFsgRlFE8poURBzHaCowGE8lPG7QNrDnBLoJR3J6w+Ewn88jY4WSl/hv7p0kAYXwcCcnJ81mc2lpqVarsXs5PDzc3t7e39/HjHMymdC3MHYTSj68VquZpzLg5CDnoGy50cAv5Vgt4b0gPSVcHZs0pZXZPrHHA5iqeCj0pj44ZUKHj0YjxBvQ6uyOSBGwBDEVQfMYTLKdS3uTrZxb/VPRyPmwYWDEkKdz7Uk0H7sf531MHgyxcu6kldGWRG4mIPh43+VrrQs8yS4rH5YCbZ8gDtDPsObwb7/f55LRUUjPytZ9OByaF/YteKNOvo5zI++hNfYLCWRfkqNarW7dvWvvf//rveDO5ubqcv1BHxGkF9fe893/2cGP/MNf+dRPfuda+uTGcPpMMWNm08HNk/TaQtpsZmb2x6h1vPkv/unvp7/vR3/5qy5Vl7Kp3r/9ez/0r/V5f/yy9NLF2lve94s/+63Nh1a8e378+TreIGv2p3FgG5Rys+XBYHBycoI1XRiGmOyoIhup5fLyMjImECeaKoEP8lCh+3GQk0W9B0l5fHxMF7XV1dW3vvWta2trbOuJdrCAg8GAL02n09VqFQ8dcANQgDgBh6f1HeylGmdiWBAE9XodlBaGYb/f397e3tzcpPcPLZIBtZPJZG9vr9PpEAv5ZOKErA0JqArPUlmxBKsROaaDUJspL78gTQajxvlzKONGKo3df969joMgSKfTNPWWyookICEk4+bAURQNBgPOQb2VAYjgJPN+fdLOTyYTcsSwg8QD6J8kcZJyQx9zfDmZTJDZQZsxUAAU4gS3kpsFrh0MBoL+ykXydfgJBEGgjikwT5wzIwYFokmSz+dFe7N7OTo6QlMReo8cQKEwUORVBRlvBQTCTnvnRl0m3CGXxjQg/8hYsUXhKwJ3bpq8kbnJ3I2skzVYJ36ACSIvoZi5DSG3D76NoahWqyLOzfdgzDc62oOn8btJp9MAFyVhUbUCF3QJ3Ljd3d0bN26MRiMm24ULF0CTsJtsMkUqI3pbWlpiT2JeyMIgU7CC2iR2BW2xWASZqfvAfD4vFou1Wq1er6NLIfWxv79/+/bt7e3tKIqw2yQjzHZUyBj9JV/KLQYwsemC/wMMiboWyBalLdDGhShPDT4G6ZbLZS4cnSKvAfEzmGEYskyxBVVeha01m2dcOZnVsPvcOyYbbB9NwwMvvWeUYvdS1U4pSNTD6SviV4qb9cgzOZXLBnoKTXI3j4+Pk2lubdpjb04WuApZkmtuhDnjyCxlQ0uBY+y9SeduKWBecc/P0kShsmVtTObZNTO/yJj2Jz/qtRpP0Osd3U6n0Wi84eekmx/4Gxdv/K+fzf/7z0x+91c/+lJ3Mule+71f/b3xMx+8kDNLZevh6OXOxG/A7N7csrl8Pp+atF782G/8xk3q2u97WW79r36d/dYv//an906m83H3zsf/1S/+4stvdgX8+fHn6Xg4DGWcKLBlu4xwighkZgTsWq2WcT85akSIkdBFqURVQeCOzZGXZrPs9nq9g4MDXrO2tnbx4kXsY8x9Z2DXIu/jJ4kbWId1f+rlwwQkagP5RlhALUzkAVnrUaRBp1GuLgndbDbrdDr8nS4OgqdkrwgbpEeFmdiak80nyQ6OAcTcu3cPqhIdnnniMvDSYEFGLZflcjnrtpSqXCacpFKpSqViZmgGWKDn3rpNVUe8ns+UCFXSSWFx2UyaGW+RNRLgTyxFcp6IruDgpsdeLauSHZhUMyPLz/jANASJtFrGXSolaCNoRS6BLRaLeCDzdfNEPZaKewCUoBxkG8gxY2/JyCZk6laUzCjF1FQqRffhM/cnR5TJrBBAgZQiNgOqFhYWmLRQcUL5b/isyaGJQSDvzL+UZYB+FryFKewXEhGQN1h2f3+f3YXmxmw2w6+RnKYyA6H7p4LatdcKvdifW4bLAWY0Wfch15aMXQrZYaBAOp3udrvQb3EcM8hsIIFETMu5l9Uz0xChQr9B+MVxXKvVEAqDSCBZQcZnZ2f1eh2dMdx2q9XiXi96vytoPCEhVbpwbqAiwA3TOwxDdC9xHJP5hRdPJjdYCQUZWcS4CjzF+CKWTaX7517UPHNzqLkb96BvZrWcvtIxRy0bEE6YS18ilz8mdzthoiQucPMEnC+lZ+V/2bmh5jSzfr9PidXCwgKJAiWXOcD9pLP1+fygNBHPDiYY0nGygLP9RpoZe90bmJ6dD+U+eTfHFfsw99o4c7+FlPs8JGUSb/hkfamOUqm0stz4gz/4gw9+8IOv/t+PfeyjqyvLhTdynDUzC4rv+I63/cqv/H/Fn/yx7/31X/iJv/0bHau+5Wu/5x/9R48vmFl+469/Q+XHf+iv/Xr45M985KeeWrryt/72e3/6137ou/6bSa7x2Pu+8Vs2Fj9hr/Gy7MZ3/OO/+1v//CM/+jdvtWdLG898y/f9nUcejun7+fHn43hoVDakCHhIajyi8srKyv7+/tbWFjsz8jLT6bRcLjebzcFgQJsZMnFkUVltxTlBG4zHYxlbrq+vb2xssCT1ej3eTr4SwAqzYm5jCc6AbUIFyM6eFUe8CGFSzUvK5XK1WkVVhuLnyI92u026mTqk4+Njrci8XZBUu3DArnnLE+VzCVd4khPI8ewETXI+aW+sAssbuzUjUj/AEABCLXyIZGp2TOYI+AXjK1Eg48MgkG9i5GNv/TJzZ74zdxNkAIlwIC1w52vmbeNEybDKYIX/xt4vZ+ZV/IF3k9N9mbsJFBCN+J3zrtyRiyJgKZL8ByhKsFXFp3EcDwYDsY8A09CNk2SEpAIITiD2DoQT74oJr5NK9OrsdrviwgMvVCe8Zd0LsNvtqmw2l8tx1cks5GseaW8saR5Qp4km16rPvecdI7PeyJ6rABkgDN3d3R0MBgRp8gOMVbFYbDabqVQKvMvYCnJJysaOCHTF/u34+JgHMwgCNRAn/wDbzScwDjwCTN0z77sICD49PUWPqy3WzDsKss0TAgNzcFCPhXZZTDO9+LLZLMb4yiyvrKyoc4HQnu4R+1LyvOPxGPAUe2uZqZsWhV7OQgkR6ZTxeFypVJhgtVpNcwZMzLNDMoTJY2aU0SC9oLhk6o0fueOqXMl4I4DQnVDFBUZupS4ZIt+rdPnMjc3P3DGNWYT8g60g14jWheWo1+slNaOsGObVRZreXAXPRex1dUkkR80Td59VvVAoIAxlgwTf3263yfijVKGLj2Yak0SPc5AwY5LjFXeHkwR5Z7xd0+/8zu98+MMffvDz9aU6nnn305/41KdfjSk/9rGPno5GX/XMu1/7bUvv/JmP/FTi92DpHT/yL37RzGz9h/+7b/7hV744WHj8e//Jb36vfk833v8DP/3+H/jjF3zfXzczs/teZpauPvNd/+CZ7/rir+r8+Io8HiagJGdKgDQz1r5KpXLx4sVbt27hTPn444/XajXiEHmx/f19yBuWcuglFgXwIrlXaBLWWXMQRt0AqIJU4OLiInJDASNsTdjigx5Cb8CImIl1x7yPHHELuSF9BRuNRqPRIOt3eHhIa5yDgwMzo+Zxd3e33W4Xi0UgIIQfyVASxEJO4uTIeXE+sH2S7Ysrjbx3DgCIk+TQ0t9oNKhsNQ8tZPEUfqKEy8nEfT0jz6TDQIjKLRaLOW9ixupMOo/bmslklLEVNSj7j6SMKXme5uaI0mvyX3wmQzFzWyKArLmhJtgFOeBoNBqNRpwhRM58Pqfyg5soUAXTSURhDsy9aTIBGxw88x4twEql/yI3r6Z4iFvAvQPy4lbNW9Lu7pl1i6usm5xzhqpbglLiFih3HLsJQLLQ5PUOKCJ+Tkb3ICHaI0hzSiJf9bwQmKvVaqlUQv67uLhYrVbT3puU3YiZjUYj8Jk2igzO2C1FzYySuHQ63ev1xu4GitEBLwBapVzDCupCAcKd5e8TbwiJ9iPyehFOPvCiY91WaeaiKMrn84hqmIr37t3r9/uj0ejw8BCWGpDa6/XYdzWbTXMDpsiFgOYFT2NvAE2mgnsKKuXhIsUMPuM0GF4tLJpy7N/y+TzWXVGi5ZWZsfIwgc2Mr5jP59CoYFz4UahB0Xs5t23ivUGiIkdZ7DiR4IaGZLcgLa/OhIdOpkJANEaA5MnUmxqUy2W268mFWh/FEwrJKu+hOFEhxKIqyYo4RYaCmQ9tr8dK5K7SXJCRobsdsdSj3IVnZTut3EXGm2dSsvngh+tLe3z1e575zGef++Vf+qVqrfbo5cu379zpdbsX1lZeF02eH+fHn8njoQFKEhNpt5VZ8MZiZpbP58nFxG6bnHLvw+Pj4yAIVldXMYqDoWRdqFarxWKRXTv4aTAYKMkyGAwCl3ABuVhfCCF8PlGwXC7Dgky8vzBnGLtAhyQOvCmgRHm9hYWF5eVljFTICW5ubu7v71MVhPqq2+0eHR2ZWRiG5XIZSz/RBoqpZIJQzgVBQKESdCn8BNcOUEOzRScYkMfcrSVZtTlJclIqECYOIb1n5GE4+F8CBmeuhHin08GZj+CtlLp5a2/S6Mi5CDDQVGZG9SjJRAEpYLqS+8rzzry7oKBtxp0FcZHk1pBhNwemYFbgQtodf6ByeYEujX+xXQS8FgqFarWqT4bYAMClUinAkBJnuVyO7vPcAl0LmEPIT8EeEC+9HTShmYHYgM6hl9AyCCk3fBGNyoDPZrNut2tmb9h6EZGcgK8unJO8r2cxr1Hgn3vTF25HrVZrtVo8CNxTZgs5hOFwCP+XzWbBE0EQEOzVSDApdU2qP9mN9Pt9LpA9HipqSVF5EICP3CCeCwZNw8W/S0tLAI7YlZSgeTAHLpVMkiiKsJwcDAbtdjvjXfj0eDLIosAZPcZtmmipBaARF1gsFjudDgoWODM+jeUOHJz2KjSWBaAMbS0BRkq/oqOg3IdlSj/H3kwctC2SeOrmrExUZpTIb0vYjLNzRtHBfin2XqD8PUi4xsZuYYaO/OTkBPQpCYqyPZrbwF/wPY+/cCHALslNZrxan1a0GKuxkidnNVMX6YiAI4J1iNJWq5V1L6TY1ZbcICqZsGKQet7c4Qh8HLy5Gkod7376XY+PRq1Wa3d7a321+a53vP0LynSfH+fHn6XjoQFKRD8579kQeW9DlrxGo1GtVtHLr62tkZ05Pj4eDoeLi4v1ev3KlSuDwYBKEXIilNFQiKOeH/o69v0swXJnBKSyIwcRKqurZBlhKfI20JH70ZhZxht/x3FM4UI2m202m+yt4zje3Ny8c+fO5uYma1w+n+/3+zs7O2ZWLBapP2AhLhQKnAkBWLW9FCIgq8+4rSDIiXIBTkb0hqRdhE8yZbyFbyRiydg8747KCi3VahUmI5/PY9KZdnPB4XAIayv7G1Kx0iGxJUin05VKhcQlSzanh4JQtVCBF55DnqW9Qpwoyz0F7hOWksU9qBriOOZWUhnDTSTiCqND/eq2AlDIqKYTzeIAK+w3iK/9fj/nvSiB8swHTj7nnR65cYBaRh4NRsq7DemiyuUyxWf8ZTgcKpGKPm/izScJtDNv86MEIro6XkDG9sGPmEA2iAquDmaOSw5eS29gDrULCes7wCv1ztxrOKSdnR2QH90L4zje2dmJvECKHRQ3mjIOZB7J75VQD/jI7QvdeyH21tI8vOKheYJm7gyacS8I6CtujWa+OSWMUhP+CT1Mu90+Pj7udrsAuziOO50Onj6RW3iC/wLvMs/8FKks/ptboz0M/4vvRBAEKPxms5n0OZwb1hC8Pe2drpgMekjRZjAOsHehd/EOEqVd5kXNGfdIV4U1Q5r13ptKdAD6JXYMvbH43Ns0cDCFZLnAZcKY8ko2meZ9fSJvN8VuU9pHcaLsoHhM+v0+N4urRlPB+GhrHbpoWDNHApXA3X9RdtI3a+41YeYFOiz4fIJU5qVSSVkg0dtaQt/8o1goFAuF13YIOj/Ojz8Px8NMeYNj5t6JlTDPI12r1YrF4t7e3s2bN+v1OnY2k8mEHjP06r148SJtPAqFAomzhYWFRqOhjiPJnC9YgVjCAsRyT9hGoW9eM64+OuQBBVNQeum/su7FCPW1trYGmhwOh6C969evX7t2bWtrC/3ZwsICNA8mOOaKfsoRwBy8fTqdojqH2gnDkBbhpGXB4vwbebs/zIBkW0PVrWAceUOiaeT9slWmoIInojKSvihhwQPoz77SO5NzO/OmRNA/UIaE1Yk7k5unlc2xeOxeKkDDmVvJIIoyMyotIj9AJAw4YoaU997lh4k3MiF+8DK+l1qonDd2z2QyiBz4ZMRwAAjgDvc6677r5mni2M13gBQkfFNeAy4ZAJMNzEdak0+AQCoWi0jNAOWq4oq90CTwGmHRJ1TwQJ5xa5rNJqf6hk8ZqUwxdpwndxAgDg6IE+W35maNSV4TVv709HQ4HPZ6vUajQQjnceCscrlctVo9Ojo6PT3tdrv1eh00SWkdFC/8E01oOMCOUPvSMIDgmV0S/0n8oBsN5jDnU7XXUt0SgIbTW15eZlaz1xoOh/v7+7u7uzs7O4eHh5xGu90+PDxkmvF0kKcWstSWEsGucOFsNiPVwHoC6mJkAFva5ulR0lxizeFhjxMVMClvXhB5QV7evSqVIwaD8tTzEKl2EGZRey0xi+ImpWDhu9LpdKFQ6PV62njM3PdKWkORtZFXf0NOkzCR5kTnP/MG63EcMw9TXuW24F7ojIBuDQQzdCZPN9kD2EfOlkFgS8aTeO/ePVov8oCP3e8TwlXuECyVcmbodrssBezqWQbNS87f8OE6P86P8+O+46F1ymFVTcoEtTWH57t8+XK/37916xarxurqKnk0lgk2uBBU5Clwac7lcvV6/d69e7du3bp7966+MXJbClTnEC1ELxaarDcuI+4GLtViOWaZI4EFYDIzwT6IvcuXL5dKJSppDg4Obt269Yd/+IfPPvssO2zINigNkrCs74RkFmuwLBnS2Nsuz7xVD5tsYieluEnKhE/LeF8cEBhhVcs0FbsSrZJrxnAkjmNSlvA9mUyG0w69mCCVcDlGUYpijHCovD+eTWBTAFbknnDYQUM/KIdO8k4CQfOG4IQ0+Ke8+xnxSkBGFEWIHRlb4ko2m+10OrGbChE2IFnBlIyPqt0BDeAYlBKcM9CZio0w0WEv8C7JwFPITjjvsbeQIV8fJWodUm4XmkqlGGFcSJUD5eq4L9IPcDnA4pOTE7YH5OyYyVRWPeDQ9gBkAGiGAwNqiDSi1IMfUl6uO05Yd6VSqStXrmxtbe3u7ppL+mDCRqPRcDiEbjev8gZPk7vk1qyvr+/v76M8STKUgE7So4GXppGpQA/DHOMOIqrTwDLl0m7damY8s/p8NgblcnllZaXRaEjBcnBw0Gq1XnrppRs3bmxubnY6nUajMXOPCNICUInJwQQmqigbSpvzZwpl3PmV01PvHGFfpcUFHKEnZboE7cemIuXFeSSveRJ5glg8AzfhB7oxRCyPkhLRognyPnIzTuq72QgltRBj9xAlAcImQYPJBabcIpSlmzsVun+Tec04m9tF73UJtuZ5h0PFKypwa3fWQPob2St7OWpvAyPLwfZ+5nYWLOyR13qbe6IRUMzTOABTllz+Dskaun0Br0cR8QVHs/Pj/Dg/Pn88HECJjkqCG+gxZILE0fl8/vjjj4dh+NJLL129epXt8vLyMisR1pJQTZjGYc+LP3Oz2VxbW0OGpW/ExBhvHWIe8ILXnJ2dIaKSdBLmLJNoEkOKMJVKEZLN623jOC4Wi48++mitVpvNZqPRaGtr6+WXX3722WevXr2K2mw+n7fbbYIBHOHi4iIkJfFDKWP5+ETu4kHJtgx9WCiVEUMFyLUQDtX4GLhcr9fFo6j2CIZj0fv7mdvTxO4PSrTGKVPpfsHKVCpVLBYBu7FbB8dxTAlO7KXZhBbSu0QOvsISTBjYSHWsDAXVVOJ4zAmP8XiMwwufg6N11l2IGSLwU+x1nWA4JZeTDNDYuxsz2sr3mUdxxKaEnLH3KBKZMZvNMJDDVT70sglGGxbEEv11wAdKd87dYvrs7AwjGxh6cUsaRukuAC5ww+lEBffrHQwRStbpdAqLT5UMT8TEW4cLVaTciX3sfV9S3i3pkUceyWazn/vc57a2ttLp9PLyMiZNzHCY6UqlgpqN8RGvzDhfvHjx8PCQUhKdpEhorlHwiw9EdYABKolLRi85JWLXsCqVqU9mqlcqlZWVFZnXjsfj/f39q1ev3r59e2trC3qSVAlbx2KxqORGcsKITAUtsQkxFw+ceYuXOI7pvwUkoqw4juNqtWpejKgPlwpThc/AUPAW/wXMYiTZ7KFCBibmcjkITiSz4DbmSeT9SNn7sQ9k3OZucYC6MY7jlZUV1j3R7TN3EeIRm3tpmoTdxWIR6wOw7NgbhjHHpLyUAJ29H1cHzxq67wHPSKlUarVacy9PhMUPE+15NLywm2yEaJve7/e59sANLPWBMAW4AYhR1g4/TugiGKJkuv/8OD/Ojy/8eDitF7UXNO/iOh6PIXuIKICqy5cvR1H08Y9//IUXXjg7O3vXu951+fLldDrdarXAo6R6Sd9MEj7bhUKhXC7LV6VWqyHGZ2UcjUZ8dRiGvV4PXNhqtajsYQ0djUbwJaSbWWSJlCAe/hegubKysrGxgUQSQPmpT33queeeS+YluUw+QdCKgJRKpWCeSqWSVmF2/GBHUj9szdnlax1UnsgcMIkbI2AUi0VGA9kfnAHxMvSOjoFLnQQ4Iq+EIFCl/FAZBFrV2LtlEP5ZzSuVCrHH3ElYDIQYlMBb6YSJVt3gHggn6CICA/QVAMW8WiVI2PSo5kD6RfM0KJrIbDarMUTTCRHLVXBdlnDCMwe7nHCyZpmog/hMdayMOdwGs0U4NQmjAT0p76wjmo1kpW4xB7Uvgo+aRRNvNz+fv0ETNKhcgEXoHZkZ2MlkQmca1B2ikO8TEoDImRLURz/55JPXrl27ceMGe5s4YXVEGVkcx5VK5cy77IC6IESx9Mc8nDO8cOECiWyR37C/5AFSCYNAjpm7zzKpYm9rCaXEFE1WWiwuLpZKpZWVFTZ70HidTufFF1+8ffv2/v5+u91mhmh2JbcolqjfAiqJewbGAXwBPSlX+4HR2QiR/YDU1DzRJfPz3C3JGJbk6zl4EMRhU8ctXo3HCrqdxyGXy/X7/UKhgDyRewFBLuEKnwMqZdvMFekSNN9YIrLeUEBoHgDN0LGkxF7lpgV84o2+Am9HzlcwbQDcfC+QGqd3ZiyvkT2+ea09WhocrBglnvper8dWv1qtFgoFphMrML+yxpoZ50xSO5VKoaQMElrbh1KUc36cH18Gx8PZipGkgIiSj0nobg7aPS8tLV24cGFjY6PX612/fv3o6AgcSTENuJCPklwdz+TZbIY9Hl9Xq9Wq1ar60LCGovSSWK1QKIAjs96SO+tNFLTWxK6dT7lttZmtra1duXKlUqmwhsZxvLOzc+3aNaw6OIFCodBsNikbiry2HVdedtVj76UxT5ihmJt6iMKJvf8Nhd5AjcAlUAKvsTfkwJ6jWCzCuwBYdRe04zen96rVKgs9BU84MAPEFY8JSIw/sk4Cxmw2I0TxLVJWkZrnXXASaa/y4a7N3V544t0+dFEzb4cIrTX3doWWqOqF+yTWJtNzKqMRfcV7CWnyxhdFRAQSqoOfo+G1HJFC9/pG6grOABDEblQJ1OM1jHDgtQjmyWKmIspdzmfq7fv04sBNCTQJdeGMlRyhX+8AZAA45HAOLMvlcjgiIcAgMZrc/ATuzs33plIpJGvNZvOxxx6LoujatWsHBweiymBYW60WWEqXz/PFXCITqtNjK0hyGSwSuuUkYgaBRXZZMM08PuyLWElErpu3hNbY5nK5CxcuAPGz2SxIF+kkzccZQ/GRczdijL1CXOJpQAb9AGOv7VD2gMcW/aJcdfhMBDmRC5dF+UO+gtQxltIeI47jev2Pu+2RT9dk5szPzs46nQ5DhywBLjPnLcLN076MHhtRLbbkqdmsUsLCwyUvW21Z+d9ZwvdbE5VEU+CqieTOB0Z57kb0WDKBbvP5PA4J7CLoPw6g73Q6vV4v73aS5jYImvnwl7iXm1fi8/ShBDDv8358fMxyvbq6iowVg/TY22mmUqlqtaorPT095XHLvol9F8+P8+PL7HgIgFKAg3xr4O4YQRAQn+bzeb/fZxkFGdBhbDQawU1Wq1XM8Hg7AYzVOYqifr8/n8/r9ToOeWbGWk8JhZmJ/UIIJUEn8EULXMpdABFuqm5j7Cbe+Xx+fX39LW95C6UkrKGDwWBnZ6fX64VuaGJmsgsm6QNKU11h5N0UzQyQPfODOFoqlWjGCJQEG3G9wMRknIb0YvXnM9Ht8WLRcubxBugJZiVZFrkmnZ9lZM0I9Pt9atghCOeJ9uJ8EYLOKIpYx9PpdK/Xk80KV4S/NDMBUgpYBu3Ex6Zck6d05Hg8prYjifUn3uCR/CznPJ1OcaIB6DOvmDCc8MT9hkgjmhd5cB9nblzHxgZDEwaQeoKlpSUqwwBJjACv5ALF8gKPuArCFZPBzCSoSIpoVQAEcMRwlHsxc8tuti7TNzI211OmPZJkcww7d8e80pxvvA8Bw8DBPBHdcWAws/39/eFwSP0EtSZCwIrT/BcP9Xg8Vgt7MwPLIqEDmfF3bgG4gUtgNtJkT/Szua5DimeVYQGqMplMs9ms1+tMbwB6p9PZ2dnZ3d1lqoOr0t77G2gydSNuzofNUrVaBRgxesDxrFvNC3ZjoUD6OI5jtf8BfsWe/2U2cmLsu6RCIcF9dHQUJ4rMAMTIZ3nu5FRgr6zgYQMGC0hqPnB7ryAIGHCQHHJt7ZA7nY7SIynX0UbuLIY2GtpYZU/8wIMpfULg5lwSaDKedCTSli9I1HstendHaVKr1WrGrT156plRCJkCd80Eu8uvgNlON3b4OWVfAAAgAElEQVSuJZ1OozWC9wWmJ5Mt7GR4QqEAkHCcH+fH+fEnOB6OhpIkkZI77F/Zd2ppgCM5PDzsdDowef1+f29vr1wu1+t1Ns0o+ZTqJajwOezIzYycr9gRlgyxfcqlttttKAe2zkrnwbiUy+XYPY1Z6Gmhcfny5fX1dVK6s9lsd3f36tWrm5ubvV6vVCoBRMB2/X4fwiPyHmvQsWYGshSEIsNIQo3llTUUeoaTPD4+NjOoF6ULGdvYrUPy+TyEyjhh566YYY51pm57VCqVuFgyTWYGlchfKIztdruUJihpDqNMJCboZrwdJT9Ag8VxjMgJyko2NEgIknQs15403+FWqhiCsp5Jomvw8fEx8Y/YRqQB4oRu8nJ2dsZNnLkvICFfVCiFUJRnISoIvVJ77E3SGUkzw1Un9g6ijIB57RdkSeT934jBfGDkXfXmbs0IXkEhJwVqEgQT4Jm0wA72UYhoH3BwozOJPoGcgCp8gdc8gMwxtkag58Cd1cXywjd3u12kGicnJ8PhkO557HPQQvBAoUUGizAf4MDEAAHNxU9TrQyUB2UKW0/cPZE3shGFpJy4k0DOu40zdZeWllZWVpaXl1VnxjO4ubnZbreZtIAtJa8BZ8xVTQ9zE3I6TObdGyjvvtzSJbMr4KPMO9zAXDIDeT1SHK0/bOQYbVhG0I/KU5AJKifLDGS5kEwCAcbS0tLR0VHkVlMMu4rbtOZw93muWRPu3bvH7ij21o6B63kAzeQTkvMqcnWmdEqB9wHiJIWwAbiMKptn7TSkGFahEo/wYDAAPae9kaP49djr7aTHYH2Ady8Wi8g6oyiCEIU3Bdmb2eHhYa1WE7cdJA7WJcQwVPN8sUHt/Dg/zo+Ho6FkhSIhKymeRG+sZYCt+XzO66vV6ng8JkmNygo0aW6bB1eRTqfJ26LUNjNwiYzQlFwmI0NqjA132m1lAGRJ7i3ywhR8LlKpVLlcXl9fX1tbA/hOJhPqRj/72c/u7OzE3mPNvCJHEsko4X3NGkq3BiIxEn6uPfS2dYAJ7dEbjUahUDg8PMREQxo45UDJdXLmpLEqlUrofWzz7hs/HA6pxDRHyapkJ0pJF4Xx0Hg85n9xwDFvPWJmoAfgCDeCHPTU2ycSusRBDodDok7e2y6bmXhi5eOg4gJX48HRKmYLnEmrqrANRcqkYiRJruW8UyWJUQZE0j2FKwKwNHzASoR9nK3EnYBCsBTnwA9M5pS3jzOnkbj1QlHZbBYzFIowoJTE2jKfuaG6IjkachMfcKS8wSO/gngymQzdg15dfwAOJo/JybMxk6CC0IudpLn2FxlxzpsYoUKzhEX/3Et8giCYTqdwzMDxvPffM+exBJL4HJHcMFIqQWNuh2FYqVREpwXuzJDNZhuNRrPZzLttZ7lcplv30dHRwcEBqXY4bEkA015WD1jkB+Xuw0TnzziR106n02R1h8NhNptV5iSO49FoxBPEZmPuzeWZYMhsyDaQtWDkZ96zO1mMQrL+3r17NNFOuRqY/Q/W6JH3Ped54eugxoHmnEa32+XkJYRg2E9PT1dXV9mokw5CIsl9VH3YLFHGztoCJDX37hB5zDLLZObCuU1zd0eKXUstZaeM09nZMp2S+0ANCAerAVfH/gQ1LVcqpyozI9HE35m9fFfy2QzcIOk8631+nB9/suPhaCgV6WfeGK3VasmK1hwBgGxUnpJzD17QIZgARKXAyfq+s7Nz9+7dcrkMTwBNxYZbOrmUN26eu+uvsmaQH2jD0YmPvb+OmcEiXL58eXl5GXQ1HA6Pjo7u3Llz48aNGzduYNS3sLDAimZeICKvH9FmnB5UohiRwGufWdfI91FOm0qlKD2+ePHi2tpaOp3G0T1IdF8ETklcWCqVaCCEYozON7Raib1XNa8nIUXumPMhvw9cDoKgVqutrq4SBZXnRV03m83wgaOXHeecyWTghoEpxGNgPU6EWM2xhSDZp8J52BrQDDhm6i3FYUlJklL0mndTQEabL8q4DaTUliA50BKcZezpaXAeckkhANASgleGDj4PxKCJxK8MUewG13wpvZTgz/ic2LubaNJy8hP3AQWySCuc8ebC5Mrhp7ULevBTxmXyXSiSxcfATGu4+EHcG1s1UYPcPu6gwHQul2OrBhqGqQK1VCqVbDbLROVyMOIZDoe7u7tse0hza0OCzpJz49aAZXO5HDJr/DJRGQZBoBph7dC4hHw+X61WL1261Gg0VNLLpvTu3bs3btzY398/PDwEx8BTAv4y3uyKQWP+hGGI9o6DjPM8Yb9qjooQ/wF6crnc8vJyzrsGMEkAMWS3YQcBTAhYQcOxd+KBDNbqYZ6lnXpbanaS5AfOzs74dWlpicczlUqRAWBmmm9yxD7ymfDx5KwDd0/jmZUIRFU1bGt5L+LsKNEmHi5wNBr1ej1ZjvOEwvVqoJIVP5pUAEdq4JjzSEH4CxIUZAaCs1wIf1nwRud0PGJKgHFHo5HS4s1mc2VlRQoHczZa6FazKKkgOj++kOP03r3tnZ1X//23f/d3X/3Hre2dN2zKcH78OT0eDqAMvb4YXJL24t/YiydYL+DeGo1GEASHh4f9fn/mzd+0YVWQA2iSVt7e3r579+7CwsLjjz/eaDSgGUCoSv9pf8yixnJJeGORFb1Rr9dpBEL8W1lZuXTp0qOPPlosFrvd7t7eXrvd3t3dfeGFF65fv064Ik+q6yUamRmETeRecfR+BEGqVl2KusBlRqqSxv0ECLW8vFyr1RDRizBDGxC6NxBLv/DB3NsbAijRY0FOANeOjo6w+CF+TLy1IKNNWjyXy8EZmBkkGXGOrBP0FVhcdzD1yi5EcFqL3kKaVwbeQprbAVvDgKiQlphHRFcODsCkFBtfoZ+l7tesm3nVsHlolE1M7FlI5iRfRItq4iUbEvGXYoDmic4iKW/9QuYd+hl2FsRcrVax18nlcrDRBFEqBsrlsopRZolmyhCl4CpuwRs+ZbxFlSWwONDwSW4GQd7M/ahjL9Kae8mXQj6lDKBD0BVv1ICzDeDuM8nh8+r1er1ev379+s7OTr1eV2NVM6PWioqcwA0mScH3+31JWolAakLD5ysXPPeykmKxuL6+TiGOdjJm1u/3j4+Pd3Z2rl+/HscxRSF6QjNugh15IYhgjbhwqTK4xYL1jPN0Oi0Wi6wSCwsLtVrtwoULpVKJ2SWB7MxrycOE7/19Nd0gJx4Ec7hGvTa1OGw12emdnJwcHh5CusdxvLy8TJETt1u2r9rIqfZLM4R7J9tFHhlQL7cSaGhmKvuD108CU0FMZfOhe/lqHhz0P7wxcJMHLsp806IdBQNOuqDf75t3hdX6z2fO3VHLvFQIFZAsnJC+gHdZCrSHpBxK7aDY9gRBgKfVOeL5oo4gCF588UV+/tyLL+7s7d73gu2dnZeuXfMXfC51bsz0ZXo8hJQ37t/Iw4kWmUymXC4DX8TKsPatrKywMB0dHZGsoZUFmIb1S7JIwjybchIfqPrg0tg6cw6x+/KM3TLNPFoE7ogBLIDQkrxpY2NjdXUVrpQKHhaszc3Nl156aXNzczKZQAUpAQ3Ik5QQ7REQhMgEY0feh1iSTqdZ0aQlwmIDYiMIAnD2zs6OwBahvVarsUQSdciPZ70thxA5JwZvmvEmfrVaTSMJJwFByB/VWs3MuGrWa7V16fV6sRf8Urmcdc9qaQrNZfgs8Qwpbw886wRdCjWY8mpxGEHiGXODUwJVELQir5EnP440LZliMyfhVH+aSlR4zOdz2B1CKfEezjL0Tjaxu3uKyiUowsRo8pC2M1epQg9DlgC7Q7eUJxKr/FwkbjqdxuQSehJQPnMzVHxPct455vUO9irmnX44PZKYk0Q3bS7NEmUo5jsfYraoaCDmwsLC6upqv99vtVrYuNCLqFQqRd6YVFSodjVRFLXbbT680WhEXuwVOA9dKpUQkvJc4DaqkingrHYypNEZEE3jZrNZLpcrlQoODFwjLpt379596aWXbt68ycojRY15Z0VzBQWJAu64JbadZH4ZGckKY9cFojChNQCJYCBg1h2v5t7CO+/dYlgBmIdMldgL1XEP1Y6LJ4VPjtytVpB9Op0Oh0OanXIm7H9EMKvoDYGglANBEKyursoTFOgpxMzGCWwaeV9TTRituhJHMk9Y+rQr0HRinQ9cJ8okz3oje9ZbKSXYmVQqFfBuvV5nzFEFKMkwduP92GueeKLJeIj0ZYGVsAeUzJ2aTCblchnDitj7WUCOnpfmvN5x4+bNVBg+9uijZvapT3/6sStXKpXKQj4/8Vyfmd07vR+Os1s2s+lsFrnivNPtbt69+8zTT5vZzdu3LLbHH3vszb6e8+NLejwcDSU6d9Ek2mWyZITed2HmVh3r6+txHO/u7m5ubqKx29jYAKYQywnzZJSiKKrVaniYS7zPFjnJY0VuAy7tOShBT4WZZb2XD+mkWq22srJC4KTknE7iw+Fwe3v76OiIvnPLy8vkkj4/xOk0BA//xm79Q+gC+miBns/ngmhp79pCzjSVSmnZZaEn5wVvQbQDASAGgKsggIk8mLldkZkRFFV1wcENIjKZuxnz4eAwogWokaujoIpbySCTwDo7O8Mpif4oRCy+cewOjvNEDTJhm4tNCsgg1Qi9YOsoipCd4UfDZ4I5cNsmZYy0gBHgDJUcB4gQuYNXiuGgogGCgYs4I+9flxxPBkfjpkPnD3iV5WrgntLyUuG2souQPFSZOIEt4jSnRIAkxfzgB00fkvyVlL0KouGBkCmb13zoq1WbD2HJXDWzBW93zlMGOEhqKCEpidDT6ZS9XK1WGwwG4/GYy+GsAq8EYiZjt55NmNWD4807hfIWhsvMqOfDGf7SpUswslwpfrenp6dHR0d7e3udTocNVRRFrVZLEU7EOVQ3T33oDVEjN0TkdgeuLZm7g1Xs1U5BojTeEsZP8IgMBdtUJShYBklMC/MxB1RTSJUhLOZsNmu1Wvl8fjKZsD9hWPDghFaEUOe6mDA8X71ej9cvLS0NBgNO/sw7swdBwPbeEvtqBMcL3t4QJJpxiyVAJHJqCc0Ry7K6ctoSesZxrL0u48n8t0QLSmXkGQrhe1Y2PUQogEl2c6VsJpFJ8Phr905yQHlwUk9z9yybuXPC0tISLXOx0X3D3dpX7FGv169evQqgzC8sHB8fVyoVM1sqLJ2MTkrlUjaTmbzKgIIF2cxORidLhc/T4cfHxwteabezs/v0U0+9eZdxfvzpHA+nypsVU5km/ZFoN5/PsaiAFyEMU2pz8+bNO3fugIquXLlCrxfzpBW8oCqsEQVKd6XKGyBU7BUY+XyelReMksvlSqUSMAJU1Gw2L126RKcQNvSpVIquMIPBgDZum5ubx8fHSANZK5Mpb6gahSjCEqvwxH3LU6kUbArYBYcLul8o/MA9rK2tQdlyDuywQ29ZG3kZb7lcZgUHQEsRyAibGYiBkJxOp7vdLq+HTgBbAPK48MjdzgF/pL+DhHEPLA7Ky9Bdl8nmq2cu8D05GUCW+LBw+cQGMyOvSjzjjvAJ2WyWGoup2x6ZJ6zphERzSxT6Ge+HZL51gUpRmI+9atVc24fz0Zk3GQdPQ/CAV7iJKT9EyJmzIMzJcrnMIKNSMBcN8+Gxlwv0ej1i59yd/ObzOeUOEN4qLyMQ8mkqjXq9I3Ippzn7yJZJvlfmLvGWqG4WQgK5ghIkWhA/B+/VarUg12GRq9UqcEd+Usyl4+Pj6XS6srLCZkbM9NR73MHfs5/U6JGFTJ4/Yyt6KQzDarVaq9Uwz+L8hTyY86enp71e7+TkpNPpcCH4RVDiHbgBUzabpacU61LsFUiionlqRMECtlLeHTHyfo+B+zoh3BT8Et3OdOXF+XyeajnteZIPhQSsTH4eQ3AwG0tQ7NhbNwGLWWRYxzTlkPpApSOLlBUG47+4uCjfb81k8dZCyXwm+16mHzXy8OWRKxelciF7w4mBKdmxS//Dzcq90kQ2cMsL5mTGTTDQEU3dnQovXrjbM+8/mfIOF1THh958iwWfp14KVGnH2UvAcSAZPweUZkaAazQaZnb16tULFy7UarVatTo6GU0m02w2U6tUtlw6WVgqjE5GpXIpm82OXsXvTqbTUrFoZqOTk4LrKzrd3pXLG2bGvgtg2mq3Dw4O3vHkk2Z23DqulCt6iM6PP/vHw0l5A1PIKrJAmJmWVLECLNmsIwgZp9Npt9sdj8ebm5utVqvZbEJOsE7NveMWFcrwKISZubfTnXrzOjayFCuw2o7H41Kp9MgjjywvLw8GAygTM4PtI1YdHx9TP069Oe7ou7u71CVwgSTgVJhCnhptKEwD/AfUCyGckJz25tdkx1hhKUlGgdTpdAC+0+n08PBQOiSiHR/C1xGEFhcXGT3OjRAbe+NjYCgAWr8y/lwsnMpkMjk6Ojo7O1tdXYVYxYkJgMuiDx2F8IvT0A3FDTuKom63Cw1DUAfWwM9l3HvlzH3+0H2C4chAZb1psrkaUheuX0E5wrhMLQlSASVAurS3TSLakYtkMkzc3FTjQ6INdhOsSfPu2POhnBuXBtHITCBgUzoQes0+PBBpPmnFIveOkThYEJAx4YSn02m/3y+Xy4r6DzjS3rOEqKzYH7uhfeD2jexzIFY5eUElvViZejMj+gbe/HA8Hu/v71cqFZIDIIDQeyARzofDIdNmf3+fbY+oRJAl3yJbHF6g9C5VOGxLzK212BhQHZ9yx0q4Q7zikageHR1hwt/pdJjAKHHNDMUq803PHeJIPgcmLHSHBB5ekazcLDYDmmzFYrHX6+3s7DCrKdZJ1o3xFdVqVWM4mUwoZ1EmV6CT/R6Tmbo3HnnmG/PHzHjQ1GMGEo6JqvqewB1/J97Gmlp7JbuZkyyVTM4F7whqziMyCGxykNmMx+NyuawZzlPAref02A6x0MUJWYUlxKlz70DLa5S9od83a6m8BTgTc7A780L12A0lAleekNDApGJhYYGprrx84B10NaPQVHCvv+CA9mV7ZLPZay9ff6sFjUa9Vq/fvHXrvbWama2urh4cHGxsXKpVa5994XleXFhaGuGCl81OE4oajulkkslmzezkZLS09Hndaq/bqbz7aTPbPzhcW13hj7du3drY2DCz4+PWyzdv/OX3/aU341LPjy/R8XAYyoz70cjdJhm62GsqtQdZAmK4ePFitVpFtnXnzp12u43bXOx55NAbA9ZqtWazSe8WCRAn3u7PzEAGbI5JSoLGFhcX19bWms3m7du32c7u7e01Gg1533S7XaASPEe/34c209UlmQagJGrOqfv/cWS9Qy47e8lJWYsRMGUyGapfx+6JPRgMbt26VSwWCT/K9oJWwzAsFAqibXijmDAt3yn3DI9dY0QhbTqdnrlrDxiat6PTgrgluhO8cd4Bl5+cnADFyLvxR1RNQApRPrFbIHHf9S0qHk+WGdF+JuVWMuBX6ff5HAI2IS2bcO6U0gBhFtAEdA7LErjpKZRPLmEhDmaCCh2NRjlvyhxFEUwwAYxzAHbwCRJxiggUVjOzWq0mPSXwlGAvMCccKdZELLJ5UGeypd5I2M70IMxPvIkzA6LBT3sbJOku+BZVkECaCrKzxeITGLRsNttut0mIb29vkzQkgzkcDpnqEEvz+Rz7Hhg1rGHAJcKOrANcWtqd8JmiuVxuY2OD88S8ejqdDgaDpaUl+E7Uh8xwnibqw+D1ARNkPyQhZZsn4pnZyOlxhuQHAHAAr1mi0zrzhAch7R5JCBgQ9sSu1eZGsJRRnkWzhvsoNH4+9b415vn30WhUqVQm7kilRYyRkVVCtVol0Swbh7H3oOfWK8FNN+2UV6AzExYXF1lttDSZGTZVemMul1OBFLMR1SaJID1lnBWrK4lvqOWZl2mbm47xdjhaWSUwS4H1AtCcIWIAhoXNj7ht7qlWBr6UlYGYAnXKlEadbF7uc3Z21ul0oCHSLmE/P554/IkbN280GvULa2uf+cxnprNZJp1eW1nZ2tnb2LiUy+fCVMjdLywVWp2Wma2urCT7PHE8/fTTmXTazEajUbPZNLOT0Uk6m8lls2Z2cHhweWPDzCaTSbvT+Yvvfa+Z3bh144nHnniTr/f8+Hc8Hg6gNLOsN1PRujn1Ps4sTIA/7cIBhZjgkERD6yavimKxePHiRYmyZ7MZS/ZsNoMXlC5H5B+Bs9VqASU5E5DQ2toacYXk9WAwgFM0MzblkffeQMIoGxHzCsHA21cQnFjO0t5ABaI0nU6PRiMy16FXuUZuN8haXC6XB4MBkQNZGAWwsK2ALVUyUdyKrAosC9ilIJcwRriyhLsh4QeQBJAFFBJl4WNgxaQ8I1SzWBPPAOiIAWKvOWA8sTQPvRIl9toaSxRwmDfSVUpdWkbCsJgPBRjVRkCBcOOE2sXd8iGMJ+AYoEB04QdCCIGHtDKcGdcFvQQuQaOJFpCYhAyX/GzKu9EAIkmoiSznh8A7sJMKX1hYaLVa1WpVkZh/k5sciRGVXP5CGMpOp1MsFufurZ2kaTnEXAJqgcVpN1UR0FFFBWMeu12Aea/C1dVVmE4an0ZejIJ+AKhEEQz+O4jnAGTT6RSNgfKejKGCOqiLZWE+ny8vL2uEDw8PGSUo9pRbKADyKItpt9ukOAO3EYhczcwOM+0SZ5K2gesWeCVYh/L2tJfUoKMQ+yt5LtvXfr8PTp160yYepdAru8WAsoWjCQ0wVKnquRcVcQ68Xs8yHBv3gvwsgnLuIz2ogIZy+WX3zqiCC8NXmuMEXkfIyfd6PRTk2s+Dp+M4Br7HXh5Ol3YyCeIgA5dgciHM4bF30yHFCR4FHUbeD4k/8mkUV7FL5PFkAVQ2iaWP1DkkhW4u00mLBqsT1WPlcpnpx+KmjR+rImP7lZzy7nS6u7s773znO81spdn83IsvDgaDUqm0sbGxtbX12JUrq6trz37yU7z4G77+61nnC4Wlza27Rk+1Vxl56i+jk5MrqCyWFv+9r/sr/PHg4OBr3vteM9va3t64dMnMev3eZDxtNpd5wfMvPH/p0qVqpfqne+Xnx7/z8dAAZey2xjzGKW/KF3sh7WQyIU1mZpCCqphJp9O1Wo1lN4qiVquF9yFbcMi5sfdsZCEmOJECZl9LODEz+CSWrbmXXprZ+vq6OfKDlILzAD4SHiJ3rABgcWlpdxxU5kgsWsYdZJBOxl6oTsgEY2nHjJNf2v0yer0eGTfOh6/QoskqiYkgrRpT7lQyGAwAr+akReBd9TKZDHlAOkwQ+wuFQrlcpsCZ5hMgA1LnRC/ya0dHR5w5vb9VEkFM4mzNHe+4d5B80ABJNKkDDEdOLY7jZrPJviL2ds9yBIT94kaM3XyESVIsFuVxwwYadAi+4ZzJ10M9ptx/m95CE3f8hgqVqI5Qio9Jyp0BSNkTJplOJMoJw6qFgu+ce7cYQiNfyiYBJ04wFrdpOp1SiQIrqbESB/PgR4xtDGS/IE7yBaQLI2+kDlZQYtfMxCcxVQjkWXfu5EO4iaVSaebtcMyMdsm4QgLvYLD6/X4YhuQxZ94ykRFD3sf8CVxGydhKWTFPuC8hdAHucAcZOiYAtjKhl96fnp7idAu5LgEMUAZGPIoiSP35fC5jbaTYaTeCsIQJYjbRwEZJ5MhbHyF4RSPIfo9iu/F4zHPNBTK3095WSugH6GnuyQWERfAQehcfrpckOzMEUlDpDqZfFEU82ubWj9xiIT/dSvGjfAXTkofI3FiHk0S8Tjt7EB4bp3TC4hGxB2OFZKXf7zMIPF/z+ZyngO1H5D1gA3cU1urKfeR5Zw/D6ge1HLmuibWdK5ViJ/bOYSIsiTuRiztT3q+VoMBsTCrgv0KOf/tHf/S+v/g1YZiq1aovXb9+fHy0vNw0s7c88cTLN2581Xve88gjjzz33POPXbkSBMHy8vLR0VGz2dS2ZKlQOHHHgAccUOOWuK0HR4erzc/nu/f29t797neb2Y0bN5944nH+eHh4eHJ6DzQ5n88//uyzf+l97/vSX//58aU4HpodFLxj7G637KQF0SzB8AWux9LCB1fErrRYLNbr9eXl5SAIbt++ff369YODA9hNAVPAJR7FBEtRU/A38lgGFlAbjt1PqVRaWVlpNpuwlSxkbH/JeiP8Pzw8VJtplaMCHWK3JBRgZf2au6tiytvOkrwjYJOrkjAIhHEvcSh3SVzEaKNYLFKNDhsxHA7b7Taq8+TgSxtKKYy+msXUzASACFdwcr1eD2qWQF4oFID7JycnoLdcwkOEqCNF48zb8RFBEbcluUDd9MC9vhk0KqUk/FfxAdEFPHR2dkbZr3SK6sYOUhGNqpoG7jKpwLG7fCvzqHCrU5p4c0sitzjClPddhI+J3TiJXzOZDIX2CBJEmjJWCAlA8ColEXfCMfWD2va0W+vfxzW+5sH3Mlbw+ve9ADTGROI8Z176ypTgeTnzDtrkN0XkC07F3hmIDCYHertut3vjxg1oy6mbEPEkQoQTwrPeLFQby8CltGz2oJ0Yaowel5aW6vX66uqq7iDtl5gqoAc9LO12u9VqaZqxyIRe0sFMw+EImo1byaPNHoY9iblcZ5ZwtBW/Bb9OLSCglm0PRW/sJbhwCuY4MaYijwNCzMDd3ZkPs9kMfCyHV+VwMplMuVxmuFidzDXo7Dm1zPJMmRk4W7U7kpPqYHZBpQNwme3kH8yrJzWYMlFnSdHcg6jmznLyAEF19GZ9A4+yUQc9o3+du7Fa5D0muBc8iQjQY6/yCdxR2FwqyqoIK0HOBAmvmZERMkeolnA14nsRET344fryO5547Mqzn/wkPz/1zieff+Fz/Hxxfb3d7dw7vVcqFj/w/r/MH1ebKwdHh8m357LZt771rfeN23/wbd+W/HU+j558+9vuK7I5PDhYWV3l56/9wAeKhcLpyUm331+/cIE/vnD1c+98x5P8/PFPfOLcWujP8vHQGMrQ6zbQ0UvJpxfE3rBENZtEYtEnqVQKgZW/pyQAACAASURBVFQYhtVqFbhjniSSvG84HJ6dnZXLZWKSsiGsR4HboyjhKABKzMh4fa6seQh7lBiTgaKpMacNJ8rPwsfEvLRXdhO0QE4AoNh19GZWLpeVyo+8PgYsBVmS9v7OLHyy+iuXy+VyGRBA8hrikJDGosxZJeXtuVzu5OQESHHmhsCcP1dHFnvmBdFmBgwiDw7NkHWvYKJj7BX0Em4myTDuKbRQsqAy5Y0KQTkAbgZK5Qs5LzznqkPvsUHcEvEwHo9BKvJpJ0xKRyVslPL236S6eH3Wm8VlvYeNZsvUWyFzFXOvbIBLY2xjVwGiEWTwIYn5e1K2mMvlmBih22cKVC0sLOAqEHvfeUJp4GaBb/iIgaehFckbBl7rZmYI/kSUAqdAzORGBZgi727Py8wM7ip2xXPWDReFC0lG0zib/D43GsTM3BawMN/kRAnbB0Y79NYm5GQZAakjct4Sk32O0vqFQoGiOs4QqMH+BPMg83ZclONE7qtFoU+yax96G0y42H0pT7q4uJhsQzocDkkRMJKFQoFVgluW/v/Ze/NgydKzvPM7J/d7b+6Zd6utu6rX6q16kRBCqAWSWmqphT3GmBnMEOGAGAOGwJ5w4DDYzGCw8cTELNjAzMTETJiIGYMHgwFJDYE9orvVFkJI6kVdvdbSVV236m65583tnDxn/vjpfThVLVf3CKRb1arzh3T7Vt7Mk9/5lud93ud93nS6Wq2CXFPWCYwlzPKnCEwRkaI13p8YKRlFaJkg/CCqJPHNxOZSJoTxjKz8i/fMmaVOnKjm1nd3ZhTK9w3MRorwDMKeXQVuOzZt7sTcWPU+2nXVoFWRPF8BaOhbzU1sMgnoUulcPXMegE5WDkTyHu3k/KvEPwBWqHRNbG0LZJACc5d7c/T1jr9WVlYvbFx848KFQwcPFpeK9Xr19XPnbzpy2Dl367FbXzv92r33/Lmtz4ED61/5ygvJP+/1eulU6sWXXur3+/3+oDfo93v9XC63tzcslUqlYrlULpaLpWKptNvaLRVLWVmDzYL19bXkW716+tRtx75KT559/VyzWV9aXHLOvfHGG7lcDgnmjevavPYNUHK+zq3PL8nQJFnlEg0Y2WXw3oP/S1t5Lxmc2WwGSCIbCwzKZrOgilarlbNaZmf8hHJtobmveYl8ojPXFag+trCp9Z3TdgldAX/gDEAgSXSXN9jgJIbnIGQXBatdmP2UvRvqDqKLOB66S6ia/DvEA98aiaRvQkPUmXPrdwIm4/fKCgFSOXH5II5ViUc55uFsMOBE8sW2njKbbsSgEr2JZMUISV82ZXZ9yrFCk8RWrcmsEIYTttM4QKSBDxheBhP6M4oiDrbAHO9jK3RQlpY5AwPHye1bN0XAB2pLwhjgkb4vJ2U6nQZEhtaGJ040xFNJvoIWaGAgHaQs56Weo3AYwZUGHADtLH+Xso6dc6uWuPoSKxQK3W43n89D31KFPZ1Ol5aWKPZ3CdPBKzgnWk0q5hFpxzwXS83ggPK5eZWqAKeQB8ANkwON43hhYQHHVh5uKtHtkAeXtsbcOuD5UB5urVYT7tRjguJV5jS0Fke8z87ODgOysLBw6dIlZ+Xzy8vLBDBTM8nKWY8r3/dV8s9QE11AFfPiZPQlsjNl/RXxX4TYK5VK9Ewicg7NikgJgblVrVGDBQRPTnIlJVjI2h/ktqvpITqQYUxZF3KcvxjGUqlEoRKCEBYUr5fsR1gwbVZWzlqus0WAR7V9aeJlEz0qGSIED1zqP843pSgHBAwLwObDnESYpG1WbDpfP2P9pZRxChOdsfRc9EPOXD9FKovu1dpnU1Lu/h1/bW9vX9q8dN+99znnHnzggd/7/d8/ePCg59w999z75S9/GUB59OabPvX448fvPJ6UNDz00INBEJw8+eLJF1/s9Hq+c6tra8vLzWa9fuzY0aWl4uLiop/ynXOT8XgwGPR6/Va79cqrr1y6tOV5bjKd3nX8zruP3/Xuhx5K3k8QBBsbF0/cex//ubOz/dCDDzrnoih65rnnvuexx/j9M889d2B9fbnZ/GaN043rbV37s2zmZvXCPp7JZAaDgZ9wk3GmTnN2eik+5j+FUciHyud5bl7TGbNqU3qaxFNkdQ/QNmwxqgANrWULmAauYjAYkFKHLroiYR2ZnNwZ+SeelQxgyioAnG3HbMQwLpw3sXW5gKbie8WWPlbdgE4XEC2t3pD54wrJ/cPZABzJO/OJmUyGSgURpc4sYCCrgOkwjhpSlJTs6ShKuUO8QnWuz81tRESCCOC5eYJw4jpL5ImggiNBfhCYYbhzLp1Ogwl0ckvdyCX+EjSpNsQps+IT1EBeBmWiwU9ZSW9gtpc8+lSiDWCYsN/nbyPrdAd21ESSYXLW+rvArPCHkWn15laiq/OMOakaHWZ4ZD1RUtbdER6L2e7smL/Kpbv1zcxZCgRlwMVVC8ypgp5fAkapHYH5g4IFATCGYGJxzxo6dWEh3Y+EEU1wKpVC6Y/ORMHk3EqsRKe5RMSVZNG4yYn11gKag2shP8R4KRkaxzHkOrdUqVR0q8xt0B4TktVdLpdRdCwtLWH/7lu5tGdFcvy5GHp8vuI45vsif6Rnt/aB2CrbIMZGoxGdvcjG6j3Z/XhnQhSX6FKowIkvy0jio84UYpyZXbH1HWAPxGcAphCoOjGbcT4IttWz0iuAncrw2YV866+tde2sCRlbugR22oe1QbnLY3jliPjKMALs4UqLx9Ykid2M2JiFxi4h5lUjnLGma0pBkEmITSmkUyY54HyFP/mTP/n2d65Wb7S3N5nOarXq8vLy1s7O6dOnjx075px710MP/dkXv/juhx5K+f67ElDvjjvuOHP27G233uqc6/V6J1988eSLL519/fVPPPbx7/3e/6zZbDjn0Z8kiqM44n+iKJ77nr+4uFhcWjpw4IBvVXdRFI1G41deefk3f+u3JuPxXXcdv+v48UMHDzrnzpw9e+ftd+hz3/2ud/HDn33pS+968EF+fu3UqWwmA5pst9u5fH7xraLrG9c359qfTjnIE3u9nkAkaTLl9di52GjgkEjDFQqFTqcjDxQOAM+qBZ1zEnIRZbLrIZ/vdDogUWCHoJtYUvqmSN5erVY5k0QGQNFRVqIDDIsQvhrF5pzWqhfxTWaXMrMVQHBgvTfmlzfO0ZnqDBMQVU8Tbp1xHJdKJUgIahS4KIAQ5uD0AilSnkLJC7swEIE3T5lJcqlUgtrMWC9jaI9ms+ksL+mcY4gYh1QqBTNKLQLUhQoLfKsUjq0XHNgImMsJR1YUPAeKBZXyoIMg6HQ6VNmrHMoZr7a3t4dyi5kA7wVL7ay7j5dQHMaWTeaAFBmDPkHJUP0+Z8Y9Av060QXNAS4Afdgp0IOONx4id0KdCqx5YCVZnHPKHgIoGW3enCIPiFWWxtshUUT+gad53Jyg4pacHeE5M3nhwM6a+zQDG1tXJ86D0OylAEOoFzj+PdOiSfvBGnTmNcP3Ui4ekgno4y73MPcuT8KyjkQyuQQOEAiOrC0WPNZ4PN7d3XXGYna7XUJH1iMUmlYZFS1sCKj0hsMhGhLP8u9MFV4DxJflDVgWoQIqSc/zGo0G98OONLYGsErH8/UZQN9U4+gHeFlktg/8MLKu5Sx23H/iRIbaM0NHoixR3UGi7t6ZE6rneZ1Oh9WHXoUNeWJNwz27gKH8hrhiPB7X63UoAKY9g+Ocy2aztVqNuIsnxUNnGlDpr8cK3IwTHKc8Lhicra0tCg31bgBTtjXsJiCkFctxKLCdJkUaGNx6ZgIF/ansPBw2j/KdXZezsLj4xsbG1vbWnXfccc9ddz351Gdr9Vq1Ul1fX7+wsXHx0qX1tcvS0LccPeqcO/nii1/60jO7rd1HPvyhH/nhv1WpVIIgCINwONhLPr7kFbm5c1+jp1cmk77v3vseevDB6XR25uyZpz779KlTp9/3vu/4rocffvOLL1zcSHn+2tqac67dbl/a3Hz/+97nnDv50kvZdPrWW2+4C10r1/4Ym8dWi8P26plDMnpEZz2so4SXBAd8q9XqdrvkPWV2o0PFOVer1TArVrFLt9vFm3c0GrHD+r5frVaTbyuna7ZdxEz0toYfGgwG1Wo1bfY0Om/olCOdE9CTxHfK3NTBB+xraNJh1MRESvTjmwWdmBLeVl9Q3IBEfouLi9TikIyG+EFimDyh+ZrA3+FwKFNDKCvnnORWUFZgF3ZtngLeTPAoQEaMSMQIspVTvhPHMS2L6vU6aCMwP3nQAByqs7OTE50x4QUcwDlzTccOiX8l/yhlLZQeaEbmTRBmHHWcmtmEjTmnbJL3SpvjPRNPxElsDKhS2HwFYgZlrsmTAovzif4igC2UFTx9SuaZkLEl3aj5cCYsBk16pl1DdQfshkVj9gZv6m92xeWZwXuU8I+MzHMgqRJLQrfYRAL5fB74BdiFJ/PMOoqxYojUtz0IAtWCBNawwDmXs96MsvAEv0ZRRBMdZg518VqVV9yenh1sHDON/QGwBc5TtAaMhrHTg2acFWhVq9XYaubgFAl+eAEVcsZgxsxkcCffjilULpflxcNi4VOoVuEPI+tSI9IUtjI21wWStjs7O+LU4QuR2xLxOqOleQRKhXe73Wq1Ci3qTItcsJZOLG1GEoY7iqJ2uz0cDvn61WqV/AB7MgvBmQ8XS5tPz5pRl3MOETMZ87nZnbIeifrEjIpZ1HPkZnRjFOvICtRZr51er0eOhVgLWQj862AwQMCtsI37FPeJgrxcLgNM+da0hGARaXPIZrPyoCCfwP0vWkOXd+p1+223Pff8c2dfP3fzTUfe/53v+/1PfeqvfOITzrl3PfSQftZ17tz5Tz3++OHDh//LH/rBcqkYBGEYBL1u7+v+9CAIgyAcj10qnTp29Ngdt98xmc2ef/75n/tvf/7jH/vYt737XckXf/GLX1J9z1NPP83PZ86cnc/DW++88+u+hxvXX/q1Pylv1E6EmOwUbOXE6CoWds6xS3J2ostBiDYej0mLCNM0Gg02RyEJmC1qLUMz2VEtsHhNpbk5MoE1QBPKpTk8IuvoACAgnaejmouP5tyiKgWzNMAHUBVuQ9n2Wq3m+36n02ETJzUJkgAJsa171u8EJgwok8vlaJbNf9KKJjIT4MCKavk5DEOSUHwjZ1ydsyRa2rqiwyxK7Q7ro7rmTCZTLBbZkWOrIJ5Zq9bRaESxrVo1ZqxyVrpDvoVmAg9FT4RBiM0RGtaTwzWKInSxHCopM4WJTeGnVL70WFmzaObQ4izJmA0QyDudsDwUvOaJo+X3E63t4Ko9z4OWlhcMkwquVJk7cp08ejDlbDbb3d1FTcEDBVtUKhVFUHNr8cc5yt+S1KMeJZnEvMoVx3G5XOYNATEF6/9JpjLJ/zlTm4GZIuteo1oupgfsuCIoFmC/3ydKwYgRxg5xs7vc98BLdC7ACZ95hSEUoxdY0yMgCOEcdx4Ewe7uru/7tDPg45JLI0mBO+dSqVSv16MhKk8/Za2kyFSAPrk3PtfzvIWFBarfIKRVnMQcAz+F1swQGeLMrLZ5Os54VsTNzN7hcAj5pw0BVg+mVpIPTFuZNqwFiHyeF9zk1BoBMDnJRw8GAxa72He+YzabxVRByhnJMXnWcPy8m7NKbXIsKoATS0qEiepRAJFBm5p1V2Syb+6HGc6LyYoEiUpz4sk40b6S0SOdQl12qVSaTCZsnmxujUZDiy4Zb+vPtWbhdAk5nAUnoTkuseS16llxopyvvr6u04uuifx83733ff5Pv1Ao5FZXVh/9yEfbnU6tWvU8710PPfT8C1+59+57nHOtVvtTjz8exdGP/u3/qlIuj8fjfq//l3g/83A+D7/ahurB+088+OD9/+Hf/7//3X//P3z8Y4/efddx59xzzz+H1blzrt3ufPzRR51zFzcv7e7uvjuBO5nzf4k3duP6Oq79SXn7Vl8ML8WBJyTEbgvlJjkd+6NU9lKAsfNmMhnM7ZhSnFLE+mxDySrguTlTClGBLPv9PgTSZDLp9XoCH+wsU2viR1CL6uuKQz1K9Bkjo8QJwQ3HpoGD6sP6hHNlaWmp0+ngvwidyWYnOk15cw4PsALGK3NruoioqFgscjbg3seG7qzviEu0uMyaDwgoNrZiiJS1ReH2kiMfW9p6cXFxfX0dweXcCn2AGpy7aWtz4ltBccr6OgJY+Q20ZWRFphpPgFqr1eLr8OnOVKpAK6GHbDYLRwsNnDH/Rb4+BQo58x/1rfrEt66PoDRnQBAQMzOb9Ngk/xyTzjxTc2Ze6FkDN05BVK3MBFVwA6MZSeC7hBb0KiSOUk92zwrS9dRCc4SRKPPtAErh6cB6G/K5gkpXzF7WDpBFzJmzinLEHlRFsGZZy8QzhBD0oeHmqf6BBuMjWKrUkbBCpdtz1vMztvyv8Jnv++Vy2TnX7XZrtZpKOvho4e+J9ahkqbIEQMB8OoptfpCnEttCfLlXVKlUWlhYID3qEoUd2luAhvRbD4JAPWCccwSTGWtd6Kz3N6+E/Upbm03AIksDHXmz2dzY2AAmOhM8MJGYYIBvNiKlSpyJCz3PK5VKeE0g2pFwArY7bWZbuVwOoh1WPjRDNJY88ZiC7dD6hXLnyCv54rGluYF3vAaG1TObYU1X/pDRi61sTu+QxIWsPjGyyadTKBTQ5LCgRA3w3HmNYKIkAYo8yRiw54ysrzdf3Pd9dh7d0jvvil380ssv33nHV3WK7/m2d//xk08W8oVyuVzLftU5fH1tbX1tbRYEn/zUp1879dpP/PiPra2vT8YTeRp8I64oikajcSqV+vCHP/SBhx/+d7/3e0889dRjj370PivQcc7ValXnXLfbffXV1z7w/vfr9ydfeum2W275xt3bjettXvvjQ+mZwOUKnQrMECY17Fz4k8XmowZccLbdTKdT+h/ynkTScuwDZqk3iWfKJLKxpDaAIPhNZKx1L3lhZ15F4mnK5TIN7FGbQcVJQMkFSmbfB/uCnPiy/GupVGo0GvV6vV6vk0EGKaowolAo4HbBWcJxws7INyqXy5x51Wq12WzCmgA659Y9j7NW8kQNr45V3j+dTlcqlZWVFbZUsreMLUIihkjlOHPrWM1TiON4MBiMx+NOpwNj5JzLZDL1el2JRY4QJF+cWwQAgDlwLZo833olM7YcdVCPsNqqh9VRlEo0/AC98UWYKnBdIF1OR74UpwufdUWhT8qM7hcXF/lXZ0nb2Foeo5ajEAqIrEGGS5tbHRIWBKggmIT8LDIeSonaKdGWNK2OrFk5tJYzuwCl6q6+yiKzfkxqGTmk0agxo6CvnBVpAREEJZ3RRapAl4c/TRSdwQX0Ejge8Clk55W/jhNiR88Kt8VOgf9mZgOO6Y/4pOFwSJCArSAJd3qB8p+MpOd5ZCqFWZM8EzjPOcewqPo+ma5lbCuVCkXZyEmpJXIWefqJBktZsyiPEypGfgBZwsMB9SaJfkVaXExpkE0Yhq1Wi9jYS5hOCAApVINo5PcKt5KUIQ5igdkdgBFHo1G32yW+8qz3EgoEL9EYicFk40WsCXxX4MejR1wEOaqR9K3VAnELQ80gaFFA1ibpSYY3qTYBejIz+VysoAhdYC5xlmB/1ojpKbCLauYD+uUUQaCCZoCEBkCcw+It9STX3fXn+pNs1vf9F06e1D9918MPf+7zn7/iLL6wsfGvfv3X3/vt7/mlf/qL9Vp90Ou/uUP3N+Kaz+d7w70ojr7/b3zfj//o3/7TL/zpZ554IvmCyWTy+S98IYkmX3jhhWw6rQDgnS1+vcav/QGUZBxml3sj66RJmXc0vuLorkAzylbzJ2EYClCyI0A7SSc0m80OHjzYaDTY98FS7FOkHSOTabKvifPo9XqDwQA1FQcqqXNAbWSVgJyjya/mW7tFTgXOV+5Z2ibOKnAJ0BBUx1F64MABSX8yZiINKvXNoZDQnKOOY9Kz4nTIQt8cifv9vmd9/OZWYMT2jWc4ezEWfcA+ECQddxAYEfrzyPgUFSRFpv70zFjHGQ0pwZZvQtWkyo1mKkAlhsI3+0wgned5qLuChOuQ4CCwzJmFE5SzHP7A6BBCsESdTsezjmpeIrPmm3GPsIt4cWFQzyxsND9BsWT2yQkybpjAA2rDMOScBkOnzGKQwppqtVoqlWglGlnnYh46XYKYGGLpmJ+eNcjx3kbKm4OWw5JpyfNimkEPMwikpKXcnVtnRY1VxoyuuAFVQamcmaeTMXcbz/MGgwHW6EREiui2t7fFPjI+LmGxHliNP5DXWdFGNmETy5+Lc0qqaRE26GElwbSeOAtfcFxoeG51RQSlYtSorQEAYaeApT/NSMlToyf2jAPT2/ImRDjJYM9LNNKMTWSJLpm7ojxcjwB9oe4fx/XIPG7l8s3roWyV6MiYqf7cuqECpGZmfYBtEI+V+Ic/JzxjfaUTvZEYauccuRdpSIg6VF2um/fMNI0NB3acPaFWq0mYHptfOvOWEngxl2zaDLLYSt+MaZPBjzOunXZZyWcBATm3Ft4uEWOIr9WQvsM0lKPR6LVTp/j59ttuy+fzz3/lK/rXjz7yyB/+0R/pP7/4xS/99u/8u7/3d3/q5ptu6nV733yIFgbhcDDM5bI//CM/XMjn//Vv/hv90x/+0R999JFH9J/PPf98fmFBdTmvnTo1vtGHff+ufeuU45wjOSisANZxJqmGJEtul4T4M3ObU/8J5xz5WYrHCW3RNsFW8stKpUJhjWd1gnHCgFpVBZQIkPVmJ02epr6ZWhPB0wIk+aXYVYF6IJXk3uqs3gjLcdLcsFNs39xno9GgEXlsvaeHwyGnCFs/0X+lUsGnl+IDFY5AuHLDaTPRlJ+R1IdYV5JZHlt7SXCqlAO+ldIn2RH+CdwG+oHPo2lHbN3MoLJQxwJEkg7DPMeUeTIL9HDBXohRho/k8CbZHVorS2e5XdJ2PErBArhksrQZK//U5Yy0k0I0Nn8fDkiwl3CMvpe+1BXiBH6OrI0bH10ul+FxxbtzUgJMyekDgxh5ED88GWPOAcxYgeEk6r36BYb2zYbG933gOzOK78jPzjkWC8d5cLlPqlSbIpB4f4g3/SfD1e12FSvyLPSYhsMh3CFqDYrDQmvwyJtEVnaTSfTNA6lwVDAUkVn6E7GQ2mZ4MQSIoqjX621ubvK2PBpnKISZzLQkP+DMSxLsQp6E8MAZiqJ9AMx01iyoSGdLSIDhNjAdO3T+aTAYIDWRlsD3/b29PYhw7j+Zh1VNT2xOC6lUqlQqqUZKzyUZXUBYsnAQe7B1cMPSVhK/EYaBKSHj+frsM9x8ZNpxrQ7+UEuGR8OezHbnmXNFOuEA5ZlCWs/aN28mxhYpc2Ri6Ol0SgIHlpSHxRRV+ZFLdGi84mQhSKB4i5I+jQ+AW0+WVab0VFLj8U66qtXqbDb78rPP8p+3HDu2tLR05uxZ/tPzvEc/8tGTL77onPvUpx+/tHnpH/2jn5lOpirG35crmAXD/vDDH/7Qww9/5//4P/+yc+7kiy+ioeQ6dfp0qVSiAt059+Vnvjybzcgi3rj25dq3ZcMGROJmYs7knKlKaodh2O/3VfzBVuVbZw6ODRrjplKp3d3dzc1NsTgwZGRzJPEhwAUzqQrS2QbHLiyOBHaHhl1RFOE6xPGvbPvW1mXtp7TRKwgGiDgrvQzN1FD7L9gCpmplZeWmm24Cv4Ij2ftUJUOBgsrV2S5BhHAqvvliiPshNd9qtZx5Kulk5Q4rlQqdjvv9PjBdqJQz1bciJ4x+0EjF5gMM1tHRAqgFdcGVihMFM6liNGV+y9TZkDiLrIkLj4lTFsAnIoT3B+7rsAe4OOd01Omwjy3DzqmPgCy0vvA6RQS5ND4Q5BnrGJk8Y5JEKWZSgm6aPM45yolE0jBt+EMOThjlKIooWI6s+ImxBXEyzzF8UerTvY0zLzSTZxYaOWjfel4DoRqNhtK1nqVWlalXhZm0pKLz3eWW0fygIidiKuIlpchZF8gwfN+X7xVyVWdQLzZTAuAFHDCvz+fzJIVZd5CaCCRmCftGBrzdbrdaLeUu+SeUnYSvBWvsGZn6FuJtbraLPAuQK5LlfD5fLpfZRniZpo0EFUz7XC5Xr9fZOoBrJIWd6Rb4vqrI4T0BkcTGooG5PdWb02oBPConHQaKJDgBqlht+HtFywyOkCh7LJvk4uIiE56PA24C6HkiLFW9s29tOVlozFKJ2jXJiYICszGXCNglSmRiq7xk5bJNEbaxtye1QIofPHOT1fPlBzLX2WxWog7U9ryGajDeTRA5k8lgY8cYvp0j7Dq6+oO+c+6u48cbtdpTn/0svzx6881JFjabzdx1/Pj//n/8nzfffPMP/M0f2OsPwmujXdBwMLz1llt+6id/4qf/4c/U6/WktrVULN580038/MRTTzUay3cdP74/d3njcs7tL6AkdAajdLvdwPp6kdvlyI/Ncg/cqQyRc44EtG/VPEEQ9Pv9Vqs1mUxIVImRYmcB2MFgpaxBjsCQRD/AjrR5fPBXVLCeOXOm1WpxhmGOE1+edmRXhQygShE6EG6g1+tJDOesE4+ovnq9fssttxw9ehQ7DJVL53I5UuTwW5gu7e7uoly8dOkSWyqgE3jteV5S1MWgTSaT8XhMutC31swwH8vLy5RgwweLZQTCgksyZuzCd4EsSZlvDpyWcuLOHDQz1scMRSZlB5VKJWXmIy4Bu3W08ERAHgKjfH3nnGSd0uDGlucSVQMSQkPGz4F14p5Op0w5jiuXMMpRXrjT6YBOmHK6PWf0GKM0N39NiqY5q6hTAUPEccwJDQ0m4V3a3Fg8z8PmiSii3+9znwydNB5khKUZ4Ix/y+2e5cObQ94Da0hDc3tUEaXMrlK/R+Eg901hYpxcxEp6pnLjN6Rua7Ua/CLjFpilomcpcsJI8rAwCjnrTxNZl86ZWUdlzHZeDxcxrnMOUEhfH7VR4c2JK+jTw0UoGFshiDPBg7MWf2X6wgAAIABJREFUo7NE5Zxgk/hL+ppWq9Ws+W97ZkQ6Net+/hYtAY8SvhA3dZaPswwM/Bzois3NWcEcAYAGDainxAt0PpEkcaNapyK9QGaay+XoA8TvSXDLs0JMOXIFzxx/YyNWM+aEoGA+k/Du9Ux0xFQk7iX+4YkzgVmnKbOkyGQyo9FIwlPPLvYNbQhQpLHpEKIoghXGHJ5fapPJWhdT0czOOdo3sFRHo9HW1lZkHXHYcHLmR+YSmgduj5SIhMXvjOv8ufMvvvSSc+7w4cN33333px9/nPm2kmhjGEXRL/yzX/ob3/fX3/3uhwa9fvRWippv5jXaGy0sLvzKv/jl//tf/8aFjQ39njaM4/H4k5/+9Il77z186CC/P3/+/P7c6Lf8tW+Akq2EXSCO48Fg0G632eAoHO52u5PJhBLRpKkNhxB5FhVegB48z8MnKLJ2OABTYBlCTMxvQaJsl/BJwihSaLE5kqmcWUExByp2Qu5NXoDohChEAC4sLCzUajVCXspoIvMHITXG6UgLaY7DWq22urrKEUJCWT7hnEky87tw4cIbb7zR7/dJtFWr1dXVVbG2nI6xdbKh0oibB5FDF8ELgnIGgwF3oqOUQwsqKI5jWqIj8GJbB5blEv24Z2b2qdR5EAS7u7sq/5yZv51zjqIKKKtsNovDojg8lxCckS2FKVENgTMJwdz6/YC9QJ/UUggNMxk4S0Cos0T7TQwLJbATF67stigZbBeZe1AgDBQcNnh9lujOEptlIBcHasZ8iJSS9s0QSklGtHqqfwJYMyZ8u6svMf5EEYv0xwxmYG1OvURPI6CPKkUYBCY5n14ulznUOXHjRJej2DK20FpKAmi9O2NV4zgmkkQqmrGqOLFWpGXJdEPDUxMGg8vsBe9K6gBug2xmJL1EiYZzLrT+lgJJc+sOJfDkm+U4elyKUUDhg8EgnU7X63VkM0qzRtY1JwlZeJPt7e3NzU1BcPGgvAAvG9+azTjnWKHSYpIfd84BByXMIEiQfAXTH+aSqnMk2/WtfAd0xcQOwxBFOGqKyLSYwF/RyYxkZB5A+poaE56auvsw06SPj6KITQweOrlakwwlBPDc+pzpZpJBC2BX0FzjTABMQOKZD6jwqDNfgkaj4cwQ1FnbccY2NgExOz/RFLvE1RfX9XXdfffd6XT6iSefmk6ntWr1kUceeeKpp3Z2dpOv+eVf+dWf+Qc/vbrS3Btei0h6OpkGs+nP/eOf/fd/9B/OWqbeObezs/3U009/7KMfJdM9mU4/8+QTqW+ZzpnX2rU/gFLCR7J4VD9sb29Ty9npdHZ2drCuhSmJrD+NZ1W6+XyenV0KtjAMFxcXl5eXM5kMXQF9K1JRCAuNp2IakA3nKNu62Ls4IYlTBnBpaYnMF4jKNz0lF7+Ul17WWmwDTBcWFtbX19k6SUzX63VsAmEi2S7JCq2urmIJLpDBsccxmU6na7XadDrd2tqa2QUpC5qs1WqVSoXMF2k1ElhwSJAozjmRKL1eD8wqNVvWXJZAIWA1fZZvFT+ksCVmFR5ibJ0lWyVqpGij1+uRtQeshAlDRP7QM8Flkg1iEOiTBK7V0SKwwvHMGAqUcPyDzpGLqV7bs2rxqbUG0Z+DOOfWEEVMDDGDZ44BfDXqbESKM1FJp4bW0gPYKlJEiCebzZbL5UOHDjG1kBXCsYG3yuUyMlbf6rRAcm955vFxvjUO4Huh7ASiCesQGLA0eCh7e3v8a2jNotrttuI6gjed3JC+HOHMtMiq1pJYR4hTQIG2hEBYkCX/SpAJPy0aDw6MoVApOjev6jqeCMlNRBcMhWrpMpkM4Qc/MD14QwH3UqnUbDYRMUdWCcSspvsiWd3QemwSrvBiis+oZut0OmSTQbqQfMxqcO2CdY2nafhwOOz1esiv4YZ5iIA2xD+ROdoE1sQVAEq7eQ0L7XmIcOA42XXBi0xphhQVrAaWwWE1AbhZGhNrMMGuyErnMQloRuZXKtAs8p7V6i43YGJP5v49a6AQmkmcFjjflzGPLc3NRCV0ZHWDbuv1OtPbS9gIOGt8Pzd/OmaIs74Y3EmhUMCbAnH5O6Ao57VTpzrdDj/fduutJ07c+5knnuj1e5l0+qOPPPLqqVcvXPwq2/c//fK/+Mkf//Gl4uJ4fO2WSAdBOJtOf/Kn/s5v/ta/bbfbzrk3Llx49dSZj3z4w5xo58+ff+KJJx468cCB9XXnXLvTOXX69D7f9LfYtT8+lFkzsoZaUFzL6UVXutXV1WKxKNBDa2nYI044foMsjP1UHjTIpJSxVYKGJC/IQ4o3diXObxEzUCwyLSIlh8Ey+zvbd7KGdHV11TlHuodzQjUWAFnOBt/3q9UqUTUFm/RNmZsdI6zM2toanJkoN44BaFo0cLlcrtfrUdvOQAGbOEIg/2BD2fSVq2VA2u02xyEJaLJpJPs4p8fWx4gDmBw0fAlwEKkcmVkuUA6KWGcHuZ+oKlXZE4iKFFjOWnvrMHOJLsY8kZmZCjnDjhwPZKXRGEB4B2ZEL8TAODvnSqUS00nHFbI8phYTQIQiOa+89T3SLWWsKWVkAn9uTPDU8zzIUQiVpaUl5AHOaoCm0ykV0FBlq6ur2Wx2e3sbLd3i4iIMIiclbGuUcGlFsvaWpZeZRDMekIHkYqA93oSRB/mJAUUggWag2+2CLQ4dOpTP52VZ7yzlDYHNb9Jm3jk1822989zs3JOSSmY4gx9bPhqmDRqeB0GcFptbOKQmN8Z8Y/oREszNjlT1nugvWZjJ9EVsrY/EHMfWGwktMiudP0eTkMlkKpWKeDgWJpNZlSVi/pDuRWbeySJaWFiYJQqTZbnP7PWsAxY3T6jpmxc6L1DWPpfLUXpC3t+ZgStU/dw6y6dSKaAqGZ651ZOxifG/YpedqVD4FG4MCpB5KzHlzOrrfTOqlJwjsCp7lmFyWrLzi9vmDTES8kzVIPJecm0ebvIdFI4ypNqvxF8i51D0QqqhXq+DfVkFNGigX269XqdGKjDf9bd5ol2z1+GDhz7/hS+Uy+UT993rnKuUK49+5CMXL10ql8rOue/49ve+9tprzrnf+Df/z/d/3/cWS8WxkeLX7BUEofOmP//f/OP/+u//9D/7hX8yGY+/49vfwz9duLCx225/9CMf4T+ffe7Zfn8gR/Qb1zfn2h9mWLs/iYzRaLS9vU0ADX3VbDYh4ZBIa+VDxQFonPVEIREsmkpqszAM1WgHSokIGKkNhKWkV57Z7nA/YKOtra1utwvR4pwbj8cXLlwQu4n0k2/UbDbRcyi9hWJSrA9sK4mzTCaDZQyKTGWmQMlsl0tLS4cOHQqCYGdnh6/AoQV+EivT7/chaz0zVnTOcRJrF+ZklXCeslNuG/xKgE7t6sz6/8bmdINyjvIC36wuvUTVS7/f50uBoflDVXIIaUVW+4w5kZe4YhNBYlzCKchdQQVxwLDdZ7NZjh9ynZ5lKj3TtHlWfO1ZeRYQDa5lbr5FVxRVCDeju+LZSaoIJOKulpaW6MdNKj8Igmq1ms/nIdqZqIG1dxPWiRJuO0zFvF3D4ZDKaKSHjUZjeXl5e3ub/ni6Ac5m3ipINDb8T10gyLw1QAfrMPk5MpMvjhM1N+PxGCEEiApQhY6NOi1GUvpOZRgZE6GErHUNgB2EeEtKMMfW2JopRwrbWY2/2NMkz6QYAKkr6wV1IIwm345HoN1maWkJFMjogUL0r8SogXUzKpVKtVrNJWqPYrNSQm5RKpWomd3Z2SHLwU3yTH2zwarX68gqKPMnlIKAZNywb6RwW2QbqLTX6ymGCYKgXC4DW53V9GDvwOqAZdSEj63QhJae8/kcVQw1c0x455xcHeI4Hg6HROZw89CKTJ7kHkK0SSMGYh6Ghf1WU4vNR3khkub8bWDW7iB+Z1lp5V50ezwa36TMfJYmLVuctrVisZhKpaCESRcQo+7t7bFRtFotNlV+Q+w9t9r8ZrPpnIOSn1orIykyr98rl889/P7vfP3c67/3yU/ef+J+JIbJJt233nrrHz/55OFDh26//Y5vqGn5X+IVzIJUIfVzP/uz//JXf+0n/86P6/fFUvHgwQPOufPn33jmuWfvu/e+E/ed2L/b/Ba99qeXNyuWjYwKZWL93d1dsAJ7LulF7CTFCOKFQf9cdhn2JrYeSSpj09BwosOGZrPZUqmkY559M6nXIT3NOYfSfz6fl0ol1HWe9eyCv0mqttX5hiQXtCLSQPgbYnqEXHA2MCKeSSeRIrEP8uJ6vd5qtTi0lCplA+UI5KRMm+UyicvQnC8E1MT8sYOH5u7Gydrv9xuNhnqfEPTTsEcsCMDLs8wpxCS0GeX2+JI450gZw2eQ6YO/BGhCeywuLpLfhx2RQssZplQZBxePlVwqWkmRT5xAvG3O2gLBeMUJsxuJouBN+RZxHENsaNxIKIOYSWRD46l9vBrh6HB15pXDFwR58CZCvfDHgr+CyCD77e1tipF5BL1ebzKZ3HTTTY1GA6/4rLXMBuzy6KHurr7Q9GKgM4fxzGw+I6tjUHjGK8lfDwYDpmKr1QrDsFqtEsBUKhV10HYmQWP0KMtVxpPZBQ+UspaYuURXVUZAWWmXyIfC1IoKja06ZG9vr1arsQaHw6FCJh4K8BcMp+aobDgUh/I+tCPSwxLOUCCEVoSnDM9K9EhFGmZhCEt83+90OvJgl1wBdIXCT9leCD/f95lOpKQFvATLfCuY44fBYFCr1YBlgMJkbieyhuAaQASssZWmsRLZi4CtBF2zhO+js9w0QzS7vHVZNptFD8NMBtADWJmxks/OrP8qlkOC74qEmYdkJJjD/NV8Pq9UKr7vEyN5ZhvHt8CmF6UTY7K0tAQWp7GkZAAqE8QsiYFNDk5sMgmwJl+H9ej7/tbWFl+nUCiMx+MjR45cfX1dL9dNR246cvjIM88+c/6Nc/ffd//i4p8zry+9/MrZs2f/3t/9qb9IV+5v/jUZT2r16ice+9i//e3f+evf+9f4ZblUGu7tPfPMs4tLC9/z2GPaTKazWe5GS8Zv1rU/gJLolpLYiXWMYF+mwQOvZCvU1uNMWyMppERdQFJIFLomsqH7ZoFLFqnT6cCmsHGzSyJg4kQhFYg6k9+wxeSsiwmwLwxDiD2diIh4IrOPIbkmKk7SN05WPp0tfjwecz9xoqqODGChUFhZWdnd3b106dLcChvhJ8i9AuZyuRwQtlwu93o9GiuDuiB+OOZXVlb29vYQXYGuCoWCMnqZTIYzGCrUOZeznnheQvYUJ+SVsJW8nsGZW9G0NEmkL0GHqrGdWqt0jkOS/uhNYUeU3uJQEYupszAZM3hmJQhik7eOGEHeAfwNG8RBy9lJdlVem9PpFAWVc04aSr67qBfumT9hnLNmLJp0zHZWPeMnLjFkkNbnzp3b3Nz0fT9tLebm8/n29na5XF5ZWWHG6tRXulNf9uoLLW1ddiRkFM7g3YgNPM8jzYeImeMc7p/ZLoyoyATBH0PBEiNTrxxrbF0fecQ8iytuWBMmecMKAwLrZ8jKhT6B0A3DcGdnByabuZE3F8lUKiW8K4ap0WgoGY0ghK8AJUn5sCYtHwpBq849gbV7kQjE8zzket1ul3nC5MSUIAnynPls53I5phAbCDwuYh4/4dQNaEZd7ZxTpAT0Z2S4pYx103YJowOgKp/LdIWsZfqxC43HY/hajT9bLvoHfAAwYdWdoyBnEUWJgiRCLAFKdicBNQI8ojKAqYIcZ05qkfVtV96AmQN6RiZE/MbmjxRBUwVYnHT/zeVy0ke5BM3sTFLJJ7LDp1KpSqUym83OnTvnnJtMJqyFfD6PSu/6vTY3N4ul0uLCgnPO87wH7n9gd7f1uc9/7sD6geN33umc63a7v/O7v/vP/+kvXi/cZPIa7Y3uueee02fPPv0fP/e+73ivc+7kSy9dunjx/vtP1Gt1XrM33Hvx5ZdWV1cPHTy4rzf7LXTtQ1EOwnbf9+H/oHP6/X673WZm48BHGenM2tZxOedAjaAEmmVJKwm+QRCjRImImal1eqWdSaFQWF5e5iwh1wPlRmhO8QdSLZLXqVQK1TwJStKv6+vrfKlisZgxZx+OPWdWiyifAI5YeIBlScIms4riLDH+8H2/2Wyura01m00xkcpH6ywRTat8FnJPFGaQXoBsYDFyQ2dmikAT9m4yxUEQyAFOkJqvGZv2DihcKBTgsXgNnAS0X2xuggQAYcJGHgYUB0TP7I6hDWA0ZU0iu0e+tWfuTtPplCoKfg94leSLBh6e9e9RRMFdEYHE5mcJhvatmR5gQiVQvJhmNswBkp4o2yIrGGLi8RQILTR6ZM+d4VoAHI70s9lsY2Njd3cXcqVara6srOCXic/i2toaqT0eB1yOPu4tNV5kflNWyhCZ7+nEjOUpqCIggYXiuOWBDgaDnZ0dEAD0EuAysp7mSoli6MjKFTNH4MHi5WXoApXypqhZwCuKIkQX8KbAEY0hRjk8ZTIDKetnzTRAhRKawzaDrEmrNQ4fyUcUCgVq10BgFLTF5kXKokZ9qEevN2emLSws8A6EMTx3UbCROfkTUylxEccxjmkZ66cFO87yp+RL9DM6HDYKhaxKpzA+soxwVnei7DkuBJ61O2InpBGXVocMGuEpEbd4Vhrlm83k0C7VkjOkYgHJG6iQkYgUbtWZqysiFiJY32oT6e7ojOwnWnZWxB1aFwB6FIHdKS6MzH2T+axeoM5a76igk3kysa4/ZJm4VaYuS6xcLjcajWaz6Vt32ev3Wlpa+tznPvfsc89OrWVio1H/8Ac/lE6nwcr/12/8xj/8B39/PJ5E87dukXANXoP+4Hsee+yLX/pSq9XebbWy6fSHPvhB0OR0On3m2Wc/94XPr6+v30CT38xrfxjKMGE3yFHHoTsej9vtNpugDniyxvpZfj0ko/llo9EADCXfVqk9lYGXSiVnjR85WgqFgsgPZUO63W4+n19eXmYn5RjmeIbymc/ntVqNHNCpU6cAoNVqtWBNcuFjtBVCvkLhQMWx7y8uLq6srJD8AhiRyY2sXrJcLh85ciQIgkuXLtE0nKMLXDU3a27BLwA0GSKALGwT+q1SqUR9NNLPdrtNBzkpCGECAFhgCKqYORVgmDJm3g4c5DXcEqcFhwEDBTvLhk4uVdnAmTmhSJsIsaojKjZVfmheMDqqeX/AN9gRzAE5wQ3HZrLIweabwx+gQeCMmcZt6KtRfcWXFfGWhO/cHuljRpjaGsCW9F6phO+6kunT6bRer6+trWEmyhdcWFi44447UNlubGwwASqVSr1eP3/+PLGNctNSd1x9oXmJftwC9KA0zkthu9iqZ3iZMtqCL6xQQiBCI4TFiDSY0hzhYALV14NL+I3wBw8CHBOawY2oI6ZK1voeKVNJ36N+vy/+TLORYGw+n7daLaAJkBQpqjCNS9SsRKZdRhFItDm1Ju++NVCl2GVmhvyAEgSOZMBXVlZ839/c3JybJRDvDD0WWo08c54JwI4EiE+S9IwAAHdra4uojyWMN61n9SWw+GnzRmG14kO0t7eHvhNkhvISXJU1dy32NOZwMh2UShgRaBcibsxkMlCAzmJarTjf3LWSFXiAb0qzlb9m18rn8zCI0imNx2PPZNZ6WOw2rCDlSXiBc45yQ+atZx1N0Uikzd8qn893u92UVTKR12IJaKPAlou6HLbotbU1QqDxddvBLzTTtA9/6EOvnzv/mc985tDBg3fffTf/etutt8Zx/KVnnrnrzuPFYnkvoTm57q4wCH/kh//Wb//O7/7QD/7NRv2rxGQYhp954onjd955/4k/11AGYZi54SX0jb/2Z4iJFKW5VldA5xxNLyD5oMo8z5PRRto6SqOKI23HxhTYxR7KNqceFQTBOHTosKdmk3haJd4Er3t7e5cuXSIsJjvPprm9vR2G4fLyMsis2WyGYfj000+jy5SOh7OHvZWDihIN59zy8jIv8Kw/29raGvsXatHxeLyyskLNOKLPlZWVdrvtW9sebdCz2azT6UCQKKwXPmBs+VK+2cVr9JwZTZOOpx9JbDU0gHhneUky8oG12XDO+b5fqVRIzJGdd84tLi5SpFIoFDjeisXizBp/x3GsIuvY3DGZBlPrycGz4xCNzSY6sKZKHJwcY/xrYObbehmA2xkjqKJjnoWzQhDKdHhNskYYCKWJytxTfbQzlAbq4k6S9K1nTjqQMUrV8VCg2eZm2wnjQmCQtT51xWLxlltu6XS+avZBPYeUEoVCod1ug7fe/nLzrKyEOcM9qALGWVk3aAb/V/0tTwRikjkAqTO3JpBcc2vl4pmPT8qqo8DQoq+cc6yFualpAVW8EmWzwgk/UbIDv7i7u+vM0JjRJt5Ajd3v9ymQAgMdPXqU2vkkD+qcA1HBwIXWcl1wNm+u5uRDU1YFRag5Ho+JwTLWf0sJbl5JFER1CEtGxVihWZ9qkhPzsI+l02m6LmESCaBBUK75zwcRAuketFJiE45DAXrWFQy5obNmEDPrs8VUVNH9FZl637weCThB3lEUoQFVeVy1WqXSZWZMWJyQbs/M7IKCd/I/bI/EXRJD8x316SkzUVdK3VlBG3LPTMLxnmdXLpelJWBdy4iDrYO/AgqDpDlWKBfLmCNENpslD/72l9g1dX3myScbterRo0cr5cpNRw7fdOTwqTNnZrMgm/1qCOp53qc+/Qf//Jf+yWS8n50V/+LXdDpdW1+Po/j8+fPSvHqe96jVejvnut3u6TNnOt3uh777u/fpNr+Frv2xDYpNZc/2NE30j5nNZv1+X81bJZ8XXeGcYyuMrVZReW0SQ561XoCMEWGWtj4rbCW+2ZiBtNj9xdlwYzSnhp2Komh3d/eNN96oVCoSEdZqtfe+973OueFw2Gw2Oafr9TqpPSVoQHuYQrOTsk3P53NSYETMFy5c2NzcxHME7Njr9dLpdKPRqFarrVYLGkD6SMYKTEONC3wA+R3nnOd5zWYzk8m0221Ofc45SFmwF2SSYn0oBAiMcrk8HA5JDMm7DpBUq9WI+PknBnM+n5PrJz2HxJOX7ezsIOUMzCXbmf2HS3BpQF7Panun1tJDDKVeTLZa2BHygwMDyMhsIXThPjlZIYMBIjzHOKGyAkykrJEPpCmhi2q5nIkjuQdIaLgu3CghtJRfS5lZVb1en8/nKPOceSpNp1OKQi5cuLC8vJw1y31KhtPWrZ4HJEUBsZNzhassNK2pKIrgm2NzEVKNNr+BHvPNw/yKazgcLi8vE1bBOCqBEFkVOXMDAjJjXo9cYFAVgiTx+tz6OOuvwG0AbvDZ3MSLQE+q8agkYyYgztvc3NzZ2aHnHqNaLBbvuOOOdrtN+OGcA5JGUbS3t4dVJMPoWc9xppkzSASmpKIFon1jY4Mg0/M8aH7sGsAfSTykRwCI1J7DA5XFVRKO060KllQTkqCFrC7bCJg1+XFJuIzHhQhsJKFk+ZkDztj9YrEYmqkQE2A0GtVqNQrnnWltncVg6C/5CCFX59zOzg7fjnsDwjKk7FGsOwaQR5DNZskCpdNpho5J4qxySzKbecITwPd90Ofi4iKSIeXKYzM8guBUtCNQyET1reCJW2IN8r+SCqCJZwlfZXFdy9cjH/zg+TcuPPvs837KP3b06IH1dXW75nrys5/9K594zHf+fH5NNFf8i1yT8fiHfugHf+1//d9+4sd+lN+kzArgwsWNM2fORlF07OjRBx94YP/u8Vvo2h+GUlpsfHmIOLV/IecinNUpmLeWgBSJU9jBGUA+mg2CxCvpZs/KNeAG2L+cdc/zzD1byBXYIQoql8tNrcUif8ubwMORmkfmf88995CmhCeYWzlnxlrv8DNnj/SgokZCs7JjZ/c8b3l5OQxDSlYRaVWr1WKxSBUFWivRDM5UiRyHYmphkur1OtUDFFiwQSt7zqkm/iNKdA3GikU1JbGVpRes+yLHCaklOC2YPAAZNbAcBlAvVESBVuEmw4SlORcAdzabAXY5bp1xVM7K8AkPVD/OSSYpbcp61YA2wNkML2hYyIZP54xXNk34j2qt0KxJBT2ZfiAh3goZBnnMYrGI+RFxjiYArJVzDgC3trbG6FFAjeMJtdXQxjxZjkYQGzUTMEMI+95ylSlsm1vRA1wsiISXQTBTjkNO4M2wkjmQMTNRlglnf2SFxow2EwnAxOtj8xH0rQwusNZ8ADVBW54gEAfc3Ov1WFOEB+iPuYFKpcI7I6nkfwkVPDMzyufz991338WLF7OJRtiqvudD+SWcGRdJjCQ65JX9fv/ixYvr6+usr8j6A0nHwo2BRer1OlEckYxzLjbnIJLgTDDALrvZLHFh5+4MEUaJJoGkvKM3+Tu6RDNDPQJnTCGBFj/U63XnHGVVmr1YC8mgXkoD1gIoMAzDZPejpH6ALZoNKp9w48rn83t7e1g8RomafSlYmAaEtchXPNP7asVxMXpSN0kyEVjTIKY0KmQuNjcyUSQf6B0QWEdZEvrKUBEEkjqna9d1eh0+dPDwoYPtdvv0mTPPv/CVW44eO3r0aMoizE8//gf/y6/+y2uzI87/3yuYBaVS8aabjrxw8uTdd93lnJvP56fPnDl95kyz3rj7+HEswG5c35xrfwAleiwOOZieMFEBCoUj/wtQI9iI05G8NqeX0AknlizZ2NGy1rYbIZc8wEURQXaC8JwRVLH1XcQtHBSFhB+5jzPvbkp26Kvx+uuv41bN98J4kq6yKhyeTCaVSoU752Uc5IKwgBKNgFL2sJsqElI2kPvneJPGbm4l4YzM8vLyfD4/f/483AwJNWdIAu6Tk5vfKOEIZAROgULAxEAuhkI8Cp8Om0KMuLe3R3KQoB/qhcehJ56krECBzpqPC+jzcNPW0ZsHLYWikt1iqdNWAcrLBIUFEYBolHEwx+CQBIAANJlEmbyy0qAuJZ11hHMW6usTIchWEzyk0AImO5/Pr66uqrTW9/3BYNDpdA4dOoTYl7VAvQU5Ys0TVeBy4K/CAAAgAElEQVRe5UJoqMonFALQYzxNMAfJbuEAFuYVb4WMAZ4M7hz6UGEew8JUkb/0xJoCoOhAe6C4KzYLcZGCRIOATh4ohBaoGt2I7gd0njKXRKScoVkzplKp4XDY6XSOHDmiCc/ETqVS9XpdiyW2+m42AZH0Vwg8VGrGEBEy8a+5XI60L5Axtm6unlXJYJfI6uP+NZnZMaIoAvXS24bJoDJ5QkfQoYi0tNmw62KOoYVl7RCpangRomh88OfyEo2zeTTJwMlZF0QSQc6M65NzgxdjrJas5WeomScEYM7S08ThkqSzORODkbb2rZDIGVPLwlRLIfZkBpmVnjWzJH7JWqN0z/M8VOyqiNJy5rvwFNir2V1hna++vq7Ni7nBz7VarVarTSfTU2dOP/7449/+nvc0Go3H/+APf+xHfzQMwrfcQK6XazKe/LW/+ld//hd+8e677tre2fnTL3zh2NGj3/2BD+QSvcT6g4Hv+0vXf/eja/zan5Q3J9zcTCgm1nGLizCXFAbbH61lpC7PmRMhWzyIjfOYs5x3i6y0RcUi7JWVSoV9nwQZgbuEzOCSvNnequJ4Pp+z2cFyiTVhg0O4g1ooaz3carUa1jyRmbShLYsSzQnhU2FDOTk4TUXeAEHyZn/IsacNN7KaU3Tunrn5iGqdTCbb29vUjLOzc6g4w15KXGasSh1qBy9l5xyWcujSPFMZ6vDOZDII/kR+xFZT3Gq12NMlpZpbJbhOYuW2GEneBPANDMVBicJq5xznOjME8SjnEGAIOkeZWT6LKcEXhFzEf5SbRBrBcxd3xcgAMigDV2JXIkgdYFwMS8pkwXw6GHpmzjtgXx5Et9tdXV1tNBrj8ZjqHFARhva8Z7vdhlyBraRYTRXH6bfSmPvmw5IyV3PPSh9AHpBGkTXI5nBNfildHOdZa0HunCNDzVSfJFqrx5aaZ536VrExsR4Es9kM2UkURSKPkVhwbyBglh7vn7d2kaPRCG1xJpOh3iIyd0aMDNkBxB0mERUXuIos8Hw+BwXy+rmVDxM/cEvZbHY8HpMdhvIPrEsCWweLWjyr53l8R9kuMvhITWYJDyYlAcSxQdTxuXnzPIJUQ1nOF4GcY9pLdiKsDEpDWsMOljN/VqIC7TBCbKlUCnSetjY/TC2WD68JrYwS4YqX8CryzCR1bmWRfE3nHLJL0LNnYgNIWShYWGeC5+SmJBzPM5IbF5PZtw7jDDjHAU+8WCwSjXMDbEF5sylV4Me050CZmd0BG2MqlcKD4i3X17V5dbu951/4yqGDBw8cOLBQKDjncvncXceP33X8+GA4GAwGZ18/95//F98/uK6MJ69+hWG4kMs9+pFH/uzPvnjHnbd/4uMf1z+NRqMLGxsbGxtxHL/nRtecb/y1P1XeRMOcr9hfJ18AxppOp5B5ofWa6/f7Kt2A2oTVQL03Nf8zGAshCfKtodXw+lbl5xKJVM8KWcRLpVIp7CQAed1uN5PJoOycmlUhh83e3t7Ozg6qLOyvxcd41gIRwzOUTJ5VFouzodi80+nwnoj8oihCJESNQmR9CLUtattNpVJ4y2XMFVkMB5Rtt9ulEQvJViXK2aZn5mMMXNBA8Sb8E3dIih/+II5jKFgyR5RvQ6AimJPVOT4jYpRT1rrdOcdjUnGMiOTYjKDZ8b2EGXhs6ltn1IVnjeN4JTBCKW+eL7QcOBV6FREhRjacKEojihEBxTIOAiKRGSuKE3UGU0AYzC7P5ImaRSqS4JyWMdOhQ4ekK6hWqwcOHNBCmFiHG01ReKCc+e1dfaGB+5l7DAucH/EP+DI2RQGAT3nJKy5GT2sHHICJPdNMj8OZbaGoIwQJlGeBMhmZnPVx5hMpoVD8lhxDlZiQHSbEIjoSQkXpWCgUCPPUNJIqOj6ISh1mUdLim2gHJpV4hiGi1gSXMWb4wsJCp9NZWVmZTqeAV306M1O4nBy6szJtYJafMPRxzpFdRWYAhyfqOjYjTwI8dgCYTuecCDk+JW2lJEx40KReo09XJodFLf7VmUE9u0pgLlpSavI105eL0QGXym6jAqfLNt5DLqHi9RLuXfoN/4kDOTUxgGyWDHNS9kD8DFlApDSZTMrlMlOFtU9yCVYyZZ7qyn3zIBh85RlQGdXr9Ww222g0eArLy8uZt7JQuGavRqP+0AMPvHHhwtNPP50v5O+9+x5RrcWl4pNPffa7P/hdwXT6NaLG6/maTif3nbjvV37l1971rof0y3Pnz7/y6qsHDxx44IEHypbzuXF9Q699C8JARZEZdCdL6vA2T5s3TaVSISLn7CfNzQEA26T4O2VN3qjyEx7yrbs358ok0eiFQ9GzvovT6bRarbL/Zq2xNZE9UGBpaaler+OhyEcTfHPwoNgDfpEIw5YcNjSOY2popEXj+/J18MVcXV2l9waJWkoaoa/YcPWlAIIqgRSABuXIl1hUJdwk2spsosEdI8AxBn5V4q/RaDDInmnIiPXTVoiTMjk/WJYdHKkizApIDhgxn885PJJfgTMY3Rv2osqIVatVWSNFJtQD50mUJj0l2CUwm0B9u+FwqFolFW9lMhkYVmYUOJiPFm5Aq6fjk5eJ/VIcoknLDShaICsKz80fzsxVZ2q+7p1Op9FocICtra2pKQ4Tcm6m8XBjmHszRUejEbrYqy8x4FeST4rNPXF2eQUJ2HowGICq3/xWguZ8BZV9oAeoVquwg5FZXzETfLMdVQo1Mg+vJMXFfxaLRUAMWIp1B3sNmOBlunngBe/ACoX+bzQaTAOl6YkEwJrlchkpHuoXZI4gDIYamYeXcFwCgkRRRP9G2hrN53N87CHORb4qNgYDUWejOemZuCVOdPuEvwdLdbtdvmnW2r3yZX0rUmY2xtYYBghOrnlujQTZ6Pjo0Pwvk5oH9gcxcMnpAaomqgzN9Sx8U8uZ5NwA5kr1jm6B0QPXSkEBhGVz0xIG+I5GIzYNAglndW+gdlYc651hSZmjJ1doBh2SKyj8g8Pu9XrOtDREQWBNZhc5FkrsyW9EUXQ92n1zlUolKMl2uxMEl9Wqv3Dy5E9+1wfCt+qJcN1d83BerpTH4/FgMCwWl/jlSrN55PDh5Mti54JEtfuN6y/92jdACR2CB/XscoMGUmbK8LJTk4Ri5yVbN5lMgCDdbhcAR34HcRK4B/cW+mSw2cVxvLi4yF7MLkYgTuKp1WrVajUljKAPYYkAlMJSkBl5699AWA+e4/1rtdrKyopz7vz58yqqAEXxrUnZVyqVdDrdarX4agcOHNjc3FQ3C2dU2YEDB1ZXV+M4Ho1G7XZbSS6OFpy3YyvUBfh61mWOr8D70BcEiR4Di6MbvB2+NoGZdKIN7fV6jDwqfhgRGb5AmylpDlZut9ueOVAKSmaz2VKpRGAAjQTvJUws4orDVRl8z4onYqsSiKKoXC4rVeqsICaJYzhLpA0AC5IOY0rgqkgQosMytsoJJJXO2l4DNegHI/0iNHOcqO/h+GRkeEbOSn0hmKFY+I4I5hYWFngcS0tL+FIB+geDAX6HQupADVA4rvW10tLVV5mYYB43ys4rAIFnhTuQlF/zfZR25ynozVEBgmkYRq0+DniiDhAPx3nGmjGSDubrEOQwk1Vvx+PzfR+qHsHJ3EyXfHO9jqKoWq0SNkytfTn3g25kZoYPYv3z+TyIvN1uE6DysALzO+RDiX/K5fJgMABoUgS9u7tbr9c9z+t0OoAn3/dJg0DhoxIh/4CGUiZczlr4MMkZCuy3RFpzh6rKYndiQUGzEbSwWpkbqoeLTFbOLMJAQDEh22Cv14PlBW7yuUmILwDHPRBJegnP17z1+IYVZk8W08wy50/IZTOvwGpi1mPLMxBH8Q5ZMxjyzN1dYmvffEw9E2LKEoF3UOTMKTAcDkulEsu20WhQzqijgbUwsebyUs+z9FgLm5ubSCyui2tze+v0qTPLy81mo1mplJ1ztdpldUWjvVGn1ysuLfZ6/X26x2/gFc6CRx758MkXT77n276N3+RNct3tdrd3drZ3dlq7uw+//+Fstrx/t/kOv/YHUHpm/T0ajYZvMlZNnsRsE0pVsGPyGw5X9kriWpLInFjwi+VyOdkYI5PJ4GN38ODBYrF47tw5DjylU1ut1tLSEhwMIT575dLSEo6A2FWw3cgoZ2lpqd/vdzodhGWcLisrK+A/Nkqd1pyX5FKz1p+aVCagYX19fWNjo9Pp4GzinGu1WsCOXC5HCx+kSJymAA6xPnNrmNvr9Ui5sv+m02n0XtVqNWvNzWALOF3YjvkunucBrIG88/l8Y2NDuTySldwGGzHyL6xPIEj6/T4Hz2w263a7OHh75hjnnGNkPBOi0Zw3a83NQzPiDs0yU7wFelllDzmuxuOxsuo8aEIFsWLgPGXDOXHhuefWXzGTyZTLZciJ2HoW034DfsuZRpBDKG0+KQCRtLU6ZCQFNcAEjJtnfYpR421sbKytrfkmBVbbeoQBnvV5j62WBaKFvOqbS2fefKkO15mkGNrJT3gwMZ8jE+N+zfdBxTgajcrlstK7yXNdz25uLYKYLeK65ubv7UwFCILkcxmifD7fbDZxlOSwd86x6judTtbMaAErwAuiEcYfngzkxxzwTCY7sf7y/BU5kL29PZwTFKtABCq2aTabLOHIFHssh9OnT5PHYE622+1MJlOtVsnOX7hwYTgcLi4uNptN6v98E6JIHsA+wLeGDifJTtDom6OZcw51IxgIxSRPUyrVuVk5Sl/Bc2dXIczThhmGYTabxfmcKUF8SANJZ5U0cp5XaQuLQvoNRkyJe+cccM33fSYn34LBZKipa2Q5kB/gVlmYzmTrLsGAsjnzM8FA2tpaajWxCVOoHllbARYLrmfJWc1WwAHB3bJpKJBIWzeNudU1XkfX6vJKyve3t3eeff7Zvb3RcrPZbC4vLzcXDFe98NKLjz7ySPC1rMHeAVcQBPfcffe/+vVfB1CORqOdnR1w5OLi4nKzecdttzXe+979vs13+LU/RTnO2jSLT0pescm6FXeS26ISYm7NzdgCVGxLNoQXFIvFarVKsR4mLLhFOOfAl/V6/eabb2bHwUcN6DAcDre3t3FygXIQupXEngQ9kA4wQcoMSgY4Va/Xc7ncG2+8ATTJmsEeUMm3lnHQgapS4ruvr6/LcjKbzULp7e7uAtcOHDiwsLBw+vTpTqcDRAN5SOnPLj8ajdimq9UqDCtk6tLSEqSgc47ezZE1wuaUhUIDKvE41NDMsxpSUCPyx6k1hkZBlc/n4YqccxzVglM6seB0+Uai+vgsPWsci0hgCQLylFU9HZiTOQeAqiIgtknfM+Y8Jp6d0KqzCl9NvJQ1Ck+bgyll/s459fxwzoldFq5lfPjc2IqXwSI8en1HWUP7vs+jabfbsNHk36HNoDO5T+guZ7YpCGH9t9cajnUUWwtvCGzqu5m0VDzwKDVnvub7KO/pW6lELpdDGTmbzXDfRCEgVWLWGo5Tr+bMIo6iWmYC7CwhVqVS4QyERUtZ8RaFX0EQrK2tNRoNlK8i6XNmjsPSy5pxbGx1zYhMgFPAGsAfVJbk1OSUxfPF1mnJt246grwQ8IQcACkCKoqNjh07hnYT6QIXyx/SlAyM5Il8fShz8hvErjwL5i239Ga1gPhL3TzfCBROGmc6nco/kvmPyJv3JxhjnvhW1s1Dl4aE6Chv5vNqhZBKtOkSRgTSEQ9ogyLdJKZckJFdF8GlM5GGMub8oSah8iEC3LF1q+J9oGmp8kkl+hQwaNw8WwdaCDY6FhShBduaEv1v6cx1rV3NRrPZaDrngiDY3tnZ2dl+9dVXfN8/ceJEo14/+eKLP/gDPxC84/LdXEEQ1GrV106dns/nFy9efOmVV5rN5vr6+on77rt+FbHX3bU/DCWsFWfYFaRIcrsEPcRWQggG9RKKHzZZ1TlCFrJDlctl5xw5SuccQCeXy8G3OecOHz5cqVQ2NjZarZZqEsMw7PV6nATIjMguERazBwnCsvvAAIEAoEjr9XqtVmu322fPnqVwmH2ZOm4OGAAHW7AkgFRql0olMCVe5ZBAe3t7nApLS0vLy8ue57388sthohVQnGgmwQehj9zc3ERupbCbr+Oc293dZfuGw4Ap6XQ6QOfRaNTv98kMgmCazSaWztL28UHOuGRRIPl8XhmlVqvFGQZuhkbq9/u8LG0WP3ADnvl9OKub1uku9MCYewkvdEYgZWZDJOx8884kIQjym5hbeNpav3D/TCoQMGEM9Dn5R0hlSqY4aebWu48qUZJuvpUyQNql0+lOpzOdTuG8EQOgCUNlAeMiQ2Y8ZXyzbPSs9IoICligzCxw8OqrDLQh4Z0oXoqiFJIll97sa3UHUa0VUpAo0ZqP8aTynTeMzUJcvow8Gs+cJgvWXgiM4pxbXFxEYex5Xr1epyTi5ZdfBiqJPkTsG0VRsVisVCqQkbG1beR+RFWigYZKB+rFZgdBjyvSmlQszc2kU3Vdsmbkm7IEmJ+QkcPhEGjCH+7u7uqvSNwjroAhg1om0mPh00Cy2+1ms9nd3V26vCqfm8vlWq0WqRvmbalUkgcnFDjp/on1NELZgsSZBaLfs/PwcMmkow7S2pmZ45Vzbppw72c1KVHAymJpR1FEyCe6S5tPZO06+VCY+0yiT1Jyvo3HY6r3eL0+lx04k2hl6ZxbXl6WliaOY+SwFPGwaRDGROYiBDnKMDJPJLfA7lebtjPTVgk22FKuvr6utWs+n4dBmMvnnHOZTObA+vqB9XXn3HBvL4rmcRy/9NLLjUa99w6q777iCsPgY48+evLki3cev1NeGclrgt/z9cY9X0fX/gBKAkoszVU+TMQMdmRzZIthI+CgZZv2rCGe2Jec9TJxztHJkJbNSAZJVJVKpUOHDi0uLr722muBtZ0AcbbbbaVpAnMm8n1/d3d3b29vZWWFQ8JZVrTX621tbaHK5zck3xuNhiDjfD4HTwAuZ7MZWqWctZHg4/yESzYHIUwMOBK3EUgsSB0O0Wq1ur6+vrW1VSwWEVBGUQRA5Gfex7dKI6AS2yWI0DkXmPk5X4HMl2jjMAwhQRkiXsmRyUOBYoGD5NGAuaEi0mY2Xi6XSX+LCuIg4QwA3qlYWOI53pPa1VKphPWScy5r3U306JM4JmXt2jiznbUuFFAAApIl5HRUSh3gQooQtgO8nrEOLoGZB0kTxkcTYORyOdK1MOv8LUedZ0l8iqIg0pJ9CyF6Q/NmclbNwA3TLQn8RKk1R+Z0OnWueJVVdgW55ZsHggSsIvtZfXJJvOIieIDIZBI6QxvwUn6izTqYGwKJ+cycISRTXMe4kbOu1+sHDx7sdrubm5vlcnltbW02m128eBG7A2qker0eikPSvnt7e8D9KOEuDnUdWr8ApYbJigrZVKvVdDp96dIl0Bg3ifaDyDBl1mMst5T55DPt5/M5y9wZZ0z1BkQmY1Uul0ej0e7ubqPRcJY3gC8sFApMUU0w3/eROUIxxlaixASGHSwUCsViEe0135R5KDkjmQfiEHA/TB60nMKn4XBIpM1mq0eJuoPdg1I2JgwcHtykVCiMZ2ydx0OzPXKG25jVQHl2b89K9JL0AdNYkRvbBTHG1LpeIUilzIvSPXLfdJfA943bzmazKC8LhQKMI8ZSzrLqvpkYMJmXlpYUhQZBQEkcMgy6tyvbfr1cQRj+8VNPOOfKpXKlXG42ms1mwzmH+eILJ1989NGPhME7k57kCoLwwQfu//1PfvLee+/RL7e3d3Z2d3r9fq/X85z7rg98IPVW/hg3rq/72h9AOR6PW63WfD7nvL8iucCuQWEELf6wdyZXIhoMpoethC0vlUpVKhWKrHk9ETmHRLlcPnjwYBiGOzs78/l8e3u71+txWsMDobuCBmi328Vi8fz58xsbGydOnFhdXQVTchZ2u92tra1XXnllfX393nvvZRejToW4vN1ub25ucmZDfJIK5EBKFhZIvTe3ku04jtEh9ft9PHgbjQZ8D3lYjJZon8PH1et1KKter9fpdKBPVPDBccU7w1pxzjGYbMSVSoUTDgDEsQ3s8H2/WCxSFcvpnslkKOkluSnvIfQGfDoYtNPpgL04G7golqLXC60LnVk9c/BDxvCU4ZmKxSIVEqJjOTXJ6AFMnXNz68MGlYXtFMwWrCpHrL7C3HppMD7MEw5szmz+kP5GSbdFwVlNP2hI51xSLKt8PS8DB6vMH/9CpK7yXZJWzznH13eJzlIqmQdpXX2VcSIyMRg3JK1QMkAcZ9iCSOA/9VaxlZQpH7pgXZKdc/l8nrfyTPTJl+WhgDtZoSDmJD2/tLS0urq6uroaBMFoNOp0OgcOHIjNGzJtjSuh+WNrKjOfz7e2trLZ7JEjR4QXeUwUtHU6HRLrzB9GjPmvea4F5Vk/97T5RTArKCTqdDogaeVG8vn86uoqKAcbgak5tqpVqbPKHuAgvCBSRQjsVqulaCo0S1e0N5Bw+jhgIrpA1nvauoQztZIzgUIcVpbQtrN+ObEZ1gLvMD8CUms0SM0rm8yz4Dc8I0mTAZTOOSl6lR8QHY56FeIzKXACfxMupsxPVJYdUaKnDvKMarUq2MqnK1EuvSMZDPj7nLld6k7YkeSiRRQnNbPKy1Sod/XFdQ1e+Vzu0Uc+Mp1Me/1et9fb3tkGUHJtbGw89OAD73hAWa1WO5dTsDu7O9ls9pajR8vlcu4GlPwGX/sDKAEfg8EAoi6ZXwCaOOdS5hwOMAK+xCamhgwgoGQHRyBI923wkM5j9ghSXUSfu7u7L7zwgmcdFPiT2WxGz8PhcHjp0qV+v7+1tfX666+vrKycOHFC6Ve4w62trTNnzoxGo2az6XlerVbDQhy8CP/KzbODA2jYQynBhimEtIAUmUwmbKaMTxiGyOnq9TocQyaTkQU3X1xp03Q63Ww26dB44cIF51zeWp+Dw5TahoJ1ziE4Q2lKJtpZ9yCOPUAVXJoEiFBoOzs7w+EQbiaVSuE8F1mZJKQOdC80LVBmOp1y/IvGc87pJEPlia5ACUreQTnTyGp4XaI+FOjJYeaZFIHDjNuG74msdw6pZL5ybKZLjCdfGUjkW+Mlz2RYHP9pM+RT6W5steGRmYRzEAoOzqzVJOcWT1kpWkZMgwb+860dXGidRcGj+vpveU2szyEkop4I4ROEH+FTq9VSwj16k20Qa41HLy2B0uUQnHo6LOSJdWWksAxoC4iB09KZnba+AwDfnZ0dKtLA8TwLIA4IeGdnBw3ohQsXCoVCs9mEpGcaa/lsbm5CXxFT8Xu+I+5LBDae1UgRDTImeWvkA3LNJiy1NROgAFmeVMA452DO2GScmQSBF1HarKysEA36vg9LjfI7MEMrytKTig5EFywu5jbYDsZONvtUfKfMlrLVain0YmqF1mKKkBJ/DIXxnpWkIA8AlrEugP7KxYPS2F159KEZQzJ1VbvGHCbCZMpp66auS03FpK4Wf0lo7QwjMks1/ouLixSe82Kc7VnvWAF4nnf+/Hk0o6jYQdKh9XrlzdltiId5yoR/pGWuOwElVy6fW84vLy8vX/H7nZ3dUrkcxe+Q7jhf84rjuJDPvf7668lf3nX8+D7dzrfitQ+AcjAYELCy90EOsapZ59g9FAqFRqMB7OAYg8VB3sexVywWxTHA2HE4OecIx9m5wjBcWVk5fPiwcw5iIAzDCxcuVKtVzzxlQvMfYUvlBGJP2dzcPHv2LMk7DrOdnR1yZ+Px+Pnnn+/1erfffjuHB1nyjBl5sJvzrQNr5gZK0EZGppjdPG19pZ1zyOZKpRJSIQgtCMV8Po8fOI1KaRpG7ntpaenw4cPdblflEb55/bBRTiaTra0t55x8H0UzeGbwDsZljxb9gJDA9/2trS3cMblhfRe2dc4J6ls5qsWUeFZz4+yE5l+h5UD2cKVkwWD7GAHOYP5ctB84IwgCiAfVbEmtxYu5+dB6IlMArkxfHMcc2AQDGeufofwpj1JyCKURNaXR2HFuAapgOgeDASQlr2G2w1sD3TjyeTQ85ZT5BBGWzK01iG/lsSiPUXRcfaFxEsNpCfui/IsSNd3Q+cJA2ctNYbmiRGMVTvTYrLCZPNCcTDCShmmr+eWvwB8Qb/gnBEFQLpdXVlYkeSyVSsPhcGNjY2YdwPEcWFxchPOG4+QeCJN6vZ58vFlWTOA4jukmyjeq1+u7u7v0TUEDo1UmTCM2Lri86SLIDMmgsyoWAjMmoeQcfH1CJpbV3Ppcb21tMTIYy/u+v7y8TMAjkYYuLBGYNiBFAV/iT15PfAgQp4M83GryuzAmfAtodZQGkVWx+OYTyfdCd0gfB6IIpj1sJSG6ktrOQDPBlWfO8xlraUa+PmdW9swETNwkiNdZ4IxTB9AzMsQnzDEhPFaf3pDf88hI9JNGjxL9uBlz7oQP4jfSoPu+v7GxgfIntq6hV+Hsr7Xr2eee7fb6hcLCYiFP5VlhobCQX0BS6Zzr9XsLC4Vo/g5zNL/8iuPIudXl5eFw+NVex9PpeDwaj8ajCf8/GY9HlXLlxH337ve9vjOv/WEo2fJgLCDGFH06035h1hNZZ22IGdhB0Ab6SA42chwoY9glSXDwQ7lcPnbsGB/NLgxDAy5hi+QMw9t2MpkoY86mfO7cOU4I4OxsNqtWq7fffjsEZxiG3W53b28PYSXvwz4liZ7qVCDGdNKAYDzz08la38WRNWKOrWoYjRTpXbn7MiBRFPX7fe6EtQQdS94qCIKc2QgDj9i+ObOr1Womk+n1euyqCJUwxlNpJ5/O6HF7fBbfERBPohy0feDAgVwuF1o5IT8z1Iyes1Yi8HOeNa4AxkHEMnqMjBQCSsrzn3GiAQyhRZywCCFHD4bzzLkaOjC2SiCdi8BNxpxZJysiMYvT6RSymZngEpUuKWv5AxcrxtFLuJbE5k6AkA4OWIyIvhpFuPyrUm+RVemmrVHkm6nEKy4vcU2tg1E60UeA297d3aVwwbM+eFfwlDwpDGgnjOgAACAASURBVIP4FpBMI+vhCY+bNlsGNBLgHr4XYYYANBMPZpEKNhhxQgjEMNlsFpdHyuyQ8DrnxG2vrKxQrIZULrTKbq7Dhw9DEjOkg8EAkYaqAKlMAiirwoxHH5qhN4uU+Iq31ePmTlhl6AvxhRDC6/f7+LBKhrG3t4cbK59CKoZ5QuJVnJzujfFn1RBKeeZ7T6Y4tvplyFHqxoj01JMddQekI3AztqqX2DpUAZEBzZQf8TK2UKFDYBZ4kTnJXqT0EeBSsbTWoOAjrGoy3mPfhoDXeueviH+YFaH1gQQ1oihNkq/Jejtc1hUXgTK1aTjTKBM5SKnPjSFjyJhr1fVy3XXX3XvD4Xg82htPRuNxq9MZj8ajyWg2nX3He9/bqNf7g0Emm52MrhuI/PVdcRytra31B4PJZPIf/+RPctlsobBQWCgs5AsLCwuNeq1QWFhcegv73hvX133tWy9vdOts93Ecd7td/jWfz2NTTIdGDh5gU2y6K/JKtVpNrQ4JyUhZQuOxdfJu9Xo9KbgRTYUpTDbhoheGIRbKpVIJ10YqLtmykQFpUz527FgmkyGhEwTBpUuXLl68OJ1OuYG0dTdR5kjeckr9IMDi3pQr5DSFNqNWgO3YGQUSWz1EJpOh3XNsDWbY+pEbZrPZWq3Gl3LOkTllw43MkpDCETEQ0nGyZXOscrp41uEQVWVkZo2e9YZheHO5XL/fT6VSKAEQLZHW5KDi2TkLKlJmJzQ1c2zlEHlSaWtcDnyRCx2HooAspxqnJilygB3MJbBGxUaAA857vjX1LqKmpMoSHZWxSmdpKHlkoZWeZMzD0jknyJu8BHc8S8rv7e3ROYnxd6Z3xBgyNsErnw7JRKI8bd2P3nKthWZplGTv4HGR9lIdBQcGsnFWsasL/omjHQaL8V+wpjUp6y1O42beH0CZLMXwfR9nR4hD3LtgsAhFVEAGjk/KapneOH7HcUzL+Ha7nTPrLv5Ei6VSqURR1Gw2nXWFoeoo2f0oZXYBekBgbm5DQW98ueE5MCsMQ1Amfj38rXOOJAlCEQIPpnHe2rESl+qxyqucN3RmeE4mxJkNJ88Rx1YAEFNOd16v16OEGQKNEpIl+aQpGE8cf5jMUaLnU2ziYwJOvaFn9qIklPWe4hcz5srEDsANM6OYBkwJBA9Ev6x03p/pBNYcW+sy2ET2imTNpTN+GtZWUgfpZJjDzD1csZzJctiE5+Z8qWx70lZpYo24kK2/5RK7Rq5MOl2pVNRlUVccx1EcO+f6/X4mnR69VRR6vV9xFK2srPR6/dtuveV7Hnvszfvwjesbeu1blbdoG9/3k97mjUbj4MGDgEUYIyJOeDIi0axd5XKZegjQJKcLgirliD2zeORCLjabzaASifjTZm7C8UacDQJbXl6u1Wr9fp+XZczJghM9m82urq7OZrPt7W1S5HwuLKmQIvv43Dp98fVRFpISFW2jTTyVSuFA3ul08JqhIJSUN+r4brcr3R6nKYwOlii5XE6mfQJS6EcpIKVkYW7VSGy4Oet9BzvLYQ9WWFpamkwmdA3hcYirAPNJR9VqtRAnKdkqIlaAA4oFAtXZjp8xZ3gAMV+Nzhlk8CHtEKRyWgfmYSS8K9EeJwfnhGcVDAKUMBCBmVky/nA5/GfK+jSCMoEOkEAMl1JvQFtgK8etnmkyU0zpFXOPg1D8qLMSHCFsAVDVifNi1gIy3KuvMn1rTm4eGSDbtyp1Qhod7XzfK1LepJsBgkAuPho4TuwBDkAxCQ1fMP/52BpnwzyBL4mI0JBMJpNut5sz/3+YWsWQfAv+nGGcm+Hr+vo6d8gtSSDIs6MDOEEU9jTEkJPJpFarARoC89tKWWU6UDIyx29J91j1PGKeO+siNNsElIXsD2ARvhp3Lpt9bun/Y+/Ngyw7z/O+95xzt+6+e9/u6ekZAAOAAAeDhSJAAaS4SATlhbuTispJtLiSSK6Uk7IUUYqWhBFVdmy5ZMWJJdmxymVXyZWkyi4psbVYRYmULEoUBIEbSKwcYAbArN23l7t03/Wckz9+eB9+M6BnIIqDxoBz/kBhbt97lu98y/M97/M+L5PJoUOHOp0OsgrGPm+E3HmQEE+dec0nzga6UsY9EWFNp0BegUJ4YrqfqDucxnX/5iQ9m3CYVC4nDhWrHWmK2I2IwszznBuWcJMzFL14uuQl3GfkHlVAZy5NWAZNAleHd4TNjdzwX/eMOSjz2+LiIjrpRqMB9ByNRo1GA1nq5uYmawE/x8yBZCnNWhLtJG4OeuXx9Xo7BsNhIU6SlwXZX6uinkTR/v5+q9XK39ACSo4sy1dWOqyY4edpljFyszSt3mAor9lxMAwlw5h9fxwUe4WBwxichU0LM9iLijIzTyCFL+l0OkAQvNyYPUnFIH8ZoWGe5xcuXNjZ2aHYTOZZn6z6s8DIkK187jVRkJ1Ng1ITzKrSO5JTSW44td2azaaERCJvYJ4irxvO8jPxUryJV6zWAoOQdD6fb21tUWwGKqvZbCZJcvHixY2NDZZDkVVANIBXyS21RWqaM1V8WUnomL2zfmvSRxlGJC4JDBcTr+KI1Am4zLor7xtCfuBRFjC0X3CfQBwYwcs4ACKewMeKF++GmZPSLvEqkQBTrT1TN9Ymws4KJAYangkCg36FDbvYNXhWCbAi9zZqtVrCqfRGUAsQGaaWfkL2Fd2D9uGezZNdQMCcXDwxa7w5KiJTjYblc967cD9bnci9n65w0Fehmc1MnRySBiN62ioPamqnl2b8RFFEAjsQ/JVAFhROUFuULcMQJjV1i0reOI3AsG2327TkaDQ6e/bsaDSSxJBxQe4LCEOoFLknQXA2JLDgdJiiGzVA/tHhiRez0SJlih7C3KKMH21XGOxwgbxNdTM6BkSv0sBV56nf77PlKBQKm5ubsK18P4oi+gaDBVTXbrfB6Ht7e+vr69pzmm8zhNUIRLD/1BYofBFwxrpbSbQFZzktkWL1W0TSgrPoNOBTF738DNy8MsxAY8C4yDXTvK/MFUrqz7x9dmX0fO42c7MC3gVKX/bhketPCu52FLmYmzZnKMWBClmXgIrOvG5kIaiYoE27ssE0NonbkLWD0z5xGCmAr4vjscc+N51P05ddcvMPf/CDWhf6g/7hw2vfAnjSsixrNlsXN57RJ2ma/sZv/VYSxwy0Urn8Xe95zwHe4Rv7OABAyYjd3d0FVGk9MzM00bGXrSPCxThnCmNmLBaL9XqdqLSSIhUMLQTVSiiZw7g6e/bsuXPnwHyKo0HIkX08n8/JbqGGNdQXCIDANJotzbyIrsyMGZmgZ7/f7/V6R48eBUwojKuJleUTQAwm4EN4BdChRHJpmhLxR4BlnocEOOAn0qUx7RKqwzklz/OR1wQ3M26DWLaZ0Q6oJCMXcUbu1whhptOS0M1iGcdx4gJNCVtZCQioka9tZmg6zaNjZsZay0ow9+xO8wVGzh28DpAfizFBN5YcAL24EHAe1DWm02DH3J0+QYRwLRLjsuyBShX6TFxeOXW3ZyAvrUFrAxxJIgb/WWCHGQVppEmg/Y9cHEYxTIQB4sm0gZEREg8ID6pFGr0sQO2qDCWkOLuX2HNWpGzjfvI8r1ar7LKUJBeeBBdSXmgYZwflgE5Y6c0LHnIepXQAdGhhQuflcvnQoUMgHoAdLpvcHs/FPUvPag6wwmVePATdQ96K2gTyxvUuZrNZr9drt9uJJy8z22gwIpDgQ0yjkGqAORTq5dHow0wy29vb8/l8dXUVnQwdgwg74tHMdS/q7YDm8+fPq1rp3FNJzM2JLMhEyTyFKAwWm4tBIbyZnSwwxUxcZ6kZg0sAnWXaxZG45X6SJLDOvFZYXnaq0sJG7usJlIzclqhcLjPPMLfwBTOTP1cUZDux8+f+6Q9TL1LKvhHKgJOz/Zu7AQVnlhPI1KtYAaMjrzbJRKfcOK7InZDipnSimdtf0HRxHG9ubl55iL2ujvd+13fq/8PYiJn1+4PDa2vZGz3ebWZ5bo1GrR8UK0+S5K995CMHeEvfUsfBAErVNIONU4gN/dzq6qoWG2JVZgYJxFayWq3C3jFRElwDdphTa/gmEt4lNxnn5O3t7dz1iLFXZIHuMrNaraaVA6xJVIUpFapve3vbzJRtqu04i2Wj0SBuxarP4qp0DUWftfNOvMaX0kG4Cm0CWaX059wLzSHrhKmCjWC9jNyjjul7PB6TbU2GqVgZVhEt3hSOozHhtHKvMcPCQBATTADmAACRjZEH8inWEuhnToKotFgsXrx4EWjFF3hrYEeAtS7EYqAKFmQboLHj7dBP0CQoUE44G/0oGGU2m8GKofRSEL/ZbKqyX8kTw1kUpcqCTUmSpNfrcQ+sMaLVWSYJB9MaIfsCO8JKaYGDNMAUmEgXVahRqk3Fo3kEHpl25rrAlPLVPNVKQV0fRYpBUXqDsJWx17ILg5LmpoYgHnL8e71e5GWBQLdmtry8zA5EGgkFOhlcdO/5fE4fXlxcBLptbm42m83BYMAYR8hhno0O4Ei8egqR+izL8JskPW40GjEPKHdKV9cQi1zMB78FL6hUElwFuB9I1swt9CE4GdfmhZTCoTELigCRFsYWt9frseuI3cqK+4m8kqT0ebGXomEg0KqMTQhF8b40GqcCbZOASOhG81i1Wn3ppZfUYZhwzExZ3pFXEtI2QIdAqrmcN3dlyHQ6JSlwPp+jC190Z35k5cx4AEEFK0DSPDXNBe4X3wm9PRqN2u12eHVzmlaEK1syejJaHbBgwc0xBCi1LqTupYCeNXO16N7eHsKhzLP9+L42S+mlHg7X43HZbnM+n9eq1cze0CneHHkex4X4ejOlf8McB5blzfCGz9PnJMSwGKM0YspOvAQ2ydcsXZF71RJIEpGTuQ0vCxVTKvkx0Gx8DfKJGLTiuUCfLMv6/T6e6sxxIANqbEDCiQ1lmWFy5ymiKNrZ2TGzxK2SAX9Q7uAhyA8gkVg3LS3mMwIZysRP6/V6u90GJZ86dYpZD0qSABC/AnjRMpGHViXchI1j8m232yzhg8EAHSphNSgQ6CVkRoo5TqdTFP2a/WdBdnbipTtgBM2M9uRyFfcepwVQHSiqKzwHwuPOebTck1Ijd2KnGRfcslurFKE3cABx//l8TuoV6wdfZtlrNptqQJoaLCvqmu6HXo0eq94FnqBnmgtARYGIjMw8v0HKCkEuiGqBMNIOEO3pm5XArd08bn4ZOrnyMXXDRcEgTLvYw8A7hkQRA0QHAIVwwcLCwnA4lGISIAUMlZ614HaDhAuywDoRpAWMI5y6sbEBRUSVUcE1OKfcTVtyV2vkfuzt7ZEroy5hjkF5XmILkVdVidzOhvwzUtkWveoBXUVvUNBEA4G+odvgE6ETgAtYinc9HA5FPyscwQygMHQ5qBCoG9je3kZBiMKSrpVlGSZl9Bmuyz3QjEyDvC8YSphjvqPYMZtSYWUmpb29PVmnXXZoU41ml+i/pikC7pFLSwUZ2bbx7OxkzHNfMq+kSmeQFRfjUToc9roySU3dNksZRSBsEZbsRUXqsz0rFApIJ/kC/De7AvNEb7avnHZnZ4cCQuyyINRzr6V5XRxPPvVUhkIwy7M0TbM8y9IsS9M0e/e73lWv1Z946skkeuOXHIziaDgcVMrlLMv+6LOfTZI4jpM4TpI4ipMkiaMkTpJC4a7jxw/6Tt+Yx8EAyokXcsBUjw8pcmO++uYeAmYCMjOm7EajUfQC34CPqVtJI3orFotKuOn1eltbW2aGSonFe9FrgikCSMlBIrzSNkl4x2rBbWfutg0GJQAtMqZQKLRaLeE20KEoWM4TuZpHWaIscmJGM8/44WtMowShCoUC5IcyD8wdFjWlAuxyt/ygASE5WKoVj+bIveAk/ArqLvxQiMSB2wAlOOmYl5xOkgTTFtJ75+7grccJlWcsqzwLXyOrQLLU+Xy+t7dH2TTWLR6T2FYI9aCv1KqEiYtucU/QnFeWpqncK7kN7Ry0SvGiIcvBdsBTPgSJgsbERMZB+R+qoYDParWaNjYCrwq+TwOznqWlJeSkAAWAO2gvtLYOF3vOwy2FrihXOJQzAacI7VoqlbgQWUFQffDulwXF4B3NBWfoJWhkHi31XKvEk8aE5HKvY2m+syLgwH4Gso3G5/WpZ+ZBZRdzSqniLv38FekLN8aZuWHakAHFPWTuZr+wsHDx4sWCZ45zrTRNd3Z2uEnQpKgsxXPJ/JUEGQpZN8n9o9gue01qJgceKvYMMx5n6jZedAztHhNPOUfYmrgtFBsegB2RXIIeAp1cVClQqFOQnwK8Yj/YwPA/dK1QiJkHpkhZYFPK/jDypDRt5PRDQLPGi0jNyA9mWoLR7DS0R9I0JXUQn3N7zNiNRoOuy8AXg8sjI1JKgmqoxG1oJcytlIY1D1LU6Z/KCMy9Zhgq2/hVWCi8ro5isRiVy0mAnF4GUkkcmdXrtXPnL8bxGz/lOYrj3u5urVaN4/ieEydw58sCnJ1mqV3NwffG8Q0fB5OUY2asc2lQvY0xH7uTRRzH6M+kqmTBXl5eRm+0u7uLObmWFuYsamqxvHW73W63KyxC1FLBI/R21MsGaILMlP6MQAqgk2WZwljMgEoNllySk/NEaDd3dnZgYfFPYUnm3qRzglnRTAeLw0xXKpWWl5e5BIbknITVCA1Zwf2KzYx1nUWLqbzgNbXhGCT4M8/SBcqA8BDMaRkwN4qL3MWDnQClz2GearUa0bRp4KuXJEnqOTFM3PBPElfRsERvySSI43h7e3vslbJFfnBOkIH5Ep56eWIAIhBW6JPVVFlcgMvcS24o7kafYVEhXx5Vw9RdJFnXgQXgEpZDspITF7kSxeaF8qFYbf1VeySWfDQbUy8KRTtzA2bGFbl05pVpAKmgyQWvWHPlgcZ7LLhFjrnYV1ag5qVBgOOh2YLOoDvMgio44CfzLDqpO8Bbqedxm4sF1T3oyRRzmgZlA0WUckh+RwuDJuHR9/f3MaDVFgJmnQ4DdQo2YrvCHpU62gijMRsClG9vbyv4G3u5F+jPPNBiTiYTPmSLyBMJUQns7u/vK9ENaSOcmdLFGKeMBewXFIFRI4Np2MOYM68gdUAw25iy2z9BUpbL5U6nMxwOe73eeDwGdYnvZCMR7nLZTWkqyN1bNAq8BcytSeF0C0FdSmTlWZYRPkaLwgCBziy6N8Jl05TmQFaByAt30YbAQSHOkvs8KIyujmFm2L+jI8q9UGTkyhCCJFwOUlNzWualB5gx2KNqU4TwtN/vLyws0Mmvi+OON73pCn+t1+tnz5yJrjeU/A0cSRRtbm0163UzIxn3xvFaHgdmG6R9MJ/gCayAoDkVEbmHMHKu2267bXV1NU3Ts2fP9no9JtDBYNDpdEijJqGYyYVpVIQESkpADPM1BwFxCE7WQmZt8AHWaGZGmFuRIEJm8KMwpkmS1Ov1brc78+rPcKgQeJE7KWaBwM7M9vf3Z154jbUndltHJtZSqVSv1weDwYULF1ZXVw8dOlQsFnlYiC7wB8snMzvQJIoibgBOLnJbHzU7EUCCceLzgCysDfV6vdlswsKC88BSdmltbnPdKsThzG2SgI95EMeH3mB9FXFLXJhcDbyiBD5wfiHjEsaFUyWeORF2KgDBzG2Mpp7qTtGgihdq04IKdoy9FEohMMShY5ibAkKgcl2INMWs6WDkHRNe56Ji6cxD1aJ2gBHyLxRkRFUMIAAfh5yNdGmyfH81Mq+5O+DQxzRGBHlJHPm6AXRYtBAKg3qBNeCP5eXllZUV6hbKholOSIK2mbFd4Unpclips+WYu5e1mG/gEffAq0/c9tLcIodBJJIv8pQvrg7NiVBEUkUVV0y8fChnBuPOvcQ24Yvcw+jmxQ/pzJyZ3kWzcLcA1mKx2O/3GXG8btpEHKHkDdyJNj8a/nQPaTTDzqOMdRAPYEvxZUVgxl4GSXiO84s6ZShxflhAhhiujagXtKunDXV1kvTNyXLIVNB26v7tgpXm2yTaJ/XsPakLpGxRh9TGiTacuUsGl2CfP5lMcLyv1+upe3zSDcJZFIBI5ETEfO6GHvyKryEj5s4JZ9Xrdab9646nnM3nk/F4NB6Nx5OVTkeTnpnVqtUsy+Ioyt7Q/FwUR5sb3ZuO3qRPRuNxt9utVMoLlYVypVK8ztWxr/PjYBhKaKeFhQUJKLe2tkijzt0K0TwtBj14o9FYWVm544471tfXT58+DQcAO8UsnLiPD8uYmaG1ggljUmaWYQUtuqOkcjxTTwoRrxCKwFRbgqmWRZ2Ff2Njg9B27OnGy8vLrG3cfBRFFy5cGA6HKHWUv6lwraAMU5tuD0AgDdPe3l6324WzhJsRk8FSAQZlARZTyId6XhEAikpzCfPQj9RFtVqt0+mwJuV5vrOzwyTLusWTsvjFbruduMEQVwc6s7jOX/azeDlJmfVbC4kUZsAmvCcJ7AJzzcVP5iu0VnTRz8oEIlDI2kwrAf2Vjw+vIxJX4WxROGRjsLbBm+Zum5znObb8BLiV0gRA4VbhRxUrVBty87SeYvH8ijg7q2Dm1tDm8VDxeZCjryYql7sWEwBNQJ8dyGAwWFhYaDabFy9erNVqYWKcDqAPPa3sxZ0LhUKj0eDMi4uLzWZzdXUVWDb3muM8lGy6aRw2dag1pFWI3d8HA3/4NnZ04qjYpdCqoaYNq6BSqYRGNnNpZsEdFegAEksgjGEnA7Dr9Xr0EPLcM885A7XDx5MJxBOhui54AjuXABjRhmzhyJeKgqQQaXPp+YAwNjP0cAW+ecWZO/XQSvPAJQrKreL1q3D1KpfLjUZjOBxeuHAhd3Ny8x0p1KYYRzMruks//CLOl2ZGp2IOnHgpcIZSyb23oigiaTpyw6AFr9cwcytf0ZzMtImbwpoz1nqJ9Bz6Z9F9PUMNNPtSdsu8BaaR+XxOXh19gC0fV9TOOfEqpmWvBg62RlsZew6cQhyxi55pJUbKlYfY6+r47COP7GxvlyuVhcpCpVLuLC+HfyUkEsWxXeoL9gY7ojg+f/58vf41Y6A8yzY2NsbjyWg8mozHy8udtz/04AHe4Rv7ODC0zuq+sLBA/gpxItJFAX+sQ2ymEcSwgGmFDoOwLPkwQCiogDKxu0/lXo8hd3dJ7oG5iUWOdB8zI1zCsgE6AfgmbqYD3RjHMWAC0R63zd2ixB+Px3t7eyzAe3t71B1O05SaMRBUWCNN3MERbobrKsTDNhoYt7W1BRcCn8cqHnmZE1YsVdcAxCSeOAIZELsTW+rJBLnbRzOJw88BrCU82t3dff7551n4x+MxwkFQI1gn9dxt1k4iZRxSE87cTzEKsoWIDArXsmgBC7rdLqjUAsNk5bQKcvFakUCp/JLW76JbctIxaAqRXiUvrwKVosSF3F3E6VpgYlYpIpvmeoCZl4yzwECK5QoMdxmVmLkMFBgHbIW2XF5eJjwHUhf6F+PCzYMqZlfzobSgNrfeFJwNb5lOS9KuZIg6WE3JtpGST6+bkdVut3FFpVnw1ZIyEngHR5imKfkxyrnJPbMe3gvwQYsJSadpuru7yyAl0spfGWugeWHl2IWtxWIR9MBAMzNsRKFRiW4TroVQ5DuoYIGMkWsZsbrk2SVvzd3OUJsoaLDpdErdBJj1xcXFsVc8gonUroB5gKRANILsEyQbUDwdQlHIG5QD446+mWsx1WC9xNuZuo0/HVssIAfjmsexAOcxoaEV4REmXmo8cqUm0wv79lar1ev1OI86hsLWeZ5DqJtvb6AVgbC8VjHT8M2SgNN6KJ3ioOKDpt/5fN5qtULXs8h1MnQS+H4zC42sMxc+qY/xxtmZaHpPr8NE74e+/UH5mb/yqNfr+6NRuVSyNzKetMjis+fP1gOtwuLi4gP3369/pukb3zvpAI+DBJREe/UJUTxclNlPA4mI+coPL/Zi1sxu5ntfwUfIp9gLPafuNa0pr+S+5boT8MRwOGy1WpqCocFYAvf29lhgxAJGHkyP3b8DYAeQQuKpKAzAF7YAUEX8PY7jRqMxnU5JCwVFmRlkrSAmCIBMI04F7wKZARMWJk+Mx2OCdJo62bunniXKfxNPv2W+Zj0ruikm8W5ucnt7m2LlW1tbQucifkA85smnHFoAzF2FxZLCoZqXWwTjgv/wtdYKpIBd6uX7Zm7NXfRifXQDViYxggWvxyNSmfVM+bYKQNPrgJK5p7zwc3oXfUNCt8jNn9l1AI/YG8ReGj7Pc2W7w7op4zVyt0u6GWBIQVjzwjzgHjAfxV2Q5PJE7ChKl3q+fN0j8vwhMcHEuNFxIgIOF/UsSMrJPScDPFQIjBgBkbVabXV1dW1tjR0XeyFgPXs8ubpoINOMM6+hDFADsNIHEvc5ov1Tr3yjjYqCyKC6er3OaFWogSfS2+GeIQLDmYHxzqtnT8ULAgoDaPTuQD8wrGhy6Gn0MbYrnAT2KxxloDrwH2MzyzIMd2kHECSpfrxZC1JkCu6ww/OyoUJ4TTF08k5msxmAUpGKBS/LjlhC7zTygtq1Wg3ZDGiVeYbttxwox14tJvYCPJRWylzOgcw999C/iMBxUPiAk9OGeOBHQbnLojtMMZdKG82ggJUMESGTD80FuzmdTpFSaKrRpKc0KfZUiiEwgfAu5EhQdjclIgCqw369HCGaHAwHvX6/3+v3+4Nqdemeu++u1+uD3qCy0jnAO7zWRxTFaZYWisUkSb78xBN7e3uNer1WrzXq9Vr1ZYh5Bcx94/iLHwcDKMEWSZKEzrFstYuekmxmbJGZ+1qtFrVKK5XKxsYGZEkcxysrK4qysQAIKAC8cneytWBZZdKRDg9oBdnJuogODGhSqVTIQIenga4jSmLuFo5OyMxwJcSLBx6FlQzfIvb9BOPMM0lhaApeqqHg3ivs2s0TEnPPRKatwH/E+1hohatSr80Tu78dGH3i1ahBfqTjKCZFagKzLZpUGhnyuNvtogHNvZAubw3MV/ZCO3woHBm7nzZXE9+FQwAAIABJREFUjC/1f5EOAUqg6Lnh5CBze+R9l73gGzN+2D5wybVajdriQhWKrGkBEwPK7QERWM4XFxdZPxIvDj4LjDlp3tTV/WT+lty9iNh35PrXqRdZzvMc4MVtlN3DvODZY8XA8Z62YhlGPlFyoz7AQdEdrHJXW74aBiVziaEYI8WOi0Gxk6/Ldypqr1Av46her/MsxHax+hqNRljVwDCJNFL+B8ARghMHQXaGwA6oTZ6Rr2nzw6tU6UIoJcYLD6IKT3rdDMDEK7+bK5V5g+BFKUdzV1uiCgWawJWyaVH2GNgR6J+5cYGkulEUYdKpe5h5UVAmEyQNdC0iGNoVEDVW5GHqpvo8EbCbJB7GReYFaWgQqLjt7e3M9bjhLCcMTYfnpYg6ZQ9cKBT6/T4h+LkblE6nU+4z8kR7kLF6CNhUn+AbMHHrcrAa+/DcTaDkUp67WEWKFP6pOUS7aymgeCIG2nQ6hdk191sNad3cda5MrdDJDCL+Pw2MkGDB2QnoLWiYX3WIvU6O6XT6wosv9vv93qA/6A+qS9VGvV5v1I8du7nVapvZkcOHz188f3j98KuJbFynR6EQ7w33bjt2zMzuvOOOne3tXr9/4dyFZ55+djgc1OuNer1Wr9eP3XJLMfDzv3F8E4+DAZTI7OAV+AQ+DLqOrWriLjbLy8uHDh0Ck7GKHDly5IknnpAqjsm36KUOs8DzQujBghoJisuMvewYbtjKXbBLnefEhrJm8CuQJbMtYRTmSjNjj06wTJm89Xp9Y2Njd3cXChYCkl07pJSZMfeJ0QEwpZ6/ogocFmTXNhoNpuOx11sru0+Ndv+EjQgOQqYWPPNXfAbJzrBKJOKEe31YN8yf517AxgJf95JXeDMPBJtbTqKIl86StQpgobRrifAALkzuiZuPgnuY+rV6iX4AYYOxqDNeCUqMRF4y2BzgCmjSHxYXFymFAuamF5FDgHeSAo4iz7h5LWOSh4r5pk24Fq0KpzL1usOJq3LZivAUcH7cNg3IBkYRXqBGpVJhmOSvQlwvMJ17JSEenzcoMkayYx2MvpI71EDpqegLwLHkpkvgwst2CwKgnIQOKSI/yzIEkfKyEasUeTlWHplQtQLZaEzVLGBTC4hJ80B/7i5XbEqhx3IvamBmzWaTOEm5XIYA5t5WVla2trY4iQwXl5eXu90uAVy2ajhFgE5oq06nU/YaThqhjG72VGDQmZfgiqIISh4AXXJrJ+A+7UmoXRswPsSsl7s1T9hSw/K+LrNJZ4zkXricaYTtEy5pFNBi6mB3TU9mSDIQmJnN6yRhsD/3eld0JF4r11IQg+flr3wNghyToyzLms2mwia8QfaWkMp5UDUg96wdQCHVATChE5XLN0Hze3t7zWZzPB73+30k7NqZV9yHNWw3kqVEgl51iL1OjtF4PJ1OV1dX77j9TbV6LXpFjt2JE3f9yr/4Fw89+ODo6/7+DXEUiqUvPf7Y7bfdbmblUmltbW1tbY0/5Wb9fq/fH/T7/fFkfANQXqPjYAAlE3poU7K8vNxqtUidVrgZJLS0tNRoNEjRyDzJGolk7vV2xUuFODJ3JzxNMcxWSkcFrxQKhVarxcJvrtziNhQO1jQKaMvzHGU65ym6kcfUzeeAHa1Wi5WbDHESXMydfsGanU6nUqlsb2+zKhfcPNLMBMI4G/h1bW0NNWHRzaJpSa0ZLE7ENFdXVzHEYRZeWlpKAl+bglsf554s0mw2KTLJgwOAEHvRnrAsYRRVZcqgVdTOcy+gnLkoHr0BokM4G86scHPklkAhG8dCC4hBhSaVldbpLMt6vR5zROSW4JCXWomBHawuIMLI867MLPOsfy5nbnqa57k2LeY+4UUv9wx0QIhJKJmuCLjnvZuvjlMvUzkcDiGYFTxVtJcFjGKbWucK7qRNy0duH0i6/VUPGs2c7AwTbM39YuJX5PdAQ868+rmEhgQNFhYWoCdnsxmmMGHgGFZeuhG80NXxcmevGW76PHKTByVg0cmRQGjTZWZpmpLoJoWlFMA8b+S5NRLs8kMuYe6enbuTFENmdXWVqDFR+4sXL+IpS/YPdkUCZLlz4XJGhPukj2kQmRmcIgMnc/Mp5i7yJBiVYPqS14vXaIq8LpH68NLSEhAZVrXgtalguKFm2SrQYUQH5m7sCoArelFEUCy/YujxUNqc814YTeoh2qsIgdH+iRtq0rU0z4iMpDj7cDhkp8HGrFwus6cyj8trayHSIXFPNNx8CFiTV1RwO3q2asiyzTe6jB3WAro0XXdnZ4d9kXY4YfSD9/5qhtjr4WjU640TJy77MDcTrqzX68VCYTQaFwrJfH49hfJf/VEsJp/8vU//je//Pn2iFojMGvVGo944qHv7FjkOzDaIsa1PIANQSeauZ2JDXCqVqtVqq9XqdDqKQTALMxdAkwDpJCuUqE5oaTqdElbjDEDJMNuATSrrEzM+Kw2FepmaqVVDWATaxsxE2sETJJ5XxIWAF8zgaMtyV6eJReD80DCImTgDpAvxGp0Z2oN5PPdgnxRgtAmrexRFtVptY2ODBSN2vbxugHtmecY9bnl5+fDhw0oNoRlBS2FULoxQi3lSXDs00ovdWNsCCVelUoGNI8ldEjRJXRV3M7MoirALlS2cwFmxWKzX6xjvge1YXJWGQsOyPsm1R2qqqSfyQ29I5gjRG3lRRHhE1jyFp3NXTehaqVfv4BO63/Lycu4B1pknSoNQAeICWKLtC24pVfSa0XRLCxSN4mOueojyoW2LbtgJL6VA52UJrdxJ4gUAC4UCmg3KC1WrVagmHgGaiqHKKJt7QXkeQQm2IiPNWVL6udisyFPap24PSTejKwJEIjcbUngdlLy/v88owyiKqxAfV2kfsoCBgMQ0Iy+2xJtSvFvEJzngy8vLgOBarcb+gdlGEVJaNYoiWgN/9YJXXQf/mQeC0Y/S5XgjKg2vsLhU0ZwkDSrOIytn8qEeGKOGjmeePW2uSNEOVrsXfgtZiH5DewwmNAVYYhdFFAIDec7McKNykiLLIHJ6LHZCRH6YCujGYEqpL/b29jY3N8mUx5WWF5S5GocDjhNpEO+IjRmdjaGRexxfv4pcAsHlyBIjASsNXGCLXlgV3l1Ckccff/y+++57NQPtdXLked7tbm5sdrtbW7ffdvvRI+v60913nfjqyWeP33nXfP4GpCkLhWQ0mmR51mo29eGZM2dOnTrV6XQ6y52Vlc4ridsbxzf3ODBjcyZcPkk8y2E+n29tbS0sLGDbwfrHxM3iwff5RLBALIhqtvK5BUVa517fjHVFakg+RyFEnE4gj2iImQEESY+NXB6kUKCZEZIOKR/WOYhDrkt0G684LZyEiZnNWfP4IfAlc1vv2GXvwmrhdWkTadtpDRaYM2fOrK6uki+ZuieLZP69Xg9+FCIn9syY2L2du93u3t7exsaGam+wqIQEcOwmO1EgMzAzVqnYfZSyLGu1WuYSQIgoHpNMBa2gNLsoSWhp2mcwGLAqR1GEt464Wy4HJ0ouy8zrD0m2yGKP2xSB1LIb6bPq8NQ8IHyMeDgBvsStzsW7TL3UexJUpDQnJvmV3BBZ+fjQ3CRcGwNW3J2dndgrDLG8Je42EMb1XiV9wqXNFW/ICfI8pwViz+297Fd0xbKXDABYKxlFdYYQnhL8xXEdXUSohqQB4Z9gc+kzDAHxcGYGsw6RRo+CfgOEgaTpqDs7OyRKw5hyCVhMwAGcn5TQUotaUGXHvHoCN4zCcu7lfNQyBEkgYnl9mZfLkvGTeU0mYuhKzCLGak6O8gVeKBwzLclJ6N40NS/LvDZP0Z0K2Jq22+16vR7iyLHX8sk9+UwCnsSThHQnNFExKHsTboDDL+R53u/36/W6uQC61+upB+ZBWXYGCwOt5InS7MHYxl8G8gCy2g8nLuNmW2tuHareGx5sxsIKXtI7Mn5Bh4BgxiD1LxiqtBUTncZR6oXXuYTA93UU9Taz0y+8+KXHv9TprKyudO675x6mXI40ze6558Rv//tP3nvPvZ5q9YY6CsXis888e8+lNO1NR48uLS11u92Tz5/8kz995K1vecvNN998UHf4rXAcAKBEuF0uly9cuMAniRcdUQ0PmB4mtUajge259sej0Wg0GqFdm7qjSrFYJHsDaY5cylmitEIAJQnUsqopvZFtK8k3qVfEUWoqZ0OACAuSeuUJ5la4sdlsJvV97vUYQ1cgbgCKiOBLaKUBOQFAYaqdusEvkEV/kqIUZAxYlEqPaZSriP/Tprzgrt1gFIJEhUIBUA5eh6NC7L+zs0OOzszzc4klYQX3dd8yTw0phXUwSbUKa3KHtPni4iLZRXFQZ0VKysgT6mGSwKYKC7IWko078urYsRf2ZcmEeYJvQ5TGas35QxQIYKLB526GB72NyIHsK1pAgk7xZOKTIncRkrqLjjTz0kH8UF9T3Dby/CoehCzaRqMBROZX6ldXHWsKGkbuq8/5JX4IbyM8iA/yE8KF8/lcIzeOY2XVcKubm5vsCsAicEvKtLCgKNHEXVeTJKFjMBwkQRG4AeRJgUejAZ5A4WUv15m7nzZdGtAvRi33lG2i55ErVtns8Svx60Ai4I5aA84VN0SR/SWvw640lNgl1yBChmQcqJBJUQIFIo1gNqOVAFKU5tI5wWf0f2ClZIWtVuv8+fPnz59nn5O6p0HZi+iYGU/BF7jhwWBAV0Q9IoKWFi54MQL20uC5qWfCRZ4qBA4WHOTVwDJWq1VdywLyz3x7z+sQS8qLztyfASQKB8yIEIUf9k++PxwO6RuiAMyxOzsB5mTeEaRAlmUk8DGTpJ6lR68TfXtZ+tH1chxaWfnohz8cfrLZ3Tx37vy5c+cefu971w6tXdy4mM7TOImzN5x7TrFQ/A+f+czD733v/v7+yedOrq+vd5Y7ZtZutdqt1p133GFmo/03IDX7ujoOJuQNNaV/5l6dj2WMPTdJeaiv4Mb0kxdeeEEm26VSSZ4XkYd6pQljaoAMy7IM6gviKvfi3awu0mWaGSufoCHrFup+VpS5e8WxkQWzAjVmsxlSIQuSmqFIQwdmBTc11ZI0oC1yiEsIwBEpEwtIyEzIm8dkT1/woi/ACG6AeDGzOahdxAPiMJbATqdDiBC9/NbWFqsyyIZ7y9zNR5ndIWTnnNA8GCbzOLBZrI5CtNAJbAPYTnC3KjcXu2U6NJXSVEGQimjzHRD53D161LtYC1kjAWdTt7kmV8lcFMFqBFAGRQFkzTMYcs+4B2kpqsvLVVqPmZXcyVzsr94IDyISbhqUXam4FykaWRZykIeEgxBjr0ZXzmYjd6kxr4zOPBgMVldXM8+auuyHqfs0gYHYoky8YAnvGvuYcrlMhgcQvFarIZAAVyGTYCMB8qPR6P9UU4TplCED9wnRbm5mRJtPvOR37Fk7AGtFG0qlEr42kbvVMuKSIKGKIDURbaUEgXvAMZkn27HtNC8BwI4ClpdEvXK5HArB9YpxKdKYUmPqQ/VMJc2QLJ+70xn8q5nhL8aLM7NOp6NBwZQyn8/JLhd4zVyrCtLSZkmEbuQ+oLxckcRgKRjH2B3Z0H6E4sLcXbFoLuYlph0kAVKGcF1eNHtppibl7uSuR4ILLLtfpiZ8en7uBasskG73+306jyJFYXCAiUJxf8IRibt5RG71Va1WGbOaxumiBa9Ye9Uh9ro6FhZfdh/b3OyePXfu3PlzjXpjff3w8ePHy6WSmd1z4u7TL75w05Gjk/R68my/6pHEyTybv/jSmSPr63meV6v1p59+tj/4syPr6+vr6yudFb6m9rlxXKPjYBhKKpVpj25eci1yf1r+Jw0OsSn9fn9ra4tKORr5RJESL2fCkgAonLtvtiZcxe9Kbj24sLCgIhyYDTGBMrea8wQzL1SoLA0zY4UGBChatLi4uL29TRCNr2lRabfbaZpeuHBBE7TCgltbW5PJhHWFmZc649ruq2SccoZyNxwm7IgDCCQoKzehqKWlJXJat7a2gGtmliQJQV4zoxEIDGXup72zs7O9vc0TATuAQTyskqOVLKxnDDG9eTgJGAptkHhaDCs9QJwFgCihXDN1P5xqOp3W63VAAPFrrUPQFQophsu2mDBgDRCZfgIKNzPwrqBS7gpaGCnxYRJOsJgBKNmfQNsofMxrioIka61VEy8NIqVvuH/QT+jGg8GAtVOKVTrwq2EoycMtFAo7OzuKYhPAJc0iiiIQQPiryK37Sl4tOvaMY/OkE5Ze+hK6CB6QxgdvTbzSTMErX8s0kaZTLgVdiOR6wESxWIQRTD39WdCfQTr3ZDIRYJkXmJl5URmwjlJPGCPgUfGC6iHKISPEAZ7jbpkctre3qUxjgcIkbLcQmpM3U/Iy7gsLCxrL8oSCqqRVhQXhjyeTCd1S8m721SKMuZ9+v88Ax8JdzRu5QoNtubq6AhSi/aTqyT3fiCuqs0VRxJgCxMtnN3cHH7YZ4DPugdeaeeUhNopl943KPUOcq8znc0opmnuu0bBSXorXzD1BiumaTgtAJJbFyOKFTt29CyFB/Ao3JZQJiETZNNLNoJN3dnZIpX/lXuv1fOzv7z/z1a+eO3eu2WwcWV8/cdfxy5TW99179+c/94Xbjt06+fMXAYrjpFQuRVGcFAp5nmdpank+Gu1/827/Gz8KpcILz59+6MFvN7Moim679dhttx6bTmdnz5179tmTf/bY59YPr6+vH15dWTnoO32DHweWxVYulwkum3tHM3SBLKxJBD0tEM2MRqMzZ85sbW2lQeUJbXbhRbTNZQYRHBF/oMwbM1NhDH6L4kdGg9qOwwwJqWgdIvzX7/ezSx2hVbZ7d3eXSolskZmh0jRtNpvMa2ma9nq9paWler0upoH1GPgC5Zl6qjUglQSmklsVMnfLt6hSqUynU/It4M/ICWByz102BOvJ2sPyIOSd5/lwOKQuObMzLAJLC3M9U7YoxtlsJtug8EULz5HNAJ0MONNylXrGSex1OHJnf7muOdEIAs7znKQBItfm9CG2eXNPo+FPkWdzx65ABTLyOrT+oRaANqY1ZHCdB0ovgpV8WKlUWq0WiNCcZgbDsRshcAZ1ij+RvikWU/kZIQGs74DC6/U6RBT3vL+/n3296tuXHXr78GSolgHHtDwCODODtJYeN89z3iYIYO7V8JSSxQuN43h5eZmo9HA4RIjC6h5FEaVf4kvN0iPXSkoYyv6HV2MeITWzXq8nkRw9jeEfu3EsjUDLWCDCY4emrGegUpiQAWA1MylezFXRtEa5XMbNh+4B/mPEoTrN3bJKOSvmyR/cPJJu5iIIb6Yp2NOyO91CFmobxjsKB446A9clmgwmQzyQZRnDnBgIw4FZJXElK4Bew1bTBaAtDqyF6B7MumLypp49DWcfu7Eluy/4V4I2dHIupCRxmpG9GeMiiqK9vT2EKHEcY1agLQHTFP2TPgaNTZtgqMTsBEHOJgGVTrVa3djY4Ju8i9FohB0Sb5aeIDXwfD4fDofLy8sjLxGpP3U6HRV2uvIoe10d27s77WbznhMnwvDFZDwpV16eDG+55ZZP/f7vb25tNWu1ySuqrV7hKFXKcVJ46qmnNjYubm92S5Xy8srq+tr6m+64fX8wmL+iztZreURxXC6V/vdf/KWf/cTPhJ+XSsVbj91y67FbptPpufPnTp48ORwMb7vt1oO6z2+F48AAZR54EZsn9KGsZ1FHCaTJd2VlJUmS3d3dXq+3tbUFhoMuytxLqOClBUXewDdo9qffp+6mFnmaC+Agcp9C5hFmbS0nfA3WJHdjC4giIlxQqhCfIkWiIFUlc/9LlmTuvNfrMSOTNos4bDqdku+pUB0IjASC4XAI+wIOiAOBeeT1BqE/QUua/SVXVww38wRbiAeaEUMNqhsD7GjMyOVWBfdyR/2pHAIcUspun6RfTd00ESNAifNCQJy78/ZsNmNRGXu5cLCX5AG8dHhNIrmpl+ZL3E4opPqioFanVFZi3YjW8d4BQOBmc9om5DbMGQ6Ww7LXmhcyRtGF4x03E7tyVxQmWwvF6ejzkN90VD0F4AwQyRdir6xDUvCVh1gWZIGUvIBN7sJZuflgKn7Zbxe8Mk0WuLpCMkXumcqomc/nL774oupioxIhfx+lJjuE2GvrAVmIFE+9MAlAhx0RwwfIaO7hD9eo22NLAFgnrl1wUx5zvpNOpS1ElmVF9xfkvWeub2ZfJFY197ovhFDYqCAhZesrMg9UZ76XwBshnN+0uWLIcM+x54KISrSgNE44Q5pvg9FIVKvVWq3Ge2Q3dRnPJFIfkUziGYEM+cTdJ8KhpKmPt4MQmVcmyTKPDPoPt4uZe6MyC+EMr/IHTKdIXOBWNTA1CsyLGKmPpe70xOaEuUv+XxZQjPK6l0/nZW2o6rjSYmZeZoJ9RZ7nqH3Yq8j4CRY5ClzWr5fj6PqR8J+nT7/w/Aunjt/55vXDh/XhBz/wgX/2K7/yMx//n149oCxXFl46e/Y//MGnm43m4uLikaNH52k66PUev3jxK195/P3v/0BuUTo/sOylhYXKn/7ZYw8//N5iELQ5c+bsPE2P3XKzmZVKpWO3HDt2y7EQctw4rsVxMIASVVn4dvv9fqfTYXk+fPhw5AX0siw7dOgQW9vpdEoBwMh9amK3/om9phbKs8gzeGJX4OXut8ecwg2k7sQRexaLNHlAw6I7/bKbBy4Ug0ILsKQFL7sMc2PuNAlPMHPnM4J68B/mxanLbu5NHJB/Yp+Rur1c7nULl5eXJ5PJzs6OOFQAIvB3d3c3TBkGlhU8+5h2hh6IPE+ClRh3dDgYM5vP57u7u9vb2xStjt30O/J8eaAbUjlOpTWDFmbFkmIMqoNgFrO5lKaASPgPbrVYLMqqBkhBQxEOo1fs7++fOXMGxW3qid6hvl6rtXjKPKjDRoPTDYBEBU94Ql+x4OUcoVgizyQA/IHpC4UCPupAFrrf3NNK6FEgXfiV3NO2WJthWHVv6tKwyxZYinItybl4QGK7Vr6SjDJkeTO3jwFXkZ3A1+iN/X5/Giww+qvSO7jo8vIyoCTPcwYsPUSbDZxipu5fk3s6lAUOhZFbJfC8QGT+h0A86FNhU26bwMJ4PCYWOXevQd5m5jVIuaWi+0LwE/rbYDCQRWjm9f3MMzxAt+IFsSWXWSahc/y3tXMjmFt070Y2KjTjaDS6cOHCkSNHeHeMCHYvQuq5J5/FgXuUxin/A4IHVTMjIblJPbmelpGShKEqUx7zAlEwjozQmbu9FgPjKspecz+pV7w0d3bUK4sDUWYcGIRJr6mRyLxhZoTjL8NntBgyBiQ9mmZ5HUUvwk6TymEeaUoURfK3Jy7Bdc3JTnPi4DJQmCTJeDw+dOgQAR/6W6VSQTzDTyRVz7xk+fV1pGn6xJNPnjp16pZjt7zt2+6vN+r602Q6PbS6ura2dur5Fw6vr03GVw98L1Zrzz138jOf+cw999xdLlfQpplZu92KLepub/+rf/Wr3/u931coJJODyB5P4iSO4//r//5//u7PfmIynZY9xL+yuvLUU0/+28e/dNuxY8duvbVWrVrQN24c1+g4AEB55MiRbrdbCEoDm9loNCILr91u514MLfZSrWJKWF/jOCbhFCKESZCwBbgt3KdK2gXrqVk1yzKSYKh+If0TkyloTDxl5gkfUzfWZvrmQGpJKK3b7WaBLTlitcwzgfr9fhRFCNrgb4ru3GZe2mE+ny969WfmWR5qOp22Wi0yGAh1JUnSaDSEzmduZCjqK/O8RfF2TNmSt0OLKgNm7umlhP/ITSGMK6aKxZWHJVjWarUU/yKbEmyKwMuCmjSIO4m0km0K5EXeoCWWIDg4AFaMd0dpysh9Iudu0klwdupFn2k6gL6uLmIp9zoZLP/AAqUeE4CGXdPri1wmwb5FKIcemHkCljYM8NnI4MDoEGMEnQF2SaDNTdwoWwwTWBA8ap5Fa56+FkURWLaxdBWNuZb2xEueaKNlnsMbucpC+gELAKVkZGKSUvefYo3f3t7e3t6mPXkjksyaA0o2ZqpqE/nBPxEminKm8zM0uE9eqHAYM0DqdkJ5njOEYfIidy+3S6uTg+Njl0/Q9zKv9E28WBDTnEWjf0Ii8tRAMaSKaqvMqwcpJMLUhHkqT0Q7mHP2tBI8cRRox8l5YvfCvZnb9NIzy+4PmntCoTAT3Z4oCr0uz3PUigsLC7w++gC4f29vr9FoMKbo/7GXC+KETBQqPmnO7JbcDJzem7op7NSLRipLXdNO7uUcecXIJBBVE+iPvKLEgpc1T5IEWVTmjlo6Ib3CfKMoM7U4jrHLiC+txEhxo8hDE+E5QeTm7rb0JW7sGxAavh6O3d5utVr9yEc+EjLe/UH/qaefPby2dvNNRz/0gQ/8wv/2j37hH/78dDK5MglbKpcvXrz4R3/82Qfuvz9O4iiK4iiKojiyCMfw1c5Kdan667/+az/wA39j6kD8tTwqi5Xf/b1Pf+gD7zezCxcuXNzYuOv4m2vVWrlU+ra3fNtb7nvL86dPP/roow88cH+z0bzq2W4cf8HjAAAlMK54qTNZqHhjbpIKBKl+6JLDlJd41q0gSJ7nk8lkd3c3dtcYpP1jr0UGezHxGiSEXTibiv8C1MpudUkYCKjBtSDJ6vU6gRhFFUVU8HRmBi5Rtm/qBXjk08FyxUTMwypyjVcw8yn8hHbz7XZbVAGZs6nnb7LOgZWzLKvX6+ByLqHgIACl2Wyurq6SGAs/h/EkwBf0A60oPjhz0x/UaYlnQYmZSJKEvFSxv7nnz7LuKhAsARnvSGukueUQ4Ez8qwC9pKXzoEQ4jYAwl85wGbtMjIyVhvSdhYUFSRhlFAKqA+yWvJIHz849o0bgtYKtOT9vR697Npu12+1Go1H2auxJklCtnpeohAPeO52B3F5eEKIOOpLoYXOW6NVsteH56DkQLUpkXlxc3N3d3dnZWV1dxRl+dqnfXu5VVRCZseLyBtkPQE8y0Iie3G4mAAAgAElEQVSEov1g9IXrSuzlBNkLAW0xh6PTCuWD0XlT7EkAwebp2KRA1Wo1iCW2l2mattttBQR4C9x/4gpsOl6n04F0VAA09wo9aZrC7iuELYg/d4+I3MXEBTcCi90hUu8oCrJ8IJtR+1XcMow2Ye8Hxc5mtVwuQ16Gnrhmtra2puDDZDLp9/vIdjc3N+nnTB1MkvSxXq8HKc4dEonm5CG8BuByOd4drYHiE/4v94rhjGsLQvOiMDkPQwyMToCFhPGpu7SKw468lhVdTgVpYJHF3YrV5ipEroV6zQxmMfcik/wEcppwOViZ5qX/r62tcemtrS26PVM9XC/PJW0AffWqo+x1eCy3l5fby/rnYDh46ulnhoPhXcfvPHx43cyqS0tve9sDj3/5K3e9+Y7R6Eq0Yqlc+dSnfu/EXcfjJE7iOIriOIotDlyccluqLh46tPr7v//pd7/r3YN+71o+2eVHsViYTmd/+Jk//Ikf+zEzu+Xmm4uFwqOPPlav1+46fhxbjNtvvfX2W2+dXVd+otfvcTAhbya+cNVJXKE/nU5h3SIv+cW6ztyh1Xo2m6HmZjGju/C5ucyOYBN7U2YW5D6z2Ww4HJa9rA50SOolHLSb51qDwYBQV+xOudB1nBzuAZy6sLBAigCeO2YGuQV21NwEsAP5URlIW3nNpCxmsJ4sRcXAQAflIneu0BLxGloMzGpmi4uLjUYDwA0oxGR4ZWXFzJaXl9mOx278DlO7v7+PgJK1QcHBKCjXoX+a8z3iVmle0Ix59HDmfsLc2IJXgoZtNTdpL7klspmlgY8SeJTM2e3tbShDZYeYi2VFNmRuCa47tMBrCa2e4qGpe45KnZm70xAhTpoIyjMKCoJz0blnaoMheIkSnE2n01qtBlIEINLCPCYBU3gjILXoHLAggAYcE+YHCGte+cjcrjJ3tyM0waya5oo06OTLfshLgS6FpavVaqRfaHjWajUeU6YNoMBKpUJIka2RssGA8lwCBaeEs+K0ACjSz/X7fd6+YgjaSwAEyR8CDorA5jVRxGU2m9XrddoB/Br6QDEe4UqZCgCLiO3AUiAh5DRclFFJz2dQqzE5Gy8u9gPswmmlbmRmQ74MBRimFXc6HWaker0OQARBdrtdc4vTOCgMS84Q8koQuTQD5tY89AH+q/vniQB2cuYi9pK5qwAtzA1Iqh4O/4J7F3DzTMXskZgw7dL8SD6k9RL3ghU7YK61EMHJ6KbZmUw0bSLdjtzAder53ZFXLTKzarU6Go329/dp1VqtJjIbQMlta2OjSUM2HdfjMRwOn3r66X5/cNfxN6+vr4d/+uD73//jP/lT/+SX/nF8qfYsPEql0sWNjThJFhcXkjiO4ySKoySKoyh+uaBhbnmUZbkdWj30+ONfLrzmBbKLpeK/+Te//sH3f0CfrK+vr6+vnz137pFHH2026sePH68uVc2rrd44rvVxYKUX7VJBAzGdhYUFDLTZ2q6srBClkilPmG3DxLe3t1etVnHlmLjhNoc8U0ruQZ17YkTm3sJaxbnEcDhkIz4YDCKXtRGQRfTGpDn3woBMsszOZia3Eb4GJE28yi3H2CuGZ56JotlWeUUWFE8TsGBJA2GzBVfsFcKDvTgTcafTkcCLKdicsQD3mMeYJpMJ6BasEEXR1tYWwW4WocjFT7R5MaiNXnGndBoQTJm4g6OieMoONi8RyeROwWjwROqZUopjsrpkbsqdpil+5srY5Z551+b8mbmoTsIGnoL3COxYWFjY2dlRRRPzFFeICpAWfSn3CuPzwKaHjsFjQkzW63WuDr4hf4K0iWazWa/XSdeA+mUxBkIpTsoOJ/c6RuDFOCjdYUGwLw/KHV35YOUGCQGvRappY9NoNPr9fngh2pDz01VA5+gXYc0ZsMCO/f19MkUswO66ganXbSclSOCVIHvkYkS9a0FqtBYEmsNoBoOXNjczqkFKFhJ5YUa2DdoswVcRXpA/EdtOc6Hhy8pUhz4cRXeMYgxK4Muzq18pJKItLlu73LPNxuMx9joTL3MQwkFaDFUA0xQtDxTG2knBByUPmVm1WgWsSxtN0HzuRecVC8rd9pWpgC7E9MUOP3MDBOIe6ma8FG1CuBzhY5panZOzwRGCMlO3WwfIMinxjkpeE4vzFL0geOIVU9n/Z+55Tj8pl8uKQVmgkkcKzNgpBEYNE3ds7XQ6jUaDPeHKysrOzo72WshR6F10UfQqxEmuOspeh8d4PP7KV57Y7ffuOn7829+2bmZ5nu/s7raD2jl//Xu+5zd+47c++tc+Muj1v+5JkkLx4oXzteoSaJLVII6SKIkii3LLLbM8jyLL41JkTsdcNpNcu2NhoXL+3IX9/dE9d19exPzI+vqR9fUzZ8898sijzWbj3rvvUZ77jeOaHgegUe33+0yOYc9TWRRmEwgDYBCFvPka+JIwMf8lrgSVQkgUHw2AI1MwUxhbUi4tsRfRwOl02uv1kKUz3QNHcKmYX2qUzWmx0lQ9Hm6Y5MqSVxhnMgW5ghsQ/4EdEUSiuGL6k1Ke849Go16vx+pLTKdUKpE+zGzO7QFNyLlWBRQWP57XzACa9Xq93W7DDJlXMy+4aTMVcXZ2dqRR02rBeqCQWeyFsJVdOxwO5272DgPabrfNdfGKD5obf1Tcp9oC18PYHUnywH1waWmJzNZ6vc4qy3oJZCcAPfXC05G7O5Xc2AhyBdwp/hUmFf5YvDhtSCcpuFe2OO/cC8DM3e2Ih5IYgCYqlUrYlLCQ04WIHlar1U6ns7q62mq1Wq1WvV5nB0UvEiGN1hNNsGyYiL9PvFhO5qUIrzzQcs92kngDdhZRHXhxMpmQen9ZSIgOoM0D4lc6J8pCeVRFXv4uekVCCW0ih1eQwebmJshyb28P1WapVKoGknmGDFFaRihvzcyGwyH/I9YN4YTMGs3te5hkQF1s8wCv7Ci4H5GI/ERShNidgNTy7PoEBJlzEM9A2onyNN8ZNhoN6FWGp+h5aR50G7lbRpCuh6wZGG3u7TUYDIhxw9kj1AbrhA1iZqo1QGZ65EYWjC/ISz0dHUyWOmoQhicnZJhXvBA5CtrMBbLMYAWvWKv2F/42Mw2ZmVccDbsKQXkYXHaJoHm2arFLgHK3QB8Oh4SwwMcieml285IQSnXSUfbqCez6Wq2W5l5tLNmTM2ei07jyEHvdHs989atr62vf/fDDR9bXzez550/9u9/8zXLpElD1tgfuH+4N/+xPH12qfn0WNk7izW63Xq9HURzFEWgyTuJCXEjiJIni6GvlGuJGo3H+/Pniq9jlflOOcqk0mU5/+Z/+n9/zn/2n586d0+cvvnTm+VOn+f+jR9a/+30Pr62tPfPVZ1+bu7pxHAxDWSqVxuOxNoVMxHO3pmMGYSuPwFGc/Gw2q1arLIFMW2ZGVKvVahFoK3k6dggozTfo5ggm8qAnMJT9N1r1mXtlz90gEFJQmImpE+CFAgmJDxPizOsTmhlzH5CXaFHmKaUwDazcmmFhPra3t82lhCz/TPGpp3ZqxlcSTBzUDjGPdaIYk29iFEWtVks0KlUBc5co7XsJcvP0xixIEAZLFbw4deR6IwG4yH34wOtRFFWrVaFzuJ/Uq7cJtLHGx17xjEbI3awHNpGVIPKSjzKLodsA5WHd+v2+UisAiEBqcDyXUIRUeq/YpXu8Kbpi7uX4JMfEyEnOPorE8Sq5JfR22mOwyQHyAuwoJLOzswPvhWlUyY/IY9+55xGrv/Ei0ImKf73qQCt6VWtOpXC8yM7t7e3YJRPhD0W4Kvuq4DYI4J6VlRXl4QK5lPEj1i1yM4EsUCvSLPtewDD1AvexyyEmXp+QZoRll4VhnufQVLnrknWT4v7ZaiKNFYIBfBQKBapyi57PgpT8xE0GYCKTJCEVaeq1xelIuRduofP3+31wba/Xa7fbrVYL/bGSS4pu0s4PdXsMn9w9GVA0gmk0ITB1DIdDQv/0SYAgII+9R+5u4Wy3eL8QkKBJUuKgWi2QHZPEwxwis/GwD9AbRSFrc8h2RekvzBLKYWcAQgxrAs+CSvTmGwzFuKMo6vf7PBQ3CVgXmoRuN6dIuR/VBNdpocwT94fi3rhPKc4nk0mn06H9WUFAyaERWx4YkF13x1vuvZf/2dre+tKXHu+sdMKSjIPh8MyZM3cdP/6RD33oV/75P18/cuTQ6sorxZR5ljUbje7m5sug0eIoejkX55XH3v5ep9OZvyaGlEmhUCwVf/xjP/3xn/4pMysWC5/69Kcfeuih6tLSzTcdffzLj//+H/zBW+57S7vdMrOjR44cPXLkaqe8cXxzjgNgKOv1eqPRCAN2N910E3EZ2B0zY5E2s/l8fvLkya2tLTM7ffr0888/z5wF2gAXEk9k2V5YWCCuocmFWWM8Hu/s7ACJxIQJksI68OWZe8fMvaYZ6E2rDsgSkAH3wNJFyI+/VqtVnFkGg8HOzs7u7i6aIeZ3JiloM4CLJlYaQY7u8C44BYIdt7a2uNBwONzc3IyiCJZLKQhlr+hYr9dpz2lQ4LvT6XQ6HabR7e3tU6dOnTx58oUXXuj1ejwLS2y4ggJMmZGF7DkhUaHhcKgf0kRouVhWo6AonA6K700CDz/Cr9wDJCI3OfMEW7I6xuOxMqlxBgAhASakVqRjsEACAWlhseAQ1eKiAAqs3Cw/oAHksNSAlgCAM9NJgKHyIoBrAQeLD4MF7Ha7KFPJLmK1ZumVlCJzcx9yTfRaYTFFqPBEr2bunnlxbcA0KzF4ZTQa9ft9qOvpKxzpAO6StKLzo2E3NzfZfc3n8xdeeIF7gygCR5JvIQY6cRPyPNBMa53mT3SVsZc5ID+avr26ugqgGY1G1WoV0ki1DOCigDJ0NnqjECegJ3fpQrfbZX+oZCluld/yIjQR5S7uZICbl7JkTgAUMvyBxdPpdG9v7/z584wOODNgDX8FyoNQiTLX6/XYixyWSqWVlRVCEObw6MKFCxsbG2GGPls1JiJzFwtzPU/k1VbNrNfrafvHzCY6U5VUhXRJ/lvwmls8IyS6HF4Jvpe8cBcULLEauoE2OTACaZpubW3lnhCp5jWP8/AnpfdJn5N6RR9OQuiAbgbym7k3LZGfgvtqQccyTkmtIyADMRm7uQFKU6CzVLPhpsjcYS3stNfdMZ/Pn3zy6be97W333XOvPjz53HOPPvrobbfdxj//5g/+4D/6P35xls5fKaGZz+eH1tb29vejOIo9rdtyy/MszwPZZWS55ePxuNVuz6997ksUxUtLCz/387/wQ//1f8UoXllZffDBBx955JHnnnvOzO67977777//K09+5fNf+Py1vpkbx2XHAQBKBNHQZmbW6XTQBTJL5q5zNxdLDQaDjY0Nqtay3Yw8qiX+MvI4C4jEfMVihS55Mi/Ig0kt9txw0IxoIcFKGBRtr1k8gDusrCwzyjJhhy02olgsKjubq8zcGRFOqNlspmkKuUV6CsARRZrSfcQq7e3t9ft9gJq4jZJbUYI7IVcyr2HYaDRE1oLJWCxjd2Pp9/sXL148d+7c1ItQiy1gmVFAULnYLBU0F6sg2ItaKawrtKd4KU6lDpDnOetxqVSCEuCphSl5cEpQdrtdeEe9a4AO1MVsNmPV5EVwP8BB8kUUes7dI33udZgEmvX6RDiJp6TajUgXPUIYbQfh8TisXsVikUqJrIUgTjBiISizLlBFBwYfKEmCxVXfVOwP5gzIddWxNgsMGgFS4/H4ueeeO336NLlNjI7LFOsU6gS9MazEfCuOOXNPAIpzzufznZ2d1H2ORDmjQmNEy0xeD84QI/GLjVbsgmApZWl/dg4qnC1oxS2BvKX9KBQKACZRa+bxd34LKAnJJ86Qu8k/bc42FYfCOLAwkzJHgldukrGWuf7Sglwx5hOEgOY5K+x/uKV2uy1VzOrq6svOO7ltbm7yohVYF3XKnmru9q7AJohD7p85IQvKE3B18qOx11F/XvSa4yL81IBkvZgZkI6ZjYAA2yfKkEZBcqFM19mRRlFUKBTgEWgc8DQDmQALA2fmZsAWaBJ4uXQq7RyIlbOgsGViBtBfyRJjskKxyqloZNjiPM9p3slkAm6OAr/M6xpNmlkcx+9+1zvrtRr/nM3nf/THfzwej9/38MPlAD5+7H/44Y9//BOlUim5tJrrfD5fX1sf7Y8uO20GolTj5Nbr9Q6trb4GaNLMarWlf/2vf+2B+996yy23fO3DavW73/e+/fH4jz772TRNG/X6e9717k5ndXagJXy+BY+D8fmcTCaTyWRtbe3WW29lmWGfKsl26m4yDPIzZ87s7OzcdNNNR44cCWMiTHlSNQkfaKPM3AHHponSgrp20GlbW1uqFMxkx4wv/R8zHRIuRWqY4JguzQy0CgepryndOw0yIlGMET/V8iNJHLmWSiSqVqukFhW8BM50Ot3d3c3znNUIwAcm4w7L5TIsVO4udK1Wi8Wb1bHZbJoZ+C/x6r08Bf8D5FIMDsVe2WuHkF8vtoxAOT+nBcwMuSchtpLbravxaT2WWJpx6oUcxSVAP7AZQEU39bIfWZbBAvKF8JzgEm6YnFBoFZYcEDznEWMH2QOHxE+ELbhzKGoImCjw8oyDsnuAKvIwxMapF9VqNVZTEJgocEFkttqwlfP5XHU1WUrN2Ti2QCyZV81bVJQZ+hMY1Ov1XnrppY2NDYGey+A+747lGXwGaYRQVTwu+Bi2TKwVY0rpYuymwGHmFoa6CmArdrGmusHEa9Wwf+NaABrdLeOLHV3udoxTN5Pi1TO0LUBLfA1GVhOIrIIEREBdYr/oALxKbaLYPyAqxc1UO2QmCrZ/DBNNR4nn59F/AF7scJR9Ir6QO4Sv5eqQkbChTFOMPjPb9+KH5qlyuYsu+K+5M0Duicy4jKn2JmCdfhV5CIXtN1T9/v4+USPB9CRJgOZz9681d9jQ8+oOJ5NJt9vl7fB0zKucduKltHkLkbvZZ+6kS2/UHGUua4YI5/FFkCeen87GNfK6O2hbeWVsYzRxKcUz7KK5i+Ov0yNUxbx05swnP/nJ48eP33P33Zd9rVgsft/3/hd//x/8fLlUKhS/himzNDXLH3jggWeeedYMbhIgmZuYSsvN7Kmnnnrfw39ptH/NE5iq1aX/79/95mg8esdDD73yr/fefffxO+/87d/5nTNnz5nZzTcdLRYOrBbgt+ZxAIASe+qFhYVOp0NaN9m+ZqZFmtQNqIL5fE7ZidFodPjw4WPHjhGFYcVNL7XdJtgNKGHhZ3oCk6VeGjHywFMeOH5ze9rcay5jjczdGQ76jZ/HXgkXfIDRIIQB61aSJLBWbJHnbqmNsYi0U2TMQPuxANAsCDTzQJ7PScjYgJzjnOaLweLi4qFDhyjRkXrKOQTP/v5+t9vd3t7O3BSGOXTuRoxMxLPZTPcjAnLuvkKRx45Z5CAYgBRk6KOZQ/0JCgH6CH6BGlnMIAmAy8ARrZ1mRpqRrHlYgwdeOrZcLsu2hh0CaBtQwn8nXpbNPLaut88jKKg990LtLCGoG8Oc38Q93sG7UWAXz2/h/2grtG5QXJVKZW1tDUBJrM3MCKOLp4RcEc2m2xZbqW4QedZ8vV63Kx60PC+OT+AReRfwQ3zY6/UUFmi32zDZoqtpNDKUcy+hee7cueFwWK/X19fX6ZmNRmPmOUNZUNycT5QjotsTWxny4rxlNpmg/7knRPMrgeDBYABZZZ6kfxnHKYUGuA0IZWaEAiTOE+AWDQy+4Z413Lir3AV5jAs2KhyIwsNoNfsldmIAwdRdLVdWVm666Sa2Lkxfk8mEQgD9fn9zc5N7NjNevTK0Zm6LBlBLgiIOkYdoidLkLs3MPBeQbS0vl4lLSSeifkGrXEUCDx6NyDLPKOFB6sVpVGSLDQ/5c6F8VspRC5yGUHByFSjY1LXvY69pxMZPKfMWwHEofAYvn9MmITXAFhf/IMhy+XjkrsqAOaZ9QkAZedzgej8e+9xjGxsbH/zABzrLy2Y2GU/G7tne7W5tbmzeftvt/+V//td/7uf/YaVcDsnL/b3h3ffes9JZfvqZZ8whpWWWZ7llllueztPHPv/Y+9733XEUzf48xcH/vEcSJ41G/ZO/+3uFQuE/+ehHx0FVnvFopDKSnU7nwx/84IUL577wxS9eu5u5cfzHjoNhKMlxRt7HLhb2q1KpMEcXCoV2uw2t2G638ZvodrvVavXEiRN33XWXQpbj8XhrawuRpaZ1QJKZFQoFQr0sDKTdMH1HgcRernKK0y0uLqJNhEeBlmM65tIzN6aOvQY0/xXdWCgUUFJGHjQHbWi7rPBK7mW+VbGDXGaityFIAmwRgsxdSzcajQBecRxXq1WCcRCcubv+Mnua2Ww2297ePn/+vJml7o4Jd6vwLqwDMymoCFuZMKTIwsMXlpaWWq2W8plIgOWlCKUB3YgSTqdTAbjZbAa3Ko6QlyJloZnxP1CelUpFyc40ozhCQCQoKvealsR5+QnLGNaSEy+2zq9QnYL/iE5yA8qZBW+hN1BTcP9cFHw2cQtDvgMsGAUFKgGLMKMFdy0xB2HiEaH3xNyL+NRuhzjjlUdZye0YIWlg8cn3olvyjPv7+8ReoyiiRDhxebF3PAh8EtnxvV7v3LlzFy5cwBPx0KFDq6ur4CqWbQWUtVWD4pVAjUEH6Q4ejfxgJObuewAsACoJM9GquRc8RPkAylH2lWx02E/yK3KoIR3N3elQ+PGyQrmncCEjghGN+AT8wVigM9BEevshHqJXM2mgG5m5TxaolwAx/LqZdbvdjY0NumjqpVxSr+PKblxTipg5CyI2krVkXnhJMoaZ24lzXe1SzPETWJNNlwA6L6LZbLIp4uTK0zfPzSf3js6ce+J/7Nkz0KUQ9iLytc2AUZ4Gbg+MfXYUdAnGgs5MgwPuwyROdTwev+hOSYg0aE/IV14fHPze3h4Z6/kbJeTN8du/8+/X1tYfuP9+/rmxsfHpP/wDUOOFixeefvbpo0ePmNnycvujH/rQj3zsx6fz2cLi13jZ3vbOe77z4dVDq5//whe2utuj8Yh3MRgMLl7c+LPPPfbOd7770Nra3nBw7R6hWCwuVBd+8Z/80/390Xve9U4z625tX9zY4K/lhYVPf/rTGxub+v7bHnjb6urqtbufG8d/7DgAQrhWq7E4SQnHiiI+kvUAbo/cbVa4nZ2djY2NtbW1e+65Z3NzkywHAj3o8AAiuVs/lry6NJMXVAFzkFYszX1im+A5mLjn8znKbs3pMxfvM7URKGfWY+Ugy5JpMXdJFoypeZjvMhrAPBrFusVfK16CLHchY6gMm06nyvsxz3Tma0ipLmN0WIkJqym/vlgsghTRfvGhtKT8P7H1YlDzt+gF8SKPuurRFELK3Yg4ch9E9PusZ2whZp5DrcivmRGennmeOJgGHECUauo2dTIe0ovj8TFcpAB3tVqteD1DdT/YKThRC+LCsfsgwpZpbaaXEvQEspsZTwGKzTwLXnRj4gWWOKeywTg5K5nkhlydPc/EraF5hLmb84GbZRWEtHE8HpeTK6Wg0ltEh+fuZW0ukyAPg3fEEGB5ZhyxEgNGWZjZTcVef5Khsbi42Gq1CoXCvpc1ZyAoTyJNU9LmGFnkl6iTmBkbjNxr89CkYkO5MbGDide3VF+du70/32QjxDDM3cFAAIXd2qIXlC+7+6wwjTJOQjKVKYX2p3N2Oh2GOVNN7k60uv9SqTT3CodKewLFMtZo25IXmCGDm46RuQTZnNyNvdiVgL55/l+pVGK8054zL0ce/pcwwsztVGdeQh22VeEdxX+Z0yDCgZV5nmPawFiG6sNKPXOnd8bseDxeXl4G94/HY6rUMLlZsMHgSN23VY1MDyl74TQFBxhcQFtOpRxtuRaw09aGRA/CTpJNizaQ2k1p0wtDmQZFKATxr+vjr/ylv6wn+urJk5vd7vv/8l8xs5fOnDl79ty7vuOd+uYtt9z88Z/+qb/39//B3/zB/+aWYzcPB4Sw852tzQcffOjWW29/4omvvHTmTJrOJ9NJs9lc6ax8//f/wHQy3r+WaLJcKUdR/PH/5RMffP/7Fa8/emT9Tx55ZDabHz2yHpm9/6/+1c8+8if9Qf9Nt9/OF45cauR+43htjoMpvZh7zeVisQgTKWKm4B7F0IQrKysAsvF4TLWDfr9fr9fvvPNOEnI3NzfRd6tyNIc4PDJ+FhcXYS7H4zFYJ/OK2+EkknutZCZTuFLl8UDVQJyU3cmcn0A7NZtNFDzmyxh0SBRF/X4fGgzTwcXFxX6/T3SbKY/1UiE88/03tETkVkdlr9xI5BrOAHIxSRJicyzeGD6zCx+Px91ut+T21Do/IIaIJ2sSkzWrmmSdPLuwF4t9wT2SeJXCHL1ejxlcSb4sXXDPuMxwz9PpFLv4OI5brZbKqABtxSqN/YgD72ut0LwdNZe5TeZ8Pie6J/yqRg7xpYAI8UFoJCUosK7Hnn9Nz8Q/SLnDkce+OSE/2d7elv4hiqJer4eEA+iWZRkaRCnMcj8EwiLXZVa8ACD7LgL9ZClZcqXxC/LIPW7OGdrt9vb2NlsgdkTtdptQfuIFS6R5RTpMvBstLznIIBteIiZwtVqt3W73ej06GCFUEIbydiO3DQIwVavV3HnKPM/JXRPepSvKIIZtiZqaXC6c1fv9vmaMkhvrsJ9MX2HVCeUvLMsDRkHUuOj22iGgtMB0jH6o3dHU/R1zF7k2m03glAQPvG7iAPDZWeB3Q38jNPGxH/3YZTf8kz/xk+E/f+YTP6NQb+oJQFiR0y21U9ITgSahD9M0xRWVlHk2LRUvc7DvtYi0xcKal80tmzeaPUTq9ORisVir1YgU0dulRhVHwKaIXRnb44KXUy94HaMwnEIHjuN4d3cX2pVAB/MzJdDK5fJoNBoMBqhuErcC5f+Bg4o1MTkXvDi7WNhJUKVJPTByffMVhth1cQhNPva5xxYWFr/j7W83s+dPnd7Z2aNGJF8AACAASURBVH77Qw9e9uVyufxTP/E//stf/dVvu+8t3/md79kbDhlEw36/3Wy+97vemxSL49FoqVqdzWbZfD4c9NNrlvgSRVauVHq9/s/+nb/zoz/8I53OcvjXd7z97Y997rH5bHbs2C1m9h1vf8dXnnji81/4/P1vvf8a3c+N46pH9MSXvvAN/OzEW976Tb+VG8eN48bx5zqevOLgvTFIr/cjyi2/Lm0QbxxfO648SF/L48zZc0ePrJvZV0+eHI3277v3vld+RwLx3/nkJ6PIPvLhDxeSZDQaX7YJD/95jY5ypVwuV774xS/95m//9t/+7/6WAhSXfe2Lj39paXHpjje9iX+eOXv2huvkAR7fIKC8+y+wVr35zW+GnUI1ePPNN992220wlJCFpMQ2m81Op7O2tnbo0KGXXnrpscceW1tbe/DBB9vt9urqaqVSefbZZz/1qU+dPXs2cx8yCC3CkcrBbDabFK0ejUanTp3CWnJ3dxcijZjm3KvSaXOPKMfMSDThV0TMiToRai8WixCf8HYMMzb02OgQ0MncpZngFOwmcXAldHP/E/cNxrSFmxRdFLkYcTKZUD8miiIIp1arxYY+SRLikktLS5j3ErZWhA6i9Ad/6Id+6Rd/kbMRJIIwRsnELSntJncv98TLruRe9s3MxuMxTzGZTEgfbjQa3CR+IhA5tCf0ALteickK7gwPZRua9kGdoiXI81ye9oSJIXs4f+5ixJkXWEKKStoNDYt2EDJMzHetVsuC+s4oHaXBoN3QI3JR2D6a0cxku8MXeKeoEbhPhLwQ8JwcWpSOSkkhAsGK7pFzoxz8UI1Qq9UOHz78MusZXUnj9bd/9MfkVs07MrP5fH727NlnnnnGUCa5MmEwGDQaDfyqCGVCJKPN5f2ura2tr68T+nz66adLpdLy8jLZ0AzV8Xj8xBNPnD59mvGi2T/zwiqEAiB+lpeXlYTb7Xa73W4UFLJSZzPnjTKvTaoIvtqZLgRPyZ0TzKXDFNx6VmF03nKSJAS76WDMA/DBpVKJnlb2ulZ0KtQ1kijwypg6IH0Trw9OYIRwR5iJwq8gQRkdIy91zf1wA/T8H/vYj33iZz9BaD72rOfMq4kyWxbc/Z420T+VYsI/eY+INeFl6d7MeLCPCtowHBAqVCqVXq8Xx3G9XlfppsjLE9CjuGdagJlKGYE0tVIh6QywpBZUgOx2u6gaYN95OtjW4XA4mUyoPCQRSOZWG7DR8NyKYBCjID4DKU7sPsuydrsdxzEzNlNT4qnoqZdTgkZVMZ53vOMd3/BiZ2bf2Ap77Y4nnnzSzO4+8bVyhY997rE773xzvVZ76umn4zh+85138vlXnnji1/7ff/vRj3z43e/6jvlsLsfTa32UyqVKpfLC6Rf/8S//8jvf8Y7vft/DfK7b6/f6X33upFShTzz5ZBzHdx0//hrc243jyscBJOWcPXv2zJkzGxsbFy5cUBSJ/wqaTKfTxcXFZrO5sLBAesr+/v5zzz33zDPPbGxs9Hq9vb293d1dfsi8gKCeuThyI1+yxWX8QYx1fX293W4nboQLqoi93gNzE7/KXGgfBjSxWmS5Qs5VLpc5ycxN0ZXMy8ohhyDzfHDWmzzIVwBhm5f6mHlBF2UlA0TwBkLfNh6PyQ+gimPkCen9fn93d/fixYsbGxukZ6JVit2AAyk9y4O8KrkWmAaFu5zkQkGbgrwlrwzEzKvsZrnMJG7Nw30iUVCqOE/NjfX7fVY+2pCm5qL9fh9INPc6h7gyKVKZu1Vn5okgxIXZzmK8nHvRHeR6yCtJeQa28qRsGFiBSI3nJKyOXIX4mrJZC27kngWVeyK31zZ3SeQ2tNvRnaujAtmpMKn+DEBBOTp3p9LhcHj+/PmdnZ2rTu7Er4ntCtZEUXTkyJG3vvWtjIjBYECmkTmqYABelqWbBw5Eyune3Nzc2dkpuSc87v28OHUYJWPFnhd/WRci5Q5xSLVabbfbwEGwEQ/OuCBhwlyITAher4NHJl2XsCwRXirpAW4wFuDdETkNhRwE95WDH7YkOCN2A4o8qBMduc8OE4JaXu2feikENQJGOWTaMWUBhqbTKX4XQBzumS0W32FGYrdM9Bl4HVrqSJnDU7NJo7cDCCJPvR97QaBwfqOf5K5JZZaIvLomMFpPkbufBm9TSWy8voof/JNpU01KVrj2XboBRo2yghhi5XJZOlc6gGZsYLQSCs3t27gi30fATbLU1tbW7u4uwXqanfE79uKiUButVkubzDfSwYAN0eQjj/zp0ZtuqtdqFzYu9nZ7QpNmds/dd//M//zTvd3d//Zv/fdPP/NMrV671gKAYrFYq9f6vcHf/V9/7pO/+8mP/cgPC02a2V3Hj29tb29sbNQb9fX19T999FE+v/vEiTiOH//yl6/pvd04Xs1xABrKcLJmqK+trQE+hGlIqo29sOHS0tL6+vpLL7301FNPkWF6+PDh8+fPo7NE1iZnH9QzmvFJeByNRmfPniVPfHl5+cSJE7PZ7NSpU7L8gFiCemRa4TwgA5GXuVsRpYF3TB5UW45c3s5JhAYqXm4H+pC9L1twCfDToLgwHAB0nea1NE3xEmLSRzRpbh7JTApPOR6Py+Xy7u4utjuI2+TQBoCQm7fuFgJpPp9L8Wmeyc4NsOwV3TWQmywUCnP3mYfc4h4yd1SeB84v8AScjWtBZYl3kQaOE4Jsck/CFaxEUBXSYODR3POBxB6xnUjTFDuVvb09kpoBcLnbZYcPZV7JY39/n8YEkop0YSlVNR1RLzBDUzdETJIEAylySDudDskrkZd6os0hS+r1ulbomRc5HI/HJS+3wytWyaUkSZYbtSsMtII7pEZRhM6Vz6Moajab6+vrlG7X98GszWZzf3+f3i5sB2xiu0U10RdffJEORh+o1+sQQv1+HwgOSgOUIHQj+ECXw4QIavzcuXMbGxtsHVXXBPw09gpMs9ms0Wi0220Jjs1rrkaeiZW7uwIdkqEUuxt2HMeM3DD/mtdNFSJho9g9GvXsIvnAanTjxcXFmdsk8YlaW6MVflSseeZZazB/e3t7iRfyQbRtjggRvPKTkLRDA0pjIhFm6lMWiwIaTErskSIvDKb9duRpcGoc5pAQ3kVuHs4IYjYjN47z0JOhhMdBOQmGjwocMB6lZ81df3nZ/3PQLLGbkkZuqoXXD2pU3B7YDKiTsycPp4JCocDAh2FF85oFVTCAmOB4BjXTFFtcFNXTa2mF89ofhWJR0WEz+/wXv/D/s/dmP5bk153fiYi75HbX3Cq7uqub7G6SaqpJiaIEyiNSGg5lUIKFgQfw2C9jSW+WB4MRPH/CCLBfzEe/eGDJhh8M2I8aamBIs0gYyBhJFJfpTWx2k82qyqpcbt6bN7e7RIQfPvx+51dFspriTCu5ZDw0qjNvxo34bed7vuec73nqqadu7ezO5vO//MJf/spnP/vtf/KLn/rkL37qk7//+c//3v/xf/6jf/hbd555pqzKxWKxXPwnS50siqLRbBR5MZtd/bN/9r+dnp39/f/q793avfXtn/zPPvGJf/4Hf/Cff+Yze7duzWbzL37piz/10Z+KiA9+4ANvvf32aHRCu8Wb67qu65T9JKxTqOsrZg+b2uv1YAIQGLq4uNjd3YWaunfv3unpKS5+LsWySq1uOA1Tw89xQ9I6+Obg4GA4HL7wwgvo2tCs70oK28A++DwzhTCdIalb7s+5DBvnmDWmF7jDQVmoSpe4DyC1qavRaEwmE7LUqStaUV+TXJrPHP0tyYM5+MUAQogSPrMASq7i8YUazHBDihsGg0GIIQNAY3h4l5laZof6A9UKefNXoFWOY0bDpKMD5ZgQbB4ov5ROiusDzIGFbADIiZHh8xAGZn+xHxCQPGck0twpiMGyNtWlGoxrvtn1+IeHh8w1NbZptC5XL3gWBtjOVDc1y84BgDnu9XpVolTP9NlOn56egqhYk9hpZzLwvkBhqDIwfZ7n/X5/NpvBRgNJv1Ub+26AEvjF2BbqnU2BGrKRjwHKTFUvj5Fta2trLDAPbKfT6ff7dV3TW48JNRQGXjDXDCPlU8fHx2yElZUVasNnsxlKTLPZbDQaDQaDO3fuQCMBCCrpM4AMXHjBRXVOrXbnEUE5mp/f4In0jOl0muc5q92ss4MVs6T/O0FzVmmlZqSuwgFamZtnGWfi3Tc2NsbjMVJooTp3D3JLje99alnwEswdasLO510HQ2YIU5llGfHxSuVirkgjnotMaVrwF0kHrEp6Oi5PCWlvgZtBWiEZCjOCkPrpFBRFcXx8zLw0JbbPQ+IS0KCVn6NR7zXGoPEioZpIvst9BEI9qzIlLaAJkEtZnefEr+MB0Dbq9/tnZ2dpQMB7LU9aEhh3sswwKDwGi+cP//APP/OZzzxho/0QXZ1Ea+yVV1/tbHTu3HkmIv7NH//xL37qU9/++f39+xHZ3t7ef/Grv/pLn/rk7//zP1iUy4//zMde+tCHer3uYlly2sf3FQpvNBqNVrPZaM7ns69//Rv/9t/+6f39+7/y2c+++MLzEbG/vx9R7+09Xqz9S5/81L/+kz/+5U//neeevfNX89mrr7320k/8RES8/33vuzh/z5XVb64nX9cJKO0Ts8lDhbqpLGWj0eh0OpTpNZtNCDCAF5ufrCDO9IhAHRAjRKwcq0nnRgLNHL63bt3a3t7+5je/WUsT5Pz8HD4szTiG/ODfmAHUUnLlFGLdMXhQquTrEGsO4bZaoi2ueIXhoOrcCkqhUlMIuRV1AzOZBz9BIMxIl54cxN85UpvNJhgaygciZCHl8DKpfoUgMRkDC5VC80xBvYX6+GH5GEaL0kGoQDOT8gX+WyQqfa4lr1Rx6beupMKYqxcfBImlKJlilgGQCCYsJP4MaicwCmaFAy4lGE68u0xK12uFwl1FHirTxnRBBKYGuE6OzlnSugOQnWUZeqVMt9MVvBoxhDN1icyV7mYOFY6EGcdDAPFHxGQy4e3oc/3t+emPXXD2vBT5EkvpgGZZ1u12vz2iZzjOSuClCMIy7HYSut3uycnJ8fExb42DxxaA6itU3Z+pzUku+WvuiaOCdQcWsJ339vaeeuqpmZqb81/GAbI2fUjLSIXkq9hWpplxRYjVLhaLjY0NHEunXfKmJycnoBNuwmteXFwMBgMybgFz0LfcmelgcXY6HbJgQzrq7r3JCUafQ5IogCksfksa2TuFjMRO11n8T/9jw5wlzowdHjtd3kShfIBapf0hArWUeBagbamGopUKmUFU7H17Qc6W5txgo+X544lSEOecY+kxwuEGkQlAz/OcDvJ8zC/L2ehMGxwqfghA5xicTCYNiQRBBECg8hi5+lCQEQsBDDpk2XDCmN30IWAvDhnaFfXZYuSb79aS6ofxWiyXH3jxRV7tz/78zz/80ktWuf/CF7/4gRde2NjYmM3nX/zSl01bbmx0/pv/+u+PRsevvPr6//Jv/teHDx78ymc/+1Mf/cjOzvZiuayrqqpqco/qqi7rKkWZ34oU5HmW53mexbdA//m//8q//6N//a9Ox6cffumln/34x5599r/0n+zt7f3Bv/gXw82tdqt1Op2+9dbXICPXN9Z/4gMf+vMv/MXHP/YzH3jxRTy9b6kEyG27ua7rugZAiVxFSOfZdhq80u12NzY2MJx0dYsITDtLB3NCoxFnIDl6BeYAjOL7ooKG/wpCxZ4hrovdMhu6IoFlQ7pSLRN9/tbSB0G6opA+OTwfBhsj5MgvD2k6ZHNzs1Q38Fr6Oxx2pbTBQTCAZi4frBzcxsccxzN1i+ZMdx3AxcUFfwL2rSR7FBFwGLV62mL4G9I2IqmIIDuQK4QznP1JokJENJI+Lmxv8sCYON4FoGYDhuXjvSp1yCTWaYNXJxIemdQ9lssl9E+WZaenp7nalIeQipUvF5K8IfGA34LP+C7KlZg7HqCUYPuKRB+dUmZ2x9wnb+e0SOJxjEklPbx05XN/09tQyywMYNBSsoIgtoY6WROpL6TUs1CVxpM3GmMCf8OGQv4Q/AGH1Ol0yH/gMlbDrIJ3YXbBiHDDTekgFmqYxGMXEuAs1HLJD/lYOQV1V2tra6PRiBFoSFu+3W7v7e09fPhwPB5j/jPRwxFhEtE4yRQUb0p3gIhg14OKCJ231FLcXlOI3kZvnLB4rXYA1llkdng8j5WdWLtMgCqyNqGTGb3j42MQMx9II9QcaGbjADrser/FQp028ab4GM8DBwxC4twzHITa5AnTQIc9w5SADNGTeZLKwh8y2mZJjRfdWgJHhd3hZNNOp4M/w/fyXyaazFcgO+6Hef3V1dXpdGqnkRGwqhEHICc5J0mtTpiZdPt5mLqu+fP19XUcPHyJTFJczgDJ1KGHbE4Hvjm0CVJ5sn6ULvckfPOtr62urFq18atvvtlWc+CvfPkrL3/k5cf+cDjc/OQv/K1P/sLfury6euXV1/6v//v/efWVV/7ur/3a1s52v9frbGysb2y0V1vNohFZVpbLomhkWbZYLhfzxeXlxdl0ejI5PTud/v7nP9/pbPzkSx/+e7/2d7d3tr/jQ778kZe/8uWvfPzjP9PtdBqN5ptf+xoyk08/ffvkZPS1t99+/n3vayV9fW6ua7+uR9jcaZScNWAIDkH2cLPZ7Ha73W6X4Kw3P7CSs8wadRhI4GmpvsA+GZvNJn4nraWxGfisfCmGH3QIPuDPnd8Gycf5Cygx7zKdTu3jttXpjlS/LJGrNHtnNgIciXVxO5YsadCMNbpS915zIdCNlXol2z8z53GhNsegOt7RwUdu6+ps5DBL9T6eqXE5QwQcJ95UKmc0U1SUSZlLkhAjB3idTqeTyaTb7WK3yCMETDM+iNtT2R0q4+AmmRL+FpLkzFUMcXp6yjN7wENVL5kCqUZsVss3N1MUxd7eHs9Jth/pX4WkH/M8J98Lg8ck0vecsCygZynFcicSOCYeEd1ul0+SgMhzwlka1sDP0ZkDCOtbYc/qpMaIpYKxt/FeLpe9Xu/JG41sV+c/YMIhHbkti9yf99c5CJvnOdLc1DlRNY+p9tOSrAaaxGYDvDDbTE0kAJq58GyyYU39ulbX0OoxUXdvN8bBMd8sCeYyF5eXl7ijKQpkN/HMLbXvA7gDdwrJvnpM8jwnRwVGzQwZuw/YTa4kOwLEQ5yX5dTtdkkDIM2avWyizs1mSBZntYDdQ6idJEKgUibyFSQNUccuKx/NU4RXriSTbveGU5cfpgk5ha6lBB/4xkg86uWj/TNB2wB3HLlIem8yrdyTWDzHUVmWW1tbrsBjO0QE9CRD2lSfRscxaolTbmxsIH8REcxIrgwfChmbzSaVi9yWY7CS3oJDNH61UCtUC2FilQgcnf/oBlKPR8f79x988he+pW1+dn72jW+8Qx3MaDS6uLp8+qnvKsGzurLy8Y/99Mc/9tMR8cZfffXhg4df/epXT0+np6enk+np2ek0L4qf/uhHX/+rvxqPx91Op9PtdjudbrfT6/YGw8E/+of//bv2+nr6qdtvvfX2aDQaDoc/+eEP/79/9EdP3boFDfnyyy//8Z/8yaDfHw5ukiZ/gK7rDHmDqDjyCBiBRQaDAbWuPkcQti0k9gEfUKuxh00I4AbciTkB63S73dFotFwub9++zSHb7/cPDw8PDw9R215KFbwh0Q0XAIJLsAfOvuKsJ8ZHXLJS5hyEmasIQ8jGlT2LxQIqsdfrZYpsusQbEICZh4L1a3IQF2rzuFD3P8xJlfR6MeKMCIwuHwbVragNOt+1vr5+cnKSVpTb8HA0EyKkZIQg6draGgUu8I48DxUStYoYcqk986hnZ2eESkO8Jud1RJRlSb58ChYxAMB94KwJG8AuCADIkmYKhtLI+GrzPQ5dZYn00srKCnbawWtnYvHu8BP8rTFuQ3IkLFGbJSAX5och4g6RtOh02igIzI2MjZuXEl5xXgEcVS4N57laQNV1HfEklUIe0racSYRDytTNuZGIYEPUAQWcUEFWH5wTcPbg4IDFwyxDyGGtFypXZxbQxPGy5FdAQ+LLrO3ZbEa1DYmVETGZTIBQeDgk7FaqeSIxhsF0Yivv4qzToijoFM83OneWdevcAzh+VnUlrQA3rPLImARljnBaTMsVqmYjpFsrxQUi1mjGeJSXWqh1UFVVEG+hkAIexUK5v5wbniw/CVkHbB++iyEtVXnD34ayrjlYWEKmGHEVnIPh7BGfcpTIrEgXLAQu3Vt8PB5zCHuVFkmLCoPLWgLszjlm50bS4dDhabuamS4X8ezs7DQaDSgJnvni4oJF6NL+KumXwwhTiscGd1JsqO5zIV0qRsbjDMv717FpP2RXnudGkxHx7/7dn/3cz/0s//7Sl7/ysY/91Pd4nw9+4MUPfuDFx364WCwmk9Nf/szfcTD9+7g++pGXv/CFL/7tX/rFiPjEx3/2//vzP/v0L/4Sv/rUJz+ZpoDfXD8I1/V0yomIbrd7586dfr+PMJhzdIg9ATHxJheLxfHxMe4s9KQ9dYcXc6WduZCZE5kDvd1ub29vRwThZrqBvfLKK6PRqEik8lj3EHtwV7natWGYl0ldNtQdeJSnvVLPRj5cqh0ZRs65O6ZwAKy50sNDKV9mViqVI1RVdXJysrq6OhgMLi8veR4gYCjSx0V4iGBTSBQJY2D+yaWLdV2D80yJuZbTyZFmSnzoA0wzxcchZngkTBE8hP8qU3/CWmWneZ7D0+A/hBIowSUYJ6J1xugp1bdcLpmpStm37Xab6DkQn3hZpsTTXLXqdV2PRiM+MJckZ8p7NVRDjS2hQD6EQRkQImtpLM8ocH19nWcmYEp8s9PpOKuSNZZlGU6Op4k7AEp4X3yMuXrEkTDK+mGW4WBW+t0nbDQX5XiRQ4YxzhHRarVoxs2VKSckRAyz9sjeA38Ph8NmszkajcBqIdkm52gaOjOJIA+ADuuNASzLEgFOV3F1u91+vw9IOjk5cUtAL04iD+Q1soQM5vC7Kmk82a9z2q5zEtiMZKc4ByPk3OKQLKTYxbdnSietlWrsjF6wvuGm+TB6UrfUS90RXvArJXSZGsyGuEl2JeiHAfcOAjGHWjviFTO8bFVDdj6Ac8iickYvpCOD01QPJwB9SH4SROXgL/uRmaWeJh1JTie+Eae6qfI+nqRM8pUjgkl3qo/14OpHK6hw6hg6PPN2u+2cFu7sdA4Hr4nIk7jC83s8Ly4uNjc3XSBoJzzdKQaplVKqeBem/gm77If6GvT/A713cHD48ss/2e10IuIb77zT7/d63XeJgTz5ajabj/W2+T6uXrfX7/e+8c47z9650+11f/KlDx8eHW5vfStEPrihJ3/ArmuTDaJQdGdnB400+CoMrYWLsdbj8Xg6naLllindu1SlBQc9F5EsQlQ0KaZOxWTP6ekp3M83vvGN/f39ppq5+dmAQdgYC7W01eOV+LJzs8hBxCHmVhFBptpSLRObkgHneIWZ4KgKhWvTEFtEZOrHzV+ldouQ0JX6iVXSH67Vwjhly5ZJfSg3ZGw50COCXKXUdyf7cynx7VAVJCOP0eWAJjaHHieAwHmTmVTrSFtcqACc8cQ+raysYO/nSY87Y2sjYKLSBscQWoAG7kxHOwwPc0SCKWaGNEH+9+rqirA1QwrpFY/CcUYgfUj3xiQihjV1vAzrBVfHAijVTTHP862tLf7R6XTMWLMCISadO8FSAaK12218qiyp28DIOQPSU/bkC3fFJI2rVQzEx+OxP7yyskJxNDwuWWW8Dtyzkyt4KVt9EACJcd1ul9ziEH8POiEJxO5BWge2lCw2nSonkwkyDhEBi8kGL4qCAnnSmv1SXlrACALEDKz1lbIs4zTAl2hIWABXBC+oVlU+Tog5YILyXsykhRhogjt5XxwJ0lec/+eFXT/atDAe7RV+fn5O+M+S+3jCodxTFluKFy/Vkp4brq+vTyYTsgzxgsxTsstwsE26V492OuGTEeFMYn5eK2DNIDC8UMKMMB8ziPf68RozUV3XNe43XkEtITDHUkKF9vP53PmOhK05yemf7oyLUj3inXKN88wqIjcD2Mo6JC2BjOp0ATj/waPh4/r09LTVaq3/eJR67CSJjF/+8pd/9Vd/9RofJr0+8pGPfP7zn3/2zp2I2Nn+ztmWN9cPyHUNwuYRMRwOd3d3kTLOEilE0AA5NEVRDIdDzmgMQy19Sg6ILJFSI3pC0I2CU3Anp8xsNptMJnjVo9Ho7t27h4eH3NNyGCH5YswbRJopOo5gfgJMcTH4XB0yHPcBkXQ6HaNkQjMkmdF9O3TiO/vHJJxLhTjckQS3Vw3mhkoEGkJlpfYpklSziODwBSRRe95QOSrR/5AsSOgwhUMFAc/UwxdrajAHAsDGGGmRpdRM2i7bUNnS4EtAwmHknDmaSWEnV62AJaUY/16vh2VtJOKXpGPyMQafJkaOR1fqVLSysoJ29GOjZGock0OXHbAdQ2GnBUeCWDBEdURsbW1tb29j2Bw5JW5eJmUNWaKBYpqTcuBaVeHYVJIi+Dery3wPOGauzkBPuOokRQxuiVSQsiyn0+nx8fH+/r4/TGJGI2kuUqnUHTjO7uMZQJP2eYCYVBFlEg5Ee4Hn9PgzbsTfXYDFpptMJuPx+Pj4eDKZgBrNdLKQ8Ftg8hhMx53ZGiBFRg/UBfx1VsxisSBjOAQmvDeb0qtivz8GL1g23pIh6FMrTuK3rkU5e+QrJS8y7xHBBvf0ASKn0ynABWejUB9qHJ5Mkmq5KuU9F3meA0DZehwjnnrOHPwiHxGFBM5IquGw4t0zqYTm6h4UorSJvDMIHhzvHZck+kzm8otwatmvc5iioc7aab6Ej4I8zzc2NnhIDIEZSp/bldIJXK7uE9JPwvsydJUC4k7/CBHtjx2hCIw8eZf96F2vvPrqhz70oeLdav7+xq4izz/0oQ/R4Ofm+gG/roGh3Nvbu3PnTq/XI8cxl2b4Ql2w8DI5DYEvL/66JwAAIABJREFUHBx2i3FSXSxJSNQKFFVVcSDCNHBaUSpBgBWbmqkCplRZAHxn/i19g5zImqNdZkR8QjnFE0zDbTmzsqS+ITX8hox83vFx4Cb8JXwbKnfT6dQHpVP0HK/JJLn87bRHqXLviJjNZpTFWM3RII9Rwnc3DKqSchC+gsJ8JmgymQyHQww5CY4cxCD4XM3Q0nQxpAGJdYbObtAk2CVTBTeRwWazyWyyPJrShmy324TMzs7OiCNjfW2nsV5GGNyZN/LLNiWXzeSuSBMbJOqZdYlViGHi/gwp5hxellIVsIs9BOwxhIpFcyKCCgaTVbgogACrNbmw16XcLFG0acy3vWt5I2DdTwKqK8vy/v37lKl5tQCd7f8sJMLq/UXQAPEEXpM3hYwnmMvayFRva56s0WgcHx/DSbO0CGfjpVAMx9Libnw1D9xqtYhgsJxakufkKzguluoFAONeqm/hYrFgiBZSV3XmSUihDM+E1bVU40TGJN22xmfESUCfUImZ+lqF3MI8scQ8FSeYKXnSM+w1McgsjFCuYURwKpoe8xIyIPYmdVnPYz5GreolFjO7z25PRKRuMBuQ2WE0yLDMRMl7hfO9zuHmD8FwxDdqiY61JevoTedczOVyORgM2Bp8eCGhWSri8bV8H5TwF1LN5Pn5LlYF6fjkmWRZtrGxgbpcOhpc/gw7rlZLTCcQc1ku4MfqKstqZ3tne3vruh/kkevFF144PDwqy6ooflBg7s31Ha9rAJSf+MQngC80mkP5FuPdaDTogsBxzwFq1sfhTk6BhlrXmD7xQcnZxOkD8QkvQl0tN4eWsPNdq/st0sdpNNwVG5Fk+1HPUUoHDgKGq91u4/umych8kgiawYpz4zCEBq8Ea6y70ZK6G1FReCZKR0upYVeJnGc8qvE5l3BPRDhwFrJ2tRLRiHdjhKokHQp+FLxbKyEPc0LuV6Y8hFxl4IVkL4FcSHKkxbYRQaYmnDRAH9NeKSGP92K4SCSoqoq8Kyf728Ri2MicIyvAyQZGZqV6LqdWn/vTlI8sKxAAy8nNSFykBVNCh3eGBWFU/teoHePHn1fK0nMGLevZBKQTMUEeVZIPx5JjZMgJJhhtAuYJl3M2zDdfXFyMRqOjo6N2u93v94kDYrmdocujttUadKH+VWQOUN8Wyk/AckNDzpNWMW3JgzcajclkYkII/4FtS9dHIC8RBnZHrsIOe1YUUqD/35JCPrDDqMXOFfvFCppuoMJ5QmkRi7mU7Lx3Lv6kYxQpVmMfpfg+U8jb6S6VNCBr1WLXqnPyDnUzerwmmOOQEjjfZfXvkDK5KV5+4vqY9OJjl5eX7HS7UqGQNKm9DFTaOYnLLkQpJSavQCdyZEqAIYTtcE1RFJeXl4PBYJlo2psB5Xt57Ct12cmlV1rX9Yral/ONLHiXXvFgqGH0+/1C4huZklAd5DFqBz3Xam5UJ7QxLtnh4SHBB6abiQbFMnerq6vMAiGyJ2+0H6WrKPIfNDTJ9YP5VDfXY9f1yAbh+OJ0UuvQaDS63S7akBxe6+vrCKOgMuhsa+OnXq93dXVFa0SidRieiCD3v6kW1fABc6mygTsbatCMYSjLEsa0VP8M6nDBIpW094wygSz9fp/bWo2F4wzFHBMbztEhYNRWWwtO0lrpRHOpNLuUlWx0GxJwIS/Lsc4/AE9LVSsDelxijPGA46HE1RWUIWmP6XQK92lSJ6SBB7IkzlgUBVzvUjXXzvYDybl8G5tnfpFQI3HD5XJJxthkMgFYgyHMFYUqqaErUkzgroA8P8lnIKGl1HyALK7HgpDodrssgxRP+2JB8vwAxyLpmghqIU1wLq27xWJBMA6elQfwOuEOIZDhZsG8GjPYUNfNWunCBkNeeHhZgKeTkxNHuofDYbvdjvo/VCJ/+7VUDyTWSVEUo9GIUno63xjCYvJZ+atJa1BoUWDQM888g/CWWR8bbKw4e4rUCBYMvmItuai1tTV6nFg+xviMpdWUtCel9zwAf9KQnFCmRovWhDIh3VIjH+aIr+D52WILCfuDYmulNXs6+F/jJ0CboSEzAlgBU6bAEZ/KRKCvlPRisRmYGs7yakXSRJTa6pDfBWzCDY4I+HtHEs7Pz3d2dkg09+pNURHTwbEA1gdVA1sZT8bcvhbeEW65v6tUD3TegsxgNhQvBcdfSQyulEpGrgIv4+A6yYfxFuA0IPcAIIjjhEdHvyjOHA4rtqTHit/W6p/OVsqldk7aMYdVrRynXJ05TU/W6jQGof5jhSZvrpvrP/K6BkBJaYiLCiEYsPp40mQsVVV1dHR0+/btvb2927dvHx4eltJF49giIjwajeBCVlZWKCMgaoPTnEm7JyTAUUjVDHKIQ7PRaHQ6HQfgsDcOpWERiQSNRiPcVutLb21tTSaT0WgEIQfL2JCMOccoaAkDbHzWlLy2RTp4qhAlkIa2OSUxcrWy2RgHILhVOTOpiqTxZeDdxcWFs6wiAqbt7OwMc84oEa0GHD98+JB4LkFDzmKSGoui6Pf7jUaDFnmc7LVE/ogoAZ3nkqN3ejvPTyB+sVjQT69M6k8L1Qg7CuZUfaugMyZYRA79lEUuVAiFLXF3EwBTqfoqTNp0Om2riVGt3jkWe3IIj4ekXqSWuD1AJ1Mvk4aKiAlrApIWUp4Hm4LpeX5ibaXEU6FsCQHzv/P5nOSQo6MjSgRIwy2KYjweP7mXdyRkITHf1dXVnZ2dXJ2NzKyvqAOkfScGB6cOjHV6ejoajei4CD4+OjpaqkUN3kKlHGL0WZmdXq9nQe/6O+V9MoxLac1mkjj1pgjlyVVV5XamK1ImD4ky1knOIimwRVFQtGGiMVRTD+dXqNO047mOe2TS8GfegfI8Xq6OoL4V6yd7NFxeJxl+/jmP3ZbuGCsEGi8dE6ceFpLlcksY9xln8+bKocTzxMtC5IvT1UwkIKySkAIfAxdaWcyPAQScq8kTER7cdb6uqRZT/nwow8E+GxvZGu8O8ddJwiIvyKFUqw/CTPL1mTqGk2rMExLg5ihYSF5+ZWWFtBwCRyGJynYiS87ctdtteGJCBIykD0nyN75jRsHNdXPdXE++riEjgZqGFbXDaqltND4uv8LcHhwcsJmffvppdjtcBeQEh4XTJcEKoDQ6yhixVSpDAWaV0mfhZF9fXweAEr1aSl6O08p35rzr9Xqlmh9iaSDt+DfqhkSCSFML0XiVEg2xZM5kB2Y1pM0LU1KrBjZUUAKDW6jcktAnYxgRRAxz5VMyqjjry+VyNBpNJhMMA+SH8/0x5Bb1dc6cA0lUctCQBjsUEVmWYb2wiCB1TA7YgpoSQEwIQebqgwK2MNlmli4timJqGo/K+pgjgVEOmTHHiENuA1yF19V0OvV0GCXAbSC5AmKOCJJZC/WkmUtdiIfn5zM1dTSjGSKiMgkAsTBSldNcajW2kQzgt083dvTq6ur09JSnYh3i1dy5c6fZbN67d28ymTx5o2HLx+Oxadf19fXNzc1er0cWZrfbHQ6Ha7pq1a0TMSCwTh0MZM9kMiF+/b73vW84HFJUR95IrubLt2/fBi7jVuGEsFt5AJftZ0lQmDXs3JKGxMNDgMOTyxo2bc8FeE0hJouQRL29vT2etq2yei88JrTWlYLRPM/Z14+FGvgrikJK9TZk1aWPlCu/xU6RQx8hidC59FMjglzkLAn7MixkTdRJwBr8ivNpN4x8HjtRXopQ3WzDQu2LQnmxngjc4I2NjfQOXop1ItsE4c07NiT7kKnajMmFkDaXzx3wMdINyHc1ks7gXhIrUh1mTTYl0bW7u8vB4jOHLcatOEvzJJuFgV0sFqurqyQg4etGUqzjHO66rtfW1mAinLrqAvyb6+a6ud71uh6GknDtUj0/iG25GpHTfG1tjRh0RNy6deuZZ565vLwklu3cvpOTE2wMPiUSu2lGP3U8OPe5usXADtq0E/ExBMnzHKG41dXV4+PjiOCchTAzDq4kizidTre3t+nxhQeM8ailowEwSluGzCU0Q0CQTMrRaARgtWEAlICKCN8DkXlsH+s+XnnlUP14IXlzy+sgwmLis9lsYsYAPbZ2mXIrebz0/oSlSvWHNJHDT5wOyAPwAewWA04EmbO7knpoWZZra2u2uFZ7bqp3jhMxa7VgRve4JU1j6ArWEr8yAcMDk7YP7cEbYXvm6hc8l568MyNL1VcBpKpE79qdM3JleWICGTTIobIsoT1ABrV6uMOeFpIxt1o+KZJUvVg0p6E2oRQ+7+7uknJnyZgnbzQMPDwNw5tJbhPyjymwZD3bBHfFeZNNCc1ExPn5+f3791dXV2/fvt3pdHZ3dx88eID712g0iPZOJhMWcCQUHQsMFEj4PsQCRlLI7H+nvUkytYF2UXmIhswTDVc8DZafpS6ZHXy8FMU68O0sQy4GinXLTu90OldXV2a4nfPghFE7b6DhWhmB+JyhkuqGVN/BMdwkzTNmU4POicKnDwZK41dkRBjOhhSLUpDNu8NloqTBsBSPNkbCm0JVHvDHr+yB2IXjQLZfh0Q5v0oj9eB4p4C7vHIpmXS+xUqZnE6ZpHkjoqUODnPJIPDk0KUkwWdZ1lIzCGxBppIs9n6p2j5+y7TSd94Jpgs16cmVE395eUkTSPZ4v9+nm9GPYaH3zXVzfX/X9dRM1XWNEjh0Y7PZxOPHohOY297efvbZZx2w2NnZQSaakxeQNJlMKEWEaYgIcvVyKeAYWhm7gDKJKUNkkryIQeVENqrA1i7U0wLYiv3gNAcBgMYcraO6kLPJCVV2vtOLsFGIucwk/+tfgbSw/XPJ4tQSp7S49CxpwsuVvg4jgEFaSDAyIuaSV8RAplGeSEhBv3glJSYsYpl0Oed/MduMW5WoUocsIvYGA4MpBeQ1JKYdSc5ZrTIswDdSzzAfpapQC3VNpM4JoACmYVprKacYn0HnEOdCvcip/cTureNjxNCQlhBMWL/fX0rbz+4NhB8aTKUkACnkh9TkntbTAX3iwEDg8Y7ADt603+8PBgMigPCdg8GAPEgyNN51l9UJyW2XAMnJwWAA5IWubrVanU7HvekpbGLQoBj5bb/fBxNsbm5ink34ARRojx4RlL/wb8CHkQeFXLmETl020VavvKWaEkUEkAj3yX+YKeE1fd9MVWiGieyjzc3NyWRiYaxQ+74VNYlO78BLLZOWg+xEj6QvpqxQd1NzewwdEYyqqpbqx1ioR4Bn57EFyWqJCHgyPsYbQbozhqBzFnaWsLzphuWEBJczdBS1MEfG66ClWtrpTkZk/PleoBuTSKoD7iUb1kye4zmF+rlzsplKrOsaxp0nDHGEHMi1anGgA9ho9sx5NXLW2fvWifPIpyc8ESf/l3NmZ2fH08F4klFKkD2UpF5Lk4gkq0w9gW6um+vmetfrelovZuqgTQFHp9NZSP661Wr1er3t7e3NzUdE9ieTCacVh9oiaUtYSamOtLC0hwdHDKCwUo0wpAKnSa/XQ+ukIcVmgr8uJuUrON04HP1F9KRuNBoPHz6kH10h2RqXsmLkyC/kZX2fUk1f+v3+/v4+irtQibUi+5TCcLLjavMiAE0k4nkkPlZL1CYieAuHEWtlKCL2Ho/mqGHU+cOWyns9KW2JwzuDE3qAuk6OaaBqpYRRP3athhymeUzUYRf5CdQpyqMztcLL87zX63H0O1SXQvN0RYV6ppPPamk9XpZ/sHKwNHwjg0mFCujKNLCNGbmeFgQYDAalFBDN2rbbbbwdi0zN53PMLfxi+vyZ8vBgR0g2JeHP2V0kY0QE9V7gP9PDfPhdNxppDO6el2WZid5CCt5t9bJnSRAWsEQfXk2z2ez1ek899RS2NtSGh5wBHt7EJGgYJomQAlj27Oys1+sBxE1VQuXWKhKHmbPyJcvg+PgYl+Ps7Gx7e5skuRSS8rJ8I2jDykRlWR4dHQHoQ+6KU5ydRxuJKCn5oA1phteKtqcEfFstW3DV6iQdlqyJSm3BWQaFtBGglp0hjTBnS115eEioSnNpPr7gyJuSRuIAbDQaVlP3UGRSlWolcuj8lskK4TnyI+u6ZpG42O709JQJcno0x28hsX2QNGnZzCnb1l4lhC7wl87mteRseTW2J+kxhF9aarfLNBFPd+QkVOJWSuOJU4iZgqEYDod4ZU6V8eRytJoL4GXZ1ByDJBV4STBu/PBdN9rNdXPdXHFdgBJsxKmK4OJkMoECWVtbGw6HZdJI9/79+6PR6PDwcCHVxoVU3FbUt404dZ7n/X4fLTRcf04EIqG56lQwWqSgFdIh4gS0MYgIznECtRwxeOG9Xo/iU9KJHlMXb6sFjhnH8XiMKQLOOlaViWtcX1+n8p0nXFFzvzpR0AjFoXy68WozNZWmJt35iLlKOnLpcjPaJHemgJtRqtRvkFAgTwgxBip1cWtbvRP5XmNHs3qc/tgkkugLdfo2o8CAgP841p1Hb/sNpPY9oRlIb3LCq2WPUv0jUmz5WLPZRJoKXOW4pHmsQg21yUadSwqA+xA6hyP0GBKbZjVijZCsAyu4xpypZDAJ08OymM+bTqeQ60wrtQv2Vbg/62RjY+OZZ55pNBpvvvnmdDrFHXrXXdaWcHcuqVc7M2AXnB+ImUyl7iweypIA9KDtZ5999vnnnz84ONjf37e8qEUVIJ4N0w2U0+iwI9GMOYQ3YVzK6chXw1fMkt7Zi6S9YV3XQJClugmkaIO3sI5YREyn09PTUzPZDDIgKVeP7FU1nSJV1IVW5NWAuli0fBFLnZXA/HIcOaG2rYaEbNK2lMyNjVgGoBkGBHjkOO8saS5vohdYbKzjkP13jMnyOuyIeLQXTnq6UoHn35J+4xHgBDCwxuNCcpI1TOV+KL2Vcw/H1dkdLnjyNBHECHVNs4LYQiq5OEskL/ppKxU/uaaK0XDle6g+rFaryaV0IZwf4rlYLpcIVoCMSyXWk0/84MED/+RdN9rNdXPdXFzXAChPT0/hEqqq6vV65Er3ej1AwGAw2NnZOTk5uXv37tNPP312dvbaa69NJpODgwMqGR2d5EyhECfNkgSZgaiWkonhr2Zqm4bZKIoCxEMkyFFUPt+U7A6nZKglYKlic049mJ6IcFCYE41QC6480dJQWx0ELIhTY0Sff/75o6MjcgEBVRhRQ7G2lPlcc8qTk660lNIQEWTeC3rAQWf+ClIE+9pqtRiiRqPBLKD1yPe2pOuZqTCZNKNaut8kwprwMPLDsmKoGHzemleOCCwHJr+QNjUU4KVaabdaLUdXwSVHR0dOHOQFS0lUlqp/RysEI1pK/xmjhQFuSBz7/Pwcx4CugMamUL98bCkFKIJ9pjpYAB4ovqKZCOOHVPpxY4ChEDCMdlOKM7gfmO1cxdcIW7pOC9gHAH3w4MFyuez1el5+T7hakihfUQcRRgaID1Tyh512Yt+AoC1FPMfHxyxXkPSDBw9OTk6YEdcOOwTPnzMUVAR7YQBK3FgvxP8BpBxAd9wTgjMiYLkoPeEhcRjIKPBQINKZS5yB+n1+RaCAZwBWhnhrVimLENRCNIPP53nOlqkl72XXi7V3pTbfppnJ6L1SS61SXX/Ar6BPlhD7EQaXh0R+KyTdxdiyJt20NpP0RK46vDzP2XGF0is3NjaIbuMp8bFMmZp2GuPR1AiiLjwPj4HbUCsQ7Imj6NteXK3CbfvDJg7xSH2fUDJSqKjOPgAD0lC3LR7SB2ym1Bp2FtuzlDwnOSFssUxJPk6vZKIJNSwkbeZwQaXuVhATqBSlzOjNdXPdXN/LdT1FORzfbr3o0oS2mp4NBoODg4O3334b4316ekpDxVwCEzi1/JbwEEf5Qv27AIhgRNAS5wVHUlpfGVId57aOSs8loGMTBRTADHPuE4GiZjlPyjzNbnK0tdWUDHLLVAFEDlSfjQGAci5dPWxkq9Uikru9vd1sNo+OjgCL2DYLsC2SK1TX2ZbK9GKxILyIN4+lt1IGppoXNJoxX8hBzwWgd8PiSuU1oZQ4iOeQMAolLzxDSNLPIddQlS5EEVMWsmSQQ1QPAOjpp0LqQrvdBuZeqQmQNRcx4abf+FKbE2wSkwvIg480vHBUGuxu7AVzuZSiJGsgz3Nq8OdqCVirN3QpicRSNTHmsKlLoApnrsahlFutra3x4jxDRBwdHTF9hL+XyyUVY0+4lolY42KxwPVqSZY1xJGzffguzynfyxp74YUX+v3+W2+9hc0+Ozs7PT2lVAUENpf8jZnsTP1joAPZVpCabnPlgnqcgYuLi8FgYN43VO0Lu4zrtaIO2m0p2wNovIqYO4grNj4Lm6XuJV1JbsaoiFXUlIphWZZnZ2dMBP9mlIB3rDSwJms1V3cDjrVGo0G5GO9ukLqUHFKVFNzwJKxMgh54PvYD4ZKLosATS8ML3CFTtTJ+QqfT4SG5IZycj52lNNX9X0cPGOqGdH8qFcZxTLEkDCg5A8/Pzwln8xPPXaWWZrPZjNGDv2SjLZdL+sgTLmdxeiR9XDu5llh//Whutyt1TATgflN9OJ/P8cSYJjJunYlRFIUzLrIkjzNTkSi7j/Nh9m0a8jfXzXVzfcfrekLeoTQmDnTOLMJwJhu63e4bb7xxeXk5Go3goq6urowbmiq1tlFvSiJ7qYIJUtD4rZm8UEs6TFczkSk2PivUOQZHmS91cbrle9qJFje8hWOvTocKNV/m3wT7ON0IKVJrDM0DLiHfnHS6Qk3DOesZAcu8U+3L6NWSuIMn44gEUjiEBFnC2IZsEiE5fg4O4yzGqDiRixeHNkABdKnCBSLvYGXAgTlCG0L+zZ+HUtnIJcglFh0RnU4HtcX2o+3CazUKAs+ZdWYSZxJU59+WrAP1FhLvDJlnChEoSDJZTgqaY2r8OXH2UOU7U8xMgRsoAoMpIbvXhEotyeiyLFGNRsgdcGnecaleixHBAtvY2Nje3iZaR0j36uoKSnVnZwc/xwmLT7jYI44AsmZc0pEpbxjeizyTuaS7ltI8Pzk5qarq9u3btNi5d+/eaDRCcamUJg4Di/kvpXQIKUUAkU3UarVSrcqQnhT5BoC5St3n+QcI1f+LJgPwAohJtoy7RqFjQIwCXGI6k/UDOuc+bHlwD5F6s4ksJFAFo0F9dyHB+YU6D3HIAGFxUdi2fAzlB7AUbklT+ru4E2nGCDudf5sgrNREu5Z2Op/3lmEcGD0veGC0M6RxcvJEpDZUSs92WF1dHY1GKysrnAxMkEPqhH2g94DIoZ6QZpQXqtGOJFjhWsaGGk1BgnJQsDvypNMmERiCDyybhfpn8i2rq6skMPBDdgHeaVvylj5q7OjiXbDyHY5gnIHvThXN1UWJRIJ2u01bqe/LxN1cN9eP3XVtgBI9bWScB4MBenihwy4ibt269corrxwdHcFOVWo4C/rBNoAVcP2hJEOZ7/j6qFqSGl+WJQJDDtykVjmTeDj/y/3NE+DjworRAg5j7CQ5+8q1sp2AegRGiWPCMEUEIOn09NQEkssmGo1Gv9/nt9PpFM1ODmI8csAlJrOU8mUmkSACmqBqOCcO61BRDoFLjEGh4veQLBGN+HhrrJ3rc+GTciWAQkcBZOEAgH2V1PUigvCxg+YMIDSkG+eE6GEPe0SQNoqk3EwtjJuS8yT4iAHju0hggIwcDoe1uqvzzJl6Y5iJ5Ls2NzddhX15eXl8fAwTjOki2XR9fR20gQW6UqM5mLMsy4g+h1rnmd3hS8ENvHKz2aTehVfgHcfjMdNqS49JA9AvFguE9B0yxtQR3H/XLUYuB9xwW+1A3e8O2MfQzWazg4ODtppzMvWEBUGZvV5vMBhMJpPj42N6UzHCCyn5s9L85Dwqy5sMZqggvi4tWYNRpvAcZ+P09BSoXUvNgNdx1BWoxA2dLMHkcgLYC3J1NnAhVLiDS+nZ8XIi/8ErB+hDHgiDBuXpVWfW2UixUqcZJ0U01f4H1GvYFEl2oL2jUq1c02o5JtGRa2cNEl7Ik9J1DkMYSp9LZpE5+tiqaWwdntKo105smsnNfc7OztgRfmzyECxyhHfdVjcHPg+rmuZXhHji1J9koTIOzaTDk89nsj7wGD3C4EWH/n1S+Ysy1Xo2dbEdSolpsGzIgliqvN12oVDDpPfoeunll9+7m99c7+n1e7/7uz/38Y9f91P8YF3XAyjtmsMDYY3I3fEhy7bnREaVmr1t+gc3NHQcI4LjA9csY6ZuFrjR8/l8c3OzKQnGUJY6aDL1a1uSl2uo3CRTmSS2FtENg5XpdIrsc8gMAH+xYUDASESqza0yAo7aN9W1DLS6UC2Ow+Vl0ve2raYOLr8gxmR6jDbTtZrrcDcKkubqFkPqaqFqJKclmXAi/aiR1MY2pdFTFMVkMiGEhIZwRMDDkQjY6XRgEEEbhlawFGZuIqJQOxAUguBoAR8wVbRPpN4fnjiTIjEOQyvRm4SQQBUPCwo6gd8C/0G3wOvk6rZS1zVAc02duO1URELJQJRCsZgIqVX2y7gR5AVtcOdI2qiYOeapnJYHB2n1okrlvdwBMmw4HMIsPuGyEwL+gH4z0HGyLw/QbDYpgwXHr6+vmzBbqMSYJFdyBEOpn/BVq2ovafIMa00/QHYWT0V+CAPOZyKCkjJWhZNJfCvzlCC8XO3y7K4YVxVJBwF7NSx1tIf8vtRqkNNCvsFcrU1LqRCsrq6SxMm0Ej6u1F2ToymUg5i6W7xXrh5InFSlimNYISYmzTsyC4YvXm8+eTgEnG7BUcCf81L2TtmetTI3ONOIcsDA2QMsimJjYwMQz+nhCEBEOA87Ipyg8lhuD3Ph5cGS4w64E/wbcVOvf1+MhqvRORbYO6DJ9fV1DrQ6ifKHUnXhxVnVaRIwZyxnizE3Y8syI5kVQncuEbRQ1J5DnlzY/D2u8v693/3d9/T+N9d7cf3Gb/7mdT/CD+J1bcLmzoleW1sbDAbdbrfX611cXDx48OC5556zExyi1iLCBOHKyspgMKB6mrJQrNqKGgTDNABlTEj4yEOasV5UAAAgAElEQVQDyGQn5zUAjrDy2dmZz7hMRRhFInnoSkn+2+l03GtkOp1yz1AiGjlYbakV5nmO444KoG1nprZvRNY4xF10Ukprw5U0ufr/upQB8ilT9Q+YlaOZYxrz8Fjky3C8VNFGrXIZ5zY5+EUklJFZJu2bDaSYhZQrggZrqhN6Q71GMmVbYngcWXNGFBMUEfTYgDU0DptMJlR0Var3ZHhnamMDHOFuRDzJ6yqVBGlmlECe8ZMLh81PR6JpasqEym7o80JFrICtwWCAql+mdiZANL40XdVNlfLg6jiFkUFrt9sI76WTRTKD3aEnXIwzc4cPsFTbkhAsIIl5oeoxkg0ajcbOzk6v13v77bfptbO1tUUMgeUH64/aF0mZIELGx6T4XF03Wc8WzwqBMNYPBGet1F4HHFkbPHme52QQYuN5wbbUrzKVN9UKmltekROG9UybVsaQNclewJOhJK6QmtVjmKlOwvFra2vEsgmFs3rZXAQf2LNQ8lmWkfDALnbNuxdVrd4BeIb4P6Xqz1IUxU3Y1yGHIaR7ymdwb+q6Ri2VPmGFyndM3TljB0+gVMtEQHOZdGgsH00ajkRSNyIIrVCkD7az08gdSACIhI7lryhMZMk5T4k7+GyBanU2EZRnrsZUOH5NtQwtk2L5WpVehGvwTonewDv4SPfQZUp9phaNSfEae6+vG6Lr5vrRuK5HYWumVmDAi7qub9++/f73v7/T6YzH47feeouPcY6YjbOnXquuGZRmSg8nFVxIxARCDnQymUzyPB8MBsBKzjKXdDjawjni0Fit1Gz8Ztx3lwcdHByQVdZqtYARQDcgAkaCqDQ6MkAl6EDqFYy05vO5hX8bjQYE1dnZGQE+yDkOUGhR7u8KD4e/yYjyKQkhBIDG+MGyhAwS4ODi4uLs7GymTol1XTtbgEflK1rqTslXQ1tS7eGH97t7vgAZEUENDQaeoodaKVAYQgykeQXoFogEQHyl0hymmCwCsJoxBCqGwFAwzXA47Pf7fDUpqqB/1+HCg0I814rxtdXbo5YGtQHiYrEYj8dgPjfoa6o3nf0EhqiQ0JVlUFnepTRWwHN8L+9rvOuEAVAXsLhQF+kn7zKYmLYkbMx1uaWKJyiEPlne/X4fsL6xsfHw4cPz83P2C24eNe8oUF6plXMI+qTsHV4cwx4R7FMWMCmJkNA4AA4pwBQyCOxEYBl/wmJj3IBxbVW8MVD4hHCE4/H44cOH4/F4OBw2pFrfarUYbfArDGiucrSI4MWdIwgmY1NwpLgCj6XLYHJWQIXyeO5c74wdJ1044Q/kxP0ZBLxfC2kZCPrxIsInG8PFzmJ4UcbliMhVn85QA/0J9KPSiu/NTNVq4cgaq1Txlspb8plL9Szlv+YdWd4sKoNd/y1x6jopsgkpuHE5bs4ShUFvSo+TjFVGw2GNFOindW/LRFLKZIQLgOxT2flJt0Mp0S7+90bV/Oa6ub7363pkg5xriAkn/LSysvLiiy+ORqNvfvObWJfj42MwB2iDJtSEy+PR9mvtdpvICFqDHIUYDE43B8HJfqMvH+dpLpU+p6ZhVsn+JlbFCcgpYwaR4pWIoDjgqaeeokfOysoKfYR9gnPEE1ybTqd43jP1H7NL7cvVKgayQCgsJeQN74gsy8XFxXg8xrjyFnXSmA4fHSsIZLTbXSvjk/GppYtOBUmuFjU8TFsKQQSLDWHn8znfiPlhWDAzpL0SCnfROsFrzCpUQUR0u93Ly0tyGxzsw1gWysyj/x6MaUu6zSgahnJnATQYbOKVEEjMHR01WXUA6OFwiCA5iQd10iORqgXsSrfbHY/H5lpMstrDqVTJ21ATIwwqYpNZlo3HY5TJm5KidG4oLB3/dXpfLo3lQtrsZF9wra6uOhn0u13k//FScyk3hehPaDA/PzCIAVxdXR0MBtA50+n08PBwMBhQK+3UxqIoDDR5EfyBXEpYpHyAEs7Ozhrq38i0EusH9oEjXXyWKSicSxmbzzjsjiPhRD2WEDPeVsMk+HiWCmfO9vY2XiU7EdjBApvNZr1ej2ej597R0RGlUUy35YcoAKol+cQqAupxRCwlqw7igbpjC88ljUTObqY0D04klhZrg1wRJovR4Ljj5AFJkx0BE59LmgqwBXgCkRO4dyX1Ut2xWd4m9vguxo3pA1exy/xbkC7rhHr/LMvQO8vULzFT/0n/IU/ICt/Y2OC8Yn1aFoopdnDAu5jUz3RV82AEpoCDnNLMtVWlCinJO5hjK+ASPY8/KTGFlKFqlTayxi4uLv70T//053/+55+83W6um+vmup4cSk4le8nL5fL4+PjZZ5/N8/zpp5/e39//0pe+NJ/PDw4OHKZxKMedPELdDsCjbXVlDZWMLNVaJiIox7lUK16ysDk9wWqYRoI7HGF8Mh5tzgb3UCRJ3xGxogbfK+pdS80sPBMyQFgR6D16Q8O02b12gBUwCvkKiHT4iR4hRMyJozXVlDxTAbITNMGXplQ5TMF2rorgMZwkxMNwWLv9Bg8GmdqQGnYuvfRIonI8A9FnY4XJZGIe2hXTk8lkMBjAAQM6YYtHo5FpYObXusTNZrNQx8haZTd0JsS0nJ2dYdguLi7oe9loNNAuJscL/NHtdi8uLg4PD4HLpXo9mwt3ni5fd6W2K3mifmr2iPXG+JME6WQDE96F6qX4irYk98HiOA+hjjigPaaDYB/lrpHoBWZZRtbHk3eZkx15POchHB4eUhzNXGdq7GQkR8rH9vY2UebRaPTqq6+urq7u7+/jZdHsPiKYF0beU+9kzVxa36wxBpbNxZ3TdGHAolFOKLPTyZeMNn4aTgJnAruAxQ+247+4aqwHUhqc4cAU4AgRcqWIvlJ+pDcmS8ILALlcFy8zQbV0ENkvLCcgHSsZtGdYuVSDFv8kpQALKdp4TzGqztCAi/Vn/DHPO+TrTPLdaY61YTGHyVLNb4yf8kRp0qsI+n9lZQVWHlxoMhgemuPUbXW8ntnCIdLap4qlG+pEKSJXNSFvwQtaMJVvIbDgvHDuw27ikAdW0sJnqU6t1n63nKqrOQkj1NIAyZQyBJb9mwl531zv3XXv/v3bTz113U/x43JdD0MZEaurq/1+fzabTadT+h+enp52u93d3d1Op/Pmm29y8sJs4UQCDTM183X80bwRF6huNBoRLF4sFhRwjMfjtbU1Eu3xp+HDHJqpJE2Mui/gsqFuh00VIeLjooGCFWy1WhsbG+Px+OjoiFzvtsS6sX9QlVQdYTDAiLwLNAmIDTNgBWOnJxLxXEma3mKQQK4ErHlmhvTq6moymUDWOoDlQDk4w668izP4Cd/V7/fNNcJtgAA40JdSdPNfGS/aoDLRGHJHptoSuiP/jHfhFbrdLtROQz18CVOaSAM6rKysHBwcAF9Go5HzRO1R5GqYCX9jyA6CdPVSmUh8Q8kQUfWAmI5dqm8kIbCm6s35LQCdh2EomD6eGXWhpWqQwWrkEvDArnugxgW8Ukoej7d2ATsWd3V1lbVXza/iu1/YXWOOECfakEridDoNsdRgpqIoWDyvv/46POWdO3dGo9Hx8THzRTGs448Qh71eD98AhFdK6xsAbVfQEUbeqC1hBKbGkcdaObUopAIIQD/wvr4JkMJxZ14ToFBV1ebmJkiRXBSSmxnwUlJKaSGOvxfEk4aYq6oi8s7/smENYqpEAZsnOTs7Q8EAEahOp+OUBrYSfPBoNGKCUo+OvYm2A7PvtV2qrCcU9SYBwEmrISFYMlX8YA2JD7iQBQiFT8g6Z+WnoMq7m73P6JE4C4ybJx0X2U3kj+YqALKgG0cZnjAbBE8mT5SAe73evXv38JARsmCd9Ho98LfbgZLiYm1RRxWgn6lpIzcU5hsrwDCSME3Kb0P9Cxw/sSFoqCPR32Qm5c31Xlwvf/SjD/b3f+qnf/o/5iZf/Mu/bDWuTRLnh+i6HkAJbri4uKDmgCP4+PiYdLQXXnjh4OCAgxUQQ9QMPEHFn7EC5ipk+CEkXArqf4MdSbODDsRfB2/Z18fhrus6VaxwHARg5xJ1bohtg/RCa5qkJe5A9pgjlaEMLUzpUo2wUeyLCKKEhJPAGdi8EJrhPMWIdjqdXq93//79w8NDxE1ApZ1OZzgcbm1tjcdjIBfiHXSAwI6GbA/xNYgZ0Dm02VK68blS5h2tLsvy5ORkLiGSpSqdOdmh/cbjseklHpuhzlR2CtXBw1CeeXl5SeE8gLVSV0PmjgmqVYwPFcETok7HfaAGK7UsOj8/pym8R5jPUyVdqaciEAQrVan2gl9Bs+FILNXzrVBRUa1iHTINMrUUtyUrk+bO9h/ypG40V2ak6e1CtQIGNLBu1DcAK79Fqz8RUBpScwfC36UkroDI2HheKlc5cJ7n4/H47t278JRY9MPDw0g4bLCav8jgMpcyPwuJQDb3ZMs4GFpJzcox61Dok6WVqVU6GcCllBTBMdRbVKryzlRKDzHJlgR5s/Xu37/PhJIUyFQ6IbjT6QC5cAVRoHQj0JAzU6v1vHk1bmifhzGhRK8sS2cOjEajhw8fFkXBiVcUhclOKvZ42VRB1uvQODtEYYbSVMxBOpsiPRL587Z6aBkaEvQP6TkwvCa/U9LU//VRwC4oy5IzHP6eFwl1RzTLaFf86uqKL01vS2ScZ6iVbMNGYOTZQViKtrT3GRDLui3Vgouj+OTkZDAYwE1az4hvd+IEnpu31Ww2Y/0wDkvVHWbSJK4fzUe6uX64rlu3br311lv/7T/4B//yX/6r7+8Ov/3b//gzv/zL/2mf6kf1uh7QXUl9ptFoDIfDyWQCncZvb9269fzzz7/zzjvj8RhzjjmBLMRbdTkIJTUWmnGGpfP8HJfsdruZutO21K4t9ePT+EuRyFMbu9RK8QaP0lUZlHn37l3Ip7k6NFgWhxzKZrMJMcDxas1qcEMhAR3TaZQO2B7M1deuUmX3cDgkCPX2228fHx9Deh0dHRHBHA6HTz311GAwAPwBEEOsJ7eq1QyDn5A8xyNVVTWZTDwaIPWG+nnATVLdwhMSezIvZXBv3peRr1QMBB/AfYgucVu0XZgaTAihNNIQsdY8M0VLpXqmY4ogU68kUs3/mr+pVAPRkpg2mD4i+JY0U4IhAv0cHx875EfqrVMeiawhjsOEGlc5VWMmUVJ/KaiOn2NcPe88gHMqvDKJnkPU7e/vM7NP3mWsKCjSUA0QTI/ZONhKEMDu7i5/wlNNJhNi0Lu7u2y6o6OjUADddBHeYKYmQKxPPxskEIkWVoTJJEVUKK3ZbomXn3cfqLFMmqwYjjjpIks6sxOmcFY0S5HkmbnEjJrSjKTIrJb8E88MBMyT5k9MIsC0rut+v+987qU08F23BBlZqyv0bDb7+te/7hQdI+NGo7G1tZXn+YMHD6jYs2pmimAYLj9GpXIl8lLM+/IKV+ojkKsSEUqef7CD+FWlJvXmsNOVtpSGKK6URS1MsuLcLpdLzmFyZO0aMcK+p8ecqQGsw9FSEsTWWCwW/X5/MpngmEHnW7zTt9ra2jo6OsqlOeUaKYa30WgcHR3VdQ2FD5lKRSP2heQKNMwjiXd5wL0elpJJurl+2K/L8/P/7rd+KyK+D0z527/9j1966aW4cSq+t+saqry73S7MU1uqPb1er9/vO3UMgGWGDNPFvzNlsnPq+ahtSn4FAg87AUTgALUEhoEsyWrj8biUZEYIb2HtltJYMXjKJDTI//oMdbIaz+xyzouLC3xrBz2tWxkReZ7jNzsk5DQpB4ipMG1JpA3OsqlyzqIoHjx4AJeJOYfqc8nF7u7u888/35BGEplk2JuIIBfKeWwYpFrCNJAHnPUUZIA4Z2qKA7QCKxNdCoXqlspuvEq6n1VJEVWoAp04qckYvsuJiQwIlbkUrNTSIqaOmy/FWrOczAjiUaSpfjC1WFPmIlNAnDsDl1P6kEdNa8/98AspAmJ4GNt2u211dJCxywL4E2rbXcrtCmLI8lrCgX4A1kYtWYNGo3FycnJycgIKefJGo1TW7Kl5bhY2Zvv8/Jy0DV5/a2vLU8+sNaQmQ31YJFXeaX9zIvjMSwgG4Q+Aj/12wAhGjFlg4bFiy0SwJletiecC9ACGC5XuhuqBmFn+zYKBlpvP59QjV1XFHSjjjUSuki3P4un3+wZD+K6spbnUCjNFWvlzRoYRw8EIBe5brdbDhw/Jo8WZ5JE4UpBZ3dvb48UpLQdW1nXNSPpoYjcxFE7D5edsT9BkpsJnJsvcJLHpPM/BuJxLrqR21nIkyJUuoEu1V3WeN7m/tfqB1YqkP8akAj25FUcETCpAnEcl8E0c3Ck09njbklmIhCsleFVLtCjkjF1dXVETmUvknBW+srICjOZsZL2BFEkw8IzkeW4YSvyHSNRNvPuH/fr13/hNMOWnP/23/1p/CJp8/fU3vvjFL75Hz/Yjdl0PQ8m5Wanh7Obm5q1bt5bL5VtvvXXnzp179+5985vfPDo6cjyLCDJ/iNnA4+QMcpQNdgquCNMF/wHlgHOc5tWBDsnNIr0GV75US2gCi3Ab2GYYtVwKgqF+M001jsOk1Sq3NNGSZRltNrJE2ZjvytVwLFPDG47gWn2WTQ8URbGxsUE4e7FYvPHGG9/4xjeAO1SaGyuvSJ346aef/vrXv3737l3k3KF5MjUTj4g0e53z1zgPbGHIRecYw8S1tTU66bnw04d+kSiVZGrhTXG6YY1Zn4jwA5DhBASBPqFemGoqB8GJ3NXK0sskLJWrCsTiMsvlEmaaSPdjakEmP2bqOJwnakeZ2i1STICRvlJTY36C1amla22gya1CfYAa0hT0FsjVKBwYx3LideZq8YcbwLqiuJjQpGUEtge9J+wy+wOlNBEZEGQUseUMCOXMoK5Op+OExclkQt+m+XyOjABrm/S19I2QyCE1rZaofsj3A5uWqmTqdDqw/mnpA9glV0EuqQusWBwGZj9PJGn59hUJj29sbJAdAfsFFid9AuTEk9htK9RyKZMY06p6cvJ5AAfLKcW1ELeu0PKaYfRqyR10Op3XXnttPB4ziaUa3LNWOcqm0+n29vbW1tZ0OmX02MjArIiA0o4EV62urtLRKkW95tj4ovF43Gg0KF2vlF7JWYc36IxDFmGahlEntTLOZGi32xwv5kcj6dwNsnf4qE66TjTVHt3Rbd6OoxVqnEOGP6+VVBARnLrAR8aWEYCdNaVtRwIkWpYlvKYRMwOOS8zL9nq9hRTRYZctkUHG7cnJCbaAWbi5ftivX/+N3/zff+93/4d/8k8+/elPf+9/tbOz8/rrb3zuc5/7nd/5p+/ds/0oXdcjbI5hxq0nG297e3tnZ+fBgwd/8Rd/MRqNDg8Pl6pAjIiTkxPMLYU11FdyN5OIqYxZrcoVH+WcKZWqOAGdYA5MuP82pNpDjk5KYqVQqdfrgYHQACLOxQFNJWyISKC2YDAYUH5YqI0K7wXQ4UlCIjJAio2NDXNLThcjx3+xWNy/f//NN9+kNgLygNOTXtjD4RCh+PX19du3bx8dHVFYHRGQExHhJEiSjQCa5pYoFqHTTK/Xo5fGldr4OlDudAIYF8iAlD/2hfkx/Vwp8z0iXJGKY4AJ97AABRyRr6W7XqijBsiYOYXuaqn7EX4Lc+HHLlXGBIiHSnSunkegoWYkLrJxLBuzxEoGeQMseGumL6SoxzeyRCHOnTywoo4dtm21NJkdQKzUS8nZw+Px2DkbT7gaia4hSbeZhOWNVuHeQqkUJycnJP5ub29fXV2h28W0jsdjVoUD0yE3hj8/PT3F5HtjghsWUgjy/oqIsizNQ5OzC+xOk/kaamkNps/VKYc1wP2dCmmNa498Wkvn+iR8gIXEvGolsUC9m3ScSSgXzyFLBHHZpDwt/7V2d6vVuri4uH37Nr7W8fEx2zOUOZNlGTulStpxQYa5DWyWRIojKQAiJ8QBfUNJxjNXXTk7guOC+a2kENRoNMDBpg9LVTRaT4e3wxXkhvwQqMdZlym9oSXdcl6cIV1KpJZTjrtl6mbEJsV/4F3olRoRUMjc3IkrODMAcS+eqqrgHVkGPmrY7MQl0r3sIVpV6yOHm9gFuTRN+QfCFC0pzRWPanrcXD+k16//xm/+zu/80+9dQ/6ll1/+3P/8uc997nPv6VP9iF3Xw1DmqsbFOI3H4/v3729ubtIEjKOEXOl2ojZnqgPDQAjDLTpCWd6RRIrN3oFCbIew35yYFqHwQewwNDFB+FQQFbaklrY50IRnc+C4mRS4ZFlGYj6HHTyoiwrN7ZFB5Wz9LMtGo1Fd18SJgEcc8d1ud3Nzczwev/7666PRqN/v53k+GAyIgF9eXtITudvtUjmxurq6tbXV6/UIEFvZO9RNJ1RFBOIBh2VqPcIA8rK5mhP6pC7U9nepYvbJZNJSJ2hzlkScQfaOLa5KsDpkNQmYUj5fSaYHWzgcDgmeMmIovFDaSQyUyXLGKuAAtAcuIRECEpqQH3aIHwIKSQMlx4uFWhQFgd12u018zfiJcYDWGg6H1JONx+PDw0OUVnOlUbKi+EPWzFyqkLZ8ZMFm6tND82vSQsA6rl5fLBbAboOJ73bxt0R+O50Of0XMkRbMhFkfS3lcLBaj0Whra+vWrVuXl5f379/PpfzCoDFrTgp0QIBSM9BeROAMgPP84iDCSgXyABHzwSvq+8LqYorX1tZobcLNrQBVSR+A/7IYmHGSql17x6uRtwrBNpeWEycGPPTm5ib4laGulBcB9vVaraqKN3W8IlNCjtsaEQ145513ELDEDdja2mJ4eVPWOafHc889R5ZnrRIfDyNsdKgLIicPqx0W0wwroha8LO9uJM07kvLB4mfLt9XpG5jLw3NE2J/HjWHo0KYF8PFIrPBaaQMcON71lQThQ9iXI5FqfU4POF0OAXuY8Iu47qRplknGMISlmVQC67w+/83zHHb27OwMrQn/IXPKkua76Lm1sbFxcHCA3qpzcO1731w/ntcNmvzrXtfDUDalDWEekULIzc3NVqt1dnaGv7tQX4e0DJlgCtQLXq+PHp9fVtnAxtRJqNEyEJnKRGAplsslKiqcIIVa/7XVlzYEvOq6JuOT4kHnPjrBnwg4sImgbSQy7Ng8sEihbtQhLV+oLyoiXecBpWQhvc3NzdlsBvIm/6nX6+3t7RVFQc8eiFI4gMFgAP2D5Wu3291u15LdBJ0xxhgAaFGEk4CA4AAeFRBQqGLJcwffDIKvlKjAgINaNjY2KFoCEkFvuEAqUy5/nuT1Gy4w+7PZbDKZ8AqkMZCiCmPXaDTQHoc3AkFWUup2URT9pnOpTkYSfIcgMb7EtlHbDuwzq8G0YmspDyIQiQif8VmeKNQwTaQNXF1dEbNjAAlAwy3BKEOJYbMR6reClan9mRqgP+EyJdmUOiM8E/QkDgAZBWXSuw+gDLyAEl4sFmRMttU+1FbcBHMpVW1uYsaIqouIsMh8uhlNjeOP1UmsnAAoOy5XAu5jgV1OA0dCWZZ4TaXkr1lFTDHTCprx9ndRC9sTjo09y1sjwu9DwCFg+DPmhQi+8zLJMKbpPH+7tbXFum1IIJaFx+B3u91ut7u/v8/3Ane8AHA+Ccs40s2W5IhgTFg/+EUkKlB247L6WvF9NkWdaF4iSkoiAfH0FYmJ4lo7jZvhhQBmsjhpWZCcNpmyXdlBzaT23EmoePjIdbGQeHJPFkSyV6OzHdhWjUQpqVIJF+PDiR0RDALJr3Vdw8TbAQ5lRXMolRLprJL0XzIQaHzw5L12c91cN1dcYy9vYBOOIL6vWwZjPziRz87OhsMhgQ/4QnOEuNHukAbNQPQQyxeKfHFQ4hBjV1algE3o5+Liwg2jM7U2jghMIKEQEDD/ACIUKlnFQud5TmUGcWobV7iBUHTPAZpUq8/ghhwAGBdQBWfx5uZmqbIkcBLpUFimZrO5u7vLe7lims54s9lsc3Oz3+/fu3fPcVVE8mqlkNLYEB4XGJGacxvFpeSBAOVYDgxDRGBCaqVeLZImb1h305bckPHPkyIkBzHNBPuUD5XeR0Sv13MqJwM7GAxYUQ5mNaVUghXEpDEyZkkzNfBwOdequjljhp2SD9O2Iol4c8mwniwM8hxqpVWYteXfFCUYErmtvHEquBznBIgPkIU0NZLLFCBOYdl3u0w1MXTNZpNKKXA56QF2wEjnzaScBY7pdru0jYFWr6QFCHav1DXbCBiY4lQBO3gEZHl9mFeGEbxC7JvEzVoXNwRy8TppxJPkNpN2mRpRtqUCBjadq5cVPlX6JPagjK5YoizOkOcJfLE4A58fj8c8CR4RS91ZKxGRtnLh2ElTDvBAQOGcfltbW5ubmxTYsbzd1T2kKeEiOSAXS2J1dZX4bDo+gCGXb1fStmTBT6dTStHJQXfrRXw2HphbXaiJNjx9nufQ8HwGx6mhVmdg8RUJ5ab10WDopcrhGQ2TkSxI3ogpw4WgcouXdQ492bGsNPQQOB4Bf2x8uwdziaPB47JlUAZtS3k0SxQDqJkbDAa1lFlZPLh577rdbq6b6+a6npD3Uq0XYIBCzBwpWS+88EJd14eHh81mk5AuNtvRZFIesd9Y5aZ68YE5yIrDYFg8oimNCdL8MwnYwjXmqg3M1KoRnoMzBaMLtYBZpRSUJ+GIxFimLAtnK/Ey7BzHMRiOTPDGo6LE4C3byLmUnzF7rVbLeNE0G8doURTAxIODA35oWrff7+/u7r799tstKWgajjgxwMcr5z4RRp/R2GBoY27Oh0HeEJAIR4fqiC8vL8/OznZ2dkjlXC6XIEtGDNNIcHmpBnE8EoVTtdL1zIkylYwGdTbwZP4uCCcbXQAxX+FsQsbt8PDQ8TKH8GoFkZ0TyapYW1sjvFurTjaTnCQkH2wfaKyShpGZUdZYq9UiFxaCBHqJPAoe2OxLLpV4orpgL4wrDCtwqpQU4hMu0o5Bk0BG8o9fe+21k5MTAuIkdJp+wz3AsrJamD7kKtk+FEnQ6RSN6L45MWMAACAASURBVFqFFKZmTb3bcwupHpowI5kBDilXhRZjyL9JULZjhv/jAg4wveve0uA+sYVMpVoRQaATmA44SGvguD+EH27hLOnOZ/AHiMmS7gb8rYtmVtXbkKvb7d67d6/X61FYQ98BnhwXYiE1CUbMJYZ8NYMGuIeYZFmGVK6gq0kdYcAB8UauoQob6tgiwlEUhyCYO/wZ/4P9zhpgsTXVrwh0yyPh2DQkocAWc7S9lmQB3lop4SdSbjY3N8nSYb1dXl6ykLwO7Rj4KMa/5clJBrWLxZHbSjqJNxqNw8PDTGoGhsjoWsAXNNUENSI4Lvyadnc5qA8ODt7dqt1cN9eP/XU9wubwQBR85GoYfXZ2tr+///TTT7/44ot1XZPunSns6MhIrcT5XGWPRaIabcbLnJ+ZAE5hQrr8G+4qxOVwboKxclUeQKhgyPv9PvHQTIo2ofANf8tR699y6OcqmsFShrQ8HE/0byMC2AHlBkELDuC3cFfT6ZSELe7c6/UGg4HzIIkNAWKwEP1+n8zLfr9fqX7c0wH9UKlKAI4KkAdVTLYT9owzmjgpAw7IxqSBOaAAF+of47olg2yGi+gex31D0qEwlxBCZCJmEhy+SBpsYp53d3dPTk6qJPGf+UXVz0lv2DwoIjANOXCu6wol2PFswJGWJCGJBkKU1tKQ8vID8fNXBwcH4/GYL+UFbc+u1KwPpwiw2Gq1rhJBe9eIYBqBREs11wGOsGiX6q755I3mxdxSVye4mVdfffXBgwe9Xm9nZyeTUCgTZ8B3eXl5fHwMMXb79m1QOwEBkgr4CkNwELZFDFy/P1cRd66KJYMGOEjOAXCzqW67SZbE8tcR1SVMjHNSixTHQcV1TP20Wil6ZVn2ej3is5Bz4BW+l9XrIDL7zqEGNgIzglcZik3Xyim0r8X3smXYpGyQOinKBn1CyxEiJ+nZtVaFymVq5X/7jHJ66DLRTA3VSEGtAZ68C1wu01DVPOmb7E14yqqq3CCAJzTZDBRmYYMLmSaIQPt+XOzfVJGNV8glEMaxfH5+PhwOzSkWRUG+IyIAcPOs2LOzs1wKVqRURgROEZvIebpXV1csJ76dy9h6Y2OjlnQGJwCrvVakyFwvYJpRgtR88l67uW6umyuuBVDevXt3Op0eHBy02+0PfOAD/X4/IjqdDkfD1dXV3t7enTt3jo6O9vf30ZHBEpObD+C4uLiYqeEB+UZVVdn8NNU2zXlsnJs2mciP+TSpJHoXEaRGZdLK5s6ZJKkrdZp+jB+CrguJmCDUt7GxAYYjHb7dbj98+JAq7JCgTKgVOIaHMxEz6XAqjYaXy+Xp6Smvtr6+3u12uZUDoCCnwWBAGLdSVfjGxsaKurBUKhgPGVoCOuSzgykNr50FlRJORVGQZcXgM7BEhBkKIsgUwrdUCMWvTICBqGALIDZOT0+JQ1GOTTS/KVnQTBUb4BUswa1btxqNxv7+fkRQrjRXtb7ZC96IVEVQ0aX6ufuR0mBlSzpH5m9a6n9YJ23lU7ACaN7f3+cbqarO85wWRLyRE7OwzdA/QEkgwlyiSAyyGWI0w51yZ/xnzukJV6aW6+C5wWCwvb2NWHRVVffv3y/Lcjgctlqtw8PDsiz7/X5DsoKFqpG63e6tW7d2dnZOTk7wdowwWAmlmqbgdwGSGApcJhfP8hjUSbDr7QeGQEYmEcQ6yS4IBS4vLy+553A4NHNvPptFDi9LIQswjiUHq+pEWD5mTwbqms1eqk0Rk0IaSaYSNHh6EHOr1QIDZUmOHcsGdvnk5MTfxX7nMThk+AnJFXZg2KdeeNPp1Jmg+OGZCtjtYPMA1iWtVXqIU8cOGgwGyO/nqo7a2NgAB7OWXBjHeqZsiMcmfZOjaTgcOlMl1BmS7cYY4iPhTR0fH/uoqeuaA/ZCXUzLsjw9PUWPItQplPFnZGjKxUFdJ9pDZdIZNYWquG0cQWycdJa5Azz0SqKQHwpAsUgydUydTCbgyExCHzfXzXVzPfm6HkDZ7XYvLy/feeed2Wz24Q9/eG9vj3K/ljpPbG9vP//883VdI2PrthCOg5RS3sGKhPpbpBwARwNg1OfalZpTuyIVI0TcbTqd1hLsNcdJAN253j7BTVVGhEs0LAYJ+QoB2W633Zw3V12OUzN5EjxvHmahZhUwIoTdgV+1NK5dMI5eT0qvEhME+25vb/Pk1F93u12qT0KtcdLoXq6uQoW0jcy3YZYaSQUPhUHD4RBwsFgsIPNqaTLXEm+CHHLSlet4EHHMlCqaKVZl8xBqPYfhXF9fN43EGtjb26vr+v79+4T/KKoNNQMEQTqY7pFfSmk8lJDXarXgfQk7EsUO9d7AaKGHmhJCYC9GGyvbbDadcpcpd4JpNT9Uqb4kU7duA32+eikhpLOzM3C5F0mmaLsp0idc7IssKTuAe+71eh/84Af39/f5wGg0Go/HzO/u7i6QmlSBsizpEjQcDt///vfz1fDZ0O2r6nUE/muoPw2OEO4E/2YWIPOYoxSEZbpCHZK8EpZJfwEqvunGiVcJWb5Mehww7MZtvjNVd4Q1nYjCdMzVgsgMKOB1ob6vLhHjMGFruC7NtGuVFDWHdC6BNaATPAfqYKA2+WqSAq0ngDtXqxthpqAB48nILNVOyRgol2ZkreIh76BcTTVbrdbJyQn/sF7BwcHBcDg0lM/VX55gDlsbbArEZOSXyyWZGN4mpnJ5wp2dnfPzcyodCZ1zDjhhl/MnU+Ijhx7uJTie5Ese4FJt3HMpezC8LDAPPk7peDwuEi19+FfGcGNjA0nXxzaLT3UiIZdqBBARKCQ8ea/dXDfXzRXXAihfeumlTFUIDx482NjY6PV6Lv5gM3c6neeee45Emfv373PAcTLaaXYGDwculIBV60jKjIhOp0NQplDjHDLWnZeJ+YeVgbtqNBrIUhBEK6R3CD2wlGIz93etBmciFQ90kXHElvwtdw0hXyfNxstUjjOZTHg1Asd1XVPt2FL3mtXVVeL1m5ubsG4cyuhrGJEA+yhQtcUFYDlCxFvw2KHYfVEUrgHH5PAT7g+twtyBDum6RjM6RpvyT+yKY4KkmQKCIwIrnkoMZkpAxN4Av2azGXUAi8UCLe6NjY3JZII5iQgq1ieTCc9DXuZCgupw2Kenp4hLU1Ja1zX0Uv5oB45cfaIhjeBEodNAJyAhk6ChTnoLKST7r5xSyXMy8phwuJNcmosQOTDooAGKupwuDMTHypJuyIJ3TPkJl/NJWEt0dWde1tfXn3nmGTYdjemm0+n+/n5VVTs7O4B4wprEEAeDQbfb3dvbo92AB5CggbNXXYrLk7tmAgaRrAN+WycSoaFORSFsTQwBr6zVaiHddXp6isQg0WqWNCIvMFu1WjyT+manyFLhno5m0jMdD7CSTBWJkg6AMghc/Aq+PFRsx+gx+0RU5/M5LTp5VCOVWqF5houNv7a2trOzw58w4x4HKHmfezgnc2nHEorlZRkf0Da+FqmK7KMVNVEkbkAgyJXLHIb07Ol0OmdnZ6urqycnJwRDKDZKjwvQOTkYofwE1kCn02HvLCVXTv46HgifbEqpvtPp8ITb29v2spxdiheKk1ZJCSSNqzSloOTkUZJMctWAA9BDQgrwxLlEu8wXeLTtz5Sq1oqEWL1hKG+um+t7ua6nypvoUqvVeuONN9555x23rYOxOz8/Pz097Xa7zzzzDPlY+/v77HMwAScF4deZeh/jjrvMMFQEUKnrRi2x7oakfTlrsByYk263ayIK5xu6BYU5o5xC3XpIGHcpbpbkcWLVYKoAVcCyEFVWSVM9l7ClyVfgUVq62Ol0aFB2eXm5ubk5GAyee+65hw8f4sFzjBIaI+cdNhE9PJq/EVeiSxtYJM9z1KoLaUGH+pFw/vJscMb+jIPIlutjZCplZ3psjTnm83m/319dXSV5cTqdnpycsBgoWXDWo8/3ZrOJ3CbccIjkgOlEPdEhVLAFU8z4pz+hViNEKKZegSODQFssKyQHGQtFUSzV5flSndxciJpShilcDoXJamkkrah5o60g0qQsJ1NcmTqLkq2YSbibqF8pLUaQ67sylJ1OB4t+dnaGODl0EaxtoZY2fHVRFA8fPrx79+58Pn/++efBK2ReIkDD1mO0gVZzyZpS6A3ccfaqK4eIXEP11UlyM/xWIWFC/opN5HpqvoXtTDGN+WbWJCcGizYUvDY5xxYmBdkOUlmWeGK8fktd+Iy35lIDaDQaiD/wnGkVHZ/n4FpKpb+UggE32drams1mDx8+zBK59VwKiAw7hSlHR0cWuIkIQrcuMWZkmPRa2kyZErVZwyzONKSAK8KGAlDaS0H0NF0qaEK5Rh6K9PT0NFdmqrMy6NXJX9VJpg0/gcgnanR5eUn5NksuEinQXB2tKO2impBTjrF1MIQPpwkhnACgeZ6ZL62qivXAyy4k3+vB4fDBsTeeNoHN3jTfvLGxQS1/URQkjr+LVbu5bq6b67oA5fn5ObDy3r17o9GIlhLT6RTQkEuYZnd316UYx8fH6ABbNRpb1X60gzCgBNeWU4PMG8IWzoGDnGi1WgTTSbWBfiAWY+ooRasu5+Qch/BwvYU5uVJC5XwSCmQ6neZqwUdCOrnhIS/fUa1QBx0oVUAntT4QTuPxeDgcvu9979vf3//CF75w9+7dSv0/lmrd2+/319fXCUbfvXv3+PgYZGBG0y/i8hpPkGENFAhMQ67i03nSc9xgCH3H2WzWlMA43FIk4bDRaIQttDojyIbhcvUAobSI4Hthl4m4ZVl2dnYG5sCQHB0djUYjjAGj6shXKPjOi5yenkIxktkGTbii5kB1XbsbBy5KlmWACUAzDgDPaRGlTC374BdLNdvk7aAkMeqZ1C5ZIWmxcJ4o4/DMRpMeT+dl1qoKqqrKdv27XYTyWbqz2YyFAUoDi7MkGo0Gws7NZvNrX/va0dERMUF2gQlO4Ol8Pj86OmJ/OXEZ3OxQbFMi9l5Oc4nPF6qqriQUihXnt4A8VgiU8FIiPr6g0HAnTGixWZgd5gW+qnxUDRsPzWJSzoTh0MCDIhl0nighsBdASDgMcykKgVzbEv0mYRrFTV5wOBw+ePCAm+CAGfBlWXbr1q29vb1ms3nv3j3SDe3FFdLuYdUZ6PitTXkCT11NwnhyKLHB5/M56S5ObkFTzFI4LCpOJB9oPPD6+vpoNDLsZloNiDM1m9ne3l6qiynbajab0WapVr/QkBYvs3OVtJOAvT49PXV1oMu6mxJPzZTMzS5jhHN1RTfji/8G9GS5cuIRYmq32xwjSylp2F1hhc/UFogz+ejoqNfrFYkUwM11c91cT7iup8rbZsMCk1SxAPso+ubDu7u7VCgfHx/fvXsXTi7VFQPG1VKvcEAZEmKprtAc0LkUKLGXxFJdouFwWy4VNMihx7Inc0mc1FIFgonk3OfCRAEQycfCZBIUI8sHlIYlgPhZJl3LODQxWhzKQBBQxWAw2N3d/chHPnJ4ePj666/PZjMy7eBc19bWVldXaY/+1a9+9e233+bPbS8B1oYpoaITKBzIAzNAxA0hHuDJYGSLoqD3IKMB7OAZANO1+gnVSodnVJfLpXu4wQ4ChXEnOMoZhEbSfM8fxkyen5/TT5ImyCYyoUXRq7PQMfaeFEyGCCPH7BMexY7yeCmLGaLT2u32YDAADUMisuqIivKQDNFS0ksMXa7SXZ4cQMAIswiBODwASQhQfVmSnHd6espzmgIHKT7hooPA8fExbzRTf6OlKs2desi3wMsyawBiCoGJn5IHfHBw0Gw2+/0+hRr/P3vv0iNbml7nvXvHNW9xyYzMc07Vqa5uEg2SLQuwAEIj0wBbM3lA0H/A4oCEZA3Ef6CBODPEv0D5J3BqAeyZBcgD26BNijecqupzycy4R+Qlrvvz4MFa+Op096nqNlvZXYw9aFTnyYzY+9vfZb3rXe96AUkR0ZDRZkiWWkhbyWv1t7vky8gScMDMQX+MGW1DvXba6j7PGLJRJBXvI7EwBNxmbagg5NwfkplfU3sCUAtjToBRlmVTbVfRNFslMhwOWzIv9DLcqymotRBMJLpQPnv27Dvf+c79/f2rV6+oAnz+/DnPgnjj+fPnzWbz+vr69evXRG7Yfx4fH3uTNG3PN7p2BHoVLUTxZTWqZ6Dx5U5e8YV8Xs13oiGpqxYbYphNzCJLN4xhGfKYNFviWajSq9fr6FKYGMB3fBhMEDqE47Iy0jcAOG42m6Tvm+p6gF4C5atTKOxjoMAq86gPaUWcXuBKMuLdqBtqTpnzTxZ3EhjUvtwX43AdrsP1getpfCjZGjhjgE2j0QiOjSNqMBjwmxyiFxcXg8FgNpt99tlnbLvAuCozo+FAYrMDNRLaJjWutUifEhyfeUg2nUn0OReiPDkwQAYh3LndbuFvECxCpYBdUkp3d3ckqVEaoZZbLBbGELCnIEVnEl1KQvtsMrAUebB1IocnBTmfz589e/Zbv/VbJycnb968+Yu/+IvZbPbrv/7rL168YGNdLpez2ezVq1coupAeohxlC3awTsl8W+1YKJfGrWa325FdAmcACCo5KTKALTVMr8m6iPJM0DbaBr6xKApQtanfQq5Pu91uNpvxmnKLbLb4vQwsqegsimKxWFBegLgwIhB7cZ8gcqgsvqWqqul0CmSkqmO321kbYMUtmeg8Bc8pyHHO7LJFOUQsd5iX/pQqlmcAoUjB65Y9hCqf4AgBlHUVpzM3CKvIt1p7CrarZ7Y4P+kqy7LT6dzc3MC4MCX2+z3UIJHSXo18EB48Pj5SCT4cDlFQwFBCDsEKG7Ljqo0LGBJbwgwexwc2UZOLilzdHAJJwAUDAqADLYWAWe9RRKVUg7yImmpf4IONePZyTySvCkYhumP0CtUehTw7i6zRPMoQglVGxvV8RFD1zEmAgdrIQ6rdbi+Xy8lk8vz58+9+97uNRuOHP/whu1ZZlufn5+fn58Q2o9Ho9evXfKCbKbC4uHmPP5Mtz1wD0ylnxiGIeQhetySdhzIUNvBlGLF0hfs3o8kytI6Q9VuqGia3jEXzzR2i48Spg53Q38Xs4hH2+z0A9OLiwhiRaQNcZt0R67LrQg8XUg6w1fCkEcF+AoBGRunRy3lo3hSQHbIgJE0BxRIGOIG+l7MshOvPeNQdrsP1D+l6spS3w9x11j6RvjhJlhlcltBdXFyE8iYRsZLVucHfVv4ypdyqXSjASUMiG/zkEshut+tMNzmyRqNBc9uIYIeqVL/J4cfGx885I2sqKgQbNRoNo0kSrBFBMpTT0cqtiJjNZrkyCUbBSnYYC+4wtHtyXB0dHb18+bLX633xxRd//ud//vDwMJvN3r17V1ePvvF4PJ1OHWR7ZzSFw0FoxggcDIvGfu1kZb/fXywW8Hw8XVIGnBfhXKFfR0Nt4uA1Kb3ESwjFJ7X21g/Q2iciKG2mD02o/QkHD6+bo2symSAKrNSUGbgGWAFTcohCAwNMfVfrzK2awdmohySYpqFuPZ6KjIaLSyzSbcryM6mql1ul1oEUeV02k6FCZifH9yrpdY47MtdlgiUWiLPJJBY/vNCg6OAOCQy4eU56wh7fvGunCvUTdx9qQLZn6dXVFRLnbrf7wx/+8Pr6+uTk5Pb2likE4+tILxSAcYpbSQnNZjdyZKac/RvVsPPeqepwYoHPLKQgtPTQmQSS3UbtEWE/nVJtvj0Hmuo4UGSKutPTU3g1fxEUHZDRGIVRcpLBmRC+br/f4xl0cnLy8uXL8/PzV69ezedzvvru7u7m5oZXgDsESBQRAhCKAVypHRRvkACJqUsoa0jEH8IagpCIHplvG/WR4mNB5NwJE4nYtZDSlI+ysxVkP6Cc33clECiT1dfv971SNpvNYrFw9vxIXWofHx+73S7D2JAtBlr2hvrfeHoQLnJXhOXEQlCb7vjF63CRn9c7Dx4Rzpmss56lvNxCNrFOvxQyKfM4tA4dvQ/X4foa19OkvNlHarXat7/97YZcPIbDIdQdiBA0w5bBRR3l7e0tIhtvDU665eooko9s8RtZ7/LJ0Fpsuz4n4GDI7hn27XY7aEh+v1Q3HcAKoI3vJSy23UZOvMEpAhqAmGTAOUERANW+3CObanFEpWy14ADIFVJLcEX0Pnn58mVEjEajoijQFHKuMBQpJTD0Xm2IwUOci3v1WuQ2drsdXEKIbGN4K5lxgpZIeEEkwOWcnZ011ErEEqUiK27dyc6dZ4SRzWs/DfdNBXEzNdmqt2QJZBcPjjqPZ0idxr+Cn8iRMRnIPHIardUQKMl5pJCIk8nmTwDnuZLDrGfIn6impoukvyFlIdERNmD9yLuuVPjMLCLgSdKxRQQhVlNtP0JOq/gV8E9OGX/genx85PjvdDrD4ZCjmkgpSQDHiGGmOBgMmDaQZ+hua6of2m63t7e3PPjFxQVkNjEbSwDAGhEAXzLmpo1NsgKVeL8w3Agh6vKdISRoqjMkGW3/eQj28VIYPYM/ViJ/C8uIEpePdXYV1h/BxkZGpx43eEReJRbZq9Wq1+uZU3cdXiVXWg8mt0Q5C/MEWrTb7X7yySf43uMAykCB/ICVfnZiEp6XWZdrMICk5uaJvogMyV3ggMZrdQIBkpKXa/oNlBYRAF++BfTMhvmotuCVyp7aWWfwiKBaKxQt22MSxtfxDAucTYzXQeW1h24ymbAKgPjemioZuJqn38gjE7LWcVpSSyQYZYdwLXXKZUxo/MvUMoftrS8P9Ut1dCy/qvrtcB2uw8X1NAylbUf6/T4H/Hw+By2dnZ2x5sli5H8IHGm1WjQXdirHeKJShTLbNHCBLRXSgjjebcfW6lvTlMFbTd29XBPgWpOkNo9WNUHC4ZfG/3JjpJ/Y4zhUOCRInJHPLWT7TI4Jd7T5fM7NsHUiLmSg8B6HYODiMD45Ofnoo48AW2SvHh4exuNxKHAHLkPMoNvjkA4dzIaMHsxKpUVI6PgdvnQvjxgMXLbqHZdn6EAtVVVBHzKMzmS5/gYmICI4C8mFWfPA/g5bBlLJs3J5bYQhKa+J/wCrcYwRTgAjqOiCijOMLmSp7Xw95xZkMOMPLRQqjSfNZ2Lv4uKiVOFqKU1qu91+/vw5+s7T01PDOG4J8WWIlUyyJojMyYj7Ya7uVdtbZWbgH75ub29pEv3w8DCfzznIqb3gRXsmFxKTUY5D5Q1CkcFgwN3CWb548eLs7AyNQbfbffPmjaEYrFJTjlf57KoyExbO+EK1FAajlgoUKkYp1WMGtt5MpC1dARY2JHJygPgNyFJlboJOeQORgSMsinw8K9WOcLcs4SRfdL7aM/nh4YGkSlI/evIDy+WyLmsqFr61FkQ1DDWseS4zBSIT0zI9AJeFDLbWMvpeyweUqcJyqKnukLQG92CBQUQQTXHnROzgP7O/BPMg7+12SzUbm0ZddhnxZSt1OLyNWuywTTmXTX0eMS1bsVl25iEZcCRJsKrMc2A9gg1ig2azSR95vsW/z1KqqmoymfDGqUc0NLdvFDp7r0Seq6HSN2iOMnMQgzKof5VF1+E6XIcrnoqhLDOj3fPzc0iC8Xh8fX3d6XQ++uij4XB4fn6+Xq/fvHnz8ccf84fT6RQygwQc2NFeHi5bAQRwwIBFer1es9l032S2YH7Byq26LI5z1R3bOp8MQjU1Rc0KJwG8yG63I3tO8peAfi3jOo6KjXpzc9px8qFzYr92+zUOY3ZA73qc1uAq2MeHh4c3b970+32TFsA7xgHmif8bKudMKoLmFezU3I+3wB/iF83h7U25Ui8Kzu+yLOmg3Wq1OFo6nU7Ot1UqAVnJ7xOIbyTBqNZVwcoraKrHtzNNKAosaXJy2YeoK2/AfObVjo+P7+/vnfBl1m3U9SSp90ZEuM8nBz+PH/I0hvSFMMYZHiVWSom0Jgi12+1Wau5sSpUpF1kCDvt3JiHIrFL9OA/YkO1fUk03+ICT1dIxS9k+sNBub29fvnxJetpVzJzuhm7+rlLKyPv7ewiz8Xh8cXGxWq3QVzw8PNDUeDAYnJ2djcfjd+/e1eTWFBGAZpDrTobk791VIeHy0dERDQ42chPM74c5xqfVZMPpecWUY2GSCC5U58Q6TZnNJJmNSs75cMaMM8vTaLLISv6BsDBwZvpdCJJktlWr1ah5v7q6IgDjh1BowHeGDsMKVgRhJLcBjjR0zkUpzG2T6K5cYSjMYq7VBp3R3u12LpB3vO2hY0MzqFpnpqfei9hO2TesulksFlXWMCIyo7FC9T1+ovztE8sRQrfbbSStfAIWAfbPqmeeuJbcIEHxpxE2EOezCxGFIt2hMp0FRRm7VdecAvP5fL1eo9c3n8r4Q/S6QD7JqGEn84HD9Ut9/cZv/PpP+yd/8Ae//7/9x//42avPfg638828noahtJUJwV9RFB999BHtOjAGmk6nHAMkg2q12qtXr6bTKcUo9Xq93+8DngpZZhDv4rPtDaWtVmn+dpKM8G38ZLfbgWBIzaAKcu12qE9Mo9Gg/2HKCgNNPCBpInMXES4kNLuWsh6y5F6dTKnJUB2M68R6oYoZfseCNtegQFrABcIXYk5kqdPp6SlnT5Iaj4vn4jPdkA2bIQSagLBQP2jOJJJWPAuKKNggy7zYu00ts6EzAlVVQeax9SPngu714yPqIg9Vl6sfjClEi0HzPuvPa+WrrYJ4LmtDGVVYKKst96q/rrKmiC5y5y2TOHt8fMQApSzLusqQaVPJ3LDxIfRGRJCi5TCuy9PKDdm5Mb8X/mojqwFnUXcyeKpk2Q09b9Dwld07Pv/8c24G3So/NKsaEUiZ6X5O5MDkiYiLi4v5fA4rWa/X8Y55/vz5u3fvQNXj8fiv//qvmSqGxTwd4ZDRTyg9mqet8yyqJ5X/dyOrzkLmSrkmknUHWAeReMl44USEARx/xdtkFoHdjcb4BTCWK9WYVJeXl4wS4SXfS2jH5ES6V6vVKCkzIepXVkgR22w2cS938EZSJckOgs9n8jAChD6iFgAAIABJREFUkXWKsoI2Z3xZNcwHA9ydetiQjmA90hQ73wcwQk8pUSBIIRqRMCDSOXemvd8mSmvfHugQ4BuyWSCgsmEQuhHAKDyxW1b6BbHPNNTeqSX/9oas3VkXi8WC8ibuFjTJvVnPs9lsUGwzFXu9HvBxs9nc3NxwBISo6EomIcb6vtWQl8JXyksO1y/y9Ru/8eu/+7u/ezkYfOuTT77+X/3Fn//5f//f/dblYDAcjX5+9/YNu56GoSTLGQJzVVWB1d6+fTufz8fj8ccff0wcSdT+xRdffP755yAJZENkTIibnc9lO3Zc7tjU5CUEQzPrYFaT1yMbB4lIsxQpJWAufFhDnQ9DTSM41ZBkmTtxY4adOnC4sMObMncVMiFC+VRl7jykiSFmjtRiGDjFpm945OpIdj0KU7hP6ECey5m1ncxi0B5sZSYCW+mSAkpkwKxQLNvtttfrYfBUqpC5yuqOQYr8BIzFvoxgHxyTUkLjVSgfyt3C9HCylmVpzZO5YWgnzjbOJAY/ItD88TZDuVdojJX6hfBPdpCBrg4d2Ln+0uUOt7e3nFWwWVTG8CekoTcyReKuYCthQRhbJiETjOOcUTK2YBXUswYtpXqihLgfMB9zgzzpaDSCIv3wQnv16lWz2Xz+/Dmer8w6F1WElHMhqimpjq1Wq33yyScRsV6vb29vyXje3Nw8e/as1+uVZfnq1avVakVnSEaVyQk0ofS4ofb0zAFQDsutXq+jjTacKlRe7fFMsrDZqv7az0UuPiRgZb7hVtOUA7mlusQzDhgYc1S/ngAkZ23oSASLeNEV/aTdnUmgjpvgE1EBwgYGhD+x0SZT1/g118AQGkGlsxlaRsn9A9lDMSrBMIuU6UcBu+MrFoJp+EpGmyzMiGAzWcnKlIyzJwBDUVUVe2yz2dyoJxbLBFRnmMvrJggkSkcJHV8GYTV1SLq7uyOASVIIGOOyu/KZxJ+RyT/Y1vAYJwvEpgF/7z9kr7bQnBlI5RaJctYyMef5+TmZLn6+Uru1hryQSb+gNP3TP/3T3/md3/k6B9zh+kW7/uD3f/9bn3xCAcNPdV1dXV5dXd7eDj/74vOfx419866nkYas1MLBjMLJycmLFy/okkcnPcJQDjPWtv2o4eRK2Q1yHleqv07yCXKKtqZiF7Y8Jlapy7kP/i/7ESUmPk64bbZaSFA+8OLiwjIs1OKQGaSxIgLslYtyCnmphPZc55jq9Tqlzebn2KzRyG82G74u5PhDmsxlPavVigcxnZBSAtnQ9aGlXj5QSnw+Oyx1l1jAEMFb4glz0+v1XCa8Wq04hFz5BMzlhIa9QDfmAgKf3+S/AKAcWiklRo9aFhRXkJduwmvmJmeA/L6S0nn+V05BThfmQFKbnN1uR8EyriW8oCRNFSj8+vp6v9/f3NzsdruLi4tCcroQ1OapObYLiR2LoqBlM5gAbpJ3Cvala/NsNut2uzSrJH/nUd1ut/ZXDyEnk6mbzYbUvOtRPrzKJpPJcDi8ubn51V/9VXKIDw8P1Fj4d1wUXMlRla8+OTm5uLgYjUbU6jKjptMpQgJEz7Q7suLNIZzxMX7vKzWRIg+A6sNphMiIc6YZS4zbcIkGvCB325CxA/OhrubvpCN40r18qZK8iljO1sWyGC1iKVRwxuc4q3BycjIcDit5aNdqNQATv8YY8lIcceWvwAEt79dkuTWjUPXuo7jK2qIyAuwqfliYXQbQ0YinfammMt7xCpUtEnJb21rJWL6Shpg4p66W5a61h6zdZeVWmIL581NKSETqakP1kyYkENbMnwMDyFre0UruqrvM7d84cjQa1WTCAAVLWmMlM3ZumHEg4ipUp88I8MsEPBAZRBQsPZP3rC822wM9+Ut9/eX/+//8o+997//PJwAr/77u55t9PQ1DCVFBsPvw8IBMql6v03Hh9vb25ubm8vISrZVj3+VySRqOIwEixGxHkiOdo1WfNGyjsBdJbUtQPpG0zXlKx9+P6hPDHp0yxzvAa5FJxAjfocpKdZHJS3GTjAabmed5SomsE7wFpTntdns0GqFDoi+Zk0EoAdjsgF8AMm/35mxgjJpqbVdKK7mR+3pEzOfzdrt9dnZGFskKess0S4kyGU/gF7kzzg9LNhuNBuAe/234BjobcSCR4wtlxGCeIoIHQe7mmkqwNdgiIqi33Wdej+z1y+WScYPH5Q1W0iDu5cVj2tJ5UtLfDAtTCNfl1Wo1m82Gw+FisaBqB4QUUgRyb9ClofSiHwfYgSV1TbULnG0+zrEXNc4GWLj4xjJBCBjoPYNmvg7+jEP9wwuNbOD9/f1wOES/wcQ4Pj4mHiikcwVyEULwRJiHEzk8PDyMRqOXL1+iyuX4h7EbjUYRQTKRBwQ02EKc9CgUUUilB6HORaVFIVtpIgGrQfghJz2CVzNbEQF15N0AKR4z37n7qqru7+97vZ7xIvfG1AJnQEBivhiq5AjJA0pZZKOoA3WBXLEBenh44HWguTQihBBl9rIK+FLWQlmWLbmURwQa2ZT5IvHfACbAdynlZR6ROlPB+iXSzgFfQ/5TDndZv0A347BHta1ynXil4qRC9jr7rOwa5wTANKNqJ/A8IePfZ+NyYGabCKaN1ZD+cwNT8B8TgPAM3Lnb7brdLpjS3Kr5bCJDUDLqZ4cx8Lvw8ZeXlx4TnpQ3UkpAFYre00FG+ct5/cY/+m+Wi8V4NHpQDdlPe5W1Wq9/PhkN/35v7Bt5PY0hAudiKOStqcsfvEi32729vX316tVyuSTxulwuQQ9srBZpUR6BaIYtci9rQASFrqph1wBO7dWVG90Pm7uBpkX3zlV5u0HQzSHhfW2bVUyzz9KoBphFN2SYPNRIxPFAoqIo7CyzVudA4EVTfQu5f985hzc+lO/evaNexMCrKArMBcm273a7+Xy+VWNJnrpUlTTba6PRgFNcq08u8MLZXk5oErihEhmoJlBas9nkE1rqYAFHwufzUkp5wsOqQtIUWZuWIvOUJngA1QEF4J6hTkHYgONQDhHPwlDDDNw0ASv7zAKJogdbYBoOwohPp9PZbDadTqnD5RNcNbJW13hw0mw2q9RscL1eMz6MCbOCyUmCEhOo6+tr0uLMqGfPnpFEpuW6ubck2RnMtMvh/Zbf0xT+pItDerVaXV9fPzw89Pv9wWDA+wUxcLJSP4vctsjaPFKQCxN2e3s7nU4ZJYOMQlJFXronLYMMFUfUQWRYZPnNJC3gWn2SarL23MpxhpH0MJppbslfPWR9BewLRZWAGKdZQUt8bMpcP10v5U9zwtqFO6BMFNtWlTDxqAnjuSy3da6WWPHdu3dQvKiQUeI6H12ob02oUzw3zAzhu87OzphgfD6rCejP4/sPWYxsZQR4LMBSPYeSat4L2aXlMQlhDAn9nZyz2GZzF4JCTWI9J/v9PvfT6XTq6gDpN2VATAiH+5UxsWlglgx6bt8Piw5fDgJvRpV5y5/k0hqEldC9TEtEC95nyHoRF+GcTyD60UcfITbgeSnn987Gfu5OlYfrl+76n//1v04Rn3z66fFP+RLLWq19fLK4u/+//u//8+d0b9+w68ncEMA6nHlYKB8dHZFO4hT84osv5vM5xiUQLUiIIms6V8jHzgUx8EwExLACYDtXAqK/4XvZf4FBzpKAcW0VYasgn0MNdVCsyX0QRGu2jAQQ2TpKlWEpOMJNhRZFwc9rtRrpRZBHIW92dOuoKl3wEREk1zjwuBPusCVPTQ4qqjpqmc1HTnWEznUe8OTkxGZMVOdAnkHRWXsKlgJg+dThvKF8GLkkgNvO2C6aMdlpQtfZcMvhl8vlYDBA0c+NodSEoKrUPBoJRC3rqOmMYU1mgbPZLEmbVUmwD3VhUSZlSSBCzpsQ+oyM9uZbPHSFSpU9mTkybTIC8Wm62jc2nU7rskk6OTm5urqaz+dk2Dn/wFJreawy5qbcSrkbfh2+BPZ9Op0eHx9Pp9Orq6vj4+Pnz59zJCephMuyvL29PT8/h6aFywQ8IdnEX2kymUCx7/f7Z8+e3d/f85OVWgas12v3TypUNwMzxCcgZmAhhxpkU+HEK4ZPKn/EVxK82Ov1yB07kNupmj4iICn5D1d65e+draCStRCjajdEqGtb2+xk/Whwj7E/2RKXpR8dHcHlc1fsTlRDd7td9qWbmxvy44gZPIWAmCwQ6wULaQ+M2Mj+V+ptw2RDhmjq+kdffZIHAuuC3QB8bKkood0mu1xCxFrjb+vqtG6t4V5+C61WCwVFTXY8vBdSOlaoO6RnsgG7Q4xpkoGrqyf9J4wDveNz7raQKmM+n3e7Xb8Otj5CQd41APTi4oJvYcSo1mJ753V3u91ut8toQ0PU1cIxyYT/KxUmh+sX9vrBn/3gt/7sB7/9/d/+Z9///j/9zd/8mn/1vX/8j//zf/4//pd/+2//0//+n/7oj/7dtz5++XO9yW/G9WSAkjPSohlySYAwWIqtvAa9uXPeANp2chOEAYIFhMYrVefhrcdnRk2FkIVyo2SadrJ1JIHiBGVEQHfZeM+JbJNtHDAwKP1+n/wL53FSUzvznXWZGuZqKg5FTkSOYe7ZUveUEr7K+/0esvbo6Kjb7cLsRgSECscAAJ1Nn2OAowsUC1dRSYLmXo5JUtFSPaYrVZJCWpjTcjatrgYhMCgcUfl4FuoZExHo8DhykvoWAjhAFfRCdNbVGruqqujs7JOVV8CpwEiankxyV6mp29t8PuccLWUNs5OFENLG5XI5Go1wIaGxB7xmTW44K7Wrdmqb24YF38jWBCzC5Dw+PuaEhupIqiQFjpOwZrZAlFrUC3CvyVKRF2rlK5QSERFVWR9eYicnJ+PxmCDt9PQUjEXYRiARSvxxzHPzZVkSDkXEfr8/Pz+HBqOQxf97dnY2nU5xiuGV8bAhNGNkaRsXpwgsPOA+YcIISBBcQrahYw556BBfuV4N/riuJorMamAEq5h+8axWvnqxWJyfnxPFkR8woCFiJPmeZA8E9QjoZGK7ojmpVAsoXMq7nrcP2uNfIa0Zedo7hdzEeJxSHmoRQXYeqJSyFt4k92u1GojQrCTIqaEK6/cudgA2Rsg87HJ4/Mgs4j10NdVuEz6xmtbyTatkr4PfmQNvaL+IgCP0bfOT/Y+UJPLVKKQZ8JqaSoRUIpvN5ubmhk8jpe7nIuPBDnl3dwdSZ3yY9swupg2Ykm3q/Py8UpVkIfc3dm9H7FhklKr4DCXfDwzlL/v1gz/7wT/7/vd/qj/5H3/3d39ON/NNvZ6sl7eT0dbNWGYE5UYdhosS9mpOA6x0Ja8pDc4Vx7jWqoPqQDY1GUkYfoVc3CKCk4wePDtVXHLSeJ/FGDk/wwBqJHdIdJ6envJr7OAkCktVExvuYOLIpgxXAeoiyYu0tJCdB3sipxQopKZydVJFR+p/zQhbl0ZEzudDwdZqNU41kFNklKePdiiWvRo988qAXCFqIZT/go0gRUWSiFuCSoFCvru7Y8ALuaiU6ocJPqOolrNhPp/zpEBSWEzYMhKyZDBR1yX5K1WZDRDHJzQnhoXMB9cGUQWMKdXNzc319TWkpkMCMDHUTpF5XAMLzHHyFFyWA3I6Pj4+TiYTOi3xyzwdcJ+TvixLNKm3t7fk4pPsqyjjYFGUqu3g/CObaZ7+J129Xg/FyLNnzyDLOWjPz88HgwGkI79piA9RRJrSQRdLbzKZdDod2p/m+coQUDCaDDUMZC27eNaaBCsXCylEH9WXhQjT5VPGE8gW0elChHNX0FFJFVfc7U6ekRHBhCF6wQeRqKb4chXXSlbeLoLhfQEiQeHMljxKJKpx6Ftm/uEhe6P3gKkzuQwg5Kv/hLmXstY7oT7jobQ4s7qRmZUyYSKriU7ywbGtgcMhRNJJGXMeHFEBv+mwDSCbc/wgS+KBqqoQYbMLMTnJMxSqOwQasuXSUMeBKx9eSabJdufuBpvN5vXr15hV8fn+q1K+6xHBDkmxNj+vVKQF1mRBJaVoEJgyozqdDowmT8GecHV1dXt7CwGMFsi6XhxYD9fhOlwfuJ7GhxKwtZHFg5NlZFgsdCM+ZpOlttSMAsF0Qz4+pXpsJNU0rGX2Sz4FI7RcqgWdkCOPWq0Gy2KGjJRQVVUcBqEWFI5xC8mD+HMEnZQOmDYDDtpuMFTA6F8AyoS6fkPIcQSyP6aUFosFhA13slZTDW7D4rCcemRgsdFmGz05OQF4EW2TmaUwYq2GhByWvAtOL8QJfKyzVEYSoSQjBwyIqqH2J0kqTN6L0X9L7UAMzcuyxC4R+3rAIjisJmdjCF1OtVIFrabuXMCxlaE0345Ci79y3hMebjKZjEYjOtT1+31EYM42IpOICE5rcG2324WCokbKJ2LoIGcyAAKAcXlTFscwDw8P/Hm73X7x4gU8SqPRsO05s5EVUai/jskq0NWHF1qv11ssFpTFnJ2dTSaTulqDYNiOGNfHre0CdiqwZTAZZ8YTQUgI3FB2HdIANOS3AhSjpNrYyyUvRImeXZC+YJ1Czi/Q+U62ppTOzs74tZ0a7hWylOKG+TqGyHcCQ8ZIQlIiiQPXttR9gKnIX23lSga178wymHK9Xvd6PZcHgU2BTd1u9z2QzZOSE4diJ4MPaxgqHVutVjkBBnls0YUBJZgJIwhiYx4ERYH/3ISrtYBW4Mznc5ZSntLlpZhTTHLMTar2Ozo6AsA1ZLlQSP2Z71SVJMUOJ/wU4MKcRi3UK8tZo7WcgFCzUPDkv2WXCLGVXmu4WDAZWEEhSht8bPeJiKBHGs2N7IR6eno6Go3IEvAgNclwQ6IXIt4PL7fDdbgO19MU5bD1OHiFobT+hh2w0Wi4tw2bY1Od4tjvut1uv98HTzRlLQl2ZDc3/cDGkadxqe3gKKqqCsaLMzV3kAYD8dVU28COWMKfa60cwSc5FEJvOFgvpGffbreE1Oy/pXT0cCfuwBsRJG6AX4XUpQ9qkcyuR1VHWZbUlJBktPLPdwuLtlUz3JAJaEsWktY7ArygBoEX/D4j4+RgXZaK3PPj4+NsNsMDHOwOORcR9Gms1LKcsdqp33pSzvH8/Lwl1+itzCnhERF6+sxzFUWofJ4D1fAUNUKSZUwhi6VaVvENjzWbzSaTSbPZpLOz54ytSTzBmJMUY/EfVVWNx+P1ek2/UMCf4yJ/I/qH/X7/+PgIwoM+oWKaEnt0q51Op9PpnJ+fAxQcGrFATNaCqGxb85MudId490BqTiYTGDvOYKYlAuVK5d4G7ixPVGXT6ZRfNrnlXw4haWtFzAjuZRQF9PH7cpkt/Fw+XcFelYzoQ847/lsmp8NF0/bWePBzhyudTodX5oy241KmmTlCICYfvpEPVKHSE6h315OZvC+kS2ZOEvoa75I8PT8/x7jUk8HLjecyXxtZSVBLvbOR90UWedbVArFUOwBHvElq5rXcuXkWdjkiNGYy3wIHWZf/Ll/EYPKmDP3x4ihkhQHXy/pNmTsvt2Q9jGMzIkN2Wj8m+wCPhrIC3dG7d+9wWSKk4Su4gVB1Gts4GNeRgJXNDpB4IqZcIVsDWlfwooktmeHmL/AbYechsr3/WWuED9fh+odzPQGgJLFLHgE8x2FJj7vxeEwPaOozNpvNcDh88+YNYjinqygrZmcEOiQ15qpU52tIQQYW8ZZ/LbT9rdfr2WwGXoFlMWfmetXj42Mi+9PTU+dtuWeYHvrItdttgEIh80WOHzJ0SZ2OG2oVyIYIo7bZbJBPcY42Gg2KkUM0RqEmuXj9cHKAcTnSELqFmltwbwBioyJQgsmDXq9Hw0Ag12azmc1mJNRAgWAjxsQSBR9+IE7+l+P88fHx5uZmPp9TcdXpdIAyZKbASbxH6NKt7N8vLi76/T6HLuUXGEfD0FDBY8OXQo00Go0GvCY5cWRYHJaebznvQrb68fHx7u6OmYYnZZLMsZA30FbFznyUq6DI+zMlLi4uqqoajUZU1jOGVExbXFhTSURD7eBx6Nxut6PRaDgcTqfTL774gkx0p9N59uxZv99n/sOccVKyaiIC1/SLi4sfK5vLL5KYKIAXiwVA7eHhYTwer9SuEGRA4a3/kJ/zV7wgAgMenIdCdxsyJwc18rJ4EUgs+EDCxfzeyEhQvgbUtgiEeYX2F0zDfOPXmHjOboOWqHBirJy1IMxgDG3PtFGfKnOxObfHEOWPxgpNUkwC4hkWMGu9XqcEOKWEmGGlHtZJdv18KWufaBCIz7BzJ8zJpA5G+LRHRL/f50ubshtzhQpUqzG9pzoMOmVS5Ny9RbBpgHQpH+QmmeSliq8hUGGa2Qkhj73NAvvYw00fWkbMb1pnbFXDer0mIg15lXNvISk2KPD+/t7Fi0aQEMY/KsckMkcHjCIcYMpYsW8QYzOLqEmaTCalquuItCnIm06nrVbr8vKykG1qRFAP/uG1drgO1+GKJ9RQbuVlA8LgIEmqpGGbo30OYSKsQF1tr9n6OU72mTsal+udk9RIazXL4QYgZkwzQEeBITiKgD4AwYggqeSaDA4nPorImxMLGAc0RPtP5pePLVVVyl5JUA50A2HQJ3oja+KIIM3Hg3CRTuLxKUiCMDPI43igytgJ6LoaaQBK2EwxpuHm6/U6NdGAyLb6UPNrnB/Fl7timGNu6AqdSWgNl8tlW12L+AnHLcCOYw8uk07TIG/kXBHBU0cE/h2cNycnJygyufkk8Zbd/sqyNAQp1CVyry47kBZ812azub6+vr+/Pz8/h24sZD5fZn6T+LaQkHXFFcAU39C//Mu/rNfrFxcXfEiz2by6uqrVau/evQPxMGLgG14o5GgpfwOG8fz8nJpZADQdUE5PT/lDkLRLjqx4+8DlmbPZbKbTKREC05hic5+pj2osGcrxud4Znoxb6vf78K+TyYRceSnh49HREf6yQBwEoJFlVPeZQw3DyAp1otzBBr9PPXhL5tIGOrwmJhLJUC9bvoJlUqiHJzCOoKWh8jjmQE19MpNEC7wXRglFL5CUdYSqEvskk6/EMPCa3M98Pifdz1fDsLJabRlRKAlAlgDVDaEajKkrCAmP+RMUrt4nEX0yGwlKfZMoAVZZqyq+iFHid8jXew4w03jqbrcLtEoyvGT18aK38s6MCFYrbbJDjqQ5lV6p3si0Ivh4pQ43oVQPVCiBFlPIMWfzxzWFqqmtFBE+n8yBUpfrxfHxMUVpo9HIWXjSSkTjEcGfrFar4XBI/Hx+fn51dTWdTn/lV34F1VApj63DdbgO1weuJ+vlTbVKS60LzRlwiB4dHVEeQSdGEpQWtHHIcbJy7IEpIQbApmym7Om55463QjIdfAg4tfhy/1nH2UTVR0dHBNkcVCjzSJEQbQNDXZxrtNqU111Iq7TLmkxU6ntRqj5jOByS/23LdTwvdYSsKooCv4zlckmxMOW3lDEBiSyj3KlxDtk3SnBCxZKMUlVVKNABnYvFAtqPkWEYDfpBhNDMfgo7OgF0uB84m6b81WGYSF2BUThyeBA4GG6GfxqNRgzLfD5H8WZBlc9C6uJTSnRRA53z+Jx8ZOqhDOEjUaO+e/duPB5Pp9Nnz565WJhHgNPl4KH+6eTkpNPp+DQF5DmjivKVxHS73T4/Py9kjv3ZZ5+BlrDO3sqgADkXr3W9Xk8mk1qtNhgM8GG1pgLswlkOFGC2g6I+vNDqapdXVZWLokjeFWoLRIFXCIfVZICAHA28XldPS684eLKdmkUhFGHAI2I2m8HUWtwWqup14W1KCboub53SUn+mJCcd1ql9hfZZz3TXuJAR5n2xh9RqNXLN+VCA45m0xCcsE98hcJahZivg7TtUS3KZZQJEBBNprXZWTOC2OsUDVVlE7kltQTDzB7nnXkXHKSXX9qGqBPjyEuvq4AWNmn9aRKCppf4PDStL0p7/e8m+WS8Qby01cQWSkvEA1BKAsbcwdRvyk2IcoBIh1L17A7WZ7SHsm2S/sJavhUeVsApz+LIs2fD5doKfyEzOfVXyBias9aZHENLtdpfLJXEd9+D2DUXWuMvRL6+DeUt32U6n8/z587dv3/L7/X7/MesvdbgO1+H6sdfTpLydQAxJrJbLZSVDh/1+3+/3X758WajGmewbUbK1ZXRo5NQEvZkMcELkvZ0I0Al6sJIpIrxtcYzBOmxl0E0eDYkYxwwQEATGNs0mZYE592PW02cMcI1v9yHEUdFut0llQvbgmw3FhZwfQIYyLyLgEqjgQXvUarVQAvDJDCy/7+elSNnWfdPpdDKZwCBCRwGdd7sdue/IRGygvXpWPp+UIy4kvCtUF4UegDiB6loqWi4vL8F2lQztANPcLeU4HEUcdXAekEA+HuLLB5WLNDnPeIq9uiSTT+SNcHT1ej0KVl6/fu26XUhf6g+YooXaVCa5ZkKb7WQfaCGm9VtJnqAMNVLd9Xr99u1blxs/yh+eNvF4ngOhmOSdTue73/3up59+Cto4Vh8p8ArP5bbRH7joL8JI7tWsiHvgS7dqG20XG8hsCOnczQDejsL/h4eH29tbcDZlLhv1mK4kxGRIOeYtZeNzCMBCIZ9ZcxYIcyYk8GVYrGB7VMcdZgjok4DHImmGCDDnHWCn/tfATdbU3d3dTiX85N+BU+wG+/0eg1LYelZQs9m8uLhgAJO8/cusRC8k1AOpl2XpMMmriS2uLr/MSrZWiCWKomASsszJxrKQO50OL4hBIyTzlxaq6baesq1upXz1Wj5NANwQfkVIbSUiU7qhztr8CUQywiHAPd9YylfBv0mE7DlgaSZsdETwshhMvoWX4tS/NSFVZl0JsucruDGGgonN8bHLWs6yexBhYruB+4TloehzCE2ZGCiJh8MhuRpCWS5u4Gsdb4frcP0Dvp6m9SJpRCqvOY3Yx0FsFxcXL168wDSYfARRtTlIjqJSHcYAQ2SUiOYtXAOFWAfWVCc9dsB6vU7W1ZI7NjV2q8jY0LywYyPv9CJrdMHxwznBHgfgYxeDm+FQachNsFRleigHjbKq3+/P53PKaSinAAAgAElEQVSy/BzGvV6vUJGjORJndjhiuZOc6jAXy3lmuWohaT88BFmhyDrOcVdO4VnLzw0zIDsVqq/VX2eXWTiBwhkiHoFMOigN7qooilqtZqckbhvcCTKAgyzUh9AvwjCUA7KlRuctGS/brbqpKi7630BrtVot3OPv7u6ur68Hg4Gt76F80Kg5N+pS08vLS9gUTq/pdLpYLHizdXmLMD9BM0y509NT+n9s1MCTXK0jGapPwC4M7H6///TTT+GGJ5MJqq9C5c+sAoOGD1y8OxhZDuzFYmHZayXdbUQ43Yy2ErKHn3DYN5vNy8vLer2ORLih5pa8L7CpIzowBER+JWtGp4lB4RR5WHRopt83X6iaZLfbnZ+fJ/XrS5lUOmRChKKUiQ0Bn9QilZJqgCkcP8Qbn5+XdnFXrniz8JFJbngK6uJZzBRScxZKO1DGUcnhqCl7SwatIT8svtHUeGQ93CHaQ3VmAK+6ulYSQRUqZ/T3UudeqdlSSom371FN0miyPZZlCZVraUdDDg/sjXwyI4aegSHaqzt2kbmnAeV3KtvnG9ko2EgdhHDnPCD7ITxuVVUsFuJk78kIAFpZIy4cvrbbLf8XLIiLZ10Wm0m+HIwq/Ks7DmA7wFsuZJQBZZ5SQnBydXXlhlj7r+p0ergO1+F6mpQ3GwQbOqwJCZR2u/2tb30L5m8ymdzc3EDeNNT4mzDU8CgiyqzGk88v5FjbUmcUknTslWziIABgogu6k5qCsKMVMtegAsBOdablHtWgz3lJk5pmQWpZoxqOamABfEDogEFcBYiE+7RJGw/otLhzauytLkaGvzSv5qEwN9lQS3QXO5O2JjdnbpUzkrC+VFtCp3s2mw31yJwonJ2cEOioQNIGZBEBD5HnbWFuENtBHRkcgPlMx8JWFmojTsKagxDs64Qs5xO/D5fAoctQO7Tg/F4sFkQyIed8d/Tm7dMwk78Cg0ZWYsyZB8I+OTn5zne+wy211BKQgiToEB6N6gc8a0oZJ0GEGwF7buz3+7u7u36//61vfWuv5p/cJ4NZyZb1K9cay8oYEVLNtU1VZoOQ01FMeJ4I3QVLcrFYEMMQinBLfFqoVJkZxeMkSaIdX/mYDxXeEmLxmogBLN6FlqM8hSGiHD7J6pIBL8tyMpkY55mSzPls3pSzumXW+o/H36pBeSFNNuuOjDZ5ZKZWSokuODwaw0gpPSpSx2NlWbrGnMfkw0tZx6OisYDBq4Y5b42scSQbJuDGLzHJx9EDyxJ2IEQAw5QjSufPiR/4EzceLOVwxLQHhYPUt9ttv9/ffdmW1ZE8U5TH5AEdLHkbQW8AJzqfz7kNu1cSIuKcyl7taewgOVQIyLbDIzCR2D0AlOz2jNVsNsMRlv/LJKyk7PRn+jAy43t7e/vixYurqysAJZ72h+twHa4PXE/WKadQI2DoBPKJEZFSenx8HI/HDw8PlHuDJl0uzZ9D+AEWkWCy7RYq2SHGBdyAGom5oSjsCccRWKrBLpv+brebTCa42EQEWSQST6Y0oB/KsgSagMCQJYEeyLnc39+TqKLKgd8nubxXh2uDg7a6EXIqg0cBEC4b4iQDFHY6HZ9kBhn8vvWOjq2xSeJI4yfUPPFcpfr35C8oqfa53W6jOvD48PjwamTrUNCDein2BPKSvwMxuBqXs7CU6UldruOcvuPxGBhUV5cO/gpqhE+G+6kyuzgzvhxdJnL4Ew5synFSSvP5/N27d6ETF94XfoX8I9r8iKjJ6ohD2r2COPMozQGRA/6wI2g2m9PplO+6urq6v793T2HL5hDzYa5EfpxZDWY9Ozt79uwZ4Ia25s7W8ZhfSZlQpcuAkB1mSKn4djWVswQMEcPV6/VI/PV6PeqF5/M50skqK4ADZ4D4GQozi8AL7sTTAPgFRiyUGnaoE5nxtbeIx8dHPA34Op49hIFIUrPMK9UUA/4g1d4bE1goBnMv70m+HSBiVrtQXXmz2cS8MCTDCIVJyELMnPHhNh1jT0BwkqQzdhGPuTqC1ZoscjabDeSZYzwmPKuDlU4VNsPIushpTj6Nv2q32+PxGMUOG4gjvRylJaXIiQp6vV6lNgGsMscDkL41ufnCAji8dAacpyYNlbOY7GDHx8fMPQTQvCwM0cgy7eVr4dgSgLvf77vdLptkSol0wV4etLxKgDjVWsPhMNTL0ZEbW41zUPyyXZBI1+Deypgwq3cyZz1ch+tw/aTraQCl8yBs4k7kUbvACcrJze7MmZfUjxUajy3JmTUfBhADIKQk82Ec8jg5lsul94vlcmmo4TQNWIS0F/tdqL2hS4/ZrDkXMcT2nSQ5YtpS23AHBstoAODCz/mroijMk4UqEK0WqtVq/X6fnDtScaDearXi2HARMdwD1IX1YZSE44wdEcYogBvAItAcYEEpNONcFAV1NoCSUDMeft9EbFJzczrRAUoY1aRe1fY8AmVaQcUEMCJE20CijWQZJ425uhC14AODLyrl60lpAnm61WpF8x4ikNlsRtcf+5yj8QIdogS4vLx0JQfc9nQ6ha3hgLG8gfonZg4Q4eHhASkYMv9jteMDAIGhCaKgdZFyYg6ABoPX/dFHH43H463sEjlo1+rt9OELLaxb1PAUVBMDd0K1t0Q4OzUgBQcAcEEhTDn+G5WIS2sRCbRkHmmCZ6ee16ShQ3x5s9kcDAaIOGuZKQzzCuK/rspu7o2IIu8/zkphJvN+Qb3Q/JVUASwfCjVMmrIPEAVZO1hTs2+CJbxFjQ73avJUV4MiwqekVu/gKlo2lDJCJ9XAJgAVzZwJ+SglGT7wjPwvfFtD1letVuv+/p55slW7L76XyUCQDG1sNrGhTktVVXU6HT6Hb2c+mBQ3jo8I0v0gqmazSWUea22z2bBsy8z/PMlVp5L8ZjqdJiVV1mpAkNPSxs28Zd4XN/b4+DidTpn84DwmHpocXgTaGOjPrfznGbqtHO+NXEOdLUndoGclucGexmplpzLrSXjJU0AHMLW+UrJ8uA7X4XoyQGlnuK1sEUF1mG5EREM+5IW8iNlwHQdXqhgght7IWyeUCWXXdo6VQJNgl1RLUic0Dn4+B6DGrtpoNDqdDvsp6VQnCgs1puO84bQ2G1FI8cbWBsiAzKPeEI4tlCjcqxElYiaC+FardX19DaHCV1N2g/UaITXNOTibyT21ZTXs42ovO5UQk8dXW0zme/AZ4JwjET+D3Ol0+FdDdnO6WzWnYVhAjSBCF0NA6viR62oBzOYeGelbSDzg/7tRb2jOVwCNcZITVaDzEIFEFhuzyRDnCtpzZ8iTkxM3AoF84q/wMeX9zmYzfn+73Z6dnVEoxkiCWUO2qTw1eXlrgj2jgCkRwZ8Aelx8gDX6TpZJlvYi5LI7EsrInMn78ELjT4yJTQp60eWiwBAzx0Hebrcnkwl0LHRamXVGgWEF3DA5U9a2inkSylzX1ZqFNUhBjLXLoHYLS+ClnFclLmIwPbdZa91uF/IVHV5EsLSBOGs1GuB78ZwyXiyKgpApr2ADozDItnLke9msGD3mNvEPaRYACh8FXVer1WDcCQYQ/AG8+ChUJYY+/DxJeGOs7xg13/eQArM8G40GieyIYEidjE4pkcJ27ygek4hivV7zv4QEzN6atM75puERNmKmqunq6sovi23WL4gVTRTqWL1QW8iTk5PZbMYpQMwP98ms4B78+HvZdubYMUmMBFgkGHB0yhth3wYOUkvUlIkEE9JGnpvNhsCjUAtZwoDBYACiJV12uA7X4frA9TSdcvJMLj/JbX6TKjepluAIRFgW2pJskFuqJTQ7BaE86saQnCgiOO3ALg6aiXor2fs5BQbnwbev5a8e0jvyvRwJfIXhBSdNUtkvKIQTkeMcchRqIalugIvDBrKBsBjUiH0xXKYrUfBSBm8l+T4aGno0+N6Vup6gJhyNRjvV1ZILI4XEvk/d8UaNic2wNrI6d+AgoIHdf7VaYZUcEZDHJycnl5eXYNCdCqfqakSxUldGQw34ho0ML5kGW1lLFlk9aU1SVI8eOWLOFT6BkanJdJ1JYgDHi0ARiOiKz+FwWq/X3W7XSj5GD37u7OwM6pojh7cDWQXkTSmNx+Pr62vTgUwYqwx5cSAn6G1zVGVZUjw0n8+n0+loNGJpDAYDpHioVKlay0XDP+lihpOndocSUr2c38vl8l7XWp1puNWNeoQSLPG+4MJZHfnsBaBsMocdBpn/60ovDnJkAzCgIG9AD0KRiPCsBosn1dNQYITiFloUjJXU5hTdwlaO9DYeigwYueqLj+WpK6kJMf+qyZqb0bCzZnw5N3pxcXF5eclCY3vxflKv11GKgwtNmYc0o/xaqY4A7GPgHuZqnmRgvsEdNlQttJLxrbcyc5+W/+5kKJHUFYmJutlszs/Pu90ulCqEJfuMGXRrEnq9njccYKVHlZ8YeuZJ4TycMDwtJat1eb7zPywKOjk5XU6YTboDorFQbSKbIf9ExMtN8hVsoUVRzGYzx/PIDyC52coga5ENOM2yl2ctE4xD5z1N5+E6XIfrx15Pw1Cy4yM/4nTkBHIMisbRfVpDNRaWRZqBAIpVElk7rcaO0+l0XCOC+SXZw6RcFbstZ4ZpKjAQOUFi95bM3nwl5Xbhz1arFZnNptr2FLL6A9CwbZG+BynSXgVjOfJ9PFRNWnu2e5hRNmjgVK/X45DebDaj0YgPIQXGaeSD2Uwwf3t/f08zX3N7pUScSUl5zmPya20ZBUd2YLiI3jVPPi1MAWJEAvYl43Z0dIQZZKPRQPbkStVCJjJs/ZwilM1CxZECqyQdI36oqmoymYB7CtUhFZmektN6LxdSCnEgxpbL5RdffBER0JOP6utI5poyFCRuIGz4D4YX6g75V1JpsItO9vv9eDyOCPKDPCbMk0lZvoIEn2+PNDpn2G63u7i48PFcq9VevHix2+2wATL385WrzBwVscpmswEIlqpjoyg41K/PRzXJvp1sHQs1emaVkTFvt9s7dW1O6t1n7OhFB1ipZaVpZuCcH/dqaslQ1qpBRpUYDLkwq/L09BTmG9RYl9UUMZKb0/jzbYtIwRnTiUmSlEaoqy34TrZQXqfk1lutFhCKYWQdtdtt5NqsXEZ1u92a5WJxcWNeYiwNtg4mD1FQUnWg79yZVuZtWZbcg1lq7zZ+77kmm5dljM4PQZz2/89fzVbWj57/zArCUV4BN+/qKMNK5luo/cxGPQLMQ1M6jeCSrQyNE6O3WCyGw6HhL8NoOE646woem0tEBG0RmLHI2flYACh3y5f2ej2wrKMdbrKWSbpZ47e3twQP3PnR0RH72OE6XIfrA9eTpbyR5nBIW+JtTQxd+LbyImFT3qiFDGwBdIKF/3tZ9nD8s78/PDzQ+o9q8b3aHpJADInwUCmBJ+oyWrM6sKYOjaVaPkCaOkHJ9k1xTFvdO5JMc6xNLFXaXOqyYBE6tlRzP1i3o6Ojfr/PScadsN0DaIAIlRSWSapHE7ccG4Xa29Tr9RcvXqC1cjNl9lM4NqhcKlFApXs1UneWDb6B8x6w9ajG63W5dfDtDw8PFGVHJmpstVpQZf5la0k574uioNTAZdQMLBt9KbPxUtZ0HO2Uy3B7NZXkM0Nw5rMF3Xq9nk6nn3/++WQyKSRXdf4LAIF0klPHxza3Cl3RlFXT9fU1A4vLHXfFYE4mk4jAxO5ETa5hJVcyTq+phf3p6SkvAsIJtWWn0xkOh5eXlxFxdXVlDTEQhJf74VVGUZche6ELzHp2dpYXrgIB7dzOMNqwiZmQsrQmf8Why3lvFrCQez9/wgfyC+BLpykLqTCLzD7WH44pKZq2QoZQIcWnU/Br9TTiHaFM8OeH3BZZtqenp7RZiqzHAdCW+V+WpUtqkPqllKh65q25Gp3Nh1nEn6M6ZRKihcBVKpcHOOjingkjWUfHx8f4J3AnRudJ7WRMt5v/zl2reH0mmK05hvMD+rNd1LK2kETOsM7cCXsUTCqPExKWsAuhJmdusEuwTu11nzs7cs8kvimINAJuNBoEY0VRvHv37u/+7u/A7ux+4MWiKEjF8EWPj4+YoXJvzk2x6IbD4X6/7/V6hEwXFxeTyWQ+n5POIkvDX23VJ6lQl1GGhc12pS4+i8ViMBiA9d1R/XD9w7m+//3f/rM/+8FT38Uv0/VkgJINEZaOH5ruYk8nARoRHCRUebMVmjKJCDaas7Mz9DrutQU/F0q+nJ2dIR6vfbllTk2dPzqdjkFPs9lstVpkUUNNXzhfQZwRQdIQpMuB51YuJNRCAjUjPALihkwWIwLmYzKZADgYEDq7gOEosqFCs67WEeTOCplfcOxt1YGNYuqGnIbATMCjVqt1eXk5Go3QFIb6cBhYwGTs5UlkPRkYN2VJvZBPB2CIUTW457DhBLLqYK9qdNK7vLiWej/CiCDqgqnl18rMNxEDF/DrXgbmHsmIcMNJjpDVasUx3263+/0+PRv/5m/+5m//9m+Lovjkk0+M5Kir3atclMHf7XZ03ykkK/Tp1ev1kLdSMU0fHZM0r169mk6nz58/Bx1eXV3RUHuvxtyj0YiqCz6toTpfmBUYLApUAZShCjbwkNnED1/gNmajHxOo5LquSoJgJxMZT3KgSbZ/IePxtizxrTik9t8SiCQzwpAMeqWeRnzRWn1l6jKQBxKRe+WjmCSVtIMNWer40TAB8BLeqlMiNDD647y1CZuGmyR5tlfy3AY55cS2gThBEeAPDoxPIHEPV03RG+jNsJgXupPRREiMyBSFCfZyMJcJnAX7hlovhuq9gMXMNzS1pIbhTXOZbE19a4z8KjXvYSOiBAcLJJ7LsJJNAEwMsgTJuZSbFw2yZNctVADucp9KbmVJiXLHhPQBGgwGbFar1ert27fX19dNmR6A/8D9SFGZ866FsmS2JtO0oigWi4XlpxRKUn7HsiVz4sG3AZkjfDL+UMhE5liaI40tvoZk+XD9Il9/+If/5l/83u/9VH/yL//Vv4qIA6b8+teT9fK2qwgIjII+NNTU5IboLng+dhCKOo2rkho0Q0S1Wi3E+xyZO3VXI9i18aGxUcjNzkqm3W43GAwIUrlJNmJ8AYlZ2degH/ay5M1hrlNILvTh1HT+heclrQ+Y4GygKaWPB2B3t9t1chAlkD3w4D4ZK4uleMamLI2gAXwDiKJactWuqzF0RNRVOOxcDwDaH/VeiUNS1g/w6vp3eNO9zPxAD3bn4TZCduueAyao0GIa3/DUFrc5Wd+WGedehc8pkzEAMiidTkrIrlar169ff/bZZ9vtFpAHROMISSoM5/NPT085+cAWG/UnpGWiYx4qNsC4g8Hg7u7u9vZ2PB7zVyTdIHFDACvXp6KqjKwUBl0jYk3wHPDl8vKSrnSAp+bXMKF0iaszm9DesD5VZsQdKomjEIcRw8CFv4Ku458geFxBQvZ5n7UbJUILWSjwsKXk0V7RO7WHZnmWUkNC6jebTcq6/QiYZDlZ7GYBW/X4cSleXbXYhWzGkwrDWfibzYZfy6dZkeXHYWSt6I0ItJv8bb1ep1OOOw4wsBBmQD3iQ0hWIqtClXmUhLuYjx0JXo3Qt8rqwZnVPOZOLjw79YzdqPtRpZbWO/lE8h/M/EoqT16oB6csSyIizxCenXCiyKqzySkzeYDm/iciUstgiqIAI9ZUt8R3UY4GCkeocHJycnFx8fr16+VyOR6PQXs2a9vLsJ3Ujb17LJ42A80YMjHA0L1ej8WIr1lDPqCz2QyYzmJnSjDs3gBZCGzI6/V6sVjgnNX4qk6nh+sX+frDP/w33/ve9/743//xH//xH3/9v/pf/8OfgCkP19e8nqyXd56cojDCmhgnc8tMFsmRb4iD/y3sDiEp+yCbLGd8ZLRKS00OIwJj6lKyMNc4s1fCQLBJEUDDIy6XS9LZRjzcpGvPgXQAJsNl9vEQCcQmiFQcWQ/oDbYmydjZFULUGYBE2an3Wasb+EUOYwZtpwY2vV4PjT9gjoJQTB+J4yNit9uhuOdIMxUHvKboeDqdkocCF3oX5v4N4Ph5TZaNSSJXDuZCsrBSHRfNLoB3LdZcLBb01ImMgt1n5ecpy5CaS2MoOImHwyEf6BwozA12m+PxeDab9Xq9y8tLIhAOXQMRFGagHEoBTN8CrdZyZCyKwvUK1OtcXl5y7oKrXA1G5h3O1a8JiDAejwkkYMVoxoiLULfbPTs7W8kAnyT49fU18NTVbB+4GF6kcknJVvJ3LsWIzAcbm0MKlZg8vAunMsn/8soK+RggrYPIcdQH6wYjy+KFBfTq4IdFURi4l/L5Mh4iXAE8QYbBeJEgNovMTGMTMD5DI+ga3siEtkkKY6YQg1xkVTg87HA4NPXOCvUTEQgxx8C+XhdHR0dYdiMHh1FzYfJx1pEcUhPW02UroUCryFLwNfkbEPCwExLh8PlsoShHuVW+BVALv7iShzmxFgmWpGaq/DJmF6zNSt6Tx+rJlFLykLbVCiGknGnKOIJNyYvXfzsej9mfQ7JL9qXtdosPA+KQUrY+/nDPXt4XqoCdipZKOR9tt1sXFcG8kq9ANAlGbKlbD3GFRU2Q00SzZgTYEolwyBp97SPucP1iXaDJ//Jf/uqnQpMR8T/9i98DU/71X/3Vz+nevmHX07ReJIuBDM7SQza4mjovm4MB8x0fH8MKsB2zV9azRjuYXyT5h7lUAnCJawb7PmoeWBZOIE4LoOTd3d1GDUssTmIP4kCtqsptxH0YWHEfKmtgg44IMBZQuCgKzhsSNxEBXgEZMxp0u4YRwbUEc0SH7CCeQt1sSWXmQXwl514S+sAFNmXObwbWzjvcIUY58KY8FNYe4K0q89c8Ojq6v7+/u7vjGyPLmXpYoARqsi/hF7DC4fDzcVVXD/S12mxyqHA8A7t36i8MzVBT+XbItxysPB6Pgfuu+KG4B1EmrFiouxJgnaFwEUZL3W44cVtyp2c2ggudxGfEWq2WjUjr8unEbJ/pdHt7W1UVRbX2/aGbTqvVmkwmKaXBYFAUBaoM8CUmRPP53K3z+v0+KVTm4VcuNBtlk/e35BQRIYsCugjql5oJc6hmWKHlWCy87ru7O9e9ct7zr/wV4K+mKrG1XDOTyvYZbTIDPIuldf4oA0pGGHqbFDmlweZ0ATe2yQw1/uHd7VQeBDgwvmEDeVSveTQPu91uOp06nOOX8RDt9XrcPyEcTQEIjHmQSo27YLMAqYV6zDhBz/9lpoH4T05OMH9w2Yd5yohgpbNFmFqGqAP0+6XEl/lmHv9RXeyZ+TX1J8sHHGwX8t91/ge5JN9FOQ6QDkWp0SebLc/Ilo7COCQuJzodjUaESUgIjo+PF4sFpWnE0nlcF+o5yUQl5V2WJaO3Vm8IICMLDVKfBUJhlrUWfDhMKviykgc+hXoE7fP5HCDrU2MymTBDaF2Wvp5X1+H6Rbt+NjTJBab8b//JP/l7v6tv5PWURTmc6JCFbHDe9dhNuCLCei84Hu/jBjqAQmQxVHa74xw4ZqciXJgM6/o5FNk9yU+RLk8SzrPhsvUURcEZ0Ol08MssJdLv9Xo7WXV4E/dRZzoWB0S2J6JzUCYcAxaVd3d37Xa72+2u1DoClrHI5PmADBKybMTeZ/EbstfJ/f09KrfBYAAFGLKGgYGDpZvP5/yE1DBKPs6MmlrYcfmYXK/Xzt7CzgLK0ZKa9OVF+wAzw9psNmGmkY3CyrTU64hjj4yez0XG33UJOBKDzHjjoHNnookBiEN4HMyMQHWWeS2XS/RSjDNiykIVoKFDfaPW0vDW3D/voigKjiVEpVjGbDab8Xh8fn7+8PCAm6NJnbOzM6hfGBR0tLCh5Ow4AjdZsxluo9vtGnx/nbPNOgQSuE3550cEwQCUMJgSIpBjHg7JktaiKFgd9Xp9uVzCrpETbzabtAh3nXWhRHbKmik7viK2yc0QQhDfGM7zDTRZZV6zDTliFnInhe/kr6yHCbmKchF0WfURqnHp9XpUq4S0kvP53IQo8gawJkUz0Fp3d3cku9GBwDezBkPBFbWArAimIipwFizYkWdkSjPzz87OLG8150cNFgMLrIF1Brziisrv1+R27o2CdZTkeruXY66hdsgZ1BSsw0t8dlg+XgXoItbqSsDwYgCe43iwqTlsfpM7h1wngIGAx4OJ2LKhJgU86dnZ2cXFBQEMf+4tmhiDnX+z2fT7/eVyyWra7XbL5bJer0M/39/fs9xOT09pf9qQq3khE8qavKIQeDCRKO4+CCh/qa//8Cd/EhHn5/0/+qN/97N9wg9fv/7h69f/9Dd/8+/1vr6Z15NpKDmKEBK52OK9xJPLIJJcRUAYHLchCgoNIrocKBaYObZp/tDcW6luGeyzDXWO8RmwU3UqRxcIci8rjabcLkkmslO7aMB0Jmfq0dERfocAGvRJoDfIyJTV7rAXg4bJb4Jv7u7uFosFqVtGgAMvIiBTyfACnqhGdDlLqQ65oFsoW1MajUaj3+8DboD1+8zcBH6UzX2nkvyQLyNVL/4oH1ENNR2BVC6zdsmFGmBGxGAw6Pf7EBKIz/BmJyqA7eDtYykMpLDaKSktaAaIxweQccA0ZONcqg6g3W5/5zvfgcfi/iF42nLW5If5JNzKWbOSmwkpaYIKpLRmVnitH3/8cUS8evVqNBoB0w2eptMpCfdOpwOyJwzwdE0pdbtdxpCr3+971TCqHqjdV1V5V+rAyQUoJBublJEHLwIHk4SGHoFS7b8tHyQbsJfzC8imLsccJM4sGeYG9DAEPFCY73ovycvc2MuSxurGhmwXmYfAXFbcSo1YAUmF/MKMOI1W+cOQOxKYyX4LRVFMp1NGxoJOClZYZYwMbHqlljAoIjC7BiPe3t6iz+MiunCRuL1+2PSY3mCpvXyyMNpsqaTdgh9Wyng8bqrZbJm50hIa7SRiJvdikpVfswB0JRN+nojSJazEmOS73a7b7QLFYGF7vR7oLUmXCWlnBGbtUMj61Mtzr27dSM8pKaNaLm2C5hgAACAASURBVKWEC9J+vz8/Pwdq81wgXVYxs4vpxERy7XxEYEDW7XZ5NSx57t+Jo+fPn79584b9jX0gqeqfvY4xMS3KIBA/WMjuLMHh+qW7/od//s+Ht7dPfRf/UK6nAZSFBODOWxkjutTXyugQ2dCU4a0pBD7NsMx8hom0/OtC7n38LQW8HNuUUZNRhTdFJ8e+DBpACAUfVpd9BkRpqe7VVVUtl0vU5RBdYAjOKn7HWm82PpMW7O8cY1dXV2y4kFLz+ZwDj7PEcTlqVHAztNn5+Xklgz2SepBq9iqHVHMunlOBonIgsrdv7oRaSx9I/l+XjnKEg/k4RHmtlhyxX5N6RqQIvg/hBnxAUkqIAQrpOCtdoLdQkVBE7GXfSLTAIbHZbKbT6cXFhWmSiCB3zLBjCdRoNN68eVPKVokjOSI4hqkCJsDgXIFDDZV9cFJCiHL4USk1n88nk0mtVut0Oh9//DFdhtvtNj9syOYJEMMrA9+PRiN87CsJcAt1d3TkwMUbqasN8faresGhtuQDXQ1mNs7lMhFBY0MzMV4+DioQMEQEQj1IJu4TuUVDTVD5odncrbp4I78DBcJhG7Ny0sOSGkeWMrzkkwktwAG2hmDEQnSjxQCEjiAkbgZtqNUg5A3YT+bz+XA45LYJERkEs7auYuYrjo+PqcoqJMnY7/fD4bCeNcM0R1iqpeROzeUbcu0hwGuoRyK7EPDFtcyhXoXUaTFdSd0Wqr+JrJwoVBVeykmUV8/Xsc+guOB+CGttiZAHzGVZLpfLQkLh8XjsdmUIOZLUjW11J7dMgtgMcUJZltPp1FKEPMgk4bBcLjudzosXL/gKf2ylfhbL5ZJ7QBvAgLBCLXDkJ2yMpVpr3t/fw+ACB4kloA/YLi4uLgo11tqqyxGoFK+iSlam1vcfrl+664Am/2teTwMoSRWFxEw1FVlHhOkBmAwLEJE8Qvvx+5wls9lsp3JRU31sTE7owGEAN80zwfeQ+3CSHfNtdjQyxZzoKZNkmbAB1RG47/d7TqO6nMnJbk+n05ubm6Ionj9/Djiu1O4FdHJ0dARRYf0QMsfZbMaHlCpkIVEbogOhAJfLJRklfkKJT6F2MiY7ET+B3lAHhnT3hPJI75PUovwr+IPBdC7MhwEfWEp335IJn/ExWU4ge1Iqs9Vq0ZuHV2C3HR8GCNQgRQA0Po8RWR6p4TIn00qdbHLoxjlNhBARqCc5aJ8/f77b7d6+fcsRwiAgTmCUwNncPNy5gUtSEQMhAYlvKlcKlY5Rl9Pr9b797W9//vnn28z/EiqFdiD0ZHfQYoSNDowBKWXr44vJ5pDpw6vMpTCF8vWWx3FUhyqa8ctkGvtvIwKGxpwiNOReTXqICYkKVmpEZC0mkBToWVfLAL7X2MvLnznM4wMEmTOeWjl97hITXh/Y0UGUZ8h7Q2SS1Ylv3tTbt2+XyyXm5PnApkylSjQC90YeY7/fj0Yj1ktL5kGWfSdd5gun0ymhoJP77GPoOAlvkIAntfR0wJBSYniZSIRkDfm3c58oy6FdAeKALV5uQ949pRpisS5gEHmnbIYsHzsMMAHq6scTAq/8nLnBbbPB5nQ14fpisch7GhXyEy2KAuk8N9ztdkejkWlCfh4R2H+6rSsDgk7aQfj9/T1FM/CjBAkG1rC/CDmgkB1tIqnEvsNv3JwC0km2tQOgPFyH6+tcTwMoKTMsVIT73tHIwVDI6zi0i9lDO0mQlFdAE4JzIrIp7NS8i8OADopH6vTVlP24FT8gA4v8QCpuCOEa6lIlI3wXlCq7pwk2sleTyYS6XT4EBmidNclIKQ0GA/o3sHHDY41Go5ubG6wx0Q9x0PpzarUapnHU3BRFAWoE35gbcLE8sLhURzuH3d46F4vFfD6ncTkUI7/gvDnpNjAuQJ+H5UR3ppt9HDTpgwHsSHZppX4bPn7ISHa73evra954W07ju90OWxP0mmj/C0n1S7kewpEg3jcXyFxitPlezstarUZVkLGvOW+ypdQA8U+gWCxdwCKo+BlwJo/nxl6tdJjbp6eng8EA8swZTJAEbxBUTfkFIlrmbUQgojWi8sVMRvhRfZUVJf4+VWawArgH/4ESOIZZkkl5cP4WeMQbx7AzJDJZLBbNZhOijmyy6WQLHiCTqJkrVMrDVGS2MyGdPee9E/LR0IgjvPpyMTJhocNRhrehnvVVVSG3rWTfyLeASOoqtKcmHekq1GxNDvCFDIkKpcthhZEyY2GDLhk1LcU6+6yIkGyy9zRWUKPR6PV65BwsIoQXzFEsg0ma2DcQES9evBgOhwSNnnIEw1gprddrbLD4UrYar9y1Whswo3jMhvq5o6JpqRMmYRIzBFRKX1xHbpbi8F2F3OlrakzlfZuVwnfFlzE6q55X7x0YwhI3APZqcjKdTofdxqZdpfo6upKGD9/JpJbc/Xw+B+jD7/LstqC30mOr/ua+Nwp92OvYwZpfw6jrZ7t+WnPEw3W4fmGvpwGUhNrsQT7w8iCY/Kx3CuuWoI72Mrkg+pzNZkA6ThF/IADC2z07XUvN9KD3drsdnVTcqAaUQxDMDZgldVonpBbaZ/05SvntwRa8efMGezYARIgxKqTcctLKCbWIeHh4sCvNbDYztErqDwloNl0EUpzP5+zClUp0UX+66CcioELRqtfl2gPmg/+DDmSrde1tv99vNpuMMG+BI9xbsB/HVCVHJucuQJ9v9LjxryB7EEmj0Wg2mwikENTDCZF0g3gmj0b7QQpoLAXjqLi8vASvTyYTPHegoICJvEEA7snJyaeffvrmzRsODLNodRVIbWReDZ5gRjVV/U3FjwHiXl45YGVuqV6v0ywHWh3qFJhipioE8SOCN26sye80fqSDMMA3bwfwgSsn+byOeAstudMz4E4L1LIeicxGLIFyKIB5NfyZs7SlbBcZZMgzxiG/h2M1/aPIhslfyQGbtwxhHLLtBEBX6qc6m81IqnokgePMOg7+vXq3MENcreJs7GKxWC6XrDUKjEp13CllH0FocXR0xLpjkTq7zXqvVO/PNkK8t828zZ1o5ndcK83P83IfBtPqT4wUGLRG5oB4pAaSjUaDgiqXKKVMilqWJSVfhF7EWsQ5ngz+K6ASlVWM+VatI9lAGA2ejpZjOQXgYIBndAFlTepzesygN/VFSn2jxjxlWQ4GA3IClrvwfkO67ZDfvpXBUAyMXqHymqb6TBJpQxL7F1BNQEZUWXMmLjgCNnaCc0jQr1xrP/NFycjhOlzfjOtpbIPKsqSe0SJ6AJDrbyoVB/AnztBBIlYyGEJU9B7BSSDLGQAXAhcFoirVEZu9xqg0yRAbqolUIMcDenmfUoWadCe1wqNcGh0h2/FwOByPx8gcK3nCkQ81ok0pkQNFZ7bf7+/u7hAn5Vk5SwyRQnLGU9UBLoEw4PBIylYDDbfq5MvOzhfB9oWafQMXKDEZDoe541qhClySjEiRShWmuNYkqcszCXrOQujPUFqTo47Xus9K4COCygCIWOYGsCO3LynVg5EUIfm1SnXlJPsuLi4ossHqqNPpoG5kgoEDGKiIgB2hTJ6sX6hNeUSgIuXXnOSFH62q6vT0FJQDqWlHJ/cUhm5h2OGNnL92bQFFV9xDu93m//I2yS+D5t9bO3meNBft/diLd2TiPGXJ3LpKkp2F5KDNgSPvCLT33g+T3MKB6fj/gergk+bzOcd8U971RSar9ffyWsFzYESANVMXlpSs5ZFaMN/f36/VENKElj8NLrxQUQul6Ht1ECXwwzoeap8FyzTbqXe58yftdhs+jBlOBpkdwzEh/42nDyuLDH5EUCFusOvsihEnoUvIdYG0CQgVySlreTqdYt2w3+8xADel5x2JUbXwhvBgJ7s0188l5XYrecfC8PFpCC1Q45Cxse8jVY97dX7P32M+35iW1ouDboHRhIKsBX6fyiSwOFMIqI2v3JEc0ZOyEEQ7JjVhrLvdLrOUjLZn+LHa54ZMPOhczwvCKIrb4z6ZQsfHx91uNw91fKsfXms/83WoHT5c36Sr/Opf+TlcYKCkNidF1skX2aL3NZ8BHPC73Y6/DbkN0y62KcMzNsqzs7NjdWv0ltSUU0yn0+l2u+6nbLV+UoOQm5ubjRyFqM6GsCwl/Ac0sH2TtIJRYwu7vr5+8+ZNXXU58C6UwjgnSM4Ux0HYEaoXZ7MZNaewMijSXPWMudp2u727u0PDzl/hwWZhViXv8UqdwalYZEfmzxnAu7u74XDoohZ6CVJUzqABQxtZG27Ygpq6dIRoM+IBXit0I9RjRKzUVQg0OZlMJpMJ0iu2+Pv7e6z4OIl3ahoJZeJirEptcmg/yCnOGdbv93mh/X6/3W7f3Ny8ffsWToh7YKzAAZAu5+fn5+fnvBe+Dl/JiNhsNmavAXAQwPwhP2Qu8fv2oAYQzGYzxpAiessigXdM7IgwL84/dbvdFy9e1FWgGpLuvbd2XC7wlcQJsJ75acYRwoy0vpO8oK78b02K84otQaF8LU8ODgYD/wQZRqgyOqWUt1QhbAuJLwGO/Fop7aMzj0QmZlJTSrPZbDgcmjxryFrVUJI0tMUAaFEIKo6Pj5Eo8E/z+XyxWBRFwfRgh8nRkmWFTZnAMzNZ++gCDdDBpnw4j1MUxWq1Yg4ABPm0kGMa8a2Hl1i0KIq8G41zymt1HiLCZAtiO3JO2eG3ISbM8U5FylXWY5O6FtYvK5cQznCQRc16eXh4GI/H0KWVHDMI2JiHPC+jV8mMsygKwCL/YV+I6XQ6Ho93MijgZqqqYht3zJ8k5ibWIseNF0SSDVaz2ex0OkTIIZQcQpN1GU/yw6urq5Dy2/EAql8WGk+BWSxTEcYBpPuVwdvhOlyHK56qUw41DT5RAGQ1OSGT1KOYdCOP8ZCYGgRAfImeGstJyImWep9wuoCogJhkqdBZg2MqNdFhfwfYwSNCJ7CtgLfQaSFXAnrCj1KAzIFEqS/8h9NPrVaLNrioeUgeccL5TsjUU/8BKmULBs+BnAoVCPNc5vk4ADg2KHnmFMFbmwOjyBzsQiUXezmkAM6AcXgwgenBHxx7Gxk2tWRr4u2bzR3mhvcF52SyGWzNs/OWYXFAbLe3t4xeo9GwWApB/dHREcd5ylpl7lUDDqZvqrQfpRTEIZCOAICcFzrIiICChbH4+OOP0Y3BdlBNYtDpqiPS/Qw+ABdgDQlqCRo5bqASRzi3Soq80+n0+/35fI6kgXIf4gpyc5eXl71eD7Cy2Wwmk8nLly9/dPkkNT98j5j/0cvCBms8+FsLwjhfEcmZs+RqqKtnod6ejEBej1yom4vxCnAKXOL8A8AXsrAoCreoZqyYTjC+zGfwGaEjVD1CBbaFkDnA/f19t9s181pIdEEoFcr480/GeXd3dwQzznLAZTJWxH4MiD2J2mqgEMLoR7KXD9XLG/gyqhSGk1JwKgYoz5JHI0HA+fDwcHFxAZsYMs9PWfWbXwRcOMOIgya4kF8j3+JJspXRJgis2+1Op1MrNJBCVqqVgVcG6VptzPJcLBZ+I5UcJELewMB3eOiUEmYFSBoY81DKHhhKTpx0BJ/m/c3ebUVRYH6Zo1IXgIeMM1NKVH8D9weDAbmRoigajQYuvybFGVtCFP4XqQBglCHlXfT7fTeSQPPKTk7i/nAdrsP1getpUt5JrdVCh5C3qtzkzNWCToKD9kJJSSJs9ilQDhkrNmW0XJBzpXzR2fvWav1sroicHXp8lEnwCjV1F0wqOEWszc7lkvPVajUajV6/fg1Q3qo3RpJbOzG9DUdqallBds9l6fWsbRo3kNSKusiMzeEL/ckUrLBlk6iKiH6/D4vjGme+AgwdUsjxr9CQ2Nww1DTVHQ6HjK0hCGe8+zGS+gfirGQ4zwfC/gJEeC5eHMwuALeRGQ0ict3IQnKv/nUAemuzAJ3s9bCYgMLdbrdRb6Rnz57RhAPkulG/NdeMG+6Q0ePU5N6MmHlSM17MPY5qUtIppel02paz1fHx8Wg0qmSt0mw2De7xiN7v9zRSXywW1Hq35KDUUo9mXg145Ysvvvi1X/u1H11BzB+MVz9wlSrzZ8rtpSQGHyBCrctk26EXs91YBzrHBRyQi0gO7u/vISwdeLjUZiUja0OTtdoghfK5R7ICZVZ3Oh1wXigRQcWYC25KlUI3m02sE71F8KUsJZ4CyAJ8IZiZzWaj0Yi1zz85SIBaLqS6bsgooK3e5cxPVIkRAWJ2EplMrqlBQ1jwimvgwFWoAPGxBxkb1nCfQHyCkPyNJykymZPT6RQbJpcTpUzaWKhVI7PUBeBMYzIJOQIu5PfOSz89PZ1Op3TgtBdBTf3WHXeFWkwxzazFBLRVki2xNvlvECpiBocfTEvUkC05oKGfSVIi+VY9t0PB28nJyXQ6Nd4FEJuGQPhEKFLpYtovFovNZtPv94HXbOZJRsKhFpGhTvRl+TQJvcN1uH5Zridj8l0W3VKHaGfNQuFvLldyyWeZVbSgU+SMhGRia27LqhpESDKXSo5KdiFsZxQzknzkKwAfcDAAJnvKkHsq1V2GuNbUyHw+R7m4Xq/JskUEhixYzGBNUsjDxe0WQYSTyaSQvpDN3Xi3UttlckzWCezkM4e9H2e2d2GEeiTFYIAomQTqRQT0BulppyYLNTVBXAXRwmlxf38Pz7rP3CKbWY8QOEgerdPpwDnBMgJBarUaZkzUH5DspvAWkrJS1RRzg3OdATe1VqvVsPYk5XesBsGbzYaHRf41m83oT0OlZ1mWcGMuYuCjKP/fyiPQ/8oc8Ngyl0CiNVWG4VsOpcEotdvtfr8PrAFDQ18VRTGZTFqt1kcffYSWi4/iHD07OwPAgcubzeZgMIgIOnz8qJIyVNv0lavMsJ7pSjGHWTdgq2ly0BtQDN6LmIGHTTIIBCtUsh31nAE3MCV4CzkN6boQuKKU0nK5hGLkpZAupwwr1OOHP6S+CrrdRTwUk/mYZ7U21GLAArhKjQrn8zmWnzCd1suyCqqqoqyeWVcojV6pUTjJU4BFlTndJjnUAtq22+14PIZmc6K2VAEWN+nY2LXkIL+zszN6vVhZEYq3C9lcnJ2dQX8C2Q22WFAnJydOlAP7SOCGwnjeKTkQIm3oWAbQwRJDQdTNMmcaQD3i6kWvyKIoCGx476yIhhxtS3lvRVbpgnMZ4+nB8XskCDEpzoytqXyQfzK7DPLj88lIOFoAnrJl7dW0lpGpqmo2mx3Lt5wlwEvhxdFq1QwrSZi8N+bhOlyH68deTwYonQGJCMMdUCApPwJ0QBspIcpfCuXgSlkfszsTmLIJXlxcWCHEqdP8cqu3mhz1LPvjALAKin9ikzWXAJxiu68kYgPh8XV8COwUMJfjh/MPOg1UR/IUdBsREKKQMUlVLIWqFswNNGRGXaqlpJN35Lv517rMq/cqKQXxLJfLyWSyl6caynS+DtqVuwr1hhmPx6WaDlOSAhvBc0VEq9UySqvkW8n/GhkjHgh1C9zK4nilvm2QHw01FuKpsZ3nhbplNok/iwdqarsHSHpUX2YGvy1HQ04UXiLDCO6BZWy1Wm/evCmKgpwsBFVKiTRcqdYdpRwA+EawFByqU3V5GpoRCMEIOFSg8NHRERQ4xLlxWEtu4Xv5eJOJ/rHLp5J88wNX7UcqxJmoAMS1+pGCISzttU8KM5wnInThA/Ml0FbrZ94sAMKJXStimQNEGrlUcaVuNyQHGBCoOFix3W6H8rJQ2jrJptFMMG+NuIV1FCLCa7UabdbH4/F4PCaAYUiJzQAfBBsMxV5dUnn17zW5YUo01U6J/+v3xbAMBoOkurpdVgwOgAZJ12o1cJU3JYRARFOE2QBKHgTanq2DyQP1yJs1nQZhaWqQGdJsNpG1kNR2dmivDkN2fiDq6HQ6zGTKrVJWwV2XVy5bK3AWHwD+u5k1mqLWB24YERGrmH8q5eWEUNjTrFI5P/eDWqaQyRrPC1Ln3kiwWJ3MLpFkjsYY8t+z2YwdyZ0OmD+OWNg6rLHhvRPJ397etlqtA6A8XIfrw9eTAUr2NXaEJEMTUpmVOq0BTVD8JGWoTQzwOYV08exEZIWgFWEfgR38Jgenz+xQygZ/n0q6dd/hXn6/e1UBszP6q9lDl8vleDx+eHgA3lFZzN+SMEI8DsQh575arW5ubpKagOcmSu+NErsn9Uk11QlxJBhSIx4CyDrpXMrNJ9T128wiKBDZ6GQyyZtSRgQwFLEmBAb0Lb9fliUl0pZAcdvO33HUQdG11Ig5FBuwifNGSGuiE8WWZSXTdfiDiKCT5GQyaTQakH+wPpA9/A7MCjMHUQHHw/Pnz10xulqtptOpq7WYVKTVBoMBuWnQpHEYT5oym7pCJqMIv9DsA1NIasN0mmclfbndbqn13m63s9kM9EwlBDMcEjGp0bnx3OXlZa1Wu7m5ubq68rTMa2I+fDEIu8zim1dmGQDV4nCoW3lacSfm54xLuHi04+NjAgZyjiA/l+UW6nRispD/i67DVTuh5pZJolvHGAAOMCu0HD93zz2eiCFtqqMJEeCRGgxyG5SBE1zBgLIY95k9O6vYOVwXKZMhYaYRQhDWerpyz1B6hqGMwKO6YyNsSFkZk7nVmnpU2v4mqc1PoTKXbrcLGGU2kpwF8LEc/Mn8ByQliJOpYoUxH4tC2sFzWZYML3iXu2WcW/KjWKsJDR9ityNvkqx0Ik/eMuEKKYWmjJxa8nWPCAvNUbn8f+y9eZxlZXXvvfY+U515PlXVDd1Ai0gbIPpGzSBo4nBFNOoriQgxiZE48L5xQMCBaDQgMjlErrliVBARxCnOKHo/0eD1isFcDbEZmqEHqrur6sxjnVPnnH3/+LpWNt1dDWKT1s5+/uhPVfU5ez/72c/ez+/5rd/6LRsKRowdwqqW245pZUg/uc4MHA6HAFDk47axMYEED6wRw6aKAUyzY4lomfJarWaoEUWQxXweSUAgaEH7L94OJaBMaO07V4XhBF55eYnG9cLhMIJFVndbBiARDS/yA6I0Xj3muwHnZCsWFBHHBD3AIZkc03oYUb9uAxNhreXgagYPV4GHuatVbTgmckzzpIBp4AVHKJaXJqwD9R5E9TqeancgJwBbADti67yCPfV8nqqHDu/cqepQeYHyr8VhuWpwjME7XrIiYnIiYklYNVlEzNX0Ds7IENlLXFTeNH1o0RFb2CB4YMXgaJGgmdAqpoUlRWQwGKCF59oRyxcKBTgnVmX8bljzPC0QDBM21mxxbo2RlK6aDRF+taUCvoRV0wSF4CcmT1jz2Q2p12o1kK5JEQyQrWrtUGOX4YooA8jqi2/leDwmYaJQKIDawcGlUonl1qwKRak11sIDP2KOGs4zK6CvwuEwiz0LpwkxLaQ4UY+hqBaJtrkx0cLr6OS4R/ZJ5tWMloMC9/AgmOSUiK0BLDLAYmqdaISfkZHwvoQgRSSRSOAcKVqYezQaFYtFy/qn+IqoWg7xCTeaPOKI2ouG1OwQGGpYkAnJELETYIIZnwdQE80ENzkms0XUYbHb7VYqlYkv+Y8HKp1OU57eSlaKZhlPfRb0rsr16J7peuNaUT2mPqyeKlWsHgHcIZPNVS8CHnykz+Kz+zHS1zzUTCogIvZqNaqVGYIy1fLfSXNh8+95nlV9NL4AgSx0I/cdmp8HkFq1DDihcMYzpGlVTGCAaVQrP1lEiGnJFpFtElsmT7VDopv/Xq9XKBSIhjWbTXL8CRwxShQewyeOa6fOOHutIC8naEE7cDuUbgimeRJ1/ImpjYinfoqmWRQN8xmw47XOh6O+Mt+2F+fFQQESXmGWN+pqzQnLCCEibH2zqIfRkyAqNtz2ioEjYcVCoZXNZlljgGWWkRCPx5vNph3fKAToDTqztLQE9cX71MieyWTCi3g0GuVyOVAIxzHEE9NyaqJhMjpsaDiuNbgNPwEdCB5ZbBoEzLsbsZSrBoq2YBiFyeaeI5jiirghaiRe+twjvruqJnysBFY93DrDUgFYAYMuLy+LCH6c8FVHHXWUiJAwBORiIYHhNqDpaimdkFZLwgRkMpns3r2b+N3y8nIkEoELdNWqBtA5VS9DzgsLzgXCR4oWa0ZtyViRL9Vut4FTMZ8zjqhhFsigVCoBCxzH6fV6lnyNnA5ABv7w51+PNf3Z1HJrNfY8U1X+2f4KWMmNMNbfnib/ESxKYBBftAS8fRj8RHYOmFVEQHVmKQBJDJpnN8Kh4lrR0fHV8wyr+7qI2G7TXL79k9+y+hz1HePgPKGumueLCDKJbDbLVdi2itz/VTU9MGGMbYd4zJEBTDVtn/Fc1RpIENWTyaTb7cL2jcfjUqkEgzhVHS2gnKQ9JqQJxLkFvMR4lNh+MHrgPLRAmB8xCK7rYr1uvkL2XLM3ME9ve2ZF1T6eqggQi/MZKycDPWlRfl6PPL+Wwg9a5YZyIYBRMmBAwLCG/gAR+72xlkFiOkE64g8KX2vaFe5UNBrlMeRX3ioMl00eIwuIXxPSERX4EuZm9Bz1KgK5GudNby37PhqNlstlBAZRXx2doAUtaGu1QwYoHRWt+0k4Y/jgPMjDJYzF31kneB07jtNoNGDRYmrGQdTS9ckr7c0iItA83W6XdzQf5lXLhhiKFHgX1iwftEcjNTDi1WbUTljTNfgLcJA3MusZCw9chYjEtRQ1RB07da7XYjQsS5ZPQ2iSQDOQJaxJ0wTXCJ5OtQJyOBw2Bw1jMkTdAR3N6EQ7xVDYfQHRJhIJ/hcoKUqigBhYILlMhg51I4DA1aQl4lZGnbrq6mIjzIcjWliSUPKqOjZzySzqmUwGvgdvv3Xr1mEXyvizaFksOKwuRRN107TZVSgUAKaj0ahWq4U0Rxig4KhRgKepJ5YeZBdu2w80FSKCSg9uw1GPGxHhgNxrbhPzTUSmWqDS9kKG21i5Z2dnLRcHcaHdIEbS8ak+1mqk8DMtjXQEotEx24zZ/xoAskkiauiIHaAB05EWt3R8abxgZZ5QwgWramOJNoOhKAAAIABJREFUooOvGMIGJtpGyEhuR32pLF4Mm8UP9uj1ej3Qg6iDOhAZ0MNzwdzAaAx+FLMnOmCDAG9qUVRH7aKMXATPMT/t3WWaFug3UeP3GS0Da+iTt1M4HCb3bnZ2lk2IyU8xESMD2pLDRMk8i+Ewl1ZWVlAuRrUwhP+lKlqBkPA3z6+j8mXRJD+eL/GJfMaaKGbRCfuM5wvZuxp8TyaTpMdt2LBhOByCp6H3UAIYr0m3uTszMzPtdlvUt5U3MIeC+WYuiaqrmQDEZCDIXRUBc98ZJd519pAaw93tdlut1szMDPMHHYir8ffwQ+tzAmF53ZGtGAqFEJfbKB3c9rMtd27ZsuXAn9m8efMTNx//iA7Xu+P8c65/xd9fdmLyIPTtV6Idfld0WLdDBiiNIOFNB4fH2xNE6Kqkz9VQtT38jmbhsJKxPLM2WJrnRB0Kx+p5QWaiaIlqUcqTZQ9gAQqxzAxznAFkGPPHATk7K0en0yHDkSUwoiVSbEE1rgX1IUoj3l+8qqLRKKuj53mIF+GiplpdxjSIQFV/aMzzJWjzYYgHy8Cw1ZGlgncx/p0kHQOYPE1ZFREgqVGJnudhmwL1CN4STQ8aj8fNZnM6nZIvH1aveFEkColo9px02GLHrD2slABiwAdveUYgpMUzRIThJTkdFxvX5zCSSqVQnrFak7dB/rWhzJWVlXq9TjQTESRAEIBroUzQXrvdZlHk1Pl83iaeUWuA5rFaWc3MzLRaLTCWaHUli+KFNT0IOtZ1XVJwstlsVGuEmg/ivsk3NpIHfsSGDy0WOtWkWu+h/jLAEcP3XLXoUg2AmNESoJZzY7PO89VeN6TIZIto+RkR4c4mtMi1ARS2Z1PVkPADOmDbT4qCHo5vF2ihz5BmY5iCxfLGRDddYErGFutHNkvAPqNszS8CD22cbi1szQaV6KolnTA3AElcvumbkTwykhOfZyrzwRhZmDOscx1NpSdgggY07MvN8lT0yWjYPBeFQbZH4vGHr/V8Olq/Oz0kJS9YdrO4rdnRPJVmMk/I2Sd3Jx6P7969m8cBypDJkE6n6/U6RGZE8/EdzWdio+u6LnJnppOJJnlPhrVYpSXxWPoXYH15edlxHOsVW2UDlzCgmBPx0kAlz2vEQCqPucF0tgoIq8Dc9rBMtBL6gZ+4R9G2bNnyjne9W3zvcLvL9utF7/qbfQHluH77TVdf/80fP1AbxSqPf+rzTj/rJU+b/5WWeR5CaPiwpw5g60FqhwxQsmufqjIdbVlUC2Dwng2r27CnEXBbzLA8tGXAU4mevSXh/KD9LLRt/JOFS/zSHwNnxJIsHZsfeOXZaxosQumaRqMB2AqrI7GnhpHGCnAcQi3EdOCBwpqJTJdE66f5g7aEvaB8RIRXKnk2ogVIWBqBgKw36JZYXFlfoXD4i2hCMQuk3RRWL6wKLX4Nl8Zw0SKRCIkOfJgqc4uLi7z6p6p/J0JNt8HiKP05nennELAywv1+v16vl8tlPGVYla10kD9C6leL2g7EsjXhm0mXYWlMp9NGTnP2kGa7s5ZQ/IMtAffarssCbTH1mAT00Dcu0HDDUK3v41p5WUQgdI2yBUiZShVKVZTMm/hku1ZgRkSQz/Jf+wLNvRrsFCMMmoHs3Gtd9K9hIa2/DAIwKYKV+4P+4YmYajaxEcM80ZZLAU8WUncwUrl54mDXXHWHDWl2jqiaE5DHQI3ULZ8n3dhTyEh7TEQzkblNxppXq1VUBOLTy061MhY/WBB2ojppYA0kKGwcjzAKRTOg9TOykIJkChv29cN3jmk2ZDzLJMH4P+m6LsaKvP3sBSi+PTAOD8wu0E9EPUR5YMfqY2XSF7vdQ62sOPFl3BtwZNB4Y5RKJZ5W2xhP1NxxOp2yI2UTZbPF0tfsyeKtDmUw9dXUDYVCVKbxPI+sO4YRBDwej9PpNCnz9IF9ZjKZBOtPtCTEqnpjeZrWRlc9zc2nJ/a8x2IxMLQ/eOVpMU9bU9iH0GG+y57hsWie55335nNF5Mr3vZ8H6rw3n+uIc8X73rf/feN48eb3XHX7ia+7+JwnHxFf2X33D79182e2nfim/ZjWBk1Ekidc8cnLDnUn/ku0Q2kblMlkarUab3BbwFgk7KVD4+3ACm1RD3gaOBiWJUCVBVWNfeGAVtckqo5FvFVZHVnneMvQE94jrlr8EIdlFcG6jBVrOBzW63VQC2//sVaJhHzyx6TAxJ4ajtBDds8GZyGBor7yeizwwJFoNMqF2yiBZXl3A6ds7YzFYgsLC5wOlZ6IdLtdzsUSaPG4kFop4THEOLBEWXomaJvXbi6Xw9+RYccGxcyBuV+8o0PqUTcej80gcDQatdvtQqEAogW5ggaAF61WC3UaSGjPnj2u65K7DTThXU9ITlTkGlM/Z7A+I2P1ecHBEIdE9+gP2FfUH5u9BzSn67qzs7OLi4uckQ8zD1mYI5FIu90G8btq80SDSGYuWTJBKBRKJBKmlGU0zPHRNKmephSEtRqeqBWLxUMftnGlXJqzjzcCjeNbjNKeI+YeGIj/og6KLbee+lhxja7mhFlXWcuBJswNCzFDIKEWGGjdQpvGxndy11x1QHS1Xjy5vWO1yzbazyLmoVCoUqk0m03uoH8H6K+kxwwRVVXyMdMdcjsGg0GpVDINsfk2GLIXLY9ukhLANHdqqtJwnj5wlXG3tk21IjeOqnQseD0ajUiMYyTDWvScyQNSn2q+jqcZ+uBOUxFgEDbVhBugEvsuhssshzwNSnDtFoKIRCLYvtrem3RvigIgp+ZB89N79I2f0WiORiMmv4l/7BWUzWapamsbDEeLZjmOgzoTSrVSqbC5mqhzRUyLVvDgTyYT3kUTzd0EhYdU+c1bwh4KXtqsEWhSY7EYDko8y47qjA96m06n55/35s/ceKOIOOJcdsUVF5x/3s9/dd3LLr98P98ZVX9Yr5zxkqdtzDgi0SNOeO6rTniuiEhPxOtv/eoHr/3m9++pTtJH/c7Lzv2rFx0Td0S8lZ23fPRDn/7e3TUpHveMl7/x1c/Z4O74+OuviL/jA2euj4yXvv76N3zztL/7wGmV8OrCja+/aPDWD/3FRt+O1RvtufW6D1/37Tv2TGef9rJzz33pcUlnf8eccaR3x/mv++hvP3/T//L3YfbeC/7sgp925acvPVVSJ175yctOlDvOf93VT3nOhltvue3+lWPfe+2lJ4T2d7T9tt4d57/2I//PH6z77i2371xJPu6UV7z5nOduiDmy38ukSxCQ8sj6lhzXb/v0B6+55acPtt3SE57xx697zanHxB8TycPh1g6N9T9POAyTvUAtXuPf0PMqIVzFLpwPjMfjXq8HB+OoXdleoRxPk22Nt0DcgyzGU9EYC7yjqjKWE146vF7htHAOR5Llui4LAHFhXqyVSmVubg6WC2wKPrNslRlfmceQVik0roVhiWvpWOs/f08mk9lslgBcq9VyXZcT2dZ8oNXqSA0e+7yNIlowgw/7BaCo3UnrYb00WWFY02JgUAxpGdoTkWKxiFySHrLscWR4JiLgxiFBBRmDyOctJghRzQJgcdLhcEguRbVahTSdTCbIrbLZbKFQ4BoJxHuel81mLdOC0H+pVCI+TukgfyC+2WzWarVOp9PpdHB+DmsWP2oHbiJVE4vFIrk4pGqBDDKZDKemq2YxiA4VdSzCsqg2R427LQsKDjKkNZej0ShFxtnP+PMtbMskIrCbB2iuZgix4yLbwFMHH1fziD11dnTU055111GloOEbHjdAFc8Rc9ui84AAzJLM7xpk6Xlev99n/EfqeO9qbjgxWRK6/ewsIBJKyVUPASAFSJTsEIMsfF40B5znAv6bceY4pkWxV81U6wAN1ZiMnQZX0el0QL1WXwDUwo7RXjhAc5zhuTqrkc1Vc8fD6rIE/93tdjmO/8YxwqIVtnK5nIVrPRUCsYG06+XOQgfC8HmaOc5A8Xrh6qbaZmZm2N5QlcrzxcHpA7sgbqipG8XnDxXWUljJZDIWi+3cuRPYZ1oFhr1YLDLJLbl7qulKjMlQq0KQ3+Z/k9NzP03LDWKrRiIdnhusILzBwN+8PaA2eSRFbfP9EpRMJlMsFrlfPO/RaLRer9tzTVrVgZ+4R9cssCYiN954wzNPORk06Z+Ze7do8beyizd+9rtbdvfGe8Xh+9u/tP3Ys6/81Je++Il3PLP22fffvGcsIoP7PnnRddXfe+vHPv/Fj13w9Or17/7kfYPo7CnHj2+/uz2VSfPf/ufScOnb/96ayrR15+3jzSfPPiT+Mdx2w99+9IET/+qqG7/4ibc/Y/T9PStrHHOtPsROuOKTl580e+KVX7j5ls9rZLm/48u7Tnr9VTd+7XOXnphc+2j7bYMd/7jtN97w9zd98RN//futGy761AMrcsAuHWB89u3b4IGPf+TWyp9e/ukv/eMNl//5sbu+vbDyMDcxaLRDACgzmYzVPAirAzZ6mqmK0kTE3oOOCgdNNInmz1HfWnbnnpZG9NTqfKw+FBb25VCi6xxPMoAmpjYowBQWct53rKkmbxJVLtJhpPpQZbyeeDHZoghy8kfkIXsKhQI0LS9By0fBx9tYHCMsgaG8po32IC1xMBiwLLGSARwZRl6aQJmJZnraagoZBrADyZkrG8DC07Bgt9sFTJsHJAmb7PVZkPw5s9w+QzO89GkTrYiDF7ThfqhTZgJB57CWyiiVSolEAonhzp07t23bRmEMlgrLawGys8GAbAAJxePx2dlZwugE1NgbLC0tkY6NjJLBBOtENFU/5Mv+BtlwF0yzzynIUQUKwLIw/UynxeTM5/OQo1TvdF23UCjk83kuBJ1DNps1nG0sNY1F3byNDvygRXwFqIy4ctQ3QHxqPGATEVKwGquyP7sCqgkql+eFTrqaWgGwMPcDpiUsOJfGrXd8Ilq4dkbGj6hEBM4pphk5DMXMzIyl1IAzbHsJ/DIu1nBGrVYj1aNSqUBmU1ybLaWdjm744TsHMQzqeR5glwlm7gcECsCOBPGNp+QrjtayimhZLKYlh2KT4w9qWwtpKn2hUGDTAqaxfeZEs5g9zSFjE0Kwe6xFGcgZBzjmcjmjIe35okiVqKaZs9uGdjgcNhoNdlb+TjqOA5SHjESZsHv3bupOeT5lgvkBT7UaDZGHcDhcqVRQIxibQBjdVDqWgsOe1iJXQOd8Pm87VUcj3TxfyKZ5C/kxt6fqILtkepVOpzlaRMtS8GzyEs7n8zyVB37iHnW77PIrzjjj5fx8//3388OZZ/3JJe997/6/EJ574Tvf+PTud/7uvD99yel/9vpLPn1bVbed8WP+/OxTN5fi4Wj++OeePtf919pQZLj7G7dH/vC1p23OR2P541/4mhdEb//mruHMumcf1bt1Z3/S3vKd3m+84om9b9/VmvR23No/+lnrHoKdhwtf/4HzgnNefFIlHk1vPOXMV22Kr3XMtfuwb4ttPOuVzz42F3XkgEfbb4se8dLXnHZ8PhrLP+EFr35B5Ec3L6x5mQ/94iPpm+NG3Ul3efdSczVWeeJpZ7/mcfG1exI0XzuUxUlBS9FoFEuXvd6qoBDe3SROsrbx0mS5tc8TOLbIsjGIsG4Wq2VXajVI7Osm0SM8KlqzAZaC5QrTHxP68PomXYOVL5fLwbTZK5v/wkjIojOc0dNiErlcrlwuR7WaBevBWN1wWK3hrsAxsViMdB9wDH2YqD2b40vOtROF1EaOYTRNnqc2n1OfGA4CkpCiYSnoiul0ynIuSpCYjhNIXSqV4CxDaiCHgKHf72ez2VQqxTizxHJAUT8/R430bH21zwD4UHetrKx0Oh0IDAYKRSngjErZY63IZ0RULpdLJpMzMzPz8/OwvOBj4NRIbRqxEHJ8dscml4TJZjkH31sHLCoHGp5Op61WazQaGQxiU8Gv/FAoFJLJZC6XY/HjM/V6HSIk5vN1Yh21uwkM5Sv7QpC9GtcCrcKCzX3xgx4YdJMNmNsOd3niq6xjQVg/Q8as5u6bu434ijHCO5KbIurtIkoNghcJNEO/EbKYqGU9WMe2c8AIv3EgBjo8OJ7PPp2nqVarkSMlqp4EyjAZ/Jdjw2sml/zFrKZsMtu/9rwYo893jbdD/wc33Ov1qALF5haSG9rMCkZ7Gi5nwtMBVMLcBSYejzwUHZcJ6IGtNPp/PB4DmrkL2WyW7TdIzs4lPq4RQOz5lKz8l/GXjKT1lqz5iVZS4IHlLExjpllEndd486BsFi1eMDc3F4/HK5UKU84uBBKRagUmXQ1pQSmGnb26PYP0n/0b4hDgvk05v4aSjTSTitcjbHFELQ6YaQReImrOcOAn7tE1xvOSSy895phj7I+bNj3u4ve8Z6/56W/hwpNPf+N7rv705//xmne/bP5fP3TxN/YAKd1YeebnbwwnNBPyVqciMu7vHiePTatyJvO45Hj3YCyJI589u/z93bV7vrU8d9pTnz+3/K17a7u/V519zpGJh5xs3F9YTT4+E9nrj/s95pp92M81JNYnFKMf4Gj7bZHU49I/J03C6U2J1V2D8SM7yCPp28zRr7rgjzL/5/qL/r8zX/oXF/7DD2oPY/kbNG2HBlAaGcZb0hCSbSL5GNANZ0HRF58oEnJVvQf5Zwo2UQIPfpFCL2ALts5+yaBphuCcsLolEMz23aInvV4PUw8SlqdqhGGm6yJCKjFdhdhghePUXIijGcFogFA9lstlQs/T6bTdbnc6naF6y1llCKM9PJ9yy5JgyOMhOuMfao5sFEVUK4KIT1RHVA6lJvY3SCRhDoCwtkF3NCcd8RbLJHCWPGX4Tj+kRu5mYx7z2R4hAIDfwpiGl7shFdbFer2OlWC9XkdGBpVrfCSLEy2shTHBi+Z0DZgrlUqVSqVcLruuCxYHC3qe1263W63WRCsSTdV8hGUMisgGsNFoNJtNyE7uIGibiQeQMhklclIEAPl8fm5uLpfLwVtzNPg8JqcBSiOkaf1+v1qtUj8TNHzgp8zqs3vqfsC6yBX5P8nHeFKmWnUGahAMDePOveAesVRzI4CMrmbsmsIV1opIN/fFdBGpVArjG+ehpoAAEbgoZHaWN2O55AaAbOoav2jIEjBkD6moiBDBoik3bHyAQRMtF2mjR/SWHR23kisFPPF0zGhtJEhuLmoymViiHr6GPOlQp3C63PpIJOJnN3k3mlsn44mghbeQvSE9z0OECguOroM5Y9Dc3nhMbMv9YgPAW4UkIXZ0/qC2vSrT6fRE87TA1p7mIMNc9vt9FNJ0mJcDvTL+kiH1v8NNI0EaHLc7k8kQNDCjKN6iPA5koBMSmarC2HVduAkwKNa2zFsE9wgMmHWg7Rmtu4g8CVEKUQvm0lRN2SA7iZuPH66UwKNunue99S0XGDcpIvfdd+/b3/a2h900ijjhzFG/+9KXzbb+pTpa+1OhxHy4t7Xz8wzR1fa9vfB8PCxOatOzMvd970dfXcj/wabZY56V2/WVf/nuA9lnbUo9NPoRTqyP9O5prz6SYz7clT6093aeX/Ro4+69nZ/fjnHnvn5kXTz8KLu0v765qeOef867PnjNZ276yGuO/N//cM39B4q+B+0/2iEAlIjVRHeKjnr1mSLQ0AYbWWKUtszzLubVZu+FvSI1vCUBc7zXeN2zC+cDRIdtxYpGo6VSiXA8ahucdwaDAXtZ9DcGgsErlhjEUpdIJIBH/Mv7faplr42CtcvnL/gsHnnkkUSWW60WJkSO1u0I+6yeHU2UgTcC80Ha+eNxNtqO4xQKBbAX5ApOeKJSJNBtu90eqdGmsVn0H2oT8g/ZADgeYLGq1uWi/nZWr8x4Sk4hIuwcppqUyr0GazKq3BFHkzxCmnTsqhZWRFjdc7lcoVAAg8I6Gx0S0XRXphOVXQw9FAoFosy5XA4qyFUPKdEC6P7ILKtRuVwOh8MwsgA7BhwGBXQLnKXaDXxJNBq1PFaWMWo/MqQseKAN13Xn5+eBuSu+KueQXv4HhyFi73HgBw1cSOaQpwy9iBglJro9sCfFT5XxLc5ogey9zssDIr7ySHbvoIi4g6YHBYqJBkxZ5s1qcaLVtzkCUNVSZKaa/c3AmuCEJ4hbZk+KieTsugg+QF56nkcxAhsHCx/zYR5/Q64EnUOaBu5qlaxIJIKBJebenoaegTW4H3B/HZ/SAMDNFTFL2YaBpEn/JzQhaq/GGwZ6PqT+WdxTtsFRrbYw0ppYyCcg0fmk2QAZkxdW6yKmMS9ST4MnvGwNlzNvmT8Wjs9kMoQLppr0TRzDCE4eahschhSqklFaXl7mGtGIl8vlZrPJ8MImVKtVO344HJ6dneWp4dUBgjdLo5WVlUQiUSwWqTHheZ69+sgBCmkJWUedyLLZrNUWooe8YXjzxGKxTCYT2p/t/8Fqk8nkLRec/9mbbuLXYzY9jh8+c+MNb33LWyaa5faQ1r/7/Vdcc8sdC+3RZLW7cPtXP7eYflLhAK4PM/PPe/LoK1d/487GaNS462tXf2345P+2LibiZo4/2bvl+q2Jk4/LhDNPOHnmzuv/SU55QnYvXBBb//zfmX7tf3z535ZXVrvb//mGT9w3WPuYazU3Wgx176mP9j+Iv+jRhg9+8R9uvrs5GjXv/sY/fG30W89bH/vFD7JW3/pbr/rvX/jR9vZoMhXXdSTIx3mk7RBkeeMTDg4DYfDWi6pnECsfz7+rdt9s91lpPLUcY+WjWhdLnYEAk2NapI/oEto4OE7TJNF43ZiYHZgC0iLsFfGVWaNSIqpH/sILl2uht9ls1tVUR2NNGARP85GNIiWnuF6vc1FkNuDmjduLq+4kDBS6t1gshsKJVY13d/ShhjIAC8gPYK6FuliwYURYckJqx82gTTTz2nVdNvHs40OhEKmvjmYxczSYEuJWBEw5FJACqm9VHY+haiZaVI2AYywWMz88YHo+n2e2cN8jkUg+n+d0LMywublcTkToQ0gdXkS5SUedSuLxeKFQOPLII4844gj8gFi/KWS8sLDACg1hDCRFLul5HppCGNxisYii1JIDAO6GQoCVotW3WY32qtzITeEWANcsIUlECOjbfYR7ZoLtpTjcb4tqSRvuNYnSDJdNQkezT0gvAyuA4VCwhbVuMjFBsIsdgcnGFx2NYnNDkVFaWDmmhTe5cfaoRrW0PXMAfM80Fq35xA4trLZE4M5YLNZsNh11NySeIFo4gDtFBNP45ng8jltq1FfPUJSI4vE0OtMQv6ulgCKazg8yBgeHQqFer8fomcsmo0qmUUxdgey94XkenLpJO9BJA7M4PvlJokh3olU9mWOmCIe8LBaLluht8mg4SF47jCHbcmArd3mqBWl4ama0+OpEEwd5k+CdBKJ11CzWMKKn2X4k8tNP5q0ZV9nMB6zbDGc+QMfyQuYJJQOSMonAStd1M5lMt9vlDZBKpebn5/fs2YMUiu9a4JuhM9N7oPOqullxrriWB0PPg9iXomWme+HIDAtH2LNnz9zc3MM+er9Q8zxPFGSd8fIzL7r44r++8MKbPnOjPNSZ4SEtfvQZJ//k09e98+q7F1fC+Q0nPPPVb3vBfFhkTdFh/NhXXnjWR6665FUfr0v+8aec+c5XIgsMFU76vdz4W095UiEs4cKTnpL51A+ffmJ+n9hH7Oiz/ubsa6/64DmfWpL53z7jTW+aOcAx12gzG05/Vu7db/h/PxZ64hWfvOzER9rDtS5ow4s3/NsHXvfxHYPUplPOesefHjPzKA6yVt8SR77oN7539Xv+8t27hqkjfvPUc96wKdBQPrLm/Oyn/+dRfO2JJz3pUZ/y7W9/e0iNA4l0WBBK1Eh5qkYSoqY5vMWstC7vJt4IpkKDDhHNH2RvPaMViieaZ23aMvATyw9yRnsLw2QQ0BRf2WtXa/DwcllYWFheXo7FYqVSCT0cWMqiwJAQohIu/ks0A5cIIPAlHA73er09e/bAfpHdfNRRR4HATMbEuEGlcHAozNnZ2XXr1hWLRRisvcZ8ZWWlWq3il8mG/nmnnvrVr3yFQbB4KFcHxrUgF2sqUjZ4F0/tiyGHLCIMMnZUKAZQcNXLk+jhjBp9u6p/ZxkwvGWsp40eYVN/3Nlkmqurq81ms16vj8djVmijwUZaUQbK2dwoXddtNBpbt2697bbbfvzjH7NY5vN5y8gmb4YL9LeVlZWdO3cuLy9jGpVIJBB7ZTIZwnNskLgiAm0QQqAxqJpisUhiEDduqiaITDloFUhNo9zsDu7cubNWqzE3GJmN6+cP8KC9+pz/H1mqo1kyDDhMEo8DuQs8X5b7ZRpNYpGs4sSvuaKwli6EhHN8BTyBViG10hyrTfpQa35yj/hiKBSih7wQIlrYGlzr+IzuLbPHaFRSvmyrYMH6mZkZdpiTyWT79u0Yg1cqFSYM+0MwBCMT8mUTcyiglahJ09zcHG+JZDK5tLSEGpI7ctRRR/EkspdjW8K1j0Yj5oyjlYTm5ubm5+eHWs4baTUbQnDkYDAgS4wRa7Va551//rXXXMPHVrRWkyhfyyRHSeKpVNpUpDGtxWrJUqIA3RQ7CBiYBjyqbCynatLJNmAymbA35s6K6hHBW4BaC92wVbD9nsl26SFbYgbT03hCXP2ker3evffee//99wPveKKTySSRffZ1k8lkfn4eBcL27dtbrRa2teYVip1Zv9/HAsJ13Wq16vhsMtEeHHPMMWwVxGcSDD2RTqcpXMTzQifZwDQajU2bNv1C692BV9jPff4L573lrZ7n/fWFFzqOc9HFF/Mi9f965WWX/tHpL/2FTnqYt8CH/Fe1HRoNJZgsrAVR2BC7mklD0IcXxETraFvI2wqtsm2FI+QdGtJ0GVGbZQsQD4dDK2FHdggpEQahgCl8HT5spGW+zcyF7TUvOxRILEtkosTjcYKSaJVCak7EPp4tvonEWT5J8eYdB1xjbw1lUiwWCVoRvQKfARaNF4T/y+VylUqFPOh90aTo6sten5ERXdpZvUjWITdPdG6NAAAgAElEQVSIlcYMk1lRRGQ0GsGlcTmAM7oKGmaF89SPyZgPoAnjxhmRK4S0MB2fRPw+UpdHnEocx0F7mslkQLdQelxXOBw2+gdehMtnmYTqgDMjXs8a2W63EUvhJ0/NDxEhDRzSqNFosNJPp1PW/kgk0mq1VldXoZdYMgF/pVKJs5dKJU460gou4Db0ErFYbN26deVyOZ/PQ58AEcDZwFmWalJlDU0Oh8Pl5WUqqUTUOWv/sbCHPmWAcvYA3GiTQ/iZD5AZRBHkun3GUyUlFBpTIq51kkTE0oZ4SEFsACk+ANM5VZtJNopxrRHADIEF5wdTLLCWM5Fi6t5gl8Z0QiPrqicDD93IV51yPB6zQ/B8de1BtwTKeTx5dQAN7buTyQSkAiXMgKNtiEQilUpFRNha2JUiExSfrsDEALwusFoEVDGRLBCMyEQ0ls3PMPfknEEukgjo+eqbh9UCU1TDAHSjz0YoQlWyx/YeKkVlBlqqFm9jz1dOwt5dgC3TEvAaNK3tVJXTvC152B01BiYJBuEQZx9qqQV7MSJH4RIY2w0bNjAPu90uw8t7Fb6c7QFgmnABA4VIic5zy7guWAnw6Nzc3IYNG0Qtn3jbM6OwQDJgjXbTtCgHvTmOc/F73gN83PfXoAXt16UdgpD3JZdc8p9/0qDt1TyRU0899VD3Imi/VDsw+YFCY0Yr6YlmQvBDwlcFkYA1q6+oANEWM9OZGOJxHAcD8EQiYUkMKysrxB/ZH9oZHZVjsg1gj2TELQeExp6qGSTfJfwaj8ct50ZEVrV0EzQnUIO9DftAdpug0mKxCPnEnmH79u38L4BJNDTMH6HxwNagTMAQG112rabyNO6NfZ3tcEBsxoDyRxi76XTabDaB9WSW5HI5y9oRkVqtBk1Ix2wMiYmvX7+e3aMxoGhMZX/aPkYYshk1OaICU22ymbfUw5gaObFDg0GEtkTFy5aAnZLhdc7FPoRxMzm767owha1Wa+qrZeXvLZMQppMxZCtum1iS8fP5PCflW2hvPM9rtVpoLtkVZLPZRqMBv4A4J6R1ZZPJJB4ddmo2KiQAoSxnyzSj9VcJjNiwrK6u1mo1HOIO8MQ9irZ58+YrL7v0YT9zcE8atKA9Ru2QVcoJWtCC9pg2fD0tBAm5CFwQkVAohAhBNEUGihpMaenSoqk2omTVdDrlk41Go1arWdYUzC7UOxncrqYts34bRQRtRubsRIuVA+yMGBMR+C2iFuAJ45vBSYQp+C9isqZ9BPREIhGyWEjAshA5uhp4cWMQLeA7mUzI/yBGz7WTQhRTk3/LNzf+Dx4Obwe+zlV4nkcBQ6B2o9EoFAqTyQQbWj4DvANygeREfSjBgqVSCc6v2+3ayNjA2h331Ktrqvl2IU0cRF7JHUTDQCVSuHxi2RaCcDVBKqz2ZAy4Ze2Q6QXlb3pl4sKO+lNCNqORhYw0fSf7ECPaIWuhjWdmZo444ggSExnnwWCQTqd37tyJNIgggIjgelsul/FqCGntCbh/LhN3XnjHsVblYW8TDofb7TY1x5lyxKzMUBbyGME3gfXQY+BD+cTNx+9bpztoD9OCUoq/qu1Q+lAGLWhBe+yaXx3Iv5bq7midYvsvApGIz9DGYTFjoW1PvXX4yuzsLNDK8zwLBbJykyHLJ1nFLRCMctRVS0WwheVhRLSOkZ2FOLslfRtdhETEPCY9LWxomT1EXcmxaDQaKD1cX8lvxJ2m8CPebdQsegyLWTNWoukdpDdB3SH5FbUIRSuCiNO0g4zPzMwMyjwRWbduHVa4CFvhApeXlwnUOppNyJ1CU+E4TqPRAOZSEt1/O8QX7OYUU632xF1A1oz4mEowNhMmkwkmvoDasNZ95WLBo6gOLJcl5rMBBgdbaFsU13KDQurAaqVf7QOeJsXD5mJKNRwOsbNl2mDWJiKWYAcARSRKYBre1NhfESE4zonK5bKnjektIr1er1ar7dy509yUcrkcQHk6nVp9L7wjMDSF/D6Ij2fQgnb4tYChDFrQDs/mqOM6cVjoFoMRrM3YIWEmyjLfaDQI/5VKJSStfsUqXJeIgH4IRqMXRKwGUDNJHIwXAWgTRhOI73a7RGPhq+DDHF9aK1gENAOhxd+REnItFgU2fxzRnDxAJ/lVZN3Bt5l9AfDXU+9PC+vTT8uDoREch98lj6Tdbs+oDTsaQZjFTqeD0QwiP5AcuVagLmxQEaR2u91du3aRIl2pVHq9HkOEwFdESPQRNX0kfwW8Dv4jj81u+kStNC0VjH/xJjPGEUoSxhoxt2jd9onW0zJTCEQFzBnYOzYkyC5RgcPeWTodZlsiAqgNqe2O7SsMIPIxbp+oRfH8/Ly5bzJPqMxurLDF2TkjsJ7bRP5fJpMBU0L6ctWpVKrT6Xia1DWdTgmRI3EGvzLI2HqYJJQ589hpKIMWtMOjBYAyaEE7PBsYwlPv1Yna+AOMQG84/mC6PtEi74CksJqWAxEg6kingISr1WoGI2AZe70efJsJ7ACIyCsJ5mLcCGQxm1iLmCPNFF8WC3FbjuapyTxrPEJGvutogjZXR9YO+d2dTqfRaETVip8UFszYPfVs5ziOGmkZXQqQtRxzroixIqUGAaKrDSiD0sCsuOBNGfDpdFoul3FR3bVrFwgmlUrhw8Ag4PwAfFldXe10Ot1uFz98EuBISQEFMiyMqoigc8UvifsOMQn5h1oxooa4rppPmTLViFVX64qZ6nQymXQ6HVKgPC0twXYFpYRJD+2qRQRkSR0Hg5WeWiAxwth+MQ9hK+fn50Oh0PLycq/Xs30CqT9mt8QHsEMyxaqB6V6vl81mKRJhZr1MYE8d/m2zhJWB2Xya2JRcRqSZtgl57B/coAXt17UFgDJoQTs8myEYUd8AopaQUhYstmRbyDxPk3PBc61Wy1NDBkAYYA6+kOwTGCN/GgpWRLA7/Aqf5Dy0uNSM1lM1m0BPTfuBdKRXj7T8IwcnCBvRogBTLaOCVaSZMFjgOJfL9fv9ZrNpoIegreWXuFrweqrG7CaOLBQKgC0UgRwwHo8TQ4fCjEajIy3cyhBNJhNgJdgXcAmLVigUIpEIDosUlgSpm55V1LbTKF5sX5PJZKlU2r17NyjWMqPT6XStVuOLjlaDJHQOsKYPAEFLYO90OrCPyWSSn83HF44ZDhjIZV6k2ImLiOu6kLh+ke5Y6+6MRiPLfMdcDGMHy/e34eWLuVwOepKAPtpKfCQWFxfJlBpr+R8ugbx+dJ8UMBMtldTpdJDq9vt96oThSMp+xhKVoloInmFnesOmWz0hvuKqhb6osDVoQQvaflsAKIMWtMOzRbU0M7nDrMEGLDCehHhj+Z9MJsViEXILhozV1FFDUKhKAB+ngH/iLMRARcTVWnmizu2ErY0VI6kc+IViD/bUVd9QiC6+KxoPJRuXPwLCQJ/ARMwjTUcItVav15H9RSIR7JDMup/sYFfrOcHeQTra1TFKFjvOZrOYT7XbbSA42dmrWlORBgMnaiafy+VIM4cxPeKII/AbAl+ChCy0SmVq13Ut2cjCtWA7Is70sNPppFKparWayWQsRRo+EhEn8IhTEJUGJlosHuKTq7ZtBiF1vg5taUia7QeKApAfBC2IE36am9tsNvGipwYPWJ9bA5TkRhuV22q12JAAMXFER0HbaDQIylPstFQqgWtxGG00GqSCWcWmqdbsyWQy1Wo1l8uRkkV03qL5bIqi0SiZ4Jb7T+oPn+x2u4uLi0xgM7kLWtCCtlYLAGXQgnZ4NgJ/Ea0ZLZoTYzkNfqceGoBARMAu5qdjqzXOnUgSHXXGjmipJNGEcUxDASXm8S6KsXAuBOnm83kqzSSTSWxHYUDBH3ZYQAzAl4gzfBIpxoVCAatOAK7lRFsRGspQQUMCccywMKTFsQjci2YskZABbAUvWnS+VquNfbW4zKPH0npmtKA8g4k8FHp4dnaW2DSR7mazOR6PU6kU9RpmZmYgL0mfF825GY1GJLVY7jOMoOkaLRGHlG1RHhcOj8Rng7zcQQCfpdFwH6daIQKMi8AAzI2HDkia2wFShxcEDVu8uNVqDQaDfD5vkweTV/hsc/KHIzQ7HkAqUJvOkMkELEaKwCyFSYVK54YiV2CaYcYUj8dRaCwvL4dCoXa7XSgUMHNlHjLNXLWswoM2rIXBwPS1Ws0Q83/eoxu0oP16tgBQBi1oh2ezeLf/LySr4oBjLobwRqzlMGrm/OdpEW1MZ2ABbXEFz5H9E9HCpLCAoshMNEVXNJ3cMBCCNmAZ+T2EREmpocolaMy0lZ5mjgMHJ5MJ9jGNRqNarVokNJfLRSKRTZs2bdu2jTRhuEMOgloUg0OuxfHZsJuAki9acSAi6eAMGxDgCJwWCsWpr64g3PDs7GyxWCQ1x5Bft9tttVrGiZIFwuWPx2MyokRzvSeTSavV4ovLy8uUMEgmk5bLzBmt7BC3EqrS3adKpykW/Bni6AcATyaWsGvk89xc5gDlqQw6c4vJsAG0ichYC+qaRjYSiaxfv77b7XY6HWaOpxbrfvkmk9MECY4WMGu1WslkMp/PI+Elpx5aHVGHo+ZNTEKuFNoVhavtoMxkgHKvJDPZRLX6DlDLfiFv0IIWtLVaACiDFrTDs+0VpGPN9qfL2H/503gNcrG6s8yz4tpfWHchhKDEUA0CAYkwAhQwerQsEGMcITuJ51o6BUQUBi7giZBWVoQZpf+gB8Mi4LZ6vY4uk4/1er1CoTA7OzszM/PTn/40nU63Wq2lpSXQBvkWZuIz9VV09NTRBooL7g2wQg/R8xnEBFSBd6HcrJYp45ZKpQhJkwVv6JlyTclkMh6Po88DbcOfmWk5hkr0mWh1u92OxWIkncAymtsRowHmpvwP9xQDTv9M4A6Scc9fotEoqJeSTuajNNVqYeQDgTW5CvAlZ2eXkk6nG41Gu93mEojCJ5PJWq22urpqhUkrlUqxWKT4EyiTWLyIoNyNaNHIwWAAD03eT6FQKBaLkUhk586dS0tLTJ5isZhIJBYWFnADINGHeHqn08nn85ZyDjT0tH4SnHEmk2Hbg7cRPCvVuazUGcXb/Crhg9V+tuXOLVu2HPgzmzdvfqRelb/WNQl/rTsfNBEJAGXQgna4tpAWdxYfkiNi6DeY5H9xDQQfiBKTIkJs0QgtT31bQKsgSI42GAyobw7tB7jxL8CuGo/DyQFZrMI4SSEYE1rBHmAQwsFkMrm4uIhJuMk0iS/v3LnTfGEgzIB30Wh0w4YNtVrtrrvuAn4hZxQRPpPNZqFjKcdqmJIu+evfEKAHPlpCDOo98jnAZOl0ms/jUgmiYoSJoXNp/X5/aWlJRPDcMZRG2jvO59wIx3HI42EcwEbwjihc9yLP6DzO6owt+Jgtgf+O+yE+1qFEsUmQMvMgKEkgJmJWq0hOxJw+JBIJFJyNRkM0yg/yJjCdz+eBxaR5JZNJy9cREahQeg7PzdxAh8Bd5uzYM2GcSVZQq9Wam5uj7A3AERre87xUKtVutwmgk8xEshSTs1AoMJGsKCvhe6rU4vrpaAKQKRkO5iMqsmXLlne8692ibLE9L/5fL3rX3+wLKMf122+6+vpv/viB2ihWefxTn3f6WS952nzs4HbuV7wFAPRXrwWAMmhBOzwbYTsQIdjIMlv9H7O4J+FOT2sxE862LGYCgpCIjlbWiUQiEGZkXcDbQWVRYoQIrInS4A5BUTjyUBkSHg6iyCwnrY4fKAeHI/NIp5GuUa/XIZYo6wwtSprI7OxsKpUCayK+JHPItIkgS1wnoSqBy6YTJT4O1Ydq0KyLGDQSikNaeNDTxHmAWi6XW7duHeQW0edGo3HPPfcg0xQRilCLT7cqKk4QLYrDRcXj8WKxSMQZOyEuzUbDUbdw2wBYQepoNOqvwImGVURAgY7jcAu41+TlEAT3G8Iz2kwDdhTAd9SKOOyQcg6azGazuVyOe030GagN0sUnqN/vLy4uonNlq0CXCHyLSKvVMkpVfLXFgc7Mz0QikU6n+/2+7VXoM8S2owaiHASXUDB6sVgkj57IPrjW87xer+d5Xrfbpf+Q049d4NvzvPPefK6IXPm+93MTz3vzuY44V7zvffvnRMeLN7/nqttPfN3F5zz5iPjK7rt/+K2bP7PtxDcd91h07le2BfVyfvVaACiDFrTDs6EmZC00mRqRXMOFhibN8oYPT7XKIos05Vugl/gZxAO3R5hyopUAARNGebq+KttQUyAY+CrAmaPJ0aSKwy+CZsirWFlZIR3EL8d0tEo4cdtCoUBwFuUihJbjOJFIpFKpLC8v53K5brcLpgTGGZAajUZYIJHuA8alV2ZC6flKLKJ3hMlD/giXBhFIIBUohm8RrpnT6XT37t333nvvAw88UCwWiTgvLi5Wq1UjZYmGl0qlTqcjIu12u1wug8tFJJPJEDdvNBq44QDyGB8Ef2weqtUqiN9gLjFoRg/VJqRsuVzmYlEuTqfTYrFotj6ez8Oo2+2Wy2Xi2qIl3RmWdruN7hZCETlBPp+nA6BJ5gNSAdSxlUqlXq/j+0PfOFdIK0aShU0gm/I85gYAko7FYuvWrQOMGrGKaTyJ/57nIXtNp9MkdI9GIxSoXB33y/O8druNNgAZKwPlOA5xcBLUUPoe3DadTs8/782fufFGEXHEueyKKy44/7yf/+q6l11++X6+M6r+sF454yVP25hxRKJHnPDcV53wXBGRnojX3/rVD177ze/fU52kj/qdl537Vy86Ju6IeCs7b/nohz79vbtrUjzuGS9/46ufs8Hd8fHXXxF/xwfOXB8ZL3399W/45ml/94HTKuHVhRtff9HgrR/6i43R/zihN9pz63Ufvu7bd+yZzj7tZeee+9Ljkv07zn/d1U95zoZbb7nt/pVj33vtpSeE9jnFjCMyrt/26Q9ec8tPH2y7pSc8449f95pTj4k7+/ujrNX5aX/hts997FM3/2Rna5JYf9LzX/PmP3lKLvQfDKXs3ZOAszxULSi9GLSgHZ6NZFgrjgLnBHPjV4OBmVjmzQ9SNFmH+sjIJadaoJnEGrOHdDS/W0QI4ILMkEgSLLYALrjKknbNbxLEQMgS6SH/S0S11+uRNA2B6mkNRs4ONnK1AvXc3FwqlSqXy9FoNJlMzs3NOY6zfv36o48+mgA0ZtoYhmN8gzIS7xiOTwN/iwgRWJhOOiwi4GYRwfwI7tBRM8hisZjL5YBHkUiEDKT777//zjvvhJ7sdrv33nvv9u3be71ep9PZvXv34uIiyIyMExHhogjacuRsNptKpfL5fLFYBD23Wq1IJJLNZiFZDa9byrN5ngO+wViiVKXtK1CLMmHocLFYtCRr3Onb7fby8vLS0lK1WnU0PYuYONAcCSbVCwmU0yvuIKDN0TrjTJh8Pg/QNPoT3pG5QXoNYWhgIjMQUvOII44ol8tcJtQjggSgPDMceNpsNqlCRA95FizVDM0GMwouM6S11IGnbAlsA3YQm81nEbnxxhueecrJoEn73/18J1r8rezijZ/97pbdvfFePepv/9L2Y8++8lNf+uIn3vHM2mfff/OesYgM7vvkRddVf++tH/v8Fz92wdOr17/7k/cNorOnHD++/e72VCbNf/ufS8Olb/97ayrT1p23jzefPBv1H3S47Ya//egDJ/7VVTd+8RNvf8bo+3uoGdTf8eVdJ73+qhu/9rlLT0zu7xQiMnjg4x+5tfKnl3/6S/94w+V/fuyuby+srPHHtTrfu+vKD/6v7IsuvPqmf/zaTX/3l0f/+MMf/kl776v29+SXuRtB+6VaACiDFrTDs7ESs9hDN4qKI/fKzmHV99SQBdrGcm5wDiJOLSKGLTKZzFQLMXMc6Enzu7E8Essa4Yyk9fAxKrigHRT1zgS8IsekRrapG1dWVqz6n7mak6jraW1oYCWZGSJSr9dDoVC5XC6Xy3NzcxT4JtA5HA5brZYZG5l801Oza0Ko9Nawl6kecTsC9UKGAVPy+Xw+nzdQW6/XCaqurKzs2LGj3W7n8/nV1dWf/OQn//7v/47nIj7hlkYN1SoaUgdVM6QI/srl8qZNmxAmYu4NHcsgpFKpSqWCSNGAEXC5UCgQOvc8jxLhpVIpnU5j7sjXmQkYN0YiETKBqIXYarW4feSpLC0tcQsqlQqEMRfCbOGm0zGoR4hw3KzC4XC32wW2xuPxTCbjB5Su6+ZyOVhVJK3MjUajQUpNLpdLJBLlchkpJGHxUqmUyWRgH6G3EWvilIR0oVKpIJCg9jo9bDablIbnVtpQ2EyjV4/Ro3rZ5VecccbL+fn+++/nhzPP+pNL3vve/X8hPPfCd77x6d3v/N15f/qS0//s9Zd8+raquhrFj/nzs0/dXIqHo/njn3v6XPdfa0OR4e5v3B75w9eetjkfjeWPf+FrXhC9/Zu7hjPrnn1U79ad/Ul7y3d6v/GKJ/a+fVdr0ttxa//oZ62b8Z9uuPD1HzgvOOfFJ1Xi0fTGU8581aa4iIjENp71ymcfm4s6stYpRBw36k66y7uXmquxyhNPO/s1j4uv8ce1Op/c/M4rznvxb67PRsOh+NxTX/ry4vbv7tmrCqa/J0E7dC0IeQctaIdnAyPCFWHcvRe/AgNn9RXFl3YDpsTsmmQRYAHxVlgclH8AKWP1yNEBUrAMmyKTBRvOklJ7Zi4NZoICtILjfN28Ei34iCEOsXi6Nz8/v337duqMg2sBUqVSiRxw4vXJZLJSqcRiMZx3ms2mo9VocCyHNQRHEp2H3AJbo+oDFRFv5aprtdrs7Cxws9VqYYQJKKzX60RaQTPbtm3bs2cPo7F169bt27cDfEWZXfgz6DfIP+pKM5hQjJTNBHsRiqXwN2AIPE0PSc0hGQVMNplMuIMoMjk+PCX51OajSRTb1frmFrkGdpP8JFphvFAoJBIJ3ED5GLwvc4Z+MovMbZScd+ZhIpGoVCqNRgOwbuJRfH9c16WIIkwnBRvT6fT69esp2+2oRajneVa93XSfsKHsPXq9XqvVKpfL1AfqdrvcfYaUmc+ehIxvS+1Kp9PtdptZetCfU/p5yaWX/uhHtxma3LTpcRe/5z3ikzjv1cKFJ5/+xiefLt64vf22L1z1oYvT77vyD+dExI2VZ37eSSc0E/JWpyIy7u8eJ5+ejvD3SOZxyfFPB2NJHPns2eXv764Nv7U89+KnPv8rX//KvbXy96uzzzky8ZCTjfsLq8nfzUT26URifSJkn9nvKSR59Ksu+KPrbrz+ohu2N5Obn3/2ua/83WJ4Zn9/XKvzMu3+7MsfufbrP7p3sbUy9jxxUietTNfuSdAOXQsYyqAF7fBshIOJ5YkI1At/BCz6F11H3XzQkAEgMAPHww/cg4gwEonA+hgAhUqE4ERLZzyoRZk5CFpDlIKwm9CTgA+Uc3wdzgwcaa6BIpJIJNBTgrFWVlbm5ubm5uY6nQ5cIARbuVwOh8MEOkW9geAU5+bmLO4P+CCOTHyZEXPUUB1+FBEe6U0WDUdLQD64pyXL8/m8iORyOQxr4CYdx3nwwQfvuusuBvyee+752c9+Rv9DvuLRMIJQs4gEDCYSbc/lcqVSia7OzMykUqmNGzfCt+FPZDfFrHZIGAL3x2IxAB+jyrWLImN0jSgIa7Vas9kkqSWbzWazWca/UqkAEMkowmUTkErHisUidKDjOCBpZhcwnT+m0+lSqeSfq4gaoQBjsRg546QHkS8FsmQ8Pc8jVM1OqVarcYt7vV6j0aAq93A4JGEc9QUqCAOdsMXMRrN8B0EaoQtviq4XXtavrTy4zfO8t77lAkOTInLfffe+/W1vewQRdiecOep3X/qy2da/VEdrfyqUmA/3tnZ+7lqw2r63F56Ph8VJbXpW5r7v/eirC/k/2DR7zLNyu77yL999IPusTamHMn3hxPpI75726n5Obx9c4xQibuq455/zrg9e85mbPvKaI//3P1xz/2CtP67Rhtuu+cDXw6e97e8/9YVvfOPmb9144fGJ/QzLwTZ0CtqjaQGgDFrQDs8G0SUigAbHcQh6QrTwA9V04CmnvkrWBjTBYdglAjvgt0h8sXOBUUivpgFDzU8RYxpsXyJahY8VnagiiTsgWlgl/gIM8keiubRIJDIcDpvNJghj/fr1yWTSdV1w3tzcHMnOd911F24ycIQIN8FVkKyI8ywFGBwJrDQHR9d10+k0wA6+k4OA3gjj9vt9Eo+Ap5lMBgwNxdjpdLZu3Vqr1RzHqVarO3bsMNcbq/5CgB4JoNHJnU4HoANYBxAD5kSkXC4jpiSOn0qlstmspdhzQDhgSzAivi8ilMAR9Z+nkiGuog888EC1WjWAy+ATSgbii25CzICdZuNAMg0Rds+XVI45QDwe3xeZcS5P08mhYxlPDsv4d7vddrtNCN6KIiLbtZI5xu+i5eCA2AggMAVTkstvmwHGjYR0NjwAfWYyNOdjkZQzmUzecsH5n73pJn49ZtPj+OEzN97w1re8xW/29B+tf/f7r7jmljsW2qPJanfh9q9+bjH9pEJ0Px/8eZuZf96TR1+5+ht3Nkajxl1fu/prwyf/t3UxETdz/MneLddvTZx8XCacecLJM3de/09yyhOye+GC2Prn/870a//jy/+2vLLa3f7PN3zivn3x31qn6G+96r9/4Ufb26PJVFzXEUdkjT+u1abjwUSisZmZGXdU3XLzxz9+b/9AHw/aIWxByDtoQTs8m6euMSJiZCShZ08twRG9oZiEn7NaNZb9is8zsM+/3hM2heeDDyMg62n9OpLEAYVGjBETR9NpvuWWtCsaRRWVD9IB0iwIpFr+taN1GiHzNm7cSNYzbNNkMtmxY8fu3bvpFVFgaFQSd8CXsJhkrtgFAqBFrb8pkG0p8JCIhHQ9rSQ0mUxKpVIul8PkqFqtEu+mtuSDDz64bds2XJZ27tw5HA7RL0I9kg8OHRiPxyuVivlQ2uBwjzh7PB6fnZ0lCl8oFI466ihcvgGv9XqdEjKW5ATM8lCnH2UAACAASURBVCcbMRMoNY4wcTKZUMCmVquRwoUNE7aXiUQCwpVLZnaxx+h0OpDQnAgvIcSdgOB6vY5fOndBREjq2mu68mFAoWhOGEaSMKyY54dCIYyEgOyrq6u5XI6OQRWzBQI18kdLtyLaDuXMtopxBkci0zSzKu5sPB43cG9E/kF/TkUZtzNefuZFF1/81xdeeNNnbhSfXejeLX70GSf/5NPXvfPquxdXwvkNJzzz1W97wXxYZE24Gz/2lRee9ZGrLnnVx+uSf/wpZ77zlagWQ4WTfi83/tZTnlQIS7jwpKdkPvXDp5+Y3yd4HDv6rL85+9qrPnjOp5Zk/rfPeNObZkT2RnVrnCJ+5It+43tXv+cv371rmDriN0895w2b4iLe/v7YW6vvx/zFq556+Uff8LKLR7HSpt95zmkbEv/y8MMatEPRnJ/99P88iq898aQnHfSuBO0/s3ly4F1h0H4N2oEf3rNfe44pw1hfIYrgrqzqIJgJ/oYEBVZ0SDuItMlkQiIz2M7Tas4QPKBDdGwQkBNfrW14HZJ1WOmBDpBP1IYREcyMiHqDsSDYOFE0GoWJzGazADiimSajjMVilUplMBhALIGMUTFaoRROBLMlIgsLC9u2bSOkC70HVzcYDMhcISEJX3e6B62Vy+WazSblavy+POvWrTviiCMg5yAj8/n8ZDIZDAZ33333tm3b8vn83Xff3Ww2I5FIsVicnZ1lWIA7kUiERJNYLAbQ/4NnPetrX/2q6RBEBCC1cePGcrkMDel5XqfTWV5efuCBB8g4EZFut2skpVl+Mux4y8PhkavEhmFhYQHoD4kbj8ez2ez8/HwkEjFzqFQq1el0IpEIysXFxcVoNFqpVNatWwfS2r17d61WI7ptM2FpaYlB7nQ64XB4bm5urxpONM/z6vV6tVrlvne7XZLfAZTQz0w2BI6gXqQXbF1GoxEcZCwWwwAfCAugRLA7Go2o6AMDyqiij0S9SjY30luoWbZA/BAKhZ7ylKccxIf0c5//wnlveavneX994YWO41x08cXMJf+vV1526R+d/tJf6KRBC9ohaQFDGbSgHZ7N0mtEGUp/mkKv1wMzIRMUEZbPUChEiBaw4qndI0dYXV0lrwJiD+rR8h44Gqu++PgqOEtgIvJHkkVMj0gyh5VjgTqdmZlptVrgA+ARGAIwaqI6+7nZbJK8TCwbzpXIPvFrGxMcLkul0vbt21dWVhBHNpvNXC6XyWQAT8bDeZ5XKBQcx+l2u4wY2T/QXbhagmuRgWK9PhwOy+VyJpNZWlpaWlrqdrv4JS0vL4MXieOTzV2pVEj+KBQKXGwoFMrlciKSz+dNDwAKNFINJMq/g8GAu9Zut7PZLP6OxOvpGIPPTKCG+Hg8xniI+C/h49nZWcLimUymVCpBBiPNbLVaULnNZnM0GlWr1eFwmEwm2+02yFhEstkst6PT6TA4pFp3Oh2oa27EWtJANgwgXVhMtiX+fLKpGoKah4BNIUrsMN+QTlLNvFAo0AdQO5QzLvfsfKzskw0yBDyIHG6VB8SKJx3c5jgOKThG2Pt/DVrQfl1aACiDFrTDtgHUEH5B/IgIeQYgLcrPpFIpkj9Ey9btZTMEL0UuCAwlnjuERHEFF0WQlk1iZa+JYicSCcR8eyWV45IIcRjSMoYiAjKz3BdcHgEQ6PaIb0I+UQqFxBREk3Zqg9RgkakWvOn1eqVSqVqt4nRDUJv0c5CxaA1xatIkEgkCoKhR4X2BhhgcRqPRpaUloDOXubS0xICY0ySsKupJz/PK5TKCS8/zkGliYGkhbzSI4FS+Ox6P6U+xWOSGJhKJYrFINXMytblG7hSwMpVKAUOtWmY6nS6Xy4PBYM+ePf1+HzNILpxYObJXGFZoQmZUr9er1+voDkmQajQaeBVBTC4sLKB0TCaTpVIJ4eN0Os3n80DztaZrOp3GzsmgYSaTQUWKsRGG6qTbU87HxA8WzXccJ5vNUhkIXIvhkdkUoG2FgERpwPgw02wvYQ1gihRk/66Qv0TbvHnzlZdd+rCfObgnDVrQHqMWAMqgBe2wbeY3CUFlyyHIbzKZkIlisT/HV7EGTSEqTAK7uE5yBOCUreKG3khGJp2CX+ERzU1aRPDHAZHwvwCXXq9nYUfYUMdxgIbWc6PryCCxNR40XK1W0UpGIhGTjYqW/OYy6Tbfmp2dBU/QE8Sg2LDTW/QAjBUsLMCCAy4vLwOyXTV4hwvs9XpW8YUPNxoN8kj4C/7b5vHpui4oloAsoWdLD0LOyO3jLnAjCLiDIDGeJOPEcroRBhDgxs6z1+sBp8gcIuMEDnJubg4hbLfbrdfr2JL3ej2gmHXJEo8ouUmWOgZMpApNp1PLniaO3Ol0+JWw9VpzlcnmeV6lUqnVakwquHP0plQw99SME79x9LiwyM1mE30kjLVNM/jX1dXVTCZjiV/mhI9HEmPLhDF6GzLbWG3uyHe+851nP/vZB+sJfeLm4/et0x20oP2atgBQBi1oh2cLhULUgAFd2d/9MIsfjDQCFTla0nDqs5C0rFuYKuSP4DNILIKJ5NsmEglM/kTE6kGTF8Ky3Ww2OSzwiIR0KDSkckAlaEUCuyKCbhIA4alnIT+TtIHbDuQW0AFQS/6NnxtDFgmPtWfPHkhZhKTT6TSbzcJNimafoBAAdyLgIywLYsvn82Adjmni1HA4vGfPHsq0LC0t5fP5qVYbQrg5HA4pzw3KZEinWpFS1OwJljGZTK6srJgtJWrIbrebz+cx3cSd2wq99Pt9rmI8HrdaLYLgmUwGj3c2CThTQtlCM9fr9WQymc1mV1dXUYLGYrFWq0X5IhGBbgS4MyW4cIjwxcVFbiK/ggvj8TjqWxHpdDoWIt+3waNjyQ70txvHBENpgIdlKpVqNBqVSgXcSVoY2w/bR1mInAR2dghQqsBcq4fu+ApEwetzXfTc5MiWgRS0oAVtrxYAyqAF7fBspNR4WtkFTg70RjCUatqiWbekpLAqz8zMoBvz1PPPiDSTCTqOQ5YPkVZQo4gMBgP0kcAysN1efQMlAJUikUin07Fid0BAz/MMg/rZULsWkBP9EREjkOAI7VtcMjCl3W6LCDAUxDYcDnO5XK1Ws0wdgtF4x9BVvyKQ/qAsBGqj+6RoEHq7fD4P/IKAJCy7a9euZrPpum6lUikUCiC2RCIxOzvL0RhJcE+r1UqlUlZ6kc7Y4IgIoJyba8bvqVTq2GOPffDBB6vVKuiw0+ngy8glAOIjkUg+n0+n051OZ2VlhVoydLLVasEmYrq0uLhI/hDbCSwhyQ2nVo0VbQerwWhC7gLURGR5eRl5AFJdNhsHnrdMPwhFEUHqALdqLkLc90gkQkh9Zmam0+mwqUBiiy2ApyUl2Q8gx4TgZDwpAm7um+yaHJ/ngHkSkSb1GGkogxa0w6MFgDJoQTs8m9Up9tSAEEdJuCsR6ff70GBGVULmiSbo0IiEwrqZeRArtAXKCapCUwHUiCe6WlLZMCWrO39Hu2YQEGKSz4AaCdfa34k8Wv44ORngNszAARkQmaz9KCApuiOaum7WiQzI3NxctVrN5/PgbNAwyImCLuAqZADAPhhNTkdXzQrH87yNGzdCjBFptTh4qVSiKiOpRZQKNDMdkwDCgdHJmZmZZrOJisDuVL/fR3Dpj+SS35PJZIibk6bdaDSazSZmQCsrK9lslksgdm+GQYBs+ONcLkc0GbDYarXQLxqiwkk+l8tR05Kq69jucCi2FjDc4XAYHyWGK51Ocxzo530nbbVaTafTwHrISEAeqJeRBK/blMZ8ig0JqLHdbqOGJAGcIzN0cNIYM3G9o9GISWKTH6ku58WmlJvrPbzNeNCC9l+6BYAyaEE7PBvhTk/99lDFUUmZ9RjE4/+KYUfTSgJG4aJAPFCVois07ozgCSuWyK/mAg2eMP0iC78p20AJHBl6yby4WcWJLFtc0uysgSxwTpZ8g+DPwuLQXSJCrglEIKcjPp5KpQqFAmUhcZckNxzwWq1WLXTOpblqRT6ZTKh8CKAZDAbZbJakpdFolM/n8UvasWOHKNFLErfjOKSnkDdjJKs1LsRylTgdlBsJN1bqBuay3++TEi4i69ev5wbhEgrUhpolg5u063Q6bTKA6XRaq9VwO8pkMuT6gB25RygUI5FIs9nkUKD51dXVTqfjeR7he+6CiQ7JeikUCqgC0uk02eXYPe53xu7evRsZaLfbxRkUXMtdy+VyRhWLCGckRZ0NDKNB9piIUIGp2+1CoNpdM3TIFMVKiU4y5lasSHSzZKk/7CV+2SczaEE7TFsAKIMWtMOzOVocxdGK1WbfLfs4kjjqgON5nlUc8dRmCPWbKHnT7/eTySQhYMtKISTKMkx+CUFtFm/oPfIqXC33RzTW1YLRZotD5g1uOHClYW1mXY4pILAYxsti3MPhEE9NugGuxaYHB2z6LyKAYGSCo9EIWAZ04yvEW/P5/OrqKuyafQXdp7lkk9vBKK2srCwtLWGLCLVJthDGQCKSyWRyuRxJM3zGBHyk2gD6OZQVW2dsgebdbnc0GmWzWdmn3PP8/Dzp5JZWRSAYWeRgMOAU2Wx2eXmZG2elvXHZnEwm0LpkPuEoCQEJ2k6lUisrK6TOkO6TyWQAYRgLYAIQ0iJDpDpBXq41XZeWlnbv3m3xZfrDDEGJgcU6GwxElqha+aTx8b1eDxwMWZtIJNrttu1kCoVCq9WCJQXl+40FuF5TrEJbIqO0CpYHPdE7aEE7bFoAKIMWtMOzWUwWdMjqzmJpqkQ+aYFUAovgG2NiCCzyR3JjRQTEQ4wbphAEw1dAV5zUICbKS1NwIkMkbYgO4EYuIrCkEFTOQ4uFwL2JCIiWFBbL4wEZ2MEtTGlkpyjnBO5JJBJ4BuVyOaAJbo69Xq/b7fJ3ESF1JpPJoK6DnLOorjG1BOhDoVC1Wm232xasx3Mb1yFix5g0Id0zCyECu4wS2EUUwROcdbUaO3eEvPiQVqbx33qAOF5IyAkw9wEMwb9yH61aN/pIOmYDlclkIDWtdhG/jkYjUFoqlYLnA5+hdIQeBoZSfYegvCVC7TtXPc9DwQlM5+t2CVg11Wo1SwCC3IVXppQ5rul8xYptosRYWlqiejsZ9CZpqNfrkL6GlbmP/h2XAX3x6Sl/6UczaEE7PFsAKIMWtMOz+QPT0GBAwH6/T2CREDCslbneUDOm0WiQLu34rHBg9cA34DlCk5wukUhYzjV0jqgWE0LRBJfWQ4OMYV9FH/4LHjEcDhMUhpikP4BdugHp6PeI6ff7yOkA0DCLo9GI3GRLDHfVdJNj4qHIf+VyOaQCULMcJx6Pz8/P1+t1s78WESApacUAIMdxVldXq9UqMCWbzQ4Gg127dg2HwyOPPBKfxdnZ2UwmY7pJDgiSA02iyATDiUhIy+SIFvvh5hoMBdf6JYm5XO7BBx8EVTebzT179mBIHolEZmdnKXsN1h8MBul0OpvNmgQCuDwYDOAmMQyHEwV0OppATfI4Nb4nk0m9XqeAEJcAoGw0GqFQCBvLWCy2F/DFcpJ9jl9dgL7CCnsS8obhFs0E5wZlMhnYZbM0D4fDDKbl2qfTaTYeuBCg1mVCQk8C0yFuQds2yKTqo+tAtXlQns2gBe2wbAGgDFrQDs9mWcngAIrQQJtBDYoIsWxILNiXVqtlFKb46hdbTNkSUDi+nY7wOijHtHRIDAkiU60EzMRXQC3o6ix/1hLPwUmQjhB1RGNF6z43m02wHWwfRuvACLKSQZCgBy7K7ykjPuYSnm+i9Qkx05lOp+l0ejAYUAZQREql0vLyMsaZxNBx3kGQR/aMiHQ6HTJLoO4efPBBz/Py+Xwmk7EUIvSX6PYYKyBUOBzG1MYYSnR+BuNsh0AgGFDV6XQIf9MKhcLS0tLCwsJgMGi1Wo1GI5fLMQJAQ4NfuVwO1yHUgVwFcBAOMhQKUa8IkrVcLo/HY1J8SFshYr6yskI8GkTIGHJP2+22ORnxGdK3V1dXG40GcxLzS0P5mUyGz7iu2+12U6kUMgZ2MpwC4LhX0B/fe0bJqnqmUim/Wbqli2FyztTiLtBDfOZBk0wPTLLYJh1cDeXPtty5ZcuWA39m8+bNj4lXZe+O88+5/hV/f9mJgQ9S0A5SCwBl0IJ2eDZX/b1BS2EtSed5Hg4s/IpEDEhEjgspDsA4IoBmJGkHZ8H2L66Wi22m0NB15goOd0hRGb7ID9gbWWwRyAX6gRMiV8ZC2Ob4w6WJCE40JOsYB0mC0XA4tE86jtNut2E69x0ucLB1HsEfYj6qy7TbbZC0PzUezEQMHWIPH3LAIoI80ncYRpLH+ZUv4rLESYn+m2iPjo3H42w2SzaMpYZQnYgaiQgNoUvtciqVytatW3u9HhVrKOEIziYDejQalctlyDkoXnYUeJuHtYw1WeHQqGAyz2dfaqTv4uIisAySmEtotVpsPIhEmxhARKLRKA5H3CacgLhHtlExmWy/32cYKfAD3gVx0kB+lMSEZUc4i74ikUiYzoECjPgHIRiwu0B8HJFrMpncK7Ttqu/9wQWUW7Zsece73n3gz1z0rr/ZH6AcV3/4mb+//pv/ur0Tqhz/+3/82lc996h4P8CIQTuULQCUQQva4dn8BbKNg2T9BqgBmODGXK2pKCLgSxPSgRvg3lhNUfu1222qYMNNgqiQ0BEpFiUaORQJLqIcpKflagB89BngCO1nWAS/GNGikcBQLoqoKMyihSY5lMkECYPCmZF87c8Z92s0+ZlKOXh9E+LE6Gd5eblSqQA7LJMD/yPXdclkshI1EGl4NBYKha1bt7bbbULMpHXj2gOOtz7T/CaaAHeEqpwUxOa6br1eTyQSeDC5rutnKMfjMXirXq9Pp9NyucxAIQzg+KgPcc3k11arBbDj5rIZQCABFbqysrJz506K67haHKjf7zcaDaA2qTOrq6vw3IBvcBsCCW5TtVp1HKdarYJBoRUt9YfrbTabopoEZo7nq8m+lxDTUa8lSHHQsJG+zHxMjjDadLSGE1/nWyBINjBAZ9MziAhF2L1fFecgb3DXtW//8APPfMNl555Yluqd//T1bz648tpjkydc8cnLDnXfgvZftwWAMmhBOzwbEV6a4zgkC2OzQhVmSB30gqIe2tAwyAGh2Ux/xv+KLtWWwMGCTR1nw1jgNkCJ+f54WpaaOiv0EwLS08I8nM5TP0irzSOKG4C/Zv1NrjRZQQQrCU+TvGKM41S92c3MiHGAu7JBA+E5Ph91cr3hOInwQraRSA7dxd8JT4sIwVMoMcOC1MuBuuMDXDVp4OQdQ9b6yVd6QjoLMlBGG+BL9RpuFqFhroIrKhaLCwsLVOUGInNwv6eSXTWg3PM8NJTcPhEBWkH+kcJCPrV/2wBJSWieDHEujdllcgJMQ0HVjjq0A5FFfZ2YP/C4Zh0FuG+32/yFMjl7NWw4J5NJoVBgZOgzOeNIaRuNRqfTwddd1O4UeQY3jn7aHoM+9Pt9WGf4SysBdbDaowGpXutfr/tB4ez3nfFbeVdE1p30wr88ScQXxZY7zn/d1U95zoZbb7nt/pVj33vtpSdE9tx63Yev+/Yde6azT3vZuee+9LiHkJjj6g8+ddW13/rpgyvJo377j97w+hcdl1iz5HrQgrZWCwBl0IJ2eDbkkiyoLMwigq33YDAwmo0oJ3wSdA4o0HKxORqAY6p1Yvg6qd9Qg4ASIsVkPEA1WcQcHCmal2P2kMlkknC5wVMRAXiRRU5CCUkhUJ6gTJJ2TbFnCLjT6dBniDeABdjUX4BxqhVTIAj9AIsDkvYOMAJWWnHIiZaEdl2Xi83lctPpFF1jJBKp1+uxWCyZTC4tLeE+0+l0UPJR/9AkquBdWDobnJAWKqST2WzW3JSoyuO6bqlUMntw7lSj0bCsl263G4/HsYHcs2ePv6QQwItcadHIda/XA3e2Wi06w7VAabMhIdmIa2d64LU0Go0ajQal2FFMIpQE1XHhE63tzkEQNhg7G41GCXlzcyHCAXygWKwi2Zw4zv6xjuM4+XweV3N8kYDyTEWEno7WYYIK5dbwIMB6splhPEnPJxmIrsLNH8SHVJSw/8XayvIPlrN/8MTMmpXRRaS/48u7Xviuq974uFzUkeED1/7tRx/4/fOvevvx8aUffvU7e1aO2/QfHx3tuOlvP7Ltmedd9dYnxBZv/cQll3308Ve9YXMygJRB+wXbgSZk0IIWtF/f5pe7jcdj6DoC0yyZmNGk02mQoiiowrUHHSHZGMj7LJWYSCLrK58P+QoD0uC6/ByY1RgUEZLNiU6CGwh2E/ok/RYkB94iDguaFBErC+nPHEIYR0zZSC9wD5wlXjx+QsicBT3NDrZxIOHX0/IqWE5abjXsb6fTMUiKNtE8NTHW2cs/0vM8/B0t7Wk4HPb7fSxvEC9Chnmah454EV7ZsvKhSHO5HLfAbhz3FCRarVZFBClCo9Fot9smK3Qcp1QqAYwYmel0ip0kAW6AFxF/8lFIi+l0Op1OZ3Fx0fYJwHcYR0u9J7JMHXDXdZvNZqPRQIfaaDQgBUVNH5F+0itQI55NDCaMMjOQEbBLXqtlMplsNovzJdOYhpgyFouBd80HgP0AGx6KeTLy/qx5Jj/PhSXaH6zmPVzbz3emw/o4UpoJHei4sY1nvfLZx+aijogMF77+A+cF57z4pEo8mt54ypmv2hT3fXK46xv/7L3wNX94YjkezRz1+684I7PlW7uGB/Uig/ZfowUMZdCCdng2qEfx+TtCCmIZQ66JfRjcBjkExoIyJMJrDuHgDFH3b2LB/AzGggUEJcA2GfGGtTWH9edD0DF814GYdJsDGiCAyKS3js+qHS6N5BIRAZX6s3zAInzGakJyEHyL6AlhfY4P8k4mk3B4xOvJXEGmyXn5C50HspMRAqAk2E0xw0aj4WltHmK+UW0UGByPxyYDAMY5atLOpXHtDD79ByAalCehm7QbsBHRZ24ZH/a09jcMKNkzQDdDWp4WTCfRezgcplIpmMvJZEJKDYxmJpNBxtputwlng54BxESKgWIcdjKZwM4a+wvDagV7yGoaj8epVMrS5/3G5n7LpwM0LOghU0HknufhcEmRehAwt5LiQ8x5JjOB+MXFRREhxm2Q9KAn5cijC3m7sUJ4tboykdTamDKcWJ/Q/x33F1aTv5uJ7P+T4+6Oxn1fOvtFH7e+JE8cBPWAgvaLtwBQBi1oh2czrGPoxBR4FiOGRMQBB88UESET3PJ4WPUx5OPIJMSAjXK5HNnB/MU4FaLhlkdiqkRRXSBBbQpMA8iMWbQTeaq53Csv21MjdKg+cEA+n0dJSQVIbAVFvR4J/lro39OKlFRf9NSiHASZTqdh6SxN2/O8dDpNN0zlKSIwtYPBAN0eAVbTEuCmGYvFKDyI1pP8YvOm8UdauRDLpxYR7JA81TjS54lW3wZs/d/2zjsqqqML4LOVbfSOKIhRVASjsURNtSAWxF5ijTUaoybGRGMSk6hJrLH32BB7byim+kUTu6gxNgQbvW9vb74/LvtcYBcWdkXE+zs5OfL2vekz7757595hg3iDwxBcNxgMycnJ+fn58J0A2xMhQA8YzaHKEOMTNghCi0E/GgwGT09PCDsPEXNYzXF6ejqcZEgIgYOzQZiGHaXw2QCCV3Z2NpfLdXNzA9EfThWCm+EUUBiHrE8SnKkNSl+QXGEIEdNBlPATDOCyBz8oMtnNnTDIYUhDzEs/Pz+YHSAuMwwDh/1AFaAppFIpRIP39vYmJtt0tQhsLvJu61149L/Cjm+6lyFcPzUY8CW1BMo7hfrmzpZkSr400KNBmxULo31QHkDsAk3eCFIzAekKbNwgUIJyBSIggpKGdfRm1WZs5GpW5oCn4KVrvg0RzNOgLgKlFCEEjJis0gW0ROz9kCyIkqDIdHd3h+DkIFWA3MPez1rJQalJTc5DIDCxikxWvgTBBZSU5jF0wOoNYWj4JkA+YP2yWY0jmwVr8oaCcblcCM0I5nXYkwfb7MD9CPaegnLX1dUVbLug9wLhDDSg0C+wIxD2MgoEAigAa+KHZiSEwE5H1iwLhTTfYMC2CYiSoHXm8/mPHj26fft2bm4uHGbt6urKMExWVhbf7GRqDocjl8vBJx3aDfSarDkYIh8RQoRCoYuLCxj3IXAPjI2MjAylUpmVlcXuAVAqlaz3NwipoHdkPbpgtEBqKpUKQk66moBonfANA9sGQMSEOEegIjXfSlEGMJhhsybcDz5SINlTSll/JvbgIj6fD874bPqsRxcodGHbQ2Vmo3WY8rDwDMe12bDXc9Yv3n0pVaHXK9KuHVm/5p7aeh5Otbq2YY6uPnQtS6NXPDi9fWOSutiv3d8m+1YdvJyq1Bu1ecnndq9YcUfl2FoiLwX4RYIgNRNQj4HFEwQ+1v0CtCygoQRbMJh0wXMF7od3LbxojaYTZUDZA5INSHsFBQVwYCNYmdkzS4jJwMrakUFIAs9ZULzBvknwewAXIrCws57IkBGExmTFEZDzVCoVhLQERRTIxHCcCThhQIxDc4s5NQW7Zj2yuaYQ2WBth0RAl2YefojP54O9FZyFwUAM3uUQ6JEQwuVywScGRDeBQCCXy2vXrg32bnbjI3t+N1QKduyBphaCmYONm92rByEhIfYTNBQ0tbnEA8cnsme18/n8x48fJycnQ404HI6/v7+Tk1NGRgboR80PdQRtqJubGwhVRqMRAoyzojl0FnumEVh+2e2zkDvY00H/CqpHGGlg+ofYVSDAQaewEUxZhS50NCgIeaYjjmCwUVMkIFZoBqUs6/tfBlyzYyRBx5yWlkYIAXd4VoUJTQ0WbThTVCaTgeQKKYBDGHxvWDw60h4qY/ImHEnD97+fsGPlxs92PJTzfRq3HzCuo4gQq1KgU93Bs0ZvXr5kQmwm8X994McfF7tZWKffrEn71m+ZMTwpxyCt07zbkNFBYmtJIYhVUKBEkJoJCBMgPbCA2QD0JwAAIABJREFU2gk2qEEoSpCf2IgzIJCB5pKYxClQR4F8BqpKkM/AIgmGSNDcsHv1ICl467NO3yDSwbY28DXOzc2FjZVshHC25DKZDGyUrK3cXO/I2seJmT0UolfC8TagaaOUgtDGWqgLCwtB28cqBcHM7eXlpVQq2eA1rBqMvRNUjKxrOUQUh6CV4OACB1tzOBxnZ2eJRJKfnw+79Ly8vGC/pk6ngyvQXHzTUY2g2oRtAyCKsWpX1jTM6oCpyW+J3QlKTCGfQMzSarXXr1/PysqCXYPg8pKTkwPRItlttRB3iVXuck1nFYLyOD8/H46L5HA4+fn5oJ1lCwBez+xBkcR0FCTI/YWFhWBNhh2QEDUT9qFyzMJOcUznrUO+5h8SkDgb6ghiarK2cghpCUd42zILQL1aUFDA5XLBrg3tAII4G5cU9K9arRbCEXDMApSyx5Cy+nsHUimBkhDC93p96KzXhxa79jQOZcmAlByh3ztj574z1uLNhPDdmw/4rPmAShUEQUygyRtBaiZgy2N1b/DiBx0VaJVY1xkQBbKzs1kdIaiOQDlEzI7kJmYnxCgUCvBZNhcUQFkIyj+4DlIFGFVZ+x0o4UAj5erqCgo5UGey5l1Ql4LDBCs9gCMwaLxAsarT6cDMCtpHUJrm5+eD4zDILiCGwg1QF1DyOTk5ge4NSuXs7Aw6Xfg/NQGWRziWhlX7sQ494N4BJnU+ny+TyaRSKegpk5KSeDwenOINx0LC4THEZOgE9xQweYMcCZo5YvK24XK54EIOQb/hfnD6Nm92g8Hg4eEBDZKRkcH6XdWpU8ff399gMDx69AiUoKAlJaaIRXCEY2ZmJuiqQScHcqFCoQDvbDDry2QymUzm7OwMFQT3cJVKlZ2dDf8mJrmWjRMEOnLoRNDmgjDK7qmAkxjZDxXQjoM0SUz6S6lUKhKJMjMzU1NTiUmPyH6r2AKlVCAQeHt7u7q6+vn5eXt7s6pc6F/Q+zo5OYEbO4wTUIWCWAzbEkA763CnHASpMaCGEkFqJiDAgfaO3R4HYqJIJGL9rFmhBCx98CC8y4kpsA57Xh/HdH4gaOk4phNHqFnESjAQGwwG0GPBbeauFYQQMArDS5o9KYdNEx4HGRH+zXrSQI4gUVGTr495IuCeYjSd6GMethCs5yDYgTmVMZ0cSEwBGuGIQojOA4Z1sHWyxQa7MGuIZyMmgmgOIpSzs7OLiwuIpwqFwtnZOSAgIDMzU6lUqtVqUPGy2wMgRiYxmWVBD6pSqaAvQGYFgQwkbPgAgCowptDcxHSMELiEgxeOl5dXQEBAYWEhiJjOzs4gioFcyG7xhOCjcrkc9NZarTYnJ8fd3Z3L5bLCHyh6ofzEFKeJ3ZbK9h0Yu6EdWMmbjcID2y1gFyYxbdItKCggpn29crkcPkiMRqOvry+0LZfLlcvlsDcUfIMgkpGNswACTsG/2dAE4IoOOw3gLB/QwrJbiokpLgGE4YQKsr1f0ZlYBo0bN14478dy73Fgjgjy7ECBEkFqJhDrkY0BBG4T7LHXoPMDW6dIJFIoFOwR27R4ZBZzpwqQAiGMOQhDoD+D01NAToKoOmDHBH9kVrsD/hyghQKvFNg6CUIqGFtZbSUrp7JWXVABQvxCkDJBcgJVE+w+BFHP09MTnH7MX/+M6WhEZ2dnVvnKGhxBMSkSifLy8gghfNMphaC7ArN+VlaWp6cnJAK7G8GEDX42IC6D2CSRSEJCQu7evQtylZeXl7e3t1qtViqVeXl5IHFyTcdDmxeDFcLYkwCh9ViNJisIQsrUdCSjVqsFhTQE45TJZF5eXnw+PzMzMzs7GzzN3d3dIaoR2NkZU/xFkUgEIYdcXV3z8/PZxuSagoDCDlHWGR8+LVg9rkwmg1CasNETXGpA7gd53cXFBeRsaB+5XO7q6gqiNrQVxKKHwzy5XK5MJgOxj5U4iWk7qdFohDDvtmsozWcEn893d3cHRThIh6w/FuwWhcYB+RW+JajpkHdi+jCraL5lENa4kaVzuhHkhQRN3ghSM2Fttaz6ECyeYJZlBTViOtKQVQix3s2gVQIxAl6obJBt9vQ8EDfhTrDMgi2Yz+eD+wh4/sLjoBwFqzQIjiC4sHsKWc8PkBpZUzuoWsGOrFQqc3Nz2WjhYLeFbXBQMAiFDUnBCTGsqwd7MjUIphxTXHRoB6PRCD4ZYrGY1YGBoRaKBAdPg/QGQgnb2tDOcrk8KysLTPxSqdTFxQVccAghoaGhtWrVgk2chYWF6enp9+/fz8/Ph5YBSy7cbL5LD7YKmCuAiVkwHXMXYEqpm5ubUChMS0uD6O5Q6/T09Ly8PJlMBi5QfD4fmothmNTU1AcPHkAPgga6sLCQ3UoIUcoZhlGpVLm5uTk5OSBNspIctCf0O6UU4geBFhN2QyoUCuhokKTh8G6lUgmhy6G+YFjPy8uDTxpCCCiP4SBKCFcJyRJC5HJ5ZmYmbF2t3KQAWzl0JSgdoXdg7MF3FHsoDjs2QJNtfg+CIKXBuYEgNRN2RyMhhI0mQ0y2UXi1w9uUFNeQmfsisJZZCBbNulOY3wxqKjAXgvQAEgZ4hICPC8/sTBow7MIbGoRXsKSDPAqvbdjMB5INFMO8hKCKA0kRRD2oGphcQVyGWsMuPRATQfMH4cfBTRuEV9i1SQjhcDigsoXrkJFMJoNfCwoK4ORucEZhrfNQMPaIZ/DaUSqVbm5uQUFBsF2PYRhfX99GjRrVrVtXJpPBZsrMzMz09PScnBxQwoE5GAzQbCeCshZKDlst9Xq9UqmEXZK+vr5su4HWMz8/Py0tDfzQIUAm+AaZbyqglOr1etj7CFpYGAmQMugX2UzhlB1oNLaCEPSH/SaBI3bgYwNGFPgYwfADyzIhRC6Xs3tSwcIOomdWVhZ4SsFgg6DicIAQMTnEmPtgQTqVnhc8Hk9mAjSgEI4Utq6C7Ojq6gqDinVvB52u+WcYgiAl4PybeOV5lwFBEARBEAR5gUENJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIX1V6gVF6fNvzza8rnXQwEQayBkxRBEOSlp/JneRtyL+5au+3EpeQcnZNPg1ZRfQf3au3vVH0OEVBenzb8s0QFIbKIhVvmRUhN16ku7cKh7XtO/n07Q+vkVe+1zoPH9m3pwSeEEEPeudhFa49fz+L4RHQZPXVoaw++lTQBNmXraTKKm/tWrDlwLkUurNU8eswng5q7VvgEWkKU16dN2DZ0lVktSl9xIBWtTolmIYTr/uZPG79oJCaEUHXSqU0bD5y+maqWvvLukInjOtcVWxwkhvQjn09c8aDegvKaFLGd6j5JCdWm/rFp1c7fb6TKiXOtsLcHffj+uwFCjrWRVqFRUWJEWRulIl36xSM79p08+1+axsn7lZZdR4zt1bQSs7SaTFJraxRL2c1S+n5CCLXSRDhJEQQxo7KT35ARP3f5xYjxcyY0DxRr0m7/czJ+Z0rEx6ESh5bOHqThC/bGw5pe7Lo6OfZk5iu9pg2OqOvFK7h5bPGC70TzF/b05xuyfp234lr41NVfNiS398z9ad5v9b6P9Cr5YpFaWnCtpckrvLBkfrx06Jwtb9Umj//c+NOiP4NmtfeshEhpoXZb5tmfjGUqWh1o6iJowfl5s671qysmhBDdk0PfzPk7dOS0VV/VFhf+d2L3sUdvTWxgYZAYc06v3quM8HZSllMGfFvZTvWfpPrUA3M33nvjk6VfhHuR7MRDixbNPRi6pH8tvpWRVoFRUWpEWRulquTYU9kN+0wf1qS2VPPo7K5F8+bIlv4Q5W3/SHsuk5RYWaOKKNUs5dxvystiE+lwkiII8pTKTn1d9j+5PgN7tQ5y4RAiDAyPHBUeSQghhFE9ObdnQ2z81UcFRkmtpl3HTR3S0o1HlNenfbD61Td9fjt1JUtYr/P4j994smnFvksZgvrRU78e1dyFq7w+7YM1r7UP+CPh4iON9JW3hk6dEFmnhC7FkH02dvnmk4mPNdLg1/tNnhQTKqm4skUS+tlXoaY/vMMje3sfO5yj6+lPcs8dz2k6vverXiJCmvYdF/HH6vM57bv62NJC1tLkpCbcdx+y4N0QFy4hddsP7ZUw70LO21E+9kuUrPKDXJ82ft3rXeudOfHXnWyjc3CbAZ98FBMi5hA7msue6uhT43cVdv48SEQIofLrG4+RoT8Of9OTRwgRRfSaGGExQ6bg4rrtyuhpA899v6ecMuC7ynaq/yTV519X+fXr9qqfhEOIX/Nu/fwSjubp+9cyWBlpNo8KCyOqWL5mo1QSOu0LU5rikHcHDT06JT5T5wiB8rlM0jIfKqdZrOdluYlwkiIIYkZl91AKPVu4ZuzY/cfNNKWBml1X3lq45IxrzMy1uw4c3bV0TN1LK1deLYQb1Gl/0M6zN+1cM9rtfwu/WCeP/Hbj9lXvO59edyxVDzc8PJDSZPKqXfs3fvluwfbZscmaYlnqHu76bk1K04nLdxzcOreP6Pi8df8pqV37t6gu97/fDucHvuPnRIg+L1Hh0tJXBD+JfFs4KxJz9aWeUd+aM7xn1+69B4z5bMGuizmGMtMklBIOh31BcIgu52qerjJFLQvVg4MP6o9eGHtw/8av3snZvTg+3UAc1VwVrA4tvBb3P/8Bb8LbWJvx50N+vUcbpwzu1a3XkAk/7LmhYCzloby+dXNW1JQetZxsKANiM9V/kjoFRIYUHIi/lqE2GNQZV+P3F4R0DLBt4pQ1KsoZUcVHaYmf7vyv0KuNt9BKk1aaqpuk1tcoa81S3ppWIjeLTYSTFEGQyn5L8v2iv55i3Lpv6acrUjWyuq9FDh47oLUXn0gbf72gsekmv1Z9Bu2e9ke65jUXQogkeEj/1wNkHPpalwBZXs8+rQNkHNqqq/e2g/k6EkgIEQb2GdetkTufkIbdx3ZP+Cb+ydAP67E5alOPn6bRs3pEePMJCX536MAjM06mahvXr1z5i3YOcfjurSYsfsuLRwijlxt5LoKilxhH4MJnFPoS8o80fMHuQ4QQatTkPbh8dP3Sz3O/WPZBoyKdQuk0RQGdgnI2bDtd9/12tciT/22LS5L7lkzTfsQhI0Z3aezJJUTcKLKv39FDOdre/ka7m6sS1TGkJ8SltvukkQwaxKjJLEi7UdD/q9VTAsmT/22aO29xnRVftXYtpoKh6ru71j/sOH1coFCfV34ZENup/pOU595uwpB/pn49bJOOEo7Q791pi9p6lDvSyhkVZY4oUmqUmj+YtH/emoLu37W3yS5RIapsklpdo6w0S9lrWkksNRFOUgRBCCH2OOXwPZr3ndK8L6GGwgfn9i1fNsd50cIefnxG8e+hNZuPnb+XUaAxUEo4sqYaeBNwhO5CDiGEwxPxeEI39t/UUPSmEMhecS4qD9+5nkR/VW3+rWxQPMxLOjg65mdCKWhTpBFqY2U3KknDF+yNN6ozbxxZvHD+sRYLevpxBc48Y6GeEsIhhFB9oYErE1hR4HJ4Io+QtoM/Kbww/dAjTaNQsZU0+a6tP/4kZfm66UMXKcV120S28ndViRy+4HKdvEVctmA8qmeII5qrwtWhihtxv0j7fB9g0l1wBc7OIZ2HvF3XhUtI8DtD3zv86S+pmtauYrNc9KmH1t95e9J3gUJCSuuDLZShEg308lLdJ6khM2HepqzOs7bERHiR7MRDi5fOP9Vobhefskda2aOi7BFVepQWwRRe3fbtkhvNps+KqeVw/WRVTlLC5lJsjeKX3SxW1rRiWGkinKQIghBC7BEoTXD4LsFt+wzYd/pItq6HnzFl00/H+ENmrGpR210q5Ob/9fHkI7amZFDckxuaO/MJIQZ5kkoQIOYTwr6u+NJAjwZtViyMdpz2gCf2iYjq5R1/NFvX00/o3lRWeCFD87a7mBCiybhYKItwF5T5PIdLKEOLXyuWJp9wXZoOmrlyECGEGHN++3La436+VWMSclBzVaA6hoxfYpOajPvQg5XChe7NPIRP24eSEm1FCCG63EvJiYljYtabLiQO/7yEi0CJMiAVp7pOUm3WmSyvft2amfZQ9vVKOJKp6+Jjw8SxOirKHlGlRykhhOjSf1/51absDl9+M6BBJfZlV5ZnM0mLwa5RNky0YveXpJwmwkmKIEhl91Cqbi9esCnh+pNCnVGveHLxyJ4M52YeQkIYg9pIhE4ikYiry74Z//PP91Q2p6l9vH99/O18nS7/9vH1R3Utoopt9XGq1f1tsm/VwcupSr1Rm5d8bveKFXdUFd9Dqb67au3Biw8LtEaDJu/+X3t2ZHq19RESwvdo3dUzce3+xBytNidx79prXt1ae/GLp6+6u3zlvnMpeVqjQZF6Zf/KuILGXWuJrKepurt89dEbWRqDNj/57LZ5sUy395s4V837yp7mqkx1qPLWzmO0S78QM80Gz7NVlOhA3OkUuV4vT/lj2/bcup0CRMXLIA1fsDc+4UR8won4hH3zm/qaHE6tlQGxneo/SYXuTSXpe4v2UKZfObYnXRLhUcZIszYqbBlRhFgepVR1d//cT7eqes75ukqlSfLMJqnFNcpas1i737wM1poIJymCIGZU9ltSXHfgm1fjtn699naGhu9eJ/ydsTO6+/MJ4YeMHNVq/rrJA+bonLzqtenUrY7kgs1p1ulZ59pP439+qJbVe2vwV8NCRMV+FtbpN2vSvvVbZgxPyjFI6zTvNmR0kJgQa+9Cs/hqiX26PI2vJqrTo9GZDT+O//aBnOvi36BF509ndvLhE0L43h0++/DJ4iXj+mUSn6bdxk9vX2o7kLhOr/AzG+Z/OOehgudWO/yt4XOGNXXmWE+TF9itbvyyjwfdVYgDwt7oNXNWl8DKLrfKa5/26VL0b1nEwtVDynuggs1lTiWqY8j6Y/ONoMEji6taeF7vTBmRtmTuqJ+e6GTBrXp+PqWFq41vbKvdhNhM9Z+kAv+YGcMyV6yYGJemIDL/xm+9P6OHfxkjzdqo0NpWeIujVJW0bvv5TAVZOvavpXBF0mjWxkXt3CouW1aLSWpljbKGtTXNHGtN5IqTFEGQp3D+TbzyvMtACHnGQYARBLEfnKQIgiCIFar90YsIgiAIgiBI9QYFSgRBEARBEMQuqo3JG0EQBEEQBHkxQQ0lgiAIgiAIYhcoUCIIgiAIgiB2gQIlgiAIgiAIYhcoUCIIgiAIgiB2gQIlgiAIgiAIYhcoUCIIgiAIgiB28aIJlBU9uRupSrB3EILDoHqDvYMgyLOhsgKl7atSiTvZP6t4XaO6tPN7Fk0b3bdHdHS/96f8uPNCrqGoPH27REaZ/utrrUhUnZSwaub4gb1iYoZMXXIiWU2tp8liSD8ytW/n0mlau24jz67pnlfvlChDX2t9YakXit+gTf19zZfjBvSM7trzvTEz1/6WqqNlp2nIO7fpy5H9YqL7j5m56RzbgYzi5p4fJ73Xq0f0gPGztl0uMD6byj5TcJLiJH1GVOUktSsvBEGqDn5VZygNX7BlHiGEVPE6qE6OPZn5Sq9pgyPqevEKbh5bvOA70fyFPf0JIdKIhVvKOZ5Y9+TQN3P+Dh05bdVXtcWF/53YfezRWxMbECtpFjWqMef06r3KCG+nElW1dr0a8Lx6p0QZ9sbDsdElfrHcCxKzO/SpB+ZuvPfGJ0u/CPci2YmHFi2aezB0Sf9aVtM0ZP06b8W18Kmrv2xIbu+Z+9O83+p9H+nFo4UXlsyPlw6ds+Wt2uTxnxt/WvRn0Kz2nrxnXfdqAk5SnKTllqHKJqk9eSEIUoU4UKBkVE/O7dkQG3/1UYFRUqtp13FTh7QU3Jw2/LNEBUns04XIIhZumRdBrk+bsG3owiGx4y1dX2V6Zyif/km1j06sWhR7+r5CVLtV5FsKxpShIfts7PLNJxMfa6TBr/ebPCkmVMKxWjpJ6GdfhZr+8A6P7O197HCOrqe/LTWj8usbj5GhPw5/05NHCBFF9JoYQQghxEqafEIIYQourtuujJ428Nz3e4o1k5XrdkI1jxLWLYv783YO8Qx9e9CUsZ3qiDhEeX3a+HWvd6135sRfd7KNzsFtBnzyUUyImEMI1TyIX/VT7P/uK0W1W0a++eS3KxPWPL/esamG1nrBDH3+dZVfv26v+kk4hPg179bPL+Fonr5/LYGVNA25547nNB3f+1UvESFN+46L+GP1+Zz2XX30qQn33YcseDfEhUtI3fZDeyXMu5DzdpTPCy9R4iTFSfqiTVJ78kIQpApx3B5K5a2FS864xsxcu+vA0V1Lx9S9tHLl1UJJ+IIt85v6RizcF5+w10zBYO26BTT3t86JK3j3q41796ya2Pj+wRQ1XNc93PXdmpSmE5fvOLh1bh/R8Xnr/lNSm8xAVJf732+H8wPf8XMihBCivjVneM+u3XsPGPPZgl0XcwylHtBm/PmQX+/RximDe3XrNWTCD3tuPF2SraRJlde3bs6KmtKjllPx+6xctxd10pbZW7PbTd+wd/+Gz97I3vbtlqSidlI9OPig/uiFsQf3b/zqnZzdi+PTDYQQTdLWuTsUnb7ZtHfPqklNHx1+qDZL7Ln2jlVs6AXiFBAZUnAg/lqG2mBQZ1yN318Q0jGgjJbW5yUqXFr6iuAvkW8LZ0Virp4QQinhcNh3K4focq7m6SpV7GoFTlKcpC/cJLUnLwRBqhDHCZTSxl8v+LTnq7VchXye2K9Vn0GeD/5I19idrDb1+AVBj7HdGrkLndwbRX/QK1Boun6aRo/rEeEtFroEvzt0oMvNk6na8lJTXp/Wt0vnHkM+3cXrPeEtLx4h0vAFuw/t3nvw2KHtq2f09L269PP1/6lKbMQxajIL0v4paPHJ6t0Ht8zpK0mYt/hCAbWeJqHqu7vWP+z4SY9AYbEPfmvX7UabdvyioMcH3RpDK43rLrx4oqg1xCEjRndp7CXmC90bRfb1U1zO0RKiTY2/KOwxpnOom9DJPbTr6N6BlXt1OrZ3yqbsXgB47u0mDHGP/3pYr+iuvd7/Kt5z2IS2HmWoFRm93MhzERR1BkfgwmcUeoYQUUCnoJxt206nyPV6ecof2+KS5HJ9DXhb4STFSfrCTVJ78kIQpApxpMlb8e+hNZuPnb+XUaAxUEo4sqYa+9/BBlWqXtLOuaicApdXXASXCCHEoHiYl3RwdMzPhFJYRKQRaqPZBiOLSMMX7I03qjNvHFm8cP6xFgt6+pkagMMTeYS0HfxJ4YXphx5pGoWKzZ7iCpydQzoPebuuC5eQ4HeGvnf4019SNa1dxVbSpKmH1t95e9J3gUJC9Gbp6K1ctx+DKs0gfcO5yGgkcHlFakhUgxaH6+Qt4rJ15FE9Q0ytKiuqPN85xJl/oXL5OrJ3yqbsXigqT2bCvE1ZnWdtiYnwItmJhxYvnX+q0dwuPtaGOVfgzDMW6ikhHEII1RcauDIBlxCOa+uPP0lZvm760EVKcd02ka38XVWiF97eTXCS4iR98SapPXkhCFKFOE6g1KZs+ukYf8iMVS1qu0uF3Py/Pp58hP2RWvlwNLvO4XMYjbHo1c5oMovec3xJgEB1T25o7swnhBjkSYWwyvOlgR4N2qxYGF3hdYjwxD4RUb28449m656+q0yl4BLKlCys0L2Zh/DpRUpK16ZYmjT3UnJi4piY9aZfE4d/vnDLvAhi5XqZrga2VUniz1feleubOwsIIfrCe0q+v5hPSGnLIMCXBAjUSQq2Ve/LLd35XHrHKjb0AtFmncny6tetmWl7Vl+vhCOZOuvvKoF7U1nhhQzN2+5iQogm42KhLMJdQAghXJemg2auHEQIIcac376c9rifr2Ptn88FnKQ4SV+4SWpPXgiCVCGOM3kzBrWRCJ1EIhFXl30z/uef76kgB6EnT3EnV1dytpe47uTZQpa+59StPL1Rk33z2Pqt92Gjj1NAlxa6I+vjb+frdPm3j6478AS2sjnV6v422bfq4OVUpd6ozUs+t3vFijsq6xuA1HdXrT148WGB1mjQ5N3/a8+OTK+2PkJCVHeXr9x3LiVPazQoUq/sXxlX0LhrLVHxdHieraJEB+JYA+j23LqdAkTW05SGL9gbn3AiPuFEfMK++U19TQ6q1q7bj8g/qrnu8Nrj/+XpdHm3jq49qm3euaxtSU7+Uc21hzecvF2g0+Xfid+w/3EJU1cV944tWOsF8zSF7k0l6XuLtmelXzm2J10S4SG0nibfo3VXz8S1+xNztNqcxL1rr3l1a+3FJ0R1d/nqozeyNAZtfvLZbfNimW7vN3F2rAH0uYCTFCfpCzdJK5oXgiDPCTu+TZXXPu3TpejfsoiFW+aOHNVq/rrJA+bonLzqtenUrY7kAiGEiOr07eD27eTeG3hhC7bMe+qGV+K61K/rJ/3u/jR3xKZCnlf9dlExQTfPwX31hs0cuHLxrBHrVOI6LSNjgpIuE0IIEdbpN2vSvvVbZgxPyjFI6zTvNmR0kJgQlZXSiur0aHRmw4/jv30g57r4N2jR+dOZnXz4hPDq9Ao/s2H+h3MeKnhutcPfGj5nWNNSogPP650pI9KWzB310xOdLLhVz8+ntHDlWE+zCijZ+PPC3585eM3y70f9nEvcG7z13tfvv1Km5Uf8yvAv+q9cPGvYGqWkdsuO3eok3eJyyNNv/CrunWJVuw5Ox4SYebBKidVeMEfgHzNjWOaKFRPj0hRE5t/4rfdn9PDnl5Em37vDZx8+WbxkXL9M4tO02/jp7b14hBBxYLe68cs+HnRXIQ4Ie6PXzFldAivxxqsG4CTFSfqiT1J78kIQpArh/Jt45XmXAXnO6J/smDRb8dmyMXVfTKkJQWo8OEkRBKnmvGhHLyKOQn1/fdyf93I1mtybR9fFa5u+648vKgSpVuAkRRDkxaHKT8pBqgkiv7ele5dOWZYsl9Rt02fG8Hq4+whBqhdhTYNoAAAgAElEQVQ4SREEeXFAkzeCIAiCIAhiF2jyRhAEQRAEQewCBUoEQRAEQRDELlCgRBAEQRAEQewCBUoEQRAEQRDELlCgRBAEQRAEQewCBUoEQRAEQRDELlCgRBAEQRAEQewCBUoEQRAEQRDELip/Us7lK1f+/femA4sChIU1bt6sWTXJEUEQBEEQBCmXSgqUINuNGD7UsaUhhGzeEksIKS3hVX2OCIIgCIIgiC1UUqAE2c7JyfFHy3btGnX8+InS4l3V54ggCIIgCILYQuVN3sgLwYWLF1NSHjzvUjie4OCgli1aPO9SVHde8t6vqdV3CDiDEARxLHYJlJRSR5Wj2ub4QgMv1BEjhj3vgjiezZu3EkLwjVgGL3nv1+DqOwScQQiCOBbUUNZkUlIeDBrUX6lQPO+COJ7o6G5HjhzD12EZvOS9X4Or7xBwBiEI4lhqjoZyyPAR9V955ZMpk52dnR2YY7W1mtlosaK0Zqp1a2SlHM5L3vs1tfoOAVsGQRDHUnM0lDwejycQrli1esbnnzkqTZAmO0V1cVSCZXPqRPywYUNsvHnr1m3EJosVrZFvjhpYpWfCS977NbP6DgHbBUEQx1JzNJRiiaRr165///334iVLx44eJZVK7c8OpMm2bdvan5QtnDoRr9VqdTpdietdu0UfP3ak1MUux4/FlytQ1lglTY2slKN5yXu/xlbfIWDLIAjiUJ6JQHn+woUrVxMFAgGl1Gg0stc5HI5QKFQqlQzDDBzQ38vT01E5EkIEfEHDhg3r16+/adOmVWvWffrJlIomXh0o0WKEkOgePQkhXbtFHzl80Pw6wzA2JslUkzeH8sb0STsGL5sb7gBRHwUFG6k2ve9QbO79mll9h4AzCEEQx/JMTN4XL10ukCsCAwP5fD6fz+dyiw541Gq1mZmZKSkpZ8+e7di+fSUEyjLg8XgGg0EgEPTv3//w4cNLV6wcN3qUSOT4uJXPlBICZc9efdh/R/foefDAvqd32ipQOujNobwxY9TM60rTn9ImPy4fFDd9x+Blc5vYKCBSWqQyckRx8HVoI+U0FNutHA7fyS2gYdve44Z3CHTiVCgP5Y0Zk6yPhLJ/rRS29775nYbcS3s37Dx1JSVHJ/Su3zKy98CYln7CilW1PJQ3Zoz5gY5aNreDJ89UBMW1pR/Oz5q21pEtYD84gxAEcSzPREPJ5XJr1ao1ZMgQT09PPv9pFgaDISMjY9u2bUlJSZWTLMp4hFKq0Wh0Op1are7Tp09cXNzKNWsnjv9AKBRWNJdy0Geemv/RN1v/TuUEthn2zZJpkT6C4jcUnu3ToufZAtOfru32XzzQxsWmtCmlrOqxd59+JX7t2avP/n174N82aigpddw2MmmTH36e00Ty9ML3G+ZU9MXkKCMkvgxtwabeL+pWalBl3ji+YumCI40W9AkQlPNQMSRh5Y4ExxqfbdVPmlffmHnyx9WXIsbMGvtqgFibfuf8Lwl7ksMmNpCUmUQl4OgzDxxJaTs8BD5mDem/xl4rZPyrm/m9OpUFQZCawDPRUHI4HIPBIBQKHz9+rFarNRoNaN0opVlZWRqN5llkmp+fr1Qq9Xp9UlKSj49P//799+3bt27Dz+PGjBYIKvR6LBt96p4Pvjjb5qffNzUnl1aPmTKxbpPtgwJKtqNLBYRIc8w1lHt27yx9A/urzSZvR0lwlBS9oU1XVP/OnLxz0NLZTci/MydtbNk55J9Tf9/LMcqCWvX5aHz3uiIOIVT7+NT65Tv+l6wUB77WoZ2SIY6Sb6vXy7kaU05DmXUrT+wT0SnGN+FYrq63P8k5t2P1tlM3nmglQa16TRjfvb6EQwihmocJ61bsOJOiEtd6rX271D8Txyyf3YSYRoLEmHdh58rYX689kXM9G7zZZ/TIN1Rzxnx5XUlmDOxJpE2+3zC7iYQQg6XEVf/OnLTxtfaBZ3+9mKyp9+3675pYF/Uqo6HUZJ/L8+7XvUWgC4cQQUBY+2Fh7eELTpV64cDmnQmJjwsZSUB45KjJA5sU7pw6Xz914YhgJ0IIIdqUjZ8uEXy2YKh/ocVmKdaeoto96l+Pu5D3xRtuXELlN3ad9upSJ/dq0ci3WHdioQzNXXmElGrPyLpiNdvahJCS07BYAwotd2JF2xBBEMQWuPY8TK1ACGEYhsvl3rp169KlSzdv3rx9+/adO3eSkpKysrJY4dLas5XIEcjPz3/8+HFBQcH9+/dTU1MHDhwocBItW7FSqVSW8VTF6qzP+GVrervvxr8RIJEEvDnuu3ZpW05l6CvbgpYqaGQYW/6zcXNYkZHZIZRuf/aK+tHRh/WGf79+5/ZVn7+Zu3/5yXQ9pVSdHDd/V/6bn6+OjV08tmHykQdqhxUGXQpswabeL+pExqBMTzx5MEMa7i7QPtr7w4aU8LGLNu1YN6uH08lFG28pGUqpOiluwR7lu1+sjY39aXyTx8cesh0KiaiTt2w44/XenI07d2ycM7he2m9POI3nrJ/dxKfJ3O37D8V9FyamlFpLnFL1o6NpTT5YtGnPtm/DxA7o/WLVF7g3d8ncvf/0f+kKA2OWlvL20hX/uHT7dNnWHXu2zBsRdGXtmmsa3/btBRcOJkG5GGXS4fOCdzv6MVZLXqxwosAubxXuP/5IS6k+7Zftj1vGhIiLGtlK3S2VoZCx1J5q8y4r0YMlGtB6O1ekDREEQWzELoGyDAwGA6XUYDBotVqtVqvX60GOZBimhNOJo2AYprCwUKPRMAxjMBgeP36ckZHRu3dvoUi8as1ah2WjzTxb6NG+dpHyRFK7g3vhmQxtqdsUF8e2DKoTWDfijZ6Tlv2WbrPESSlV2IbtTjmOgihvzHyvd0zP3jE9e8cM/uqGkhZZMiklouDBwzuGejhxBa4N2sf4Kq7maCnVpJ68xO/6fmQDN4HArUHUqOhaQgeKt/g6tAXbu7VP7/fGf3vMZfC0rn6G1BNnaNTILmGeTgLn2m8O7Ovy3y+pGko1qQmXBV2Hd3jFRSBwfaXT8B61nEwDoGgkcAQcoyIrLTNfK/RqGDns/RCR+a+UUko1VhKnlDjV7j/knRAXvi2DpMLV5/lETZ/QRvH7qi/GDRw8btqCXRey9ZRSKg79fM5H3cL9nQVcrsineUxfj0en0w1e7aKcbx74r5ChlCm8eeA/16g2XtaapWTBqMC7XYzr39sT8wqu7/zFqVt7X35RC1iru8UyaGxrT7M/izWg9XauYBsiCILYxDPZQ0lpkWqAy+Xy+XxKKbjm8Pl8DodDn1rZHLyHMi8vD8QsPp8PBveLFy+eP3++YWgDh62ejDZPz3cXFgniXKEH35CnKyHaubTdd+sRIYQaVJm3/9j6zSf9MzYcm9PC2Ybt/wcOHHJMOU1QWgHjeFkwlEjDZq/5Jow1RKpuEkIYhmEIJVyhh9CUEUfIpXojwzCMKk0vbiXlwnWetK5McIVhHFMcfBnaQvm9z3ar2KjKvH5k1dar9xVvhise5SUfmzgolp1w0jCVgWGIKl0vbi0p6lCuNEjGv1Q0AGAkiGoPmdxz575d83Y/LJCEdhr24eDWHnzG9CsURG8tcUp4Yj8Rx5bxYbM4Waz6XNfw6A/Cowk1FD66dGTdmvnS2bO7+PIZxa3jm+MSLt3PLNQaKSUcWRO1gRPcvLvv3gOXcyLakcv7U3y6j3Pj6DMsl9y8vFBZjnN471di18Zt5d4LGTXKlfPA1AJW6s5YLAPDSGxoT/bPEg1orZ1NpcUZhCCIY3mGgc2NRqPBYAAXby6Xy+PxeDwe6/HtcCilcrnc2dlZLBYLhUIej3fr1q3z58+HNqg/eeKHDsuG6+QuABGSSwhhdLmGp+JlSTh8iW9Y14+X5v7eZ/09VYtmNvh42h7YPDc39+jR4zbc6CBVBGUta6WukOI/sdd5Il+B+r5cHyHlE0IM8vtyPe6hrGLKa+6nncgV+zTtM6Hz13N+vjKrd4B7vVbzZ3f25hW7VSvyFaiTn3ZossJQYgBwJK90HPl5x5FUl3k5bvam7e0iPqwHH5CMqSBcseXEVfC7TR1bIQ1l6as859oto3sdPnMiRxflY3iwfWUCr/+UBc0C3SQCbsE/M6efpJRyXMJigrfFnU0Nocey6w5q4sKhOislpyX/opSI68W0Yz47aOyxsL6E6NkZYSUFjeUyWGlPwiOMxsBQyiGEMOosDfO0F56Wx1o701L/QhAEcQTPag8lIYTP5wsEAp4ZfD5fJpOB33fZz1Y0R0qp0EmYn5/P5XKdnZ1dXV0vXbp0/vz5iCZhU6dMFovL2pBVsTo7+bR1yf3tkQr+Uj36NdelnY9T2c/wCDXamI9Wq5XbRtXvoSydFnulxE9Ffwr9OryqO7Hll7v5Ol3+3ZObj6bqHFYa3AFmC7b0vvlNXK/Xe/nfP3DNqWM7cvjno4lpCp1Bk5dy6cC6DfdUlAp9O0To4mN/vVug0+Xf+2Xr0Sfa4gNAlbRu/eFLDwt1RoZwuByTGdydq7yXqy3avyf0j7SYuKUBZmfvF0tPdXfVsu2//ZtaqDXoFKlXThzMkoW78SllDGojEQidnIQcXc7tU7Fx99XgkC2tH91QeXz7tnhV4x71paSskltoT37AgCXbdiztX4tvdtFaCtbKYLE9Be6vyjIP/n4nT2fQZN9O2LrzgdrSNCyvtDiDEARxLM9KQ6nT6cDnWiqVCgQCLpfL4XAIIVqtFv7hcDw8PFQqFZfLlUqlFy9eTExMbNyw4fhxYx0cNkjg23GY3/KvV5/ZMLE5ubT26zP+w6f7CQgpPNun/YJPfzvQxoUQ+dUZ35/tMKxfu/qu+kf/xH2zIKfl0hDbopNQMy9vCGleAja8+fP38mavkOI/Pb1TGDzg414/r5734VaVqFaz9l1qJ18rloJdxcHXoU2U01Alu1XasEeDzZvPC7+bNiZ+687vPkrONUgCIzr1HxzoRCl1Ch44uefPa+ZN2KISBbz6TsfayXc5Ji0gpZSKAro0PLNl0ccL0nWSgCYdRo4NcqKUBnR/y3nhFyNiuaHfrPy6sYRfq8e0MUdKJa4uNcAqXSmLdzrV7tXm+t6dP265l6Xlu9Zq3G7olEgfHqW8oPeGNFu+ZeboRTqhR3CLdzoGiq9AMURBXV4jXyWQTt/XEVFKCbFS8uIaSgu1eHrRSgocK2Ww2J7Eu+P46PurF0/cruB5hLTu0KX2rUsWpmF5pcUZhCCIY+H8m3ilEo/FbosbMXwow1hektZt+Pne/eQOHTo8fPiQw+GwZm5KKcMwjx8/TkxMnDd3Tmhog9LPZudkHz9+YuiQwRXKkRAyYdLkoKDg1q1bJyYmXr9+PTys8djRo8Ricbl1sZYjIWTP3n0Wjl7UZyTMm/Rt7JnHJLDtsO+WfhbpU0KgpOqkw4vnLN3+550Cvnf913t8+NXnfUqGF7HEt19/1a9fH5VKxV4xD2xOCDEPbG4wGE6ePNWvb7EbSpe/d++ecrm83KxfOIwM89uvv5dd/ZecZ937+rQDMxcpJ34/pI6jI72Wiy29X4MHv0PAGYQgiGN5JhpKo9F45cqVBw8elNgxyTCMXq83GAw5OTkOz1Sv12u12r///vv27dsNGzSY/NFEh2dRhMA38stdkV8Wv+jSdt/FA0X/5ojrxczcFDOzEmlTs8DmhJD9+/aw4c3379tj/lNVayirGTWyUs8CBzeU+kHc8dS2HZoHkAe/bv1VG/aJj+A5dEVlNJRIcbBlEARxLM/Ey7tfn97vvv02h8MpYd2mZvaYOkF1KrGilfGIXqfPzc2Vy+XhYWFjx4x6QZdLWuos7z27d/brP3DP7p0lrr94Z3k7lBe0f6scR/e+k3dr8ZH1X254qBTXea3bR/2DBJQ6wmu/Ytjc+zVz8DsEnEEIgjiWZyJQenh4eHh4VPrxyj2i0+keP37cNCL848kfVS7x6gCl1FhKUty5c3vpixVyynFM4aoVNbJSjuYZ9L6obtSE2VHmWTyPjnjJB79DwJZBEMShPMOwQVUMn8+rVy9k0ocTHJhmcHDQqRPxoaGhDkyzbCilCoXCljvP/XM+ODjItiRr4JujBlbpmfCS937NrL5DwHZBEMSxPBMN5bOjjBw3bVhf7j0VpWWLFoSQFUuXOCrBcrE9sHlwcBAUr2xqqpKmRlbK4bzkvV9Tq+8QsGUQBHEsNUdD+Yxo2aKFLXJb9SQ4OOjgwcMtW72o5S+DC+cv2qagfXl5yXu/BlffIeAMQhDEsdQcDSVSGhCFL5y/+LwL4nhsVNC+zLzkvV+Dq+8QcAYhCOJYUENZw3mhNayInbzkvf+SVx9BEKQqQQ0lgiAIgiAIYheVFCjDwhpv3hLbtWtU+bdWkOPHT4SFNa4OOSIIgiAIgiC2UMmjFwkhl69c+fffm44tDSEkLKxx82bNqkmOCIIgCIIgSLlUXqBEEARBEARBEEIIt/xbEARBEARBEMQ6KFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIXKFAiCIIgCIIgdoECJYIgCIIgCGIX/LJ/vnDxYkrKg6opCoIgyHMnODioZYsW5d6GayOCIC8V5a6NZQmUsGKOGDHM0aVCEASppmzevJUQUva6iWsjgiAvG+WujWUJlCkpDwYN6q9UKBxfLgRBkGpJdHS3I0eOlS1Q4tqIIMjLRrlrYzkmb0oJpdTRpUIQBKmm2Lji4dqIIMhLRbkrXjkCJSEUF00EQV4ebF7vcG1EEOQlotz1DjWUCIIgZqCGEkEQpDT2aygZXDRfXJQ3pk/aMXjZ3HCpbddfALTJ26bNeTJo0bQ2bhZjXjH5Z+ZN21H7y0VDgpyqumxITcBmMRHXRgRBXiLsN3njV3g1Rvdwy0efHCQ9li4fVkdo6QZKixQp1IbryhszxvxARy2b28GTZ7pPcW3ph/Ozpq2d26R6iJ5M7rmf/3QZ+H1LV46VgclxbTW635EvNp3v+tUb7sVFTuWNGZN2DF5Wkboob8wYNfO6khAOhy9yr9X4jX7jhr7tL+SUcX/ZWVSiDEjVYvuKh2sjYhFD7qW9G3aeupKSoxN6128Z2XtgTEs/66tGpcClCaly7BUoKcV9QtUXzcP4v2mLluTcsYf9PqgnsnabNdOchescfeaBIylth4dAYob0X2OvFTL+1ca4Z8j862Bm49FtPLhlFIjn0XZwwwMbz2S17uZTenxXuC7SJj/8PKeJhOrladeOLl8x71iDBT39rc0bSdj3G+aUO++qTXsiFrBVP4lrI2IRY+bJH1dfihgza+yrAWJt+p3zvyTsSQ6b2EDi6IxwaUKqFnv3UBL8Cq++qJKPXBV2nv4eWfLDkRTl5FBYr6j28an1y3f8L1kpDnytQzslA28+q9efQikR1e5R/3rchbwv3nDjEiq/seu0V5c6uVeL7jTknNuxetupG0+0kqBWvSaM715fwiGEUaVeOLB5Z0Li40JGEhAeOWrywOauPEKMeRd2roz99doTOdezwZt9Ro+MrCtW/ztz8s5BS2c3gbKqTH+Sf2dO2vha+8Czv15M1tT7dv13TYSW8jLmX/+fuv7IOuKiUWkpCw4hRBwcVU+56UZ+1LuerI5S9e/M0V9eV5IZA3sSaZPvN8xuIiFU8/jXjat3/e9uLvFo8Ga/CSPb1xYV/8KnlBSJDoQv82/Wtbfv78dztTF+PCvPFq9Ry84h/5z6+16OURbUqs9H47v7Jn1ZqgxIdQM1lIhdaLLP5Xn3694i0IVDiCAgrP2wsPaEUEotLJVNCndOna+funBEMGzQ0aZs/HSJ4LMFQ/0LLS22ZuDShFQ59msocdGsplDFvUP/yToP8g8gnaQnD9+VT42QcQjRJMfN35Uf+fnq7+qS5BMrfvxHXZtSSqm16+YpUkpEgV1a/bXq+KOWg+pw037Z/rjlqDevLgCBUvd47w8bUt6ctGhqA2Hm2dgFiza+smhCQ4n69tIV/zQZ8Omyqb5SY/aVPQvXrmm8YNqrztrkLRvOeL0/Z+NrPty8O6eP//ZEPbIepZSYCbLsn4RS9aOjaVFfLPowxFXAIdpHuyzlpcu9Kpe95iUsel5jKQsxIYQ4eTdzll/J0b7jweptxY3nrJ89c8quQUu+ayKBvDVJ237cntN52sqvQ0jyiZWLftgWvGhUSDFN79MCU6MyPfH4gXRpCzeB9WdL1Ohhp6nfj6zvrLl7fPH85SdbzOtRqgzPepggFQedchB7ELg3d8ncvf+0NOq1+j5SHisHqiwtlR+3by+YczCp36RGEg6hqqTD5wXvzvJjHllcbM1FSlyakKoHwwbVUGjhrcNJHl1GeXC5tEU3j0OHbhU2ec2Fo009eYnf9YvIBm58QhpEjYo+NfMKoZRqrFwvoaEkVODdLsZ11vbEqPH8nb84dfvWl38VzCCa1BNnaNT0LmGefEJqvzmwb/ysX1I1ofXEoZ/PCS1KQeDTPKavx5en0zVNZYQj4BgVWWmZ+a51vBpGDmtICKUqWmRUoU9zJJRSQolT7f5D3glx4RFKqdZKXow238B3E5i2T1JLWVBCCOEI3HiGfK3RQgWf5q5NTbgs7DozMtRNQEiDqJFRv809lTp4bF2n4o8ob8x8rzfhcHhOrrUathvySZQvj1KNlWfNayQKHjy8Y6gHlxCnBu1jfOOP5WijfUnxMiDVD9udcrAXEQvwfKKmTzDuOLTqi3Vpamlws/b93+/dwpNPLC6VhgntopzjD/xXGNrchRTePPCfa9RAL0PqZosLoPnHLi5NSJXjAA0lwzCOKw/iIJj8a4ce+3ULdyUMw3GN6Oa749D1vKZt3PSqNL24lZQLvcaT1pUJrjAMwzDWrpunSQkhDMc5vPcrsWvjtnLvhYwa5cp5QAhhGIZhFI/yko9NHBTLDippmMrAMAyjuHV8c1zCpfuZhVojpYQja6I2MIyk9pDJPXfu2zVv98MCSWinYR8Obu3BhyzYfNk/CSU8sZ+IU/SD3kpeXL4rT5+jMTASLiGECC1lAQlrcg08VwGxVEE2d70q3SBuLeWxbSIxXFfqGUZQ/BFp2Ow134SZGYAow1BrzxKzGnGFHkJTCThCLtUbGbMbcFZVV2wWJ3FtRCzDdQ2P/iA8mlBD4aNLR9atmS+dPbuLL9/iUskJbt7dd++ByzkR7cjl/Sk+3ce5cfQZVhZbszxwaUKqHPv3UOIHS3XEmHvlyL3M2/NH9zFd4YjVl3NbvisT+QrU9+X6CCmfEGKQ35frCaWU8qxcL2nyJpQScb2YdsxnB409FtaXEL3JUMITB7jXazV/dmdvXrFnNA+2r0zg9Z+yoFmgm0TALfhn5vSTlFJKOZJXOo78vONIqsu8HDd70/Z2ER/Wo4RHGI2BoZRDCGHUWRrGZIVhS0AI4VrJy+gWIZNfztK85S6GSlvIQkQIIZqsK3JZU3d+aQ0loQybi8iXr0qS6yKkAkKIvjBJxfcRcS22SalJYO1Zo5ldyYpxv1gZkOoHaigRR8Fzrt0yutfhMydydFE+BstLJcclLCZ4W9zZ1BB6LLvuoCYuHKqzsgDi0oQ8V8odHBZD+Zk/X7RLA6lOGLLPnyxo9vWW3bv27tm1d8+uvbs3ffea/MT5HIPQr8OruhNbfrmbr9Pl3z25+WiqjhJKqbXrxSnqb37AgCXbdiztX4tvdlHoH9mOHP75aGKaQmfQ5KVcOrBuwz0VpYxBbSQCoZOTkKPLuX0qNu6+mhJKqSpp3frDlx4W6owM4XA5kJvA/VVZ5sHf7+TpDJrs2wlbdz5QU2KeNWAtL65r43aSpIQHKoZSa1lQShlVSsJ9yRuNXLjFq8cRuHOV93K1TFEuvu2b6k5sOnU7X6fLv3Ny00lt0/Z+QittUgLrz7L3l3iw6M8SZUCqHxXaQ4kgJVHdXbVs+2//phZqDTpF6pUTB7Nk4W5860slkdaPbqg8vn1bvKpxj/pSYn0BLA4uTUgVY/8eStydW/3QZ/71q7rxmGDJ084RB3dtrFr3V0b7nsEDPu718+p5H25ViWo1a9+ldvI1SimlQivXzZI1cxu0dJFfq8e0MUe27vzuo+RcgyQwolP/wYFOlHKC3hvSbPmWmaMX6YQewS3e6RgovkIppaKALg3PbFn08YJ0nSSgSYeRY4OcKCXeHcdH31+9eOJ2Bc8jpHWHLrVvXYJxWjxrK3lRrmeb7j7Hd/2d88W7njziZCkLSow5/+z8zzv6vVKxhYQB3d9yXvjFiFhu6Dcrv24scao76OM+mzf89FFcPnGt17b31EHBTiUesdgmhBBi5Vn2/hI1Yq+XLINdAwF5Fti+4uHaiFjAqXavNtf37vxxy70sLd+1VuN2Q6dE+vAo5VlZKikRBXV5jXyVQDp9XwecZ6wtgGa54NKEVDnlrnicfxOvWPttz959vXv3lMvlji4VglQa7YNdsxam9Z4zqZWr5ZNyCs4t+3qv/6dzBtTGk3KQSmBkmN9+/b1f3z5l3INrI4IgLxvlro2ooUReLIR1+v+wjBCrA5Pj0mryklbWf0eQskENJYIgSGnKXfHwLG8EQZCn2Cwm4tqIIMhLhL0CJcXgvQiCvFRUxCnnWZcFQRCkumC/hhIXTQRBXh5sXu9wbUQQ5CXC3jiU+BWOIMhLhY0rHq6NCIK8VNhl8g4ODjp48HDLVi0cWiQEQZDqy4XzF4ODg8q+B9dGBEFeNspdG8sSKFu2aAFJOLhQCIIg1ZXg4CBY+soA10YEQV42yl0by4pDiSAIgiAIgiDlUs7RiwiCIAiCIAhSNihQIgiCIAiCIHaBAiWCIAiCIAhiFyhQIgiCIAiCIHaBAiWCIAiCIAhiF6Lj8PsAAAAlSURBVChQIgiCIAiCIHaBAiWCIAiCIAhiFyhQIgiCIAiCIHbxf7cQVA6Y+w+pAAAAAElFTkSuQmCC<Mask/><Algorithm description="Simple comparison (pixel by pixel)" name="simplecompare"><Parameter description="Threshold" name="threshold">10</Parameter></Algorithm></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/verificationPoints/InitialQnetToolView b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/verificationPoints/InitialQnetToolView
deleted file mode 100644
index feae2c85f15f18e13edf2ca98afcaf4813d1fe5e..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Cnet exists/verificationPoints/InitialQnetToolView	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":QnetToolScroll_QWidget" type="PNG">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<Mask/><Algorithm description="Simple comparison (pixel by pixel)" name="simplecompare"><Parameter description="Threshold" name="threshold">10</Parameter></Algorithm></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Control to Ground/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Control to Ground/test.py
deleted file mode 100644
index fd98723c3ca02064828038147d54177badb65cb9..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Control to Ground/test.py	
+++ /dev/null
@@ -1,232 +0,0 @@
-import os
-
-def main():
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'MiniUpdate.net')
-    except Exception:
-        pass
-
-    
-    startApplication("qnet")
-    
-    # Open cube list
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/Ground/Extracted_AllOverlaps.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    # Open control net
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_7"), 95, 13, 0, Qt.LeftButton)
-
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "Mini\\.net")
-    doubleClickItem(":stackedWidget.treeView_QTreeView_2", "Mini\\.net", 58, 5, 0, Qt.LeftButton)
-    
-    # Open ground source file
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    clickButton(waitForObject(":Open ground source.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "src/qisis/tsts/SquishTests/input/Ground/Shade_Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "<Return>")
-    
-    # Open radius source file
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Radius Source"))
-    clickButton(waitForObject(":Open DEM.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_4"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_4"), "src/qisis/tsts/SquishTests/input/Ground/Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_4"), "<Return>")
-    
-    # Filter on constrained points
-    clickTab(waitForObject(":Control Network Navigator.qt_tabwidget_tabbar_QTabBar"), "Point Properties")
-    clickButton(waitForObject(":Filter by Point Type(s).Free_QCheckBox"))
-    clickButton(waitForObject(":Filter by Point Type(s).Constrained_QCheckBox"))
-    clickButton(waitForObject(":Control Network Navigator.Filter_QPushButton"))
-    waitForObjectItem(":Navigator_List", "L1470")
-    
-    # Bring up qnet tool dialog with given point
-    doubleClickItem(":Navigator_List", "L1470", 26, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Qnet Tool.Geom_QRadioButton"))
-    
-    # Click add measures
-    clickButton(waitForObject(":QnetToolScroll.Add Measure(s) to Point_QPushButton"))
-    scrollTo(waitForObject(":Select Files:_QScrollBar"), 177)
-    scrollTo(waitForObject(":Select Files:_QScrollBar"), 126)
-    clickButton(waitForObject(":Add Measures to ControlPoint.OK_QPushButton"))
-    
-    # Control measures
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 145, 6, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "f684a63\\.lev1\\_slo\\.cub"), 147, 2, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QToolButton"))
-    spinUp(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    doubleClick(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"), 44, 8, 0, Qt.LeftButton)
-    spinUp(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    doubleClick(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"), 45, 0, 0, Qt.LeftButton)
-    spinUp(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    doubleClick(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"), 45, 0, 0, Qt.LeftButton)
-    spinDown(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    doubleClick(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"), 45, 14, 0, Qt.LeftButton)
-    spinDown(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    doubleClick(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"), 45, 14, 0, Qt.LeftButton)
-    spinDown(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    doubleClick(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"), 45, 14, 0, Qt.LeftButton)
-    spinDown(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    spinDown(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    spinUp(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QDoubleSpinBox"))
-    mouseClick(waitForObject(":QnetToolScroll_Isis::ControlPointEdit"), 602, 436, 0, Qt.LeftButton)
-    type(waitForObject(":VP2"), "<Right>")
-    type(waitForObject(":VP2"), "<Right>")
-    type(waitForObject(":VP2"), "<Right>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Left>")
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 229, 14, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "f825a28\\.lev1\\_slo\\.cub"), 209, 9, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":VP2"), 142, 155, 0, Qt.LeftButton)
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Down>")
-    type(waitForObject(":VP2"), "<Left>")
-    type(waitForObject(":VP2"), "<Left>")
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Latitude: 17.1381    Longitude:  300.307_QToolButton_2"))
-    
-    # Save resulting network
-    scrollTo(waitForObject(":_QScrollBar"), 2)
-    mouseClick(waitForObject(":_QHeaderView"), 877, 11, 0, Qt.LeftButton)
-    waitFor("object.exists(':0_1_QModelIndex')", 20000)
-    test.compare(findObject(":0_1_QModelIndex").text, "Odyssey/THEMIS_IR/705696930.025")
-    waitFor("object.exists(':1_1_QModelIndex')", 20000)
-    test.compare(findObject(":1_1_QModelIndex").text, "Odyssey/THEMIS_IR/829897156.179")
-    waitFor("object.exists(':2_1_QModelIndex')", 20000)
-    test.compare(findObject(":2_1_QModelIndex").text, "Viking1/VISA/39046014")
-    waitFor("object.exists(':3_1_QModelIndex')", 20000)
-    test.compare(findObject(":3_1_QModelIndex").text, "Viking1/VISB/41759599")
-    waitFor("object.exists(':4_1_QModelIndex')", 20000)
-    test.compare(findObject(":4_1_QModelIndex").text, "Shade_Mola_Radius.cub")
-    waitFor("object.exists(':0_1_QModelIndex')", 20000)
-    test.compare(findObject(":0_1_QModelIndex").text, "Odyssey/THEMIS_IR/705696930.025")
-    waitFor("object.exists(':1_1_QModelIndex')", 20000)
-    test.compare(findObject(":1_1_QModelIndex").text, "Odyssey/THEMIS_IR/829897156.179")
-    waitFor("object.exists(':2_1_QModelIndex')", 20000)
-    test.compare(findObject(":2_1_QModelIndex").text, "Viking1/VISA/39046014")
-    waitFor("object.exists(':3_1_QModelIndex')", 20000)
-    test.compare(findObject(":3_1_QModelIndex").text, "Viking1/VISB/41759599")
-    waitFor("object.exists(':4_1_QModelIndex')", 20000)
-    test.compare(findObject(":4_1_QModelIndex").text, "Shade_Mola_Radius.cub")
-    waitFor("object.exists(':0_15_QModelIndex')", 20000)
-    test.compare(findObject(":0_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':0_1_QModelIndex')", 20000)
-    test.compare(findObject(":0_1_QModelIndex").text, "Odyssey/THEMIS_IR/705696930.025")
-    waitFor("object.exists(':1_1_QModelIndex')", 20000)
-    test.compare(findObject(":1_1_QModelIndex").text, "Odyssey/THEMIS_IR/829897156.179")
-    waitFor("object.exists(':2_1_QModelIndex')", 20000)
-    test.compare(findObject(":2_1_QModelIndex").text, "Viking1/VISA/39046014")
-    waitFor("object.exists(':3_1_QModelIndex')", 20000)
-    test.compare(findObject(":3_1_QModelIndex").text, "Viking1/VISB/41759599")
-    waitFor("object.exists(':4_1_QModelIndex')", 20000)
-    test.compare(findObject(":4_1_QModelIndex").text, "Shade_Mola_Radius.cub")
-    waitFor("object.exists(':0_15_QModelIndex')", 20000)
-    test.compare(findObject(":0_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':1_15_QModelIndex')", 20000)
-    test.compare(findObject(":1_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':0_1_QModelIndex')", 20000)
-    test.compare(findObject(":0_1_QModelIndex").text, "Odyssey/THEMIS_IR/705696930.025")
-    waitFor("object.exists(':1_1_QModelIndex')", 20000)
-    test.compare(findObject(":1_1_QModelIndex").text, "Odyssey/THEMIS_IR/829897156.179")
-    waitFor("object.exists(':2_1_QModelIndex')", 20000)
-    test.compare(findObject(":2_1_QModelIndex").text, "Viking1/VISA/39046014")
-    waitFor("object.exists(':3_1_QModelIndex')", 20000)
-    test.compare(findObject(":3_1_QModelIndex").text, "Viking1/VISB/41759599")
-    waitFor("object.exists(':4_1_QModelIndex')", 20000)
-    test.compare(findObject(":4_1_QModelIndex").text, "Shade_Mola_Radius.cub")
-    waitFor("object.exists(':0_15_QModelIndex')", 20000)
-    test.compare(findObject(":0_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':1_15_QModelIndex')", 20000)
-    test.compare(findObject(":1_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':2_15_QModelIndex')", 20000)
-    test.compare(findObject(":2_15_QModelIndex").text, "Manual")
-    waitFor("object.exists(':0_1_QModelIndex')", 20000)
-    test.compare(findObject(":0_1_QModelIndex").text, "Odyssey/THEMIS_IR/705696930.025")
-    waitFor("object.exists(':1_1_QModelIndex')", 20000)
-    test.compare(findObject(":1_1_QModelIndex").text, "Odyssey/THEMIS_IR/829897156.179")
-    waitFor("object.exists(':2_1_QModelIndex')", 20000)
-    test.compare(findObject(":2_1_QModelIndex").text, "Viking1/VISA/39046014")
-    waitFor("object.exists(':3_1_QModelIndex')", 20000)
-    test.compare(findObject(":3_1_QModelIndex").text, "Viking1/VISB/41759599")
-    waitFor("object.exists(':4_1_QModelIndex')", 20000)
-    test.compare(findObject(":4_1_QModelIndex").text, "Shade_Mola_Radius.cub")
-    waitFor("object.exists(':0_15_QModelIndex')", 20000)
-    test.compare(findObject(":0_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':1_15_QModelIndex')", 20000)
-    test.compare(findObject(":1_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':2_15_QModelIndex')", 20000)
-    test.compare(findObject(":2_15_QModelIndex").text, "Manual")
-    waitFor("object.exists(':3_15_QModelIndex')", 20000)
-    test.compare(findObject(":3_15_QModelIndex").text, "Manual")
-    waitFor("object.exists(':0_1_QModelIndex')", 20000)
-    test.compare(findObject(":0_1_QModelIndex").text, "Odyssey/THEMIS_IR/705696930.025")
-    waitFor("object.exists(':1_1_QModelIndex')", 20000)
-    test.compare(findObject(":1_1_QModelIndex").text, "Odyssey/THEMIS_IR/829897156.179")
-    waitFor("object.exists(':2_1_QModelIndex')", 20000)
-    test.compare(findObject(":2_1_QModelIndex").text, "Viking1/VISA/39046014")
-    waitFor("object.exists(':3_1_QModelIndex')", 20000)
-    test.compare(findObject(":3_1_QModelIndex").text, "Viking1/VISB/41759599")
-    waitFor("object.exists(':4_1_QModelIndex')", 20000)
-    test.compare(findObject(":4_1_QModelIndex").text, "Shade_Mola_Radius.cub")
-    waitFor("object.exists(':0_15_QModelIndex')", 20000)
-    test.compare(findObject(":0_15_QModelIndex").text, "RegisteredSubPixel")
-    waitFor("object.exists(':1_15_QModelIndex')", 20000)
-    test.compare(findObject(":1_15_QModelIndex").text, "RegisteredSubPixel")
-
-    waitFor("object.exists(':2_15_QModelIndex')", 20000)
-    test.compare(findObject(":2_15_QModelIndex").text, "Manual")
-    waitFor("object.exists(':3_15_QModelIndex')", 20000)
-    test.compare(findObject(":3_15_QModelIndex").text, "Manual")
-    waitFor("object.exists(':4_15_QModelIndex')", 20000)
-    test.compare(findObject(":4_15_QModelIndex").text, "Candidate")
-    activateItem(waitForObjectItem(":Qnet Tool_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Save Control Network As..."))
-    clickButton(waitForObject(":Choose filename to save under.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_3"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "src/qisis/tsts/SquishTests/output/MiniUpdate.net")
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "<Return>")
-    
-    # Quit
-    activateItem(waitForObjectItem(":Qnet Tool_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Close"))
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-    snooze(1)
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Duplicate Serial m01018/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Duplicate Serial m01018/test.py
deleted file mode 100644
index 6d8ca3aba3ce65ac2e4421a35a21b0dd36d54dc7..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Duplicate Serial m01018/test.py	
+++ /dev/null
@@ -1,92 +0,0 @@
-import os
-
-# This test is designed to look for an error that was fixed in mantis ticket #1018. The issue was
-# having two images with the same serial number.
-def main():
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'DuplicateSerialm01018.net')
-    except Exception:
-        pass
-    
-    startApplication("qnet")
-    
-    
-    # Open cube list (tr.lis)
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/m01018/tr.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    # Open control net (enceladus_sp_no390.net)
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_7"), 100, 16, 0, Qt.LeftButton)
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "enceladus\\_sp\\_no390\\.net")
-    doubleClickItem(":stackedWidget.treeView_QTreeView_2", "enceladus\\_sp\\_no390\\.net", 58, 5, 0, Qt.LeftButton)
-    
-    # Open ground source (N1602275390_1_spjig.cub) -- expect warning for duplicate SNs
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "../src/qisis/tsts/SquishTests/input/m01018/N1602275390_1_spjig.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "<Return>")
-    
-    # Click OK on warning
-    clickButton(waitForObject(":Cannot set ground source.OK_QPushButton"))
-    
-    
-    # Open cube list (tr_no390.lis)
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/m01018/tr_no390.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    # Open control net (enceladus_sp_no390.net)
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_7"), 95, 13, 0, Qt.LeftButton)
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "enceladus\\_sp\\_no390\\.net")
-    doubleClickItem(":stackedWidget.treeView_QTreeView_2", "enceladus\\_sp\\_no390\\.net", 58, 5, 0, Qt.LeftButton)
-    
-    # Open ground source (N1602275390_1_spjig.cub) -- there should be no warning this time
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "../src/qisis/tsts/SquishTests/input/m01018/N1602275390_1_spjig.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "<Return>")
-    
-    # Right click on ground source to create new point
-    mouseClick(waitForObject(":qnet.viewport_QWidget"), 36, 125, Qt.NoModifier, Qt.RightButton)
-
-    # Name the new point grnd1
-    mouseClick(waitForObject(":Point ID:_QLineEdit"), 55, 13, 0, Qt.LeftButton)
-    type(waitForObject(":Point ID:_QLineEdit"), "grnd1")
-    clickButton(waitForObject(":Create Fixed or Constrained ControlPoint.OK_QPushButton"))
-
-    # Save measure/save point
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    
-    # Save resulting network
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Save Control Network As..."))
-    clickButton(waitForObject(":Choose filename to save under.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_3"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "src/qisis/tsts/SquishTests/output/DuplicateSerialm01018.net")
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "<Return>")
-    
-    # Exit
-    activateItem(waitForObjectItem(":qnet_QMenuBar_2", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-    snooze(1)
-    
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Ground Network from Scratch/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Ground Network from Scratch/test.py
deleted file mode 100644
index 122d40d7347a25f066de186df53c47b28c46c48e..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Ground Network from Scratch/test.py	
+++ /dev/null
@@ -1,312 +0,0 @@
-import os
-
-# This test is designed to hit a large portion of qnet's functionality, but also covers some of
-# qview's functionality. This includes 2 different ways to create ground points, locking and
-# ignoring points, setting apriori sigmas, filtering on point properties, and sorting measures.
-def main():
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'GroundNetworkFromScratch.net')
-    except Exception:
-        pass
-    
-    startApplication("qnet")
-
-    # Open Mini.lis / no network    
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/Ground/Mini.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    clickButton(waitForObject(":Select a control network.Cancel_QPushButton"))
-    
-    # Open Ground Source
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    clickButton(waitForObject(":Open ground source.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "src/qisis/tsts/SquishTests/input/Ground/Shade_Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "<Return>")
-    
-    # Open Radius Source
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Radius Source"))
-    clickButton(waitForObject(":Open DEM.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_4"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_4"), "src/qisis/tsts/SquishTests/input/Ground/Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_4"), "<Return>")
-    
-    # Switch navigator to 'Cubes' from default of 'Points'
-    mouseClick(waitForObject(":Control Network Navigator_QComboBox"), 129, 9, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Control Network Navigator_QComboBox", "Cubes"), 118, 7, 0, Qt.LeftButton)
-
-    # Highlight (shift-select) all cubes and click view cubes in navigator
-    waitForObjectItem(":Navigator_List", "I01812006RDR\\.cub")
-    clickItem(":Navigator_List", "I01812006RDR\\.cub", 115, 6, 0, Qt.LeftButton)
-    type(waitForObject(":Navigator_List"), "<Shift>")
-    waitForObjectItem(":Navigator_List", "I26586032RDR\\.cub")
-    clickItem(":Navigator_List", "I26586032RDR\\.cub", 111, 2, 33554432, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.View Cube(s)_QPushButton"))
-    
-    # Link All and verify it happened
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "Window"))
-    activateItem(waitForObjectItem(":qnet.Window_QMenu", "Link All"))
-    
-    # Attempt verification of viewports being linked
-    waitFor("object.exists(':qnet.Link_QToolButton')", 20000)
-    test.compare(findObject(":qnet.Link_QToolButton").checked, True)
-    mouseDrag(waitForObject(":qnet.I18649010RDR.cub @ 6.90423% (Gray = 1)_Isis::ViewportMdiSubWindow"), 288, 10, 1064, 0, 1, Qt.LeftButton)
-    waitFor("object.exists(':qnet.Link_QToolButton')", 20000)
-    test.compare(findObject(":qnet.Link_QToolButton").checked, True)
-    
-    # Link all via keyboard shortcuts
-    type(waitForObject(":qnet_Isis::MdiCubeViewport"), "<Ctrl+Shift+U>")
-    type(waitForObject(":qnet_Isis::MdiCubeViewport"), "<Ctrl+Shift+L>")
-    
-    # Select the mola cube, open the find tool, enter a sample/line
-    mouseClick(waitForObject(":qnet.Shade_Mola_Radius.cub @ 1.57881% (Gray = 1)_Isis::ViewportMdiSubWindow"), 305, 11, 0, Qt.LeftButton)
-    clickButton(waitForObject(":qnet_QToolButton"))
-    clickButton(waitForObject(":qnet_QToolButton_2"))
-    mouseClick(waitForObject(":Sample_QLineEdit"), 77, 12, 0, Qt.LeftButton)
-    type(waitForObject(":Sample_QLineEdit"), "3148")
-    mouseClick(waitForObject(":Line_QLineEdit"), 78, 15, 0, Qt.LeftButton)
-    type(waitForObject(":Line_QLineEdit"), "13608")
-    clickButton(waitForObject(":Find Latitude/Longitude Coordinate.Ok_QPushButton"))
-    clickButton(waitForObject(":Find Latitude/Longitude Coordinate.Close_QPushButton"))
-
-    # Switch back to qnet tool, right click on radius cube to create point
-    sendEvent("QWheelEvent", waitForObject(":qnet.viewport_QWidget_5"), 249, 246, 120, 0, 1)
-    mouseClick(waitForObject(":qnet.viewport_QWidget_5"), 249, 246, 0, Qt.MidButton)
-    clickButton(waitForObject(":qnet_QToolButton_3"))
-    clickButton(waitForObject(":qnet_QToolButton_4"))
-    clickButton(waitForObject(":qnet_QToolButton_5"))
-    clickButton(waitForObject(":qnet.Statistics_QToolButton_2"))
-    mouseClick(waitForObject(":qnet.viewport_QWidget_5"), 238, 260, Qt.NoModifier, Qt.RightButton)
-
-    # Name the new point "grnd1"
-    type(waitForObject(":Point ID:_QLineEdit"), "grnd1")
-    clickButton(waitForObject(":Create Fixed or Constrained ControlPoint.OK_QPushButton"))
-
-    # Switch point view to geom
-    clickButton(waitForObject(":Qnet Tool.Geom_QRadioButton"))
-
-    # Adjust and save measure
-    mouseClick(waitForObject(":VP2"), 155, 150, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-
-    # Change left to radius cube, right to I18337016RDR, find and save
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 162, 16, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "Shade\\_Mola\\_Radius\\.cub"), 155, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 151, 8, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I18337016RDR\\.cub"), 147, 9, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-
-    # Confirm
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-
-    # Switch right to "I19273007RD", find, register, save
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 152, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I19273007RDR\\.cub"), 144, 7, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-
-    # Switch right to "I26586032RDR", find, register, OK on error, save, register, OK on error, save
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 156, 8, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I26586032RDR\\.cub"), 141, 7, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-
-    # Edit lock the point and save
-    clickButton(waitForObject(":Control Point.Edit Lock Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":qnet_QToolButton"))
-    sendEvent("QWheelEvent", waitForObject(":Isis::ViewportMdiSubWindow - I26586032RDR.cub"), 269, 329, 120, 0, 1)
-    mouseClick(waitForObject(":Isis::ViewportMdiSubWindow - I26586032RDR.cub"), 269, 329, 0, Qt.MidButton)
-    clickButton(waitForObject(":qnet.Statistics_QToolButton_2"))
-
-    # Create a point on I26586032RDR on smaller crater below large crater in view
-    snooze(0.5)
-    nativeMouseClick(waitForObject(":Isis::ViewportMdiSubWindow - I26586032RDR.cub"), 350, 25, Qt.NoModifier, Qt.LeftButton)
-    snooze(0.5)
-
-    mouseClick(waitForObject(":Isis::CubeViewport - I26586032RDR.cub"), 270, 335, Qt.NoModifier, Qt.RightButton)
-
-    # Name the new point "grnd2"
-    mouseClick(waitForObject(":Point ID:_QLineEdit_2"), 55, 6, 0, Qt.LeftButton)
-    type(waitForObject(":Point ID:_QLineEdit_2"), "grnd2")
-    clickButton(waitForObject(":Create New ControlPoint.OK_QPushButton"))
-
-    # Switch right measure to "I26586032RDR", adjust and save.
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 298, 9, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I26586032RDR\\.cub"), 286, 6, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":VP2"), 149, 153, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-
-    # Switch right measure to "I18337016RDR", find and save
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 314, 11, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I18337016RDR\\.cub"), 310, 4, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-
-    # Switch right measure to "I19273007RDR", find and save
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 218, 11, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I19273007RDR\\.cub"), 209, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Control Point.PointType:_QComboBox"), 19, 9, 0, Qt.LeftButton)
-
-    # Change CP type to constrained, save, verify apriori text fields are correct
-    mouseClick(waitForObjectItem(":Control Point.PointType:_QComboBox", "Constrained"), 33, 3, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":VP2"), 158, 155, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    waitFor("object.exists(':Control Point.Apriori Latitude QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Latitude QLabel").text, "Apriori Latitude:  14.7617")
-    waitFor("object.exists(':Control Point.Apriori Longitude QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Longitude QLabel").text, "Apriori Longitude:  300.416")
-    waitFor("object.exists(':Control Point.Apriori Radius QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Radius QLabel").text, "Apriori Radius:  3393992.75 <meters>")
-    waitFor("object.exists(':Control Point.Apriori Latitude Sigma QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Latitude Sigma QLabel").text, "Apriori Latitude Sigma:  Null")
-    waitFor("object.exists(':Control Point.Apriori Longitude Sigma QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Longitude Sigma QLabel").text, "Apriori Longitude Sigma:  Null")
-    waitFor("object.exists(':Control Point.Apriori Radius Sigma QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Radius Sigma QLabel").text, "Apriori Radius Sigma:  Null")
-
-    # Switch navigator back from cubes to points
-    mouseClick(waitForObject(":Control Network Navigator_QComboBox"), 203, 12, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Control Network Navigator_QComboBox", "Points"), 192, 3, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "grnd1")
-
-    # Highlight grnd1
-    clickItem(":Navigator_List", "grnd1", 60, 4, 67108864, Qt.LeftButton)
-
-    # Set apriori/sigmas on grnd1
-    clickButton(waitForObject(":Control Network Navigator.Set Apriori/Sigmas_QPushButton"))
-    waitForObjectItem(":EditLocked Points.editLockPointsListBox_QListWidget_2", "grnd1")
-    clickItem(":EditLocked Points.editLockPointsListBox_QListWidget_2", "grnd1", 7, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":latSigmaEdit_QLineEdit_2"), 46, 17, 0, Qt.LeftButton)
-    type(waitForObject(":latSigmaEdit_QLineEdit_2"), "100")
-    mouseClick(waitForObject(":lonSigmaEdit_QLineEdit_2"), 20, 5, 0, Qt.LeftButton)
-    type(waitForObject(":lonSigmaEdit_QLineEdit_2"), "200")
-    mouseClick(waitForObject(":radiusSigmaEdit_QLineEdit_2"), 32, 5, 0, Qt.LeftButton)
-    type(waitForObject(":radiusSigmaEdit_QLineEdit_2"), "300")
-    clickButton(waitForObject(":Set Apriori Point and Constraints.Set Apriori_QPushButton_2"))
-    clickButton(waitForObject(":Set Apriori Point and Constraints.Close_QPushButton_2"))
-
-    # Open "grnd1" (grnd2 was open)
-    waitForObjectItem(":Navigator_List", "grnd1")
-    clickItem(":Navigator_List", "grnd1", 32, 3, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "grnd1")
-    doubleClickItem(":Navigator_List", "grnd1", 32, 7, 0, Qt.LeftButton)
-
-    # Verify apriori values are correct
-    waitFor("object.exists(':Control Point.Apriori Latitude QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Latitude QLabel").text, "Apriori Latitude:  14.9882")
-    waitFor("object.exists(':Control Point.Apriori Longitude QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Longitude QLabel").text, "Apriori Longitude:  300.317")
-    waitFor("object.exists(':Control Point.Apriori Radius QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Radius QLabel").text, "Apriori Radius:  3393365.40 <meters>")
-    waitFor("object.exists(':Control Point.Apriori Latitude Sigma QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Latitude Sigma QLabel").text, "Apriori Latitude Sigma:  100 <meters>")
-    waitFor("object.exists(':Control Point.Apriori Longitude Sigma QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Longitude Sigma QLabel").text, "Apriori Longitude Sigma:  200 <meters>")
-    waitFor("object.exists(':Control Point.Apriori Radius Sigma QLabel')", 20000)
-    test.compare(findObject(":Control Point.Apriori Radius Sigma QLabel").text, "Apriori Radius Sigma:  300 <meters>")
-
-    # Re-open "grnd2"
-    waitForObjectItem(":Navigator_List", "grnd2")
-    doubleClickItem(":Navigator_List", "grnd2", 35, 7, 0, Qt.LeftButton)
-
-    # Edit lock "grnd2" and save
-    clickButton(waitForObject(":Control Point.Edit Lock Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    waitForObjectItem(":Navigator_List", "grnd1")
-
-    # Highlight "grnd1" in navigator and ignore, expect edit locked error
-    clickItem(":Navigator_List", "grnd1", 29, 1, 67108864, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Ignore Points_QPushButton"))
-    clickButton(waitForObject(":Control Network Navigator - Ignore Points.Yes_QPushButton"))
-    clickButton(waitForObject(":EditLocked Points.OK_QPushButton"))
-
-    # Highlight "grnd2" in navigator and open
-    waitForObjectItem(":Navigator_List", "grnd2")
-    clickItem(":Navigator_List", "grnd2", 25, 7, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "grnd2")
-    doubleClickItem(":Navigator_List", "grnd2", 25, 7, 0, Qt.LeftButton)
-
-    # Ignore point, expect error due to being edit locked
-    clickButton(waitForObject(":Control Point.Ignore Point_QCheckBox"))
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-
-    # Undo edit lock, save, ignore, save
-    clickButton(waitForObject(":Control Point.Edit Lock Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":Control Point.Ignore Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":Control Network Navigator_QToolButton"))
-    clickButton(waitForObject(":Control Network Navigator_QToolButton"))
-
-    # In navigator, go to point properties filter
-    clickTab(waitForObject(":Control Network Navigator.qt_tabwidget_tabbar_QTabBar"), "Point Properties")
-
-    # Filter by ignored
-    mouseClick(waitForObject(":Filter by Point Type(s)_QGroupBox"), 11, 5, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Filter by Ignore Status_QGroupBox"), 18, 2, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Filter_QPushButton"))
-
-    # Verify both grnd1 and grnd2 still listed
-    waitFor("object.exists(':grnd1_QModelIndex')", 20000)
-    test.compare(findObject(":grnd1_QModelIndex").text, "grnd1")
-    waitFor("object.exists(':grnd2_QModelIndex')", 20000)
-    test.compare(findObject(":grnd2_QModelIndex").text, "grnd2")
-    waitForObjectItem(":Navigator_List", "grnd1")
-
-    # Open "grnd1" and edit lock/save
-    doubleClickItem(":Navigator_List", "grnd1", 9, 6, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Point.Edit Lock Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-
-    # Filter by edit locked in navigator, verify only grnd1 listed
-    mouseClick(waitForObject(":Filter by Ignore Status_QGroupBox"), 14, 5, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Filter by Edit Lock Status_QGroupBox"), 14, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Filter_QPushButton"))
-    waitFor("object.exists(':grnd1_QModelIndex')", 20000)
-    test.compare(findObject(":grnd1_QModelIndex").text, "grnd1")
-    waitFor("object.exists(':Navigator_List')", 20000)
-    test.compare(findObject(":Navigator_List").count, 1)
-    
-    # Save resulting network
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Save Control Network As..."))
-    clickButton(waitForObject(":Choose filename to save under.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_3"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "src/qisis/tsts/SquishTests/output/GroundNetworkFromScratch.net")
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "<Return>")
-    
-    # Exit 
-    activateItem(waitForObjectItem(":qnet_QMenuBar_2", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-    snooze(1)
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Ground Without Radius Source/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Ground Without Radius Source/test.py
deleted file mode 100644
index d66b73a444485a02d73d97d8822a86232efcb303..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Ground Without Radius Source/test.py	
+++ /dev/null
@@ -1,149 +0,0 @@
-import os
-import re
-
-def main():
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'GroundWithoutRadiusSourceOutput.net')
-    except Exception:
-        pass
-    
-    startApplication("qnet")
-    
-    # Open cube list
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/Ground/Extracted_AllOverlaps.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    # Open control net
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_7"), 38, 13, 0, Qt.LeftButton)
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "Mini\\.net")
-    doubleClickItem(":stackedWidget.treeView_QTreeView_2", "Mini\\.net", 58, 5, 0, Qt.LeftButton)
-    
-    # Open ground source file
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    clickButton(waitForObject(":Open ground source.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "src/qisis/tsts/SquishTests/input/Ground/Shade_Mola_Radius.cub")
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "<Return>")
-    waitForObjectItem(":Navigator_List", "I01812006RDR\\_bndry\\_6\\_LUPA")
-    doubleClickItem(":Navigator_List", "I01812006RDR\\_bndry\\_6\\_LUPA", 109, 2, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":QnetToolScroll.Right Measure_QGroupBox"), 161, 15, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 148, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Left Measure.Edit Lock Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.OK_QPushButton"))
-    clickButton(waitForObject(":Right Measure.Edit Lock Measure_QCheckBox"))
-    scrollTo(waitForObject(":QnetToolScroll_QScrollBar"), 598)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.OK_QPushButton"))
-
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":VP2"), 164, 160, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.No_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 145, 5, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 145, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Add Measure(s) to Point_QPushButton"))
-    clickButton(waitForObject(":Add Measures to ControlPoint.OK_QPushButton"))
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 364, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "f684a63\\.lev1\\_slo\\.cub"), 259, 4, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 106, 14, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I02536005RDR\\.cub"), 88, 6, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 250, 0, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I01812006RDR\\.cub"), 195, 2, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.No_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":VP2"), 139, 152, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    sendEvent("QMouseEvent", waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"), QEvent.MouseButtonPress, 55, 10, Qt.LeftButton, 1, 0)
-    sendEvent("QMouseEvent", waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"), QEvent.MouseButtonRelease, 111, 12, Qt.LeftButton, 0, 0)
-    clickButton(waitForObject(":Qnet Tool Save Measure.No_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    sendEvent("QCloseEvent", waitForObject(":Qnet Tool"))
-    sendEvent("QCloseEvent", waitForObject(":_QMainWindow"))
-    mouseClick(waitForObject(":Control Network Navigator_QComboBox"), 105, 17, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Control Network Navigator_QComboBox", "Cubes"), 60, 5, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "I18337016RDR\\.cub")
-    clickItem(":Navigator_List", "I18337016RDR\\.cub", 120, 4, 0, Qt.LeftButton)
-    sendEvent("QWheelEvent", waitForObject(":Navigator_List"), 117, 169, -120, 0, 2)
-    sendEvent("QWheelEvent", waitForObject(":Navigator_List"), 115, 168, -120, 0, 2)
-    sendEvent("QWheelEvent", waitForObject(":Navigator_List"), 115, 168, -120, 0, 2)
-    sendEvent("QWheelEvent", waitForObject(":Navigator_List"), 114, 168, -120, 0, 2)
-    sendEvent("QWheelEvent", waitForObject(":Navigator_List"), 114, 167, -120, 0, 2)
-    waitForObjectItem(":Navigator_List", "I27759024RDR\\.cub")
-    doubleClickItem(":Navigator_List", "I27759024RDR\\.cub", 100, 6, 0, Qt.LeftButton)
-    sendEvent("QMoveEvent", waitForObject(":Navigator"), 780, 792, 1226, 808)
-    waitForObjectItem(":Navigator_List", "I26012038RDR\\.cub")
-    doubleClickItem(":Navigator_List", "I26012038RDR\\.cub", 80, 9, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "I18337016RDR\\.cub")
-    doubleClickItem(":Navigator_List", "I18337016RDR\\.cub", 92, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":qnet.viewport_QWidget_4"), 254, 251, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 163, 6, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I26586032RDR\\.cub"), 83, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    sendEvent("QCloseEvent", waitForObject(":Qnet Tool"))
-    mouseClick(waitForObject(":qnet.viewport_QWidget_4"), 248, 316, 0, Qt.MidButton)
-    clickButton(waitForObject(":Delete ControlPoint.Delete ControlPoint_QCheckBox"))
-    clickButton(waitForObject(":Delete ControlPoint.OK_QPushButton"))
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_4"), QEvent.MouseButtonPress, 251, 323, Qt.MidButton, 4, 0)
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_4"), QEvent.MouseButtonRelease, 251, 323, Qt.MidButton, 0, 0)
-    
-    listItemI18337016RDR= re.sub("([._ ])", "\\\\\\1", os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/input/Ground/Extracted_AllOverlaps/I18337016RDR.cub'))
-    listItemI06281019RDR= re.sub("([._ ])", "\\\\\\1", os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/input/Ground/Extracted_AllOverlaps/I06281019RDR.cub'))
-    
-    waitForObjectItem(":Delete ControlPoint.fileList_QListWidget",  listItemI18337016RDR)
-    clickItem(":Delete ControlPoint.fileList_QListWidget", listItemI18337016RDR, 147, 8, 0, Qt.LeftButton)
-    type(waitForObject(":Delete ControlPoint.fileList_QListWidget"), "<Control>")
-    waitForObjectItem(":Delete ControlPoint.fileList_QListWidget", listItemI06281019RDR)
-    clickItem(":Delete ControlPoint.fileList_QListWidget", listItemI06281019RDR, 135, 9, 67108864, Qt.LeftButton)
-    clickButton(waitForObject(":Delete ControlPoint.OK_QPushButton"))
-    clickButton(waitForObject(":Delete Reference measure?.Yes_QPushButton"))
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-    
-    # Save resulting network
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Save Control Network As..."))
-    clickButton(waitForObject(":Choose filename to save under.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_3"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "src/qisis/tsts/SquishTests/output/GroundWithoutRadiusSourceOutput.net")
-    snooze(1)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "<Return>")
-
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-    snooze(1)
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/test.py
deleted file mode 100644
index ae4c9e01eeb4b90335427e7f09b625a06ea18085..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/test.py	
+++ /dev/null
@@ -1,62 +0,0 @@
-import os
-
-# This tests using multiple ground source files in qnet. 
-
-def main():
-    
-    startApplication("qnet")
-
-    # Open sub.lis    
-    clickButton(waitForObject(":qnet.Open control network  cube list_QToolButton"))
-    clickButton(waitForObject(":Select a list of cubes.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "src/qisis/tsts/SquishTests/input/qnetMultipleGroundSource/sub.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    #  Open sub.net
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_2", "sub\\.net")
-    clickItem(":stackedWidget.treeView_QTreeView_2", "sub\\.net", 45, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Select a control network.Open_QPushButton"))
-    #  Edit Point h1104_0000_2
-    waitForObjectItem(":Navigator_List", "h1104\\_0000\\_2")
-    clickItem(":Navigator_List", "h1104\\_0000\\_2", 45, 10, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Modify Point_QPushButton"))
-    #  Open correct ground source for pt 1104  (f637a69.lev1.slo.cub)
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    mouseClick(waitForObject(":Open ground source.lookInCombo_QComboBox"), 257, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Open ground source.lookInCombo_QComboBox", "/tmp/Work/qnet\\_1491\\_1493\\_1655/isis/src/qisis/tsts/SquishTests/input/qnetMultipleGroundSource"), 195, 0, 0, Qt.LeftButton)
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_3", "f637a69\\.lev1\\_slo\\.cub")
-    clickItem(":stackedWidget.treeView_QTreeView_3", "f637a69\\.lev1\\_slo\\.cub", 76, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Open ground source.Open_QPushButton"))
-    #  Now edit pt h5125_0000_1, which does not exist on current ground source
-    waitForObjectItem(":Navigator_List", "h5125\\_0000\\_1")
-    clickItem(":Navigator_List", "h5125\\_0000\\_1", 50, 4, 0, Qt.LeftButton)
-    sendEvent("QMouseEvent", waitForObject(":Control Network Navigator.Modify Point_QPushButton"), QEvent.MouseButtonPress, 46, 7, Qt.LeftButton, 1, 0)
-    sendEvent("QMouseEvent", waitForObject(":Control Network Navigator.Modify Point_QPushButton"), QEvent.MouseButtonRelease, 46, 6, Qt.LeftButton, 0, 0)
-    #  Test for warning message
-    test.vp("VP1")
-    clickButton(waitForObject(":Warning.OK_QPushButton"))
-    #  Now re-open pt h1104, close ground source window and screen shot right measure to make sure ground source measure closed
-    waitForObjectItem(":Navigator_List", "h1104\\_0000\\_2")
-    clickItem(":Navigator_List", "h1104\\_0000\\_2", 29, 6, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Modify Point_QPushButton"))
-    mouseClick(waitForObject(":qnet.f637a69.lev1_slo.cub @ 41.196% (Gray = 1)_Isis::ViewportMdiSubWindow"), 522, 20, 0, Qt.LeftButton)
-    test.vp("VP2")
-    #  Open pt h5125, and appropriate ground source and screen shot of right measure 
-    waitForObjectItem(":Navigator_List", "h5125\\_0000\\_1")
-    clickItem(":Navigator_List", "h5125\\_0000\\_1", 24, 8, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Control Network Navigator.Modify Point_QPushButton"))
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open Ground Source"))
-    mouseClick(waitForObject(":Open ground source.lookInCombo_QComboBox"), 276, 9, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Open ground source.lookInCombo_QComboBox", "/tmp/Work/qnet\\_1491\\_1493\\_1655/isis/src/qisis/tsts/SquishTests/input/qnetMultipleGroundSource"), 224, 6, 0, Qt.LeftButton)
-    waitForObjectItem(":stackedWidget.treeView_QTreeView_3", "f637a22\\.lev1\\_slo\\.cub")
-    clickItem(":stackedWidget.treeView_QTreeView_3", "f637a22\\.lev1\\_slo\\.cub", 57, 6, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Open ground source.Open_QPushButton"))
-    test.vp("VP3")
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP1 b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP1
deleted file mode 100644
index fb1be5ad4f74e884fd5be8b3c30c1916f7512f94..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP1	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":Warning.This point does not exist on the ground source." type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP2 b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP2
deleted file mode 100644
index 467cb47c82bcbc5dfb005d2149ed065269a82eeb..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP2	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":VP2" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP3 b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP3
deleted file mode 100644
index d7df1e1eac7ae4bf18bebcb918aff5a614c8a6c2..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Multiple Ground Sources/verificationPoints/VP3	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":VP2" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Network from Scratch/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Network from Scratch/test.py
deleted file mode 100644
index 2ca96c67285f045f1ecb3627c232cd839e9fa76b..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qnet/tst_Network from Scratch/test.py	
+++ /dev/null
@@ -1,217 +0,0 @@
-import os
-
-def main():
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-    try:
-        os.unlink(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output/') + 'NetworkFromScratch.net')
-    except Exception:
-        pass
-    
-    startApplication("qnet")
-    
-    # Open cube list
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Open control network and cube list"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/Ground/Extracted_AllOverlaps.lis")
-    type(waitForObject(":_QListView"), "<Return>")
-
-    clickButton(waitForObject(":Select a control network.Cancel_QPushButton"))
-    
-    mouseClick(waitForObject(":Control Network Navigator_QComboBox"), 105, 0, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Control Network Navigator_QComboBox", "Cubes"), 55, 6, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "I01113006RDR\\.cub")
-    doubleClickItem(":Navigator_List", "I01113006RDR\\.cub", 81, 8, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "I01812006RDR\\.cub")
-    doubleClickItem(":Navigator_List", "I01812006RDR\\.cub", 59, 12, 0, Qt.LeftButton)
-    waitForObjectItem(":Navigator_List", "I02174006RDR\\.cub")
-    doubleClickItem(":Navigator_List", "I02174006RDR\\.cub", 53, 9, 0, Qt.LeftButton)
-    
-    
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_2"), QEvent.MouseButtonPress, 245, 245, Qt.MidButton, 4, 0)
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_3"), QEvent.MouseButtonRelease, 245, 245, Qt.MidButton, 0, 0)
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-
-    mouseClick(waitForObject(":qnet.viewport_QWidget_2"), 270, 207, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Warning.OK_QPushButton"))
-    
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_3"), QEvent.MouseButtonPress, 256, 306, Qt.RightButton, 4, 0)
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_3"), QEvent.MouseButtonRelease, 256, 306, Qt.RightButton, 0, 0)
-    type(waitForObject(":Point ID:_QLineEdit_2"), "Point_001")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Return>")
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 98, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I02174006RDR\\.cub"), 105, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":VP2"), 42, 129, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Left Measure.Edit Lock Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 102, 6, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I06281019RDR\\.cub"), 50, 7, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.OK_QPushButton"))
-    clickButton(waitForObject(":Right Measure.Ignore Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":QnetToolScroll.Right Measure_QGroupBox"), 92, 47, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 81, 12, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I08528020RDR\\.cub"), 54, 6, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 197, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I09439017RDR\\.cub"), 93, 3, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.OK_QPushButton"))
-    clickButton(waitForObject(":Right Measure.Ignore Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 97, 12, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I17426045RDR\\.cub"), 66, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 106, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I27759024RDR\\.cub"), 57, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Find_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 99, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":QnetToolScroll.Left Measure_QGroupBox"), 362, 48, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 333, 15, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I06281019RDR\\.cub"), 212, 8, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 75, 1, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I17426045RDR\\.cub"), 47, 4, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    sendEvent("QMouseEvent", waitForObject(":Left Measure.Edit Lock Measure_QCheckBox"), QEvent.MouseButtonPress, 307, 0, Qt.LeftButton, 1, 0)
-    sendEvent("QMouseEvent", waitForObject(":Left Measure.Edit Lock Measure_QCheckBox"), QEvent.MouseButtonRelease, 307, 0, Qt.LeftButton, 0, 0)
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 325, 8, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I17426045RDR\\.cub"), 113, 10, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Right Measure.Edit Lock Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 123, 11, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I09439017RDR\\.cub"), 91, 4, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Right Measure.Edit Lock Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    mouseClick(waitForObject(":VP2"), 144, 147, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.No_QPushButton"))
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 330, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I09439017RDR\\.cub"), 196, 4, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    mouseClick(waitForObject(":VP2"), 163, 152, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 101, 7, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I08528020RDR\\.cub"), 93, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Right Measure.Edit Lock Measure_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    type(waitForObject(":VP2"), "<Down>")
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":Control Point.Ignore Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 66, 10, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I02174006RDR\\.cub"), 59, 1, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Register_QPushButton"))
-    clickButton(waitForObject(":Error.OK_QPushButton"))
-    mouseClick(waitForObject(":VP2"), 155, 144, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.Yes_QPushButton"))
-    clickButton(waitForObject(":Control Point.Ignore Point_QCheckBox"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.No_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Measure_QPushButton"))
-    clickButton(waitForObject(":Qnet Tool Save Measure.No_QPushButton"))
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 384, 9, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I06281019RDR\\.cub"), 261, 10, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Left Measure_QComboBox"), 292, 4, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Left Measure_QComboBox", "I02174006RDR\\.cub"), 238, 6, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":Right Measure_QComboBox"), 207, 11, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Right Measure_QComboBox", "I02174006RDR\\.cub"), 136, 6, 0, Qt.LeftButton)
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_3"), QEvent.MouseButtonPress, 251, 292, Qt.RightButton, 4, 0)
-    sendEvent("QMouseEvent", waitForObject(":qnet.viewport_QWidget_3"), QEvent.MouseButtonRelease, 251, 292, Qt.RightButton, 0, 0)
-    
-    
-    mouseClick(waitForObject(":Point ID:_QLineEdit_2"), 2, 6, 0, Qt.LeftButton)
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Delete>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "2")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Backspace>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "1")
-    
-    #clickButton(waitForObject(":Create New ControlPoint.OK_QPushButton"))
-    #clickButton(waitForObject(":New Point Id.OK_QPushButton"))
-    
-    mouseClick(waitForObject(":Point ID:_QLineEdit_2"), 2, 6, 0, Qt.LeftButton)
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Delete>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "2")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Backspace>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "1")
-    
-    #clickButton(waitForObject(":Create New ControlPoint.OK_QPushButton"))
-    #clickButton(waitForObject(":New Point Id.OK_QPushButton"))
-    
-    mouseClick(waitForObject(":Point ID:_QLineEdit_2"), 2, 6, 0, Qt.LeftButton)
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Right>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "<Delete>")
-    type(waitForObject(":Point ID:_QLineEdit_2"), "2")
-    
-    clickButton(waitForObject(":Create New ControlPoint.OK_QPushButton"))
-    clickButton(waitForObject(":QnetToolScroll.Save Point_QPushButton"))
-    
-    # Save resulting network
-    activateItem(waitForObjectItem(":qnet_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Save Control Network As..."))
-    clickButton(waitForObject(":Choose filename to save under.toParentButton_QToolButton"))
-    snooze(0.5)
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_3"), 95, 13, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "src/qisis/tsts/SquishTests/output/NetworkFromScratch.net")
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit_3"), "<Return>")
-
-    activateItem(waitForObjectItem(":qnet_QMenuBar_2", "File"))
-    activateItem(waitForObjectItem(":qnet.File_QMenu", "Exit"))
-    snooze(1)
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/envvars b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/envvars
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/objects.map b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/objects.map
deleted file mode 100644
index 782794521bbd6e9d9961fb13035970526bbb3f9a..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/objects.map
+++ /dev/null
@@ -1,167 +0,0 @@
-:Active Tool.Apply_QPushButton	{text='Apply' type='QPushButton' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Font Color_QLabel	{text='Font Color' type='QLabel' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Font Color_QPushButton	{leftWidget=':Active Tool.Font Color_QLabel' type='QPushButton' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Font Size_QComboBox	{leftWidget=':Active Tool.Font Size_QLabel' type='QComboBox' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Font Size_QLabel	{text='Font Size' type='QLabel' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Ok_QPushButton	{text='Ok' type='QPushButton' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Show IAU approved only_QCheckBox	{leftWidget=':Active Tool.Show IAU approved only_QLabel' type='QCheckBox' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Show IAU approved only_QLabel	{text='Show IAU approved only' type='QLabel' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Show feature extents_QComboBox	{leftWidget=':Active Tool.Show feature extents_QLabel' type='QComboBox' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool.Show feature extents_QLabel	{text='Show feature extents' type='QLabel' unnamed='1' visible='1' window=':Active Tool_Isis::NomenclatureToolConfigDialog'}
-:Active Tool_Isis::NomenclatureToolConfigDialog	{aboveWidget=':qview.Active Tool_QToolBar' type='Isis::NomenclatureToolConfigDialog' unnamed='1' visible='1'}
-:Advanced Tracking_Isis::TableMainWindow	{name='Advanced Tracking' type='Isis::TableMainWindow' visible='0' windowTitle='Advanced Tracking'}
-:Basic colors_QWellArray	{buddy=':Select Color.Basic colors_QLabel' type='QWellArray' unnamed='1' visible='1'}
-:Blink Comparator_QDialog	{type='QDialog' unnamed='1' visible='0' windowTitle='Blink Comparator'}
-:Configure DN Values - EN0210454090M+1.Color: _QLabel	{text='Color: ' type='QLabel' unnamed='1' visible='1' window=':Configure DN Values - EN0210454090M+1_Isis::CubePlotCurveConfigureDialog'}
-:Configure DN Values - EN0210454090M+1.Color: _QPushButton	{leftWidget=':Configure DN Values - EN0210454090M+1.Color: _QLabel' type='QPushButton' unnamed='1' visible='1' window=':Configure DN Values - EN0210454090M+1_Isis::CubePlotCurveConfigureDialog'}
-:Configure DN Values - EN0210454090M+1.Ok_QPushButton	{text='Ok' type='QPushButton' unnamed='1' visible='1' window=':Configure DN Values - EN0210454090M+1_Isis::CubePlotCurveConfigureDialog'}
-:Configure DN Values - EN0210454090M+1_Isis::CubePlotCurveConfigureDialog	{type='Isis::CubePlotCurveConfigureDialog' unnamed='1' visible='1' windowTitle='Configure DN Values - EN0210454090M+1'}
-:Configure Scatter Plot.Cancel_QPushButton	{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Configure Scatter Plot_Isis::ScatterPlotConfigDialog'}
-:Configure Scatter Plot_Isis::ScatterPlotConfigDialog	{type='Isis::ScatterPlotConfigDialog' unnamed='1' visible='1' windowTitle='Configure Scatter Plot'}
-:Display Mode.Show Pixel Values_QRadioButton	{container=':Visual Display.Display Mode_QGroupBox' text='Show Pixel Values' type='QRadioButton' unnamed='1' visible='1'}
-:Elevation Calculator (via stereo pairs).Options_QMenu	{title='Options' type='QMenu' unnamed='1' visible='0' window=':Elevation Calculator (via stereo pairs)_QMainWindow'}
-:Elevation Calculator (via stereo pairs)_QMainWindow	{type='QMainWindow' unnamed='1' visible='0' windowTitle='Elevation Calculator (via stereo pairs)'}
-:File.&Browse..._QAction	{container=':qview.File_QMenu' text='&Browse...' type='QAction' unnamed='1' visible='true'}
-:File.&Close All..._QAction	{container=':qview.File_QMenu' text='&Close All...' type='QAction' unnamed='1' visible='true'}
-:File.&Open..._QAction	{container=':qview.File_QMenu' text='&Open...' type='QAction' unnamed='1' visible='true'}
-:File.&Print..._QAction	{container=':qview.File_QMenu' text='&Print...' type='QAction' unnamed='1' visible='true'}
-:File.&Save_QAction	{container=':qview.File_QMenu' text='&Save' type='QAction' unnamed='1' visible='true'}
-:File.E&xit_QAction	{container=':qview.File_QMenu' text='E&xit' type='QAction' unnamed='1' visible='true'}
-:File.Export View_QAction	{container=':qview.File_QMenu' text='Export View' type='QAction' unnamed='1' visible='true'}
-:File.Save &As..._QAction	{container=':qview.File_QMenu' text='Save &As...' type='QAction' unnamed='1' visible='true'}
-:File.Save &Info..._QAction	{container=':qview.File_QMenu' text='Save &Info...' type='QAction' unnamed='1' visible='true'}
-:Find Latitude/Longitude Coordinate_QDialog	{type='QDialog' unnamed='1' visible='0' windowTitle='Find Latitude/Longitude Coordinate'}
-:Measurements_Isis::TableMainWindow	{name='Measurements' type='Isis::TableMainWindow' visible='0' windowTitle='Measurements'}
-:Nomenclature Disclaimer.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Nomenclature Disclaimer_QMessageBox'}
-:Nomenclature Disclaimer.The nomenclature qview tool will label named features in your opened cube files. This tool <strong>requires</strong> an active internet connection, projection or camera information, and a calculatable ground range to function. The larger the ground range (covered area on a planet), the longer it will take to populate the nomenclature for a particular cube.<br/><br/><font color='red'>**WARNING**</font> The accuracy of this tool is not perfect, features <strong>can and will be mislabeled</strong> if you have not properly controlled your images to the control network that identifies the latitude/longitude values of a feature. Please use the nomenclature website to verify a label is correct for a feature. <br/><br/>See the IAU Gazetteer of Planetary Nomenclature website for more information.<br/><a href='http://planetarynames.wr.usgs.gov/'>http://planetarynames.wr.usgs.gov/</a>_QLabel	{name='qt_msgbox_label' text='The nomenclature qview tool will label named features in your opened cube files. This tool <strong>requires</strong> an active internet connection, projection or camera information, and a calculatable ground range to function. The larger the ground range (covered area on a planet), the longer it will take to populate the nomenclature for a particular cube.<br/><br/><font color=\\'red\\'>**WARNING**</font> The accuracy of this tool is not perfect, features <strong>can and will be mislabeled</strong> if you have not properly controlled your images to the control network that identifies the latitude/longitude values of a feature. Please use the nomenclature website to verify a label is correct for a feature. <br/><br/>See the IAU Gazetteer of Planetary Nomenclature website for more information.<br/><a href=\\'http://planetarynames.wr.usgs.gov/\\'>http://planetarynames.wr.usgs.gov/</a>' type='QLabel' visible='1' window=':Nomenclature Disclaimer_QMessageBox'}
-:Nomenclature Disclaimer_QMessageBox	{type='QMessageBox' unnamed='1' visible='1' windowTitle='Nomenclature Disclaimer'}
-:Open.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Open_Isis::FileDialog'}
-:Open.Open_QPushButton	{text='Open' type='QPushButton' unnamed='1' visible='1' window=':Open_Isis::FileDialog'}
-:Open.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Open_Isis::FileDialog'}
-:Open_Isis::FileDialog	{name='QFileDialog' type='Isis::FileDialog' visible='1' windowTitle='Open'}
-:Options.&Blink ..._QAction	{container=':qview.Options_QMenu' text='&Blink ...' type='QAction' unnamed='1' visible='true'}
-:Options.&Find Point_QAction	{container=':qview.Options_QMenu' text='&Find Point' type='QAction' unnamed='1' visible='true'}
-:Options.&Special Pixel Tool ..._QAction	{container=':qview.Options_QMenu' text='&Special Pixel Tool ...' type='QAction' unnamed='1' visible='true'}
-:Options.Measuring ..._QAction	{container=':qview.Options_QMenu' text='Measuring ...' type='QAction' unnamed='1' visible='true'}
-:Options.Registration_QMenu	{title='Registration' type='QMenu' unnamed='1' visible='0' window=':Elevation Calculator (via stereo pairs).Options_QMenu'}
-:Options.Show Nomenclature_QAction	{container=':qview.Options_QMenu' text='Show Nomenclature' type='QAction' unnamed='1' visible='true'}
-:Options.Tracking ..._QAction	{container=':qview.Options_QMenu' text='Tracking ...' type='QAction' unnamed='1' visible='true'}
-:ProgressDialog	{type='QProgressDialog'}
-:QwtLegendView_QwtLegendItem	{container=':Spatial Plot.QwtLegendView_QScrollArea' type='QwtLegendItem' unnamed='1' visible='1'}
-:Save As.Export As Is_QRadioButton	{text='Export As Is' type='QRadioButton' unnamed='1' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As.Export Full Res_QRadioButton	{text='Export Full Res' type='QRadioButton' unnamed='1' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As.File name:_QLabel	{name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As.Save_QPushButton	{text='Save' type='QPushButton' unnamed='1' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As.fileTypeCombo_QComboBox	{name='fileTypeCombo' type='QComboBox' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As.splitter_QSplitter	{name='splitter' type='QSplitter' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As.toParentButton_QToolButton	{name='toParentButton' type='QToolButton' visible='1' window=':Save As_Isis::SaveAsDialog'}
-:Save As_Isis::SaveAsDialog	{name='QFileDialog' type='Isis::SaveAsDialog' visible='1' windowTitle='Save As'}
-:Select Color.Basic colors_QColorPicker	{leftWidget=':Basic colors_QWellArray' type='QColorPicker' unnamed='1' visible='1' window=':Select Color_QColorDialog'}
-:Select Color.Basic colors_QLabel	{text='Basic colors' type='QLabel' unnamed='1' visible='1' window=':Select Color_QColorDialog'}
-:Select Color.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Select Color_QColorDialog'}
-:Select Color_QColorDialog	{type='QColorDialog' unnamed='1' visible='1' windowTitle='Select Color'}
-:Spatial Plot.PlotWindow_QToolBar	{name='PlotWindow' type='QToolBar' visible='1' window=':Spatial Plot_Isis::PlotWindow'}
-:Spatial Plot.QwtLegendView_QScrollArea	{name='QwtLegendView' type='QScrollArea' visible='1' window=':Spatial Plot_Isis::PlotWindow'}
-:Spatial Plot.QwtPlotCanvas_QwtPlotCanvas	{name='QwtPlotCanvas' type='QwtPlotCanvas' visible='1' window=':Spatial Plot_Isis::PlotWindow'}
-:Spatial Plot_Isis::PlotWindow	{name='Plot Window: Spatial Plot' type='Isis::PlotWindow' visible='1' windowTitle='Spatial Plot'}
-:Special Pixel Tool_QDialog	{type='QDialog' unnamed='1' visible='0' windowTitle='Special Pixel Tool'}
-:Statistics.Average_QLabel	{container=':Statistics.Statistics_QGroupBox' text~='Average.*' type='QLabel' unnamed='1' visible='1'}
-:Statistics.Hide Display_QCheckBox	{text='Hide Display' type='QCheckBox' unnamed='1' visible='1' window=':Statistics_QDialog'}
-:Statistics.Maximum_QLabel	{container=':Statistics.Statistics_QGroupBox' text~='Maximum.*' type='QLabel' unnamed='1' visible='1'}
-:Statistics.Minimum_QLabel	{container=':Statistics.Statistics_QGroupBox' text~='Minimum.*' type='QLabel' unnamed='1' visible='1'}
-:Statistics.Standard Dev_QLabel	{container=':Statistics.Statistics_QGroupBox' text~='Standard Dev.*' type='QLabel' unnamed='1' visible='1'}
-:Statistics.Statistics_QGroupBox	{title='Statistics' type='QGroupBox' unnamed='1' visible='1' window=':Statistics_QDialog'}
-:Statistics.Visual Display_QGroupBox	{title='Visual Display' type='QGroupBox' unnamed='1' visible='1' window=':Statistics_QDialog_2'}
-:Statistics.dnDisplay	{type='Isis::VisualDisplay'}
-:Statistics_QDialog	{type='QDialog' unnamed='1' windowTitle='Statistics'}
-:Statistics_QDialog_2	{type='QDialog' unnamed='1' visible='1' windowTitle='Statistics'}
-:Sun Shadow Measurements_Isis::TableMainWindow	{name='Sun Shadow Measurements' type='Isis::TableMainWindow' visible='0' windowTitle='Sun Shadow Measurements'}
-:View.&Actual Pixels_QAction	{container=':qview.View_QMenu' text='&Actual Pixels' type='QAction' unnamed='1' visible='true'}
-:View.&Fit in Window_QAction	{container=':qview.View_QMenu' text='&Fit in Window' type='QAction' unnamed='1' visible='true'}
-:View.&Pan Down_QAction	{container=':qview.View_QMenu' text='&Pan Down' type='QAction' unnamed='1' visible='true'}
-:View.&Pan Left_QAction	{container=':qview.View_QMenu' text='&Pan Left' type='QAction' unnamed='1' visible='true'}
-:View.&Pan Right_QAction	{container=':qview.View_QMenu' text='&Pan Right' type='QAction' unnamed='1' visible='true'}
-:View.&Pan Up_QAction	{container=':qview.View_QMenu' text='&Pan Up' type='QAction' unnamed='1' visible='true'}
-:View.Global Stretch_QAction	{container=':qview.View_QMenu' text='Global Stretch' type='QAction' unnamed='1' visible='true'}
-:View.Regional Stretch_QAction	{container=':qview.View_QMenu' text='Regional Stretch' type='QAction' unnamed='1' visible='true'}
-:View.Zoom In_QAction	{container=':qview.View_QMenu' text='Zoom In' type='QAction' unnamed='1' visible='true'}
-:View.Zoom Out_QAction	{container=':qview.View_QMenu' text='Zoom Out' type='QAction' unnamed='1' visible='true'}
-:Visual Display.Display Mode_QGroupBox	{container=':Statistics.Visual Display_QGroupBox' title='Display Mode' type='QGroupBox' unnamed='1' visible='1'}
-:Window.&Cascade_QAction	{container=':qview.Window_QMenu' text='&Cascade' type='QAction' unnamed='1' visible='true'}
-:Window.&Link All_QAction	{container=':qview.Window_QMenu' text='&Link All' type='QAction' unnamed='1' visible='true'}
-:Window.&Link_QAction	{container=':qview.Window_QMenu' text='&Link' type='QAction' unnamed='1' visible='true'}
-:Window.&Next_QAction	{container=':qview.Window_QMenu' text='&Next' type='QAction' unnamed='1' visible='true'}
-:Window.&Prev_QAction	{container=':qview.Window_QMenu' text='&Prev' type='QAction' unnamed='1' visible='true'}
-:Window.&Tile_QAction	{container=':qview.Window_QMenu' text='&Tile' type='QAction' unnamed='1' visible='true'}
-:Window.&Unlink All_QAction	{container=':qview.Window_QMenu' text='&Unlink All' type='QAction' unnamed='1' visible='true'}
-:Window.Change cursor to arrow._QAction	{container=':qview.Window_QMenu' text='Change cursor to arrow.' type='QAction' unnamed='1' visible='true'}
-:Window.Close All_QAction	{container=':qview.Window_QMenu' text='Close All' type='QAction' unnamed='1' visible='true'}
-:Window.Close_QAction	{container=':qview.Window_QMenu' text='Close' type='QAction' unnamed='1' visible='true'}
-:Window.Resize_QAction	{container=':qview.Window_QMenu' text='Resize' type='QAction' unnamed='1' visible='true'}
-:_Isis::AdvancedStretchDialog	{type='Isis::AdvancedStretchDialog' unnamed='1' visible='0'}
-:_Isis::NomenclatureToolConfigDialog	{type='Isis::NomenclatureToolConfigDialog' unnamed='1' visible='1'}
-:_QListView	{type='QListView' unnamed='1' visible='1'}
-:_QMenu	{type='QMenu' unnamed='1' visible='1'}
-:_QWebView	{type='QWebView' unnamed='1' visible='1'}
-:fileNameEdit_QLineEdit	{buddy=':Open.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:fileNameEdit_QLineEdit_2	{buddy=':Save As.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
-:frame.stackedWidget_QStackedWidget	{container=':splitter.frame_QFrame' name='stackedWidget' type='QStackedWidget' visible='1'}
-:frame.stackedWidget_QStackedWidget_2	{container=':splitter.frame_QFrame_2' name='stackedWidget' type='QStackedWidget' visible='1'}
-:nomenclatureToolButton	{toolTip='Nomenclature (N)' type='QToolButton' visible='true'}
-:qview.Active Tool_QToolBar	{name='Active' type='QToolBar' visible='1' window=':qview_Isis::ViewportMainWindow' windowTitle='Active Tool'}
-:qview.Disclaimer_QPushButton	{text='Disclaimer' type='QPushButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.File_QMenu	{title='File' type='QMenu' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview.Gray_QRadioButton	{text='Gray' type='QRadioButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.I26649003RDR.crop.tr.lev2.cub @ 275.556% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow' windowTitle='I26649003RDR.crop.tr.lev2.cub @ 275.556% (Gray = 1)'}
-:qview.Open_QToolButton	{text='Open' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.Options_QMenu	{title='Options' type='QMenu' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview.RGB_QRadioButton	{text='RGB' type='QRadioButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.Spatial Plot Tool_QToolButton	{text='Spatial Plot Tool' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.Spectral Plot Tool_QToolButton	{text='Spectral Plot Tool' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.Spectral Plot Tool_QToolButton_2	{aboveWidget=':qview.Spectral Plot Tool_QToolButton' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.Tool Options_QPushButton	{text='Tool Options' type='QPushButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.Tool Pad_Isis::ToolPad	{name='ViewportMainWindow' type='Isis::ToolPad' visible='1' window=':qview_Isis::ViewportMainWindow' windowTitle='Tool Pad'}
-:qview.Tracking_QToolButton	{text='Tracking' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.View_QMenu	{title='View' type='QMenu' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview.Window_QMenu	{title='Window' type='QMenu' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview.lub0388c.342.lev1.cub @ 129.167% (Gray = 1)_QMdiSubWindow	{type='QMdiSubWindow' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow' windowTitle='lub0388c.342.lev1.cub @ 129.167% (Gray = 1)'}
-:qview.nomenclatureQueryProgress	{name='nomenclatureQueryProgress' type='QProgressBar' window=':qview_Isis::ViewportMainWindow'}
-:qview.saveAsFullImage.cub @ 137.778% (Gray = 1)_Isis::ViewportMdiSubWindow	{type='Isis::ViewportMdiSubWindow' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow' windowTitle='saveAsFullImage.cub @ 137.778% (Gray = 1)'}
-:qview.to All Viewports_QStackedWidget	{leftWidget=':qview.to All Viewports_QToolButton' type='QStackedWidget' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview.to All Viewports_QToolButton	{text='to All Viewports' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_Isis::MdiCubeViewport	{occurrence='3' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_Isis::MdiCubeViewport_2	{occurrence='2' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_Isis::ViewportMainWindow	{name='MainWindow' type='Isis::ViewportMainWindow' visible='1' windowTitle='qview'}
-:qview_QComboBox	{type='QComboBox' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_QLabel	{occurrence='12' type='QLabel' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview_QLabel_2	{occurrence='13' type='QLabel' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview_QLabel_3	{occurrence='14' type='QLabel' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview_QLineEdit	{occurrence='2' type='QLineEdit' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_QMenuBar	{type='QMenuBar' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_QSpinBox	{type='QSpinBox' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview_QSpinBox_2	{occurrence='2' type='QSpinBox' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview_QSpinBox_3	{occurrence='3' type='QSpinBox' unnamed='1' visible='0' window=':qview_Isis::ViewportMainWindow'}
-:qview_QStackedWidget	{type='QStackedWidget' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_QStackedWidget_2	{occurrence='3' type='QStackedWidget' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_QToolButton	{occurrence='19' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_QWidget	{occurrence='2' type='QWidget' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_bandToolButton	{toolTip='Band Selection (B)' type='QToolButton' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:qview_statisticsToolButton	{toolTip='Statistics' type='QToolButton' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:splitter.frame_QFrame	{container=':Open.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.frame_QFrame_2	{container=':Save As.splitter_QSplitter' name='frame' type='QFrame' visible='1'}
-:splitter.sidebar_QSidebar	{container=':Open.splitter_QSplitter' name='sidebar' type='QSidebar' visible='1'}
-:stackedWidget.treeView_QTreeView	{container=':frame.stackedWidget_QStackedWidget' name='treeView' type='QTreeView' visible='1'}
-:stackedWidget.treeView_QTreeView_2	{container=':frame.stackedWidget_QStackedWidget_2' name='treeView' type='QTreeView' visible='1'}
-:viewport1	{occurrence='1' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport1_contents	{name='viewport' type='QWidget' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport1_progress	{parent=':viewport1' type='QProgressBar'}
-:viewport2	{occurrence='2' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport2_contents	{name='viewport' occurrence='2' type='QWidget' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport2_progress	{parent=':viewport2' type='QProgressBar'}
-:viewport3	{occurrence='3' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport3_contents	{name='viewport' occurrence='3' type='QWidget' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport3_progress	{parent=':viewport3' type='QProgressBar'}
-:viewport4	{occurrence='4' type='Isis::MdiCubeViewport' unnamed='1' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport4_contents	{name='viewport' occurrence='4' type='QWidget' visible='1' window=':qview_Isis::ViewportMainWindow'}
-:viewport4_progress	{parent=':viewport4' type='QProgressBar'}
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/suite.conf b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/suite.conf
deleted file mode 100644
index fb351eab534541dbe8de1cb05da18da840432393..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/suite.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-AUT=qview
-CWD=<AUT_path>
-ENVVARS=envvars
-HOOK_SUB_PROCESSES=false
-IMPLICITAUTSTART=0
-LANGUAGE=Python
-TEST_CASES="tst_Verify Clean Launch and Close" "tst_Verify tools with no viewports" "tst_Verify simple cube open" "tst_Verify simple cube open" "tst_Nomenclature tool" "tst_Nomenclature tool" "tst_Stats tool visual stretch m00199" "tst_Stats tool visual stretch m00199" "tst_Histogram tool rubber banding m01035" tst_SaveAs
-VERSION=2
-WRAPPERS=Qt
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Histogram tool rubber banding m01035/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Histogram tool rubber banding m01035/test.py
deleted file mode 100644
index 6311efe16d8998024f31d87aeb538c5317ead58f..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Histogram tool rubber banding m01035/test.py	
+++ /dev/null
@@ -1,47 +0,0 @@
-import os
-import shutil
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    startApplication("qview")
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/lub2675j.342.lev1.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    waitFor("object.exists(':viewport1_progress')")
-    waitFor('findObject(":viewport1_progress").text == \"100%\"')
-    
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/I26649003RDR.crop.tr.lev2.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    waitFor("object.exists(':viewport2_progress')")
-    waitFor('findObject(":viewport2_progress").text == \"100%\"')
-    
-    clickButton(waitForObject(":qview_QToolButton"))
-    mouseDrag(waitForObject(":viewport2_contents"), 251, 161, 11, 11, 1, Qt.LeftButton)
-    test.vp("firstViewportNoRubberBand")
-    
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-    
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Histogram tool rubber banding m01035/verificationPoints/firstViewportNoRubberBand b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Histogram tool rubber banding m01035/verificationPoints/firstViewportNoRubberBand
deleted file mode 100644
index 6eac1a0972486c2112deed8af9223525c1249f11..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Histogram tool rubber banding m01035/verificationPoints/firstViewportNoRubberBand	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/test.py
deleted file mode 100644
index c6d7df81ea48a331b327859a706171a485c0589d..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/test.py	
+++ /dev/null
@@ -1,135 +0,0 @@
-import shutil
-import os
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    startApplication("qview")
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/molaMarsPlanetaryRadius0005.crop.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/ulcn2005_clean_0001.crop.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/approvalStatusTest.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-
-    # Go to the nomenclature tool
-    clickButton(waitForObject(":nomenclatureToolButton"))
-
-    # OK the disclaimer
-    waitFor("object.exists(':Nomenclature Disclaimer_QMessageBox')", 20000)
-    test.compare(findObject(":Nomenclature Disclaimer_QMessageBox").visible, True)
-    test.compare(findObject(":Nomenclature Disclaimer_QMessageBox").text, "The nomenclature qview tool will label named features in your opened cube files. This tool <strong>requires</strong> an active internet connection, projection or camera information, and a calculatable ground range to function. The larger the ground range (covered area on a planet), the longer it will take to populate the nomenclature for a particular cube.<br/><br/><font color='red'>**WARNING**</font> The accuracy of this tool is not perfect, features <strong>can and will be mislabeled</strong> if you have not properly controlled your images to the control network that identifies the latitude/longitude values of a feature. Please use the nomenclature website to verify a label is correct for a feature. <br/><br/>See the IAU Gazetteer of Planetary Nomenclature website for more information.<br/><a href='http://planetarynames.wr.usgs.gov/'>http://planetarynames.wr.usgs.gov/</a>")
-    clickButton(waitForObject(":Nomenclature Disclaimer.OK_QPushButton"))
-
-
-    # Re-visit the disclaimer
-    clickButton(waitForObject(":qview.Disclaimer_QPushButton"))
-    test.compare(findObject(":Nomenclature Disclaimer_QMessageBox").visible, True)
-    clickButton(waitForObject(":Nomenclature Disclaimer.OK_QPushButton"))
-
-    # Now wait for viewports to finish loading and nomenclature query to finish
-    waitFor("object.exists(':viewport1_progress')")
-    waitFor('findObject(":viewport1_progress").text == \"100%\"')
-    waitFor("object.exists(':viewport2_progress')")
-    waitFor('findObject(":viewport2_progress").text == \"100%\"')
-    waitFor("object.exists(':qview.nomenclatureQueryProgress')")
-    waitFor('findObject(":qview.nomenclatureQueryProgress").visible == 0')
-    waitFor("object.exists(':ProgressDialog') == 0")
-    
-    # Verify initial nomenclature is correct
-    test.vp("viewport1-mola")
-    test.vp("viewport2-ulcn")
-    
-    # Try out various configurations
-    clickButton(waitForObject(":qview.Tool Options_QPushButton"))
-    
-    # New font size
-    mouseClick(waitForObject(":Active Tool.Font Size_QComboBox"), 45, 14, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Active Tool.Font Size_QComboBox", "8"), 23, 11, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Active Tool.Apply_QPushButton"))
-    test.vp("viewport1_changedfontsize")
-    test.vp("viewport2_changedfontsize")
-    
-    # New font color
-    clickButton(waitForObject(":Active Tool.Font Color_QPushButton"))
-
-    mouseDrag(waitForObject(":Select Color.Basic colors_QColorPicker"), 79, 132, 93, -89, 1, Qt.LeftButton)
-    mouseDrag(waitForObject(":Select Color_QColorDialog"), 395, 318, 0, 4, 1, Qt.LeftButton)
-    clickButton(waitForObject(":Select Color.OK_QPushButton"))
-    clickButton(waitForObject(":Active Tool.Apply_QPushButton"))
-    test.vp("viewport1_fontcolor")
-    test.vp("viewport2_fontcolor")
-    
-    # Go through extent types
-    mouseClick(waitForObject(":Active Tool.Show feature extents_QComboBox"), 50, 1, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Active Tool.Show feature extents_QComboBox", "4 Arrows"), 33, 4, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Active Tool.Apply_QPushButton"))
-    test.vp("viewport1_4arrows")
-    test.vp("viewport2_4arrows")
-    
-    mouseClick(waitForObject(":Active Tool.Show feature extents_QComboBox"), 44, 10, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Active Tool.Show feature extents_QComboBox", "8 Arrows"), 31, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Active Tool.Apply_QPushButton"))
-    test.vp("viewport1_8arrows")
-    test.vp("viewport2_8arrows")
-    
-    mouseClick(waitForObject(":Active Tool.Show feature extents_QComboBox"), 48, 11, 0, Qt.LeftButton)
-    mouseClick(waitForObjectItem(":Active Tool.Show feature extents_QComboBox", "Box"), 28, 8, 0, Qt.LeftButton)
-    clickButton(waitForObject(":Active Tool.Apply_QPushButton"))
-    test.vp("viewport1_box")
-    test.vp("viewport2_box")
-    test.vp("viewport3_approvedonly")
-
-
-    # Try IAU toggle
-    clickButton(waitForObject(":Active Tool.Show IAU approved only_QCheckBox"))
-    clickButton(waitForObject(":Active Tool.Apply_QPushButton"))
-    waitFor("object.exists(':ProgressDialog') == 0")
-    test.vp("viewport1_unapproved")
-    test.vp("viewport2_unapproved")
-    test.vp("viewport3_unapproved")
-    
-    clickButton(waitForObject(":Active Tool.Ok_QPushButton"))
-    
-    os.system("qview ../../../input/I26649003RDR.crop.tr.lev2.cub")
-    
-    waitFor("object.exists(':viewport4_progress')")
-    waitFor('findObject(":viewport4_progress").text == \"100%\"')
-    snooze(1.0)
-    waitFor("object.exists(':qview.nomenclatureQueryProgress')")
-    waitFor('findObject(":qview.nomenclatureQueryProgress").visible == 0')
-    waitFor("object.exists(':ProgressDialog') == 0")
-    snooze(1.5)
-    test.vp("viewport4_autosearch")
-    
-    # Finished with initial run
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-    snooze(1)
-    
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/nomenclature_vp2 b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/nomenclature_vp2
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1-mola b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1-mola
deleted file mode 100644
index ef2ad8321a431c7e0e04afb00e2b035f20293b6c..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1-mola	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_4arrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_4arrows
deleted file mode 100644
index 30096994cd6105c396ca485c2782cca5a80e3e8d..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_4arrows	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_8arrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_8arrows
deleted file mode 100644
index 102e09fbd7f27caeb3991fc2557aee221918eab5..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_8arrows	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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cV0EGToAADgqkQwWGq4IgMNE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYIT9/6UOpB3kbw81AAAAAElFTkSuQmCC<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_box b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_box
deleted file mode 100644
index 054e3cdce7b12c5061d76ec390816e9df8eeb6d0..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_box	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_changedfontsize b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_changedfontsize
deleted file mode 100644
index 901399e20edf3c75efd87b7ab907c47d4ee85f0c..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_changedfontsize	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_fontcolor b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_fontcolor
deleted file mode 100644
index 6640526659cebd3e4edfcef3ff739781bdb51f99..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_fontcolor	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_unapproved b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_unapproved
deleted file mode 100644
index 054e3cdce7b12c5061d76ec390816e9df8eeb6d0..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport1_unapproved	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2-ulcn b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2-ulcn
deleted file mode 100644
index c5383c337cb7b0a20188ebca2f6ede8d9da8a3c7..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2-ulcn	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">iVBORw0KGgoAAAANSUhEUgAAAfAAAAHwCAIAAADWzqqxAAAACXBIWXMAAAuJAAALiQE3ycutAAAbnUlEQVR4nO3dd3wUZf7A8WfazmZTFkiICZHeJBpEBFFROdDzVAREBQEJBAWxYkWwcAK2oyiiFBFNqOEAkSJyCGe7EwtYkHag9BIgJCTZTbbPzu+PCUuAbAi/U0Dv8/4jr2R35mkz853Jznz3EQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPyxOdKXTR7Z3nGumwGcZ+Rz3QCc9xzpy7JnLOuQqB5/SapxySOb3v21Q+qvHqaJ+/gfQ0BHNZhq3S63pOvH/lST7+p1ca3zf9/xbOn60Mg1nnPdDOBsOf8PSpwHfPum7Ugf1rqGIoQQUs0Wd95e8PE2r/WeHJ96xTNDx2+ZNe/wnOyvn+l9vVMRQghH+rIpY4f0HLJ66qy87BfaO4RQE2/u/cyX0+ccnP3OZ492vixGilqdI33Z1PFP9Rv+TfbcfdNeHtMurX33oV+9N3fftBdHtYxXyquNbdvtyS+mz8mbNe3j+zs106VKKk08doV+0qW6o8Lrp60I+P0goKM6/NtWfpnY7S9NbUKoF/TpeeHK5bvc1juOZpMGX1G48rVrB/ZNG/TMC3tbjbk3o5YVq2MuHJiy6anh96bdM2qNx9bstqdfrrdx2PCBDR58aarvz9P6NU+IHtKFPaW79GnvR+69bnZxl4dHvBj72d1DBnXMLe3W78YGmrVA3fvr/efJofc0GvLaImePGT3rl4fripV6q9Gz01YE/H4Q0FEtgYIvJ5dc9UyGM+niu+72fzTvcKD8Dc/W/iMnvbPxYGHACHkPr/7w/YMXtq9nfTjj3/da7hc/lQRNIYSe0v8qkTNz5ZpCn9+9d9GCDwov6tjQFr0+755xS9ftKvPt/umTXaWFE5d/v6vMs+OH1fvtLZKtOBs4MGXmqu+KA77in2fM/Njf+obGp1ZaHaetCPj9UE+/CCCEMFxfLP5lxKA+z5uNf8p+97BR/9gbco3mt7zU58Y/N0yupSuyJMyyTbHWdYLh3e41ypdSYpvVaDjojbkjhCRJQhJCeDbHVfGhhhk8EjCFEKbhM8LBgmO/hyW1/BokVLqhNGT9Gijd6VYvKS+tYqXVcdqKgN8PAjqqyXTtWPKBPG6ItKzjL2Vm5OpVr/fsAzcGFk7ouH5/vicYTrhyxas3VVjp2C+GZ0fxjn8Mfz77yJlE2yqocS3j1M9LQ0IIW1zD+NChUkMI5cRKK7QjYMoORbLeU+xJDqI1/ojYr1FtwQN/e7xPncf+vi1Y4UVJjVeEP+Ar84f1Ws0z+/ZtGVPZuv687DXmg/d07pASqyt67fqXDxk4qFWlS1aTLe2BzBtaOzXd2SQz8y/2Hz/Z4Y++cODop2XJj/ypaW1NcSQ275/ZO93+X1QNnK8I6Pjv+HaNnvN9i36v/mf27I2j+7XLX7Wt8luRwZ+XjnlyW8NnR0zeNee9fz/cyfHTh1t9/029+6btv3jC+Jzdk57uVfrBgPm7q3o6MZQ/c8rSvPZPfT9z9qZRfVvt/ShKI8+Wc/6A/DlvAH43ou0r7EP4X6SmXt5z5phpu+fmbp/4wtiO9WKl8+BYOOcNOK2zmc52diqqTkv+643yB71CP//3V/xPkOKa9lk4sNmGeSNbZfVv8+qibRde34RPe6rprKWznSd5c79GHty5vinqSF82eVT7WCFM0wh59m3/5s33Zsza66vuM2fA+UxK6HDXFfmzn39jfbEhhDi06b3Zm4QQouKlhpp4c4/7nut0cWO7Z+t3S594Z8WPXlMIIelpffoNfrJ9kxRR9MOaRU/M+uxnvykc6cteu+dfXxfc+aeMtODu3Owpy+r0GXdrq7qhndmTx47e4DaqLLDvgIeGXd3A6Tuw+rOvEuSqG6AkX95zQu+O19aJN47+snhJ9l8/2V16lg/LY+ls/b4uNiLpbDUvFUIIIcentnm4b8/MjLRE2btz8+rnpyz4pMQQjvRl47P++fn+Lh3bXKzv6PHwqDWBykej2hVF2RBRxkfSkrv2GjS8Q4v68pFVi6cMWf6Ly6ykhD21e/3zce3+Z2dttm786PVHvzIkMHXmFY/fPmboyDWeKBvFkb5sfP+Vq3d3vr7dZbXUon3rJk6ZNn2Pz6zQGLn/A69unpW7751xOX1u/2LqsavaSpP6Ts79i5IiWIGkp2Xe/8qmWbn73hmX3a15QqUnPc/mrlk9Eu/qmXrPkw+tTXpySJfGPP+LPwY96ZbEkoXb3NGf7ImWb2XP6DV0WOI3gx/LavTYxOWJPWf1ahhrrXGaTKhoBeqX9HzqKeeXWUOymj49fW2Dzi3sVTbA3uCFrKsOzH8ho1/fjFG5G1I6NjoH/1ictXS26BVF2xCVj4/e4s6nR9fbNPSZgQ2HvL7YdmV9e+UlqIc+/XuozYMNrMAqxTe49abQ53PzQ8faE73ZMXXvq7tj5Av31896eMCXNR958Ib66gmNkR+P/azvI1lNh077Mu3m5lVv45MGS0Qf03LR9qHKGf7Cb//10V69WW2tksRxSU+7e9DoH2bk5s2YvHxQxVTvMQ92f+CjSTPycudsHvPoffXtJ24vKb5xl3mTp8zt3CiuirxE4Lcg2y5QQ3m+6PE8Wr6VntKvVfC9GavXFQd8xT/nzFzpa3V9I+szgaozoaIWmJrZOvjesVSsnBnLtweqbIAZ9oUVZ9IFdZ0275GtM+bkbDgXt5HPWjpb1IqibYhKx0dPzbrCzMle8eURn79039JFszd6o5SgFCz52NWuW4takhBS3JXdWhR8/NW+SDyvotm+Pa/M/ue6Ql8wULzu82V7Yi9NPXFjqe/O/vTHkpAQ22fP/nDAqNbHixu3ck1hSIi9ixZ8MOCvHRvatv50fLCMY2O69VgTDq/+8P1HRravp68/Ghkkax8as+q74pAQP+fMWJ45slUVG0/Wa15+zc2pJT/mBYSwWSePlZnDp24oCZrC3rL/0GGJq+597KWNokHW/U/M6rX7+pk7y4R1yvpk0As56932y/7y2HsP3rDqueW7rRIlNaVt5ryB6euyRzz/bWGgirqB30I4kB9S69gVURYlpkfNt4ppoHqWl5Y/H+p373RFMqeqzoSKXmAj1bviWCqW373zaKhVVQ3w7Bn91pLht/fMuaNekmfbrDmTX1579BwcQWctnS1aRUqUDVHp+CgxjVTPCnfwhJIrL8HY8v3yPd27daqxfrG47JF6h6dOKwqJC07f7LD/gD9sLWUavrCkyUII//HGSB9MnZIvyaZpev3mram1tvl8+zzBTrVqJAlTCElYxYUDq/ML9vjFzXWc63bvLbbH2u12RVFqxjvbxNqdhiEZphBCaEmOG9srosDz2Vaz3WWFR/fEbz0Uc901cU6HJEmm/3DJ6i2hNhneoNc0TU3TFEUxg8Xq2g1S5NQk23aG/Wvy8hKcNa+PT5AvztBqxrndbrerIHb3Qa9uL4zR7XZ7rOZPyTMK69c2lUDtnQVlDesXBjymaYqwN/VA8W67tq+kpI0iHzFFfVk6IMQe0wwEg6ZpGoZhmqbH4wkGg16vV5ZlwzAURRFCBAKBYDAYDocjG8I0zXA47PV63W63z+ez2WyqqqqqqihKOBwOh8PWipIkKYqiKEowGCwrKzMMwzCMsrKyUCgUCoVM01QURZIkv99vs9kURTFN0yrZMIzQMeFwOPJTkiTTLP+YT5KkyJ/WT6tqq2TDMCo21TCMSPvNY6zVIz+FECUlJU6nM9JNq0eKosiybLPZNE1TVVWSJFmWQ6GQNWJWSyK1WyVb3a84XFYtsixHFrYaJkmS9bssy5G2VWyktZi1TKTjQgjDMKyhs1a0miTLsizLpmkGg0FFUXRd1zRN0zRrldjYWF3XXS6Xx+MxDKO0tFTXdatYu90eFxcXGxvrcrmsQqydsLS0tLi42OfzWQNosXphlVlxi0RabvWrYt8rds1qp2ZL7Pzks70+f3Xg+jJnrVpxcXF2u900TTmm3quZV8+ft3hzOGlQz+v3fbhwpTtsDb61WfXY1H6d2x9cvmBRUVAIoTovH9sl/s3cT3cpF77c58p5uYu2hlVbXP1Rd1yx8ouvPtu5b3+B7a2HO4x99sVvw/XHvjj46NIFK0qF3+/3+/3WXi3rFz798B0HsifOc6txcXGO5Gsm9Wo0PXfJFjNp4J2dDqxcsspdvl8piuJwOGJiYmw2WyAQ8Hj9CcmXPd/eNm72ivXFZS6XKxgMxsXFxcTEWDu2dez4/X673W632x0Oh6qq1lGgKIphGIWFhUVFRS6XyzTNpKSkpKQku93u9/tLSko0TUtISEhLS3M4HB6Px+v1SpIUCoWEEKaWMqJ768UffrzVcHbv0vVW8dPQ+d8cUNNG9mi76IPl29WUrC4d1c1r/nG4zK9qpq3Oo9c2WPHvb3fJSfe3b7pqzbc7gqYQQrHV6H7lJUe3blofkoPBoMfj8fv91gaydmxFUWKdFz5wVbN1u/YWaPHtG9RLV8wfNFtAkS8JGEdq1igVoZQi99Ey948ut8vlyi9Ssy4yJi38ZN3BI4cPHy4sLAwZcoM2mQv6xdw3dNJ6s8G4vz2UP3H0lCNhh8PRpEmToqKixs3bPtvzJhE29qrakSNHPD6tW4q5dP3P+cKWnn7ptcFDa9SUTlrxwv1FR8rMXul11m7f5Y6vfV1assfv2xU2dV2Pj4+3ApHXF7g6xvaf0tJCIfl8vlBYuSnZuc3jzTfC1miHQoYcb4QkSTIMQ1VtuiQf3rsnGAy6TePfu35+6es1CwqOzDqwP/fI0b0+v98fDBqh4sICv98fDoclWW2mKiK2RrDtlXFdu8bf3FZRhWmaHq9fCCErim63S3JYFmr5UREsFmb54WGz2axDVAgh1BpG++tCHa7zXtnmcJJWR9HTatZ0JsQpshpWpGAwGAqFjFBICYdLjKDP5ystLc0v8gWMskBpWVmZLxg2yrxlVgBSVdUUQtW0WjUTNFmpq8hhSTmoKEKSVFWVZdmKQbIsu93ugwcPlpaWqqqq67rVHuvwVhTFetHpdMbExFhBxO/3W1UXFRXl5+e7XC4r8kYCrrV/2Gw2h8ORkpKSkJBgt9t1Xdd13YqYsbGxmqZZYcIK65IkaZqm67oVnqyIHIkgkWhuNdjqYCTKRAJc5K2KjYlERutPl8tlLWyNd0JCwklVWOVYZywrskeGy/rTamHFKiJB3xIp0DrIIwtH1q04+BX7VXFdVVWtFSMDYoVIq66K586KZzurUmurWWdowzCs6qx1/X6/JEnWprSKTU5OrlmzZvwxkRNtxZZHAnTkvFLx9FNx9E6K9RXPncJ0f/PhhpS7Bt5/6YVOmy0hsWHnDp2a2IQQQhKSaYbN4NEVP5vdrs24SA+boXCcM+3Wq69urEshX9En+5Wbr7nkojjN5kj5y7Ut9T2bDwTLa5Jk2TTNUMgIC9Pv9UqSpKqKLMl2R6xDdS34QdzeseVFtlDIH3LUbNj71i7NlKC/9MCCLWqPzm0bycGgqNXxmtZ1lGCZ21VWkvfB5lDnK5qlxyqKkJ2JDW67rkOTGFVzJPdp3aJ17QSHzaYokilJqqZpmma3261Yf/z4FUJVVWv3jlwAeb3eQCDgdrtdLlcgEIjs2KFQyOv1WlvQ4XAkJiY6nc6SkhKXy+X1eiOXOF6v1+PxmaYZCgSMwNGF7+f0W/j9YVnTdc3aqwJBQ5PCPq8n/2hxQUk4vWGzNCXs83p8/kDYDIcNo/xyxyhbmy+uapTWJM6uykp8fPKfLrkkTTIMw/B6vYWFhW632+cLGKZRVlJSVlr04+G8VcFQmWmGTVMSkmbTNZv9iCIa2u0X2DSbLbZd0zTboR2HDcm0pY7o0aljqkOXpXDIKL+M8h+c9Z2cmXnjVYl2Savdrs3VbVJqqcKz3mXWk0K1VNUwpIuSnKqroCAUDoV8+w65tfgarWKlg8UevxCapiqSrNl0RQ7vCkqNdVuSJEqKio8eLqjhLpWKi7xev2EaHrerrKzM4/H4/YFQ2PCUut1l/kvtmtPvCfi8Yv2TN16WoOnOJvcOnX4ox7opqjW7/ZXvhnU9OanvpGcB7U2mvvXmq21TnaoSm9i8/0OT8nJO+qpSvWX/N9YPvam1U9OdTQcNe/dY+RWcWKYU3+rDt5678tTvO9UbjJ8w7tGU8ruleuptn08YlKFX+bWok0f+qe5VEye8/UE3Pj3HOaTWaXPXrDHv7Jmbu33iX8ec+hy64uxw26MfT56RN2/O1nFDh7dNse4CSXq9foNfXD8zN2/mlBWDb2gRuWkUWTHa71ELrJv14KtbZs/bN31cTu/un0+tcnlJb9Y+c/6E7Lx5c7a+Nuy5y5xn+3m4Sp88Pv6iktqu/5K3ZuTNy905+eUpPbp+NqWy70kWUUej2hVF2RBRxkfSLri9/4i12XPzsl/P7tIkoYpNKYTQG7z8Vm7eW1kZ+iktqbTZ0cJdhcaIex7625bZ8/ZPHz/z7h5fTH7uyphqF1eNMY26D1U6cGp8yxuGrX/trqbaqXXZWw2YuGHYLW2cmu5sNnj4298OaBx76sY4MaC3dwitZrvXX3t7afcm8cT0s+CU8QdwNqnZk4dnTxZCCD31jo9b73dZn8oaJV8smfjFkhOX9Wzp+tDICn8bB7+dedu3M4+/sHCZEEKI44uZ/n0zpjwzY8qxBeYtrqQJjouXzVgohBk2fId2fzd5yrIdQSFOfnLR91Pua+OzBr37Zt9kUbz+q/ezcneWVaN7waJvh71ovPz8U3Pl1/t+8LPr13mQVk1t02N8r+uvTdU9BzfN+vv08d+di/tF1VThSf+Ar3jH1jVv5MxbdCjAk/7AH9DIO9u3rKk7ajYfPOzttQMacVF1OlJc48x/Tx3xeMvkeC2mXkb3hVNeG9m4itl3zrXjF8uSHpd6Q48XN47p2vA3+v+ZK3TgnJKXeNq8/vL07W883sOzbNDfdzH/4mlICdf1and07qQ3N+S7g969G5c+kuu6tdclidaHZVpyt8znvn53Tl72hBldmpY/vF/51GtVzNxW2ZP10T5cEkry5b3njn9nb+68XZNGv35Dg+g3DEx/6cFPVi7Z48i4oPpP+p9Zp05VvQnqEqN/dMYUcQB+K/bGkye80ifxeDBREzutmvDQpXYhhJ7ee/xPz3W7prZdj6vb7Y7MjBghhK3ZnWN+GHZr+0S7Hl+v5+A31g6+KEESwnHRzJEP35eRmmhT1JgLbrx7zHdPtKpl3ajIyV0/5Ma2iXbNVuOKLiM3jrm1gRo9oNsbT37rzbFtU52qElf7oqy+A07+9toKV+habMr1d44uv0J3pC/Lyd0wpNOlTk0SQgh7y/5vbBh+S9saNnuNZvcPf/ub/o1ixZl26pQr9Cq7ebz2Ku6F5MxZ0/+KhrH2htcM3TL77U/7tmkY62jSYdj68XeQUQyc5A/65Vy/Hdl2gRo8UCH3L+Qv8Kk1HXLUPLHKk76qSHWrNBksmupk9DkuXjZjYeH8+fumvji6+a6X3vh4t/Xg/4k5dZVnxJ1Rp05VzYy+KjBFHFBt5/rLuX53woF8Q0urkPun6kn2UJE3LETleWLRkr6ip7pVmgwWjb8aGX2ezZV/i9sJOXXRUhPPqFOnql5GXxWYIg6oNgL6GfIXfFSQMKhFwvwviwwhhJCTWlxbq+Af+/1C2Lw7Q45W8drnpRXCX7Sp16qeua0S0SZRC5dsX/3M2NXPSLZ6re9+P6vP4g2T1ld/4ojjU8R5d4ccl8aVN16Pb5QQOlxqCCHOpFOn3gWt5gR1TBEH/Bo4bs6Q6frX/HW1735oSEbtOC2mXkbXt+5O+Mf8jYWmEP6DM9fKAwbc3D5R12Prdrujb0ZM9KnXqjlzW0S0SdRiGo+7t+uf68brsmSGw+HK5tOsFv+hORts9/b/s/Wkf1b/m2I2fLrTf4adOlU1u8kUccCvgSv0M2W6f8ntmdNzfNbfnkzVyw5umpPzytjt1lcs+7e8P3ZUn/smjLvrQnF45eIpj/lE+dRrXbKeHTE5o5bq2v/TjAWzt/qEMHeNnvP91H6v/ucJm+/orpWfr9rmbV1VtaH8mVOWtnzgqe97x4WO7lj+yUfbmrcRQgjf/ulbr37xiYkzU2yuvI2zs9/e9P+c1y3ak/5n0qlTg7Wvet2M1jsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwP/H/wEaBovjBPXGCQAAAABJRU5ErkJggg==<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_4arrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_4arrows
deleted file mode 100644
index 0e4c52b137d7d257121e1c312a6c438c7938af56..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_4arrows	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">iVBORw0KGgoAAAANSUhEUgAAAfAAAAHwCAIAAADWzqqxAAAACXBIWXMAAAuJAAALiQE3ycutAAAX1klEQVR4nO3ceZwcZYE38Dr6mpmeSSYhCbkDCRLIRRRdWNZzWVcRI4eAL4eoeKFcr694cOkiBI91X5Vb910vQIUsC3Fd5WVVXkAhCATlMAJJIAmETK7JXD3TV71/dNIkmSFECYY03+8f8+murnrqqaqnfv1UdT0TBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADoW7uwK8jBaun7uDT+eNXPxXqwnwVyDQX73EPUAjWLh+7o4DHdjjRLu7AuxOMh0aiUB/NVq4fq47KgB7vHqvvPZCJx0ahh46AOyBtu6Pb9dVB/Z0eugAsKfZric+ZG8dgD2PEIcG45YLQIMQ6AANQqADNAiBDtAgBDpAgxDoAA1CoAM0CIEO0CAEOkCDEOgADUKgA8CezD9ygcajhw7QIAQ6QIMQ6AANQqADNAiBDtAgBDpAgxDoAA1CoAM0CIEO0CAEOkCDEOgADUKgAzQIgQ7QIAQ6vMq05S9dvN/Mtt1dDV4Guy7QB7cS7YaXQ1v+0qVzLj8nmw6CIAjH/88Dblr6EptZOPzwseffOfPG1XOuv3fqh47L5cJdVM8/t/2/xFNm68V31dnXlr902dyF6+cuXD934bJX3um8yxvDrm9dO1zXrk5IPXT2QEm41ymj920Nwtbm95wYh9WXVlpL0we/2t79zSdPm/KHj57Ysf7gURPyu6KSXT3nz33ika4XO2+3/rS+yCvKpp7z9lk8b+Tiefv+OXX7q/Xndm1jeDkKfCEvw+EW6OyBevpveaTluDel2988Ztp9HSt6tkxvy1+6bO6tq2Z84RO5TO3twwd84OrX/HDJtJltYevfjfvSQ3MWPD79jKPS8dalVZLugSA3sWna7GzTmp5bP7vyye4gCAbNv+PS2vKXPnzAh66dfv3KWV8+r7kp3JJo4/OXPrTfrEn5+cu39HC3rmTbtp+O3xKCcTzzvKnXPHnQrbuke7jdbgmCIJV6w9e2rep2ld/5kl80tV/uZN+1jeEFCwyHvX3CVx+bc9Njr/nI21NxMMQxys0c9alfzbxxzdxbN1/KbLNIevTwf7p/2lv2DoMgiPduv+T+aYdNbd2yZ3aiOW2/uqE3IdpyGRWOOGbStx6ffdX1E69+eEfr2LJHhmolm4XtR0365p9mX3nV8BGpl3aodklTeNnaUzSi9aSbDvzxs7O/vWDsnBG75CqdnZNUHv+XDflzxhx3VvzLawqF+vSunvP3XXzCO9a1v3/0hOYgCIIgE4/+1dMfnfHkIwPZIy8dtuKsxz54wqbXnDtmYtNWpfUXfnjSs8vGDz9m/r7/+w8HnHtyNh0EQXao+XdcWiZqvnnZ6e9elz929MSWLYV395x/0BMPr+g5b58tPdytK1ne9tPuLUs15446MfenC/504v5/Zg9uWH7+8rkL189duHy/WcN2sFsGVXXIym9X5l92y2UH/dBdcm7u2sbwQgXmskd9oW3lWX88/az+131h9LjcoGOUzb77ytEtP1x22oTF76kd6G0X2bu7+8f3Zo55fzYTRGPfP2ave1YvXpdsXuPQjW3bIzJodUNuQrTs52tX9QVBLnfUufnHT//jRf8WpjM7WMeWPdI11P7asuVHfzb/5CeXfOF7UWbbpN89XqbL2DA+4EsT/275M+fM/NO/Lmv/5KUtLSL9r6i0YsOC54YfunrNnau2nBVRPOP8ad9edtBP7hi3z6hMc60z0Tdw2+0DhUoQZFPTx+XetWDGdbfvPXnvXD69TWkDyzoXnLv8wn947MPz1k88e+/JLS8w/45L6yveeW+xa3n3piideaFL3yErOVhP4fvzO1s+vM9Vt014/V5/TsOq3x7Z54mHN+1gtwyq6g4qv1O3XAZ1YOueT+1t52kbdO3yl9q1jWHoAjOpqU2l3z5YXP9g58am5rbMoGOUTc/IF392a193KRh6kXRl6Tc3hMeP2X9S8/HHB3d8s9C3peydak7br27oTUjlM/O/fEWUpJ5tH7eoctpnDg6eamm67/xrL3rw0TtnTn2g/eZZ7w6ToDj2818/t3NgxYTMHzoOPv6SQ1pyTWHT7F+PmLY6SleCZM5da68aET70wMD/OW3toyOCxb/rvWbsTXefveGXT7ct/MWzi8c1N4dhmCRJoVDo6+srFApJkqTT6TiOkyQJw7BSqXR3dwdBsGHDhpUrVz777LNtbW1TpkyZPKV3ZduCIx/8r0pX94YNG4rF/szIO0qT7y7HY1o2fqq9b1g6/eSa0bcMW/v5pPDQ+gkL8yv/V7Wv0FP9Zf/kX8etPWFl4sDdJyXhyswb7ircfVw5Wdn8ptsrnUGmPexddPjKJUGYWzfp2N8V14VtY6JNd/7t8j/GlfTa6Sc/8cx1h3QH66ef/MTK779+zabu7KEPzz60Ox+23POV6ZvKqTiOq9VqNdU9+/Cnun7wlveeGKV617QcNeWcT01dvbG3UqlUKpXe3t5yuVwul5MkieM4DMOBgYFMJlPb5CRJqtVqpVIpb1GtVut/a/tq81kShvW3tb/VarU2W5IklUqlNlu9wGq1Wp9SU1u8/jcIgk2bNg0bNiwIgrFjxwZBkEql4jiO4ziKokwmk06nU6lUGIZRFJXL5UqlUltvbdna2mslx/E2p219LVEU1WeuVSwMw9rrKIrqddu6krXZavPUNzwIgkqlUtt1tQVrVYractlUZq9Rox/91JrPxc0jxrU0pZsm739ANYg/cHJqyYXpf28Ojz83P37fab2VMBOnR+w9YXxLEmTjjg3VB74e3PVI87rOUjRl9kFRVGuEPUnvP57Sf//3Nj22ojJyVr4pEza3tLRWs8s7Shs/u/pHd5QHqmESDhvWmktFca6lra0aJJn0sjXF9ec+e8OvS/2VIEla8m1NcRRnmlqak1wcRalMJhdmUlHc1j6itRgnUXrW7Klxdz43InvCKeXHv5j+cVx5//nDZx/6xhFhNZ/rf+M/vHFMZyY9LBnR1Pu6txw+uZItrSvddVmhc37uAydOyT4Y1I9CbSenUqlMJtPW1pbNZleuXLlq1aqOjo5iJh2F0cgxYw9+zfioNcxnSpNeM71QrJ5yUm7x2T13R+mzvpqbMHW/dEu+LRsd+Ia/bU9Fw3MDr33T28aElfamwpy/e+uw8sDwXOmQtx+xf9KUyWSKxWJf0Nme65pz2JtbO4u9vb1dXV2lUimfzzc1NcVxHOaD1mwydcbsUm9p3mW5/ivTP8zm3vu1N2yMcmvDYnvTwJzD3hxs2JBNVZvzrflM+tRLRhYuT/9bJnPCl+csObX7hveVTv9e9o+X7dMdNk9/+5zJhUIYhuVyud6cam0sSZJSqVQ7NWots3YqpVKpOF/cO9/59vce0nFbckfq4OP+R9/Y1tVHnPzG1yc9h35oZecP9v9j04a/eV/3CWe8522ldWNbl//9cYfMKiRBeiBdWLH0xgl/WJLLNrW882NHH9vcnM1m29raRo7pax59z2XX/0sqTGWz2VtvWdo75ueTrz5/46YVzW23n3bhW6ZvWDI+Lo/dv3ndijWrb1xzyYJ1R/x8v6PnPHf/3aVHujNHHpVfeVOlrxo1NzdPO3BqZ9J/wkffcdLsln1HjrzoO19a0/F0nPvpBTdODKOJi4864sLh/fu2Lz3jsk/0FDcOS+7ouGXOk49nMrmmUy8c1jqiZ9ReD557xeejTEfrmEUzbvhaobtQKBTKT22I33Lr5777udWrOlvD/+6/98i+de2VSvWMr1biOC6Xy6nevlIulyuX0qVKf8uo0tOrfj89TgqlYltze2dXU+b+eR1PZaI4VSgUBqqlcrXUuW5dtj2VaelrndxXuv/jY8Yu65+8KorjONx8rvb1Z/Lh+vVR58im+0thmEpnaidnGIapVKr2Ip1O1ybW3sZxPHz48FKpVCgU8vl8e3t7Pp9vbW0Ngt5qkFTK5Uql0tPTE8brK+MejpZ/OlNd1Dfl5tT647OlQqla7u/rzUVhGIRxKpVE68N97850fDBaMqY4UIqCShBHQRjEqVS1EoZROXzqvR1P3NM+a3HXXXvHI8phVEktPWLVkw+Nff2T+adm9lTjMAjjOJWNM6kozuaaooGOfQ8urL1xwv99sKVY7alFTyaTyQ0vN8Xxc8UoDMNqoakcrY/CJJPJhGHY0tKydu3avr6+UqlUT6iWls3XsdVqNYqiWlTVAqWexbWJtX1Sa9C1t1EU1eO49qJWQj0ft55/u1hMkqSrq2vYsGG1QoIgaGt7vi9UP0NqJ0kt3KMoqp1Itb+1L4lateurqB/K+kbVXtfPwPrM9WXr02sF1l7XvpZqs6VSqWKxWFuwvhW18Kp/OcVxHMXR1pUPgiAMgiiKU8Xod/cFx36tfMB9qaAaRnGclCthEJaKA2GYzUWZu75SPvnCzNkTC3Ff008+1ryip1rb/8UNxbsfLc+7euzZk8LCiv7ffqVjRV8YRqVfXND98a9MuPraKNVTmP+m5x6r1r8pg7BY+q/zuj75z5O+/Z0o1dN38aGrlgRBENQyNwiS5/dMGEW5JLrjruiDP2l7Xzm47sPBgw8E7/5yafp9cVJJkiSpFoJF9yVHXt7zznJ882fyQZCEYVjOFI66euOE5qDnscwvlobVaqX+vV47XkmSlMvlUqlU2/OpVKqpqSndlIqjKAzDnp6eKExVk6jY39/fVbnzN9lTrmmZeUd/tRL19/X1hqlyNbNpfXdXc0s1CXu7uzYFSZJE9X0ex6l0mM5kMlEUlcqpMF8+4bquIAiCntQ1x+Ye70zVPqq3ojiVahmWGp8LFi1JOqKgOz0QlZNiUK1UK33dXcVSOUmiMAyDdDw+V1n0ULlv5PCebGFEW3PY2hJH5d6uTV1huVQq1Too9e3KZrOVSqXe7aufLEEQFIvFIAgymUyp2jdQKW7oeK4vbk2lUqm4WE2SaqWSlDLLlgQHf/zRcUtGBdUgTqfDchgGQaVSrlSCoJJ66AfNh526/OiPJVF/y6Kvz9q0qdTS0tLc3FytVoMgqSbVVDqVzWarQSoIglQqnQpHbvzd2L2PffC9lfQj1zav7e+pNKcuvmfWjNbqxnvXfev31WSg/LMzO/a5Yp9rvpJK9xTmv+m5ge7iw9elZ5zVMTI1vO+BQ9NRqjiQ6lrUPvrIdRtvaO8tllvKlWpSLZdKlWLzujsnjXvrosOOKYXFUc/c/I443ny+bOzsyZSLPR1rCpVVo478z2w6Lq/Zf90z5b7udP/dk8e96aaRbcWwNGb1f7yzp1BNkiSo30Mfeczkyx+fffVPJl37h6kz2oIgCFreMOaCe2ffvHarH3PqN7xSqb/5xvTrV836xr+Ov/Lh7T4NRxw16VuPz77y+glbbsf/pba7xdaW/6cn5t7ScdCt6+beunRafaWzhgXBsNb5izdX44sP7PfaEUMV0pa/9KH9XjciCEe0XfbgtBkvNGW7AsNo4onjL/jvA7//y20vfpubz7x3/yMmhkEQxBP3+uffTNhnuztxr2wL18/d3VVgz1c/uXK5U3974BlvS+91+KRrfjtuUm7b8+6F5mnNf2Hx/n8/yc3KXSY1b98ngiAIgmT9zU+feXM44h8nffmivq6BIAiC3vvWXHLImq1m7jl/7hObX5bLi85ZctI5wVCfJhtuWXHWLSt2fWUHyktW9z935tLv3l7sr91syFc7q6mZU1Kr924fU7uPP1B6pDvzrnlNT1xX6C4PKqEpc+hB6aeC4e0DhZ5iEGQGTUkNKjCprrzhmUsWrHvHz/c7evbq+39V2dz7LQz8anH8yTPbHrisMPnMUenbnnq2MGh1r2DzRi7e3VVgzxdtuXDoH7j14q4LrjrwmqBw+znLnukPgsG/nw2ep9T/n7cHZ/12zlnF3vMPeuU9r7lna8tfumzuLU8f8KnjBj3Hs7sMGtSw/UVDGE37/H4/WDX7G9duuVAIgqZZoz59x6wFgy8s2vKXPnzgx64/4IbHp5/1/HM7204ZXGDtYZ61c763cPxrR27TlYhGtJ5y84wbOw764Y/2Gp/bHftndxnc+eJVKTd77OWLJu67R12b0ihenrGsLYdNuOrBKYeOGuKy8fnnGm8aO6t9N11X1r4U183998enn/uh7K557EigEwRBW/6SR2dcdHrulfAsGzUGFr1Uvb9Z9YnXPnXP2mT7D7Z+rnH58DO+1NK8u24Vbuo5b+pDHzhp0+RPjp3S8uKzw07p6rlgxqMXX91f3N0Voe7VFOiDH0h/WUdaN2Xf+rrKTy/vem7DwANXrO05eMTYpiAYajjZECO+hhrkNsQoxK37yC82tjCpf+NsO2Ru8OPDO1XDwXYwMG/8oNrWtug7+1/39Mwvnt16+OXTr185c/5nmnbNP1GBV6tXU6D/laWi0enqM91JEASVroGBdCaXGmo42ZADuHZmaN92djC2cFh+/tKDvv/j4Suvfu7p3lppWwaIFQeNf9vJGg62g4F53UPNn4laFiw/fd66UWdN3P+nyz5+5LrWE8ZMah5qTmDnvMSx+bywcnVtKRrfGv6+M4lbs9lSsb8c1IaTLdx6OFk2NX1cbs6CGUdGYbCpO58OgoF4xuf3Ofu0/Ji2MNjUvc3QvqB7U5SvD+Tb/Mx67U1P4fvzO0/98D5XfaTrihOe+d26rW4Bbeo5b7tHCOpD5lpSU5tKtz5YXB90bmwa3ZYJgmAnajhYNGSdt6xlcG2DIOgr/r97i91BT2dX612Lit1BT1fUmnml/BwPeyQ99JdNYeDXi+Mjz2wb05553Zmj8vdvWF14/qnK1vo36UB5yer+297/2AljFr9n6pOPdAVBS9OxJ6R/eewjp77ruWcGng/AalIbuVJ7s/nxyr0O2fbxyiOW/igYfvTs6EVvXVRqQ0qL5aX96UMPSo987fD2/r7u4s7VcLAXqPPmtQyu7bZbtM2mAX8pgf6ySSqPXbDynqkTvvno9A/v23nlRb19SRAMDPzszI7CB6Z9d/WWpyoH+hd+esPIL06/4bktUwr9t/0qmffTA774kSipvEDhvf3/saD8zp8deMExlc2/SdVuYT8z/X29Gxf8vrqz8dg/cOvFXVOuOvCaK3KLL+54pn/najjYjus8uLYAAAAAAPCK5Z9zQePxoyhAgxDoAA1CoAM0CIEO0CAEOkCDEOgADUKgAzQIgQ7QIAQ6QIMQ6AANQqADNAiBDtAgBDpAgxDoAA1CoAM0CIEO0CAEOkCDEOgADUKgAzQIgQ7QIAQ6QIMQ6ACwh1u4fu7urgKwK+mhAzQIgQ7QIAQ6QIMQ6AANQqADNAiBDtAgBDpAgxDoAA1CoAM0CIEO0CAEOkCDEOgADUKgv4rs4L9x+UddAHuYrYO7/lqaQ2PQQweAPdN2HXPdc2gYeugAsMeq9811z6GRhLu7Auwe9SifN3Lx7q0JsKsI9FepF+2bC3rY4wj0Ria1AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2BP9fw6hRuJxbPqnAAAAAElFTkSuQmCC<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_8arrows b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_8arrows
deleted file mode 100644
index 4cbd7713737bdf35e45592bbf20485641c2ea268..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_8arrows	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_box b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_box
deleted file mode 100644
index fc1b8eb66f18e24f9f2f9cb4b60aef965508ef26..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_box	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_changedfontsize b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_changedfontsize
deleted file mode 100644
index 90750659ef3a4e7b2247150c81e20c6eea31b317..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_changedfontsize	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_fontcolor b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_fontcolor
deleted file mode 100644
index fc1b8eb66f18e24f9f2f9cb4b60aef965508ef26..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_fontcolor	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_unapproved b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_unapproved
deleted file mode 100644
index fc1b8eb66f18e24f9f2f9cb4b60aef965508ef26..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport2_unapproved	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport3_approvedonly b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport3_approvedonly
deleted file mode 100644
index b7c1d1c144393c34c3d2914101021c71ee1429e8..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport3_approvedonly	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport3_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport3_unapproved b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport3_unapproved
deleted file mode 100644
index b9f783fdaa16e23f1298ae4896f40a43dec41241..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport3_unapproved	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport3_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport4_autosearch b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport4_autosearch
deleted file mode 100644
index d12abcb998f484c97c9527697e9b7f0badd87ea4..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Nomenclature tool/verificationPoints/viewport4_autosearch	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport4_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/test.py
deleted file mode 100644
index 53de3bfbc8b0e06fd6fa540f6efa68856a0a04a3..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/test.py
+++ /dev/null
@@ -1,88 +0,0 @@
-import os
-import shutil
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    try:
-        os.mkdir(os.path.expandvars('$ISISROOT/src/qisis/tsts/SquishTests/output'))
-    except Exception:
-        pass
-
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-
-    startApplication("qview")
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/I26649003RDR.crop.tr.lev2.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    waitFor("object.exists(':viewport1_progress')")
-    waitFor('findObject(":viewport1_progress").text == \"100%\"')
-
-    test.vp("viewportContents")
-    
-    #  Save viewport as the "Full Image"
-    activateItem(waitForObjectItem(":qview_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":_QMenu", "Save As..."))
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 105, 11, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "../src/qisis/tsts/SquishTests/output/saveAsFullImage.cub")
-    clickButton(waitForObject(":Save As.Save_QPushButton"))
-
-    waitFor("object.exists(':viewport2_progress')")
-    waitFor('findObject(":viewport2_progress").text == \"100%\"')
-    snooze(1.0);
-    test.vp("afterSaveAsFullImageViewport")
-
-    # Save viewport "As Is"
-    mouseDrag(waitForObject(":qview.saveAsFullImage.cub @ 137.778% (Gray = 1)_Isis::ViewportMdiSubWindow"), 523, 22, 224, 19, 1, Qt.LeftButton)
-    mouseClick(waitForObject(":viewport1_contents"), 235, 380, 0, Qt.LeftButton)
-    mouseClick(waitForObject(":viewport1_contents"), 275, 29, 0, Qt.LeftButton)
-
-    activateItem(waitForObjectItem(":qview_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":_QMenu", "Save As..."))
-    clickButton(waitForObject(":Save As.Export As Is_QRadioButton"))
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 43, 14, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "../src/qisis/tsts/SquishTests/output/saveAsIs.cub")
-    clickButton(waitForObject(":Save As.Save_QPushButton"))
-
-    waitFor("object.exists(':viewport3_progress')")
-    waitFor('findObject(":viewport3_progress").text == \"100%\"')
-    snooze(1.0);
-    test.vp("afterSaveAsIsViewport")
-
-    # Save viewport as "Full resolution"
-    mouseClick(waitForObject(":qview.I26649003RDR.crop.tr.lev2.cub @ 275.556% (Gray = 1)_Isis::ViewportMdiSubWindow"), 77, 19, 0, Qt.LeftButton)
-    mouseDrag(waitForObject(":qview.I26649003RDR.crop.tr.lev2.cub @ 275.556% (Gray = 1)_Isis::ViewportMdiSubWindow"), 6, 2, 230, 298, 1, Qt.LeftButton)
-    activateItem(waitForObjectItem(":qview_QMenuBar", "File"))
-    activateItem(waitForObjectItem(":_QMenu", "Save As..."))
-    clickButton(waitForObject(":Save As.Export Full Res_QRadioButton"))
-    mouseClick(waitForObject(":fileNameEdit_QLineEdit_2"), 108, 9, 0, Qt.LeftButton)
-    type(waitForObject(":fileNameEdit_QLineEdit_2"), "../src/qisis/tsts/SquishTests/output/saveAsFullRes.cub")
-    clickButton(waitForObject(":Save As.Save_QPushButton"))
-
-    waitFor("object.exists(':viewport4_progress')")
-    waitFor('findObject(":viewport4_progress").text == \"100%\"')
-    snooze(1.0);
-    test.vp("afterSaveAsFullResViewport")
-    
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-
-
-
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try: 
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsFullImageViewport b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsFullImageViewport
deleted file mode 100644
index 91a6cc1e73c71677138a28c4e8dc88943200e8c2..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsFullImageViewport
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport2_contents" type="PNG">iVBORw0KGgoAAAANSUhEUgAAAfAAAAHwCAMAAABucs3UAAACjlBMVEUAAAACAgIDAwMEBAQFBQUHBwcICAgJCQkMDAwODg4RERESEhIXFxcYGBgaGhobGxscHBweHh4fHx8hISEiIiIjIyMkJCQlJSUoKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6Ojo7Ozs8PDw9PT0/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTX19fY2NjZ2dna2trb29ve3t7f39/g4ODj4+Pk5OTl5eXn5+fq6urr6+vt7e3w8PDy8vL29vb39/f6+vr7+/v///93b0A1AAAbgElEQVR4nO3daXck130e8HFs044S2VFkiZEpxgodx9RCK4pEyZapIbURJGdIzIaZAQb7vjV2NIAGet+7qmvft67eN/SgMQCGQ3JIh5GUWN7kKLYcfJsU9R3uuTm3/r9zMC/m1XPOc6rq3upb9165AgAAfpPIZIxELBY5PMxkk0ncaQByyWw2H0kmDw8OErFoFHcagFyRolKxZDJ1dLQfTiRwpwHIQeE+Q2cyxWw8nolGo3F4hvtAkWXzWYqiY7G9vXAYdxqAXDaXy8TzebpYDCehcB+Awv0lnf9ENtvc36fjR0e44wDU+BzDhNOJRDiTmUlEIrjjANSgcJ8R5ExmPZlO71DUQTEWwx0HoMbLDEOl02k6nY7vwYsX8ql8Pl+kvFF6KsWG83nccQBqULjPWLlCIVdWFIGm8/lMBnccgJpcUBTa+ZM/+XmxmM/H47jjALQikcsoTavdw8P/E43G4KcT4kHhPkNRMYPnabpQoLLZFLxYJV69XpILBa5wdJTPZgtZ3HEAalC4zyQSdMCbkpU4LkFRiRTuOAC1UslRVbXActwhzydg0Ea8SqUjVCpaQRCKNF0s4o4DUIPCfcY0O5ZpZkRZph2HTuOOAxATbVux1tclLhKReB4ucOI5ptnnDg7yOvcJFXccgBoU7jOu40iP3nyz/iibFWiaxR0HoGZ6o/PiwcH5jdXVoqrmcMcBqEHhPlOV5UeLH3/81uXAAM2yMCsjXodh6Hwmc/lXup6XJFjQRrxHksQxHJfbEEVZEGTccQBqULivVCqlRoNWTFOgWNabisOSVcLVao5lUelYLKnwvMIwuPMAxKBwn+l0FFVNaeEwq7uuC1+dEO/42Nzc1JY5ztBl2dR13HkAYufnsqIY2VJJzuo6w/O48wDEoHCfEUWdoizTMBiGoiqFAu48ADFFUWRZLXlzcIlleU3DnQegVaYozuucLRYZqlhkOQ53IIAWFO4zLEVJkiR7t3O6KIoG7jgANVlVvQe3ZkkSw+TzMEYnHhTuM64gSBxX1FhWEFgW1jcRj7Es1nEUjeMkxhu04Y4DUGtalq4oknd9KyLHwe4PxIPCfUY1DDsSkTnD0OI8D0tWSVfiXddU1RJnmhRL07C+iXSKbppGuWwrgiDnKAp3HIAaFO4zVa/wqjcVlxSFy8D6JvKVNcfpKkqO5ziWzcKOXcSDwn3G0TlOjkY1LpstpCUJdxyAmqQpCivLWsHrXYflLuTTFNO0WTajcpwKqx98AAr3FcdRbdM0Ox1NF8WimINfRwknyyqvqt4zXBF5noJZOPF43ijxvGjbnCgIGmzJRzwo3GcsixVU1WAYscCyDPxURrxs1lRUVeA4hTVNDr4yIh4U7jOyLCgMwxaL0ie7rMKkjHifFO44CsuquUxGoXHHAYhptm0ZhvFTw9Dz3gUOo3TSQeE+k1JV1XIcPRoVuMNDeJFOPJXnbV3TZFHk04UCPMKJxxiGUlUUheNkhudhz03iQeE+w0qSN17TGVFkuGwWPiQkXlOSTO8CF2TZq16CIyiJB4X7jOy6qpXPe2VzciIBa5RJJ2vVaklpNr0rXBJTKQV3HoCYVtE0Q61Usoqi5mQYpBMPCvcZQ9e0LK9pMUEwu6KIOw5AreTatlCs1YqqyuRpeLNKPMXieVVoty1ZLnml444DUIPCfUZTZbkgXVyk8nmRgVs6+YpKLleUBKFAUYoG232QDwr3FVGUOYribFFM8HwhA9My0klS3ru6KUsQvpzJlGQ4oY50inJkcxwtUxQlCAK8SCceFO4ztm0IHCe4HJej6cL/wh0HoGYYsmQYhsCyeW/QJuCOA1CDwn3GsmhOkhSOZdliUbBxxwGo5fO847o6qyhcNluGN+mks3je8CbfmqCqEs9L8NqFdFC4z7SKRcpUFLmsaaZplvZx5wGIidGoapkmW1NVjufhEU48b4TeVG1bc23bnJ2FF23Eg8J9xuW4RslxHFWWrUQC1igTz1TVcsk0narXeb8PVzjxoHCf8UbolWqppJulkuC6MA0nXKNRsqx62bYbojdo0zS4wgnnunXTdJuWVdIMo9RowI5dhIPCfca2K45jOqZpeYVLnQ7uPACxet2bgpuWomiKZbkF2EeZdN6lXS4btmVZsmXpu7u48wDEoHCfKZdLuu6Ytl0yqlUzA4dfEM799Tt0t+L1LqiqvbCAOxBACwr3mYqiVEqlquEVXn30SIJDZklXdV3bMBzLccp6u12MxXAHAmhVGg1vhN6yHSfoZrOw9wPxoHCfcVuthm1XLU2r12hawh0HoNasVt1arW67bqe8vAzrm4jnmmbZG7CVqtV6JRSCWzrxoHB/Mc163SmXqxXvr7uwYOLOAxBTSrKsVypOrVYzmVTqAHcegBgU7jO2o+u2aVqVSqUuyjJMy0jXcRzHdZyS91eVZmdxxwGomWahUM7nWbtcPm5MTuKOA1CDwn2GyzBMOhLhyq1WWw2FcMcBqClHDGOx7Fy8Xu+Wl5ZwxwFoiSJfFgRalsPeKL30ZG8PdyCAFhTuM7reKHNcQRRLfKWi8rqOOxBA68MPb2ZzOdEwcuVwmFNKJdyBAFpQuM985SsB7Z//OVcqfXIMAtfEHQeglstVnV/9KuM4tBaP6wbuOAC1YvHnP7+8/Nt43Eisruqw9wPxoHCfubwM/u3l5UIsFskWi2kWdxyA2IsvvJDK0rTiuuqOaeoW7jwAsdnx8aW//8UvMhRVThwesrCtLumgcJ8ZYFnu8vLSbbdTOUXJw6CNdGcM878vq1Xhgw8mtUIBtmAkHhTuM01ZPv779XWnVLrFaBocMUs8W1V5p9tNuS5FCwKPOw5ATc/lFJth/i4YFHjHyeOOA1CDwv0lE2k0mkXbTszP5zgdXrQRL1HhuBNGlqssq+q2DasfSAeF+4yichwtsqwUDquabcOpwqRzVUVpijTNsKypw4pV8jlqp5M0FGXeMOjq976HOw5ADQr3mWrVttuKac56UzJYouwDLUnTjPrOjqyqFQme4aRzXa1ULHKFSiUlSZwB2yiTDgr3mUajwktSluJ5mefdFtzSSecV7sqyXFQUsVymJI7DHQigBYX7TK/XqHtle89xRVHk93HHAag1m7Ymy4diIsEwjAhPcOJZVjEvCLIqSYZpHsEWjMSDwv3FrdedgqrSmmHwlUoOzpglnatp9zhZVhRd51IpDtYok87SNFETBOYpw3DFIivgzgMQg8J9xv7pT9WSpnFtjktmswx8hUA6QRQZTRT1aZ4XGAY2WSUeFO4zHE3zsmlqsuPE02m4oxNPV1VVarc/ljWNYdki7jgALdOsnJ25bUFwcwyTC4XgRRvhoHCf4XlvDn6qiqKU47g0y6ZwBwJoKYo3Sm/XfvITms9mD9PpJO5AAC3DUItFlrLtmMxxiXQ6gzsQQAsK95lGQ9J1jmGYjMKy8RQ8wknHcaplMTTPs6phHOZyuPMAxKBwnzEMvd3WNJpuWTy/mc3izgPQqptm5b33dLterzg0XaRp3IEAWmXX7VQqjVqr1S7RdDqdxh0IoAWF+0ytVqv/8pcnp61W5cPDwwIDSxgJ1+t2Pzg+7p4cHzeDhQIFnwqTrnp83KlWH/WazUd5hoHDbYgHhftM6+zsg6dPe45pJmldhxs68U4+/PDjfv+kbVmOzvOw+oF4ULi/nPc++uh/Xly0TkzTKjUaUDjp3u+///55t3tSr9cbbrNZw50HIPbu+clJs153Odu2W/1+BXcegBgU7jPnT7rdh+12Q7SsfqVWg1s66R5KZ2enzeZxrdk8O2k0cMcBqD153O/Xe72a/fDhSR22YCQfFO4rx8dPH52e1up15/ji4qwEt3TSnZ9/8H6v1+10es1W66QvwXsXwkHhPvPuu+de241q9aE3By+3HQd3IIDW48enlUajXKu1O7btbLdauAMBtHo959GjRx1v3NbMZhv1dht3IIAWFO4zf/M35frxcafbfexaVvsMdxyA2tOnUr/TaT55cuI0Gp0e7jgANSjcX07Pzy867Xa7VmtUyt7NHXcegFjn8WPz5OKiJ0m9J71eXcSdByB21m43sv1+q1r9H6ZlZZq48wDEoHCfOWk0Tiqnp72LC7HKcZVJ3HkAYifNZq1Wrda63dJ5qaTDd0aka1SrlYvT03axmP3Ts7MO7jgANSjcZx71+4/ff/Jkv9l8gbLtS9xxAGLnjzqd7nuSxJnmcPb8HAonHRTuM+8dt1oX5x9/LDOM9PDevSPceQBiF2f9fuNDSWLqdS7hOAbuPACxx6cffBBnHz5kOK4il0rwKp10ULjPvHd2cVFccl21UuElUYTCSXfaPjtrdjTNqdcj2QKcIk24bvf8UbvdazSb59VqTizCeWWEg8J95uHDi3673bY7nb8rl2vwISHxRkYen15cnDr9vlWp2A58ZkQ6KNxnDOOj9ulp9+Tdd88qlb5omrgDAbSePn3833u9h48//PD84cOHjWoVdyCA1rvvfvRBu13rvvde3eu7A9+Gkw4K95l//MfK6fl52C6XT9rtLnx1QrqzRqPbr9XcY28u3uudQOGk+/D4uN7rdDr08XHv9LQFX4aTDgr3mb/qduu9R4963V6vryhNHncegFizWq17ZbeaZ2eVfv8CtvMhHRTuM3a/7/ZarbpVq9UN48TCnQcgdtxqOf12u/5Ru908Pj7HHQeg9rhabTu6Xu8IQqXZhG2UiQeF+0qn0y+Vys2Tk47T6/Xa7RLuQACt4+OzSqXWOz7+ZODW6nbhqxPCPX7cdl2z2es1bdv+5LB43IEAWlC4z1xc6M1m9WG77bY6nWql4uIOBNDq9Rre/Lt1ehpsVKtVRXFxBwJoQeE+8+SJ3uu1+t1us9Zs2hqcE0+46sVFvdFol/v9KicIhizjDgTQqslyu91+aNZqldbl5RGsSScdFO4z/VSq0evVKuVyTWcYFT5CIF20Xu92u6VKNluxRVFWFNyBAFpmr9evVrWW6wq2aeoWLH8gHBTuM03XLdt2I6Pr3u1cSds27kAAraptu6VSQTNNQzVNF3ccgBoU7i9WyTS9zhXVMGRFFGGMTrqGWy7/J4pybJ6vy8kkvEknnWNbljdYUzTLqtOwBSP5oHCfcTXbNmxbFVW1m5JlWKNMOldzP+nctR1HVjUNfjohHRTuM67XsiXLYknTBCWfh2/DyaaqNUPXLccxdJ6PyQyDOxBAS1V1Q1UV19XNXE4uwoI20kHhPhON2oo3J7MszdzYkAVY/UA61eu6XFaLRU5UFJODsy9IVy4XNY5jdZ0NSx6Owx0IoAWF+0ypZIvlMkXTQqJQoKjVVdyBAFqqaohe09ksV+N5Jp/J4A4E0ILC/UUwDFNKpVYoiipwHMXizgMQE2TZYGm6mEoVxWQyn8CdByCWUxRNjETyopgrsmwphzsPQAwK95liq1XYZ5hcsViIeVMz+G2UdDzHqZyuG0dHTEKSNqK48wDEuFpNYhWF2d2NxXd2kmnceQBiULivFItphilwodDK+nqCDgZhVkY4w2ByOb0+PR2OxbZjoVASdyCAFhTuM4LAxuPZze3taDRKB1OpMO5AAK1cLheNHm6Fw+F0OkdFo3XcgQBauZyr6xFPPJnMUm3YRZl0ULjPMMx0PB5MxrzxWugw9swzC7gDAbRUdXx1NVLI5xOp1BH1la+M4A4EkOIODnYSiUQ4mTzY2jraev553IEAWlC4z6RDITqRiOSTyXwmEyyysMCJcImDg1gmk85L0jbLRotheO9COCjcZ7Icx2QydCIYzMfjtdz6Ou5AAK1soRBjGLoQicTX1/dzh4e4AwG0pEhkOZ1OhePxRDyezu3v4w4E0ILC/SXE5XLpVCoaDQRyiQQTh1s64RI0RVEcl+X395OZjACzcNJRQfnXO+IXdZ3OZApwXBnpoHCfSTCCkMpkFJai4qqqVXDnAYhRfLPJSxLDRCLFcJhVcecBiEHhPsMwoqgWClyMopKiCKN04nEsx/HdLlXM5QqmCbvqEo7n65wgFAqFbDGd9qbjedyBAFpQuM+USoJcLNI0nZc4LsXCchfS7e+LtqryFFXUEgk+EoHvyggnippoGKIo8nw2a+zvZ3EHAmhB4T4jilXRNE1v1EZJUi4cho3SCafrtm7bvKoWqNVVxrI6uAMBtKBwfzFMs5z1HuCyXMjH496sDH4dJVuhXi+osswqCi9WKpIk4Q4E0JIYRndtm9a0KF+rZeEkBNJB4T5Ds6zJtdvVeJxTy+V9Hn4rI5wkijHaMA4VReaKxQIcX0U6KNxnRJqmmM3NHMOwOdfVRRF3IIAUJQYCYoKm5USCTltWxoRjw8kmpxlmkT044Pf2CpVYjIVbOuGgcJ95L5L2MIwQiRQi0SiNOw9ATAldvz58fWDgMBiUmiwbwJ0HIDb/jRdfjKbC4UQ0yq4HgxHceQBiULjPTB6EQlv7mQwrCKu3/+EfYAUj6VasUOgwQ1GxtbV6+Ze/hAPqSAeF+8pXv7p3GI8ns5IUXVjoPb683MSdCCC1vR2MHh3F0jwfoqj3zi4vcQcCaA0Pb++Hw+O7W1urT59a+j/9E+5AAC0o3Gdu3FACgcBOPhJpfPaz3CWsYCRdILB5TVHWhWbzJ//yL5eXa2u4AwG0xsd/katWa69cXv7q8vKyGIBX6YSDwv2l/ORJ6l4wmC1/9NH/LZWurQ4M4E4EkFIlKScFgxZlWYvb20tjX/oS7kQAKSjcZ8R33gkY0ShNR6Pji4vjn8WdByC212qpTKHAUKnU4fj4n+KOA1AzLYspRKOdYCRy69q1f4U7DkANCveZkiA4nKKkjk5OFp999sq/wZ0HIEYlk4X43l4hEYlMfepTVz6HOw9AKpWiFSWULhT4o0jkvvcfn8KdCCAFhftMJkOn01woFpMjgcB13GkAcqoaD4WiW+l0dC8W+y9XroziDgTQgsJ9hmGyu7vxvUxmZ/nmzXeuXPk07kAArUwmHI+HvSnZ+uidO//1ypUXcQcCaEWjyXx+O7izszxx/fpf/MZvvIQ7EEALCveXfDabCYX2uY2Nuds/+MFzzzwzjDsRQCqUSCQOD4OBubnJHwwOes/wN3EnAkhFvBFbMLg2OT5+4+r161d/7/dwBwJoQeE+k85mDzY2NidWVm5eGxj4d+PjuAMBtOidnZ3t7Qd37t4dvPajH9394hdxBwJoQeE+c7S9vTc5ee/a3bubw88++9/eegt3IIBUdDcSWZucHLm/vDz03HPP3R+GaTjZQolwODA9PXr71Ve/9ruvvjo4PY07EUAKCveZ3djW1uqtW7ffeOmlb9166617t2/jTgSQ2lpdX78zNPT2N7/4xWvT9+/D6gfS7a0tLw/euvXV/zA4OOxd3g9w5wGIQeE+s7UyOzv+zW9+7T/OzU0NDw1N4c4DkFpbW5mdmvrB5z9/9ZXJyYX7m5twhZMNCveZsbHlyaGh77722suDS0vL82tr93EnAkhtbIRGRkZef/7523Nzc+tTMzOv404EkDo6OlgYHv6zz31ufGp9feXt738fdyCAFhTuM9Ho/uxrr/34z/98YmVr6/b1+/AIJ9zh4dH0zZs3vv71wNqDBy/fvnkTdyCAFhTuM8lkeGVi4vbQ0PCta9f+8j4UTriFpaWFO3/4hz+6e3docGDgzvCNG7gTAaRW5udv7n7jGyHv6h4YGro3urSEOxFACgr3ma0f/nBs46//+vb167df2di4f+PWLdyJAFLfGxmZfPvNN6du3br5nTt3RlZw5wGIjc3NjS3u7QVu3rz6xoMHdxZw5wGIQeE+sz4zE1gIh+dmZiZmbt9+B34MJ9zk2vLy/PCDB/dHR+den5m5fg93IIAWFO4zAa/wtY3x8fHZ2bnb3/72AHxWRriZ6VDoYHlycmdqaub+K6/chTfphFvcmpycHp+ZuXPz5ujqCy/M4s4DEIPCfcYbss3P/q73HF9Z2Zh96aVv484DEFtZXl5eXfL+2d5eXnzzTfhQmGyrq9vD8/MTW+l0fHDwzc8ODs7hTgSQgsJ9JhC4vzA0NHXwxhuD3/3u1fszM1A42dbXb29MTa0NLS29/frr0xPz8/DrKNmgcJ+Znp5eXlq698b4+IM7d0b3V1dxBwJorawsrIVC9yauXp2fng5OLS7iDgTQmp3d2o3Flm9MTXlX9+7R4SHuQAAtKNxfFlZXNzb29zfHfvzjf2uaMwd7e7gTAaR21te385ubu7tXr17b3l5eWlvDnQggtbK7u7k1MbGw+847r92589KrY2O4EwGkoHCf2V5bCy5OTMxMDg6Gvvzlb3wHpmWE2w8GD5Y3NuaX/viPv/CZzwxt4M4DEIPCfWZzc/MouLKyE/rWt340MDAKX52QLR6fX1paP9zf37k6OPjmO+/c3sWdCCAVj3ORSDiSSMw98+yzP56aWgjjTgSQgsJ9JpHgOI6ODAwMXPnt3/79L3xhbhJ3IoAUTecYhvr1hg+f/vTLd+8GErgTAaQoSnCcK97VfeX7r702OTICqx8IB4X7DE0r3r9rV69evz07u7y2FsQdCCAVOTtTf+d3/uib09Mbh+n00eFhGncigBQU7jNKLPaXr7zywutLSxuHmUw6EIBpONmE7e1///Wv/+sfjo+vhnZ2vhONRnAnAkhlKGrgpZf+7LmpqZ1QMplV1VPciQBSULjP0LHY+G/91ov3Z2bWoqnUAcfJuBMBpOREYv/Klc9MLC8vbsXj4VwOdyCAVFiJx//zb/7mi9NzcxMpy1INA3cigBQU7jNUYX//j15++flb6XT4UBQF08SdCCC19/aVK58bHf18oN0Wk4KQiUZxJwJIQeE+E3/xD/7gwdbWz46mpmYXd3fTNI07EUBq6y++9KXNzc3iXr/PUPV64Wc/w50IIDUwPDo6Ojl5fXx1de5rJyfwZTjpoHBfeeONoZm5uY2jo7Wj3d3Ro6WlO7gTAaTm54924vGDsbHF5QcPVh5sbEziTgSQgsJ9JpFYmh0bG11dnQ+srU3MTEyM404EkNramrk5Nzc1NxeYnZ+fHl5fh60AyDY7uzkzOjo1NbU4PDKyPL24CIvSyQaF+8z4+PLm8vLqysp4YGJiYzYQwB0IIDUfCCxvjY1tLi5ubq2ubu/BBm2EW9jY2FwOBjc2N7fX9vd3Do+OcCcCSEHhPrOzsTG9tbu7v7+/GVxfX4nBJquEm3vwYDmwubmzurq/vLubSu3Cfj5kg8J95v7w8MTCgwfjMzNrQe/OvrECZ52QbWJxcXRsampqcnJkdno6MA+HnZBtcmFmZmJ+enppa2tmOhpd2sQdCKAFhfvMxMrS0sLU2Nj9iYmD9fX11QncgQBaYwtjY3PTExNDc3Nz9xYXV2BXXcJNjs7N3fIGbm+NjNwJjIw8GMEdCKAFhfvMnfHBwbvjIyND9+/P3xgeHp/CHej/P/8PJh2deppRy9sAAAAASUVORK5CYII=<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsFullResViewport b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsFullResViewport
deleted file mode 100644
index 756fdbc5aec072eb36c5b78229251e35397ec76f..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsFullResViewport
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport4_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsIsViewport b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsIsViewport
deleted file mode 100644
index 93a3b9a09d0b0667beaffe572abe05ebdbf543ec..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/afterSaveAsIsViewport
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport3_contents" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/viewportContents b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/viewportContents
deleted file mode 100644
index d0d8cf8791f26b512eee731f0de0f4224352dc4a..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_SaveAs/verificationPoints/viewportContents
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/test.py
deleted file mode 100644
index 35779fd8d2b7d83966098e0382a3b285f0cd0514..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/test.py	
+++ /dev/null
@@ -1,71 +0,0 @@
-import shutil
-import os
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    startApplication("qview")
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/approvalStatusTest.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    
-    # Finished with initial run
-    clickButton(waitForObject(":qview_statisticsToolButton"))
-    mouseClick(waitForObject(":viewport1"), 280, 378, 0, Qt.LeftButton)
-    waitFor("object.exists(':Statistics.Hide Display_QCheckBox')", 20000)
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").text, "Hide Display")
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").checked, True)
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").visible, True)
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").checkable, True)
-    waitFor("object.exists(':Statistics.Hide Display_QCheckBox')", 20000)
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").text, "Hide Display")
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").checked, True)
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").visible, True)
-    test.compare(findObject(":Statistics.Hide Display_QCheckBox").checkable, True)
-    waitFor("object.exists(':Statistics.Minimum_QLabel')", 20000)
-    test.compare(findObject(":Statistics.Minimum_QLabel").text, "Minimum: 1.73616e+06")
-    waitFor("object.exists(':Statistics.Maximum_QLabel')", 20000)
-    test.compare(findObject(":Statistics.Maximum_QLabel").text, "Maximum: 1.7362e+06")
-    waitFor("object.exists(':Statistics.Average_QLabel')", 20000)
-    test.compare(findObject(":Statistics.Average_QLabel").text, "Average: 1.73618e+06")
-    waitFor("object.exists(':Statistics.Standard Dev_QLabel')", 20000)
-    test.compare(findObject(":Statistics.Standard Dev_QLabel").text, "Standard Dev: 14.881756")
-    clickButton(waitForObject(":Statistics.Hide Display_QCheckBox"))
-    test.vp("initialDnDisplay")
-
-    clickButton(waitForObject(":Display Mode.Show Pixel Values_QRadioButton"))
-    test.vp("stretchedDnDisplay")
-    
-    clickButton(waitForObject(":qview.Spatial Plot Tool_QToolButton"))
-    mouseDrag(waitForObject(":viewport1_contents"), 388, 136, -338, 21, 1, Qt.LeftButton)
-    test.vp("spatialPlot")
-
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-
-
-    snooze(1)
-
-
-    
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/initialDnDisplay b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/initialDnDisplay
deleted file mode 100644
index f171423b228dce21f07334c6d63bf68c1b0190f2..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/initialDnDisplay	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":Statistics.dnDisplay" type="PNG">iVBORw0KGgoAAAANSUhEUgAAAcwAAAHMCAIAAADXuQ/RAAAACXBIWXMAAAuJAAALiQE3ycutAAAMN0lEQVR4nO3dX2jV9R/H8c9ZP2iFFZUJRiReFJE2EoroogsvHGHhrURGG2K5jNgKoq68ikpiQkhoXriGP2J5HZmMIKEuhLqqK2+KbtK2QMMiqp3fxfCwn1P76s7r/H08rvbdzr7n45vx9Jzte86ndvSjIwWAjIF2LwCgl4ksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBIksQJDIAgSJLECQyAIEiSxAkMgCBP2n3QtotR3Pj7Z7CdDXjn50pN1LaKm+i2wppV6vt3sJ3aFWq5lVRWZV3X+np9q9hJby6wKAIJEFCBJZgCCRBQgS2UpqF13lS7VabfXq1aWUmZmZBx544Oabb3700Ue//PLLUsrCwsJ7771333333XDDDYsnWX7C5ee5+nqWHp45c2Z4ePjWW28dHh4+c+bMZe+xZVowq9nZ2Q0bNtxyyy1PP/30/Pz8v65n6WFHzWrpIps7tGPHjm3YsGHxNidPnvzXe1962Jkj6l4iW0m9Xr/S347rF3399de7d+8upXz66aeff/75/Pz8xMTEM888U0p5//33Dx069PHHH//111+L51l+wuXnqe6NN9546KGHfvrpp40bN7755puXvceWacGsRkdH9+3bNzc3NzY2tvjvra6jZtXQ9KEdO3ZsZmbm119/ffHFFxdvU11njqh7iWzTvPXWW3v27CmlTE9Pr1u3bmBg4MYbb7zrrrtKKQcPHty3b98jjzwyMPDvA2+c5/Tp05s3b161atXQ0NCpU6eu8i0nTpx49dVXb7vtttdee+3EiRPXeo+tt8JZ/fPPP+Xi46/PPvus9PSsGq5paJ988snGjRsHBwc3b9580003lf4YUWcysub46quv7rjjjrVr1y4e1mq1wcHBXbt2HTp0qJTyww8/zM7Orlq16v777z9+/HjF8+zcuXNkZGR+fv7dd9/dtWtX+f8nlUs/npubW7NmTSllzZo1v/zyyzXdY+utfFaHDx8eHx+//fbbv/jii7m5udK7s2q4vqH9/PPP27dvn5ycLH0woo4lss2xd+/eiYmJxmG9Xv/9998PHDjw3HPPlVLuvPPOrVu3zs/P79+/f+fOnRXP8+23346MjAwODm7duvW7774rS545XvLx6tWrz549W0o5e/bs4kOb6vfYeiuf1VNPPXX69OkLFy488cQT69evL707q4brGNqpU6cef/zxiYmJbdu2lT4YUccS2SY4efLk33//vWnTpsXD8fHxxf//BwYG/vzzz1LKk08+WS4+vb3KE65LzrNp06apqakLFy7U6/XFJ8hXsmXLlsnJyXPnzk1OTm7ZsqX6PbZes2a1sLDwzTffvP7662NjY6VHZ9VwHUM7fPjwtm3bPvzww2effXbxu3p7RJ2sH19Wex0af1Fd/KBer9eWvIxy79694+PjjRsPDQ09/PDD58+fHxoampmZKaW8/fbbIyMj27dvv/fee48cOXLZEy4/z/T09Msvv/zKK6+cP3++XPXVwO+8886OHTvuueeexx577OjRo5e9x5ZpwaxqtdrAwMD69evHxsYav6bsxlk1NH1oL7zwQilleHh48Vt+++23bh9R96r125s17Hh+1J9HK6p5PX5lZlWd9y4AoGlEFiBIZAGCRBYgSGQBgkQWIKgfr5P1NkIV1UspZlVN3c9VZf122Wg/Rtb1jFXVasWsKnKdbGWukwWgaUQWIEhkAYJEFiBIZCtpwb5V17SNUidvytSCWS0/z9XXs/Sw32bVe/uhdR2RraQF+1atZBuljtqUqQWzWn6e6vptVr23H1rXEdmmWeG+Vctv08ObMtkPrTr7oXU7k2qOle9btfw2vbopk/3QqrMfWg8Q2eZY+b5Vy2/Tq5sy2Q+tOvuh9QCRbYKm7Fu1/DY9uSmT/dCqsx9ab+jHl9Veh8YfUmuxfauW36ZLN2VqwayWn8es+mc/tK5jjy+uzHsXVGdWlXnvAgCaRmQBgkQWIEhkAYJEFiBIZAGC+vE6We8eVJE9vq6Jn6uK+u2y0X6MrOtkK6rZt6oys6rOdbIANI3IAgSJLECQyHaoxpt7tnshXcCsqjOr1hPZlqrValNTU0sP27eWTmdW1ZlVJxPZVpuenv7xxx/bvYruYFbVmVXHEtlWO3DgwO7duxcWFpZ+8pKtWFu+qA5lVtWZVccS2VZ78MEHh4eH9+/f3+6FdAGzqs6sOpbItsH4+Pjs7Oz333+//EuXPBLBrKozq84ksm1Qq9UOHjz40ksvNT5z9913Hz9+/I8//vjggw/auLAOZFbVmVVnEtn2WLdu3ejoaONwcnJydHR07dq1586da+OqOpNZVWdWHcgeX1yR1+NXZ1bVee8CAJpGZAGCRBYgSGQBgkQWIEhkAYL67hIugFbySBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYgSGQBgkQWIEhkAYJEFiBIZAGCRBYg6H/rFF727W1wOgAAAABJRU5ErkJggg==<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/spatialPlot b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/spatialPlot
deleted file mode 100644
index 78e22428d175ecd498a2df7f6809f97addad23f0..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/spatialPlot	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":Spatial Plot.QwtPlotCanvas_QwtPlotCanvas" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/stretchedDnDisplay b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/stretchedDnDisplay
deleted file mode 100644
index 6de3925e3addfb1cd7ab28a0e62b5710da9f9219..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Stats tool visual stretch m00199/verificationPoints/stretchedDnDisplay	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":Statistics.dnDisplay" type="PNG">iVBORw0KGgoAAAANSUhEUgAAAcwAAAHMCAIAAADXuQ/RAAAACXBIWXMAAAuJAAALiQE3ycutAAAGk0lEQVR4nO3dsW3CQACGURNlHtagJxXTgSNSwgKRosxAFsoENGc+GaH3+l++6tPJzW3O83ECoPG29gEAXpnIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQiILEBJZgJDIAoREFiAksgAhkQUIiSxASGQBQu9rH4DX9P3zO7w9HA7D291uN7z9+jwNb+EeN1mAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWIOSNLxLzPA9vTwu20zT93W5L5vBYIssz+tjvx4aX6/WxJ4GF/C4ACIksQEhkAUIiCxASWYCQyAKERBYgJLIAIZEFCIksQEhkAUIiCxASWYCQyAKERBYgJLIAIZEFCIksQMjzMzyjJa/IbLfbseF5Pg5/FO4RWZ7OZu0DwAP5XQAQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmA0Ma7RgAdN1mAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFCIgsQElmAkMgChEQWICSyACGRBQiJLEBIZAFC//5BGx044rJxAAAAAElFTkSuQmCC<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify Clean Launch and Close/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify Clean Launch and Close/test.py
deleted file mode 100644
index e7907b9c293117a5116299af642ac497122537e6..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify Clean Launch and Close/test.py	
+++ /dev/null
@@ -1,147 +0,0 @@
-import os
-import shutil
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    startApplication("qview")
-    waitFor("object.exists(':File.&Open..._QAction')", 20000)
-    test.compare(findObject(":File.&Open..._QAction").enabled, True)
-    waitFor("object.exists(':File.&Browse..._QAction')", 20000)
-    test.compare(findObject(":File.&Browse..._QAction").enabled, True)
-    waitFor("object.exists(':File.&Save_QAction')", 20000)
-    test.compare(findObject(":File.&Save_QAction").enabled, False)
-    waitFor("object.exists(':File.Save &As..._QAction')", 20000)
-    test.compare(findObject(":File.Save &As..._QAction").enabled, False)
-    waitFor("object.exists(':File.Save &Info..._QAction')", 20000)
-    test.compare(findObject(":File.Save &Info..._QAction").enabled, False)
-    waitFor("object.exists(':File.Export View_QAction')", 20000)
-    test.compare(findObject(":File.Export View_QAction").enabled, False)
-    waitFor("object.exists(':File.&Print..._QAction')", 20000)
-    test.compare(findObject(":File.&Print..._QAction").enabled, False)
-    waitFor("object.exists(':File.&Close All..._QAction')", 20000)
-    test.compare(findObject(":File.&Close All..._QAction").enabled, True)
-    waitFor("object.exists(':File.E&xit_QAction')", 20000)
-    test.compare(findObject(":File.E&xit_QAction").enabled, True)
-    waitFor("object.exists(':View.&Fit in Window_QAction')", 20000)
-    test.compare(findObject(":View.&Fit in Window_QAction").enabled, True)
-    waitFor("object.exists(':View.&Actual Pixels_QAction')", 20000)
-    test.compare(findObject(":View.&Actual Pixels_QAction").enabled, True)
-    waitFor("object.exists(':View.Zoom In_QAction')", 20000)
-    test.compare(findObject(":View.Zoom In_QAction").enabled, True)
-    waitFor("object.exists(':View.Zoom Out_QAction')", 20000)
-    test.compare(findObject(":View.Zoom Out_QAction").enabled, True)
-    waitFor("object.exists(':View.&Pan Left_QAction')", 20000)
-    test.compare(findObject(":View.&Pan Left_QAction").enabled, True)
-    waitFor("object.exists(':View.&Pan Right_QAction')", 20000)
-    test.compare(findObject(":View.&Pan Right_QAction").enabled, True)
-    waitFor("object.exists(':View.&Pan Up_QAction')", 20000)
-    test.compare(findObject(":View.&Pan Up_QAction").enabled, True)
-    waitFor("object.exists(':View.&Pan Down_QAction')", 20000)
-    test.compare(findObject(":View.&Pan Down_QAction").enabled, True)
-    waitFor("object.exists(':View.Global Stretch_QAction')", 20000)
-    test.compare(findObject(":View.Global Stretch_QAction").enabled, True)
-    waitFor("object.exists(':View.Regional Stretch_QAction')", 20000)
-    test.compare(findObject(":View.Regional Stretch_QAction").enabled, True)
-    waitFor("object.exists(':Window.&Cascade_QAction')", 20000)
-    test.compare(findObject(":Window.&Cascade_QAction").enabled, False)
-    test.compare(findObject(":Window.&Cascade_QAction").checkable, False)
-    waitFor("object.exists(':Window.&Tile_QAction')", 20000)
-    test.compare(findObject(":Window.&Tile_QAction").enabled, False)
-    test.compare(findObject(":Window.&Tile_QAction").checkable, False)
-    waitFor("object.exists(':Window.Resize_QAction')", 20000)
-    test.compare(findObject(":Window.Resize_QAction").checkable, False)
-    test.compare(findObject(":Window.Resize_QAction").enabled, False)
-    waitFor("object.exists(':Window.Change cursor to arrow._QAction')", 20000)
-    test.compare(findObject(":Window.Change cursor to arrow._QAction").enabled, False)
-    test.compare(findObject(":Window.Change cursor to arrow._QAction").text, "Change cursor to arrow.")
-    test.compare(findObject(":Window.Change cursor to arrow._QAction").toolTip, "Change cursor to arrow.")
-    test.compare(findObject(":Window.Change cursor to arrow._QAction").checkable, False)
-    test.compare(findObject(":Window.Change cursor to arrow._QAction").whatsThis, "<b>Function: </b> Toggles the cursor shape between                                  and arrow and crosshair cursor when cursor is over the                                  viewport window.")
-    waitFor("object.exists(':Window.&Next_QAction')", 20000)
-    test.compare(findObject(":Window.&Next_QAction").enabled, False)
-    test.compare(findObject(":Window.&Next_QAction").checkable, False)
-    waitFor("object.exists(':Window.&Prev_QAction')", 20000)
-    test.compare(findObject(":Window.&Prev_QAction").checkable, False)
-    test.compare(findObject(":Window.&Prev_QAction").enabled, False)
-    waitFor("object.exists(':Window.Close_QAction')", 20000)
-    test.compare(findObject(":Window.Close_QAction").checkable, False)
-    test.compare(findObject(":Window.Close_QAction").enabled, False)
-    waitFor("object.exists(':Window.Close All_QAction')", 20000)
-    test.compare(findObject(":Window.Close All_QAction").checkable, False)
-    test.compare(findObject(":Window.Close All_QAction").enabled, False)
-    waitFor("object.exists(':Window.&Link_QAction')", 20000)
-    test.compare(findObject(":Window.&Link_QAction").checkable, True)
-    test.compare(findObject(":Window.&Link_QAction").enabled, False)
-    waitFor("object.exists(':Window.&Link All_QAction')", 20000)
-    test.compare(findObject(":Window.&Link All_QAction").checkable, False)
-    test.compare(findObject(":Window.&Link All_QAction").enabled, False)
-    waitFor("object.exists(':Window.&Unlink All_QAction')", 20000)
-    test.compare(findObject(":Window.&Unlink All_QAction").checkable, False)
-    test.compare(findObject(":Window.&Unlink All_QAction").enabled, False)
-    waitFor("object.exists(':Options.&Find Point_QAction')", 20000)
-    test.compare(findObject(":Options.&Find Point_QAction").checkable, False)
-    test.compare(findObject(":Options.&Find Point_QAction").enabled, False)
-    waitFor("object.exists(':Options.&Blink ..._QAction')", 20000)
-    test.compare(findObject(":Options.&Blink ..._QAction").checkable, False)
-    test.compare(findObject(":Options.&Blink ..._QAction").enabled, False)
-    waitFor("object.exists(':Options.Tracking ..._QAction')", 20000)
-    test.compare(findObject(":Options.Tracking ..._QAction").enabled, True)
-    test.compare(findObject(":Options.Tracking ..._QAction").checkable, False)
-    waitFor("object.exists(':Options.Measuring ..._QAction')", 20000)
-    test.compare(findObject(":Options.Measuring ..._QAction").checkable, False)
-    test.compare(findObject(":Options.Measuring ..._QAction").enabled, True)
-    waitFor("object.exists(':Options.Show Nomenclature_QAction')", 20000)
-    test.compare(findObject(":Options.Show Nomenclature_QAction").checkable, True)
-    test.compare(findObject(":Options.Show Nomenclature_QAction").enabled, True)
-    waitFor("object.exists(':Options.&Special Pixel Tool ..._QAction')", 20000)
-    test.compare(findObject(":Options.&Special Pixel Tool ..._QAction").checkable, False)
-    test.compare(findObject(":Options.&Special Pixel Tool ..._QAction").enabled, False)
-    waitFor("object.exists(':Sun Shadow Measurements_Isis::TableMainWindow')", 20000)
-    test.compare(findObject(":Sun Shadow Measurements_Isis::TableMainWindow").visible, False)
-    waitFor("object.exists(':Special Pixel Tool_QDialog')", 20000)
-    test.compare(findObject(":Special Pixel Tool_QDialog").visible, False)
-    waitFor("object.exists(':Statistics_QDialog')", 20000)
-    test.compare(findObject(":Statistics_QDialog").visible, False)
-    waitFor("object.exists(':Options.Registration_QMenu')", 20000)
-    test.compare(findObject(":Options.Registration_QMenu").visible, False)
-    waitFor("object.exists(':Measurements_Isis::TableMainWindow')", 20000)
-    test.compare(findObject(":Measurements_Isis::TableMainWindow").visible, False)
-    waitFor("object.exists(':qview_Isis::ViewportMainWindow')", 20000)
-    test.compare(findObject(":qview_Isis::ViewportMainWindow").windowTitle, "qview")
-    test.compare(findObject(":qview_Isis::ViewportMainWindow").enabled, True)
-    test.compare(findObject(":qview_Isis::ViewportMainWindow").visible, True)
-    waitFor("object.exists(':_Isis::AdvancedStretchDialog')", 20000)
-    test.compare(findObject(":_Isis::AdvancedStretchDialog").visible, False)
-    waitFor("object.exists(':Find Latitude/Longitude Coordinate_QDialog')", 20000)
-    test.compare(findObject(":Find Latitude/Longitude Coordinate_QDialog").visible, False)
-
-    waitFor("object.exists(':Elevation Calculator (via stereo pairs)_QMainWindow')", 20000)
-    test.compare(findObject(":Elevation Calculator (via stereo pairs)_QMainWindow").visible, False)
-    waitFor("object.exists(':Blink Comparator_QDialog')", 20000)
-    test.compare(findObject(":Blink Comparator_QDialog").visible, False)
-    waitFor("object.exists(':Advanced Tracking_Isis::TableMainWindow')", 20000)
-    test.compare(findObject(":Advanced Tracking_Isis::TableMainWindow").visible, False)
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-    snooze(1)
-    
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify simple cube open/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify simple cube open/test.py
deleted file mode 100644
index 25a2d84d08916a952d1923bd4578aceb455998ab..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify simple cube open/test.py	
+++ /dev/null
@@ -1,37 +0,0 @@
-import os
-import shutil
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    startApplication("qview")
-    clickButton(waitForObject(":qview.Open_QToolButton"))
-    snooze(0.5)
-    type(waitForObject(":fileNameEdit_QLineEdit"), "../src/qisis/tsts/SquishTests/input/I26649003RDR.crop.tr.lev2.cub")
-    clickButton(waitForObject(":Open.Open_QPushButton"))
-    waitFor("object.exists(':viewport1_progress')")
-    waitFor('findObject(":viewport1_progress").text == \"100%\"')
-    test.vp("viewportContents")
-    
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-    
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-
-
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify simple cube open/verificationPoints/viewportContents b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify simple cube open/verificationPoints/viewportContents
deleted file mode 100644
index d0d8cf8791f26b512eee731f0de0f4224352dc4a..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify simple cube open/verificationPoints/viewportContents	
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><VerificationPoint type="Screenshot" version="2"><Description></Description><Verification object=":viewport1" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file
diff --git a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify tools with no viewports/test.py b/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify tools with no viewports/test.py
deleted file mode 100644
index 352d5559fbcec0230905eeca6088e380acb5b10e..0000000000000000000000000000000000000000
--- a/isis/src/qisis/tsts/SquishTests/suites/suite_qview/tst_Verify tools with no viewports/test.py	
+++ /dev/null
@@ -1,55 +0,0 @@
-import os
-import shutil
-
-def main():
-    # Backup current qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview'), os.path.expandvars('$HOME/.Isis/qview.squishbackup'))
-    except Exception:
-        pass
-    startApplication("qview")
-    clickButton(waitForObject(":qview_bandToolButton"))
-    waitFor("object.exists(':qview_QStackedWidget')", 20000)
-    test.compare(findObject(":qview_QStackedWidget").currentIndex, 0)
-    waitFor("object.exists(':qview.RGB_QRadioButton')", 20000)
-    test.compare(findObject(":qview.RGB_QRadioButton").enabled, False)
-    waitFor("object.exists(':qview.Gray_QRadioButton')", 20000)
-    test.compare(findObject(":qview.Gray_QRadioButton").enabled, False)
-    waitFor("object.exists(':qview.to All Viewports_QToolButton')", 20000)
-    test.compare(findObject(":qview.to All Viewports_QToolButton").enabled, False)
-    waitFor("object.exists(':qview_QComboBox')", 20000)
-    test.compare(findObject(":qview_QComboBox").enabled, False)
-    waitFor("object.exists(':qview.to All Viewports_QStackedWidget')", 20000)
-    test.compare(findObject(":qview.to All Viewports_QStackedWidget").currentIndex, 0)
-    waitFor("object.exists(':qview_QStackedWidget_2')", 20000)
-    test.compare(findObject(":qview_QStackedWidget_2").currentIndex, 0)
-    waitFor("object.exists(':qview_QSpinBox')", 20000)
-    test.compare(findObject(":qview_QSpinBox").enabled, False)
-    waitFor("object.exists(':qview_QSpinBox_2')", 20000)
-    test.compare(findObject(":qview_QSpinBox_2").enabled, False)
-    waitFor("object.exists(':qview_QSpinBox_3')", 20000)
-    test.compare(findObject(":qview_QSpinBox_3").enabled, False)
-    waitFor("object.exists(':qview_QLabel')", 20000)
-    test.compare(findObject(":qview_QLabel").enabled, False)
-    waitFor("object.exists(':qview_QLabel_2')", 20000)
-    test.compare(findObject(":qview_QLabel_2").enabled, False)
-    waitFor("object.exists(':qview_QLabel_3')", 20000)
-    test.compare(findObject(":qview_QLabel_3").enabled, False)
-    sendEvent("QCloseEvent", waitForObject(":qview_Isis::ViewportMainWindow"))
-
-    
-    # Restore original qview settings
-    try:
-        shutil.rmtree(os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
-    
-    try:
-        os.rename(os.path.expandvars('$HOME/.Isis/qview.squishbackup'), os.path.expandvars('$HOME/.Isis/qview'))
-    except Exception:
-        pass
diff --git a/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.cpp b/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.cpp
index 30a94876a997f5ad423454e4bf145a7fa2dd0389..3f7477ca16054af3502fee0f1bfedf0b9fb0f26d 100644
--- a/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.cpp
+++ b/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.cpp
@@ -1,17 +1,18 @@
 #include "Isis.h"
 
-#include <cstdio>
-
+#include <QDebug>
 #include <QFile>
 #include <QString>
+
+#include <cstdio>
 #include <vector>
-#include "stdlib.h"
+#include <cstdlib>
 
-#include "ProcessImportPds.h"
-#include "ProcessBySample.h"
-#include "UserInterface.h"
 #include "FileName.h"
 #include "IString.h"
+#include "ProcessBySample.h"
+#include "ProcessImportPds.h"
+#include "UserInterface.h"
 
 using namespace std;
 using namespace Isis;
@@ -24,25 +25,27 @@ void IsisMain() {
   UserInterface &ui = Application::GetUserInterface();
 
   FileName inFile = ui.GetFileName("FROM");
-  QString instid;
-  QString missid;
+  QString instId;
+  QString missionId;
 
   try {
     Pvl lab(inFile.expanded());
-    instid = (QString) lab.findKeyword("INSTRUMENT_ID");
-    missid = (QString) lab.findKeyword("MISSION_ID");
+    instId = (QString) lab.findKeyword("INSTRUMENT_ID");
+    missionId = (QString) lab.findKeyword("MISSION_ID");
   }
-  catch(IException &e) {
+  catch (IException &e) {
     QString msg = "Unable to read [INSTRUMENT_ID] or [MISSION_ID] from input file [" +
                  inFile.expanded() + "]";
-    throw IException(IException::Io, msg, _FILEINFO_);
+    throw IException(e, IException::Io, msg, _FILEINFO_);
   }
 
-  instid = instid.simplified().trimmed();
-  missid = missid.simplified().trimmed();
-  if(missid != "ROSETTA" && instid != "OSINAC" && instid != "OSIWAC") {
+  instId = instId.simplified().trimmed();
+  missionId = missionId.simplified().trimmed();
+  if (missionId.compare("ROSETTA", Qt::CaseInsensitive) != 0 
+     && instId.compare("OSINAC", Qt::CaseInsensitive) != 0 
+     && instId.compare("OSIWAC", Qt::CaseInsensitive) != 0) {
     QString msg = "Input file [" + inFile.expanded() + "] does not appear to be " +
-                 "an OSIRIS Wide Angle Camera (WAC) or Narrow Angle Camera (NAC) file.";
+                  "a Rosetta OSIRIS Wide Angle Camera (WAC) or Narrow Angle Camera (NAC) file.";
     throw IException(IException::Io, msg, _FILEINFO_);
   }
 
@@ -100,176 +103,34 @@ void IsisMain() {
   QString combFilterName = groupWithFilterInfo["FILTER_NAME"];
   bbGrp.addKeyword(PvlKeyword("CombinedFilterName", combFilterName));
   bbGrp.addKeyword(PvlKeyword("FilterId", (QString)groupWithFilterInfo["FILTER_NUMBER"]));
-  QStringList filterNames=combFilterName.split("_");
-  vector<int> filterIds (2,0);
-  vector<double> filterWidths (2,0.0);
-  vector<double> filterCenters (2,0.0);
+  QStringList filterNames = combFilterName.split("_");
+  vector<int> filterIds(2,0);
+  vector<double> filterWidths(2,0.0);
+  vector<double> filterCenters(2,0.0);
 
   // OSIRIS NAC and WAC have different filters 
-  if (instid == "OSINAC") {
-    for (int i = 0; i < filterNames.size(); i++) {
-      if(filterNames[i] == "FFP-UV") {
-        //filterIds[i] = 1;
-        filterCenters[i] = 600;
-        filterWidths[i] = 600;
-      }
-      else if(filterNames[i] == "FFP-IR") {
-        //filterIds[i] = 2;
-        filterCenters[i] = 600;
-        filterWidths[i] = 600;
-      }
-      else if(filterNames[i] == "Neutral") {
-        //filterIds[i] = 3;
-        filterCenters[i] = 640;
-        filterWidths[i] = 520;
-      }
-      else if(filterNames[i] == "NFP-Vis") {
-        //filterIds[i] = 4;
-        filterCenters[i] = 600;
-        filterWidths[i] = 600;
-      }
-      else if(filterNames[i] == "Far-UV") {
-        //filterIds[i] = 5;
-        filterCenters[i] = 269.3;
-        filterWidths[i] = 53.6;
-      }
-      else if(filterNames[i] == "Near-UV") {
-        //filterIds[i] = 6;
-        filterCenters[i] = 360.0;
-        filterWidths[i] = 51.1;
-      }
-      else if(filterNames[i] == "Blue") {
-        //filterIds[i] = 1;
-        filterCenters[i] = 480.7;
-        filterWidths[i] = 74.9;
-      }
-      else if(filterNames[i] == "Green") {
-        //filterIds[i] = 2;
-        filterCenters[i] = 535.7;
-        filterWidths[i] = 62.4;
-      }
-      else if(filterNames[i] == "FFP-Vis") {
-        //filterIds[i] = 3;
-        filterCenters[i] = 600;
-        filterWidths[i] = 600;
-      }
-      else if(filterNames[i] == "Orange") {
-        //filterIds[i] = 4;
-        filterCenters[i] = 649.2;
-        filterWidths[i] = 84.5;
-      }
-      else if(filterNames[i] == "Hydra") {
-        //filterIds[i] = 5;
-        filterCenters[i] = 701.2;
-        filterWidths[i] = 22.1;
-      }
-      else if(filterNames[i] == "Red") {
-        //filterIds[i] = 6;
-        filterCenters[i] = 743.7;
-        filterWidths[i] = 64.1;
-      }
-      else if(filterNames[i] == "Ortho") {
-        //filterIds[i] = 1;
-        filterCenters[i] = 805.3;
-        filterWidths[i] = 40.5;
-      }
-      else if(filterNames[i] == "Near-IR") {
-        //filterIds[i] = 2;
-        filterCenters[i] = 882.1;
-        filterWidths[i] = 65.9;
-      }
-      else if(filterNames[i] == "Fe203")   {
-        //filterIds[i] = 3;
-        filterCenters[i] = 931.9;
-        filterWidths[i] = 34.9;
-      }
-      else if(filterNames[i] == "IR") {
-        //filterIds[i] = 4;
-        filterCenters[i] = 989.3;
-        filterWidths[i] = 38.2;
-      }
-      else {
-        QString msg = "Input file [" + inFile.expanded() + "] appears to have an invalid " +
-                      "FilterName.";
-        throw IException(IException::Io, msg, _FILEINFO_);
-      }  
+  for (int i = 0; i < filterNames.size(); i++) {
+    // Translate the Instrument group
+    try {
+      transFile = transDir + "osirisFilters.trn";
+      PvlTranslationTable filterTable(transFile.expanded());
+      filterCenters[i] = toDouble(filterTable.Translate("FilterCenter_" + instId, 
+                                                        filterNames[i]));
+      filterWidths[i] = toDouble(filterTable.Translate("FilterWidth_" + instId, 
+                                                       filterNames[i]));
     }
-  } 
-  else if (instid == "OSIWAC") {
-    for (int i = 0; i < filterNames.size(); i++) {
-      if(filterNames[i] == "Empty") {
-        filterCenters[i] = 0; 
-        filterWidths[i] = 0;
-      }
-      else if(filterNames[i] == "UV245") {
-        filterCenters[i] = 246.2;
-        filterWidths[i] = 14.1;
-      }
-      else if(filterNames[i] == "CS") {
-        filterCenters[i] = 259.0;
-        filterWidths[i] = 5.6;
-      }
-      else if(filterNames[i] == "UV295") {
-        filterCenters[i] = 295.9;
-        filterWidths[i] = 10.9;
-      }
-      else if(filterNames[i] == "OH-WAC") {
-        filterCenters[i] = 309.7;
-        filterWidths[i] = 4.1;
-      }
-      else if(filterNames[i] == "UV325") {
-        filterCenters[i] = 325.8;
-        filterWidths[i] = 10.7;
-      }
-      else if(filterNames[i] == "NH") {
-        filterCenters[i] = 335.9;
-        filterWidths[i] = 4.1;
-      }
-      else if(filterNames[i] == "UV375") {
-        filterCenters[i] = 375.6;
-        filterWidths[i] = 9.8; 
-      }
-      else if(filterNames[i] == "CN") {
-        filterCenters[i] = 388.4;
-        filterWidths[i] = 5.2;
-      }
-      else if(filterNames[i] == "Green") {
-        filterCenters[i] = 537.2;
-        filterWidths[i] = 63.2;
-      }
-      else if(filterNames[i] == "NH2") {
-        filterCenters[i] = 572.1;
-        filterWidths[i] = 11.5;
-      }
-      else if(filterNames[i] == "Na") {
-        filterCenters[i] = 590.7;
-        filterWidths[i] = 4.7;
-      }
-      else if(filterNames[i] == "VIS610") {
-        filterCenters[i] = 612.6;
-        filterWidths[i] = 9.8;
-      }
-      else if(filterNames[i] == "OI") {
-        filterCenters[i] = 631.6;
-        filterWidths[i] = 4.0;
-      }
-      else if(filterNames[i] == "Red") {
-        filterCenters[i] = 629.8;
-        filterWidths[i] = 156.8;
-      }
-      else {
-        QString msg = "Input file [" + inFile.expanded() + "] appears to have an invalid " +
-                      "FilterName.";
-        throw IException(IException::Io, msg, _FILEINFO_);
-      }  
+    catch (IException &e) {
+      QString msg = "Input file [" + inFile.expanded() 
+                    + "] appears invalid. "
+                    + "FilterName [" 
+                    + filterNames[i] 
+                    + "] for instrument ["
+                    + instId 
+                    + "] not found in ["
+                    + transFile.expanded() + "].";
+      throw IException(e, IException::Io, msg, _FILEINFO_);
     }
-  } 
-  else { 
-    QString msg = "Input file [" + inFile.expanded() + "] does not appear to be " +
-                  "an OSIRIS Wide Angle Camera (WAC) or Narrow Angle Camera (NAC) file.";
-    throw IException(IException::Io, msg, _FILEINFO_);
   }
-
   // bandBin += PvlKeyword("FilterId", toString(filterId));
   bbGrp.addKeyword(PvlKeyword("FilterOneName", filterNames[0]));
   bbGrp.addKeyword(PvlKeyword("FilterOneCenter", toString(filterCenters[0]), "nanometers"));
@@ -280,10 +141,10 @@ void IsisMain() {
   outcube->putGroup(bbGrp);
 
   PvlGroup kerns("Kernels");
-  if(instid == "OSINAC") {
+  if (instId.compare("OSINAC", Qt::CaseInsensitive) == 0) {
     kerns += PvlKeyword("NaifFrameCode", toString(-226111)); //should I add [-filtno] directly after the number?  That's what Dawn did
   }
-  else if(instid == "OSIWAC") {
+  else if (instId.compare("OSIWAC", Qt::CaseInsensitive) == 0) {
     kerns += PvlKeyword("NaifFrameCode", toString(-226112));  //should I add [-filtno] directly after the number?  That's what Dawn did
   }
   else {
@@ -303,7 +164,7 @@ void IsisMain() {
 // Flip image by line
 void flipbyline(Buffer &in, Buffer &out) {
   int index = in.size() - 1;
-  for(int i = 0; i < in.size(); i++) {
+  for (int i = 0; i < in.size(); i++) {
     out[i] = in[index - i];
   }
 }
diff --git a/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.xml b/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.xml
index 3063d15c45811d75807424ca0df1ad8d0d675b28..7c7caac6800164bbf06f2c1a234afcd7a42b2ad5 100644
--- a/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.xml
+++ b/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.xml
@@ -262,6 +262,11 @@
       Renamed application to rososiris2isis to disambiguate from osiris-rex
       mission utilities. 
     </change>
+    <change name="Jeannie Backer" date="2018-03-29">
+      Fixed typo of FilterName from Fe203 to Fe2O3 (letter O, not zero).
+      Improved error messages. Moved hard-coded FilterName comparisons out of
+      code to translation file osirisFilters.trn. Fixes #5369. 
+    </change>
   </history>
 
   <category>
diff --git a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp b/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp
index 0b2760e1c44fd0e2ee43da914cd2bb0eb4f30661..a5591d78cb266cf580b8c6c8447c4dea3f514b0c 100644
--- a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp
+++ b/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp
@@ -13,6 +13,7 @@
 
 #include "FileName.h"
 #include "ImportPdsTable.h"
+#include "LineManager.h"
 #include "ProcessImportPds.h"
 #include "Table.h"
 #include "UserInterface.h"
@@ -89,233 +90,261 @@ void IsisMain ()
     throw IException(IException::Unknown, msg, _FILEINFO_);
   }
 
+  int procLevel = (int) pdsLabel.findKeyword("PROCESSING_LEVEL_ID");
+
   // Override default DataTrailerBytes constructed from PDS header
   // Will this number ever change? Where did this # come from?
-  p.SetDataTrailerBytes(864);
+  if (procLevel == 2) {
+    p.SetDataTrailerBytes(864);
+  }
+  else if (procLevel == 3) {
+    p.SetDataTrailerBytes(0);
+    p.SetDataSuffixBytes(4);
+  }
 
   p.StartProcess();
 
-  // Retrieve HK settings file and read in HK values.
-  QList<VirtisHK> hk;
-
   // Get the directory where the Rosetta translation tables are.
   PvlGroup dataDir (Preference::Preferences().findGroup("DataDirectory"));
   QString transDir = (QString) dataDir["Rosetta"] + "/translations/";
 
-  FileName hkTranslationFile = transDir + "virtis_housekeeping.txt";
-  QFile hkFile(hkTranslationFile.toString());
+  if (procLevel == 2) {
 
-  if(!hkFile.open(QIODevice::ReadOnly)) {
-    QString msg = "Unable to open Virtis Housekeeping information file [" +
-                 hkFile.fileName() + "]";
-    throw IException(IException::Io,msg, _FILEINFO_);
-  }
+    // Retrieve HK settings file and read in HK values.
+    QList<VirtisHK> hk;
 
-  QTextStream in(&hkFile);
+    FileName hkTranslationFile = transDir + "virtis_housekeeping.txt";
+    QFile hkFile(hkTranslationFile.toString());
 
-  while(!in.atEnd()) {
-      QString line = in.readLine();
-      QStringList fields = line.split(",");
-      hk.append(VirtisHK(fields[0], fields[1], fields[2], fields[3], fields[4]));
-  }
+    if(!hkFile.open(QIODevice::ReadOnly)) {
+      QString msg = "Unable to open Virtis Housekeeping information file [" +
+                   hkFile.fileName() + "]";
+      throw IException(IException::Io,msg, _FILEINFO_);
+    }
 
-  hkFile.close();
+    QTextStream in(&hkFile);
 
-  // Construct HK (housekeeping) table
-  TableRecord rec;
+    while(!in.atEnd()) {
+        QString line = in.readLine();
+        QStringList fields = line.split(",");
+        hk.append(VirtisHK(fields[0], fields[1], fields[2], fields[3], fields[4]));
+    }
 
-  QList<TableField> tableFields;
+    hkFile.close();
 
-  for (int i=0; i < hk.size(); i++) {
-    tableFields.append(hk[i].tableField());
-  }
+    // Construct HK (housekeeping) table
+    TableRecord rec;
 
-  for (int i=0; i < tableFields.size(); i++) {
-    rec += tableFields[i];
-  }
+    QList<TableField> tableFields;
 
-  Table table("VIRTISHouseKeeping", rec);
+    for (int i=0; i < hk.size(); i++) {
+      tableFields.append(hk[i].tableField());
+    }
 
-  // VIRTIS-M (VIS and IR) Equations
-  // These are adapted from the VIRTIS IDL processing pipeline
-  // and pg. 66-67 of the VIRTIS-EAICD
-  QList<std::vector<double> > equationList;
-  for (int i=0; i < hk.size(); i++) {
-    equationList.append(hk[i].coefficients());
-  }
+    for (int i=0; i < tableFields.size(); i++) {
+      rec += tableFields[i];
+    }
 
-  QList<PolynomialUnivariate> equations;
+    Table table("VIRTISHouseKeeping", rec);
 
-  for (int s=0; s < equationList.size(); s++) {
-    equations.append(PolynomialUnivariate(2, equationList[s]));
-  }
+    // VIRTIS-M (VIS and IR) Equations
+    // These are adapted from the VIRTIS IDL processing pipeline
+    // and pg. 66-67 of the VIRTIS-EAICD
+    QList<std::vector<double> > equationList;
+    for (int i=0; i < hk.size(); i++) {
+      equationList.append(hk[i].coefficients());
+    }
 
-  // Populate the Housekeeping table
-  //
-  // There are 3 categories of VIRTIS HK Values, in terms of converting from input byte to output
-  // value:
-  //
-  // (1) SCET (many-to-one)
-  // (2) Physical Quantities (one-to-one)
-  // (3) Flags or Statistics (one-to-many)
-  //
-  // SCET values are made up of 3 VIRTIS HK 2-byte words. The output value can be calculated
-  // using the translateScet helper function.
-  //
-  // Physical values are made up of 1 VIRTIS HK 2-byte word, which is converted to a physical value
-  // using an equation specified as a series of coefficients in the associated "assets" file.
-  //
-  // For Flags or Statistics Values, 1 VIRTIS HK 2-byte word is associated with several (a varaible
-  // number of) output Flag or Statistics values. These are all treated as special cases.
-  //
-  // Additionally, Sine and Cosine HK Values need to be pre-processed before conversion, but are
-  // otherwise treated as a normal "Physical Quantity" HK.
-  //
-  std::vector< char * > hkData = p.DataTrailer();
-  for (unsigned int i=0; i < hkData.size() ; i++) {
-    const char *hk = hkData.at(i);
-    const unsigned short *uihk = reinterpret_cast<const unsigned short *> (hk);
-
-    // Each data trailer can contain multiple 82-word records, but we only need 1 / line
-    int start = 0;
-    int tableNum = 0;
-
-    // Loop through each 82-word record
-    // Each k is a byteNumber
-    for (int k=0; k<82*2; k=k+2) {
-      int temp = 0;
-
-      // Convert non-SCET records (1 two-byte word each) using the appropriate equations
-      if (k !=0 && k!=14 && k!=38 && k!=58 && k!=116) {
-        temp = word(hk[start + k], hk[start+k+1]);
-        if (temp != 65535) {
-
-          // If Sine or Cosine, pre-process before sending to conversion.
-          if (tableNum == 63) { // SIN
-            int HK_bit = (int) (((unsigned short int) temp) & 4095);
-            int HK_sign = (unsigned short int) (temp/4096.0) & 1;
-            rec[tableNum] = equations[tableNum].Evaluate((HK_sign * 1.0) * (HK_bit * 1.0));
-          } else if (tableNum == 64) { // COS
-            temp = (int) (temp) & 4095;
-            rec[tableNum] = equations[tableNum].Evaluate(temp * 1.0);
-          } else if (tableNum == 2) { // # of Subslices / first seial num 2-3
-            rec[tableNum] = hk[start+k]*1.0;
-            rec[tableNum+1] = hk[start+k+1]*1.0;
-            tableNum++;
-          } // Specical one-to-many cases (Flags or Statistics)
-          else if (tableNum == 4) { // Data Type 4-9
-            rec[tableNum] = (int)(temp/-32768) & 1;
-            rec[tableNum+1] = (int)(temp/16384) & 1;
-            rec[tableNum+2] = (int)(temp/8192) & 1;
-            rec[tableNum+3] = (int)(temp/1024) & 7;
-            rec[tableNum+4] = (int)(temp/256) & 3;
-            rec[tableNum+5] = (int)(temp/1) & 255;
-            tableNum+=5;
-          } else if (tableNum == 12) { // V_MODE 12-14
-            rec[tableNum] = 1.0* ((int)(temp/4096) & 15);
-            rec[tableNum+1] = 1.0* ((int)(temp/64) & 63);
-            rec[tableNum+2] = 1.0* ((int)(temp/1) & 63);
-            tableNum+=2;
-          } else if (tableNum == 15) { //ME_PWR_STAT 15 - 21
-            rec[tableNum] = 1.0* ((int)(temp/1) & 1);
-            rec[tableNum+1] = 1.0* ((int)(temp/2) & 1);
-            rec[tableNum+2] = 1.0* ((int)(temp/4) & 1);
-            rec[tableNum+3] = 1.0* ((int)(temp/8) & 1);
-            rec[tableNum+4] = 1.0* ((int)(temp/16) & 1);
-            rec[tableNum+5] = 1.0* ((int)(temp/32) & 1);
-            rec[tableNum+6] = 1.0* ((int)(temp/-32786) & 1);
-            tableNum+=6;
-          } else if (tableNum == 30){  // M_ECA_STAT 30-31
-            rec[tableNum] = 1.0* ((int)(temp/1) & 1);
-            rec[tableNum+1] = 1.0* ((int)(temp/256) & 1);
-            tableNum++;
-          } else if (tableNum == 32) { // M_COOL_STAT 32-34
-            rec[tableNum] = 1.0* ((int)(temp/1) & 1);
-            rec[tableNum+1] = 1.0* ((int)(temp/16) & 1);
-            rec[tableNum+2] = 1.0* ((int)(temp/256) & 1);
-            tableNum+=2;
-          }
+    QList<PolynomialUnivariate> equations;
 
-          else if (tableNum == 65) { // M_VIS_FLAG
-            rec[tableNum] = 1.0* ((int)(temp/1) & 1);
-            rec[tableNum+1] = 1.0* ((int)(temp/2) & 1);
-            rec[tableNum+2] = 1.0* ((int)(temp/4) & 1);
-            rec[tableNum+3] = 1.0* ((int)(temp/8) & 1);
-            rec[tableNum+4] = 1.0* ((int)(temp/16) & 1);
-            rec[tableNum+5] = 1.0* ((int)(temp/256) & 1);
-            tableNum+=5;
-          }
-          else if (tableNum == 91) { //M_IR_LAMP_SHUTTER
-            double lamp1 = 1.0* ((int)(temp/1) & 15);
-            rec[tableNum] = equations[tableNum].Evaluate(lamp1);
-            rec[tableNum+1] = 1.0* ((int)(temp/16) & 1);
-            double lamp2 = 1.0* ((int)(temp/256) & 15);
-            rec[tableNum+2] = equations[tableNum+1].Evaluate(lamp2);
-            rec[tableNum+3] = 1.0* ((int)(temp/4096) & 1);
-            tableNum+=3;
-          }
-          else if (tableNum == 95) { // M_IR_FLAG
-            rec[tableNum] = 1.0* ((int)(temp/1) & 1);
-            rec[tableNum+1] = 1.0* ((int)(temp/2) & 1);
-            rec[tableNum+2] = 1.0* ((int)(temp/4) & 1);
-            rec[tableNum+3] = 1.0* ((int)(temp/8) & 1);
-            rec[tableNum+4] = 1.0* ((int)(temp/16) & 1);
-            rec[tableNum+5] = 1.0* ((int)(temp/32) & 1);
-            rec[tableNum+6] = 1.0* ((int)(temp/64) & 1);
-            rec[tableNum+7] = 1.0* ((int)(temp/512) & 1);
-            rec[tableNum+8] = 1.0* ((int)(temp/4096) & 1);
-            rec[tableNum+9] = 1.0* ((int)(temp/8192) & 1);
-            rec[tableNum+10] = 1.0* ((int)(temp/16384) & 1);
-            tableNum+=10;
+    for (int s=0; s < equationList.size(); s++) {
+      equations.append(PolynomialUnivariate(2, equationList[s]));
+    }
+
+    // Populate the Housekeeping table
+    //
+    // There are 3 categories of VIRTIS HK Values, in terms of converting from input byte to output
+    // value:
+    //
+    // (1) SCET (many-to-one)
+    // (2) Physical Quantities (one-to-one)
+    // (3) Flags or Statistics (one-to-many)
+    //
+    // SCET values are made up of 3 VIRTIS HK 2-byte words. The output value can be calculated
+    // using the translateScet helper function.
+    //
+    // Physical values are made up of 1 VIRTIS HK 2-byte word, which is converted to a physical value
+    // using an equation specified as a series of coefficients in the associated "assets" file.
+    //
+    // For Flags or Statistics Values, 1 VIRTIS HK 2-byte word is associated with several (a varaible
+    // number of) output Flag or Statistics values. These are all treated as special cases.
+    //
+    // Additionally, Sine and Cosine HK Values need to be pre-processed before conversion, but are
+    // otherwise treated as a normal "Physical Quantity" HK.
+    //
+    std::vector< char * > hkData = p.DataTrailer();
+    for (unsigned int i=0; i < hkData.size() ; i++) {
+      const char *hk = hkData.at(i);
+      const unsigned short *uihk = reinterpret_cast<const unsigned short *> (hk);
+
+      // Each data trailer can contain multiple 82-word records, but we only need 1 / line
+      int start = 0;
+      int tableNum = 0;
+
+      // Loop through each 82-word record
+      // Each k is a byteNumber
+      for (int k=0; k<82*2; k=k+2) {
+        int temp = 0;
+
+        // Convert non-SCET records (1 two-byte word each) using the appropriate equations
+        if (k !=0 && k!=14 && k!=38 && k!=58 && k!=116) {
+          temp = word(hk[start + k], hk[start+k+1]);
+          if (temp != 65535) {
+
+            // If Sine or Cosine, pre-process before sending to conversion.
+            if (tableNum == 63) { // SIN
+              int HK_bit = (int) (((unsigned short int) temp) & 4095);
+              int HK_sign = (unsigned short int) (temp/4096.0) & 1;
+              rec[tableNum] = equations[tableNum].Evaluate((HK_sign * 1.0) * (HK_bit * 1.0));
+            } else if (tableNum == 64) { // COS
+              temp = (int) (temp) & 4095;
+              rec[tableNum] = equations[tableNum].Evaluate(temp * 1.0);
+            } else if (tableNum == 2) { // # of Subslices / first seial num 2-3
+              rec[tableNum] = hk[start+k]*1.0;
+              rec[tableNum+1] = hk[start+k+1]*1.0;
+              tableNum++;
+            } // Specical one-to-many cases (Flags or Statistics)
+            else if (tableNum == 4) { // Data Type 4-9
+              rec[tableNum] = (int)(temp/-32768) & 1;
+              rec[tableNum+1] = (int)(temp/16384) & 1;
+              rec[tableNum+2] = (int)(temp/8192) & 1;
+              rec[tableNum+3] = (int)(temp/1024) & 7;
+              rec[tableNum+4] = (int)(temp/256) & 3;
+              rec[tableNum+5] = (int)(temp/1) & 255;
+              tableNum+=5;
+            } else if (tableNum == 12) { // V_MODE 12-14
+              rec[tableNum] = 1.0* ((int)(temp/4096) & 15);
+              rec[tableNum+1] = 1.0* ((int)(temp/64) & 63);
+              rec[tableNum+2] = 1.0* ((int)(temp/1) & 63);
+              tableNum+=2;
+            } else if (tableNum == 15) { //ME_PWR_STAT 15 - 21
+              rec[tableNum] = 1.0* ((int)(temp/1) & 1);
+              rec[tableNum+1] = 1.0* ((int)(temp/2) & 1);
+              rec[tableNum+2] = 1.0* ((int)(temp/4) & 1);
+              rec[tableNum+3] = 1.0* ((int)(temp/8) & 1);
+              rec[tableNum+4] = 1.0* ((int)(temp/16) & 1);
+              rec[tableNum+5] = 1.0* ((int)(temp/32) & 1);
+              rec[tableNum+6] = 1.0* ((int)(temp/-32786) & 1);
+              tableNum+=6;
+            } else if (tableNum == 30){  // M_ECA_STAT 30-31
+              rec[tableNum] = 1.0* ((int)(temp/1) & 1);
+              rec[tableNum+1] = 1.0* ((int)(temp/256) & 1);
+              tableNum++;
+            } else if (tableNum == 32) { // M_COOL_STAT 32-34
+              rec[tableNum] = 1.0* ((int)(temp/1) & 1);
+              rec[tableNum+1] = 1.0* ((int)(temp/16) & 1);
+              rec[tableNum+2] = 1.0* ((int)(temp/256) & 1);
+              tableNum+=2;
+            }
+
+            else if (tableNum == 65) { // M_VIS_FLAG
+              rec[tableNum] = 1.0* ((int)(temp/1) & 1);
+              rec[tableNum+1] = 1.0* ((int)(temp/2) & 1);
+              rec[tableNum+2] = 1.0* ((int)(temp/4) & 1);
+              rec[tableNum+3] = 1.0* ((int)(temp/8) & 1);
+              rec[tableNum+4] = 1.0* ((int)(temp/16) & 1);
+              rec[tableNum+5] = 1.0* ((int)(temp/256) & 1);
+              tableNum+=5;
+            }
+            else if (tableNum == 91) { //M_IR_LAMP_SHUTTER
+              double lamp1 = 1.0* ((int)(temp/1) & 15);
+              rec[tableNum] = equations[tableNum].Evaluate(lamp1);
+              rec[tableNum+1] = 1.0* ((int)(temp/16) & 1);
+              double lamp2 = 1.0* ((int)(temp/256) & 15);
+              rec[tableNum+2] = equations[tableNum+1].Evaluate(lamp2);
+              rec[tableNum+3] = 1.0* ((int)(temp/4096) & 1);
+              tableNum+=3;
+            }
+            else if (tableNum == 95) { // M_IR_FLAG
+              rec[tableNum] = 1.0* ((int)(temp/1) & 1);
+              rec[tableNum+1] = 1.0* ((int)(temp/2) & 1);
+              rec[tableNum+2] = 1.0* ((int)(temp/4) & 1);
+              rec[tableNum+3] = 1.0* ((int)(temp/8) & 1);
+              rec[tableNum+4] = 1.0* ((int)(temp/16) & 1);
+              rec[tableNum+5] = 1.0* ((int)(temp/32) & 1);
+              rec[tableNum+6] = 1.0* ((int)(temp/64) & 1);
+              rec[tableNum+7] = 1.0* ((int)(temp/512) & 1);
+              rec[tableNum+8] = 1.0* ((int)(temp/4096) & 1);
+              rec[tableNum+9] = 1.0* ((int)(temp/8192) & 1);
+              rec[tableNum+10] = 1.0* ((int)(temp/16384) & 1);
+              tableNum+=10;
+            }
+            else {
+               // Convert a physical quantity to its output value (1 word -> 1 output physical value)
+               rec[tableNum] = equations[tableNum].Evaluate(temp * 1.0);
+            }
           }
           else {
-             // Convert a physical quantity to its output value (1 word -> 1 output physical value)
-             rec[tableNum] = equations[tableNum].Evaluate(temp * 1.0);
+            rec[tableNum] = 65535.0; // HK Data is Invalid
           }
         }
         else {
-          rec[tableNum] = 65535.0; // HK Data is Invalid
-        }
-      }
-      else {
-        // Convert SCET records (3 words -> one output SCET)
-        int uk = k/2;
-#if 0
-        int word1 = word(hk[start+k], hk[start+k+1]);
-        int word2 = word(hk[start+k+2], hk[start+k+3]);
-        int word3 = word(hk[start+k+4], hk[start+k+5]);
-#else
-        int word1 = swapb(uihk[uk]);
-        int word2 = swapb(uihk[uk+1]);
-        int word3 = swapb(uihk[uk+2]);
-#endif
-
-        double result;
-
-        // If any of the words comprising the SCET are invalid, the whole thing is invalid.
-        if (isValid(word1) && isValid(word2) && isValid(word3)) {
-          result = translateScet(word1, word2, word3);
-        }
-        else {
-          result = 65535;
-        }
+          // Convert SCET records (3 words -> one output SCET)
+          int uk = k/2;
+  #if 0
+          int word1 = word(hk[start+k], hk[start+k+1]);
+          int word2 = word(hk[start+k+2], hk[start+k+3]);
+          int word3 = word(hk[start+k+4], hk[start+k+5]);
+  #else
+          int word1 = swapb(uihk[uk]);
+          int word2 = swapb(uihk[uk+1]);
+          int word3 = swapb(uihk[uk+2]);
+  #endif
+
+          double result;
+
+          // If any of the words comprising the SCET are invalid, the whole thing is invalid.
+          if (isValid(word1) && isValid(word2) && isValid(word3)) {
+            result = translateScet(word1, word2, word3);
+          }
+          else {
+            result = 65535;
+          }
 
-        // If we don't have a valid SCET, the whole line of HK data is not valid, so we skip it.
-        if (result == 0 || result == 65535) {
-          break;
-        }
-        else{
-          rec[tableNum] = result*1.0;
+          // If we don't have a valid SCET, the whole line of HK data is not valid, so we skip it.
+          if (result == 0 || result == 65535) {
+            break;
+          }
+          else{
+            rec[tableNum] = result*1.0;
+          }
+          // We used 3 words
+          k=k+4;
         }
-        // We used 3 words
-        k=k+4;
+        tableNum++;
       }
-      tableNum++;
+      table += rec;
     }
-    table += rec;
-  }
 
-  outcube->write(table);
+    outcube->write(table);
+  }
+  else if (procLevel == 3) {
+    std::vector<char *> hkData = p.DataTrailer();
+    TableRecord rec;
+    TableField scETField("dataSCET", TableField::Double);
+    rec += scETField;
+    Table table("VIRTISHouseKeeping", rec);
+    for (unsigned int i=0; i < hkData.size() ; i++) {
+      const char *hk = hkData.at(i);
+      const unsigned short *uihk = reinterpret_cast<const unsigned short *> (hk);
+      int word1 = swapb(uihk[0]);
+      int word2 = swapb(uihk[1]);
+      int word3 = swapb(uihk[2]);
+      rec[0] = translateScet(word1, word2, word3);
+      table += rec;
+    }
+    outcube->write(table);
+  }
 
 
   // Create a PVL to store the translated labels in
@@ -354,6 +383,26 @@ void IsisMain ()
   }
   outcube->putGroup(kerns);
 
+  // NULL the dark current scans in level 2 images
+  if (procLevel == 2) {
+    const PvlKeyword &frameKey = outcube->group("Instrument").findKeyword("FrameParameter");
+    // The third frame key is always the number of scans in between dark current scans.
+    // So, we need to add one to that in order to get the number of lines to next dark current.
+    int darkRate = toInt(frameKey[3]) + 1;
+    LineManager darkLineManager(*outcube);
+
+    for (int band = 1; band <= outcube->bandCount(); band++) {
+      // The first line is always a dark current, so start there.
+      for (int line = 1; line <= outcube->lineCount(); line+=darkRate) {
+        darkLineManager.SetLine(line,band);
+        for (int sample = 0; sample < darkLineManager.size(); sample++) {
+          darkLineManager[sample] = Isis::Null;
+        }
+        outcube->write(darkLineManager);
+      }
+    }
+  }
+
   p.EndProcess ();
 }
 
diff --git a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.xml b/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.xml
index 0513adad79b1b88c226b88904308735f49b1b1ff..ca797fd4b497a13aab1dadbadc7c25fd0c776be0 100644
--- a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.xml
+++ b/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.xml
@@ -9,10 +9,10 @@
   <description>
     <p>
     This program will import and convert a PDS-formatted Rosetta VIRTIS-M or VIRTIS-H image into an ISIS cube.
-    This program is designed to work with data available in the draft data area on PDS as of 04/25/2016 and with any officially released data as of 11/01/2016. 
+    This program is designed to work with data available in the draft data area on PDS as of 04/25/2016 and with any officially released data as of 11/01/2016.
     </p>
     <p>
-      The output cube will contain a substantial housekeeping data table named "HK." It contains, in order, the HK values for each line of the cube as described on pg 66-67 of the VIRTIS EAICD. 
+      The output cube will contain a substantial housekeeping data table named "HK." It contains, in order, the HK values for each line of the cube as described on pg 66-67 of the VIRTIS EAICD.
     </p>
     <h3> Requirements </h3>
     <ul>
@@ -26,35 +26,41 @@
     <br/>
     <h2>Instrument Overview</h2>
    <p>
-     VIRTIS-M is a mapping spectrometer onboard the Rosetta mission comprised of two components: VIRTIS-M-VIS, and VIRTIS-M-IR. VIRTIS-M-VIS is the visible component, and VIRTIS-M-IR is the infrared component. 
+     VIRTIS-M is a mapping spectrometer onboard the Rosetta mission comprised of two components: VIRTIS-M-VIS, and VIRTIS-M-IR. VIRTIS-M-VIS is the visible component, and VIRTIS-M-IR is the infrared component.
      VIRTIS-H is a high resolution infrared spectrometer (1840-4990 nm).
    </p>
     <h2>Data Archive</h2>
     <p>
       The Rosetta data are available from the
-      <a href="http://pds-smallbodies.astro.umd.edu/data_sb/missions/rosetta/index.shtml">NASA PDS Small 
+      <a href="http://pds-smallbodies.astro.umd.edu/data_sb/missions/rosetta/index.shtml">NASA PDS Small
       Bodies Node</a>.
     </p>
 
     <h2>References</h2>
     <cite>
     </cite>
-    <br /> 
+    <br />
   </description>
 
   <history>
     <change name="Kristin Berry" date="2016-04-25">
-      Original version 
+      Original version
     </change>
     <change name="Kristin Berry" date="2016-11-01">
-       Add ability to ingest housekeeping data.  
+       Add ability to ingest housekeeping data.
     </change>
     <change name="Kaj Williams" date="2017-08-24">
-       Add ability to ingest VIRTIS-H files. References #5130.  
+       Add ability to ingest VIRTIS-H files. References #5130.
     </change>
     <change name="Kris Becker and Kaj Williams" date="2017-08-24">
        Fix issues with the translation of housekeeping data. Fixes #5131.
     </change>
+    <change name="Jesse Mapel" date="2018-05-14">
+       Fixed compiler warnings from new lvl3 ingestion code.
+    </change>
+    <change name="Jesse Mapel" date="2018-05-14">
+       Nulled dark current scans in level 2 data. Fixes #5421.
+    </change>
   </history>
 
   <category>
@@ -70,7 +76,7 @@
           Input PDS formatted Rosetta VIRTIS image file
         </brief>
         <description>
-          Use this parameter to select the Rosetta VIRTIS filename. 
+          Use this parameter to select the Rosetta VIRTIS filename.
         </description>
         <filter>
           *.qub
diff --git a/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.cpp b/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.cpp
index 678e2ca99d8d2ae5adfece234550f6b19ed25f6f..31d9119f1ca4835fed08832e05ccc4e6da68ca55 100644
--- a/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.cpp
+++ b/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.cpp
@@ -38,14 +38,16 @@ using namespace std;
 
 namespace Isis {
   /**
-   * Constructs a Rosetta Osiris NAC Framing Camera object. 
+   * Constructs a Rosetta Osiris NAC Framing Camera object.
    *
    * @param cube The image cube.
    *
-   * @author Stuart Sides
-   * 
+   * @author ????-??-?? Stuart Sides
+   *
    * @internal
-   * @history modified by Sasha Brownsberger
+   *   @history ????-??-?? Stuart Sides - Original version. 
+   *   @history ????-??-?? Sasha Brownsberger 
+   *   @history 2018-09-24 Kaj Williams - Added binning support.
    */
 
   RosettaOsirisCamera::RosettaOsirisCamera(Cube &cube) : FramingCamera(cube) {
@@ -56,7 +58,10 @@ namespace Isis {
 
     NaifStatus::CheckErrors();
 
-    // The Osiris focal length is fixed and is designed not to change throught the operational 
+    Pvl &lab = *cube.label();
+    PvlGroup &inst = lab.findGroup("Instrument", Pvl::Traverse);
+
+    // The Osiris focal length is fixed and is designed not to change throught the operational
     // temperature.  For OSIRIS, the focal length is in mm, so we shouldn't need the unit conversion
 
     QString ikCode =  toString(naifIkCode());
@@ -66,7 +71,7 @@ namespace Isis {
     SetFocalLength(focalLength);
 
     // For setting the pixel pitch, the Naif keyword PIXEL_SIZE is used instead of the ISIS
-    // default of PIXEL_PITCH, so set the value directly.  Needs to be converted from microns to mm.   
+    // default of PIXEL_PITCH, so set the value directly.  Needs to be converted from microns to mm.
     QString pp = "INS" + ikCode + "_PIXEL_SIZE";
 
     double pixelPitch = Spice::getDouble(pp);
@@ -77,7 +82,18 @@ namespace Isis {
     // out the affine transforms from detector samp,line to focal plane x,y.
     CameraFocalPlaneMap *focalMap = new CameraFocalPlaneMap(this, naifIkCode());
 
-    new CameraDetectorMap(this);
+    CameraDetectorMap *detectorMap = new CameraDetectorMap(this);
+    detectorMap->SetStartingDetectorSample((double) inst["FirstLineSample"]);
+    // Because images are flipped on ingestion,
+    // the first line on the label is actually the last line.
+    detectorMap->SetStartingDetectorLine(2050 - cube.lineCount() - (double) inst["FirstLine"]);
+
+    //Read the pixel averaging width/height and update the detector map:
+    double pixelAveragingWidth=(double) inst["PixelAveragingWidth"];
+    double pixelAveragingHeight=(double) inst["PixelAveragingHeight"];
+    detectorMap->SetDetectorSampleSumming(pixelAveragingWidth);
+    detectorMap->SetDetectorLineSumming(pixelAveragingHeight);
+
     RosettaOsirisCameraDistortionMap* distortionMap = new RosettaOsirisCameraDistortionMap(this);
 
     // Setup the ground and sky map
@@ -85,8 +101,6 @@ namespace Isis {
     new CameraSkyMap(this);
 
     // Setup clock start and stop times.
-    Pvl &lab = *cube.label();
-    PvlGroup &inst = lab.findGroup("Instrument", Pvl::Traverse);
     QString clockStartCount = inst["SpacecraftClockStartCount"];
     double start = getClockTime(clockStartCount).Et();
     // QString clockStopCount = inst["SpacecraftClockStopCount"];
@@ -111,7 +125,7 @@ namespace Isis {
     distortionMap->setBoresight(referenceSample, referenceLine);
 
     iTime centerTime = start + (exposureTime / 2.0);
-    setTime( centerTime ); 
+    setTime( centerTime );
 
     // Internalize all the NAIF SPICE information into memory.
     LoadCache();
@@ -122,10 +136,10 @@ namespace Isis {
 
 
   /**
-   * Returns the shutter open and close times.  The LORRI camera doesn't use a shutter to start and 
+   * Returns the shutter open and close times.  The LORRI camera doesn't use a shutter to start and
    * end an observation, but this function is being used to get the observation start and end times,
-   * so we will simulate a shutter. 
-   * 
+   * so we will simulate a shutter.
+   *
    * @param exposureDuration ExposureDuration keyword value from the labels,
    *                         converted to seconds.
    * @param time The StartTime keyword value from the labels, converted to
@@ -147,7 +161,7 @@ namespace Isis {
 
   /**
    * Initialize the distortion map using the paramters from the NAIF SPICE kernels.
-   * 
+   *
    * @param ikCode The NAIF IK code of the instrument
    * @param[out] distortionMap The distortion map that will be initialized
    */
@@ -181,7 +195,7 @@ namespace Isis {
  * @return Isis::Camera* OsirisNacCamera
  * @internal
  *   @history 2015-05-21 Sasha Brownsberger - Added documentation.  Removed Lorri
- *            namespace.  Added OsirisNac name.  
+ *            namespace.  Added OsirisNac name.
  */
 extern "C" Isis::Camera *RosettaOsirisCameraPlugin(Isis::Cube &cube) {
   return new Isis::RosettaOsirisCamera(cube);
diff --git a/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.h b/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.h
index 9274aca8e7e88890041eebdfdf1dbd2a3e736a77..a0e87569bd52b484cc9c84f03e8c6358378bb774 100644
--- a/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.h
+++ b/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.h
@@ -29,7 +29,7 @@
 
 namespace Isis {
   /**
-   * This is the camera model for the Osiris NAC Framing Camera 
+   * This is the camera model for the Osiris NAC Framing Camera
    *
    * @ingroup SpiceInstrumentsAndCameras
    * @ingroup Rosetta
@@ -39,6 +39,8 @@ namespace Isis {
    * @internal
    *   @history 2015-05-21 Sasha Brownsberger - Original Version.
    *   @history 2017-06-02 Jesse Mapel - Added a distortion map Fixes #4496.
+   *   @history 2017-04-11 Jesse Mapel - Added subwindowing. Fixes #5394.
+   *   @history 2018-09-25 Kaj Williams - Added binning. Due to the difficulty in obtaining test images which are binned, this is currently untested.
    */
   class RosettaOsirisCamera : public FramingCamera {
     public:
@@ -48,17 +50,17 @@ namespace Isis {
       //! Destroys the NewHorizonsLorriCamera object
       ~RosettaOsirisCamera() {};
 
-    /** 
-     * Reimplemented from FrameCamera 
-     *  
+    /**
+     * Reimplemented from FrameCamera
+     *
      * @author Stuart Sides
      *
      * @internal
      * @history modified Sasha Brownsberger (2015/05/21)
-     * 
+     *
      * @param time Start time of the observation
      * @param exposureDuration The exposure duration of the observation
-     * 
+     *
      * @return std::pair<iTime,iTime> The start and end times of the observation
      */
       virtual std::pair <iTime, iTime> ShutterOpenCloseTimes(double time,
@@ -66,23 +68,23 @@ namespace Isis {
 
       /**
        * CK frame ID -  - Instrument Code from spacit run on CK
-       *  
-       * @return @b int The appropriate instrument code for the "Camera-matrix" 
+       *
+       * @return @b int The appropriate instrument code for the "Camera-matrix"
        *         Kernel Frame ID
        */
-      virtual int CkFrameId() const { return (-226000); } //Code for Rosetta orbitter; no specific code for Osiris in ck files.  
+      virtual int CkFrameId() const { return (-226000); } //Code for Rosetta orbitter; no specific code for Osiris in ck files.
 
-      /** 
+      /**
        * CK Reference ID - J2000
-       * 
+       *
        * @return @b int The appropriate instrument code for the "Camera-matrix"
        *         Kernel Reference ID
        */
       virtual int CkReferenceId() const { return (1); }
 
-      /** 
+      /**
        * SPK Reference ID - J2000
-       * 
+       *
        * @return @b int The appropriate instrument code for the Spacecraft
        *         Kernel Reference ID
        */
diff --git a/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.truth b/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.truth
index b83020ace4893d3735ed6adecbb492cb9362a918..741c4ec16427b99ef7305866734706c5eaa878d9 100644
--- a/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.truth
+++ b/isis/src/rosetta/objs/RosettaOsirisCamera/RosettaOsirisCamera.truth
@@ -10,6 +10,7 @@ Set undistorted coordinates
   Undistorted coordinates: (0.25, 0.1)
 
 Modify the coefficient matrices
+
 Set distorted coordinates
   Distorted coordinates: (1.0, 1.0)
   Undistorted coordinates: (10.0, -10.0)
@@ -49,7 +50,7 @@ Spacecraft Name Short: Rosetta
 Instrument Name Long: Optical, Spectroscopic, and Infrared Remote Imaging System
 Instrument Name Short: OSIRIS
 
-For upper left of asteroid ...
+For upper left corner of asteroid ...
 DeltaSample = 0.000000000
 DeltaLine = 0.000000000
 
@@ -68,3 +69,22 @@ DeltaLine = 0.000000000
 For center pixel position ...
 Latitude OK
 Longitude OK
+
+Test WAC with subwindowing...
+
+For upper left corner of asteroid ...
+DeltaSample = 0.000000000
+DeltaLine = 0.000000000
+
+For upper right corner of asteriod ...
+DeltaSample = 0.000000000
+DeltaLine = 0.000000000
+
+For lower left corner of asteriod...
+DeltaSample = 0.000000000
+DeltaLine = 0.000000000
+
+For lower right corner of asteroid...
+DeltaSample = 0.000000000
+DeltaLine = 0.000000000
+
diff --git a/isis/src/rosetta/objs/RosettaOsirisCamera/unitTest.cpp b/isis/src/rosetta/objs/RosettaOsirisCamera/unitTest.cpp
index 9428e6572e6834e265bcb3d1a890f17bd4847a48..88f4bc33353fbad2d43750a4de58f0cece60c4b6 100644
--- a/isis/src/rosetta/objs/RosettaOsirisCamera/unitTest.cpp
+++ b/isis/src/rosetta/objs/RosettaOsirisCamera/unitTest.cpp
@@ -20,11 +20,12 @@ void TestLineSamp(Camera *cam, double samp, double line);
 int main(void) {
   Preference::Preferences(true);
 
-  QString testCubeFile("$rosetta/testData/n20100710t154539230id20f22.cub");
+  QString testNACFile("$rosetta/testData/n20100710t154539230id20f22.cub");
+  QString testWACFile("$rosetta/testData/W20100710T153440162ID30F13.cub");
 
   cout << "Unit Test for RosettaOsirisCameraDistortionMap..." << endl;
   try {
-    Cube c(testCubeFile, "r");
+    Cube c(testNACFile, "r");
     Camera *cam = c.camera();
     RosettaOsirisCameraDistortionMap *testMap = new RosettaOsirisCameraDistortionMap(cam);
     cout << "Create default distortion map" << endl;
@@ -54,7 +55,7 @@ int main(void) {
          << toString( testMap->UndistortedFocalPlaneY() ) << ")" << endl;
     cout << endl;
 
-    cout << "Modify the coefficient matrices" << endl;
+    cout << "Modify the coefficient matrices" << endl << endl;
     LinearAlgebra::Matrix toUndistX = LinearAlgebra::zeroMatrix(4, 4);
     LinearAlgebra::Matrix toUndistY = LinearAlgebra::zeroMatrix(4, 4);
     toUndistX(0, 0) =  1.0; toUndistX(1, 1) =  2.0; toUndistX(2, 2) =  3.0; toUndistX(3, 3) =  4.0;
@@ -147,7 +148,7 @@ int main(void) {
     double knownLat = 66.7031631205835680;
     double knownLon = 95.7688045622468422;
 
-    Cube c(testCubeFile, "r");
+    Cube c(testNACFile, "r");
     RosettaOsirisCamera *cam = (RosettaOsirisCamera *) CameraFactory::Create(c);
     cout << "FileName: " << FileName(c.fileName()).name() << endl;
     cout << "CK Frame: " << cam->instrumentRotation()->Frame() << endl << endl;
@@ -160,7 +161,7 @@ int main(void) {
     cout << "CK Reference ID = " << cam->CkReferenceId() << endl;
     cout << "SPK Target ID = " << cam->SpkTargetId() << endl;
     cout << "SPK Reference ID = " << cam->SpkReferenceId() << endl << endl;
-    
+
     // Test name methods
     cout << "Spacecraft Name Long: " << cam->spacecraftNameLong() << endl;
     cout << "Spacecraft Name Short: " << cam->spacecraftNameShort() << endl;
@@ -170,8 +171,8 @@ int main(void) {
     // Test four pixels to make sure the conversions are right
 
     // The asteroid doesn't fill the full image, and the kernels are imperfect
-    // so, 
-    cout << "For upper left of asteroid ..." << endl;
+    // so, test the corners of the asteroid
+    cout << "For upper left corner of asteroid ..." << endl;
     TestLineSamp(cam, 400.0, 1300.0);
 
     cout << "For upper right corner of asteriod ..." << endl;
@@ -205,6 +206,23 @@ int main(void) {
     else {
       cout << setprecision(16) << "Longitude off by: " << cam->UniversalLongitude() - knownLon << endl;
     }
+
+    cout << endl << "Test WAC with subwindowing..." << endl << endl;
+
+    Cube wacCube(testWACFile, "r");
+    RosettaOsirisCamera *wideAngleCam = (RosettaOsirisCamera *) CameraFactory::Create(wacCube);
+
+    cout << "For upper left corner of asteroid ..." << endl;
+    TestLineSamp(wideAngleCam, 215.0, 230.0);
+
+    cout << "For upper right corner of asteriod ..." << endl;
+    TestLineSamp(wideAngleCam, 304.0, 235.0);
+
+    cout << "For lower left corner of asteriod..." << endl;
+    TestLineSamp(wideAngleCam, 230.0, 303.0);
+
+    cout << "For lower right corner of asteroid..." << endl;
+    TestLineSamp(wideAngleCam, 299.0, 312.0);
   }
   catch (IException &e) {
     e.print();
@@ -231,4 +249,3 @@ void TestLineSamp(Camera *cam, double samp, double line) {
     cout << "DeltaLine = ERROR" << endl << endl;
   }
 }
-
diff --git a/isis/src/socet/apps/socetframesettings/socetframesettings.cpp b/isis/src/socet/apps/socetframesettings/socetframesettings.cpp
index 9cd6af3253c52d3c1fb1b22c3ba7b11afa7d567d..bd11c2bb8762fb9907e862e39fd2fdfcb94a1604 100644
--- a/isis/src/socet/apps/socetframesettings/socetframesettings.cpp
+++ b/isis/src/socet/apps/socetframesettings/socetframesettings.cpp
@@ -30,10 +30,10 @@
 using namespace std;
 using namespace Isis;
 
-void getCamPosOPK(Spice &spice, QString spacecraftName, double et, Camera *cam,
-                  double ographicCamPos[3], double omegaPhiKappa[3],
-                  double isisFocalPlane2SocetPlateTranspose[3][3]);
-      
+void getCamPosOPK(Spice &spice, QString spacecraftName, SpiceDouble et, Camera *cam,
+                  SpiceDouble ographicCamPos[3], SpiceDouble omegaPhiKappa[3],
+                  SpiceDouble isisFocalPlane2SocetPlateTranspose[3][3]);
+
 void IsisMain() {
 
   // Use a regular Process
@@ -76,9 +76,9 @@ void IsisMain() {
   // Set the image at the boresight pixel to get the ephemeris time and SPICE data at that image
   // location
   double detectorSampleOrigin = focalMap->DetectorSampleOrigin();
-  double detectorLineOrigin = focalMap->DetectorSampleOrigin();
+  double detectorLineOrigin = focalMap->DetectorLineOrigin();
   cam->SetImage(detectorSampleOrigin, detectorLineOrigin);
-  double et = cam->time().Et();
+  SpiceDouble et = cam->time().Et();
 
   Spice spice(*input);
   spice.setTime(et);
@@ -94,15 +94,17 @@ void IsisMain() {
     instrumentId = (QString) orig["InstrumentId"];
     spacecraftName = (QString) orig["SpacecraftName"];
   }
-     
+
   // Get sensor position and orientation (opk) angles
-  double ographicCamPos[3] = {0.0, 0.0, 0.0};
-  double omegaPhiKappa[3] = {0.0, 0.0, 0.0};
-  double isisFocalPlane2SocetPlateTranspose[3][3] =
-      {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}};
+  SpiceDouble ographicCamPos[3] = { 0.0, 0.0, 0.0 };
+  SpiceDouble omegaPhiKappa[3] = { 0.0, 0.0, 0.0 };
+  SpiceDouble isisFocalPlane2SocetPlateTranspose[3][3] = { { 0.0, 0.0, 0.0 },
+                                                           { 0.0, 0.0, 0.0 },
+                                                           { 0.0, 0.0, 0.0 } };
+
   getCamPosOPK(spice, spacecraftName, et, cam, ographicCamPos,
                omegaPhiKappa,isisFocalPlane2SocetPlateTranspose);
-  
+
   // Determine the SOCET Set camera calibration file
   QString socetCamFile = socetCameraCalibrationPath;
 
@@ -122,7 +124,7 @@ void IsisMain() {
       socetCamFile += "VIK2B.cam";
     }
   }
-  
+
   //----------------------------------------.-------------
   //TO DO: Uncomment these lines when MEX SRC is supported
   //----------------------------------------.-------------
@@ -130,7 +132,7 @@ void IsisMain() {
   //  else if (spacecraftName == "MARS_EXPRESS") {
   //    socetCamFile += "SRC.cam";
   //  }
-  //----------------------------------------------------- 
+  //-----------------------------------------------------
   //TO DO: Uncomment these lines when Themis is supported
   //-----------------------------------------------------
   //  // THEMIS VIS images (MARS Odyssey)
@@ -160,13 +162,13 @@ void IsisMain() {
     else {
       socetCamFile += "Galileo_SSI.cam";
     }
-  } 
+  }
   else if (spacecraftName == "Cassini-Huygens") {
     // Get the image filter and replace "/" with "_"
     PvlGroup bandBin = cube.label()->findGroup("BandBin", Pvl::Traverse);
     QString filter = (QString) bandBin["FilterName"];
     filter.replace("/", "_");
-    
+
     socetCamFile += "Cassini_ISSNA_";
     socetCamFile += filter;
     socetCamFile += ".cam";
@@ -188,9 +190,15 @@ void IsisMain() {
     if (instrumentId == "MapCam") {
       socetCamFile += "OCAMS_MapCam.cam";
     }
-    else {//polycam or samcam
+    else if (instrumentId == "PolyCam") {
       socetCamFile += "OCAMS_PolyCam.cam";
     }
+    else {
+      QString msg = QString("The ISIS to SOCET Set translation of input image "
+                            "[%1] is currently not supported for OSIRIS-REX "
+                            "instrument [%2].").arg(from).arg(instrumentId);
+      throw IException(IException::User, msg, _FILEINFO_);
+    }
   }
   // Throw exception for unsupported camera
   else {
@@ -205,7 +213,7 @@ void IsisMain() {
   //TO DO: Uncomment these lines when Themis is supported
   //-----------------------------------------------------
   //  if (spacecraftName == "MARS_ODYSSEY") {
-  //    try { 
+  //    try {
   //      summation = (int) detectorMap->SampleScaleFactor();
   //    }
   //    catch (IException &e) {
@@ -248,11 +256,11 @@ void IsisMain() {
   }
   double sizeX = numSamples / pixelSize;
   double sizeY = numLines / pixelSize;
-  
+
   // Make sure the Socet Set project name has the .prj extension
   if (socetProject.endsWith(".prj", Qt::CaseInsensitive) == false)  socetProject += ".prj";
-  
-  // Find cube base name w/o extensions & establish the Socet Set support file name 
+
+  // Find cube base name w/o extensions & establish the Socet Set support file name
   // Note: I'm using the QFileInfo class because the baseName method in the ISIS
   // FileName class only strips the last extension, and we need the core name
   // of the file without any extensions, or path
@@ -353,7 +361,7 @@ void IsisMain() {
     double sampleSumming = (int) detectorMap->SampleScaleFactor();
     double lineSumming = (int) detectorMap->LineScaleFactor();
 
-    // Get the Starting Detector Line/Sample 
+    // Get the Starting Detector Line/Sample
     double startingSample = detectorMap->AdjustedStartingSample();
     double startingLine = detectorMap->AdjustedStartingLine();
 
@@ -422,24 +430,231 @@ void IsisMain() {
 } //End IsisMain
 
 
-// getCamPosOPK converts NAIF SPICE into camera positions (lon, lat, height) and camera attitude
-// angles (omega, phi, kappa) understood by SOCET Set.  camera positions are in the ographic
-// latitude - positive East longitude system, with longitudes in the 180 degree domain.
-// For the USGSAstro FrameOffAxis sensor model, the transpose of the rotation matrix from
-// isis to socet set focal plane coordinates is also returned.
-void getCamPosOPK(Spice &spice, QString spacecraftName, double et, Camera *cam,
-                  double ographicCamPos[3], double omegaPhiKappa[3],
-                  double isisFocalPlane2SocetPlateTranspose[3][3]) {
-
-  // Initialize the isisFocalPlane2SocetPlate matrix based on mission.
+////////////////////////////////////////////////////////////////////////
+
+// OVERVIEW
+
+// getCamPosOPK converts the geometry contained in ISIS Cube labels, and
+// passed via Spice and Cam object arguments, into camera position
+// (lat,Elon,height) and camera attitude Euler angles (omega,phi,kappa; OPK)
+// sensor model parameters understood by SOCET SET.  The conversion is
+// dependent on spacecraft- and instrument-dependent parameters, which may
+// not be contained in any ISIS Cube label, and so have been hard-coded here.
+
+
+// DETAILS
+
+// Camera position is returned in the planetographic(Note 1) [latitude,
+// East-positive longitude, height] coordinate system, with longitudes
+// in the (-180:+180] degree range.
+//
+// The OPK angles are Euler angles(Note 2), in degrees, representing a
+// 3x3 matrix that converts
+//
+//   vectors expressed in the target body-fixed LSR(Note 3) frame, as
+//   defined for SOCET SET,
+//
+// to
+//
+//   vectors expressed in the SOCET SET (SS) plate (SS camera focal plane)
+//   frame (Note 0).
+//
+// For the USGSAstro FrameOffAxis sensor model, the transpose of the rotation
+// matrix from ISIS (camera) focal plane to SOCET SET focal plane coordinates
+// is also returned.
+//
+// The matrix represented by the OPK Euler angles is calculated by chaining
+// together four known matrices (or their transposes):
+//
+//   i) LSR to Planetocentric body fixed   - spice.instrumentPosition()
+//  ii) Planetocentric body fixed to J2000 - cam->bodyRotation()
+// iii) J2000 to ISIS camera               - cam->instrumentRotation()
+//  iv) ISIS camera to SS plate            - per-instrument, hard-coded
+//
+// The conversion from ISIS plate frame to SOCET plate frame is dependent on
+// the mission- or instrument-specific conventions used in ISIS and SS:
+//
+// a) ISIS image data layout
+//
+//    The definitions of ISIS samples and lines are the fastest- and
+//    slowest-moving indices, respectively, of the 2D ISIS Cube image data,
+//    starting at the beginning of the image data in the file.  The number
+//    of samples per line, and lines per image, is specified in the ISIS
+//    Cube label.
+//
+// b) ISIS reference frame definition wrt image data layout
+//
+//    The ISIS boresight is either +Z or -Z, so X and Y are in the ISIS image
+//    focal plane, and are defined in either the mission Frame-Kernel (FK),
+//    or in the ISIS Instrument Addendum Kernel (IAK).  The sample and line
+//    scales and directions with respect to ISIS +X and +Y are stored
+//    within SPICE kernel pool variables (KPVS) INS-#####_ITRANSS and
+//    INS-####_ITRANSL, respectively, in units of pixel/mm.
+//
+//    The Instrument Addendum Kernels (IAKs), which are ISIS-specific SPICE
+//    Instrument Kernels (IKs), exist for each instrument, and contain those
+//    _ITRANSS and _ITRANSL parameters, e.g.
+//
+//      INS-98903_ITRANSS = ( 0.0,  -76.9,   0.0  )
+//      INS-98903_ITRANSL = ( 0.0,    0.0,  76.9 )
+//
+//    _ITRANSS is a triplet:  the 2nd value is the sample pixel/mm wrt +X;
+//                            the 3rd value is the sample pixel/mm wrt +Y.
+//
+//    _ITRANSL is a triplet:  the 2nd value is the line pixel/mm wrt +X;
+//                            the 3rd value is the line pixel/mm wrt +Y.
+//
+//
+//    The first values in _ITRANSS and _ITRANSL may be ignored as long as
+//    they are zero. If these values are non-zero, then the transformation is
+//    an affine transformation where the values are the offset.
+//
+// c) ISIS display
+//
+//    ISIS display software always displays the first pixel (sample) at the
+//    upper left, the next line-worth of (sample) pixels to the right of
+//    that, and the second line below the first line, and so on.  This may,
+//    in some cases, display a mirrored image from the actual scene, and
+//    projecting the boresight (+/- Z), +X and +Y against the display will
+//    ***IN THAT CASE*** dipslay a left-handed frame i.e. a mirrored
+//    right-handed frame.
+//
+// The conventions in SOCET SET (SS) are assumed to be as follows (see also
+// Note 0 below):
+//
+// a) SS image data layout
+//
+//    Identical to ISIS definitions
+//
+// b) SS reference frame wrt image layout
+//
+//    The SS +sample direction is along the SS +X axis (+Xss displays to the
+//    right), and the SS -line direction is along the +Y axis (+Yss displays
+//    up).  +Z is perpendicular to the SS focal plane and points away from
+//    the imaged scene, so the SS frame displays a right-handed frame.
+//
+// c) SS display
+//
+//    The SS pixel display convention is similar to that for ISIS (start at
+//    at top-left, then right with increasing sample - fastest index, then
+//    down with increasing line - slowest index), but it does ***NOT***
+//    allow for mirrored images.
+//
+// The instrument-specific pixel storage convention used in ISIS Cubes,
+// coupled with the _ITRANSS/_ITRANSL KPVs and the mapping of the pixel
+// storage from ISIS to SS determines calculation of the matrix.  Copying
+// ISIS Cube image pixel data to SS raw images is a process that is external
+// to this application, and therefore must be coordinated with the output of
+// this application.
+
+
+// NOTES
+
+// 0) The definition of the SOCET SET (SS) plate reference frame is virtually
+//    undocumented in the public domain.  From what is available, it appears
+//    that
+//
+//    i) +zSS is the anti-boresight (normal to the SS focal plane away from the
+//       direction of the imaged scene)
+//
+//    ii) +xSS is typically displayed to the right, and +ySS is displayed up
+//        in the right-handed system, HOWEVER ...
+//
+//    iii) It may be that the orientations of +xSS and +ySS are dependent on
+//         the SOCET cam file used; that file is external to this appication,
+//         and the per-spacecraft and/or per-instrument if-else clauses in
+//         this application make assumptions about the contents of that
+//         external file.
+
+// (1) Planetographic coordinates are referred to as geodetic coordinates
+//     in SPICE.  Planetographic latitude and height are normal and
+//     relative, repsectively, to the surface of a target modeled as a
+//     spheroid that is a volume of revolution.  Only the radius at the
+//     intersection of the prime meridian and the equator, and the polar
+//     radius, are used; the intermediate radius, at the intersection of
+//     meridians +/-90degrees and the equator, of the tri-axial ellipsoid
+//     model is not used.
+//
+//     N.B. Planetographic coordinates are used ***ONLY*** for calculating
+//          the camera position; they are ***NOT*** used in not used in
+//          the calculation of the camera attitude OPK angles.
+
+// (2) Specifically, LsrToSsMatrix = [kappa]  [phi]  [omega]
+//                                          3      2        1
+//     where
+//
+//       [angleN]
+//               axisN
+//
+//     represents a *FRAME* rotation by angleN about the coordinate axis
+//     indexed by axisN.  N.B. the result of one
+//
+//       [angleN]
+//               axisN
+//
+//     frame rotation is a matrix, which rotates vectors by -angleN radians
+//     about the axisN coordinate axis cf. SPICE RECGEO documentation
+//
+//       https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/recgeo_c.html
+
+// (3)  LSR frame - Local Space Rectangular frame
+//      - A.k.a. ENU frame, East-North-Up (What's up?  East cross North)
+//      The LSR frame is based on the position of the instrument in the
+//      target body-fixed (BF) frame, where
+//
+//      +zLSR => Vector from target body cent to camera position. N.B. this
+//               vector is planetocentric and different from the
+//               plantographic (geodetic) coordinates described in (1) above.
+//
+//      +xLSR => Direction of east longitude at sub-camera point, equal to
+//               cross product of planetocentric North polar axis (+zBF)
+//               vector with +zLSR vector (above).
+//
+//      +yLSR => In same half-plane of xzLSR plane as +zBF (north, or
+//               positive rotation, pole)
+
+
+void getCamPosOPK(Spice &spice, QString spacecraftName, SpiceDouble et, Camera *cam,
+                  SpiceDouble ographicCamPos[3], SpiceDouble omegaPhiKappa[3],
+                  SpiceDouble isisFocalPlane2SocetPlateTranspose[3][3]) {
+
+  // Unit vectors along positive and negative principal axes:
+  //
+  //                                       [<=== -Z ===>]
+  //                                       |    [<=== -Y ===>]
+  //                                       |    |    [<=== -X ====>]
+  SpiceDouble uvData[8] = { 0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0 };
+  //                        [<=== +Z ===>]   |    |
+  //                             [<=== +Y ==>]    |
+  //                                  [<=== +X ==>]
+  SpiceDouble* uvPlusZ = uvData + 0;
+  //Currently not used:
+  //SpiceDouble* uvPlusY = uvData + 1;
+  //SpiceDouble* uvPlusX = uvData + 2;
+  //SpiceDouble* uvMinusZ = uvData + 3;
+  //SpiceDouble* uvMinusY = uvData + 4;
+  //SpiceDouble* uvMinusX = uvData + 5;
+
+  // Initialize the isisFocalPlane2SocetPlate matrix based on mission
+  //  and/or instrument.
   //
   // isisCam2SocetPlate is the Rotation matrix from ISIS focal plane coordinates
   // to Socet Set plate/focal plane coordinates
-  // For Socet, we need +x = along flight direction
-  //                     +y = left of +x
-  //                     +z = up
-
-  double isisFocalPlane2SocetPlate[3][3] = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}};
+  // For Socet, we need  +Xss = +SAMPLEss
+  //                     +Yss = -LINEss
+  //                     +Zss = anti-boresight
+  //
+  // N.B. +X and +Y are dependent on how pixels are stored in SOCET SET
+  //      .raw files, and that process is external to this application,
+  //      so the hard-coded per-instrument choices made and parameters
+  //      set here make assumptions about that process.  For the most
+  //      part, the SS storage order is the same as in ISIS CUBs; the
+  //      only exceptions, as of 2017-11-16, are OSIRIS-REx MapCam and
+  //      PolyCam.
+
+  SpiceDouble isisFocalPlane2SocetPlate[3][3] = { { 0.0, 0.0, 0.0 },
+                                                  { 0.0, 0.0, 0.0 },
+                                                  { 0.0, 0.0, 0.0 } };
   //-----------------------------------------------------
   //TO DO: Uncomment these lines when Apollo is supported
   //-----------------------------------------------------
@@ -456,10 +671,10 @@ void getCamPosOPK(Spice &spice, QString spacecraftName, double et, Camera *cam,
   //-----------------------------------------------------
   //TO DO: Uncomment these lines when MEX-SRC is supported
   //-----------------------------------------------------
-  //  else if (spacecraftName == "VIKING_ORBITER_1" || spacecraftName == "VIKING_ORBITER_2" ||
-  //           spacecraftName == "MARS_EXPRESS") {
+  //  if (spacecraftName == "VIKING_ORBITER_1" || spacecraftName == "VIKING_ORBITER_2" ||
+  //      spacecraftName == "CLEMENTINE 1"     || spacecraftName == "MARS_EXPRESS") {
   //-----------------------------------------------------
-  //TO DO: Delete this next line when MEX-SRC is supported
+  //TO DO: Delete the next two lines when MEX-SRC is supported
   //-----------------------------------------------------
   if (spacecraftName == "VIKING_ORBITER_1" || spacecraftName == "VIKING_ORBITER_2" ||
       spacecraftName == "CLEMENTINE 1") {
@@ -470,111 +685,278 @@ void getCamPosOPK(Spice &spice, QString spacecraftName, double et, Camera *cam,
 
   //-----------------------------------------------------
   //TO DO: Uncomment these lines when Themis-VIS is supported
-  //----------------------------------------------------- 
-  //  else if (spacecraftName == "MARS_ODYSSEY" || spacecraftName == "Galileo Orbiter" ||
-  //          spacecraftName == "Cassini-Huygens" || spacecraftName == "Messenger" ) {
+  //-----------------------------------------------------
+  //  if (spacecraftName == "MARS_ODYSSEY"    || spacecraftName == "Galileo Orbiter" ||
+  //      spacecraftName == "Cassini-Huygens" || spacecraftName == "Messenger" ) {
   //-----------------------------------------------------
   //TO DO: Delete this next line when Themis-VIS is supported
   //-----------------------------------------------------
-  else if (spacecraftName == "Galileo Orbiter" || spacecraftName == "Cassini-Huygens" ||
-           spacecraftName == "Messenger" || spacecraftName == "OSIRIS-REX") {
+  else if (spacecraftName == "Galileo Orbiter" ||
+           spacecraftName == "Cassini-Huygens" ||
+           spacecraftName == "Messenger") {
     isisFocalPlane2SocetPlate[0][0] = 1.0;
     isisFocalPlane2SocetPlate[1][1] = -1.0;
     isisFocalPlane2SocetPlate[2][2] = -1.0;
   }
 
-  // Fetch Bodyfixed -> Camera matrix w cspice
-  vector<double>  j2000ToBodyFixedMatrixVector = cam->bodyRotation()->Matrix();
-  vector<double>  j2000ToCameraMatrixVector = cam->instrumentRotation()->Matrix();
-
-  // Reformat vector-matrices to 3x3 rotation matricies
-  double j2000ToBodyFixedRotationMatrix[3][3] = {{0.0, 0.0, 0.0},
-                                                 {0.0, 0.0, 0.0},
-                                                 {0.0, 0.0, 0.0}};
-                                                 
-  double j2000ToCameraRotationMatrix[3][3] = {{0.0, 0.0, 0.0},
-                                              {0.0, 0.0, 0.0},
-                                              {0.0, 0.0, 0.0}};
-    
+  /*********************************************************************
+
+ OSIRIS-REx (ORX) spacecraft, MapCam and PolyCam instrument conventions
+ ======================================================================
+
+ _______________________________________________________________________
+ - MapCam and PolyCam FITS
+
+   - Pixels displayed left-to-right (+NAXIS1) and up (+NAXIS2)
+     - Yields image as seen on sky
+
+   - From IK orx_ocams_v06.ti (-64361 and -64360 are Map and Poly):
+
+      INS-64361_BORESIGHT         = ( 0 0 1 )
+      INS-64361_SPOC_FITS_NAXIS1  = (  0.0,  1.0, 0.0 )
+      INS-64361_SPOC_FITS_NAXIS2  = (  1.0,  0.0, 0.0 )
+
+      INS-64360_BORESIGHT         = ( 0 0 1 )
+      INS-64360_SPOC_FITS_NAXIS1  = (  0.0,  1.0, 0.0 )
+      INS-64360_SPOC_FITS_NAXIS2  = (  1.0,  0.0, 0.0 )
+
+   - Boresight is -Zfits (instrument frame)
+   - +NAXIS1 == RIGHT == +Yfits (instrument frame)
+   - +NAXIS2 == UP    == +Xfits (instrument frame)
+
+
+   - Pixels displayed left-to-right (+NAXIS1) and up (+NAXIS2)
+     - Yields image as seen on sky
+
+ _______________________________________________________________________
+ - MapCam and PolyCam ISIS
+
+   - Pixels are displayed left-to-right (+SAMPLEisis) and down (+LINEisis)
+
+   - Pixels are stored in the same order in OREX ISIS Cubes as they are
+     in FITS files
+     - +SAMPLEisis == +NAXIS1(fits)
+     - +LINEisis == +NAXIS2(fits)
+
+   - N.B. So OREX ISIS image display is mirrored about horizontal axis
+          w.r.t.  as seen on sky
+
+   - MapCam and PolyCam ISIS use FITS reference frame
+
+     - +Xisis == +Xfits
+     - +Yisis == +Yfits
+     - +Zisis == +Zfits
+     - BORESIGHTisis == -Zisis
+
+   - From ORX ISIS IAK (extracted from ORX CUB labels):
+
+                             dSample    dSample          dSample
+                             -------    -------          -------
+                              dBand?      dX               dY
+
+       INS-64360_ITRANSS = (     0.0,    0.0,            117.64705882353 )
+       INS-64361_ITRANSS = (     0.0,    0.0,            117.64705882353 )
+
+
+                              dLine    dLine              dLine
+                             -------   -----              -----
+                              dBand?    dX                 dY
+
+       INS-64360_ITRANSL = (     0.0,  117.64705882353,    0.0           )
+       INS-64361_ITRANSL = (     0.0,  117.64705882353,    0.0           )
+
+   - dSample/dXisis = 0, dSample/dYisis > 0: +SAMPLEisis = +Yisis = right
+   -   dLine/dXisis > 0,   dLine/dYisis = 0: +LINEisis   = +Xisis = down
+
+   - N.B. since BORESIGHT == -Zisis, ISIS displays a left-handed frame
+
+ _______________________________________________________________________
+ - MapCam and PolyCam SOCET SET (SS)
+
+   - Pixels are displayed left-to-right (+SAMPLEss) and down (+LINEss)
+
+   - SS conventions
+
+     - +Xss = right = +SAMPLEss
+     - +Yss = up = -LINEss
+     - +Zss = anti-boresight
+     - -Zss = boresight
+
+     - Displaying a left-handed frame is not allowed in SS
+
+   - So SS image pixel storage must be mirrored wrt ISIS image pixel storage
+
+   - Make assumption here that a process, external to this application
+     (socetframesettings), will mirror ISIS image pixels about horizontal
+     (line) axis when writing SS raw image pixels e.g. use ISIS [flip]
+     application.
+
+     - So +LINEss = -LINEisis
+
+   - Final relationship between ISIS focal plane frame and SS plate frame:
+
+     - +Xss = +SAMPLEss      = +SAMPLEisis = +Yisis
+     - +Yss = -LINEss        = +LINEisis   = +Xisis
+     - +Zss = anti-boresight               = -Zisis
+
+
+ _______________________________________________________________________
+ - Visual summary of conventions and choices above:
+
+   - Characters "fits" and "isis" represent faux image data displayed as
+     they would be in SS, assuming they are legible when they are displayed
+     according to native FITS and ISIS display conventions, respectively.
+
+
+       +Yss  ^
+             |
+             |
+             |
+             |+Zss (out of screen)
+           --O-----------------------------------> +SAMPLEss
+             |                                     +Xss
+             |
+             |      X--------------------------------------------------+
+             |      |(1,1)ss                                           |
+             |      |                                                  |
+    +LINEss  V      |       _                                          |
+                    |      | \                                         |
+                    |      |    *                                      |
+                    |      |           |     ___                       |
+                    |      |    |    --+--  /   \                      |
+                    |    --+--  |      |    \___                       |
+                    |      |    |      |        \                      |
+                    |      |    |_/    |_/  \___/                      |
+                    |                                                  |
+                    |                                                  |
+                    |       _    ___    _    ___                       |
+                    |      | \  /   \  | \  /   \                      |
+                    |      |     ___/  |     ___/                      |
+                    |      |    /      |    /                          |
+                    |      |    \___/  |    \___/                      |
+                    |                                                  |
+ +NAXIS2fits ^      |      *           *                               |
+ +LINEisis   |      |                                                  |
+ +Xfits      |      |                                                  |
+ +Xisis      |      |(1,1)isis == (0,0)fits                            |
+             |      X--------------------------------------------------+
+             |
+             |
+             |+Zfits = +Zisis (into screen)
+          ---X---------------------------------> +NAXIS1fits
+             |                                   +SAMPLEisis
+             |                                   +Yfits
+             |                                   +Yisis
+
+ +Xss == +Yisis == +Yfits
+ +Yss == +Xisis == +Xfits
+ +Zss == -Zisis == -Zfits
+
+   ********************************************************************/
+
+  else if (spacecraftName == "OSIRIS-REX") {
+    /* MapCam and PolyCam ISIS-to-SS Matrix swaps X and Y, inverts Z */
+    isisFocalPlane2SocetPlate[1][0] =  1.0;  // +Xisis => +Yss
+    isisFocalPlane2SocetPlate[0][1] =  1.0;  // +Yisis => +Xss
+    isisFocalPlane2SocetPlate[2][2] = -1.0;  // +Zisis => -Zss
+  }
+
+  // Confirm that matrix is now a rotation matrix
+  else {
+    QString msg = QString("The ISIS to SOCET Set translation of input image is currently "
+                          "not supported for instrument [%1].").arg(spacecraftName);
+    throw IException(IException::User, msg, _FILEINFO_);
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////
+  // End of section setting isisFocalPlane2SocetPlate
+  //////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////
+
+  //____________________________________________________________________
+  // From Camera object, fetch rotation matrices that convert vectors from
+  // J2000 inertial frame to Ocentric frame and to ISIS Focal Plane frame.
+  // - (Planet-)Ocentric => target body-fixed [+X = PMxEq.; +Z = TPRP]
+  // - PMxEq. => intersection of target Prime Merdian and Equator
+  // - TPRP => Target Positive Rotation Pole, typically = North
+  vector<double>  j2000ToOcentricMatrixVector = cam->bodyRotation()->Matrix();
+  vector<double>  j2000ToIsisFocalPlaneMatrixVector = cam->instrumentRotation()->Matrix();
+
+  // Reformat rotation matrices from 9-element vector<double>'s to 3x3 arrays
+  SpiceDouble j2000ToOcentricRotationMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                      { 0.0, 0.0, 0.0 },
+                                                      { 0.0, 0.0, 0.0 } };
+  SpiceDouble j2000ToIsisFocalPlaneMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                    { 0.0, 0.0, 0.0 },
+                                                    { 0.0, 0.0, 0.0 } };
+
   for (int j = 0; j < 3; j++) {
     for (int k = 0; k < 3; k++) {
-      j2000ToBodyFixedRotationMatrix[j][k] = j2000ToBodyFixedMatrixVector[3 * j + k];
-      j2000ToCameraRotationMatrix[j][k] = j2000ToCameraMatrixVector[3 * j + k];
+      j2000ToOcentricRotationMatrix[j][k] = j2000ToOcentricMatrixVector[3 * j + k];
+      j2000ToIsisFocalPlaneMatrix[j][k] = j2000ToIsisFocalPlaneMatrixVector[3 * j + k];
     }
   }
 
-  // Compute Camera to Body Fixed rotation matrix
-  double cameraToBodyFixedRotationMatrix[3][3] = {{0.0, 0.0, 0.0},
-                                                  {0.0, 0.0, 0.0},
-                                                  {0.0, 0.0, 0.0}};
-  mxmt_c(j2000ToBodyFixedRotationMatrix, j2000ToCameraRotationMatrix,
-         cameraToBodyFixedRotationMatrix);
+  // Compute rotation matrix from ISIS Focal Plane frame to Ocentric frame
+  SpiceDouble isisFocalPlaneToOcentricRotationMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                               { 0.0, 0.0, 0.0 },
+                                                               { 0.0, 0.0, 0.0 } };
+  mxmt_c(j2000ToOcentricRotationMatrix, j2000ToIsisFocalPlaneMatrix,
+         isisFocalPlaneToOcentricRotationMatrix);
 
-  // get instrumemt position vector and planet radii in meters
-  double instrumentPosition[3] = {0.0, 0.0, 0.0};
+  // Get instrumemt position vector, convert to meters
+  SpiceDouble instrumentPosition[3] = { 0.0, 0.0, 0.0 };
   spice.instrumentPosition(instrumentPosition);
-  for (int i = 0; i < 3; i++) {
-    instrumentPosition[i] *= 1000.0;
-  }
+  vscl_c(1000.0, instrumentPosition, instrumentPosition);
 
+  // Get planet radii
   Distance dRadii[3];
   spice.radii(dRadii);
-  double radii[3] = {0.0, 0.0, 0.0};
-  radii[0] = dRadii[0].meters();
-  radii[1] = dRadii[1].meters();
-  radii[2] = dRadii[2].meters();
-
-  // Calculate ographic coordinates of spacecraft position vector
-  double xyzLength = instrumentPosition[0] * instrumentPosition[0] +
-                instrumentPosition[1] * instrumentPosition[1];
-  double xyLength = sqrt(xyzLength);
-  xyzLength = sqrt (xyzLength + instrumentPosition[2] * instrumentPosition[2]);
-  double flattening = (radii[0] - radii[2]) / radii[0];
-  double lon = 0.0;
-  double lat = 0.0;
-  double height = 0.0;
-  recgeo_c (instrumentPosition, radii[0], flattening, &lon, &lat, &height);
+
+  // Calculate ographic coordinates of spacecraft position vector, in meters
+  SpiceDouble equatorialRadiusMeters = dRadii[0].meters();
+  SpiceDouble flattening = ( equatorialRadiusMeters - dRadii[2].meters() ) /
+                           equatorialRadiusMeters;
+  SpiceDouble lon = 0.0;
+  SpiceDouble lat = 0.0;
+  SpiceDouble height = 0.0;
+  recgeo_c (instrumentPosition, equatorialRadiusMeters, flattening,
+            &lon, &lat, &height);
 
   // Calculate rotation matrix from Socet Set plate to ocentric ground coordinates
-  double socetPlateToOcentricGroundRotationMatrix[3][3] = {{0.0, 0.0, 0.0},
-                                                           {0.0, 0.0, 0.0},
-                                                           {0.0, 0.0, 0.0}};
-                                                           
-  mxmt_c (isisFocalPlane2SocetPlate, cameraToBodyFixedRotationMatrix,
-          socetPlateToOcentricGroundRotationMatrix);
-
-  // Populate the ocentric to ographic rotation matrix
-  double ocentricToOgraphicRotationMatrix[3][3] = {{0.0, 0.0, 0.0},
-                                                   {0.0, 0.0, 0.0},
-                                                   {0.0, 0.0, 0.0}};
-
-  double sinLon = instrumentPosition[1] / xyLength;
-  double cosLon = instrumentPosition[0] / xyLength;
-  double sinLat = instrumentPosition[2] / xyzLength;
-  double cosLat = xyLength / xyzLength;
-  ocentricToOgraphicRotationMatrix[0][0] = -sinLon;
-  ocentricToOgraphicRotationMatrix[1][0] = cosLon;
-  ocentricToOgraphicRotationMatrix[2][0] = 0.0;
-  ocentricToOgraphicRotationMatrix[0][1] = -sinLat * cosLon;
-  ocentricToOgraphicRotationMatrix[1][1] = -sinLat * sinLon;
-  ocentricToOgraphicRotationMatrix[2][1] = cosLat;
-  ocentricToOgraphicRotationMatrix[0][2] = cosLat * cosLon;
-  ocentricToOgraphicRotationMatrix[1][2] = cosLat * sinLon;
-  ocentricToOgraphicRotationMatrix[2][2] = sinLat;
-
-  // Compute the Rotation matrix from Socet Set plate to ographic ground coordinates
+  SpiceDouble ocentricGroundToSocetPlateRotationMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                                 { 0.0, 0.0, 0.0 },
+                                                                 { 0.0, 0.0, 0.0 } };
+
+  mxmt_c (isisFocalPlane2SocetPlate, isisFocalPlaneToOcentricRotationMatrix,
+          ocentricGroundToSocetPlateRotationMatrix);
+
+  // Populate the ocentric-to-LSR rotation matrix; it is a function of
+  // camera position only
+  SpiceDouble lsrToOcentricRotationMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                    { 0.0, 0.0, 0.0 },
+                                                    { 0.0, 0.0, 0.0 } };
+  SpiceDouble ocentricToLsrRotationMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                    { 0.0, 0.0, 0.0 },
+                                                    { 0.0, 0.0, 0.0 } };
+
+  twovec_c(instrumentPosition, 3, uvPlusZ, 2, ocentricToLsrRotationMatrix);
+  xpose_c(ocentricToLsrRotationMatrix, lsrToOcentricRotationMatrix);
+
+  // Compute the Rotation matrix from LSR frame to Socet Set Plate frame,
   // and extract the euler angles to get omega-phi-kappa attidude angles
-  double socetPlateToOgrphicGroundRotationMatrix[3][3] = {{0.0, 0.0, 0.0},
-                                                          {0.0, 0.0, 0.0},
-                                                          {0.0, 0.0, 0.0}};
+  SpiceDouble lsrGroundToSocetPlateRotationMatrix[3][3] = { { 0.0, 0.0, 0.0 },
+                                                            { 0.0, 0.0, 0.0 },
+                                                            { 0.0, 0.0, 0.0 } };
 
-  mxm_c (socetPlateToOcentricGroundRotationMatrix, ocentricToOgraphicRotationMatrix,
-         socetPlateToOgrphicGroundRotationMatrix);
+  mxmt_c (ocentricGroundToSocetPlateRotationMatrix, ocentricToLsrRotationMatrix,
+          lsrGroundToSocetPlateRotationMatrix);
 
-  double omega = 0.0;
-  double phi = 0.0;
-  double kappa = 0.0;
-  m2eul_c (socetPlateToOgrphicGroundRotationMatrix, 3, 2, 1, &kappa, &phi, &omega);
+  SpiceDouble omega = 0.0;
+  SpiceDouble phi = 0.0;
+  SpiceDouble kappa = 0.0;
+  m2eul_c (lsrGroundToSocetPlateRotationMatrix, 3, 2, 1, &kappa, &phi, &omega);
 
   // Return resulting geographic lat, lon, omega, phi, kappa in decimal degrees
   // height in meters
@@ -593,7 +975,6 @@ void getCamPosOPK(Spice &spice, QString spacecraftName, double et, Camera *cam,
 
   // Return the transpose of the isisFocalPlane2SocetPlate matrix for the FrameOffAxis sensor model
   xpose_c(isisFocalPlane2SocetPlate, isisFocalPlane2SocetPlateTranspose);
-  
+
   return;
 }
-
diff --git a/isis/src/socet/apps/socetframesettings/socetframesettings.xml b/isis/src/socet/apps/socetframesettings/socetframesettings.xml
index f2e1da4397a09446a64690dbf39a70ac85c922f6..31be7b2ed9f19ab9fc8e038db9297754684c3f56 100644
--- a/isis/src/socet/apps/socetframesettings/socetframesettings.xml
+++ b/isis/src/socet/apps/socetframesettings/socetframesettings.xml
@@ -11,7 +11,7 @@
     and generates the settings file for input to USGSAstro SOCET SET program 'import_frame.' <br/>
     <br/>
     The input cube must be a "level1" image <b>with SPICE data attached to the label</b> (see
-    spiceinit). <br/> 
+    spiceinit). <br/>
     <br/>
     The following are supported instruments:
     <pre>
@@ -70,6 +70,14 @@
       Added support for OSIRIS-REx instrument and updated documentation to reflect the
       changes. Fixes #3898.
     </change>
+    <change name="Brian Carcich" date="2018-03-07">
+      Fixed rotations for OSIRIS-REX instruments. Added documentation and cleaned up
+      variable names. References #5235.
+    </change>
+    <change name="Jesse Mapel" date="2018-10-11">
+      Changes to better match coding standards and clarify
+      documentation. Added OREX test cases. References #5235.
+    </change>
 
 </history>
 
@@ -83,7 +91,7 @@
         </brief>
         <description>
           Level 1 input Framing Camera cube with SPICE data attached. Supported instruments are
-          CASSINI SSI, CLEMENTINE 1 UVVIS, GALILEO ISS, MESSENGER NAC, MESSENGER WAC, 
+          CASSINI SSI, CLEMENTINE 1 UVVIS, GALILEO ISS, MESSENGER NAC, MESSENGER WAC,
           OSIRIS-REX MapCam, OSIRIS-REX PolyCam, and VIKING ORBITER.
         </description>
         <filter>
@@ -104,7 +112,7 @@
       </parameter>
 
     </group>
-    
+
     <group name="SOCET SET Parameters">
 
       <parameter name="SS_PROJECT">
@@ -116,7 +124,7 @@
           SS_PROJECT=TEST.
         </description>
       </parameter>
-      
+
       <parameter name="SS_IMG_LOC">
         <type>string</type>
         <brief>
@@ -144,7 +152,7 @@
           Entering the file path delimiters (forward slash for UNIX systems, backslash for Windows
           systems) is straight forward when entering your path into the dialog box. However, special
           handling is required when running this program at the command line or in processing
-          scripts. 
+          scripts.
           <pre>
           For SOCET SET running on Windows, an example input path would be
 
@@ -157,7 +165,7 @@
 
           To enter a path on the command line, or in a script, use the escape character (which is a
           backslash) to pass the delimiters to the program.  For this example, enter
-          
+
           SS_INPUT_PATH=E:\\IMAGES\\TEST\\ </pre>
         </description>
       </parameter>
@@ -182,7 +190,7 @@
 
           To enter a path on the command line, or in a script, use the escape character (which is a
           backslash) to pass the delimiters to the program.  For this example, enter
-          
+
           SS_CAM_CALIB_PATH=C:\\SOCET_SET_5.6.0\\internal_dbs\\CAM\\ </pre>
         </description>
       </parameter>
diff --git a/isis/src/socet/apps/socetframesettings/tsts/orexMapCam/Makefile b/isis/src/socet/apps/socetframesettings/tsts/orexMapCam/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..75e220c8439a510c267099642ec395ed0a37e550
--- /dev/null
+++ b/isis/src/socet/apps/socetframesettings/tsts/orexMapCam/Makefile
@@ -0,0 +1,18 @@
+APPNAME = socetframesettings
+
+include $(ISISROOT)/make/isismake.tsts
+
+#Use sed to lower output precision to 5 decimal places in output txt files
+
+commands:
+#Test Celemintine, UVVIS
+	$(APPNAME) from=$(INPUT)/20170923T000306S549_map_iofL2b_V002.cub \
+	  to=$(OUTPUT)/20170923T000306S549_map_iofL2b_V002.set \
+	  ss_project=D:\\data\\TEST \
+	  ss_img_loc=TEST \
+	  ss_input_path=E:\\IMAGES\\TEST\\ \
+	  ss_cam_calib_path=C:\\SOCET_SET_5.6.0\\internal_dbs\\CAM\\ > /dev/null;
+	cat $(OUTPUT)/20170923T000306S549_map_iofL2b_V002.set | \
+	 sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \
+	 $(OUTPUT)/sed_20170923T000306S549_map_iofL2b_V002_settings.txt
+	$(RM) $(OUTPUT)/20170923T000306S549_map_iofL2b_V002.set
diff --git a/isis/src/socet/apps/socetframesettings/tsts/orexPolyCam/Makefile b/isis/src/socet/apps/socetframesettings/tsts/orexPolyCam/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8aac5a78a2a987449aaffd54c5c32942fae81197
--- /dev/null
+++ b/isis/src/socet/apps/socetframesettings/tsts/orexPolyCam/Makefile
@@ -0,0 +1,18 @@
+APPNAME = socetframesettings
+
+include $(ISISROOT)/make/isismake.tsts
+
+#Use sed to lower output precision to 5 decimal places in output txt files
+
+commands:
+#Test Celemintine, UVVIS
+	$(APPNAME) from=$(INPUT)/20190329T183101S0400_pol_iofL2pan.cub \
+	  to=$(OUTPUT)/20190329T183101S0400_pol_iofL2pan.set \
+	  ss_project=D:\\data\\TEST \
+	  ss_img_loc=TEST \
+	  ss_input_path=E:\\IMAGES\\TEST\\ \
+	  ss_cam_calib_path=C:\\SOCET_SET_5.6.0\\internal_dbs\\CAM\\ > /dev/null;
+	cat $(OUTPUT)/20190329T183101S0400_pol_iofL2pan.set | \
+	 sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \
+	 $(OUTPUT)/sed_20190329T183101S0400_pol_iofL2pan_settings.txt
+	$(RM) $(OUTPUT)/20190329T183101S0400_pol_iofL2pan.set
diff --git a/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.cpp b/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.cpp
index 3e37051ca8e1220ed0a10017238afb44d3fe4546..506055eb43e6d15fc665b70a4aa3fd1bdcbeeb33 100644
--- a/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.cpp
+++ b/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.cpp
@@ -42,7 +42,7 @@ void IsisMain() {
   // Use a regular Process
   Process p;
 
-  // Get user parameters and error check 
+  // Get user parameters and error check
   UserInterface &ui = Application::GetUserInterface();
   QString from = ui.GetFileName("FROM");
   QString to = FileName(ui.GetFileName("TO")).expanded();
@@ -140,14 +140,14 @@ void IsisMain() {
     QString msg = "Unsupported instrument: " + instrumentId;
     throw IException(IException::User, msg, _FILEINFO_);
   }
-  
+
   int ikCode = cam->naifIkCode();
 
   // Get Focal Length.
   // NOTE:
   //   For MOC Wide Angle, cam->focal_length returns the focal length
   //      in pixels, so we must convert from pixels to mm using the PIXEL_SIZE
-  //      of 0.007 mm gotten from $ISIS3DATA/mgs/kernels/ik/moc20.ti.  (The  
+  //      of 0.007 mm gotten from $ISIS3DATA/mgs/kernels/ik/moc20.ti.  (The
   //      PIXEL_PITCH value gotten from cam->PixelPitch is 1.0 since the
   //      focal length used by ISIS in this case is in pixels)
   //      For reference: the MOC WA blue filter pixel size needs an adjustment
@@ -211,7 +211,7 @@ void IsisMain() {
   //       boresight is not at the detector center, but the boresight is at the
   //       center of a NOPROJ'ED MRO HIRISE image
 
-  // Get line/samp of boresight pixel in detector space (summing == 1) 
+  // Get line/samp of boresight pixel in detector space (summing == 1)
   focalMap->SetFocalPlane(0.0, 0.0);
   double detectorBoresightSample = focalMap->DetectorSample();
   double detectorBoresightLine = focalMap->DetectorLine();
@@ -266,14 +266,14 @@ void IsisMain() {
     //   intTime = exposureDuration * (double) dsum / 1000000.0;
 
   // Get along and cross scan pixel size for NA and WA sensors.
-  // NOTE:  
+  // NOTE:
   //     1) The MOC WA pixel size is gotten from moc20.ti and is 7 microns
   //         HRSC pixel size is from the Instrument Addendum file
   //     2) For others, cam->PixelPitch() returns the pixel pitch (size) in mm.
   double alongScanPxSize = 0.0;
   double crossScanPxSize = 0.0;
 //TO DO: UNCOMMENT THESE LINES ONCE MOC IS WORKING IN SS
-//  if (isMocWARed || isHRSC) { 
+//  if (isMocWARed || isHRSC) {
 //    alongScanPxSize = csum * 0.007;
 //    crossScanPxSize = dsum * 0.007;
 //  }
@@ -308,7 +308,7 @@ void IsisMain() {
 //TO DO: UNCOMMENT THIS LINE ONCE MOC and HRSC IS WORKING IN SS
 //  }
 
-  // Now that we have totalLines, totalSamples, alongScanPxSize and 
+  // Now that we have totalLines, totalSamples, alongScanPxSize and
   // crossScanPxSize, fill the Interior Orientation Coefficient arrays
   double ioCoefLine[10];
   double ioCoefSample[10];
@@ -376,7 +376,7 @@ void IsisMain() {
   sensorPosition[2] = cam->SpacecraftAltitude() * 1000.0;
 
   // Build the ephem data.  If the image label contains the InstrumentPosition
-  // table, use it as a guide for number and spacing of Ephem points. 
+  // table, use it as a guide for number and spacing of Ephem points.
   // Otherwise (i.e, for dejittered HiRISE images), the number and spacing of
   // ephem points based on hardcoded dtEphem value
 
@@ -486,7 +486,7 @@ void IsisMain() {
     }
 
   }
-  else { 
+  else {
     // Calculate the number of ephemeris points that are needed, based on the
     // value of dtEphem (Delta-Time-Ephemeris).  SOCET SET needs the ephemeris
     // points to exceed the image range for interpolation.  For now, attempt a
@@ -635,7 +635,7 @@ void IsisMain() {
     QList<double> quat;
     quaternions.append(quat << vec[0] << vec[1] << vec[2] << vec[3]);
   }
-  
+
   //update quaternions stats
   numQuaternions += 20;
 
@@ -645,7 +645,7 @@ void IsisMain() {
   //quadrtic time of the first quarternion
   double qt0Quat = et0Quat - etCenter;
 
-  //query remaing transformation parameters from Camera Classes  
+  //query remaing transformation parameters from Camera Classes
   //transformation to distortionless focal plane
   double zDirection = distortionMap->ZDirection();
 
@@ -655,7 +655,7 @@ void IsisMain() {
   // For instruments with less than 3 distortion coefficients, set the
   // unused ones to 0.0
   opticalDistCoefs.resize(3, 0);
-    
+
   //transformation from focal plane to detector
   const double *iTransS = focalMap->TransS();
   const double *iTransL = focalMap->TransL();
@@ -694,6 +694,27 @@ void IsisMain() {
   toStrm << "SENSOR_TYPE USGSAstroLineScanner" << endl;
   toStrm << "SENSOR_MODE UNKNOWN" << endl;
 
+  Distance targetRadii[3];
+  if (cube.label()->hasGroup("Mapping")) {
+    PvlGroup &mappingGroup = cube.label()->findGroup("Mapping");
+    targetRadii[0].setMeters(toDouble(mappingGroup["EquatorialRadius"][0]));
+    targetRadii[2].setMeters(toDouble(mappingGroup["PolarRadius"][0]));
+  }
+  else {
+    try {
+      cam->radii(targetRadii);
+    }
+    catch (IException &e) {
+      QString msg = "Failed to get target body radii from cube.";
+      throw IException(e, IException::Programmer, msg, _FILEINFO_);
+    }
+  }
+  double eccentricity = 1.0 - (targetRadii[2].meters() * targetRadii[2].meters())
+                            / (targetRadii[0].meters() * targetRadii[0].meters());
+  eccentricity = sqrt(eccentricity);
+  toStrm << "SEMI_MAJOR_AXIS  " << targetRadii[0].meters() << "\n";
+  toStrm << "ECCENTRICITY     " << eccentricity << "\n";
+
   toStrm << "FOCAL " << focal << endl;
 
   toStrm << "ATMCO";
@@ -760,13 +781,13 @@ void IsisMain() {
     toStrm << " " << ephemRates[i][1];
     toStrm << " " << ephemRates[i][2] << endl;
   }
- 
+
   toStrm << "\n\nDT_QUAT " << dtQuat << endl;
   toStrm << "T0_QUAT " << qt0Quat << endl;
   toStrm << "NUMBER_OF_QUATERNIONS  " << numQuaternions << endl;
   toStrm << "QUATERNIONS" << endl;
   for (int i = 0; i < numQuaternions; i++) {
-    toStrm << " " << quaternions[i][0]; 
+    toStrm << " " << quaternions[i][0];
     toStrm << " " << quaternions[i][1];
     toStrm << " " << quaternions[i][2];
     toStrm << " " << quaternions[i][3] << endl;
@@ -783,7 +804,7 @@ void IsisMain() {
   //      toStrm << " " << lr.GetStartEt();
   //      toStrm << " " << lr.GetLineScanRate();
   //      toStrm << " " << lr.GetStartLine() << endl;
-  //    } 
+  //    }
   //  }
   //  else
   toStrm << "INT_TIME " << intTime << endl;
diff --git a/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.xml b/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.xml
index 0e8f28353ba30ba1f6fb6712e8a585478849614f..497212397c8533b027f8a9db14581d47de1b4c0f 100644
--- a/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.xml
+++ b/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.xml
@@ -75,6 +75,9 @@
       the pixel-location of the input image's center ephemeris time, and (4) compute spacecraft
       velocity values instead of using SPICE velocity data blobs.  Fixes #1672.
     </change>
+    <change name="Jesse Mapel" date="2018-03-23">
+      Added SEMI_MAJOR_AXIS and ECCENTRICITY to the output. Fixes #5362.
+    </change>
   </history>
 
   <groups>
@@ -110,7 +113,7 @@
 <!--
 Commented this parameter out until HRSC is supported in SS
       <parameter name="HRSC_NADIRCENTERTIME">
-        <brief>Ephemeris time at center of HRSC nadir image 
+        <brief>Ephemeris time at center of HRSC nadir image
         </brief>
         <description>
           Ephemeris time at center of HRSC nadir image.  This is
diff --git a/isis/src/system/apps/isiscomplete/isiscomplete.cpp b/isis/src/system/apps/isiscomplete/isiscomplete.cpp
index bc90d0ed81bca1a73fe50f4168b1b82c55cb819f..6433d6836fe502f0d9cec2845621068e9cdec584 100644
--- a/isis/src/system/apps/isiscomplete/isiscomplete.cpp
+++ b/isis/src/system/apps/isiscomplete/isiscomplete.cpp
@@ -63,6 +63,11 @@ void MakeCompletion(const QString &appName) {
     return;
   }
 
+  if(appName.compare("ipce") == 0 || appName.compare("./ipce") == 0) {
+    cout << "complete " << appName << " 'n@*@f:*.[pP][cC][eE]@'; ";
+    return;
+  }
+
   if(appName.compare("isisui") == 0) {
     QString binPath = FileName("$ISISROOT/bin").expanded();
     cout << "complete isisui 'n@*@F:" << binPath << "/@'; ";
diff --git a/isis/src/system/apps/isiscomplete/isiscomplete.xml b/isis/src/system/apps/isiscomplete/isiscomplete.xml
index ec2ad8a6a4b360d097652d334b272ca195c30e83..eef07315c3b080497b1075ff1f814ff3c12cff05 100644
--- a/isis/src/system/apps/isiscomplete/isiscomplete.xml
+++ b/isis/src/system/apps/isiscomplete/isiscomplete.xml
@@ -7,8 +7,8 @@
 
   <description>
     <p>
-      This program is used to load tcsh tab-completion settings for all Isis applications. This 
-      program will NOT run in GUI mode! Call this program like this: 
+      This program is used to load tcsh tab-completion settings for all Isis applications. This
+      program will NOT run in GUI mode! Call this program like this:
       eval `isiscomplete isisapp [isisapp2 isisapp3 ...]`
     </p>
   </description>
@@ -31,7 +31,7 @@
       This program now handles isisui properly
     </change>
     <change name="Kris Becker" date="2009-11-27">
-      Changed the call to Application to provide compatability withg Qt 
+      Changed the call to Application to provide compatability withg Qt
       startup requirements.
     </change>
     <change name="Jai Rideout" date="2011-07-18">
@@ -40,6 +40,8 @@
     <change name="Steven Lambright" date="2011-07-20">
       This program now handles qmos properly
     </change>
+    <change name="Adam Paquette" date="2017-10-04">
+      This program now handles ipce properly. Fixes #5134.
+    </change>
   </history>
 </application>
-
diff --git a/isis/src/system/apps/kerneldbgen/SpiceDbGen.cpp b/isis/src/system/apps/kerneldbgen/SpiceDbGen.cpp
index ab4949f2f8dbcea6543df32d957abc4eabb272ad..a7695155df4fa584f02d07fea5cc984efb502b09 100644
--- a/isis/src/system/apps/kerneldbgen/SpiceDbGen.cpp
+++ b/isis/src/system/apps/kerneldbgen/SpiceDbGen.cpp
@@ -40,7 +40,8 @@ const char *SpiceDbGen::calForm = "YYYY MON DD HR:MN:SC.###### TDB ::TDB";
 */
 SpiceDbGen::SpiceDbGen(QString type) {
   p_type = type;
-//  calForm = "YYYY MON DD HR:MN:SC.### TDB ::TDB";
+  m_coverageLevel = "SEGMENT"; // default
+  //  calForm = "YYYY MON DD HR:MN:SC.### TDB ::TDB";
 }
 
 
@@ -155,6 +156,17 @@ QStringList SpiceDbGen::GetFiles(FileName location, QString filter) {
 }
 
 
+/**
+ * Sets the desired time coverage level of the Spice database. 
+ * 
+ * @param level The desired time coverage level. May be either Segment or 
+ *              Interval.  
+ */
+void SpiceDbGen::setCoverageLevel(QString level) {
+  m_coverageLevel = level; 
+}
+
+
 /**
   * Format a single kernel file to include the file.
   *
@@ -227,10 +239,16 @@ PvlGroup SpiceDbGen::AddSelection(FileName fileIn, double startOffset, double en
         SPICEDOUBLE_CELL(cover, 200000);
         ssize_c(0, &cover);
         ssize_c(200000, &cover);
-        ckcov_c(tmp.toLatin1().data(), body, SPICEFALSE, "SEGMENT", 0.0, "TDB", &cover);
 
-        NaifStatus::CheckErrors();
+        // A SPICE SEGMENT is composed of SPICE INTERVALS
+        if (QString::compare(m_coverageLevel, "SEGMENT", Qt::CaseInsensitive) == 0 ) {
+          ckcov_c(tmp.toLatin1().data(), body, SPICEFALSE, "SEGMENT", 0.0, "TDB", &cover); 
+        }
+        else {
+          ckcov_c(tmp.toLatin1().data(), body, SPICEFALSE, "INTERVAL", 0.0, "TDB", &cover);
+        }
 
+        NaifStatus::CheckErrors();
         result = FormatIntervals(cover, currFile, startOffset, endOffset);
       }
     }
diff --git a/isis/src/system/apps/kerneldbgen/SpiceDbGen.h b/isis/src/system/apps/kerneldbgen/SpiceDbGen.h
index 616ff25a1993793043bb960cea165f6baf65f71e..9288a8c50548d9502ebdb7431ea0dbaf731907f5 100644
--- a/isis/src/system/apps/kerneldbgen/SpiceDbGen.h
+++ b/isis/src/system/apps/kerneldbgen/SpiceDbGen.h
@@ -47,6 +47,11 @@
  *   @history 2013-02-15 Steven Lambright - Added support for extra kernel dependencies
  *   @history 2018-01-10 Christopher Combs - Added passing startOffset and endOffset to allow
  *                           the passing of time offsets to to FormatIntervals. Fixes #5272.
+ *   @history 2018-05-09 Kristin Berry - Added information about the Spice time coverage level
+ *                            to this class: m_coverageLevel, setCoverageLevel, and this class will
+ *                            now select spice "time intervals" at the level specified. This is
+ *                            either a SPICE Segment (coarse) or a SPICE interval (fine.)
+ *                            Fixes #5410. 
  *
  */
 class SpiceDbGen {
@@ -57,6 +62,7 @@ class SpiceDbGen {
                            std::vector<QString> & filter, double startOffset, double endOffset);
     void FurnishDependencies(QList<Isis::FileName> sclks, QList<Isis::FileName> fks,
                              QList<Isis::FileName> extras);
+    void setCoverageLevel(QString level); 
 
   private:
     QStringList GetFiles(Isis::FileName location, QString filter);
@@ -65,6 +71,7 @@ class SpiceDbGen {
     Isis::PvlGroup GetIntervals(SpiceCell &cover);
     //private instance variables
     QString p_type;
+    QString m_coverageLevel; //! The time coverage level of the database: INTERVAL or SEGMENT
     static const char *calForm;
 };
 
diff --git a/isis/src/system/apps/kerneldbgen/kerneldbgen.cpp b/isis/src/system/apps/kerneldbgen/kerneldbgen.cpp
index fd69b7b53c4dea8b876a6394581b3a815718cd3b..af2a5d8ded458b3a8533222a831b1f04a094c9d6 100644
--- a/isis/src/system/apps/kerneldbgen/kerneldbgen.cpp
+++ b/isis/src/system/apps/kerneldbgen/kerneldbgen.cpp
@@ -15,19 +15,19 @@ void IsisMain() {
   UserInterface &ui = Application::GetUserInterface();
   PvlGroup dependency("Dependencies");
 
-  //create the database writer based on the kernel type
+  // Create the database writer based on the kernel type
   SpiceDbGen sdg(ui.GetString("TYPE"));
 
-  //Load the SCLK. If it exists, add its location to the dependency group
-  //If there is none, set a flag so that no file is searched for
+  // Load the SCLK. If it exists, add its location to the dependency group
+  // If there is none, set a flag so that no file is searched for
   QList<FileName> sclkFiles = evaluateDependencies(dependency, "SpacecraftClockKernel", "SCLK");
   QList<FileName> lskFiles = evaluateDependencies(dependency, "LeapsecondKernel", "LSK");
   QList<FileName> extraFiles = evaluateDependencies(dependency, "ExtraKernel", "EXTRA");
 
   sdg.FurnishDependencies(sclkFiles, lskFiles, extraFiles);
 
-  //Determine the type of kernel that the user wants a database for. This will
-  //eventually become the name of the object in the output PVL
+  // Determine the type of kernel that the user wants a database for. This will
+  // eventually become the name of the object in the output PVL
   QString kernelType;
   if (ui.GetString("TYPE") == "CK") {
     kernelType = "SpacecraftPointing";
@@ -37,6 +37,17 @@ void IsisMain() {
   }
   PvlObject selections(kernelType);
 
+  // Specify whether to use SPICE segments (made up of SPICE intervals) 
+  // or SPICE intervals for the SPICE database. Naif referes to this as "coverage level" 
+  QString coverageLevel; 
+  if (ui.GetString("LEVEL") == "SEGMENT") {
+    coverageLevel = "SEGMENT"; 
+  }
+  else if (ui.GetString("LEVEL") == "INTERVAL") {
+    coverageLevel = "INTERVAL"; 
+  }
+  sdg.setCoverageLevel(coverageLevel); 
+
   selections += PvlKeyword("RunTime", iTime::CurrentLocalTime());
   selections.addGroup(dependency);
 
diff --git a/isis/src/system/apps/kerneldbgen/kerneldbgen.xml b/isis/src/system/apps/kerneldbgen/kerneldbgen.xml
index e12f3e126f9c02ae1df5f72435d0901933fad840..7879eaf24534a65babd3abe1482584672eed51eb 100644
--- a/isis/src/system/apps/kerneldbgen/kerneldbgen.xml
+++ b/isis/src/system/apps/kerneldbgen/kerneldbgen.xml
@@ -152,6 +152,10 @@
       Added STARTOFFSET and ENDOFFSET parameters to allow for slight editing to start and end times.
       Fixes #5272.
     </change>
+    <change name="Kristin Berry" date="2018-05-09">
+      Added the LEVEL=(SEGMENT*, INTERVAL) option to specify the time coverage level to be used for the generated database. SPICE segements are made up of SPICE intervals. 
+      Segments (the only option in the past) are now the default, but interval can be selected if needed. Fixes #5410. 
+    </change>
   </history>
 
   <groups>
@@ -221,6 +225,37 @@
         </list>
       </parameter>
     </group>
+    <group name="Coverage Level">
+      <parameter name="LEVEL">
+        <type>string</type>
+        <default>
+          <item>SEGMENT</item>
+        </default>
+        <brief>
+           The level of time-granularity for the time-coverage interval to be output to the SPICE database. 
+        </brief>
+        <description>
+        </description>
+        <list>
+          <option value="SEGMENT">
+            <brief>
+              SPICE Segment             
+            </brief>
+            <description>
+              The coarsest level of time granularity, a SPICE segment is composed of SPICE intervals.              
+            </description>
+          </option>
+          <option value="INTERVAL">
+            <brief>
+              SPICE Interval 
+            </brief>
+            <description>
+              A finer level of time granularity. 
+            </description>
+          </option>
+        </list>
+      </parameter>
+    </group>
     <group name="Predict">
       <parameter name="PREDICTDIR">
         <type>string</type>
diff --git a/isis/src/system/apps/kerneldbgen/tsts/coverageLevel/Makefile b/isis/src/system/apps/kerneldbgen/tsts/coverageLevel/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..ea023286f7edbf8dcf789d42d07046a69be34165
--- /dev/null
+++ b/isis/src/system/apps/kerneldbgen/tsts/coverageLevel/Makefile
@@ -0,0 +1,38 @@
+# Coverage Level Test for kerneldbgen
+#
+# This test creates an output database file from the kernel in the input file
+# that follow the given filter for reconstructed ck file name patterns. A database
+# is output with time coverage at the SPICE segment level and at the SPICE interval 
+# level. (There will be one output entry for the spice segment, and several for the
+# SPICE interval because a SPICE segment is composed of SPICE intervals.) 
+#
+# After the output PVL is created, when compared, the DIFF file indicates to
+# ignore RunTime and File.  The File keyword is ignored since, depending on 
+# where the test is run, files may have different paths. These paths can not be 
+# removed since they may be long enough to take up multiple lines.
+# 
+# This test uses files from the TGO CaSSIS mission, as this is where the problem
+# was identified. 
+#
+# history 2018-05-09 Kristin Berry - Added test for newly added time coverage 
+#                                    LEVEL=(SEGMENT*, INTERVAL) option. See #5410
+APPNAME = kerneldbgen
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	# Default output level=segment
+	$(APPNAME) to=$(OUTPUT)/kernel_segment.db.pvl \
+	  type=CK \
+	  recondir=$(INPUT) \
+	  reconfilter='em16_tgo_sc_??m_*.bc' \
+	  sclk=\$$tgo/kernels/sclk/em16_tgo_step_????????.tsc \
+          lsk=\$$base/kernels/lsk/naif0012.tls > /dev/null; 
+
+	# Output with level=interval, needed for CaSSIS kernels and potentially other type-6 kernels
+	$(APPNAME) to=$(OUTPUT)/kernel_interval.db.pvl \
+	  type=CK \
+	  level=INTERVAL \
+	  recondir=$(INPUT) \
+	  reconfilter='em16_tgo_sc_??m_*.bc' \
+ 	  sclk=\$$tgo/kernels/sclk/em16_tgo_step_????????.tsc \
+          lsk=\$$base/kernels/lsk/naif0012.tls > /dev/null;
diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp
index 6754aded2bed19b1dcfbabe4c12542d4537b0686..d02dd341feb343ab2322c6c6f1f4d1d0b39f1b38 100644
--- a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp
+++ b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp
@@ -1,37 +1,83 @@
 #include "Isis.h"
 
 #include <QString>
+#include <QtMath>
 
 #include "AlphaCube.h"
 #include "Cube.h"
 #include "FileName.h"
+#include "IException.h"
+#include "iTime.h"
 #include "LineManager.h"
 #include "OriginalXmlLabel.h"
 #include "Preference.h"
 #include "ProcessImport.h"
+#include "PvlTranslationTable.h"
 #include "UserInterface.h"
 #include "XmlToPvlTranslationManager.h"
-#include "iTime.h"
 
 using namespace std;
 using namespace Isis;
 
 void translateCoreInfo(FileName &inputLabel, ProcessImport &importer);
-void translateLabels(FileName &inputLabel, Cube *outputCube);
+void translateCoreInfo(XmlToPvlTranslationManager labelXlater, ProcessImport &importer);
+bool translateMappingLabel(FileName inputLabel, Cube *outputCube);
+bool translateMosaicLabel(FileName inputLabel, Cube *outputCube);
+void translateLabels(FileName &inputLabel, Cube *outputCube, QString transFile);
+QString convertUniqueIdToObservationId(Pvl &outputLabel);
 
 void IsisMain() {
-
   UserInterface &ui = Application::GetUserInterface();
   FileName xmlFileName = ui.GetFileName("FROM");
 
   try {
     ProcessImport importer;
     translateCoreInfo(xmlFileName, importer);
-    // fails 
-    importer.SetInputFile(xmlFileName.removeExtension().addExtension("dat").expanded());
+    
+    if(xmlFileName.removeExtension().addExtension("dat").fileExists()){
+      importer.SetInputFile(xmlFileName.removeExtension().addExtension("dat").expanded());
+    } 
+    else if (xmlFileName.removeExtension().addExtension("img").fileExists()) {
+      importer.SetInputFile(xmlFileName.removeExtension().addExtension("img").expanded());
+    }
+    else {
+      QString msg = "Cannot find image file for [" + xmlFileName.name() + "]. Confirm that the "
+        ".dat or .img file for this XML exists and is located in the same directory.";
+      throw IException(IException::User, msg, _FILEINFO_);
+    }
+    
     Cube *outputCube = importer.SetOutputCube("TO");
-    // fails above
-    translateLabels(xmlFileName, outputCube);
+
+    QString transRawFile = "/translations/tgoCassisInstrument.trn";
+    QString transExportFile = "/translations/tgoCassisExportedInstrument.trn";
+
+    // first assume lev1b image
+    Pvl *outputLabel = outputCube->label();
+    QString target = "";
+    try {
+      translateLabels(xmlFileName, outputCube, transRawFile); 
+    } 
+    catch (IException &e) {
+
+      if (translateMappingLabel(xmlFileName, outputCube)) {
+        if (!translateMosaicLabel(xmlFileName, outputCube)) {
+          translateLabels(xmlFileName, outputCube, transExportFile);
+        }
+        else {
+          if(outputLabel->findObject("IsisCube").hasGroup("Instrument")) {
+            outputLabel->findObject("IsisCube").deleteGroup("Instrument"); 
+          }
+        }
+      }
+      else {
+        if(outputLabel->findObject("IsisCube").hasGroup("Mapping")) {
+          outputLabel->findObject("IsisCube").deleteGroup("Mapping"); 
+        }
+        translateLabels(xmlFileName, outputCube, transExportFile);
+      }
+    }
+
+    convertUniqueIdToObservationId(*outputLabel);
 
     FileName outputCubeFileName(ui.GetFileName("TO"));
 
@@ -64,19 +110,43 @@ void IsisMain() {
  *  
  * @internal
  *   @history 2017-01-20 Jeannie Backer - Original Version
- *   @history 2017-01-21 Krisitn Berry - Flipped ns & nl. They're flipped in the CaSSIS header.
  */
 void translateCoreInfo(FileName &inputLabel, ProcessImport &importer) {
   // Get the directory where the Tgo translation tables are
   PvlGroup &dataDir = Preference::Preferences().findGroup("DataDirectory");
   QString missionDir = (QString) dataDir["Tgo"];
-  FileName transFile(missionDir + "/translations/tgoCassis.trn");
 
   // Get the translation manager ready
-  XmlToPvlTranslationManager labelXlater(inputLabel, transFile.expanded());
+  FileName transFile; 
+  try {
+    transFile = FileName(missionDir + "/translations/tgoCassis.trn"); 
+    XmlToPvlTranslationManager labelXlater(inputLabel, transFile.expanded());
+    translateCoreInfo(labelXlater, importer);
+  } 
+  catch (IException &e) {
+    // if exported, use this!
+    transFile = FileName(missionDir + "/translations/tgoCassisRdr.trn"); 
+    XmlToPvlTranslationManager labelXlater(inputLabel, transFile.expanded());
+    translateCoreInfo(labelXlater, importer);
+  }
+}
 
-  QString str;
+
+/**
+ * Translate core info from labels and set ProcessImport object with 
+ * these values.
+ *
+ * @param labelXlater Reference to the XmlToPvlTranslationManager objcet to use for the translation.
+ * @param importer Reference to the ProcessImport object to which core info will
+ *                 be set.
+ *  
+ * @internal
+ *   @history 2017-01-20 Jeannie Backer - Original Version
+ *   @history 2017-01-21 Krisitn Berry - Flipped ns & nl. They're flipped in the CaSSIS header.
+ */
+void translateCoreInfo(XmlToPvlTranslationManager labelXlater, ProcessImport &importer) {
   // Set up the ProcessImport
+  QString str;
   str = labelXlater.Translate("CoreSamples");
   int ns = toInt(str);
   str = labelXlater.Translate("CoreLines");
@@ -85,7 +155,7 @@ void translateCoreInfo(FileName &inputLabel, ProcessImport &importer) {
   int nb = toInt(str);
   importer.SetDimensions(ns, nl, nb);
 
-  str = labelXlater.Translate("CoreType");    
+  str = labelXlater.Translate("CoreType");
   importer.SetPixelType(PixelTypeEnumeration(str));
 
   str = labelXlater.Translate("CoreByteOrder");    
@@ -100,6 +170,111 @@ void translateCoreInfo(FileName &inputLabel, ProcessImport &importer) {
 }
 
 
+/**
+ * Translate the cartographic info from the xml.
+ * 
+ * @param xmlFileName The xml label file name for the input image.
+ * @param outputCube Pointer to output cube where ISIS3 labels will be added and 
+ *                   updated.
+ */
+bool translateMappingLabel(FileName xmlFileName, Cube *outputCube) {
+  //Translate the Mapping Group
+  try {
+    PvlGroup &dataDir = Preference::Preferences().findGroup("DataDirectory"); 
+    QString missionDir = (QString) dataDir["Tgo"];
+    FileName mapTransFile(missionDir + "/translations/tgoCassisMapping.trn");
+
+    // Get the translation manager ready for translating the mapping label
+
+    XmlToPvlTranslationManager labelXMappinglater(xmlFileName, mapTransFile.expanded());
+
+    // Pvl output label
+    Pvl *outputLabel = outputCube->label();
+    labelXMappinglater.Auto(*(outputLabel));
+  }
+  catch (IException &e) {
+    Pvl *outputLabel = outputCube->label();
+    if(outputLabel->hasGroup("Mapping")) {
+      outputLabel->deleteGroup("Mapping"); 
+    }
+    return false;
+  }
+  return true;
+}
+
+
+/**
+ * Translate the Mosaic group info from the xml.
+ * 
+ * @param xmlFileName The xml label file name for the input image.
+ * @param outputCube Pointer to output cube where ISIS3 labels will be added and 
+ *                   updated.
+ */
+bool translateMosaicLabel(FileName xmlFileName, Cube *outputCube) {
+  QDomDocument xmlDoc;
+    
+  QFile xmlFile(xmlFileName.expanded());
+  if ( !xmlFile.open(QIODevice::ReadOnly) ) {
+    QString msg = "Could not open label file [" + xmlFileName.expanded() +
+                  "].";
+    throw IException(IException::Unknown, msg, _FILEINFO_);
+  }
+
+  QString errmsg;
+  int errline, errcol;
+  if ( !xmlDoc.setContent(&xmlFile, false, &errmsg, &errline, &errcol) ) {
+    xmlFile.close();
+    QString msg = "XML read/parse error in file [" + xmlFileName.expanded()
+        + "] at line [" + toString(errline) + "], column [" + toString(errcol)
+        + "], message: " + errmsg;
+    throw IException(IException::Unknown, msg, _FILEINFO_);
+  }
+
+  xmlFile.close();
+
+  QDomElement inputParentElement = xmlDoc.documentElement();
+  if (!inputParentElement.isNull()) {
+    inputParentElement = inputParentElement.firstChildElement("Identification_Area");
+    if (!inputParentElement.isNull()) {
+      QDomElement logicalId = inputParentElement.firstChildElement("logical_identifier");
+      if (!logicalId.isNull()) {
+        QString logicalIdText = logicalId.text();
+        QStringList logicalIdStringList = logicalIdText.split(":");
+        if (logicalIdStringList.contains("data_mosaic")) {
+          try {
+            PvlGroup &dataDir = Preference::Preferences().findGroup("DataDirectory"); 
+            QString missionDir = (QString) dataDir["Tgo"];
+            FileName bandBinTransFile(missionDir + "/translations/tgoCassisMosaicBandBin.trn");
+            // Get the translation manager ready for translating the band bin label
+            XmlToPvlTranslationManager labelXBandBinlater(xmlFileName, bandBinTransFile.expanded());
+            // Pvl output label
+            Pvl *outputLabel = outputCube->label();
+            labelXBandBinlater.Auto(*(outputLabel));
+            FileName mosaicTransFile(missionDir + "/translations/tgoCassisMosaic.trn");
+
+            // Get the translation manager ready for translating the mosaic label
+            XmlToPvlTranslationManager labelXMosaiclater(xmlFileName, mosaicTransFile.expanded());
+            labelXMosaiclater.Auto(*(outputLabel));
+            return true;
+          }
+          catch (IException &e) {
+            Pvl *outputLabel = outputCube->label();
+            if(outputLabel->hasGroup("Mosaic")) {
+              outputLabel->deleteGroup("Mosaic"); 
+            }
+            if(outputLabel->hasGroup("BandBin")) {
+              outputLabel->deleteGroup("BandBin"); 
+            }
+            return false;
+          }
+        }
+      }
+    }
+  }
+  return false;
+}
+
+
 /**
  * Translate instrument, bandbin, and archive info from xml label into ISIS3 
  * label and add kernels group. 
@@ -112,11 +287,11 @@ void translateCoreInfo(FileName &inputLabel, ProcessImport &importer) {
  *   @history 2017-01-20 Jeannie Backer - Original Version
  *   @history 2017-01-23 Kristin Berry - Added support for bandBin group and archive group
  */
-void translateLabels(FileName &inputLabel, Cube *outputCube) {
+void translateLabels(FileName &inputLabel, Cube *outputCube, QString instTransFile) {
   // Get the directory where the Tgo translation tables are
   PvlGroup &dataDir = Preference::Preferences().findGroup("DataDirectory");
   QString missionDir = (QString) dataDir["Tgo"];
-  FileName transFile(missionDir + "/translations/tgoCassisInstrument.trn");
+  FileName transFile(missionDir + instTransFile);
 
   // Get the translation manager ready for translating the instrument label
   XmlToPvlTranslationManager labelXlater(inputLabel, transFile.expanded());
@@ -145,8 +320,9 @@ void translateLabels(FileName &inputLabel, Cube *outputCube) {
 
   // Create the Archive Group
   FileName archiveTransFile(missionDir + "/translations/tgoCassisArchive.trn");
-  FileName subTransFile(missionDir + "/translations/tgoCassisSubWindow.trn");
   XmlToPvlTranslationManager archiveXlater(inputLabel, archiveTransFile.expanded());
+
+  FileName subTransFile(missionDir + "/translations/tgoCassisSubWindow.trn");
   XmlToPvlTranslationManager subXlater(inputLabel, subTransFile.expanded());
 
   // Pvl output label
@@ -154,9 +330,15 @@ void translateLabels(FileName &inputLabel, Cube *outputCube) {
   archiveXlater.Auto(*(outputLabel));
   subXlater.Auto(*(outputLabel));
 
-  // Create YearDoy keyword in Archive group
-  iTime stime(outputLabel->findGroup("Instrument", Pvl::Traverse)["StartTime"][0]);
-
+  // Remove trailing "Z" from PDS4 .xml (on re-ingestion) and create YearDoy keyword in Archive group
+  PvlKeyword *startTime = &outputLabel->findGroup("Instrument", Pvl::Traverse)["StartTime"];
+  QString startTimeString = startTime[0];
+  if (QString::compare(startTimeString.at(startTimeString.size() - 1), "Z", Qt::CaseInsensitive) == 0){
+    startTimeString = startTimeString.left(startTimeString.length() - 1);
+    startTime->setValue(startTimeString);
+  }
+  iTime stime(startTimeString);
+  
   PvlGroup &archive = outputLabel->findGroup("Archive", Pvl::Traverse);
                                                   
   PvlKeyword yeardoy("YearDoy", toString(stime.Year()*1000 + stime.DayOfYear()));
@@ -250,5 +432,57 @@ void translateLabels(FileName &inputLabel, Cube *outputCube) {
                          frameletStartSample - 0.5, frameletStartLine - 0.5,
                          frameletEndSample + 0.5, frameletEndLine + 0.5);
   frameletArea.UpdateGroup(*outputCube);
+
 }
 
+
+QString convertUniqueIdToObservationId(Pvl &outputLabel) {
+  if (outputLabel.findObject("IsisCube").hasGroup("Mosaic")) {
+    return ""; // translation file should auto translate this case to Mosaic group.
+               // For any other product, this ID goes in the Archive group.
+  }
+
+  QString target = "";
+  if (outputLabel.findObject("IsisCube").hasGroup("Instrument")) {
+    target = outputLabel.findGroup("Instrument", Pvl::Traverse)
+                        .findKeyword("TargetName")[0];
+  }
+  else {
+    target = outputLabel.findGroup("Mapping", Pvl::Traverse)
+                        .findKeyword("TargetName")[0];
+  }
+
+  PvlGroup &archiveGroup = outputLabel.findGroup("Archive", Pvl::Traverse);
+  QString uniqueId = archiveGroup.findKeyword("UniqueIdentifier")[0];
+
+  QString observationId = "";
+  BigInt uniqueIdDecimalValue = uniqueId.toLongLong();
+  BigInt operationPeriod = (uniqueIdDecimalValue & 1879048192);
+  operationPeriod /= qPow(2,28);
+  FileName transFile("$tgo/translations/tgoCassisOperationPeriod.trn");
+  PvlTranslationTable transTable(transFile);
+  observationId = transTable.Translate("OperationPeriod", toString(operationPeriod));
+  BigInt orbitNumber = (uniqueIdDecimalValue & 268433408);
+  orbitNumber /= qPow(2,11);
+  observationId += "_";
+  observationId += QString("%1").arg(orbitNumber, 6, 10, QChar('0'));
+
+  int orbitPhase = (uniqueIdDecimalValue & 2044);
+  if (target.compare("mars", Qt::CaseInsensitive) == 0) {
+    orbitPhase /= qPow(2,2);
+  }
+  else {
+    orbitPhase = 900;
+  }
+  observationId += "_";
+  observationId += QString("%1").arg(orbitPhase, 3, 10, QChar('0'));
+
+  int imageType = (uniqueIdDecimalValue & 3);
+  observationId += "_";
+  observationId += toString(imageType);
+
+  archiveGroup += PvlKeyword("ObservationId", observationId);
+
+  return observationId;
+
+}
diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml
index 7e910eb6d2e6a1d01e10f52b04b3456a39b6bb2f..678ae41863008524e4fe0411fa8d51f144e78138 100644
--- a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml
+++ b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml
@@ -106,6 +106,25 @@
     <change name="Jeannie Backer" date="2017-09-05">
       Added check to verify input input xml file corresponds to valid filter image. 
     </change>
+    <change name="Summer Stapleton" date="2018-02-16">
+      Added handling for image file extesnions of either .dat or .img. Fixes #5334. 
+    </change>
+    <change name="Kristin Berry and Makayla Shepherd" date="2018-05-15">
+     Updated to ingest images which have been exported using tgocassisrdrgen. Fixes #5418.
+    </change>
+    <change name="Kristin Berry and Makayla Shepherd" date="2018-05-15">
+     Updated to ingest Mapping groups from images have been exported using tgocassisrdrgen. Fixes #5418.
+    </change>
+    <change name="Kristin Berry and Makayla Shepherd" date="2018-05-22">
+     Updated to ingest mosaics exported from tgocassisrdrgen #5418.
+   </change>
+    <change name="Summer Stapleton" date="2018-05-22">
+      Stripped the "Z" from the StartTime value in the "Instrument" group to handle re-ingestion 
+      of PDS4 compliant .xml files.
+    </change>
+    <change name="Jeannie Backer" date="2018-08-12">
+      Added ObservationId to Archive group.
+    </change>
   </history>
 
   <category>
diff --git a/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile b/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..faee5a626add021bd1744c0e63e791299268b465
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile
@@ -0,0 +1,23 @@
+# This test checks to see if images exported from tgocassisrdrgen can be 
+# re-imported using tgocassis2isis. 
+#
+# history 2018-05-16 Kristin Berry - Original version. References # 5418
+
+APPNAME = tgocassis2isis 
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.50.30.181-RED-01012-B1_rdrgen.xml \
+	   to=$(OUTPUT)/reingested_unproj.cub > /dev/null;
+	catlab from=$(OUTPUT)/reingested_unproj.cub \
+	  to=$(OUTPUT)/reingested_unproj.pvl > /dev/null;
+
+
+# projected
+	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.50.30.181-RED-01012-B1_proj_rdrgen.xml \
+	   to=$(OUTPUT)/reingested_proj.cub > /dev/null;
+	catlab from=$(OUTPUT)/reingested_proj.cub \
+	  to=$(OUTPUT)/reingested_proj.pvl > /dev/null;
+
+# add mosaic test later. 
diff --git a/isis/src/tgo/apps/tgocassis2isis/tsts/fileExtensions/Makefile b/isis/src/tgo/apps/tgocassis2isis/tsts/fileExtensions/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d549dd704fcb06bd53ec37b45357aecc7bdc945a
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassis2isis/tsts/fileExtensions/Makefile
@@ -0,0 +1,44 @@
+# Test the handling of data file extensions
+#
+# @history 2018-02-24 Summer Stapleton - Original version
+#
+# NOTE On re-import of data from tgocassisrdrgen, data files will have a .img extension as
+#	opposed to a .dat
+
+APPNAME = tgocassis2isis
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+# TEST This tests the .dat file extension
+	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-PAN-00000-B1.xml \
+		to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-PAN-00000-B1.cub > /dev/null;
+	
+	catlab from=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-PAN-00000-B1.cub \
+		to=$(OUTPUT)/datLabels.pvl > /dev/null;
+	
+	
+# TEST This tests the .img file extension
+	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xml \
+		to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub> /dev/null;
+	
+	catlab from=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \
+		to=$(OUTPUT)/imgLabels.pvl > /dev/null;
+	
+	
+# TEST This tests for the nonexistance of a .dat or .img file for a given .xml
+	echo "Test for non-existant data file:" > $(OUTPUT)/errors.txt;
+	if [ `$(APPNAME) \
+		from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-RED-01000-B1.xml \
+		to=$(OUTPUT)/BROKEN.cub \
+		2>> $(OUTPUT)/errors_temp.txt > /dev/null` ]; \
+		then true; \
+		fi;
+
+# Remove everything in brackets like filenames/paths from error messages
+	$(SED) 's/\[\([^"]*\)\]//g' $(OUTPUT)/errors_temp.txt \
+	> $(OUTPUT)/errors.txt;
+	
+# Cleanup
+	$(RM) $(OUTPUT)/errors_temp.txt
+	$(RM) $(OUTPUT)/BROKEN.cub; 
diff --git a/isis/src/tgo/apps/tgocassismos/Makefile b/isis/src/tgo/apps/tgocassismos/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassismos/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(ISISROOT), $(BLANK))
+.SILENT:
+error:
+	echo "Please set ISISROOT";
+else
+	include $(ISISROOT)/make/isismake.apps
+endif
\ No newline at end of file
diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e5f9d03357cc5c53c5b4257c2d4e26ce712117b0
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp
@@ -0,0 +1,288 @@
+#include "Isis.h"
+
+#include "Application.h"
+#include "Camera.h"
+#include "Cube.h"
+#include "FileList.h"
+#include "IException.h"
+#include "Pvl.h"
+#include "IString.h"
+#include "Longitude.h"
+#include "OriginalLabel.h"
+#include "Process.h"
+#include "ProgramLauncher.h"
+#include "TProjection.h"
+#include "UserInterface.h"
+
+
+using namespace std;
+using namespace Isis;
+
+#include <vector>
+
+//functions in the code
+void compareLabels(Pvl &match, Pvl &comp);
+
+
+void IsisMain() {
+
+  // Get the list of cubes to mosaic
+
+  UserInterface &ui = Application::GetUserInterface();
+  FileList fromList(ui.GetFileName("FROMLIST"));
+
+  vector<Cube *> cubeList;
+  try {
+    if (fromList.size() < 1) {
+      QString msg = "the list file [" + ui.GetFileName("FROMLIST") +
+                    "does not contain any data";
+      throw IException(IException::User, msg, _FILEINFO_);
+    }
+
+    // open all the cube and place in vector cubeList
+
+    for (int i = 0; i < fromList.size(); i++) {
+      Cube *cube = new Cube();
+      cubeList.push_back(cube);
+      cube->open(fromList[i].toString());
+    }
+
+
+
+    // run the compare function here.  This will compare the
+    // labels of the first cube to the labels of each following cube.
+    Pvl *matchLabel = cubeList[0]->label();
+    for (int i = 0; i < (int)cubeList.size(); i++) {
+      Pvl *compareLabel = cubeList[i]->label();
+      compareLabels(*matchLabel, *compareLabel);
+    }
+
+    bool runXY = true;
+
+    //calculate the min and max lon
+    double minLat = DBL_MAX;
+    double maxLat = -DBL_MAX;
+    double minLon = DBL_MAX;
+    double maxLon = -DBL_MAX;
+    double avgLat;
+    double avgLon;
+    for (int i = 0; i < (int)cubeList.size(); i++) {
+      TProjection *proj = (TProjection *) cubeList[i]->projection();
+      if (proj->MinimumLatitude() < minLat) minLat = proj->MinimumLatitude();
+      if (proj->MaximumLatitude() > maxLat) maxLat = proj->MaximumLatitude();
+      if (proj->MinimumLongitude() < minLon) minLon = proj->MinimumLongitude();
+      if (proj->MaximumLongitude() > maxLon) maxLon = proj->MaximumLongitude();
+    }
+    avgLat = (minLat + maxLat) / 2;
+    avgLon = (minLon + maxLon) / 2;
+    TProjection *proj = (TProjection *) cubeList[0]->projection();
+    proj->SetGround(avgLat, avgLon);
+    avgLat = proj->UniversalLatitude();
+    avgLon = proj->UniversalLongitude();
+
+    // Use camera class to get Inc., emi., phase, and other values
+    double emissionAngle;
+    double phaseAngle;
+    double incidenceAngle;
+    double localSolarTime;
+    double solarLongitude;
+    double sunAzimuth;
+    double northAzimuth;
+    for (int i = 0; i < (int)cubeList.size(); i++) {
+      Camera *cam = cubeList[i]->camera();
+      if (cam->SetUniversalGround(avgLat, avgLon)) {
+        emissionAngle = cam->EmissionAngle();
+        phaseAngle = cam->PhaseAngle();
+        incidenceAngle = cam->IncidenceAngle();
+        localSolarTime = cam->LocalSolarTime();
+        solarLongitude = cam->solarLongitude().degrees();
+        sunAzimuth = cam->SunAzimuth();
+        northAzimuth = cam->NorthAzimuth();
+        runXY = false;
+        break;
+      }
+    }
+
+    //The code within the if runXY was added in 10/07 to find an intersect with
+    //pole images that would fail when using projection set universal ground.
+    // This is run if no intersect is found when using lat and lon in
+    // projection space.
+    if (runXY) {
+      double startX = DBL_MAX;
+      double endX = DBL_MIN;
+      double startY = DBL_MAX;
+      double endY =  DBL_MIN;
+      for (int i = 0; i < (int)cubeList.size(); i++) {
+        TProjection *proj = (TProjection *) cubeList[i]->projection();
+        proj->SetWorld(0.5, 0.5);
+        if (i == 0) {
+          startX = proj->XCoord();
+          endY = proj->YCoord();
+        }
+        else {
+          if (proj->XCoord() < startX) startX =  proj->XCoord();
+          if (proj->YCoord() > endY) endY = proj->YCoord();
+        }
+        Pvl *p = cubeList[i]->label();
+        double nlines = p->findGroup("Dimensions", Pvl::Traverse)["Lines"];
+        double nsamps = p->findGroup("Dimensions", Pvl::Traverse)["Samples"];
+
+        proj->SetWorld((nsamps + 0.5), (nlines + 0.5));
+        if (i == 0) {
+          endX = proj->XCoord();
+          startY = proj->YCoord();
+        }
+        else {
+          if (proj->XCoord() > endX) endX =  proj->XCoord();
+          if (proj->YCoord() < startY) startY = proj->YCoord();
+        }
+      }
+
+      double avgX = (startX + endX) / 2;
+      double avgY = (startY + endY) / 2;
+      double sample = proj->ToWorldX(avgX);
+      double line = proj->ToWorldY(avgY);
+
+      for (int i = 0; i < (int)cubeList.size(); i++) {
+        Camera *cam = cubeList[i]->camera();
+        if (cam->SetImage(sample, line)) {
+          emissionAngle = cam->EmissionAngle();
+          phaseAngle = cam->PhaseAngle();
+          incidenceAngle = cam->IncidenceAngle();
+          localSolarTime = cam->LocalSolarTime();
+          solarLongitude = cam->solarLongitude().degrees();
+          sunAzimuth = cam->SunAzimuth();
+          northAzimuth = cam->NorthAzimuth();
+          runXY = false;
+          break;
+        }
+      }
+    }
+    if (runXY) {
+      QString msg = "Camera did not intersect images to gather stats";
+      throw IException(IException::User, msg, _FILEINFO_);
+    }
+
+    // get the min SCLK values ( do this with QString comp.)
+    // get the value from the original label blob
+    QString startClock;
+    QString startTime;
+    QString instrumentId;
+    QString spacecraftName;
+    QString observationId;
+
+    for (int i = 0; i < (int)cubeList.size(); i++) {
+      // himos used original label here.
+
+      Pvl *origLab = cubeList[i]->label();
+      PvlGroup instGroup = origLab->findGroup("Instrument", Pvl::Traverse);
+      PvlGroup archiveGroup = origLab->findGroup("Archive", Pvl::Traverse);
+
+      if (i == 0) {
+        spacecraftName = instGroup["SpacecraftName"][0];
+        instrumentId =   instGroup["InstrumentId"][0];
+        observationId =  archiveGroup["ObservationId"][0];
+        startTime =      instGroup["StartTime"][0];
+        startClock =     instGroup["SpacecraftClockStartCount"][0];
+      }
+      else {
+        QString testStartTime = instGroup["StartTime"][0];
+        if (testStartTime < startTime) {
+          startTime = testStartTime;
+          startClock = instGroup["SpacecraftClockStartCount"][0];
+        }
+      }
+    }
+
+    // Get the blob of original labels from first image in list
+   // Pvl *org = cubeList[0]->label();
+
+    //close all cubes
+    for (int i = 0; i < (int)cubeList.size(); i++) {
+      cubeList[i]->close();
+      delete cubeList[i];
+    }
+    cubeList.clear();
+
+    // automos step
+    QString list = ui.GetFileName("FROMLIST");
+    QString toMosaic = ui.GetFileName("TO");
+    QString mosaicPriority = ui.GetString("PRIORITY");
+
+    QString parameters = "FROMLIST=" + list + " MOSAIC=" + toMosaic + " PRIORITY=" + mosaicPriority;
+
+    if (QString::compare(ui.GetString("GRANGE"), "USER", Qt::CaseInsensitive) == 0) {
+      parameters += " GRANGE=USER";
+      parameters += " MINLAT=" + ui.GetAsString("MINLAT");
+      parameters += " MAXLAT=" + ui.GetAsString("MAXLAT");
+      parameters += " MINLON=" + ui.GetAsString("MINLON");
+      parameters += " MAXLON=" + ui.GetAsString("MAXLON");
+    }
+
+    ProgramLauncher::RunIsisProgram("automos", parameters);
+
+    // write out new information to new group mosaic
+
+
+    PvlGroup mos("Mosaic");
+    mos += PvlKeyword("SpacecraftName", spacecraftName);
+    mos += PvlKeyword("InstrumentId", instrumentId);
+    mos += PvlKeyword("ObservationId ", observationId);
+    mos += PvlKeyword("StartTime ", startTime);
+    mos += PvlKeyword("SpacecraftClockStartCount ", startClock);
+    mos += PvlKeyword("IncidenceAngle ", toString(incidenceAngle), "degrees");
+    mos += PvlKeyword("EmissionAngle ", toString(emissionAngle), "degrees");
+    mos += PvlKeyword("PhaseAngle ", toString(phaseAngle), "degrees");
+    mos += PvlKeyword("LocalTime ", toString(localSolarTime)); 
+    mos += PvlKeyword("SolarLongitude ", toString(solarLongitude), "degrees");
+    mos += PvlKeyword("SubSolarAzimuth ", toString(sunAzimuth), "degrees");
+    mos += PvlKeyword("NorthAzimuth ", toString(northAzimuth), "degrees");
+
+    Cube mosCube;
+    mosCube.open(ui.GetFileName("TO"), "rw");
+    PvlObject &lab = mosCube.label()->findObject("IsisCube");
+    lab.addGroup(mos);
+    //add orginal label blob to the output cube
+//    mosCube.write(org);
+    mosCube.close();
+
+  }
+  catch(IException &e) {
+    e.print();
+    for (int i = 0; i < (int)cubeList.size(); i++) {
+      cubeList[i]->close();
+      delete cubeList[i];
+    }
+    QString msg = "The mosaic [" + ui.GetFileName("TO") + "] was NOT created";
+    throw IException(IException::User, msg, _FILEINFO_);
+  }
+} // end of isis main
+
+
+/**
+ * Function to verify that label values match.
+ */
+void compareLabels(Pvl &matchLabel, Pvl &compareLabel) {
+  // test of the ObservationId
+   PvlGroup matchArchive = matchLabel.findGroup("Archive", Pvl::Traverse);
+   PvlGroup compareArchive = compareLabel.findGroup("Archive", Pvl::Traverse);
+
+   QString matchObsId = matchArchive["ObservationId"];
+   QString compareObsId = compareArchive["ObservationId"];
+
+   if (matchObsId != compareObsId) {
+     QString msg = "Images not from the same observation";
+     throw IException(IException::User, msg, _FILEINFO_);
+   }
+
+  // Test of the BandBin filter name
+  PvlGroup matchBandBin = matchLabel.findGroup("BandBin", Pvl::Traverse);
+  PvlGroup compareBandBin = compareLabel.findGroup("BandBin", Pvl::Traverse);
+  QString matchFilter = matchBandBin["FilterName"];
+  QString compareFilter = compareBandBin["FilterName"];
+
+  if (matchFilter != compareFilter) {
+    QString msg = "Images not the same filter";
+    throw IException(IException::User, msg, _FILEINFO_);
+  }
+}
diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml
new file mode 100644
index 0000000000000000000000000000000000000000..872297f8ebc62339898a1efbcd2494a07f6f5e09
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<application name="tgocassismos" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd">
+  <brief>
+    Produce an output mosaic of TGO CaSSIS images from the same observation and filter.
+  </brief>
+
+  <description>
+    <p>
+  If the final product wil not be an RDR, mapmos or automos can be used to produce a mosaic.
+  This program produces a mosaic and adds keywords to the label group "Mosaic". <br/>
+
+  The  input cubes  to this program must be from the same observation, same filter, and map projected.<br/>
+
+   A new label group, required by tgocassisrdrgen, called "Mosaic"  is added to the image labels of
+   the output cube.  The original label blob is also propagated from the first file in the input list.<br/>
+   </p>
+
+<p>
+  <b> processing sequence for single filter products that will become RDRs </b><br/>
+         <b>cam2map</b> - project the cube.<br/>
+         <b>tgocassismos</b> - mosaic files and add keywords to the mosaic group.<br/>
+         <b>tgocassisrdrgen</b> - produce a RDR product.<br/>
+</p>
+
+ </description>
+
+  <category>
+    <missionItem>Trace Gas Orbiter</missionItem>
+  </category>
+
+  <history>
+    <change name="Makayla Shepherd" date="2018-05-09">
+      Original version.
+    </change>
+    <change name="Adam Goins" date="2018-05-17">
+      Added SpacecraftName and InstrumentId to mosaic group.
+    </change>
+    <change name="Kristin Berry" date="2018-06-12">
+      Removed the "_filtername" from the ProductId. 
+    </change>
+    <change name="Kristin Berry" date="2018-06-16">
+      Update to read the ObservationId from the Archive Group. 
+    </change>
+    <change name="Jeannie Backer" date="2018-08-10">
+      Added option to allow user to choose ground range. 
+    </change>
+  </history>
+
+  <groups>
+    <group name="Files">
+      <parameter name="FROMLIST">
+        <type>filename</type>
+        <fileMode>input</fileMode>
+        <brief>
+          Input list of files
+        </brief>
+        <description>
+          A single colume list of TGO CaSSIS files that will be mosaiced together.  The input
+          files must be from the some observation and be from the same filter.  The files must also
+          be map projected.
+        </description>
+        <filter>
+          *.lis *.lst *.txt
+        </filter>
+      </parameter>
+
+      <parameter name="TO">
+        <type>cube</type>
+        <fileMode>output</fileMode>
+        <brief>
+          Output mosaic
+        </brief>
+        <description>
+          The output mosaic cube with the new mosaic label group added.
+        </description>
+        <filter>
+          *.cub
+        </filter>
+      </parameter>
+
+      <parameter name="PRIORITY">
+        <type>string</type>
+        <default>
+          <item>ONTOP</item>
+        </default>
+        <brief>The priority of pixel placement</brief>
+        <description>
+          This parameter is used to select one of two ways to masaic the
+          pixels in areas of overlap.
+        </description>
+
+        <list>
+          <option value="ONTOP">
+            <brief>Input cube will be placed on top of the mosaic </brief>
+            <description>
+              When the input pixel is not Null, the input pixel
+              value will be written to the output cube.
+            </description>
+          </option>
+          <option value="BENEATH">
+            <brief>Input cube will be placed beneath the mosaic</brief>
+            <description>
+              When the mosaic pixel is not Null it will be left unchanged.
+            </description>
+          </option>
+        </list>
+      </parameter>
+    </group>
+    <group name="Ground Range">
+      <parameter name="GRANGE">
+      <type>string</type>
+      <default><item>AUTO</item></default>
+      <brief>Ground Range Options</brief>
+      <description>
+        AUTO is the default for this parameter. By default the ground range is
+        calculated automatically based on the list of input cubes.  The user can
+        override this default. If the USER option is selected, values must be
+        entered for the MINLAT, MAXLAT, MINLON, and MAXLON parameters.
+      </description>
+      <list>
+        <option value="AUTO">
+          <brief>Automatically Calculate Range</brief>
+          <description>
+            The program will automatically calculate the ground range for the
+            mosaic by examining that latitude and longitude range of all the
+            cubes contained in the list passed to FROMLIST.  This is the
+            default option.
+          </description>
+          <exclusions>
+            <item>MINLAT</item>
+            <item>MAXLAT</item>
+            <item>MINLON</item>
+            <item>MAXLON</item>
+          </exclusions>
+        </option>
+        <option value="USER">
+          <brief>User Entered Range</brief>
+          <description>
+            The program will apply the ground range values you entered for
+            the mosaic.
+          </description>
+          <inclusions>
+            <item>MINLAT</item>
+            <item>MAXLAT</item>
+            <item>MINLON</item>
+            <item>MAXLON</item>
+          </inclusions>
+        </option>
+      </list>
+      </parameter>
+      <parameter name="MINLAT">
+        <type>double</type>
+        <brief>Minimum Latitude</brief>
+        <description>
+          The minimum latitude value boundary extent for the output mosaic.
+        </description>
+        <helpers>
+          <helper name="H1">
+            <function>helperButtonCalcRange</function>
+            <brief>Calculate Ranges using FROMLIST</brief>
+            <description>
+              This button will calculate the latitude and longitude range using the files in the
+              FROMLIST.
+            </description>
+            <icon>$ISIS3DATA/base/icons/exec.png</icon>
+          </helper>
+        </helpers>
+      </parameter>
+      <parameter name="MAXLAT">
+        <type>double</type>
+        <brief>Maximum Latitude</brief>
+        <description>
+          The maximum latitude value boundary extent for the output mosaic.
+        </description>
+        <greaterThan>
+            <item>MINLAT</item>
+        </greaterThan>
+      </parameter>
+      <parameter name="MINLON">
+        <type>double</type>
+        <brief>Minimum Longitude</brief>
+        <description>
+          The minimum longitude value boundary extent for the output mosaic.
+        </description>
+      </parameter>
+      <parameter name="MAXLON">
+        <type>double</type>
+        <brief>Maximum Longitude</brief>
+        <description>
+          The maximum longitude value bounary extent for the output mosaic.
+        </description>
+        <greaterThan>
+            <item>MINLON</item>
+        </greaterThan>
+      </parameter>
+    </group>
+  </groups>
+</application>
diff --git a/isis/src/tgo/apps/tgocassismos/tsts/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassismos/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-40s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/tgo/apps/tgocassismos/tsts/default/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/default/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..03ee1c91fffed0ae3f23fe1c39ba86840137c400
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassismos/tsts/default/Makefile
@@ -0,0 +1,10 @@
+APPNAME = tgocassismos
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(LS) -1 $(INPUT)/*.cub > $(OUTPUT)/mosaic.lis;
+	$(APPNAME) fromlist=$(OUTPUT)/mosaic.lis \
+		   to=$(OUTPUT)/tgocassismos.cub >& /dev/null;
+	catlab from=$(OUTPUT)/tgocassismos.cub to=$(OUTPUT)/tgocassismos.pvl >& /dev/null;	
+	$(RM) $(OUTPUT)/mosaic.lis;
diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp
index 5983257fb70a440c6d7bbb9da28e349e59173ec2..a2f17a8b71e040069caef7dda8a43f297672c3dc 100644
--- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp
+++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp
@@ -20,7 +20,7 @@ using namespace std;
 void IsisMain() {
   UserInterface &ui = Application::GetUserInterface();
 
-    // Check if input file is indeed, a cube
+  // Check if input file is indeed, a cube
   if (ui.GetFileName("FROM").right(3) != "cub") {
     QString msg = "Input file [" + ui.GetFileName("FROM") +
                 "] does not appear to be a cube";
@@ -32,43 +32,101 @@ void IsisMain() {
   Cube *icube = process.SetInputCube("FROM");
 
   PvlObject *label= icube->label();
-  PvlKeyword &instrument = label->findObject("IsisCube").findGroup("Instrument").findKeyword("InstrumentId");
+
+  PvlGroup targetGroup;
+  QString logicalId = "urn:esa:psa:em16_tgo_frd:";
+
+  if ( label->findObject("IsisCube").hasGroup("Instrument") ) {
+    targetGroup = label->findObject("IsisCube").findGroup("Instrument");
+    if (label->findObject("IsisCube").hasGroup("Mapping")) {
+      logicalId += "data_projected:";
+    }
+    else {
+      logicalId += "data_raw:";
+    }
+  }
+  else if ( label->findObject("IsisCube").hasGroup("Mosaic") ) {
+    targetGroup = label->findObject("IsisCube").findGroup("Mosaic");
+    logicalId += "data_mosaic:";
+  }
 
   // Check if the cube is able to be translated into a CaSSIS xml file
   // This could very well be unnecessary
-  if (!instrument.isEquivalent("CaSSIS")) {
+  if (!targetGroup.findKeyword("InstrumentId").isEquivalent("CaSSIS")) {
     QString msg = "Input file [" + ui.GetFileName("FROM") +
                 "] does not appear to be a CaSSIS RDR product. The image" +
                 "instrument is not the CaSSIS instrument";
     throw  IException(IException::User, msg, _FILEINFO_);
   }
 
-/*
+  // Add the ProductId keyword for translation. If a product id is not specified
+  // by the user, set it to the Observation Id.
+  // This is added before the translation instead of adding it to the exported xml
+  // because of the ease of editing pvl vs xml.
+  PvlKeyword productId("ProductId");
+  if ( ui.WasEntered("PRODUCTID") ) {
+    productId.setValue( ui.GetString("PRODUCTID") );
+  }
+  else {
+    // Get the observationId from the Archive Group, or the Mosaic group, if the input is a mosaic
+    QString observationId; 
+
+    if(label->findObject("IsisCube").hasGroup("Archive")){
+      PvlGroup archiveGroup = label->findObject("IsisCube").findGroup("Archive");
+      observationId = archiveGroup.findKeyword("ObservationId")[0];
+    }
+    else if (label->findObject("IsisCube").hasGroup("Mosaic")) {
+      PvlGroup mosaicGroup = label->findObject("IsisCube").findGroup("Mosaic");
+      observationId = mosaicGroup.findKeyword("ObservationId")[0];
+    }
+    productId.setValue(observationId);
+  }
+
+  targetGroup.addKeyword(productId);  
+  logicalId += productId[0];
+  process.setLogicalId(logicalId);
+
+  // std PDS4 label
+  process.StandardPds4Label();
+
+  process.addSchema("PDS4_PSA_1000.sch", 
+                    "PDS4_PSA_1000.xsd",
+                    "xmlns:psa", 
+                    "http://psa.esa.int/psa/v1");
+
+  process.addSchema("PDS4_PSA_EM16_CAS_1000.sch", 
+                    "PDS4_PSA_EM16_CAS_1000.xsd",
+                    "xmlns",
+                    "http://psa.esa.int/psa/em16/cas/v1");
+
+  // Add geometry schema for mosaics
+  if (label->findObject("IsisCube").hasGroup("Mosaic")) {
+    process.addSchema("PDS4_GEOM_1900_1510.sch", 
+                      "PDS4_GEOM_1900_1510.xsd",
+                      "xmlns:geom",
+                      "https://pds.jpl.nasa.gov/datastandards/schema/released/geom/v1");
+  }
+
+
+ /*
   * Add additional pds label data here
   */
-
   QDomDocument &pdsLabel = process.GetLabel();
-  PvlToXmlTranslationManager cubeLab(*(icube->label()),
-                                    "$tgo/translations/tgoCassisExport.trn");
-  cubeLab.Auto(pdsLabel);
 
-  process.StandardPds4Label();
 
-  // This regular expression matches the pipe followed by the date from
-  // the ISIS version string that Application returns.
-  QRegularExpression versionRegex(" \\| \\d{4}\\-\\d{2}\\-\\d{2}");
-  QString historyDescription = "Created PDS4 output product from ISIS cube with tgocassisrdrgen "
-                               "application from ISIS version "
-                               + Application::Version().remove(versionRegex) + ".";
-  // This regular expression matches the time from the date and time string
-  // that Application returns.
-  QRegularExpression dateRegex("T\\d{2}:\\d{2}:\\d{2}");
-  QString historyDate = Application::DateTime().remove(dateRegex);
-  process.addHistory(historyDescription, historyDate);
+  // The default translation for for non-mosaicked output
+  QString exportTranslationFile = "$tgo/translations/tgoCassisExport.trn"; 
+
+  if (label->findObject("IsisCube").hasGroup("Mosaic")) {
+    exportTranslationFile = "$tgo/translations/tgoCassisExportMosaic.trn";
+  }
+
+  PvlToXmlTranslationManager cubeLab(*(icube->label()), exportTranslationFile);
+  cubeLab.Auto(pdsLabel);
 
   ProcessExportPds4::translateUnits(pdsLabel);
-  
+
   QString outFile = ui.GetFileName("TO");
-  
+
   process.WritePds4(outFile);
 }
diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml
index 7e8601cfa794ac5d93085d7b516c3f1e0d5ef424..bde3b3deae0178e640ec0794dcb90ec940f8154f 100644
--- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml
+++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml
@@ -23,12 +23,24 @@
       Changed the order that the elements appear in the output label.
     </change>
     <change name="Marjorie Hahn" date="2017-06-05">
-      Added a default test to ensure that if the exported PDS4 data is reingested, 
+      Added a default test to ensure that if the exported PDS4 data is reingested,
       then it is the same as the original cube.
     </change>
     <change name="Marjorie Hahn" date="2017-06-08">
       Moved code to write out .img and .xml PDS4 data to WritePds4 in ProcessExportPds4.
     </change>
+    <change name="Kaitlyn Lee" date="2018-05-16">
+      Added parameter PRODUCTID to set the ProductId keyword. If the product id is
+      not specified by the user, set the ProductId keyword to the observation id.
+    </change>
+    <change name="Kaitlyn Lee" date="2018-05-21">
+      Added the check to see if the input cube is a mosaic. If it is, instead of
+      the Instrument group, the cube will have a Mosaic group. So, the ProductId
+      will now be written to the Mosaic group.
+    </change>
+    <change name="Kristin Berry" date="2018-06-12">
+      Updated to use the tgoCassisExportMosaic.trn translation file when the input cube is a mosaic.
+    </change>
   </history>
 
   <category>
@@ -65,5 +77,19 @@
         <filter>*.img</filter>
       </parameter>
     </group>
+
+    <group name="Keywords">
+      <parameter name="PRODUCTID">
+        <type>string</type>
+        <internalDefault>None</internalDefault>
+        <brief>
+          Product ID value
+        </brief>
+        <description>
+          Update the default Product ID value. This value will be the last section of the PDS4 logical_identifier value.
+        </description>
+      </parameter>
+    </group>
+
   </groups>
 </application>
diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile b/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile
deleted file mode 100644
index 51212eb085e3b49ab59ca66ed7aa2b1819e39837..0000000000000000000000000000000000000000
--- a/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-APPNAME = tgocassisrdrgen
-
-include $(ISISROOT)/make/isismake.tsts
-
-commands: 
-	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \
-	           to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.img \
-		   > /dev/null;
-
-	# Reingest the PDS4 data
-	raw2isis from=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.img \
-	         to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \
-	         SAMPLES=2048 \
-	         LINES=254 \
-	         BITTYPE=REAL \
-	         BYTEORDER=LSB \
-		 > /dev/null;
-
-	# Compare the output cube from raw2isis to the original input cube to
-	# ensure that they are identical
-	cubediff from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \
-	         from2=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \
-	         to=$(OUTPUT)/cubediffresults.txt \
-		 > /dev/null;
-
-	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
-	       $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.xml \
-	       > $(OUTPUT)/templabel1.txt;
-	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
-	       $(OUTPUT)/templabel1.txt \
-	       > $(OUTPUT)/templabel2.txt;
-	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
-	       $(OUTPUT)/templabel2.txt \
-	       > $(OUTPUT)/templabel3.txt;
-	$(SED) 's+\Modification_Detail.*>+\Modification_Detail>+' \
-	       $(OUTPUT)/templabel3.txt \
-	       > $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.xmlLabel.txt;
-
-
-	$(RM) $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.xml \
-	      $(OUTPUT)/templabel1.txt \
-	      $(OUTPUT)/templabel2.txt \
-	      $(OUTPUT)/templabel3.txt;
diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tsts/errors/Makefile b/isis/src/tgo/apps/tgocassisrdrgen/tsts/errors/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..15f140257d2d3d5d277315a181d595e04f5b5540
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassisrdrgen/tsts/errors/Makefile
@@ -0,0 +1,29 @@
+APPNAME = tgocassisrdrgen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+# TEST: Throws an error for a non-cube input
+	echo "Test Non-Cube:" > $(OUTPUT)/errors.txt;
+	if [ `$(APPNAME) \
+	  from=$(INPUT)/NonCube.xml \
+	  to=$(OUTPUT)/BROKEN.img \
+	  2>> $(OUTPUT)/errors_temp.txt > /dev/null` ]; \
+	  then true; \
+	  fi; 
+# TEST: Throws an error for a bad instrument name
+	echo "" >> $(OUTPUT)/errors.txt ;
+	echo "Test InstrumentId:" >> $(OUTPUT)/errors.txt ;
+	if [ `$(APPNAME) \
+	  from=$(INPUT)/InstrumentError.cub \
+	  to=$(OUTPUT)/BROKEN.img \
+	  2>> $(OUTPUT)/errors_temp.txt > /dev/null` ]; \
+	  then true; \
+	  fi;
+# Remove everything in brackets like filenames/paths from error messages
+	$(SED) 's/\[\([^"]*\)\]//g' $(OUTPUT)/errors_temp.txt \
+	> $(OUTPUT)/errors.txt; 
+
+# Cleanup
+	$(RM) $(OUTPUT)/errors_temp.txt;
+	$(RM) $(OUTPUT)/BROKEN.img;	
diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tsts/raw/Makefile b/isis/src/tgo/apps/tgocassisrdrgen/tsts/raw/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8e1cfb9dc464e52ee0b495432182f428cd8cdb9a
--- /dev/null
+++ b/isis/src/tgo/apps/tgocassisrdrgen/tsts/raw/Makefile
@@ -0,0 +1,74 @@
+# Verify that we can export a non-projected and non-mosaiked cube as a TGO CaSSIS image.
+# Test that we can override the product id with the PRODUCTID parameter.
+#
+# history 2018-05-18 Kaitlyn Lee - Changed input cube with one that has the
+# 				ObservationId. Added the removal of the modification_date and ISIS version.
+# 				Added testing for PRODUCTID parameter.
+
+APPNAME = tgocassisrdrgen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \
+	           to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.img \
+		   > /dev/null;
+
+	# Reingest output and make sure the cubes are the same
+	raw2isis from=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.img \
+					 to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \
+					 SAMPLES=2048 \
+					 LINES=252 \
+					 BITTYPE=REAL \
+					 BYTEORDER=LSB \
+		 > /dev/null;
+
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	       $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xml \
+	       > $(OUTPUT)/templabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/templabel1.txt \
+	       > $(OUTPUT)/templabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/templabel2.txt \
+	       > $(OUTPUT)/templabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/templabel3.txt \
+	       > $(OUTPUT)/templabel4.txt
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/templabel4.txt \
+	       > $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xmlLabel.txt;
+
+	$(RM) $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xml \
+	      $(OUTPUT)/templabel1.txt \
+	      $(OUTPUT)/templabel2.txt \
+	      $(OUTPUT)/templabel3.txt \
+				$(OUTPUT)/templabel4.txt;
+
+	# Test PRODUCTID parameter with same input
+	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \
+	           to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.img \
+						 PRODUCTID=placeholderId \
+		   > /dev/null;
+
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	       $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.xml \
+	       > $(OUTPUT)/templabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/templabel1.txt \
+	       > $(OUTPUT)/templabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/templabel2.txt \
+	       > $(OUTPUT)/templabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/templabel3.txt \
+	       > $(OUTPUT)/templabel4.txt
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/templabel4.txt \
+	       > $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.xmlLabel.txt;
+
+	$(RM) $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.xml \
+	      $(OUTPUT)/templabel1.txt \
+	      $(OUTPUT)/templabel2.txt \
+	      $(OUTPUT)/templabel3.txt \
+				$(OUTPUT)/templabel4.txt;
diff --git a/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.cpp b/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.cpp
index 006881993b196072b7e447a0470d77d71aff9267..72255c4ebea5795012811c66789ca17fbc43e818 100644
--- a/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.cpp
+++ b/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.cpp
@@ -25,7 +25,7 @@ void stitchFrame(QList<FileName> frameletList, FileName frameFileName);
 
 /**
  * Functor for stitching framelets into a full frame
- * 
+ *
  * @author 2017-09-09 Jesse Mapel
  * @internal
  *   @history 2017-09-09 Original Version.
@@ -37,7 +37,7 @@ public:
   AlphaCube alphaCube() const;
   Cube *outputCube() const;
   void operator()(Isis::Buffer &in) const;
-  
+
 private:
   AlphaCube m_alphaCube;
   Cube *m_outputCube;
@@ -90,9 +90,9 @@ void IsisMain() {
 /**
  * Go through a list of framelet cube files and sort them into frames based on
  * their timing.
- * 
+ *
  * @param frameletList The file containing the list of framelet cubes
- * 
+ *
  * @return @b QMap<QString,FileName> A multi-valued mapping from observation
  *                                   number for a frame to the framelet cube
  *                                   files in that frame.
@@ -114,9 +114,13 @@ QMap<QString, FileName> sortFramelets(FileName frameletListFile) {
 /**
  * Combine several framelet cubes into a single frame cube. The labels from the
  * first framelet will be propegated to the frame cube.
- * 
+ *
  * @param frameletList A list of the framelet cubes to stitch together
  * @param frameFileName The file name of the output frame cube
+ *
+ * @internal
+ *   @history 2018-02-15 Adam Goins - Modified stitchFrame to store the Archive
+ *                           group for ingested framelets. Fixes #5333.
  */
 void stitchFrame(QList<FileName> frameletList, FileName frameFileName) {
   // Create the frame cube based on the first framelet cube
@@ -130,22 +134,13 @@ void stitchFrame(QList<FileName> frameletList, FileName frameFileName) {
   frameCube.create( frameFileName.expanded() );
 
   // Setup the label for the new cube
-  PvlGroup archGroup = firstFrameletCube.group("Archive");
   PvlGroup kernGroup = firstFrameletCube.group("Kernels");
   PvlGroup instGroup = firstFrameletCube.group("Instrument");
   PvlGroup bandBinGroup("BandBin");
   if ( instGroup.hasKeyword("Filter") ) {
     instGroup["Filter"].setValue("FULLCCD");
   }
-  if ( archGroup.hasKeyword("ProductId") ) {
-    archGroup.deleteKeyword("ProductId");
-  }
-  if ( archGroup.hasKeyword("FileName") ) {
-    archGroup.deleteKeyword("FileName");
-  }
-  if ( archGroup.hasKeyword("Window_Count") ) {
-    archGroup.deleteKeyword("Window_Count");
-  }
+
   bandBinGroup += PvlKeyword("FilterName", "FULLCCD");
 
   // Setup Stitch group keywords
@@ -203,6 +198,10 @@ void stitchFrame(QList<FileName> frameletList, FileName frameFileName) {
     stitchGroup["FilterWidths"]    += frameletBandBin["Width"];
     stitchGroup["FilterIkCodes"]   += frameletBandBin["NaifIkCode"];
 
+    PvlGroup archiveGroup = frameletCube->group("Archive");
+    archiveGroup.setName("Archive" + QString(frameletBandBin["FilterName"]));
+    frameCube.putGroup(archiveGroup);
+
     AlphaCube frameletAlphaCube(*frameletCube);
     stitchGroup["FilterStartSamples"] += toString(frameletAlphaCube.AlphaSample(0.0));
     stitchGroup["FilterSamples"]      += toString(frameletAlphaCube.BetaSamples());
@@ -212,7 +211,7 @@ void stitchFrame(QList<FileName> frameletList, FileName frameFileName) {
     PvlGroup frameletArchGroup = frameletCube->group("Archive");
     stitchGroup["FilterFileNames"]  += frameletArchGroup["FileName"];
 
-    
+
     Pvl &frameletLabel = *frameletCube->label();
     for(int i = 0; i < frameletLabel.objects(); i++) {
       if( frameletLabel.object(i).isNamed("History") ) {
@@ -226,7 +225,6 @@ void stitchFrame(QList<FileName> frameletList, FileName frameFileName) {
   // Finalize the frame cube label
   frameCube.putGroup(instGroup);
   frameCube.putGroup(kernGroup);
-  frameCube.putGroup(archGroup);
   frameCube.putGroup(bandBinGroup);
   frameCube.putGroup(stitchGroup);
 }
@@ -234,7 +232,7 @@ void stitchFrame(QList<FileName> frameletList, FileName frameFileName) {
 
 /**
  * Construct a stitch functor for input and output cubes.
- * 
+ *
  * @param inputCube A pointer to the input cube. The alpha cube will be
  *                  extracted from this cube.
  * @param outputCube The output stitched cube that will be written to.
@@ -246,7 +244,7 @@ StitchFunctor::StitchFunctor(Cube *inputCube, Cube *outputCube) :
 /**
  * Return the alpha cube for mapping the input framelet cube into the output
  * frame cube.
- * 
+ *
  * @return @b AlphaCube The framelet cube's alpha cube.
  */
 AlphaCube StitchFunctor::alphaCube() const {
@@ -256,7 +254,7 @@ AlphaCube StitchFunctor::alphaCube() const {
 
 /**
  * Return a pointer to the output frame cube.
- * 
+ *
  * @return @b Cube* The output frame cube.
  */
 Cube *StitchFunctor::outputCube() const {
@@ -267,7 +265,7 @@ Cube *StitchFunctor::outputCube() const {
 /**
  * Process method that maps a line from the input framelet cube to the output
  * frame cube.
- * 
+ *
  * @param in A line of data from the input cube.
  */
 void StitchFunctor::operator()(Isis::Buffer &in) const {
diff --git a/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.xml b/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.xml
index af0af8caad336da34a057b4e5776d57e90f0d32c..ff10ca1895e6e527300fc0418393665e284b5ae9 100644
--- a/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.xml
+++ b/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.xml
@@ -26,6 +26,9 @@
       Backward Compatibility Issue: Changed name from stitch to tgocassisstitch and
       changed output parameter name "TO" to "OUTPUTPREFIX."
     </change>
+    <change name="Adam Goins" date="2018-02-15">
+      Modified stitchFrame to store the Archive group for ingested framelets. Fixes #5333.
+    </change>
   </history>
 
   <category>
diff --git a/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.cpp b/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.cpp
index b18d80f37513f2b76ceea000bd05e845dccbc2e9..445e38ebf78523acbad94139de8e2b7236876868 100644
--- a/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.cpp
+++ b/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.cpp
@@ -25,17 +25,21 @@ using namespace Isis;
 
 /**
  * Struct for storing information about a filter.
- * 
+ *
  * @author 2017-09-15 Kristin Berry
- * 
+ *
  * @internal
  *   @history 2017-09-15 Kristin Berry - Original Version
+ *
+ *   @history 2018-02-15 Adam Goins - Modified unstitch to parse the archive group
+ *                           from the stitched frame. Changed "Name" to "FilterName"
+ *                           in bandBin group.
  */
 struct FilterInfo : public PushFrameCameraCcdLayout::FrameletInfo {
   FilterInfo() : FrameletInfo(), m_wavelength(0), m_width(0) { }
   FilterInfo(const int frameid) : FrameletInfo(frameid), m_wavelength(0), m_width(0) { }
-  FilterInfo(const int frameid, QString filterName, int startSample, 
-             int startLine, int samples, int lines, double wavelength, double width) : 
+  FilterInfo(const int frameid, QString filterName, int startSample,
+             int startLine, int samples, int lines, double wavelength, double width) :
              FrameletInfo(frameid, filterName, startSample, startLine, samples, lines),
              m_wavelength(wavelength), m_width(width) { }
   double  m_wavelength; //!< The center wavelength of the filter associated with this framelet
@@ -46,7 +50,7 @@ struct FilterInfo : public PushFrameCameraCcdLayout::FrameletInfo {
 QList<Cube *> g_outputCubes;
 Cube *cube = NULL;
 QStringList g_filterList;
-QList<FilterInfo> g_frameletInfoList; 
+QList<FilterInfo> g_frameletInfoList;
 void unstitchFullFrame(Buffer &in);
 
 void IsisMain() {
@@ -64,8 +68,8 @@ void IsisMain() {
 
   // Determine the filters / framelets in input fullframe image
   Pvl *inputLabel = cube->label();
-  
-  g_frameletInfoList.clear();  
+
+  g_frameletInfoList.clear();
 
   PvlKeyword filterKey = inputLabel->findKeyword("OriginalFilters", PvlObject::Traverse);
   PvlKeyword filterIkCodes = inputLabel->findKeyword("FilterIkCodes", PvlObject::Traverse);
@@ -75,13 +79,14 @@ void IsisMain() {
   PvlKeyword filterLines = inputLabel->findKeyword("FilterLines", PvlObject::Traverse);
   PvlKeyword filterWavelength = inputLabel->findKeyword("FilterCenters", PvlObject::Traverse);
   PvlKeyword filterWidth = inputLabel->findKeyword("FilterWidths", PvlObject::Traverse);
+
   for (int i = 0; i < filterKey.size(); i++) {
-    g_frameletInfoList.append(FilterInfo(filterIkCodes[i].toInt(), 
+    g_frameletInfoList.append(FilterInfo(filterIkCodes[i].toInt(),
                               filterKey[i],
-                              filterStartSamples[i].toInt(),
+                              filterStartSamples[i].toDouble(),
                               filterStartLines[i].toDouble(),
-                              filterSamples[i].toInt(),
-                              filterLines[i].toInt(),
+                              filterSamples[i].toDouble(),
+                              filterLines[i].toDouble(),
                               filterWavelength[i].toDouble(),
                               filterWidth[i].toDouble()));
   }
@@ -107,14 +112,14 @@ void IsisMain() {
   // Allocate this number of total cubes of the correct size
   FileName outputFileName(ui.GetFileName("OUTPUTPREFIX"));
 
-  // Sometimes there will be '.'s in an OUTPUT prefix that could 
+  // Sometimes there will be '.'s in an OUTPUT prefix that could
   // be confused with a file extension
-  QString outputBaseName = outputFileName.expanded(); 
+  QString outputBaseName = outputFileName.expanded();
   if (outputFileName.extension() == "cub") {
-   outputBaseName = outputFileName.removeExtension().expanded(); 
+   outputBaseName = outputFileName.removeExtension().expanded();
   }
 
-  // Create and output a list of 
+  // Create and output a list of
   QFile allCubesListFile(outputBaseName + ".lis");
   if (!allCubesListFile.open(QFile::WriteOnly | QFile::Text)) {
     QString msg = "Unable to write file [" + allCubesListFile.fileName() + "]";
@@ -132,15 +137,15 @@ void IsisMain() {
     Cube *frameletCube = new Cube();
 
     frameletCube->setDimensions(g_frameletInfoList[i].m_samples, g_frameletInfoList[i].m_lines, 1);
-    FileName frameletCubeFileName(outputBaseName 
+    FileName frameletCubeFileName(outputBaseName
                                   + "_" + g_frameletInfoList[i].m_filterName
                                   + ".cub");
     frameletCube->create(frameletCubeFileName.expanded());
     g_outputCubes.append(frameletCube);
     allCubesListWriter << frameletCubeFileName.baseName() << ".cub\n";
   }
-  
-  // Unstitch 
+
+  // Unstitch
   p.SetInputCube("FROM");
   p.Progress()->SetText("Processing output cubes.");
   p.StartProcess(unstitchFullFrame);
@@ -151,16 +156,29 @@ void IsisMain() {
   for (int i = 0; i < g_outputCubes.size(); i++) {
     progress.CheckStatus();
     for (int j = 0; j < inputLabel->findObject("IsisCube").groups(); j++) {
-      g_outputCubes[i]->putGroup(inputLabel->findObject("IsisCube").group(j));
+      PvlGroup group = inputLabel->findObject("IsisCube").group(j);
+
+      // The stitched frame has ArchiveRED, ArchiveNIR, ArchivePAN, and ArchiveBLU.
+      // We won't add the archive group unless
+      if ( group.name().contains("Archive") &&
+           group.name() != "Archive" + g_frameletInfoList[i].m_filterName ) {
+             continue;
+           }
+
+      g_outputCubes[i]->putGroup(group);
+
     }
     // Update the labels
     Pvl *frameletLabel = g_outputCubes[i]->label();
-    frameletLabel->findGroup("Instrument", PvlObject::Traverse).addKeyword(PvlKeyword("Filter", 
+    frameletLabel->findGroup("Instrument", PvlObject::Traverse).addKeyword(PvlKeyword("Filter",
                                           g_frameletInfoList[i].m_filterName), PvlObject::Replace);
-    
+
+    // Sets the name from ArchiveRED (or NIR, BLU, PAN) to just "Archive" in the unstitched cube.
+    frameletLabel->findGroup("Archive" + g_frameletInfoList[i].m_filterName, PvlObject::Traverse).setName("Archive");
+
     PvlGroup &bandBin = frameletLabel->findGroup("BandBin", PvlObject::Traverse);
 
-    bandBin.addKeyword(PvlKeyword("Name", g_frameletInfoList[i].m_filterName), 
+    bandBin.addKeyword(PvlKeyword("FilterName", g_frameletInfoList[i].m_filterName),
                                                 PvlObject::Replace);
     bandBin.addKeyword(PvlKeyword("Center", toString(g_frameletInfoList[i].m_wavelength)));
     bandBin.addKeyword(PvlKeyword("Width", toString(g_frameletInfoList[i].m_width)));
@@ -207,23 +225,31 @@ void IsisMain() {
 
 /**
  * Separates each of the framelets of the input cube into their own separate output cube.
- *  
- * @param in A reference to the input Buffer to process. 
+ *
+ * @param in A reference to the input Buffer to process.
+ * @internal
+ *   @history 2018-02-09 Adam Goins - Modified the second operand of the if() statement
+ *                           from in.Line() < [...] to inLine() <= [...] to write all lines
+ *                           up to and including the last line. Fixes an error where the last lines
+ *                           written would be a line of null pixel DN's.
+ *
+ *   @history 2018-02-14 Adam Goins - Modified the copying of the data in the buffer to include
+ *                           the sample offset (m_startSample) for a cube.
  */
 void unstitchFullFrame(Buffer &in) {
   for (int i=0; i < g_frameletInfoList.size(); i++) {
+
     if (in.Line() >= g_frameletInfoList[i].m_startLine
-        && in.Line() < (g_frameletInfoList[i].m_startLine + g_frameletInfoList[i].m_lines)) {
+        && in.Line() <= (g_frameletInfoList[i].m_startLine + g_frameletInfoList[i].m_lines)) {
       int outputCubeLineNumber = (in.Line()-1) % g_frameletInfoList[i].m_startLine + 1;
       LineManager mgr(*g_outputCubes[i]);
       mgr.SetLine(outputCubeLineNumber, 1);
 
       for (int j = 0; j < mgr.size(); j++) {
-        mgr[j] = in[j];
+        mgr[j] = in[j + g_frameletInfoList[i].m_startSample];
       }
       g_outputCubes[i]->write(mgr);
       return;
     }
   }
 }
-
diff --git a/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.xml b/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.xml
index 775db7d75d9236ad0e64d017031d5eb8ca4404bb..c3dc16201103d775b84af2e1252afd222b0b6008 100644
--- a/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.xml
+++ b/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.xml
@@ -17,12 +17,19 @@
     <change name="Kristin Berry" date="2017-11-14">
       Backward Compatibility Issue:  changed application name from unstitch to tgocassisunstitch and
       changed the output parameter name "TO" to "OUTPUTPREFIX" to more accurately reflect its use.
-    </change> 
+    </change>
      <change name="Kristin Berry" date="2017-11-23">
-      Updated the behavior of the application when the user inputs an OUTPUTPREFIX without the .cub extension, 
-      but containing other '.'s  in the string to not strip off everything after the last period. For example, if the 
-      user inputs CAS-MCO-2016-11-22T16:10:43.505 as the OUTPUTPREFIX, now the 505 will now be retained. 
+      Updated the behavior of the application when the user inputs an OUTPUTPREFIX without the .cub extension,
+      but containing other '.'s  in the string to not strip off everything after the last period. For example, if the
+      user inputs CAS-MCO-2016-11-22T16:10:43.505 as the OUTPUTPREFIX, now the 505 will now be retained.
+    </change>
+    <change name="Adam Goins" date="2018-02-15">
+      Updated the application to include the sample offsets when processing lines from the stitched
+      frame into output cubes.
     </change>
+    <change name="Adam Goins" date="2018-02-15">
+     Modified unstitchFrame to parse the Archive group for each framelet.
+   </change>
 
   </history>
 
@@ -36,10 +43,10 @@
         <type>cube</type>
         <fileMode>input</fileMode>
         <brief>
-          A TGO CaSSIS fullframe cube to split into separate framelets. 
+          A TGO CaSSIS fullframe cube to split into separate framelets.
         </brief>
         <description>
-          A TGO CaSSIS fullframe cube to split into separate framelets. 
+          A TGO CaSSIS fullframe cube to split into separate framelets.
         </description>
         <filter>
           *.lis
@@ -54,10 +61,10 @@
          </brief>
          <description>
            The output ISIS cubes will be of the form basename_filter_frameletNumber.cub
-           There will also be a list produced with the same name. 
-	   
+           There will also be a list produced with the same name.
+
 	   This prefix can either be specified in the form "name.cub" or simply "name" without the .cub
-	   extension.  
+	   extension.
          </description>
          <filter>
            *.cub
diff --git a/isis/src/tgo/apps/tgocassisunstitch/tsts/default/Makefile b/isis/src/tgo/apps/tgocassisunstitch/tsts/default/Makefile
index 5468d332956b83fed9b1e2e259be3e52f17a8f66..5c1fd0e8dad79c79389c6f9b61e32eef8f3ed096 100644
--- a/isis/src/tgo/apps/tgocassisunstitch/tsts/default/Makefile
+++ b/isis/src/tgo/apps/tgocassisunstitch/tsts/default/Makefile
@@ -4,10 +4,10 @@ include $(ISISROOT)/make/isismake.tsts
 
 commands:
         # Test output prefix with standard extension (will be removed)
-	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T16:10:43.505.cub \
-	           outputprefix=$(OUTPUT)/CAS-MCO_2016-11-22T16:10:43.505.cub > /dev/null;
-	mv $(OUTPUT)/CAS-MCO_2016-11-22T16:10:43.505.lis \
-	   $(OUTPUT)/CAS-MCO_2016-11-22T16:10:43.505.txt;
+	$(APPNAME) from=$(INPUT)/stitched-2016-11-26T22:50:27.381.cub \
+	           outputprefix=$(OUTPUT)/stitched-2016-11-26T22:50:27.381.cub > /dev/null;
+	mv $(OUTPUT)/stitched-2016-11-26T22:50:27.381.lis \
+	   $(OUTPUT)/stitched-2016-11-26T22:50:27.381.txt;
 
 
 
diff --git a/isis/src/tgo/apps/tgocassisunstitch/tsts/spiced/Makefile b/isis/src/tgo/apps/tgocassisunstitch/tsts/spiced/Makefile
index 83f4f7de47e45a843bff4f0f7c3d02baf9d2e4d0..b861e655fa7aabe6b7544047388f1f7a4c14af29 100644
--- a/isis/src/tgo/apps/tgocassisunstitch/tsts/spiced/Makefile
+++ b/isis/src/tgo/apps/tgocassisunstitch/tsts/spiced/Makefile
@@ -3,7 +3,7 @@ APPNAME = tgocassisunstitch
 include $(ISISROOT)/make/isismake.tsts
 
 commands:
-	$(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T16:10:43.505.cub \
-	           outputprefix=$(OUTPUT)/CAS-MCO-2016-11-22T16:10:43.505.cub > /dev/null;
-	mv $(OUTPUT)/CAS-MCO-2016-11-22T16:10:43.505.lis \
-	   $(OUTPUT)/CAS-MCO-2016-11-22T16:10:43.505.txt;
+	$(APPNAME) from=$(INPUT)/stitched-2016-11-26T22:50:27.381.cub \
+	           outputprefix=$(OUTPUT)/stitched-2016-11-26T22:50:27.381.cub > /dev/null;
+	mv $(OUTPUT)/stitched-2016-11-26T22:50:27.381.lis \
+	   $(OUTPUT)/stitched-2016-11-26T22:50:27.381.txt;
diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.cpp b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.cpp
index fa4758fcd9a27f5af5936e9cc0484b80b4cfadeb..a5388e62cbdb899c662889723a82856025696213 100644
--- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.cpp
+++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.cpp
@@ -66,7 +66,7 @@ namespace Isis {
     const PvlGroup &inst    = lab.findGroup("Instrument", Pvl::Traverse);
 
     // Set up the camera characteristics
-    instrumentRotation()->SetFrame( CkFrameId() );
+    instrumentRotation()->SetFrame(-143420);
     SetFocalLength();
     SetPixelPitch();
 
@@ -165,7 +165,7 @@ namespace Isis {
    *                Kernel Frame ID.
    */
   int TgoCassisCamera::CkFrameId() const {
-    return (-143420);
+    return (-143000);
   }
 
 
diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.cpp b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.cpp
index 8e2bb8e4a0fde36b9fc5bc151afd45e05763fb90..5838f21745a6cf25e9e1063ae698e72433648e00 100644
--- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.cpp
+++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.cpp
@@ -54,7 +54,6 @@ namespace Isis {
       m_A2_dist.push_back(p_camera->getDouble(od + "A2_DIST", i));
       m_A3_dist.push_back(p_camera->getDouble(od + "A3_DIST", i));
     }
-
     m_pixelPitch = p_camera->getDouble("INS" + toString(naifIkCode) + "_PIXEL_PITCH");
     m_width  = p_camera->getDouble("INS" + toString(naifIkCode) + "_FILTER_SAMPLES");
     m_height = p_camera->getDouble("INS" + toString(naifIkCode) + "_FILTER_LINES");
@@ -114,13 +113,14 @@ namespace Isis {
     // 
     // So, whenever x or y are too far from center or divider is near zero,
     // return the given inputs
-    if ( qFuzzyCompare(divider + 1.0,  1.0) == 0
-         || dx < -0.5*m_pixelPitch*m_width  - 0.2
-         || dx >  0.5*m_pixelPitch*m_width  + 0.2
-         || dy < -0.5*m_pixelPitch*m_height - 0.2
-         || dy >  0.5*m_pixelPitch*m_height + 0.2 ) {
+    
+    if ( dx < -0.5*m_pixelPitch*m_width  - 0.2 ||
+         dx >  0.5*m_pixelPitch*m_width  + 0.2 ||
+         dy < -0.5*m_pixelPitch*m_height - 0.2 ||
+         dy >  0.5*m_pixelPitch*m_height + 0.2 ) {
       p_undistortedFocalPlaneX = dx;
       p_undistortedFocalPlaneY = dy;
+
       return true;
     }
 
@@ -130,6 +130,7 @@ namespace Isis {
 
     p_undistortedFocalPlaneX = ux;
     p_undistortedFocalPlaneY = uy;
+
     return true;
   }
 
@@ -179,13 +180,14 @@ namespace Isis {
     // 
     // So, whenever x or y are too far from center or divider is near zero,
     // return the given inputs
-    if ( qFuzzyCompare(divider + 1.0,  1.0) == 0
-         || ux < -0.5*m_pixelPitch*m_width  - 0.2
-         || ux >  0.5*m_pixelPitch*m_width  + 0.2
-         || uy < -0.5*m_pixelPitch*m_height - 0.2
-         || uy >  0.5*m_pixelPitch*m_height + 0.2 ) {
+
+    if ( ux < -0.5*m_pixelPitch*m_width  - 0.2 ||
+         ux >  0.5*m_pixelPitch*m_width  + 0.2 ||
+         uy < -0.5*m_pixelPitch*m_height - 0.2 ||
+         uy >  0.5*m_pixelPitch*m_height + 0.2 ) {
       p_focalPlaneX = ux;
       p_focalPlaneY = uy;
+
       return true;
     }
 
diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.h b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.h
index eeab2cc9bb056242f5dffa841f4db1c6739bf6e9..4b48a67c493cc47b3335ea5fa807ba30f0eab5f6 100644
--- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.h
+++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisDistortionMap.h
@@ -52,6 +52,8 @@ namespace Isis {
    *   @history 2017-09-18 Jeannie Backer - Added check to verify that values
    *                           passed into SetFocalPlane and SetUndistortedFocalPlane
    *                           are within valid range. References #5155
+   *   @history 2018-06-15 Kristin Berry - Removed qFuzzyCompare comparison to fix "distortion
+   *                           model not being applied" error. 
    */
   class TgoCassisDistortionMap : public CameraDistortionMap {
     public:
diff --git a/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp b/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp
index 2393a99e2cb05f78f152ca2e4c4e6f950bffa587..a1d0e25e5299646cf1d476b3f2f4fdfecd3c9872 100644
--- a/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp
+++ b/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp
@@ -37,6 +37,13 @@ using namespace Isis;
 
 void TestLineSamp(Camera *cam, double samp, double line);
 
+/**
+ * Unit test for TGO CaSSIS camera. 
+ *
+ * @internal
+ *   @history 2018-08-15 Jeannie Backer - Updated lat/lon changes due to 
+ *                           changes in focal length.
+ */
 int main(void) {
   Preference::Preferences(true);
 
@@ -45,8 +52,8 @@ int main(void) {
     // These should be lat/lon at center of image. To obtain these numbers for a new cube/camera,
     // set both the known lat and known lon to zero and copy the unit test output
     // "Latitude off by: " and "Longitude off by: " values directly into these variables.
-    double knownLat = 4.14700320539339717;
-    double knownLon = 322.7582512383878;
+    double knownLat = 4.14667346682538351; // 4.14700320539339717;
+    double knownLon = 322.757314935797012; // 322.7582512383878;
 
     Cube c("$tgo/testData/CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub", "r");
     TgoCassisCamera *cam = (TgoCassisCamera *) CameraFactory::Create(c);
diff --git a/isis/src/tgo/tsts/Makefile b/isis/src/tgo/tsts/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..016388fc898d8c89f380cae1fd08942c29611582
--- /dev/null
+++ b/isis/src/tgo/tsts/Makefile
@@ -0,0 +1,4 @@
+BLANKS = "%-6s"    
+LENGTH = "%-42s"
+
+include $(ISISROOT)/make/isismake.tststree
diff --git a/isis/src/tgo/tsts/coloredMosaic/Makefile b/isis/src/tgo/tsts/coloredMosaic/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..927fca70fb98a0e4cb2deb527442db00f0b3c0e7
--- /dev/null
+++ b/isis/src/tgo/tsts/coloredMosaic/Makefile
@@ -0,0 +1,135 @@
+# This tests the production of a CaSSIS uncontrolled multi-color mosaic from ingestion to
+# export to pds4.
+#
+# @history 2018-02-22 Adam Goins - Original version, many things borrowed from
+#                             uncontrolled single-color cat test.
+#          2018-06-18 Kristin Berry - Updated to use defaultrange=map for the cam2map call so that
+#                             cubeit will get input cubes all of the same size. 
+#
+
+INGEST = tgocassis2isis
+SPICE = spiceinit
+MAPFILE = mosrange
+PROJECT = cam2map
+MOSAIC = tgocassismos
+EXPORT = isis2pds
+GETKEY = getkey
+CUBEIT = cubeit
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+        # Ingest Red
+	$(LS) $(INPUT)/*-RED-*.xml > $(OUTPUT)/redInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/redInputs.lis > $(OUTPUT)/redRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/redRelative.lis > $(OUTPUT)/redBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/redBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+            SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/redBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-RED-*.cub > $(OUTPUT)/redCubes.lis;
+
+	# Ingest Blu
+	$(LS) $(INPUT)/*-BLU-*.xml > $(OUTPUT)/bluInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/bluInputs.lis > $(OUTPUT)/bluRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/bluRelative.lis > $(OUTPUT)/bluBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/bluBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+           SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/bluBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-BLU-*.cub > $(OUTPUT)/bluCubes.lis;
+
+	# Ingest Pan
+	$(LS) $(INPUT)/*-PAN-*.xml > $(OUTPUT)/panInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/panInputs.lis > $(OUTPUT)/panRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/panRelative.lis > $(OUTPUT)/panBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/panBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+	    SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/panBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-PAN-*.cub > $(OUTPUT)/panCubes.lis;
+
+	# Ingest Nir
+	$(LS) $(INPUT)/*-NIR-*.xml > $(OUTPUT)/nirInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/nirInputs.lis > $(OUTPUT)/nirRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/nirRelative.lis > $(OUTPUT)/nirBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/nirBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+            SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/nirBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-NIR-*.cub > $(OUTPUT)/nirCubes.lis;
+
+	# MAP FILE
+	# Create list of all files.
+	$(LS) $(INPUT)/*.xml > $(OUTPUT)/allInputs.lis;
+	$(SED) 's/^.*input\//output\//g' $(OUTPUT)/allInputs.lis > $(OUTPUT)/allRelative.lis;
+	$(SED) 's/\.xml/.cub/g' $(OUTPUT)/allRelative.lis > $(OUTPUT)/allCubes.lis;
+	$(MAPFILE) $(TSTARGS) fromlist=$(OUTPUT)/allCubes.lis to=$(OUTPUT)/equi.map > /dev/null;
+
+	# MOSAICS
+	# Create Red Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_redEqui.cub \
+            map=$(OUTPUT)/equi.map defaultrange=map \
+            pixres=mpp resolution=200 -batchlist=$(OUTPUT)/redBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*redEqui.cub > $(OUTPUT)/redMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/redMosaic.lis \
+	    to=$(OUTPUT)/redCassisMosaic.cub > /dev/null;
+
+        # Create Blu Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_bluEqui.cub \
+             map=$(OUTPUT)/equi.map defaultrange=map \
+             pixres=mpp resolution=200 -batchlist=$(OUTPUT)/bluBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*bluEqui.cub > $(OUTPUT)/bluMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/bluMosaic.lis \
+	    to=$(OUTPUT)/bluCassisMosaic.cub > /dev/null;
+
+        # Create Pan Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_panEqui.cub \
+            map=$(OUTPUT)/equi.map defaultrange=map \
+            pixres=mpp resolution=200 -batchlist=$(OUTPUT)/panBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*panEqui.cub > $(OUTPUT)/panMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/panMosaic.lis \
+	   to=$(OUTPUT)/panCassisMosaic.cub > /dev/null;
+
+        # Create Nir Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_nirEqui.cub \
+             map=$(OUTPUT)/equi.map defaultrange=map \
+             pixres=mpp resolution=200 -batchlist=$(OUTPUT)/nirBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*nirEqui.cub > $(OUTPUT)/nirMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/nirMosaic.lis \
+	    to=$(OUTPUT)/nirCassisMosaic.cub > /dev/null;
+
+        # Create full color mos
+	$(LS) $(OUTPUT)/*CassisMosaic.cub > $(OUTPUT)/mosaicList.lis;
+	$(CUBEIT) fromlist=$(OUTPUT)/mosaicList.lis to=$(OUTPUT)/coloredMosaic.cub > /dev/null;
+	$(EXPORT) $(TSTSARGS) from=$(OUTPUT)/coloredMosaic.cub to=$(OUTPUT)/coloredMosaic \
+             pdsversion=pds4 > /dev/null;
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+               $(OUTPUT)/coloredMosaic.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/tempLabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel3.txt \
+	       > $(OUTPUT)/tempLabel4.txt;
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/tempLabel4.txt \
+               > $(OUTPUT)/coloredMosaic.xmlLabel.txt;
+
+	# Cleanup
+	$(RM) $(OUTPUT)/coloredMosaic.xml;
+	$(RM) $(OUTPUT)/tempLabel1.txt;
+	$(RM) $(OUTPUT)/tempLabel2.txt;
+	$(RM) $(OUTPUT)/tempLabel3.txt;
+	$(RM) $(OUTPUT)/tempLabel4.txt;
+	$(RM) $(OUTPUT)/*.lis;
+	$(RM) $(OUTPUT)/CAS-MCO*.cub;
+	$(RM) $(OUTPUT)/bluCassisMosaic.cub;
+	$(RM) $(OUTPUT)/nirCassisMosaic.cub;
+	$(RM) $(OUTPUT)/panCassisMosaic.cub;
+	$(RM) $(OUTPUT)/redCassisMosaic.cub;
+	$(MV) $(OUTPUT)/equi.map $(OUTPUT)/equi.pvl;
diff --git a/isis/src/tgo/tsts/ingestReingest/Makefile b/isis/src/tgo/tsts/ingestReingest/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..c1acc67c4a196f9c4f155ea86a64c2c645f48bdd
--- /dev/null
+++ b/isis/src/tgo/tsts/ingestReingest/Makefile
@@ -0,0 +1,53 @@
+INGEST = tgocassis2isis
+SPICE = spiceinit
+RDRGEN = tgocassisrdrgen
+CDIFF = cubediff
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(INGEST) $(TSTARGS) \
+	    from=$(INPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.xml \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub > /dev/null;
+
+	$(RDRGEN) $(TSTARGS) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.img > /dev/null;
+
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+               $(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/tempLabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel3.txt \
+	       > $(OUTPUT)/tempLabel4.txt
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/tempLabel4.txt \
+               > $(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.xmlLabel.txt;
+
+	$(INGEST) $(TSTARGS) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.xml \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.reingested.cub > /dev/null;
+
+	$(CDIFF) $(TSTARGS) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub \
+	    from2=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.reingested.cub > /dev/null;
+
+	catlab $(TSTARGS) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.pvl > /dev/null;
+
+	catlab $(TSTARGS) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.reingested.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.reingested.pvl > /dev/null;
+
+	$(RM) $(OUTPUT)/tempLabel1.txt;
+	$(RM) $(OUTPUT)/tempLabel2.txt;
+	$(RM) $(OUTPUT)/tempLabel3.txt;
+	$(RM) $(OUTPUT)/tempLabel4.txt;
+	$(RM) $(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.xml;
diff --git a/isis/src/tgo/tsts/mapProjectedReingested/Makefile b/isis/src/tgo/tsts/mapProjectedReingested/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..fab3a01b6f99cbe25157dcbec54a4d485fa5cc69
--- /dev/null
+++ b/isis/src/tgo/tsts/mapProjectedReingested/Makefile
@@ -0,0 +1,75 @@
+# This tests the workflow of ingesting raw CaSSIS data, spiceiniting, projecting, exporting and
+# reingesting. 
+#
+# @history 2018-05-17 Summer Stapleton - Original version, many things borrowed from 
+#                             singleFrameletProjection cat test. 
+#
+
+INGEST = tgocassis2isis
+SPICE = spiceinit
+MAP = mosrange
+PROJECT = cam2map
+EXPORT = tgocassisrdrgen
+CATLAB = catlab
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(INGEST) $(TSTARGS)  \
+	    from=$(INPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.xml \
+            to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub > /dev/null;
+
+	$(SPICE) $(TSTARGS)  \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub \
+            SPKPREDICTED=true \
+	    CKPREDICTED=true > /dev/null;
+
+	$(PROJECT) $(TSTARGS)  \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.cub \
+            map=$(INPUT)/equi.map \
+            pixres=mpp \
+	    resolution=200 > /dev/null;
+
+	$(EXPORT) $(TSTARGS)  \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.cub \
+            to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.img > /dev/null;
+
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+               $(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/tempLabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel3.txt \
+	       > $(OUTPUT)/tempLabel4.txt
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/tempLabel4.txt \
+               > $(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.xmlLabel.txt;
+
+	$(INGEST) $(TSTARGS)  \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.xml \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.reingested.cub > /dev/null;
+
+	$(CATLAB) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.pvl > /dev/null;	
+
+	$(CATLAB) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.pvl > /dev/null;	
+
+	$(CATLAB) \
+	    from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.reingested.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.reingested.pvl > /dev/null;	
+
+	$(RM) $(OUTPUT)/CAS-M01-2018-05-05T23.11.48.767-RED-01029-B1.equi.xml;
+	$(RM) $(OUTPUT)/tempLabel1.txt;
+	$(RM) $(OUTPUT)/tempLabel2.txt;
+	$(RM) $(OUTPUT)/tempLabel3.txt;
+	$(RM) $(OUTPUT)/tempLabel4.txt;
+
diff --git a/isis/src/tgo/tsts/projSingleStichedFrame/Makefile b/isis/src/tgo/tsts/projSingleStichedFrame/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d4f61f190fcb0713d7be18a1ae3b841fe42cf143
--- /dev/null
+++ b/isis/src/tgo/tsts/projSingleStichedFrame/Makefile
@@ -0,0 +1,83 @@
+APPNAME =
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-PAN-00005-B1.xml \
+            to=$(OUTPUT)/panframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/panframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-RED-01005-B1.xml \
+            to=$(OUTPUT)/redframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/redframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-BLU-03005-B1.xml \
+            to=$(OUTPUT)/bluframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/bluframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-NIR-02005-B1.xml \
+            to=$(OUTPUT)/nirframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/nirframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassisstitch $(TSTARGS) \
+            fromlist=$(INPUT)/cubelist.lis \
+            outputprefix=$(OUTPUT)/"stitched" > /dev/null;
+
+	$(LS) $(OUTPUT)/stitched*.cub > $(OUTPUT)/stitched.lis
+
+	mosrange $(TSTARGS) \
+            fromlist=$(OUTPUT)/stitched.lis \
+            to=$(OUTPUT)/stitched.map > /dev/null;
+
+	cam2map $(TSTARGS) \
+            from=$(OUTPUT)/stitched-2016-11-26T22:50:27.381.cub \
+            to=$(OUTPUT)/projected.cub \
+            map=$(OUTPUT)/stitched.map > /dev/null;
+
+	tgocassisrdrgen $(TSTARGS) \
+            from=$(OUTPUT)/projected.cub \
+            to=$(OUTPUT)/exported.img > /dev/null;
+
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+               $(OUTPUT)/exported.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/tempLabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel3.txt \
+	       > $(OUTPUT)/tempLabel4.txt
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/tempLabel4.txt \
+               > $(OUTPUT)/exported.xmlLabel.txt;
+
+	$(RM) $(OUTPUT)/stitched.lis;
+
+	$(MV) $(OUTPUT)/stitched.map $(OUTPUT)/stitched.pvl;
+
+		# Cleanup
+	$(RM) $(OUTPUT)/exported.xml;
+	$(RM) $(OUTPUT)/tempLabel1.txt;
+	$(RM) $(OUTPUT)/tempLabel2.txt;
+	$(RM) $(OUTPUT)/tempLabel3.txt;
+	$(RM) $(OUTPUT)/tempLabel4.txt;
+
diff --git a/isis/src/tgo/tsts/singleColorMosaicReingest/Makefile b/isis/src/tgo/tsts/singleColorMosaicReingest/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..2fcbeaab98c11d55a66c68e5152325afefb92b21
--- /dev/null
+++ b/isis/src/tgo/tsts/singleColorMosaicReingest/Makefile
@@ -0,0 +1,72 @@
+# This tests the workflow of ingesting raw CaSSIS data, spiceiniting, projecting, exporting and
+# reingesting. 
+#
+# @history 2018-05-17 Summer Stapleton - Original version, many things borrowed from 
+#                             singleFrameletProjection cat test. 
+#
+
+INGEST = tgocassis2isis
+SPICE = spiceinit
+MAP = mosrange
+PROJECT = cam2map
+EXPORT = tgocassisrdrgen
+CATLAB = catlab
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(LS) $(INPUT)/*.xml > $(OUTPUT)/inputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/inputs.lis > $(OUTPUT)/relative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/relative.lis > $(OUTPUT)/basenames.lis;
+
+	$(INGEST) $(TSTARGS) from=$(INPUT)/$\$$\1.xml \
+	    to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+           SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+
+	$(LS) $(OUTPUT)/*.cub > $(OUTPUT)/cubes.lis;
+	$(MAP) $(TSTARGS) fromlist=$(OUTPUT)/cubes.lis to=$(OUTPUT)/equi.map	> /dev/null;
+
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_equi.cub \
+	    map=$(OUTPUT)/equi.map \
+	    pixres=mpp resolution=200 -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+
+	$(LS) $(OUTPUT)/*equi.cub > $(OUTPUT)/equi.lis;
+	tgocassismos \
+	    fromlist=$(OUTPUT)/equi.lis \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.cub > /dev/null;
+
+	$(EXPORT) $(TSTARGS) from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.img > /dev/null;
+
+#	$(INGEST) $(TSTARGS) from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.xml \
+#	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.reingested.cub > /dev/null;
+#
+	$(CATLAB) from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.cub \
+	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.pvl > /dev/null;
+#	$(CATLAB) from=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.reingested.cub \
+#	    to=$(OUTPUT)/CAS-M01-2018-05-05T23.11.mosaic.reingested.pvl > /dev/null;
+#
+	for label in `ls $(OUTPUT)/*.xml`; do \
+	  $(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	    $$label > $${label%.xml}1.txt; \
+	  $(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	    $${label%.xml}1.txt > $${label%.xml}2.txt; \
+	  $(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	    $${label%.xml}2.txt > $${label%.xml}3.txt; \
+	  $(SED) 's+\modification_date.*>+\modification_date>+' \
+	    $${label%.xml}3.txt > $${label%.xml}4.txt; \
+	  $(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	    $${label%.xml}4.txt > $${label%.xml}.xmlLabel.txt; \
+	  $(RM) $$label; \
+	  $(RM) $${label%.xml}1.txt; \
+	  $(RM) $${label%.xml}2.txt; \
+	  $(RM) $${label%.xml}3.txt; \
+	  $(RM) $${label%.xml}4.txt; \
+	done
+
+	$(RM) $(OUTPUT)/*.lis
+	$(RM) $(OUTPUT)/*equi*
+	$(RM) $(OUTPUT)/*B1.cub
+
diff --git a/isis/src/tgo/tsts/singleFrameletProjection/Makefile b/isis/src/tgo/tsts/singleFrameletProjection/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..5804855b316e4a83b56961b7da29d6acb2d27f46
--- /dev/null
+++ b/isis/src/tgo/tsts/singleFrameletProjection/Makefile
@@ -0,0 +1,48 @@
+INGEST = tgocassis2isis
+SPICE = spiceinit
+MAP = mosrange
+PROJECT = cam2map
+EXPORT = tgocassisrdrgen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(LS) $(INPUT)/*.xml > $(OUTPUT)/inputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/inputs.lis > $(OUTPUT)/relative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/relative.lis > $(OUTPUT)/basenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/$\$$\1.xml \
+	    to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+	    SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*.cub > $(OUTPUT)/cubes.lis;
+	$(MAP) $(TSTARGS) fromlist=$(OUTPUT)/cubes.lis to=$(OUTPUT)/equi.map	> /dev/null;
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_equi.cub \
+	    map=$(OUTPUT)/equi.map \
+	    pixres=mpp resolution=200 -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	$(EXPORT) $(TSTARGS) from=$(OUTPUT)/$\$$\1_equi.cub \
+	    to=$(OUTPUT)/$\$$\1_equi.img -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	for label in `ls $(OUTPUT)/*.xml`; do \
+	  $(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+	    $$label > $${label%.xml}1.txt; \
+	  $(SED) 's+\description.*>+\description>+' \
+	    $${label%.xml}1.txt > $${label%.xml}2.txt; \
+	  $(SED) 's+\modification_date.*>+\modification_date>+' \
+	    $${label%.xml}2.txt > $${label%.xml}3.txt; \
+	  $(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	    $${label%.xml}3.txt > $${label%.xml}4.txt; \
+	  $(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	    $${label%.xml}4.txt > $${label%.xml}5.txt; \
+	  $(SED) 's+\Modification_Detail.*>+\Modification_Detail>+' \
+	    $${label%.xml}5.txt > $${label%.xml}.txt; \
+	  $(RM) $$label; \
+	  $(RM) $${label%.xml}1.txt; \
+	  $(RM) $${label%.xml}2.txt; \
+	  $(RM) $${label%.xml}3.txt; \
+ 	  $(RM) $${label%.xml}4.txt; \
+  	  $(RM) $${label%.xml}5.txt; \
+	done;
+	$(MV) $(OUTPUT)/equi.map $(OUTPUT)/equi.pvl
+	$(RM) $(OUTPUT)/inputs.lis
+	$(RM) $(OUTPUT)/relative.lis
+	$(RM) $(OUTPUT)/basenames.lis
+	$(RM) $(OUTPUT)/cubes.lis
diff --git a/isis/src/tgo/tsts/stitchUnstitch/Makefile b/isis/src/tgo/tsts/stitchUnstitch/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..a95afd930c0589ab4372c0d2fcc9cb1c65fe60fb
--- /dev/null
+++ b/isis/src/tgo/tsts/stitchUnstitch/Makefile
@@ -0,0 +1,85 @@
+APPNAME =
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-PAN-00005-B1.xml \
+            to=$(OUTPUT)/panframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/panframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-RED-01005-B1.xml \
+            to=$(OUTPUT)/redframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/redframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-BLU-03005-B1.xml \
+            to=$(OUTPUT)/bluframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/bluframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	tgocassis2isis $(TSTARGS) \
+            from=$(INPUT)/CAS-MCO-2016-11-26T22.50.27.381-NIR-02005-B1.xml \
+            to=$(OUTPUT)/nirframelet.cub > /dev/null;
+
+	spiceinit $(TSTARGS) \
+            from=$(OUTPUT)/nirframelet.cub \
+            ckp=t spkp=t > /dev/null;
+
+	$(LS) $(OUTPUT)/*cub > $(OUTPUT)/cubelist.lis;
+	tgocassisstitch $(TSTARGS) \
+            fromlist=$(OUTPUT)/cubelist.lis \
+            outputprefix=$(OUTPUT)/"stitched" > /dev/null;
+
+	tgocassisunstitch $(TSTARGS) \
+            from=$(OUTPUT)/stitched-2016-11-26T22:50:27.381.cub \
+            outputprefix=$(OUTPUT)/"unstitched" > /dev/null;
+
+	cubediff $(TSTARGS) \
+            from=$(OUTPUT)/nirframelet.cub \
+            from2=$(OUTPUT)/unstitched_NIR.cub \
+            to=$(OUTPUT)/nirdiff > /dev/null;
+
+	cubediff $(TSTARGS) \
+            from=$(OUTPUT)/redframelet.cub \
+            from2=$(OUTPUT)/unstitched_RED.cub \
+            to=$(OUTPUT)/reddiff > /dev/null;
+
+	cubediff $(TSTARGS) \
+            from=$(OUTPUT)/bluframelet.cub \
+            from2=$(OUTPUT)/unstitched_BLU.cub \
+            to=$(OUTPUT)/bludiff > /dev/null;
+
+	cubediff $(TSTARGS) \
+            from=$(OUTPUT)/panframelet.cub \
+            from2=$(OUTPUT)/unstitched_PAN.cub \
+            to=$(OUTPUT)/pandiff > /dev/null;
+
+	$(LS) $(OUTPUT)/unstitched*cub > $(OUTPUT)/cubelist2.lis;
+	tgocassisstitch $(TSTARGS) \
+            fromlist=$(OUTPUT)/cubelist2.lis \
+            outputprefix=$(OUTPUT)/"stitched2" > /dev/null;
+
+	cubediff $(TSTARGS) \
+            from=$(OUTPUT)/stitched-2016-11-26T22:50:27.381.cub \
+            from2=$(OUTPUT)/stitched2-2016-11-26T22:50:27.381.cub \
+            to=$(OUTPUT)/stitcheddiff > /dev/null;
+
+	$(MV) $(OUTPUT)/bludiff.txt $(OUTPUT)/bludiff.pvl
+	$(MV) $(OUTPUT)/reddiff.txt $(OUTPUT)/reddiff.pvl
+	$(MV) $(OUTPUT)/pandiff.txt $(OUTPUT)/pandiff.pvl
+	$(MV) $(OUTPUT)/nirdiff.txt $(OUTPUT)/nirdiff.pvl
+	$(MV) $(OUTPUT)/stitcheddiff.txt $(OUTPUT)/stitcheddiff.pvl
+
+	$(RM) $(OUTPUT)/unstitched.lis;
+	$(RM) $(OUTPUT)/cubelist.lis;
+	$(RM) $(OUTPUT)/cubelist2.lis;
diff --git a/isis/src/tgo/tsts/uncontrolledSingleColorMosaic/Makefile b/isis/src/tgo/tsts/uncontrolledSingleColorMosaic/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..75521361952f7f4a55680899763360040d0e919c
--- /dev/null
+++ b/isis/src/tgo/tsts/uncontrolledSingleColorMosaic/Makefile
@@ -0,0 +1,63 @@
+# This tests the production of a CaSSIS uncontrolled single-color mosaic from ingestion to
+# export to pds4. 
+#
+# @history 2017-02-13 Kristin Berry - Original version, many things borrowed from 
+#                             singleFrameletProjection cat test. 
+#          2018-06-16 Kristin Berry - Upated to use tgocassismos and tgocassisrdrgen.
+#
+
+INGEST = tgocassis2isis
+SPICE = spiceinit
+MAPFILE = mosrange
+PROJECT = cam2map
+MOSAIC = tgocassismos
+EXPORT = tgocassisrdrgen
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+	$(LS) $(INPUT)/*.xml > $(OUTPUT)/inputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/inputs.lis > $(OUTPUT)/relative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/relative.lis > $(OUTPUT)/basenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+           SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*.cub > $(OUTPUT)/cubes.lis;
+	$(MAPFILE) $(TSTARGS) fromlist=$(OUTPUT)/cubes.lis to=$(OUTPUT)/equi.map > /dev/null;
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_equi.cub \
+             map=$(OUTPUT)/equi.map \
+             pixres=mpp resolution=200 -batchlist=$(OUTPUT)/basenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*equi.cub > $(OUTPUT)/mosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/mosaic.lis to=$(OUTPUT)/cassisMosaic.cub > /dev/null;
+
+	$(EXPORT) $(TSTSARGS) from=$(OUTPUT)/cassisMosaic.cub to=$(OUTPUT)/cassisMosaic.img > /dev/null;
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+               $(OUTPUT)/cassisMosaic.xml \
+	       > $(OUTPUT)/tempLabel1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+	       $(OUTPUT)/tempLabel1.txt \
+	       > $(OUTPUT)/tempLabel2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+	       $(OUTPUT)/tempLabel2.txt \
+	       > $(OUTPUT)/tempLabel3.txt;
+	$(SED) 's+\modification_date.*>+\modification_date>+' \
+	       $(OUTPUT)/tempLabel3.txt \
+	       > $(OUTPUT)/tempLabel4.txt
+	$(SED) 's+\ISIS version.*<+\ISIS version.<+' \
+	       $(OUTPUT)/tempLabel4.txt \
+               > $(OUTPUT)/cassisMosaic.xmlLabel.txt;
+	catlab from=$(OUTPUT)/cassisMosaic.cub \
+	       to=$(OUTPUT)/cassisMosaic.pvl > /dev/null;
+
+	# Cleanup
+	$(MV) $(OUTPUT)/equi.map $(OUTPUT)/equi.pvl
+	$(RM) $(OUTPUT)/cassisMosaic.xml;
+	$(RM) $(OUTPUT)/tempLabel1.txt;
+	$(RM) $(OUTPUT)/tempLabel2.txt;
+	$(RM) $(OUTPUT)/tempLabel3.txt;
+	$(RM) $(OUTPUT)/tempLabel4.txt;
+	$(RM) $(OUTPUT)/*.lis
+	$(RM) $(OUTPUT)/*equi.cub;
+	$(RM) $(OUTPUT)/*B1.cub;
+
diff --git a/isis/src/voyager/apps/voy2isis/voy2isis.cpp b/isis/src/voyager/apps/voy2isis/voy2isis.cpp
index 5c6b6002a26a500c22156d1801eee0f4f4db2791..e268383d4009a1197a8c7ea0779d34e79946075e 100644
--- a/isis/src/voyager/apps/voy2isis/voy2isis.cpp
+++ b/isis/src/voyager/apps/voy2isis/voy2isis.cpp
@@ -64,7 +64,7 @@ void IsisMain() {
                        + in.name() + "].", _FILEINFO_);
     }
   }
-  
+
   // Convert the pds file to a cube
   Pvl *pdsLabel = new Pvl();
 
@@ -104,14 +104,14 @@ void IsisMain() {
   try  {
     TranslateVoyagerLabels(*pdsLabel, ocube);
   }
-  catch (IException e) {
+  catch (IException &e) {
     e.print();
   }
 
   ocube->write(*hist);
 
   p.EndProcess();
-  
+
   delete pdsLabel;
   if (tempFile) QFile::remove(temp.expanded());
 }
@@ -448,7 +448,7 @@ void TranslateVoyagerLabels(Pvl &inputLab, Cube *ocube) {
                     + ".template.cub");
   res += PvlKeyword("Status", "Nominal");
   ocube->putGroup(res);
-  NaifStatus::CheckErrors();   
+  NaifStatus::CheckErrors();
 }
 
 
@@ -499,7 +499,7 @@ QByteArray fixLabels(QString fileName, History *hist){
   // Check if image id is valid
   int imageIdIndex = labels.indexOf(QByteArray("IMAGE_ID"));
   int i = imageIdIndex;
-  char c;
+  char c = 0;
   bool replaceImageId = false;
   while (c != '\n' && i != -1) {
     c = labels[i];
diff --git a/isis/version b/isis/version
index 8cbe82273790a5c41f93e9f7baff2670c2c7e1a0..eec0015fa20e48a84dcb6899a5c2f378ae680238 100644
--- a/isis/version
+++ b/isis/version
@@ -1,5 +1,3 @@
-3.5.2.0      # Public version number
-2017-11-04   # Version date
-v007         # 3rd party libraries version
-beta         # release stage (alpha, beta, stable)
-
+3.6.1        # Public version number
+2019-04-26   # Release date
+alpha        # release stage (alpha, beta, stable)