[vistrails] 04/19: Upstream vistrails-src-2.2.4-1519abc0ae2b.tar.gz

Alastair McKinstry mckinstry at moszumanska.debian.org
Sat Jul 29 14:21:52 UTC 2017


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

mckinstry pushed a commit to branch debian/master
in repository vistrails.

commit b73e07c923debfaa5d3f330e152bb2a72cb5424e
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Tue Sep 13 12:51:33 2016 +0100

    Upstream vistrails-src-2.2.4-1519abc0ae2b.tar.gz
---
 CHANGELOG                                          |   81 +-
 LICENSE                                            |    2 +-
 doc/coding_conventions.txt                         |  149 --
 doc/dist/build_from_source_mac.txt                 |   62 -
 doc/dist/build_from_source_windows.txt             |  123 --
 doc/dist/setup_build_system_mac.txt                |   55 -
 doc/dist/setup_build_system_windows.txt            |   56 -
 doc/module_registry.txt                            |   14 -
 doc/package_system.txt                             |   99 --
 doc/pep-0008.txt                                   | 1009 -----------
 doc/pep-0257.txt                                   |  328 ----
 doc/signal_mess.txt                                |   49 -
 doc/source_tree_overview.tex                       |  102 --
 doc/usersguide/conf.py                             |    4 +-
 doc/usersguide/developer.rst                       |    1 +
 doc/usersguide/example.rst                         |    1 +
 .../figures/job_submission/job_monitor.png         |  Bin 0 -> 30237 bytes
 doc/usersguide/figures/querying/query_vtkActor.png |  Bin 55323 -> 0 bytes
 .../figures/querying/query_vtkActor90.png          |  Bin 49397 -> 0 bytes
 doc/usersguide/figures/tej/pipeline.png            |  Bin 0 -> 20704 bytes
 doc/usersguide/job_submission.rst                  |  174 ++
 doc/usersguide/latex.rst                           |   41 +-
 doc/usersguide/querying.rst                        |   27 +-
 doc/usersguide/tej.rst                             |   87 +
 doc/usersguide/vtl/jobsubmission1.vtl              |    1 +
 doc/usersguide/vtl/jobsubmission2.vtl              |    1 +
 doc/usersguide/vtl/jobsubmission3.vtl              |    1 +
 doc/usersguide/vtl/mashups1.vtl                    |    2 +-
 doc/usersguide/vtl/tej-primes.vtl                  |    1 +
 examples/api/ipython-notebook.ipynb                |  169 +-
 examples/api/simplemath.vt                         |  Bin 12437 -> 16760 bytes
 examples/list-handling.vt                          |  Bin 2995 -> 2995 bytes
 examples/mongodb.vt                                |  Bin 0 -> 143468 bytes
 examples/tej-primes.vt                             |  Bin 0 -> 2591 bytes
 examples/tensorflow_mandelbrot.vt                  |  Bin 0 -> 262822 bytes
 examples/tensorflow_mnist.vt                       |  Bin 0 -> 366488 bytes
 examples/usersguide/cfassistant.vt                 |  Bin 32336 -> 32322 bytes
 examples/usersguide/job_submission.vt              |  Bin 0 -> 40320 bytes
 examples/usersguide/mashups.vt                     |  Bin 527175 -> 692341 bytes
 examples/usersguide/parameter_exploration.vt       |  Bin 43687 -> 497101 bytes
 extensions/http/config.php.sample                  |    2 +-
 extensions/http/get_db_vistrail_list.php           |    2 +-
 extensions/http/get_vt_xml.php                     |    2 +-
 extensions/http/get_wf_pdf.php                     |    2 +-
 extensions/http/get_wf_xml.php                     |    2 +-
 extensions/http/run_vistrails.php                  |    2 +-
 extensions/latex/crowdlabs.sty                     |    2 +-
 extensions/latex/example.tex                       |    2 +-
 extensions/latex/example2.tex                      |   36 +
 extensions/latex/head.pdf                          |  Bin 133722 -> 388513 bytes
 extensions/latex/head.tex                          |    4 +-
 extensions/latex/head.vt                           |  Bin 245975 -> 330755 bytes
 extensions/latex/includecrowdlabs.py               |    2 +-
 extensions/latex/includevistrail.py                |   22 +-
 extensions/latex/test.sh                           |   21 +
 extensions/latex/vistrails.sty                     |    2 +-
 extensions/mediawiki/download.php                  |    2 +-
 extensions/mediawiki/functions.php                 |    2 +-
 extensions/mediawiki/vistrailsExtension.php        |    2 +-
 scripts/build_usersguide.py                        |    2 +-
 scripts/convert_files/convert_files.sh             |    2 +-
 scripts/convert_files/fix_file.py                  |    2 +-
 scripts/create_release_wiki_table.py               |   43 +-
 scripts/create_server_media_dir_structure.py       |    3 +-
 scripts/db_utils.py                                |    2 +-
 scripts/delete_from_db.py                          |    2 +-
 scripts/diff_package.py                            |    2 +-
 scripts/extract.py                                 |    2 +-
 scripts/force_start_vistrails.py                   |    2 +-
 scripts/force_start_vistrails_nonohup.py           |    2 +-
 scripts/gen_vtk_examples/check_diffs.py            |    3 +-
 scripts/gen_vtk_examples/colors.py                 |    2 +-
 scripts/gen_vtk_examples/convert_to_vt.py          |    3 +-
 scripts/gen_vtk_examples/copy_vtk_examples.py      |    3 +-
 scripts/gen_vtk_examples/gen_vtk_examples.py       |    3 +-
 scripts/gen_vtk_examples/get_vtk_examples.py       |    3 +-
 scripts/gen_vtk_examples/vtk_imposter.py           |    2 +-
 scripts/gen_vtk_examples/vtk_to_vt.py              |    2 +-
 scripts/get_usersguide.py                          |    4 +-
 scripts/mac_update_bin.sh                          |    4 +-
 scripts/merge_vistrails.py                         |    2 +-
 scripts/module_appearance/main.py                  |    2 +-
 scripts/module_appearance/module_appearance.py     |    2 +-
 scripts/opm/opm2dot.py                             |    3 +-
 scripts/release_notes.py                           |    2 +-
 scripts/restart-vistrails-server.sh                |    5 +-
 scripts/retarget_mpl_libs.sh                       |    4 +-
 scripts/run_vistrails_batch_xvfb.sh                |    4 +-
 scripts/sql_delete.py                              |    2 +-
 scripts/sql_to_xml.py                              |    2 +-
 scripts/start_vistrails.sh                         |    4 +-
 scripts/start_vistrails_xvfb.sh                    |    4 +-
 scripts/system_info.py                             |    2 +-
 scripts/unzip_vistrail.sh                          |    4 +-
 scripts/update_copyright_year.py                   |    5 +-
 scripts/update_db.py                               |    4 +-
 scripts/update_email_contact.py                    |   38 +-
 scripts/update_to_mod_bsd_license.py               |    3 +-
 scripts/update_vistrails_command.py                |    2 +-
 scripts/watch_vistrail_servers.py                  |    2 +-
 scripts/win_update_bin.sh                          |    4 +-
 vistrails/__init__.py                              |    2 +-
 vistrails/api/__init__.py                          |    4 +-
 vistrails/core/__init__.py                         |    2 +-
 vistrails/core/analogy/__init__.py                 |    2 +-
 vistrails/core/analogy/eigen.py                    |    2 +-
 vistrails/core/analogy/pipeline_utils.py           |    2 +-
 vistrails/core/api.py                              |   57 +-
 vistrails/core/application.py                      |   15 +-
 vistrails/core/bundles/__init__.py                 |    2 +-
 vistrails/core/bundles/installbundle.py            |    2 +-
 vistrails/core/bundles/pyimport.py                 |    5 +-
 vistrails/core/cache/__init__.py                   |    2 +-
 vistrails/core/cache/hasher.py                     |   46 +-
 vistrails/core/cache/utils.py                      |    2 +-
 vistrails/core/collection/__init__.py              |    2 +-
 vistrails/core/collection/entity.py                |    2 +-
 vistrails/core/collection/mashup.py                |    2 +-
 vistrails/core/collection/parameter_exploration.py |    2 +-
 vistrails/core/collection/schema.sql               |    2 +-
 vistrails/core/collection/search.py                |    2 +-
 vistrails/core/collection/thumbnail.py             |    2 +-
 vistrails/core/collection/vistrail.py              |    2 +-
 vistrails/core/collection/workflow.py              |    2 +-
 vistrails/core/collection/workflow_exec.py         |    2 +-
 vistrails/core/common.py                           |    2 +-
 vistrails/core/configuration.py                    |  119 +-
 vistrails/core/console_mode.py                     |   45 +-
 vistrails/core/data_structures/__init__.py         |    2 +-
 vistrails/core/data_structures/bijectivedict.py    |    2 +-
 vistrails/core/data_structures/graph.py            |   76 +-
 vistrails/core/data_structures/point.py            |    2 +-
 vistrails/core/data_structures/queue.py            |    2 +-
 vistrails/core/data_structures/rect.py             |    2 +-
 vistrails/core/data_structures/stack.py            |    2 +-
 vistrails/core/db/__init__.py                      |    2 +-
 vistrails/core/db/action.py                        |    2 +-
 vistrails/core/db/io.py                            |    2 +-
 vistrails/core/db/locator.py                       |   51 +-
 vistrails/core/debug.py                            |   15 +-
 vistrails/core/external_connection.py              |    2 +-
 vistrails/core/inspector.py                        |   44 +-
 vistrails/core/interpreter/__init__.py             |    2 +-
 vistrails/core/interpreter/base.py                 |    2 +-
 vistrails/core/interpreter/cached.py               |   57 +-
 vistrails/core/interpreter/default.py              |    2 +-
 vistrails/core/interpreter/noncached.py            |    2 +-
 vistrails/core/interpreter/utils.py                |    2 +-
 vistrails/core/keychain.py                         |    2 +-
 vistrails/core/layout/__init__.py                  |    2 +-
 vistrails/core/layout/tree_layout.py               |    2 +-
 vistrails/core/layout/version_tree_layout.py       |    2 +-
 vistrails/core/layout/workflow_layout.py           |    2 +-
 vistrails/core/log/__init__.py                     |    2 +-
 vistrails/core/log/controller.py                   |   30 +-
 vistrails/core/log/group_exec.py                   |    2 +-
 vistrails/core/log/log.py                          |    2 +-
 vistrails/core/log/loop_exec.py                    |    2 +-
 vistrails/core/log/machine.py                      |    2 +-
 vistrails/core/log/module_exec.py                  |    2 +-
 vistrails/core/log/opm_graph.py                    |    2 +-
 vistrails/core/log/prov_document.py                |    2 +-
 vistrails/core/log/workflow_exec.py                |    2 +-
 vistrails/core/mashup/__init__.py                  |    2 +-
 vistrails/core/mashup/action.py                    |    2 +-
 vistrails/core/mashup/action_annotation.py         |    2 +-
 vistrails/core/mashup/alias.py                     |    2 +-
 vistrails/core/mashup/component.py                 |    2 +-
 vistrails/core/mashup/controller.py                |    2 +-
 vistrails/core/mashup/mashup.py                    |    2 +-
 vistrails/core/mashup/mashup_trail.py              |    2 +-
 vistrails/core/modules/__init__.py                 |    2 +-
 vistrails/core/modules/abstraction.py              |   34 +-
 vistrails/core/modules/basic_modules.py            |   11 +-
 vistrails/core/modules/config.py                   |    2 +-
 vistrails/core/modules/constant_configuration.py   |    2 +-
 vistrails/core/modules/module_configure.py         |    2 +-
 vistrails/core/modules/module_descriptor.py        |    2 +-
 vistrails/core/modules/module_registry.py          |   37 +-
 vistrails/core/modules/module_utils.py             |    2 +-
 vistrails/core/modules/output_modules.py           |   53 +-
 vistrails/core/modules/package.py                  |   91 +-
 vistrails/core/modules/paramexplore.py             |    2 +-
 vistrails/core/modules/python_source_configure.py  |    2 +-
 vistrails/core/modules/query_configuration.py      |    2 +-
 vistrails/core/modules/source_configure.py         |    2 +-
 vistrails/core/modules/sub_module.py               |   53 +-
 vistrails/core/modules/tuple_configuration.py      |    2 +-
 vistrails/core/modules/utils.py                    |    2 +-
 vistrails/core/modules/vistrails_module.py         |  103 +-
 vistrails/core/packagemanager.py                   |  234 +--
 vistrails/core/packagerepository.py                |    2 +-
 vistrails/core/param_explore.py                    |    2 +-
 vistrails/core/paramexplore/__init__.py            |    2 +-
 vistrails/core/paramexplore/function.py            |    2 +-
 vistrails/core/paramexplore/param.py               |    2 +-
 vistrails/core/paramexplore/paramexplore.py        |    2 +-
 vistrails/core/publishing/__init__.py              |    2 +-
 vistrails/core/publishing/parse_latex.py           |    2 +-
 vistrails/core/query/__init__.py                   |    2 +-
 vistrails/core/query/combined.py                   |   52 +-
 vistrails/core/query/multiple.py                   |   22 +-
 vistrails/core/query/version.py                    |   86 +-
 vistrails/core/query/visual.py                     |   15 +-
 vistrails/core/recent_vistrails.py                 |    2 +-
 vistrails/core/reportusage.py                      |  333 ++++
 vistrails/core/repository/__init__.py              |    2 +-
 vistrails/core/repository/poster/__init__.py       |    2 +-
 vistrails/core/repository/poster/encode.py         |    2 +-
 vistrails/core/repository/poster/streaminghttp.py  |    2 +-
 vistrails/core/requirements.py                     |    2 +-
 vistrails/core/startup.py                          |    2 +-
 vistrails/core/system/__init__.py                  |    7 +-
 vistrails/core/system/common.py                    |    2 +-
 vistrails/core/system/linux.py                     |    2 +-
 vistrails/core/system/mac_site.py                  |    2 +-
 vistrails/core/system/osx.py                       |    2 +-
 vistrails/core/system/unix.py                      |    2 +-
 vistrails/core/system/windows.py                   |    2 +-
 vistrails/core/theme.py                            |    2 +-
 vistrails/core/thumbnails.py                       |    5 +-
 vistrails/core/upgradeworkflow.py                  |  170 +-
 vistrails/core/utils/__init__.py                   |    6 +-
 vistrails/core/utils/color.py                      |    2 +-
 vistrails/core/utils/enum.py                       |    2 +-
 vistrails/core/utils/expression.py                 |    2 +-
 vistrails/core/utils/gcutils.py                    |    2 +-
 vistrails/core/utils/timemethod.py                 |    2 +-
 vistrails/core/utils/tracemethod.py                |    2 +-
 vistrails/core/utils/uxml.py                       |    2 +-
 vistrails/core/vistrail/__init__.py                |    2 +-
 vistrails/core/vistrail/abstraction.py             |    2 +-
 vistrails/core/vistrail/action.py                  |    2 +-
 vistrails/core/vistrail/action_annotation.py       |    2 +-
 vistrails/core/vistrail/annotation.py              |    2 +-
 vistrails/core/vistrail/connection.py              |    3 +-
 vistrails/core/vistrail/controller.py              |  684 +++++---
 vistrails/core/vistrail/group.py                   |    2 +-
 vistrails/core/vistrail/job.py                     |   85 +-
 vistrails/core/vistrail/location.py                |    2 +-
 vistrails/core/vistrail/module.py                  |    6 +-
 vistrails/core/vistrail/module_control_param.py    |    2 +-
 vistrails/core/vistrail/module_function.py         |    2 +-
 vistrails/core/vistrail/module_param.py            |    2 +-
 vistrails/core/vistrail/operation.py               |    2 +-
 vistrails/core/vistrail/pipeline.py                |   44 +-
 vistrails/core/vistrail/plugin_data.py             |    2 +-
 vistrails/core/vistrail/port.py                    |    2 +-
 vistrails/core/vistrail/port_spec.py               |    3 +-
 vistrails/core/vistrail/port_spec_item.py          |    2 +-
 vistrails/core/vistrail/tag.py                     |    2 +-
 vistrails/core/vistrail/vistrail.py                |   34 +-
 vistrails/core/vistrail/vistrailvariable.py        |    2 +-
 vistrails/db/__init__.py                           |    2 +-
 vistrails/db/bin/__init__.py                       |    2 +-
 vistrails/db/bin/auto_gen_objects.py               |    2 +-
 vistrails/db/bin/generate.py                       |    8 +-
 vistrails/db/bin/parser.py                         |    4 +-
 vistrails/db/bin/sql_gen_objects.py                |    2 +-
 vistrails/db/bin/templates/domain.py.mako          |    2 +-
 vistrails/db/bin/templates/sql.py.mako             |    2 +-
 vistrails/db/bin/templates/sql_delete.sql.mako     |    2 +-
 vistrails/db/bin/templates/sql_schema.sql.mako     |    2 +-
 vistrails/db/bin/templates/xml.py.mako             |    2 +-
 vistrails/db/bin/templates/xml_schema.xsd.mako     |    2 +-
 vistrails/db/bin/xml_gen_objects.py                |    2 +-
 vistrails/db/domain/__init__.py                    |    2 +-
 vistrails/db/persistence/__init__.py               |    2 +-
 vistrails/db/services/__init__.py                  |    2 +-
 vistrails/db/services/abstraction.py               |    2 +-
 vistrails/db/services/action.py                    |    2 +-
 vistrails/db/services/action_chain.py              |    2 +-
 vistrails/db/services/io.py                        |    2 +-
 vistrails/db/services/locator.py                   |  117 +-
 vistrails/db/services/log.py                       |    2 +-
 vistrails/db/services/opm.py                       |  202 ++-
 vistrails/db/services/prov.py                      |  119 +-
 vistrails/db/services/query.py                     |    2 +-
 vistrails/db/services/registry.py                  |    2 +-
 vistrails/db/services/vistrail.py                  |    6 +-
 vistrails/db/services/workflow.py                  |    2 +-
 vistrails/db/specs/all.xml                         |    2 +-
 vistrails/db/tests/__init__.py                     |    2 +-
 vistrails/db/tests/setup_db_tables.py              |    2 +-
 vistrails/db/tests/sql_to_xml.py                   |    2 +-
 vistrails/db/tests/xml_to_sql.py                   |    2 +-
 vistrails/db/versions/__init__.py                  |    2 +-
 vistrails/db/versions/v0_3_0/__init__.py           |    2 +-
 vistrails/db/versions/v0_3_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_3_0/domain/auto_gen.py    |    2 +-
 .../db/versions/v0_3_0/persistence/__init__.py     |    2 +-
 .../db/versions/v0_3_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_3_0/persistence/xml/auto_gen.py |    2 +-
 vistrails/db/versions/v0_3_0/persistence/xml/io.py |    2 +-
 .../db/versions/v0_3_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_3_0/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_3_0/specs/action.xml      |    2 +-
 .../db/versions/v0_3_0/specs/addConnection.xml     |    2 +-
 vistrails/db/versions/v0_3_0/specs/addModule.xml   |    2 +-
 .../db/versions/v0_3_0/specs/addModulePort.xml     |    2 +-
 .../db/versions/v0_3_0/specs/changeAnnotation.xml  |    2 +-
 .../db/versions/v0_3_0/specs/changeParameter.xml   |    2 +-
 .../db/versions/v0_3_0/specs/deleteAnnotation.xml  |    2 +-
 .../db/versions/v0_3_0/specs/deleteConnection.xml  |    2 +-
 .../db/versions/v0_3_0/specs/deleteFunction.xml    |    2 +-
 .../db/versions/v0_3_0/specs/deleteModule.xml      |    2 +-
 .../db/versions/v0_3_0/specs/deleteModulePort.xml  |    2 +-
 vistrails/db/versions/v0_3_0/specs/moveModule.xml  |    2 +-
 vistrails/db/versions/v0_3_0/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_3_0/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_3_1/__init__.py           |    2 +-
 vistrails/db/versions/v0_3_1/domain/__init__.py    |    2 +-
 .../db/versions/v0_3_1/persistence/__init__.py     |    2 +-
 .../db/versions/v0_3_1/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_3_1/specs/action.xml      |    2 +-
 .../db/versions/v0_3_1/specs/addConnection.xml     |    2 +-
 vistrails/db/versions/v0_3_1/specs/addModule.xml   |    2 +-
 .../db/versions/v0_3_1/specs/addModulePort.xml     |    2 +-
 .../db/versions/v0_3_1/specs/changeAnnotation.xml  |    2 +-
 .../db/versions/v0_3_1/specs/changeParameter.xml   |    2 +-
 .../db/versions/v0_3_1/specs/deleteAnnotation.xml  |    2 +-
 .../db/versions/v0_3_1/specs/deleteConnection.xml  |    2 +-
 .../db/versions/v0_3_1/specs/deleteFunction.xml    |    2 +-
 .../db/versions/v0_3_1/specs/deleteModule.xml      |    2 +-
 .../db/versions/v0_3_1/specs/deleteModulePort.xml  |    2 +-
 vistrails/db/versions/v0_3_1/specs/moveModule.xml  |    2 +-
 vistrails/db/versions/v0_3_1/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_3_1/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_3_1/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_3_1/translate/v0_3_0.py   |    2 +-
 vistrails/db/versions/v0_5_0/__init__.py           |    2 +-
 vistrails/db/versions/v0_5_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_5_0/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_5_0/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_5_0/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_5_0/domain/workflow.py    |    2 +-
 .../db/versions/v0_5_0/persistence/__init__.py     |    2 +-
 .../db/versions/v0_5_0/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_5_0/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_5_0/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_5_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_5_0/persistence/xml/auto_gen.py |    2 +-
 vistrails/db/versions/v0_5_0/persistence/xml/io.py |    2 +-
 .../db/versions/v0_5_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_5_0/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_5_0/schemas/sql/vistrails_drop.sql |    2 +-
 vistrails/db/versions/v0_5_0/schemas/xml/log.xsd   |    2 +-
 .../db/versions/v0_5_0/schemas/xml/vistrail.xsd    |    2 +-
 .../db/versions/v0_5_0/schemas/xml/workflow.xsd    |    2 +-
 vistrails/db/versions/v0_5_0/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_5_0/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_5_0/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_5_0/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_5_0/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_5_0/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_5_0/specs/execRec.xml     |    2 +-
 vistrails/db/versions/v0_5_0/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_5_0/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_5_0/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_5_0/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_5_0/specs/macro.xml       |    2 +-
 vistrails/db/versions/v0_5_0/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_5_0/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_5_0/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_5_0/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_5_0/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_5_0/specs/session.xml     |    2 +-
 vistrails/db/versions/v0_5_0/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_5_0/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_5_0/specs/wfExec.xml      |    2 +-
 vistrails/db/versions/v0_5_0/specs/workflow.xml    |    2 +-
 vistrails/db/versions/v0_5_0/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_5_0/translate/v0_3_1.py   |    2 +-
 vistrails/db/versions/v0_6_0/__init__.py           |    2 +-
 vistrails/db/versions/v0_6_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_6_0/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_6_0/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_6_0/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_6_0/domain/workflow.py    |    2 +-
 .../db/versions/v0_6_0/persistence/__init__.py     |    2 +-
 .../db/versions/v0_6_0/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_6_0/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_6_0/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_6_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_6_0/persistence/xml/auto_gen.py |    2 +-
 vistrails/db/versions/v0_6_0/persistence/xml/io.py |    2 +-
 .../db/versions/v0_6_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_6_0/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_6_0/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_6_0/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_6_0/specs/abstraction.xml |    2 +-
 .../db/versions/v0_6_0/specs/abstractionRef.xml    |    2 +-
 vistrails/db/versions/v0_6_0/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_6_0/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_6_0/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_6_0/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_6_0/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_6_0/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_6_0/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_6_0/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_6_0/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_6_0/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_6_0/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_6_0/specs/module_exec.xml |    2 +-
 vistrails/db/versions/v0_6_0/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_6_0/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_6_0/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_6_0/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_6_0/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_6_0/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_6_0/specs/workflow.xml    |    2 +-
 .../db/versions/v0_6_0/specs/workflow_exec.xml     |    2 +-
 vistrails/db/versions/v0_6_0/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_6_0/translate/v0_3_1.py   |    2 +-
 vistrails/db/versions/v0_6_0/translate/v0_5_0.py   |    2 +-
 vistrails/db/versions/v0_7_0/__init__.py           |    2 +-
 vistrails/db/versions/v0_7_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_7_0/domain/abstraction.py |    2 +-
 vistrails/db/versions/v0_7_0/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_7_0/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_7_0/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_7_0/domain/workflow.py    |    2 +-
 .../db/versions/v0_7_0/persistence/__init__.py     |    2 +-
 .../db/versions/v0_7_0/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_7_0/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_7_0/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_7_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_7_0/persistence/xml/auto_gen.py |    2 +-
 vistrails/db/versions/v0_7_0/persistence/xml/io.py |    2 +-
 .../db/versions/v0_7_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_7_0/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_7_0/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_7_0/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_7_0/specs/abstraction.xml |    2 +-
 .../db/versions/v0_7_0/specs/abstractionRef.xml    |    2 +-
 vistrails/db/versions/v0_7_0/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_7_0/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_7_0/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_7_0/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_7_0/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_7_0/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_7_0/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_7_0/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_7_0/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_7_0/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_7_0/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_7_0/specs/module_exec.xml |    2 +-
 vistrails/db/versions/v0_7_0/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_7_0/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_7_0/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_7_0/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_7_0/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_7_0/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_7_0/specs/workflow.xml    |    2 +-
 .../db/versions/v0_7_0/specs/workflow_exec.xml     |    2 +-
 vistrails/db/versions/v0_7_0/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_7_0/translate/v0_6_0.py   |    2 +-
 vistrails/db/versions/v0_8_0/__init__.py           |    2 +-
 vistrails/db/versions/v0_8_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_8_0/domain/abstraction.py |    2 +-
 vistrails/db/versions/v0_8_0/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_8_0/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_8_0/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_8_0/domain/workflow.py    |    2 +-
 .../db/versions/v0_8_0/persistence/__init__.py     |    2 +-
 .../db/versions/v0_8_0/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_8_0/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_8_0/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_8_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_8_0/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v0_8_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_8_0/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_8_0/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_8_0/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_8_0/specs/abstraction.xml |    2 +-
 .../db/versions/v0_8_0/specs/abstractionRef.xml    |    2 +-
 vistrails/db/versions/v0_8_0/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_8_0/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_8_0/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_8_0/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_8_0/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_8_0/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_8_0/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_8_0/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_8_0/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_8_0/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_8_0/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_8_0/specs/module_exec.xml |    2 +-
 vistrails/db/versions/v0_8_0/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_8_0/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_8_0/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_8_0/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_8_0/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_8_0/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_8_0/specs/workflow.xml    |    2 +-
 .../db/versions/v0_8_0/specs/workflow_exec.xml     |    2 +-
 vistrails/db/versions/v0_8_0/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_8_0/translate/v0_7_0.py   |    2 +-
 vistrails/db/versions/v0_8_1/__init__.py           |    2 +-
 vistrails/db/versions/v0_8_1/domain/__init__.py    |    2 +-
 .../db/versions/v0_8_1/persistence/__init__.py     |    2 +-
 .../db/versions/v0_8_1/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_8_1/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_8_1/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_8_1/specs/abstraction.xml |    2 +-
 .../db/versions/v0_8_1/specs/abstractionRef.xml    |    2 +-
 vistrails/db/versions/v0_8_1/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_8_1/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_8_1/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_8_1/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_8_1/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_8_1/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_8_1/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_8_1/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_8_1/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_8_1/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_8_1/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_8_1/specs/module_exec.xml |    2 +-
 vistrails/db/versions/v0_8_1/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_8_1/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_8_1/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_8_1/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_8_1/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_8_1/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_8_1/specs/workflow.xml    |    2 +-
 .../db/versions/v0_8_1/specs/workflow_exec.xml     |    2 +-
 vistrails/db/versions/v0_8_1/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_8_1/translate/v0_8_0.py   |    2 +-
 vistrails/db/versions/v0_9_0/__init__.py           |    2 +-
 vistrails/db/versions/v0_9_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_9_0/domain/abstraction.py |    2 +-
 vistrails/db/versions/v0_9_0/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_9_0/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_9_0/domain/log.py         |    2 +-
 vistrails/db/versions/v0_9_0/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_9_0/domain/workflow.py    |    2 +-
 .../db/versions/v0_9_0/persistence/__init__.py     |    2 +-
 .../db/versions/v0_9_0/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_9_0/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_9_0/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_9_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_9_0/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v0_9_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_9_0/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_9_0/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_9_0/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_9_0/specs/abstraction.xml |    2 +-
 .../db/versions/v0_9_0/specs/abstractionRef.xml    |    2 +-
 vistrails/db/versions/v0_9_0/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_9_0/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_9_0/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_9_0/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_9_0/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_9_0/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_9_0/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_9_0/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_9_0/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_9_0/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_9_0/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_9_0/specs/module_exec.xml |    2 +-
 vistrails/db/versions/v0_9_0/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_9_0/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_9_0/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_9_0/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_9_0/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_9_0/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_9_0/specs/workflow.xml    |    2 +-
 .../db/versions/v0_9_0/specs/workflow_exec.xml     |    2 +-
 vistrails/db/versions/v0_9_0/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_9_0/translate/v0_8_1.py   |    2 +-
 vistrails/db/versions/v0_9_1/__init__.py           |    2 +-
 vistrails/db/versions/v0_9_1/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_9_1/domain/abstraction.py |    2 +-
 vistrails/db/versions/v0_9_1/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_9_1/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_9_1/domain/log.py         |    2 +-
 vistrails/db/versions/v0_9_1/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_9_1/domain/workflow.py    |    2 +-
 .../db/versions/v0_9_1/persistence/__init__.py     |    2 +-
 .../db/versions/v0_9_1/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_9_1/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_9_1/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_9_1/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_9_1/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v0_9_1/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_9_1/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_9_1/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_9_1/schemas/xml/vistrail.xsd    |    2 +-
 .../db/versions/v0_9_1/schemas/xml/vtlink.xsd      |    2 +-
 vistrails/db/versions/v0_9_1/specs/abstraction.xml |    2 +-
 .../db/versions/v0_9_1/specs/abstractionRef.xml    |    2 +-
 vistrails/db/versions/v0_9_1/specs/action.xml      |    2 +-
 vistrails/db/versions/v0_9_1/specs/add.xml         |    2 +-
 vistrails/db/versions/v0_9_1/specs/annotation.xml  |    2 +-
 vistrails/db/versions/v0_9_1/specs/change.xml      |    2 +-
 vistrails/db/versions/v0_9_1/specs/connection.xml  |    2 +-
 vistrails/db/versions/v0_9_1/specs/delete.xml      |    2 +-
 vistrails/db/versions/v0_9_1/specs/function.xml    |    2 +-
 vistrails/db/versions/v0_9_1/specs/group.xml       |    2 +-
 vistrails/db/versions/v0_9_1/specs/location.xml    |    2 +-
 vistrails/db/versions/v0_9_1/specs/log.xml         |    2 +-
 vistrails/db/versions/v0_9_1/specs/machine.xml     |    2 +-
 vistrails/db/versions/v0_9_1/specs/module.xml      |    2 +-
 vistrails/db/versions/v0_9_1/specs/module_exec.xml |    2 +-
 vistrails/db/versions/v0_9_1/specs/other.xml       |    2 +-
 vistrails/db/versions/v0_9_1/specs/parameter.xml   |    2 +-
 vistrails/db/versions/v0_9_1/specs/port.xml        |    2 +-
 vistrails/db/versions/v0_9_1/specs/portSpec.xml    |    2 +-
 vistrails/db/versions/v0_9_1/specs/tag.xml         |    2 +-
 vistrails/db/versions/v0_9_1/specs/vistrail.xml    |    2 +-
 vistrails/db/versions/v0_9_1/specs/workflow.xml    |    2 +-
 .../db/versions/v0_9_1/specs/workflow_exec.xml     |    2 +-
 vistrails/db/versions/v0_9_1/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_9_1/translate/v0_9_0.py   |    2 +-
 vistrails/db/versions/v0_9_2/__init__.py           |    2 +-
 vistrails/db/versions/v0_9_2/domain/__init__.py    |    2 +-
 .../db/versions/v0_9_2/persistence/__init__.py     |    2 +-
 vistrails/db/versions/v0_9_2/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_9_2/translate/v0_9_1.py   |    2 +-
 vistrails/db/versions/v0_9_3/__init__.py           |    2 +-
 vistrails/db/versions/v0_9_3/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_9_3/domain/abstraction.py |    2 +-
 vistrails/db/versions/v0_9_3/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_9_3/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_9_3/domain/log.py         |    2 +-
 vistrails/db/versions/v0_9_3/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_9_3/domain/workflow.py    |    2 +-
 .../db/versions/v0_9_3/persistence/__init__.py     |    2 +-
 .../db/versions/v0_9_3/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_9_3/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_9_3/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_9_3/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_9_3/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v0_9_3/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_9_3/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_9_3/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_9_3/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_9_3/specs/all.xml         |    2 +-
 vistrails/db/versions/v0_9_3/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_9_3/translate/v0_9_1.py   |    2 +-
 vistrails/db/versions/v0_9_3/translate/v0_9_2.py   |    2 +-
 vistrails/db/versions/v0_9_3/translate/v0_9_4.py   |    2 +-
 vistrails/db/versions/v0_9_4/__init__.py           |    2 +-
 vistrails/db/versions/v0_9_4/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_9_4/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_9_4/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_9_4/domain/log.py         |    2 +-
 vistrails/db/versions/v0_9_4/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_9_4/domain/workflow.py    |    2 +-
 .../db/versions/v0_9_4/persistence/__init__.py     |    2 +-
 .../db/versions/v0_9_4/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_9_4/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_9_4/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_9_4/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_9_4/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v0_9_4/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_9_4/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_9_4/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_9_4/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_9_4/specs/all.xml         |    2 +-
 vistrails/db/versions/v0_9_4/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_9_4/translate/v0_9_3.py   |    2 +-
 vistrails/db/versions/v0_9_4/translate/v0_9_5.py   |    2 +-
 vistrails/db/versions/v0_9_5/__init__.py           |    2 +-
 vistrails/db/versions/v0_9_5/domain/__init__.py    |    2 +-
 vistrails/db/versions/v0_9_5/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v0_9_5/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v0_9_5/domain/log.py         |    2 +-
 vistrails/db/versions/v0_9_5/domain/registry.py    |    2 +-
 vistrails/db/versions/v0_9_5/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v0_9_5/domain/workflow.py    |    2 +-
 .../db/versions/v0_9_5/persistence/__init__.py     |    2 +-
 .../db/versions/v0_9_5/persistence/sql/__init__.py |    2 +-
 .../db/versions/v0_9_5/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v0_9_5/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v0_9_5/persistence/xml/__init__.py |    2 +-
 .../db/versions/v0_9_5/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v0_9_5/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v0_9_5/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v0_9_5/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v0_9_5/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v0_9_5/specs/all.xml         |    2 +-
 vistrails/db/versions/v0_9_5/translate/__init__.py |    2 +-
 vistrails/db/versions/v0_9_5/translate/v0_9_4.py   |    2 +-
 vistrails/db/versions/v0_9_5/translate/v1_0_0.py   |    2 +-
 vistrails/db/versions/v1_0_0/__init__.py           |    2 +-
 vistrails/db/versions/v1_0_0/domain/__init__.py    |    2 +-
 vistrails/db/versions/v1_0_0/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v1_0_0/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v1_0_0/domain/log.py         |    2 +-
 vistrails/db/versions/v1_0_0/domain/registry.py    |    2 +-
 vistrails/db/versions/v1_0_0/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v1_0_0/domain/workflow.py    |    2 +-
 .../db/versions/v1_0_0/persistence/__init__.py     |    2 +-
 .../db/versions/v1_0_0/persistence/sql/__init__.py |    2 +-
 .../db/versions/v1_0_0/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v1_0_0/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v1_0_0/persistence/xml/__init__.py |    2 +-
 .../db/versions/v1_0_0/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v1_0_0/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v1_0_0/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v1_0_0/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v1_0_0/schemas/xml/vistrail.xsd    |    2 +-
 vistrails/db/versions/v1_0_0/specs/all.xml         |    2 +-
 vistrails/db/versions/v1_0_0/translate/__init__.py |    2 +-
 vistrails/db/versions/v1_0_0/translate/v0_9_5.py   |    2 +-
 vistrails/db/versions/v1_0_0/translate/v1_0_1.py   |    2 +-
 vistrails/db/versions/v1_0_1/__init__.py           |    2 +-
 vistrails/db/versions/v1_0_1/domain/__init__.py    |    2 +-
 vistrails/db/versions/v1_0_1/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v1_0_1/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v1_0_1/domain/log.py         |    2 +-
 vistrails/db/versions/v1_0_1/domain/registry.py    |    2 +-
 vistrails/db/versions/v1_0_1/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v1_0_1/domain/workflow.py    |    2 +-
 .../db/versions/v1_0_1/persistence/__init__.py     |    2 +-
 .../db/versions/v1_0_1/persistence/sql/__init__.py |    2 +-
 .../db/versions/v1_0_1/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v1_0_1/persistence/sql/sql_dao.py  |    2 +-
 .../db/versions/v1_0_1/persistence/xml/__init__.py |    2 +-
 .../db/versions/v1_0_1/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v1_0_1/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v1_0_1/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v1_0_1/schemas/sql/vistrails_drop.sql |    2 +-
 .../db/versions/v1_0_1/schemas/xml/vistrail.xsd    |    2 +-
 .../db/versions/v1_0_1/schemas/xml/vtlink.xsd      |    2 +-
 vistrails/db/versions/v1_0_1/specs/all.xml         |    2 +-
 vistrails/db/versions/v1_0_1/translate/__init__.py |    2 +-
 vistrails/db/versions/v1_0_1/translate/v1_0_0.py   |    2 +-
 vistrails/db/versions/v1_0_1/translate/v1_0_2.py   |    2 +-
 vistrails/db/versions/v1_0_2/__init__.py           |    2 +-
 vistrails/db/versions/v1_0_2/domain/__init__.py    |    2 +-
 vistrails/db/versions/v1_0_2/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v1_0_2/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v1_0_2/domain/log.py         |    2 +-
 vistrails/db/versions/v1_0_2/domain/registry.py    |    2 +-
 vistrails/db/versions/v1_0_2/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v1_0_2/domain/workflow.py    |    2 +-
 .../db/versions/v1_0_2/persistence/__init__.py     |    2 +-
 .../db/versions/v1_0_2/persistence/sql/__init__.py |    2 +-
 .../db/versions/v1_0_2/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v1_0_2/persistence/sql/sql_dao.py  |    5 +-
 .../db/versions/v1_0_2/persistence/xml/__init__.py |    2 +-
 .../db/versions/v1_0_2/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v1_0_2/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v1_0_2/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v1_0_2/schemas/sql/vistrails_drop.sql |    2 +-
 vistrails/db/versions/v1_0_2/schemas/xml/log.xsd   |    2 +-
 .../db/versions/v1_0_2/schemas/xml/vistrail.xsd    |    2 +-
 .../db/versions/v1_0_2/schemas/xml/vtlink.xsd      |    2 +-
 .../db/versions/v1_0_2/schemas/xml/workflow.xsd    |    2 +-
 vistrails/db/versions/v1_0_2/specs/all.xml         |    2 +-
 vistrails/db/versions/v1_0_2/translate/__init__.py |    2 +-
 vistrails/db/versions/v1_0_2/translate/v1_0_1.py   |    2 +-
 vistrails/db/versions/v1_0_2/translate/v1_0_3.py   |    2 +-
 vistrails/db/versions/v1_0_3/__init__.py           |    2 +-
 vistrails/db/versions/v1_0_3/domain/__init__.py    |    2 +-
 vistrails/db/versions/v1_0_3/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v1_0_3/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v1_0_3/domain/log.py         |    2 +-
 vistrails/db/versions/v1_0_3/domain/registry.py    |    2 +-
 vistrails/db/versions/v1_0_3/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v1_0_3/domain/workflow.py    |    2 +-
 .../db/versions/v1_0_3/persistence/__init__.py     |    2 +-
 .../db/versions/v1_0_3/persistence/sql/__init__.py |    2 +-
 .../db/versions/v1_0_3/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v1_0_3/persistence/sql/sql_dao.py  |    5 +-
 .../db/versions/v1_0_3/persistence/xml/__init__.py |    2 +-
 .../db/versions/v1_0_3/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v1_0_3/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v1_0_3/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v1_0_3/schemas/sql/vistrails_drop.sql |    2 +-
 vistrails/db/versions/v1_0_3/schemas/xml/log.xsd   |    2 +-
 .../db/versions/v1_0_3/schemas/xml/vistrail.xsd    |    2 +-
 .../db/versions/v1_0_3/schemas/xml/vtlink.xsd      |    2 +-
 .../db/versions/v1_0_3/schemas/xml/workflow.xsd    |    2 +-
 vistrails/db/versions/v1_0_3/specs/all.xml         |    2 +-
 vistrails/db/versions/v1_0_3/translate/__init__.py |    2 +-
 vistrails/db/versions/v1_0_3/translate/v1_0_2.py   |    2 +-
 vistrails/db/versions/v1_0_3/translate/v1_0_4.py   |    2 +-
 vistrails/db/versions/v1_0_4/__init__.py           |    2 +-
 vistrails/db/versions/v1_0_4/domain/__init__.py    |    2 +-
 vistrails/db/versions/v1_0_4/domain/auto_gen.py    |    2 +-
 vistrails/db/versions/v1_0_4/domain/id_scope.py    |    2 +-
 vistrails/db/versions/v1_0_4/domain/log.py         |    2 +-
 vistrails/db/versions/v1_0_4/domain/registry.py    |    2 +-
 vistrails/db/versions/v1_0_4/domain/vistrail.py    |    2 +-
 vistrails/db/versions/v1_0_4/domain/workflow.py    |    2 +-
 .../db/versions/v1_0_4/persistence/__init__.py     |    2 +-
 .../db/versions/v1_0_4/persistence/sql/__init__.py |    2 +-
 .../db/versions/v1_0_4/persistence/sql/auto_gen.py |    2 +-
 .../db/versions/v1_0_4/persistence/sql/sql_dao.py  |    5 +-
 .../db/versions/v1_0_4/persistence/xml/__init__.py |    2 +-
 .../db/versions/v1_0_4/persistence/xml/auto_gen.py |    2 +-
 .../db/versions/v1_0_4/persistence/xml/xml_dao.py  |    2 +-
 .../db/versions/v1_0_4/schemas/sql/vistrails.sql   |    2 +-
 .../versions/v1_0_4/schemas/sql/vistrails_drop.sql |    2 +-
 vistrails/db/versions/v1_0_4/schemas/xml/log.xsd   |    2 +-
 .../db/versions/v1_0_4/schemas/xml/vistrail.xsd    |    2 +-
 .../db/versions/v1_0_4/schemas/xml/vtlink.xsd      |    2 +-
 .../db/versions/v1_0_4/schemas/xml/workflow.xsd    |    2 +-
 vistrails/db/versions/v1_0_4/specs/all.xml         |    2 +-
 vistrails/db/versions/v1_0_4/translate/__init__.py |    2 +-
 vistrails/db/versions/v1_0_4/translate/v1_0_3.py   |    6 +-
 vistrails/gui/__init__.py                          |    2 +-
 vistrails/gui/application.py                       |  172 +-
 vistrails/gui/application_server.py                |    2 +-
 vistrails/gui/base_view.py                         |    2 +-
 vistrails/gui/bundles/__init__.py                  |    2 +-
 vistrails/gui/bundles/installbundle.py             |    3 +-
 vistrails/gui/bundles/linux_debian_install.py      |    2 +-
 vistrails/gui/bundles/linux_fedora_install.py      |    2 +-
 vistrails/gui/bundles/utils.py                     |    2 +-
 vistrails/gui/collection/__init__.py               |    2 +-
 vistrails/gui/collection/explorer.py               |    2 +-
 vistrails/gui/collection/vis_log.py                |    2 +-
 vistrails/gui/collection/workspace.py              |   54 +-
 vistrails/gui/common_widgets.py                    |    2 +-
 vistrails/gui/configuration.py                     |   38 +-
 vistrails/gui/controlflow_assist.py                |    2 +-
 vistrails/gui/debug.py                             |    2 +-
 vistrails/gui/debugger.py                          |    2 +-
 vistrails/gui/extras/__init__.py                   |    2 +-
 vistrails/gui/extras/core/__init__.py              |    2 +-
 vistrails/gui/extras/core/db/__init__.py           |    2 +-
 vistrails/gui/extras/core/db/locator.py            |    2 +-
 vistrails/gui/graphics_view.py                     |    2 +-
 vistrails/gui/job_monitor.py                       |  643 +++++--
 vistrails/gui/mashups/__init__.py                  |    2 +-
 vistrails/gui/mashups/alias_inspector.py           |    2 +-
 vistrails/gui/mashups/alias_list.py                |    2 +-
 vistrails/gui/mashups/alias_parameter_view.py      |    2 +-
 vistrails/gui/mashups/controller.py                |    2 +-
 vistrails/gui/mashups/mashup_app.py                |   90 +-
 vistrails/gui/mashups/mashup_view.py               |    2 +-
 vistrails/gui/mashups/mashups_inspector.py         |    2 +-
 vistrails/gui/mashups/mashups_manager.py           |    4 +-
 vistrails/gui/mashups/mashups_widgets.py           |    4 +-
 vistrails/gui/merge_gui.py                         |    2 +-
 vistrails/gui/module_annotation.py                 |    2 +-
 vistrails/gui/module_configuration.py              |    2 +-
 vistrails/gui/module_documentation.py              |    2 +-
 vistrails/gui/module_info.py                       |   26 +-
 vistrails/gui/module_options.py                    |    2 +-
 vistrails/gui/module_palette.py                    |   62 +-
 vistrails/gui/modules/__init__.py                  |    2 +-
 vistrails/gui/modules/constant_configuration.py    |    2 +-
 vistrails/gui/modules/list_configuration.py        |    2 +-
 vistrails/gui/modules/module_configure.py          |    8 +-
 vistrails/gui/modules/output_configuration.py      |    2 +-
 vistrails/gui/modules/paramexplore.py              |    2 +-
 vistrails/gui/modules/python_source_configure.py   |    6 +-
 vistrails/gui/modules/query_configuration.py       |    2 +-
 vistrails/gui/modules/resources/__init__.py        |   38 -
 vistrails/gui/modules/resources/colorconfig.qrc    |    5 -
 vistrails/gui/modules/resources/colorconfig_rc.py  | 1855 --------------------
 vistrails/gui/modules/resources/colorwheel.png     |  Bin 28526 -> 0 bytes
 vistrails/gui/modules/source_configure.py          |  146 +-
 vistrails/gui/modules/string_configure.py          |    6 +-
 .../gui/modules/stringformat_configuration.py      |    2 +-
 vistrails/gui/modules/tuple_configuration.py       |   19 +-
 vistrails/gui/modules/utils.py                     |    2 +-
 vistrails/gui/open_db_window.py                    |    2 +-
 vistrails/gui/paramexplore/__init__.py             |    2 +-
 vistrails/gui/paramexplore/param_view.py           |    2 +-
 vistrails/gui/paramexplore/pe_inspector.py         |    2 +-
 vistrails/gui/paramexplore/pe_pipeline.py          |    2 +-
 vistrails/gui/paramexplore/pe_tab.py               |    7 +-
 vistrails/gui/paramexplore/pe_table.py             |    2 +-
 vistrails/gui/paramexplore/pe_view.py              |    2 +-
 vistrails/gui/paramexplore/virtual_cell.py         |   12 +-
 vistrails/gui/pipeline_view.py                     |  219 ++-
 vistrails/gui/pipeline_view_select.py              |    2 +-
 vistrails/gui/port_documentation.py                |    2 +-
 vistrails/gui/ports_pane.py                        |    5 +-
 vistrails/gui/preferences.py                       |   24 +-
 vistrails/gui/publishing.py                        |    2 +-
 vistrails/gui/qt.py                                |    2 +-
 vistrails/gui/query_view.py                        |   71 +-
 vistrails/gui/repository.py                        |    2 +-
 vistrails/gui/requirements.py                      |    2 +-
 vistrails/gui/resources/__init__.py                |    2 +-
 vistrails/gui/resources/images/disclaimer.png      |  Bin 329091 -> 329346 bytes
 .../gui/resources/images/vistrails_splash.png      |  Bin 162012 -> 161471 bytes
 vistrails/gui/resources/macroicons_rc.py           |    2 +-
 vistrails/gui/shell.py                             |    2 +-
 vistrails/gui/theme.py                             |    2 +-
 vistrails/gui/utils.py                             |    2 +-
 vistrails/gui/variable_dropbox.py                  |    2 +-
 vistrails/gui/version_prop.py                      |   40 +-
 vistrails/gui/version_view.py                      |   12 +-
 vistrails/gui/vis_diff.py                          |   52 +-
 vistrails/gui/vistrail_controller.py               |  255 ++-
 vistrails/gui/vistrail_variables.py                |    2 +-
 vistrails/gui/vistrail_view.py                     |   80 +-
 vistrails/gui/vistrails_palette.py                 |    2 +-
 vistrails/gui/vistrails_window.py                  |    6 +-
 vistrails/packages/CLTools/__init__.py             |    2 +-
 vistrails/packages/CLTools/identifiers.py          |    2 +-
 vistrails/packages/CLTools/init.py                 |    2 +-
 vistrails/packages/CLTools/wizard.py               |    2 +-
 vistrails/packages/ImageMagick/__init__.py         |    2 +-
 vistrails/packages/ImageMagick/init.py             |    2 +-
 vistrails/packages/RemoteQ/__init__.py             |    2 +-
 vistrails/packages/RemoteQ/base.py                 |    2 +-
 vistrails/packages/RemoteQ/hdfs.py                 |    2 +-
 vistrails/packages/RemoteQ/init.py                 |    2 +-
 vistrails/packages/RemoteQ/streaming.py            |    2 +-
 vistrails/packages/SUDSWebServices/__init__.py     |    2 +-
 vistrails/packages/SUDSWebServices/init.py         |   21 +-
 vistrails/packages/URL/__init__.py                 |    2 +-
 vistrails/packages/URL/http_directory.py           |    2 +-
 vistrails/packages/URL/https.py                    |    2 +-
 vistrails/packages/URL/https_if_available.py       |    2 +-
 vistrails/packages/URL/identifiers.py              |    2 +-
 vistrails/packages/URL/init.py                     |   72 +-
 vistrails/packages/__init__.py                     |    2 +-
 vistrails/packages/analytics/__init__.py           |    2 +-
 vistrails/packages/analytics/init.py               |    2 +-
 vistrails/packages/controlflow/__init__.py         |    9 +-
 vistrails/packages/controlflow/conditional.py      |    5 +-
 vistrails/packages/controlflow/fold.py             |   15 +-
 vistrails/packages/controlflow/init.py             |   14 +-
 vistrails/packages/controlflow/looping.py          |    5 +-
 vistrails/packages/controlflow/order.py            |    5 +-
 vistrails/packages/controlflow/products.py         |    2 +-
 vistrails/packages/controlflow/utils.py            |    5 +-
 vistrails/packages/dialogs/__init__.py             |    2 +-
 vistrails/packages/dialogs/continue_prompt.py      |    2 +-
 vistrails/packages/dialogs/init.py                 |    2 +-
 vistrails/packages/gmaps/__init__.py               |    2 +-
 vistrails/packages/gmaps/gmap_cell.py              |    6 +-
 vistrails/packages/gmaps/identifiers.py            |    2 +-
 vistrails/packages/gmaps/init.py                   |    2 +-
 vistrails/packages/gmaps/utils.py                  |    2 +-
 vistrails/packages/gmaps/vis.py                    |    2 +-
 vistrails/packages/matplotlib/__init__.py          |    2 +-
 vistrails/packages/matplotlib/bases.py             |   28 +-
 vistrails/packages/matplotlib/diff.py              |    2 +-
 vistrails/packages/matplotlib/figure_cell.py       |   10 +-
 vistrails/packages/matplotlib/generate.py          |    2 +-
 vistrails/packages/matplotlib/identifiers.py       |    4 +-
 vistrails/packages/matplotlib/init.py              |    8 +-
 vistrails/packages/matplotlib/mixins.py            |    2 +-
 vistrails/packages/matplotlib/parse.py             |    2 +-
 vistrails/packages/matplotlib/specs.py             |    2 +-
 vistrails/packages/matplotlib/update.py            |    2 +-
 vistrails/packages/matplotlib/widgets.py           |    2 +-
 vistrails/packages/mongodb/Vagrantfile             |   31 +
 .../{persistent_archive => mongodb}/__init__.py    |   24 +-
 vistrails/packages/mongodb/init.py                 |  291 +++
 vistrails/packages/parallelflow/__init__.py        |    2 +-
 vistrails/packages/parallelflow/api.py             |    2 +-
 vistrails/packages/parallelflow/engine_manager.py  |    2 +-
 vistrails/packages/parallelflow/init.py            |    2 +-
 vistrails/packages/parallelflow/map.py             |    2 +-
 vistrails/packages/persistence/__init__.py         |    2 +-
 vistrails/packages/persistence/compute_hash.py     |    2 +-
 vistrails/packages/persistence/db_utils.py         |    2 +-
 vistrails/packages/persistence/find_files.py       |    2 +-
 vistrails/packages/persistence/find_workflows.py   |    4 +-
 vistrails/packages/persistence/identifiers.py      |    2 +-
 vistrails/packages/persistence/init.py             |    2 +-
 vistrails/packages/persistence/repo.py             |    2 +-
 vistrails/packages/persistence/schema.sql          |    2 +-
 vistrails/packages/persistence/widgets.py          |    2 +-
 vistrails/packages/persistent_archive/__init__.py  |    2 +-
 vistrails/packages/persistent_archive/cache.py     |    2 +-
 vistrails/packages/persistent_archive/common.py    |    2 +-
 .../packages/persistent_archive/identifiers.py     |    2 +-
 vistrails/packages/persistent_archive/init.py      |    2 +-
 .../packages/persistent_archive/persistedinput.py  |    2 +-
 .../packages/persistent_archive/persistedoutput.py |    2 +-
 .../packages/persistent_archive/queriedinput.py    |    2 +-
 vistrails/packages/persistent_archive/queries.py   |    2 +-
 vistrails/packages/persistent_archive/ui.py        |   11 +-
 vistrails/packages/persistent_archive/widgets.py   |    2 +-
 vistrails/packages/pipelineEdit/__init__.py        |    2 +-
 vistrails/packages/pipelineEdit/init.py            |    2 +-
 vistrails/packages/pythonCalc/__init__.py          |    2 +-
 vistrails/packages/pythonCalc/init.py              |    2 +-
 vistrails/packages/pythonCalcQt/__init__.py        |    2 +-
 vistrails/packages/pythonCalcQt/init.py            |    2 +-
 vistrails/packages/qgis/__init__.py                |    2 +-
 vistrails/packages/qgis/init.py                    |    2 +-
 vistrails/packages/reprounzip/__init__.py          |   22 +
 vistrails/packages/reprounzip/init.py              |  165 ++
 vistrails/packages/rpy/__init__.py                 |    2 +-
 vistrails/packages/rpy/init.py                     |    2 +-
 vistrails/packages/rpy/widgets.py                  |    2 +-
 vistrails/packages/sklearn/__init__.py             |    2 +-
 vistrails/packages/sklearn/init.py                 |    2 +-
 vistrails/packages/sklearn/tests.py                |    2 +-
 vistrails/packages/spreadsheet/__init__.py         |    2 +-
 vistrails/packages/spreadsheet/analogy_api.py      |    2 +-
 vistrails/packages/spreadsheet/basic_widgets.py    |    2 +-
 vistrails/packages/spreadsheet/cell_rc.py          |    2 +-
 vistrails/packages/spreadsheet/celltoolbar.qrc     |    2 +
 vistrails/packages/spreadsheet/celltoolbar_rc.py   |  125 +-
 vistrails/packages/spreadsheet/identifiers.py      |    2 +-
 .../packages/spreadsheet/images/equal-sizes.png    |  Bin 0 -> 855 bytes
 .../packages/spreadsheet/images/new-window.png     |  Bin 0 -> 619 bytes
 vistrails/packages/spreadsheet/init.py             |   16 +-
 vistrails/packages/spreadsheet/spreadsheet_base.py |    2 +-
 vistrails/packages/spreadsheet/spreadsheet_cell.py |    2 +-
 .../packages/spreadsheet/spreadsheet_config.py     |    2 +-
 .../packages/spreadsheet/spreadsheet_controller.py |   33 +-
 .../packages/spreadsheet/spreadsheet_event.py      |    2 +-
 .../packages/spreadsheet/spreadsheet_execute.py    |  100 +-
 .../packages/spreadsheet/spreadsheet_helpers.py    |    2 +-
 vistrails/packages/spreadsheet/spreadsheet_rc.py   |    2 +-
 .../packages/spreadsheet/spreadsheet_registry.py   |    2 +-
 .../packages/spreadsheet/spreadsheet_sheet.py      |    4 +-
 vistrails/packages/spreadsheet/spreadsheet_tab.py  |    9 +-
 .../spreadsheet/spreadsheet_tabcontroller.py       |    2 +-
 .../packages/spreadsheet/spreadsheet_window.py     |    2 +-
 vistrails/packages/spreadsheet/widgets/__init__.py |    2 +-
 .../spreadsheet/widgets/iebrowser/__init__.py      |    2 +-
 .../spreadsheet/widgets/iebrowser/iecell.py        |    2 +-
 .../spreadsheet/widgets/imageviewer/__init__.py    |    2 +-
 .../spreadsheet/widgets/imageviewer/imageviewer.py |    4 +-
 .../widgets/imageviewer/imageviewer_rc.py          |    2 +-
 .../spreadsheet/widgets/richtext/__init__.py       |    2 +-
 .../spreadsheet/widgets/richtext/richtext.py       |    4 +-
 .../packages/spreadsheet/widgets/svg/__init__.py   |    2 +-
 vistrails/packages/spreadsheet/widgets/svg/svg.py  |    2 +-
 .../spreadsheet/widgets/webview/__init__.py        |    2 +-
 .../spreadsheet/widgets/webview/webview.py         |   30 +-
 vistrails/packages/sql/__init__.py                 |    2 +-
 vistrails/packages/sql/init.py                     |    2 +-
 vistrails/packages/sql/widgets.py                  |    2 +-
 vistrails/packages/tabledata/__init__.py           |   35 +
 vistrails/packages/tabledata/common.py             |   74 +-
 vistrails/packages/tabledata/convert/__init__.py   |    6 +-
 .../packages/tabledata/convert/convert_dates.py    |    2 +-
 .../packages/tabledata/convert/convert_numpy.py    |  108 ++
 vistrails/packages/tabledata/identifiers.py        |   35 +
 vistrails/packages/tabledata/init.py               |   45 +-
 vistrails/packages/tabledata/operations.py         |   47 +-
 vistrails/packages/tabledata/read/__init__.py      |   22 +-
 vistrails/packages/tabledata/read/convert.py       |  193 ++
 vistrails/packages/tabledata/read/read_csv.py      |   10 +-
 vistrails/packages/tabledata/read/read_excel.py    |   11 +-
 vistrails/packages/tabledata/read/read_json.py     |  129 +-
 vistrails/packages/tabledata/read/read_numpy.py    |   68 +-
 vistrails/packages/tabledata/viewer.py             |   37 +-
 vistrails/packages/tabledata/widgets.py            |   40 +-
 vistrails/packages/tabledata/write/__init__.py     |   26 +-
 vistrails/packages/tabledata/write/write_csv.py    |    2 +-
 vistrails/packages/tabledata/write/write_excel.py  |    2 +-
 vistrails/packages/tabledata/write/write_numpy.py  |   10 +-
 vistrails/packages/tej/__init__.py                 |    2 +
 vistrails/packages/tej/init.py                     |  255 ++-
 vistrails/packages/tej/widgets.py                  |  149 +-
 .../{persistent_archive => tensorflow}/__init__.py |   18 +-
 vistrails/packages/tensorflow/base.py              |  268 +++
 vistrails/packages/tensorflow/init.py              |  293 ++++
 vistrails/packages/vtk/__init__.py                 |    2 +-
 vistrails/packages/vtk/common.py                   |    2 +-
 vistrails/packages/vtk/hasher.py                   |    2 +-
 vistrails/packages/vtk/identifiers.py              |    2 +-
 vistrails/packages/vtk/init.py                     |   36 +-
 vistrails/packages/vtk/inspectors.py               |    2 +-
 vistrails/packages/vtk/offscreen.py                |    2 +-
 vistrails/packages/vtk/pythonclass.py              |    2 +-
 vistrails/packages/vtk/tf_widget.py                |    2 +-
 vistrails/packages/vtk/vtk_wrapper/class_tree.py   |    2 +-
 vistrails/packages/vtk/vtk_wrapper/fix_classes.py  |    2 +-
 vistrails/packages/vtk/vtk_wrapper/parse.py        |    2 +-
 vistrails/packages/vtk/vtk_wrapper/specs.py        |    2 +-
 vistrails/packages/vtk/vtk_wrapper/vtk_classes.py  |    2 +-
 vistrails/packages/vtk/vtk_wrapper/vtk_parser.py   |    2 +-
 vistrails/packages/vtk/vtk_wrapper/wrapper.py      |    2 +-
 vistrails/packages/vtk/vtkcell.py                  |    4 +-
 vistrails/packages/vtk/vtkhandler.py               |    2 +-
 vistrails/packages/vtlcreator/__init__.py          |    2 +-
 vistrails/packages/vtlcreator/init.py              |    2 +-
 vistrails/packages/webServices/__init__.py         |    2 +-
 .../packages/webServices/enumeration_widget.py     |    2 +-
 vistrails/packages/webServices/init.py             |    2 +-
 vistrails/run.py                                   |   24 +-
 vistrails/stop_vistrails_server.py                 |    2 +-
 vistrails/tests/__init__.py                        |    2 +-
 vistrails/tests/resources/__init__.py              |    2 +-
 vistrails/tests/resources/broken_upgrade.xml       |   23 +
 vistrails/tests/resources/chained_upgrade.xml      |   23 +
 vistrails/tests/resources/console_mode_test.py     |    2 +-
 vistrails/tests/resources/dummy.xml                |    2 +-
 vistrails/tests/resources/dummy_broken.xml         |    2 +-
 vistrails/tests/resources/dummy_new.xml            |    2 +-
 vistrails/tests/resources/dynamic_module_error.xml |    2 +-
 vistrails/tests/resources/empty_bookmarks.xml      |    2 +-
 vistrails/tests/resources/jobs.vt                  |  Bin 0 -> 42374 bytes
 .../tests/resources/looping_upgrades/__init__.py   |    0
 .../resources/looping_upgrades/pkg_a/__init__.py   |    3 +
 .../tests/resources/looping_upgrades/pkg_a/init.py |   23 +
 .../resources/looping_upgrades/pkg_b/__init__.py   |    3 +
 .../tests/resources/looping_upgrades/pkg_b/init.py |   23 +
 .../resources/looping_upgrades/pkg_c/__init__.py   |    3 +
 .../tests/resources/looping_upgrades/pkg_c/init.py |   11 +
 .../resources/looping_upgrades/pkg_x/__init__.py   |    3 +
 .../tests/resources/looping_upgrades/pkg_x/init.py |   23 +
 .../resources/looping_upgrades/pkg_y/__init__.py   |    3 +
 .../tests/resources/looping_upgrades/pkg_y/init.py |   23 +
 .../tests/resources/looping_upgrades/workflow.xml  |   26 +
 .../tests/resources/looping_upgrades/workflow2.xml |   26 +
 vistrails/tests/resources/myjob.py                 |  195 ++
 vistrails/tests/resources/pythonsource.xml         |    2 +-
 vistrails/tests/resources/test_alias.xml           |    2 +-
 vistrails/tests/resources/test_ticket_73.xml       |    2 +-
 vistrails/tests/resources/vtk.xml                  |    2 +-
 vistrails/tests/runtestsuite.py                    |   30 +-
 vistrails/tests/utils.py                           |   73 +-
 vistrails/vistrails_server.py                      |    2 +-
 1114 files changed, 8278 insertions(+), 7088 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 6b7cfd4..a626017 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,83 @@
 RELEASE NOTES
 -------------
-Release Name: v2.2 build 422e1a9bbc1c from master branch
+Release Name: v2.2.4 build 1519abc0ae2b from v2.2 branch
+
+Bug fixes:
+ - Fix module with optional connected port having the wrong size
+ - Fix InputPort with ports that have depth>0
+ - ReproUnzip: actually populate 'stdout' and 'stderr' ports
+ - Fix ReproUnzip not working in Mac OS binary installation
+ - Fix tej failing to setup a queue in Mac OS binary installation
+ - Show full stacktrace in module's "Show Error" popup
+ - Fix Module Info tab showing wrong module in some cases
+ - Fix Search Mode (#1149)
+   - Visual query did not work without string query
+   - Workflow query did not display matching modules
+   - Updated Search Mode documentation
+   - Upgraded pipelines will now be searched when hideUpgrades is set
+ - Fix visual diff not using upgraded pipeline
+ - Hide empty Mashup and Parameter exploration items in workspace
+ - Fix mashup link in Workflow Info tab
+ - Fix workspace not updating mashup list
+ - improvements to upgrades
+   - Upgrades are now correctly chained from the latest upgrade (#1164)
+   - Fixed multi-step upgrades that replaces modules to other packages (#1165)
+
+Enhancements:
+ - Add a TensorFlow package
+ - Allow multiple versions of the same package to be installed, load the
+   latest working one
+ - If loading a file with an unknown extension, assume .vt format
+ - API: allow constructing vistrails.Vistrail() without argument
+ - Added usage stats reporting
+ - Added news widget
+
+From Release: v2.2.3 build 02ad04a622c4 from v2.2 branch
+
+Bug fixes:
+ - Fixed showing "invalid pipeline" instead of failure from auto-enabled package
+ - Fixed responsiveness of suspended module progress bar
+ - Fixed some GUI issues in the job monitor
+ - Accept unicode in source configuration widgets (e.g. PythonSource's)
+ - Fixed using same name for an input & output port in PythonSource
+ - Fixed the spreadsheet window popping up when exiting VisTrails
+
+Enhancements:
+ - tej package improved & documented
+ - Add "close" action in workspace context menu
+ - Added a MongoDB package
+ - Added a reprounzip package
+ - Make FileOutput mode use the 'outputDirectory' config setting
+ - Allow multiple actions in module palette's context menus by introducing 'context_menu', replacing 'contextMenuName' and 'callContextMenu'
+ - Add Reshape, DictToTable and ListToTable modules to tabledata
+ - Only require numpy/xlrd/xlwt when modules get executed; they now always exist
+ - Added Job Submission support to Parameter Explorations and Mashups
+ - ModuleSuspended now requires a handle
+ - Added Job Submission documentation, examples, and tests
+ - Autosave now only stores the latest save, not a new one every 2 minutes
+
+Behavior change for package developers:
+ - MplFigure connections now carry the figure number (int)
+ - ModuleSuspended now must have an associated JobHandle
+
+From Release: v2.2.2 build 9bd2afa387a4 from v2.2 branch
+
+Bug fixes:
+ - prevents introducing cycles in pipeline view (#1097)
+ - Fixes to subworkflows
+   - Fixes subworkflows failing to execute (#1065)
+   - Fixes not being able to remove local subworkflows (#1101)
+   - Fixes upgrading to a newer local subworkflow
+ - Fixes OPM and PROV export (#1076) (#1075)
+ - Fixes executable documents (#1088)
+ - Fixed generating pipeline and version tree graphs
+
+From Release: v2.2.1 build c366dbcb640c from v2.2 branch
+
+Bug fixes:
+ - parameter exploration failed on cells upgraded to output modules (#1063)
+
+From Release: v2.2 build 7a19c29b8322 from v2.2 branch
 
 Enhancements:
  - zip/unzip binaries no longer needed (#862)
@@ -48,11 +125,13 @@ Enhancements:
  - No longer show upgrade actions in version tree (optional; #1046)
  - Associate with .vt and .vtl files on Linux
  - Added min_conns and max_conns attribute to ports
+
 Bug fixes:
  - fixes strptime on system with non-English locale
  - fixes returning numpy arrays from PythonSource modules (3468998b)
  - pressing ctrl+s after loading a pipeline no longer replace it with a vistrail
  - fixed losing notes when clicking "execute" immediately from version view
+
 Behavior change for package developers:
  - made Module methods python_style; updateUpstream won't work, others will
    work but trigger warning
diff --git a/LICENSE b/LICENSE
index 207f77d..f034f53 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014-2015, New York University
+Copyright (c) 2014-2016, New York University
 Copyright (C) 2011-2014, NYU-Poly.
 Copyright (C) 2006-2011, University of Utah.
 All rights reserved.
diff --git a/doc/coding_conventions.txt b/doc/coding_conventions.txt
deleted file mode 100644
index 5b4f3b6..0000000
--- a/doc/coding_conventions.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-Coding Conventions for VisTrails
---------------------------------------------------------------------------------
-
-Variable naming, spacing
-------------------------
-
-Long version:
-
-    http://www.python.org/dev/peps/pep-0008/
-
-
-Short version:
-
-    Use 4 spaces per indentation level.
-
-    Use spaces, not tabs. 
-
-       Hint: if you have a file that uses tabs and you're using emacs:
-
-       M-x mark-whole-buffer
-       M-x untabify
-
-    Limit lines to 79 characters. (Use Python's implied continuation
-    for parentheses, brackets and braces. Or use a backslash):
-
-       if this_is_true and this_other_thing_is_also_true and this_other_thing_makes_this_line_too_long:
-           raise This_is_bad_style
-
-       Fix it like this:
-
-       if (this_is_true and
-           this_other_thing_is_also_true and
-           this_other_thing_makes_this_line_too_long):
-           raise This_is_better_style
-
-       Or like this:
-
-       if this_is_true and \
-          this_other_thing_is_also_true and \
-          this_other_thing_makes_this_line_too_long:
-          raise This_is_not_as_good_but_better_than_long_lines
-
-    Blank lines
-
-        Separate top-level function and class definitions with two
-        blank lines.
-
-        Method definitions inside a class are separated by a single
-        blank line.
-
-        Extra blank lines may be used (sparingly) to separate groups
-        of related functions.  Blank lines may be omitted between a
-        bunch of related one-liners (e.g. a set of dummy
-        implementations). Use blank lines in functions, sparingly, to
-        indicate logical sections.
-
-    Whitespace
-
-        Learn by example:
-
-        Yes: spam(ham[1], {eggs: 2})
-        No:  spam( ham[ 1 ], { eggs: 2 } )
-
-        Yes: if x == 4: print x, y; x, y = y, x
-        No:  if x == 4 : print x , y ; x , y = y , x
-
-        Yes: spam(1)
-        No:  spam (1)
-
-        Yes: dict['key'] = list[index]
-        No:  dict ['key'] = list [index]
-
-        Yes:  def complex(real, imag=0.0): return magic(r=real, i=imag)
-        No:   def complex(real, imag = 0.0): return magic(r = real, i = imag)
-
-
-    Comments:
-
-        Read http://www.python.org/dev/peps/pep-0008/
-
-
-    Capitalization:
-
-        class names are CamelCase, while methods and members
-        are_separated_by_underscores. This is not always possible,
-        especially when subclassing from Qt. Everywhere else, this
-        convention should be used. Qt signals are lowerCamelCase, to
-        be consistent with Qt.
-
-	Class members that are Qt objects themselves are probably OK
-	being camelCase, but everything that's possibly public-access
-	(through an API, for example), should be
-	separated_by_underscores.
-
-
-
-Docstrings
-----------
-    We agreed using something a little more compact than the guidelines
-available at:
-    http://www.python.org/dev/peps/pep-0257/
-
-    Examples:
-    If it is an obvious function, we should use something like this:
-    def temporaryDirectory():
-        """ temporaryDirectory() -> str 
-         Returns the path to the system's temporary directory """
-         return "/tmp/"
-    
-
-    If the function has structured parameters requiring a detailed description,
-    use something like this:
-    
-    def complex(real=0.0, imag=0.0):
-        """complex(real=0.0, imag=0.0) -> complex
-        Form a complex number.
-
-        Keyword arguments:
-        real -- the real part
-        imag -- the imaginary part
-
-        """
-        if imag == 0.0 and real == 0.0: return complex_zero
-        ...
-        
-
-Importing modules
------------------
-
-    Please import the modules using the fully qualified names,
-    even if they are in the right directories. For example, if you
-    have a file inside vistrails/core that imports a module inside 
-    vistrails/core/data_structures, do NOT use this
-
-    import data_structures.graph     # WRONG, don't do it!
-
-    instead, say
-
-    import core.data_structures.graph   # RIGHT
-
-    This allows us to run the modules as standalone classes, which is
-    good for testing purposes.
-
-    Don't use the construct "from foo import *". This also imports the
-    tests from that module. The problem is that the test suite then
-    runs these tests twice. But worse than that is the problem that a
-    module that imports tests from other modules now reports these
-    tests as its own, even though it might have none. This gives us a
-    false sense of test converage which should be avoided.
diff --git a/doc/dist/build_from_source_mac.txt b/doc/dist/build_from_source_mac.txt
deleted file mode 100644
index 2d13f84..0000000
--- a/doc/dist/build_from_source_mac.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-Building VisTrails from Source
-
---- Instructions Mac OSX Lion ----
-
-Install the following required software:
-  XCode
-  Command Line Tools (separate download through apple developer web site)
-  
-  Python (python.org) 
-       make sure to update the PATH to use this python. There's a script that does that in /Applications/Python 2.7/Update Shell Profile.command
-
-  Git
-
-  CMake
-
-  Qt
-
-  Boost (if we want to include text analysis support in VTK (it is currently included in 2.0 but I couldn't get it to work in VTK 5.10 on a Mac)
-
-  VTK
-
-  sip
-
-  PyQt4
-
-  QScintilla and python bindings (read instructions in QScintilla documentation)
-
-  NumPy (Binary installation)
-
-  SciPy (Binary installation)
-
-  Matplotlib (Binary installation)
-
-  suds (patched version)
-
-  MySQLdb (you also need to install MySQL Server so we get the lib and headers)
-
-  libxml2 and libxslt (same versions as in Snow Leopard, instructions here: http://www.vistrails.org/index.php/Mac_Intel_Instructions)
-
-  Numeric 23.8.2 (source files is in ~/src (needed by NumScipy)
-    $ cd ~/src/Numeric-23.8.2
-    $ python setup.py
-
-  fftw3 lib (source files is in ~/src)
-
-  Stockwell (needed by NumSciPy got the files from Erik Anderson the folder is also in ~/src) 
-       cd ~/src/stockwell 
-       make
-        cp *.so /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
-        pexpect (easy_install pexpect)
-  psycopg2 (need PostGreSQL)
-        http://www.enterprisedb.com/products-services-training/pgdownload#osx
-  ScientificPython
-  batchq (ALPS) download and install it from https://github.com/troelsfr/BatchQ
-  h5py (ALPS) need to install hdf5 (make sure to --enable-hl)
-  
-  download Thuban (http://wald.intevation.org/frs/?group_id=6&release_id=275#thuban-_1.2.2-title-content) and build only libraries/pyshapelib
-for shape files (not sure which package requires this)
-
-   easy_install numexpr
-   easy_install Cython
-   easy_install tables (this didn't work on Lion)
diff --git a/doc/dist/build_from_source_windows.txt b/doc/dist/build_from_source_windows.txt
deleted file mode 100644
index a532653..0000000
--- a/doc/dist/build_from_source_windows.txt
+++ /dev/null
@@ -1,123 +0,0 @@
-
-== Windows Build ==
-
-Download and install python from www.python.org. Get both 32-bit and 64-bit versions. Install the 64-bit version in C:\Python27_64 and the 32-bit version in C:\Python27
-
-Download and install msysgit (the windows git user is winbuild and there's no passphrase when generating the ssh keys).
-
-Download and install PyQt4 binary installers (includes sip, Qt and QScintilla)
-
-Download and install active tcl/tk 8.5 both 32-bit and 64-bit versions (make sure to install them in different directories C:\Tcl and C:\Tcl_64
-
-download boost library from www.boost.org and uncompress it to a local folder,
-I had problems building vtk with recent versions of boost, the version I know it works for sure is 1.46.1.
-So extract the zip file to a folder, for example ~/src/boost_1_46_1 vtk will use the same boost for both 32-bit and 64-bit versions
-
-Download and install cmake
-Get vtk source
-uncompress it to (e.g, ~\src\vtk\vtk-5.10.1\
-and rename the VTK folder to src
-create build and build64 folders in ~\src\vtk\vtk-5.10.1
-
-vtk 32-bit:
-  run cmake-gui pointing the src folder to src and build folder to build and press configure
-  select Visual Studio 9 2008 
-  mark the following variables:
-   BUILD_SHARED_LIBS 
-   VTK_WRAP_PYTHON
- on the top check Advanced
-   now mark
-    VTK_USE_BOOST
-    VTK_USE_TEXT_ANALYSIS  
- and press configure
-  Set 
-     Boost_INCLUDE_DIR  to ~/src/boost_1_46_1 (or where you uncompressed boost)
-   make sure it is using the correct versions of tcl and python (they should point to 32-bit installed versions)
- press configure again and finally press generate
-  now browse to the build directory and open VTK.sln in Visual Studio
-  On the top bar select Release and then build solution (F7)   
-If all goes well, you can install vtk python bindings:
-open a command prompt in the build/Wrapping/Python folder and run the following command:
-C:\Python27\python.exe setup.py BUILD_TYPE=Release install
-
-I've created two environment variables called PATH32 and PATH64 configured with
-the environment for each version of VisTrails:
-
-PATH32 = C:\Tcl\bin;C:\Python27\Lib\site-packages\PyQt4;C:\Python27;C:\Python27\Scripts;C:\Users\vistrails\src\vtk\vtk-5.10.1\build\bin\Release;C:\Users\vistrails\code\vistrails\dist\windows\Input
-
-PATH64 = C:\Tcl_64\bin;C:\Python27_64\Lib\site-packages\PyQt4;C:\Python27_64;C:\Python27_64\Scripts;C:\Users\vistrails\src\vtk\vtk-5.10.1\build64\bin\Release;C:\Users\vistrails\code\vistrails\dist\windows\Input
-
-Then, when I need to use the right environment, I just update the PATH
-variable with the right one:
-
-PATH = %PATH64%;%PATH%
-
-vtk 64-bit:
-
-  run cmake-gui again pointing the src folder to src and build folder to build64 and press configure
-  select Visual Studio 9 2008 Win64
-  mark the following variables:   
-     BUILD_SHARED_LIBS    
-     VTK_WRAP_PYTHON 
-on the top check Advanced   
-   now mark    
-     VTK_USE_BOOST    
-     VTK_USE_TEXT_ANALYSIS   
-and press configure   
-
- Set 
-     Boost_INCLUDE_DIR  to ~/src/boost_1_46_1 (or where you uncompressed boost)
-     Boost_LIBRARY_DIRS to ~/src/boost_1_46_1/libs 
-
-    make sure it is using the correct versions of tcl and python (they should point to 64-bit installed versions) press configure again and finally press generate  now browse to the build64 directory and open VTK.sln in Visual Studio  On the top bar select Release and then build solution (F7)  
-If all goes well, switch to the 64 bit Path and you can install vtk python bindings:
-open a command prompt in the build64/Wrapping/Python folder and run the following command:
-C:\Python27_64\python.exe setup.py BUILD_TYPE=Release install 
-
-Now let's build each configuration at time, starting with the 32-bit version:
-
-== 32-bit version ==
-
-Download and install numpy from numpy.scipy.org (there is a win32 super pack for python 2.7 binary version on source forge)
-
-Download and install scipy from scipy.org (there is a win32 super pack for python 2.7 binary version on source forge)
-
-Download and install matplotlib from matplotlib.org  (there is a win32 for python 2.7 version on source forge)
-
-Download and install mysqldb python from source forge, there's a win32 binary installer for python 2.7.
-
-Download and unzip hdf5-1.8.4 from http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.4/bin/windows/hdf5-1.8.4-32bit-VS2008-IVF101.zip
-
-Download fftw (http://www.fftw.org/install/windows.html) from ftp://ftp.fftw.org/pub/fftw/fftw-3.3.3-dll32.zip and extract the zip file to the folder ~/src/fftw-3.3.3-dll32
-
-Download and install setuptools (easy_install)
-
-Download and install the patched version of suds
-
-Copy stockwell files from x86_bin folder to C:\Python27\Lib\site-packages
-st.pyd and sine.pyd
-
-== 64-bit version ==
-
-Go to http://www.lfd.uci.edu/~gohlke/pythonlibs/ and download and
- install the 64-bit versions of (they are all binaries):
- numpy (get the MKL version)
- scipy
- matplotlib
- MySQL-python
- psycopg
-
-Download and unzip hdf5-1.8.4 from http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.4/bin/windows/hdf5-1.8.4-64bit-VS2008-IVF101.zip 
-
-Download fftw (http://www.fftw.org/install/windows.html) from
-ftp://ftp.fftw.org/pub/fftw/fftw-3.3.3-dll64.zip and extract the zip
-file to the folder ~/src/fftw-3.3.3-dll64 Follow the instructions on
-the web page to generate the .lib files
-
-Download and install setuptools (easy_install)
-
-Download and install the patched version of suds
-
-Copy stockwell files from x64_bin folder to C:\Python27_64\Lib\site-packages
-st.pyd and sine.pyd
-#Under construction
diff --git a/doc/dist/setup_build_system_mac.txt b/doc/dist/setup_build_system_mac.txt
deleted file mode 100644
index b673f12..0000000
--- a/doc/dist/setup_build_system_mac.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-# Required software for building binaries 
-Install Mercurial http://mercurial.selenic.com/
-
-Checkout and install altgraph 
-$ hg clone https://bitbucket.org/ronaldoussoren/altgraph
-$ cd altgraph
-$ python setup.py install
-$ cd ..
-
-Checkout and install macholib 
-$ hg clone https://bitbucket.org/ronaldoussoren/macholib
-$ cd macholib
-$ python setup.py install
-$ cd ..
-
-Checkout and install modulegraph
-$ hg clone https://bitbucket.org/ronaldoussoren/modulegraph
-$ cd modulegraph
-$ python setup.py install
-$ cd ..
-
-Checkout and install py2app 
-$ hg clone https://bitbucket.org/ronaldoussoren/py2app
-$ cd py2app
-$ python setup.py install
-$ cd ..
-
-Now we need to prepare Qt's plugin libs to be included in the binary because py2app doesn't seem to handle them correctly
-
-Just copy the iconengines and imageformats plugins and run 
-vistrails/dist/mac/Input/fix_qtplugin_libs.py on each folder:
-$ cd dist/mac/Input
-$ mkdir plugins
-$ cd plugins
-$ cp -r /Developer/Applications/Qt/plugins/iconengines .
-$ cp -r /Developer/Applications/Qt/plugins/imageformats .
-$ cd ../..
-$ python fix_qtplugin_libs.py Input/plugins/iconengines/
-$ python fix_qtplugin_libs.py Input/plugins/imageformats/
-
-Copy /usr/bin/git to dist/mac/Input
-
-Create a directory alps_libs in Input to store the alps_libs
-
-#GDAL Framework
-Install GDAL Framework Complete 1.8.1 http://www.kyngchaos.com/software/frameworks
-then copy site-packages to python.org directory:
-$ cp -r /Library/Frameworks/GDAL.framework/Versions/1.8/Python/2.7/site-packages/* /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
-
-#Install DMG Canvas
-Right now the only way is by copying the App from the build
-machine. The developers are now charging for a License when it used to
-be free. DMG Canvas is an application that creates the customized .dmg
-file. It provides a command line tool and we are using it in the main
-make_app script.
diff --git a/doc/dist/setup_build_system_windows.txt b/doc/dist/setup_build_system_windows.txt
deleted file mode 100644
index d8c9b3f..0000000
--- a/doc/dist/setup_build_system_windows.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-
-== Preparing to generate the release ==
-Install InnoDB Setup
-Download and install the QuickStart Pack of Inno Setup from http://www.jrsoftware.org/isdl.php 
-
-Checkout VisTrails git repository
-
-Download vcredist_x86.exe and vcredist_x64.exe from microsoft.com to "C:\Users\vistrails\".
-They will be copied to the final build.
-
-== Custom Builds ==
-Inside dist/windows/custom there are scripts for custom builds.
-
-=== GDAL ===
-Download the GDAL files from:
-32-bit:
-http://www.gisinternals.com/sdk/Download.aspx?file=release-1500-gdal-1-9-2-mapserver-6-2-0\gdal-19-1500-core.msi
-http://www.gisinternals.com/sdk/Download.aspx?file=release-1500-gdal-1-9-2-mapserver-6-2-0\GDAL-1.9.2.win32-py2.7.msi
-Install the first file. 
-
-Install the second file to a custom Python27
-installation (I believe it can be any folder on your hard drive). I
-copied the installed python files to:
-C:\Users\vistrails\extra_packages\gdal\x86\site-packages
-I then went to the C:\Program Files (x86)\GDAL folder (created by the first
-installer) and copied all the dlls into the osgeo folder inside
-C:\Users\vistrails\extra_packages\gdal\x86\site-packages
-Compiled all .py files with python -m compileall . inside the
-site-packages folder
-
-The script dist/windows/custom/vistrails_gdal.iss will copy the files
-in the binary. Just execute Inno Setup as a normal release. It will
-create a file called vistrails-gdal-setup.exe into
-dist/windows/custom/Output
-
-64-bit:
-http://www.gisinternals.com/sdk/Download.aspx?file=release-1500-x64-gdal-1-9-2-mapserver-6-2-0\gdal-19-1500-x64-core.msi
-http://www.gisinternals.com/sdk/Download.aspx?file=release-1500-x64-gdal-1-9-2-mapserver-6-2-0\GDAL-1.9.2.win-amd64-py2.7.msi
-
-Install the first file. 
-
-Install the second file to a custom Python27_64
-installation (I believe it can be any folder on your hard drive). I
-copied the installed python files to:
-C:\Users\vistrails\extra_packages\gdal\x64\site-packages
-I then went to the C:\Program Files\GDAL folder (created by the first
-installer) and copied all the dlls into the osgeo folder inside
-C:\Users\vistrails\extra_packages\gdal\x64\site-packages
-Compiled all .py files with python -m compileall . inside the
-site-packages folder
-
-The script dist/windows/custom/vistrailsx64_gdal.iss will copy the files
-in the binary. Just execute Inno Setup as a normal release. It will
-create a file called vistrails-x64-gdal-setup.exe into
-dist/windows/custom/Output
-
diff --git a/doc/module_registry.txt b/doc/module_registry.txt
deleted file mode 100644
index ef86613..0000000
--- a/doc/module_registry.txt
+++ /dev/null
@@ -1,14 +0,0 @@
---------------------------------------------------------------------------------
-Signatures in calls to add_input_port and add_output_port
-
-A signature given by the user in a call like this
-add_input_port(module, name, signature) should be one of the
-following:
-
-type only: add_input_port(_, _, Float)
-type plus description: add_input_port(_, _, (Float, 'radius'))
-
-multiple parameters, where each parameter can be either of the above:
-add_input_port(_, _, [Float, (Integer, 'count')])
-
---------------------------------------------------------------------------------
diff --git a/doc/package_system.txt b/doc/package_system.txt
deleted file mode 100644
index e1dcbf6..0000000
--- a/doc/package_system.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-FIXME this is old and does not reflect namespaces
-
-on port specs, a name is now of the form
-
-package_identifier:module_name
-
-this means that ":" is no longer allowed on module names.
-
---------------------------------------------------------------------------------
-
-A package has three "names" associated with it:
-
-- A human-readable name, which is given by the package creator, and is
-  available as the 'name' attribute in the package. 
-- A unique identifier, which is given by the package creator, and is
-  available as the 'identifier' attribute in the package
-- A code-path, which is currently given by the package user, and is
-  used by the package manager to get to the package.
-
-These three names are necessary for different reasons. A code-path
-needs to be unique within a VisTrails install so that __import__ is
-well-defined. However, it is not currently under the control of the
-package creator. This is the main identifier for
-core/packagemanager.py, which deals mainly with the executable code
-aspects of VisTrails packages. A human-readable name is necessary for
-the Module Palette in the UI, so that users can quickly see a
-descriptive name for a package. These names might be duplicate across
-a VisTrails install, and they are only cosmetic. A unique identifier
-is necessary for the module registry to distinguish between
-possibly conflicting module names. These are unique across _all_
-VisTrails installs, so users should take extra caution to find unique
-names.
-
---------------------------------------------------------------------------------
-(The following is not going to be done until 2.0)
-
-So I'm trying to design the packaging system to be reasonably future-proof.
-Here are a few use cases I see:
-
-
-Naming
-
-Use case: You write a package with a module having a certain name. I write a
-package with a module having the same name. VisTrails should handle both of
-them gracefully.
-
-Decision: We will assume a package prefix that is unique among all packages
-("... in the universe"), and educate them to create these correctly. For
-example, packages coming from our group should have an identifier
-"edu.utah.sci.vgc.package_name".
-
-
-Versioning
-
-Use case: I write a package and decide to change its interface. I release a
-new version of the package, which breaks compatibility with the old package.
-VisTrails should realize this and let the user know about obsolete packages,
-vistrail/package mismatches, etc.
-
-Decision: We will allow users to specify the version of a package. Packages
-will have a major.minor.release versioning scheme with specific assumed
-semantics. Major versions will be generally considered to break interfaces.
-Changes in minor versions will have to be fully type-compatible with the
-previous version. For example, version 1.1.0 can only change execution
-behavior, add new ports to modules, or add new modules. Everything else must
-be exactly like 1.0.0. Between 1.1.0 and 1.1.1 there can only be changes in
-execution behavior, documentation, etc: The types must be identical.
-
-Later on (post 1.0), packages can provide meta-information on how to
-automatically upgrade a module from one version to another, in the form of
-rewrite rules.
-
-
-Repositories
-
-When we have the online repository of packages (post 1.0), the repository will
-be able to check for the validity of the typing rules for major and minor
-versions. We should also design the repositories to be distributed. We should
-hold the central one, but we should assume people will eventually want to run
-their own package repositories.
-
-
-Can you guys think of anything?
-Thanks!
--carlos
-
---------------------------------------------------------------------------------
-
-Required changes for the new packaging system:
-
---------------------------------------------------------------------------------
-
-If a package wants to be notified of a missing module, it should
-simply implement a function called "handle_missing_module" that takes
-the name and the namespace of a module that's missing. This function
-should then add the right module (or modules) to the registry. This
-allows configuring some packages (like webservices) to be much less
-annoying.
-
diff --git a/doc/pep-0008.txt b/doc/pep-0008.txt
deleted file mode 100644
index 3e5ef28..0000000
--- a/doc/pep-0008.txt
+++ /dev/null
@@ -1,1009 +0,0 @@
-PEP: 8
-Title: Style Guide for Python Code
-Version: $Revision: cfd6d2cb1ca6 $
-Last-Modified: $Date: 2013/04/19 00:31:05 $
-Author: Guido van Rossum <guido at python.org>,
-        Barry Warsaw <barry at python.org>
-Status: Active
-Type: Process
-Content-Type: text/x-rst
-Created: 05-Jul-2001
-Post-History: 05-Jul-2001
-
-
-Introduction
-============
-
-This document gives coding conventions for the Python code comprising
-the standard library in the main Python distribution.  Please see the
-companion informational PEP describing style guidelines for the C code
-in the C implementation of Python [1]_.
-
-This document and PEP 257 (Docstring Conventions) were adapted from
-Guido's original Python Style Guide essay, with some additions from
-Barry's style guide [2]_.
-
-
-A Foolish Consistency is the Hobgoblin of Little Minds
-======================================================
-
-One of Guido's key insights is that code is read much more often than
-it is written.  The guidelines provided here are intended to improve
-the readability of code and make it consistent across the wide
-spectrum of Python code.  As PEP 20 says, "Readability counts".
-
-A style guide is about consistency.  Consistency with this style guide
-is important.  Consistency within a project is more important.
-Consistency within one module or function is most important.
-
-But most importantly: know when to be inconsistent -- sometimes the
-style guide just doesn't apply.  When in doubt, use your best
-judgment.  Look at other examples and decide what looks best.  And
-don't hesitate to ask!
-
-Two good reasons to break a particular rule:
-
-1. When applying the rule would make the code less readable, even for
-   someone who is used to reading code that follows the rules.
-
-2. To be consistent with surrounding code that also breaks it (maybe
-   for historic reasons) -- although this is also an opportunity to
-   clean up someone else's mess (in true XP style).
-
-
-Code lay-out
-============
-
-Indentation
------------
-
-Use 4 spaces per indentation level.
-
-For really old code that you don't want to mess up, you can continue
-to use 8-space tabs.
-
-Continuation lines should align wrapped elements either vertically
-using Python's implicit line joining inside parentheses, brackets and
-braces, or using a hanging indent.  When using a hanging indent the
-following considerations should be applied; there should be no
-arguments on the first line and further indentation should be used to
-clearly distinguish itself as a continuation line.
-
-Yes::
-
-    # Aligned with opening delimiter
-    foo = long_function_name(var_one, var_two,
-                             var_three, var_four)
-
-    # More indentation included to distinguish this from the rest.
-    def long_function_name(
-            var_one, var_two, var_three,
-            var_four):
-        print(var_one)
-
-No::
-
-    # Arguments on first line forbidden when not using vertical alignment
-    foo = long_function_name(var_one, var_two,
-        var_three, var_four)
-
-    # Further indentation required as indentation is not distinguishable
-    def long_function_name(
-        var_one, var_two, var_three,
-        var_four):
-        print(var_one)
-
-Optional::
-
-    # Extra indentation is not necessary.
-    foo = long_function_name(
-      var_one, var_two,
-      var_three, var_four)
-
-The closing brace/bracket/parenthesis on multi-line constructs may
-either line up under the last item of the list, as in::
-
-    my_list = [
-        1, 2, 3,
-        4, 5, 6,
-        ]
-    result = some_function_that_takes_arguments(
-        'a', 'b', 'c',
-        'd', 'e', 'f',
-        )
-
-or it may be lined up under the first character of the line that
-starts the multi-line construct, as in::
-
-    my_list = [
-        1, 2, 3,
-        4, 5, 6,
-    ]
-    result = some_function_that_takes_arguments(
-        'a', 'b', 'c',
-        'd', 'e', 'f',
-    )
-
-
-Tabs or Spaces?
----------------
-
-Never mix tabs and spaces.
-
-The most popular way of indenting Python is with spaces only.  The
-second-most popular way is with tabs only.  Code indented with a
-mixture of tabs and spaces should be converted to using spaces
-exclusively.  When invoking the Python command line interpreter with
-the ``-t`` option, it issues warnings about code that illegally mixes
-tabs and spaces.  When using ``-tt`` these warnings become errors.
-These options are highly recommended!
-
-For new projects, spaces-only are strongly recommended over tabs.
-Most editors have features that make this easy to do.
-
-Maximum Line Length
--------------------
-
-Limit all lines to a maximum of 79 characters.
-
-There are still many devices around that are limited to 80 character
-lines; plus, limiting windows to 80 characters makes it possible to
-have several windows side-by-side.  The default wrapping on such
-devices disrupts the visual structure of the code, making it more
-difficult to understand.  Therefore, please limit all lines to a
-maximum of 79 characters.  For flowing long blocks of text (docstrings
-or comments), limiting the length to 72 characters is recommended.
-
-The preferred way of wrapping long lines is by using Python's implied
-line continuation inside parentheses, brackets and braces.  Long lines
-can be broken over multiple lines by wrapping expressions in
-parentheses. These should be used in preference to using a backslash
-for line continuation.  Make sure to indent the continued line
-appropriately.  The preferred place to break around a binary operator
-is *after* the operator, not before it.  Some examples::
-
-    class Rectangle(Blob):
-
-        def __init__(self, width, height,
-                     color='black', emphasis=None, highlight=0):
-            if (width == 0 and height == 0 and
-                color == 'red' and emphasis == 'strong' or
-                highlight > 100):
-                raise ValueError("sorry, you lose")
-            if width == 0 and height == 0 and (color == 'red' or
-                                               emphasis is None):
-                raise ValueError("I don't think so -- values are %s, %s" %
-                                 (width, height))
-            Blob.__init__(self, width, height,
-                          color, emphasis, highlight)
-
-Blank Lines
------------
-
-Separate top-level function and class definitions with two blank
-lines.
-
-Method definitions inside a class are separated by a single blank
-line.
-
-Extra blank lines may be used (sparingly) to separate groups of
-related functions.  Blank lines may be omitted between a bunch of
-related one-liners (e.g. a set of dummy implementations).
-
-Use blank lines in functions, sparingly, to indicate logical sections.
-
-Python accepts the control-L (i.e. ^L) form feed character as
-whitespace; Many tools treat these characters as page separators, so
-you may use them to separate pages of related sections of your file.
-Note, some editors and web-based code viewers may not recognize
-control-L as a form feed and will show another glyph in its place.
-
-Encodings (PEP 263)
--------------------
-
-Code in the core Python distribution should always use the ASCII or
-Latin-1 encoding (a.k.a. ISO-8859-1).  For Python 3.0 and beyond,
-UTF-8 is preferred over Latin-1, see PEP 3120.
-
-Files using ASCII should not have a coding cookie.  Latin-1 (or UTF-8)
-should only be used when a comment or docstring needs to mention an
-author name that requires Latin-1; otherwise, using ``\x``, ``\u`` or
-``\U`` escapes is the preferred way to include non-ASCII data in
-string literals.
-
-For Python 3.0 and beyond, the following policy is prescribed for the
-standard library (see PEP 3131): All identifiers in the Python
-standard library MUST use ASCII-only identifiers, and SHOULD use
-English words wherever feasible (in many cases, abbreviations and
-technical terms are used which aren't English). In addition, string
-literals and comments must also be in ASCII. The only exceptions are
-(a) test cases testing the non-ASCII features, and
-(b) names of authors. Authors whose names are not based on the
-latin alphabet MUST provide a latin transliteration of their
-names.
-
-Open source projects with a global audience are encouraged to adopt a
-similar policy.
-
-
-Imports
--------
-
-- Imports should usually be on separate lines, e.g.::
-
-      Yes: import os
-           import sys
-
-      No:  import sys, os
-
-  It's okay to say this though::
-
-      from subprocess import Popen, PIPE
-
-- Imports are always put at the top of the file, just after any module
-  comments and docstrings, and before module globals and constants.
-
-  Imports should be grouped in the following order:
-
-  1. standard library imports
-  2. related third party imports
-  3. local application/library specific imports
-
-  You should put a blank line between each group of imports.
-
-  Put any relevant ``__all__`` specification after the imports.
-
-- Relative imports for intra-package imports are highly discouraged.
-  Always use the absolute package path for all imports.  Even now that
-  PEP 328 is fully implemented in Python 2.5, its style of explicit
-  relative imports is actively discouraged; absolute imports are more
-  portable and usually more readable.
-
-- When importing a class from a class-containing module, it's usually
-  okay to spell this::
-
-      from myclass import MyClass
-      from foo.bar.yourclass import YourClass
-
-  If this spelling causes local name clashes, then spell them ::
-
-      import myclass
-      import foo.bar.yourclass
-
-  and use "myclass.MyClass" and "foo.bar.yourclass.YourClass".
-
-
-Whitespace in Expressions and Statements
-========================================
-
-Pet Peeves
-----------
-
-Avoid extraneous whitespace in the following situations:
-
-- Immediately inside parentheses, brackets or braces. ::
-
-      Yes: spam(ham[1], {eggs: 2})
-      No:  spam( ham[ 1 ], { eggs: 2 } )
-
-- Immediately before a comma, semicolon, or colon::
-
-      Yes: if x == 4: print x, y; x, y = y, x
-      No:  if x == 4 : print x , y ; x , y = y , x
-
-- Immediately before the open parenthesis that starts the argument
-  list of a function call::
-
-      Yes: spam(1)
-      No:  spam (1)
-
-- Immediately before the open parenthesis that starts an indexing or
-  slicing::
-
-      Yes: dict['key'] = list[index]
-      No:  dict ['key'] = list [index]
-
-- More than one space around an assignment (or other) operator to
-  align it with another.
-
-  Yes::
-
-      x = 1
-      y = 2
-      long_variable = 3
-
-  No::
-
-      x             = 1
-      y             = 2
-      long_variable = 3
-
-
-Other Recommendations
----------------------
-
-- Always surround these binary operators with a single space on either
-  side: assignment (``=``), augmented assignment (``+=``, ``-=``
-  etc.), comparisons (``==``, ``<``, ``>``, ``!=``, ``<>``, ``<=``,
-  ``>=``, ``in``, ``not in``, ``is``, ``is not``), Booleans (``and``,
-  ``or``, ``not``).
-
-- If operators with different priorities are used, consider adding
-  whitespace around the operators with the lowest priority(ies). Use
-  your own judgement; however, never use more than one space, and
-  always have the same amount of whitespace on both sides of a binary
-  operator.
-
-  Yes::
-
-      i = i + 1
-      submitted += 1
-      x = x*2 - 1
-      hypot2 = x*x + y*y
-      c = (a+b) * (a-b)
-
-  No::
-
-      i=i+1
-      submitted +=1
-      x = x * 2 - 1
-      hypot2 = x * x + y * y
-      c = (a + b) * (a - b)
-
-- Don't use spaces around the ``=`` sign when used to indicate a
-  keyword argument or a default parameter value.
-
-  Yes::
-
-      def complex(real, imag=0.0):
-          return magic(r=real, i=imag)
-
-  No::
-
-      def complex(real, imag = 0.0):
-          return magic(r = real, i = imag)
-
-- Compound statements (multiple statements on the same line) are
-  generally discouraged.
-
-  Yes::
-
-      if foo == 'blah':
-          do_blah_thing()
-      do_one()
-      do_two()
-      do_three()
-
-  Rather not::
-
-      if foo == 'blah': do_blah_thing()
-      do_one(); do_two(); do_three()
-
-- While sometimes it's okay to put an if/for/while with a small body
-  on the same line, never do this for multi-clause statements.  Also
-  avoid folding such long lines!
-
-  Rather not::
-
-      if foo == 'blah': do_blah_thing()
-      for x in lst: total += x
-      while t < 10: t = delay()
-
-  Definitely not::
-
-      if foo == 'blah': do_blah_thing()
-      else: do_non_blah_thing()
-
-      try: something()
-      finally: cleanup()
-
-      do_one(); do_two(); do_three(long, argument,
-                                   list, like, this)
-
-      if foo == 'blah': one(); two(); three()
-
-Comments
-========
-
-Comments that contradict the code are worse than no comments.  Always
-make a priority of keeping the comments up-to-date when the code
-changes!
-
-Comments should be complete sentences.  If a comment is a phrase or
-sentence, its first word should be capitalized, unless it is an
-identifier that begins with a lower case letter (never alter the case
-of identifiers!).
-
-If a comment is short, the period at the end can be omitted.  Block
-comments generally consist of one or more paragraphs built out of
-complete sentences, and each sentence should end in a period.
-
-You should use two spaces after a sentence-ending period.
-
-When writing English, Strunk and White apply.
-
-Python coders from non-English speaking countries: please write your
-comments in English, unless you are 120% sure that the code will never
-be read by people who don't speak your language.
-
-Block Comments
---------------
-
-Block comments generally apply to some (or all) code that follows
-them, and are indented to the same level as that code.  Each line of a
-block comment starts with a ``#`` and a single space (unless it is
-indented text inside the comment).
-
-Paragraphs inside a block comment are separated by a line containing a
-single ``#``.
-
-Inline Comments
----------------
-
-Use inline comments sparingly.
-
-An inline comment is a comment on the same line as a statement.
-Inline comments should be separated by at least two spaces from the
-statement.  They should start with a # and a single space.
-
-Inline comments are unnecessary and in fact distracting if they state
-the obvious.  Don't do this::
-
-    x = x + 1                 # Increment x
-
-But sometimes, this is useful::
-
-    x = x + 1                 # Compensate for border
-
-Documentation Strings
----------------------
-
-Conventions for writing good documentation strings
-(a.k.a. "docstrings") are immortalized in PEP 257.
-
-- Write docstrings for all public modules, functions, classes, and
-  methods.  Docstrings are not necessary for non-public methods, but
-  you should have a comment that describes what the method does.  This
-  comment should appear after the ``def`` line.
-
-- PEP 257 describes good docstring conventions.  Note that most
-  importantly, the ``"""`` that ends a multiline docstring should be
-  on a line by itself, and preferably preceded by a blank line, e.g.::
-
-      """Return a foobang
-
-      Optional plotz says to frobnicate the bizbaz first.
-
-      """
-
-- For one liner docstrings, it's okay to keep the closing ``"""`` on
-  the same line.
-
-
-Version Bookkeeping
-===================
-
-If you have to have Subversion, CVS, or RCS crud in your source file,
-do it as follows. ::
-
-    __version__ = "$Revision: cfd6d2cb1ca6 $"
-    # $Source: C:\Users\Remi\Desktop\peps/pep-0008.txt,v $
-
-These lines should be included after the module's docstring, before
-any other code, separated by a blank line above and below.
-
-
-Naming Conventions
-==================
-
-The naming conventions of Python's library are a bit of a mess, so
-we'll never get this completely consistent -- nevertheless, here are
-the currently recommended naming standards.  New modules and packages
-(including third party frameworks) should be written to these
-standards, but where an existing library has a different style,
-internal consistency is preferred.
-
-Descriptive: Naming Styles
---------------------------
-
-There are a lot of different naming styles.  It helps to be able to
-recognize what naming style is being used, independently from what
-they are used for.
-
-The following naming styles are commonly distinguished:
-
-- ``b`` (single lowercase letter)
-- ``B`` (single uppercase letter)
-- ``lowercase``
-- ``lower_case_with_underscores``
-- ``UPPERCASE``
-- ``UPPER_CASE_WITH_UNDERSCORES``
-- ``CapitalizedWords`` (or CapWords, or CamelCase -- so named because
-  of the bumpy look of its letters [3]_).  This is also sometimes known
-  as StudlyCaps.
-
-  Note: When using abbreviations in CapWords, capitalize all the
-  letters of the abbreviation.  Thus HTTPServerError is better than
-  HttpServerError.
-- ``mixedCase`` (differs from CapitalizedWords by initial lowercase
-  character!)
-- ``Capitalized_Words_With_Underscores`` (ugly!)
-
-There's also the style of using a short unique prefix to group related
-names together.  This is not used much in Python, but it is mentioned
-for completeness.  For example, the ``os.stat()`` function returns a
-tuple whose items traditionally have names like ``st_mode``,
-``st_size``, ``st_mtime`` and so on.  (This is done to emphasize the
-correspondence with the fields of the POSIX system call struct, which
-helps programmers familiar with that.)
-
-The X11 library uses a leading X for all its public functions.  In
-Python, this style is generally deemed unnecessary because attribute
-and method names are prefixed with an object, and function names are
-prefixed with a module name.
-
-In addition, the following special forms using leading or trailing
-underscores are recognized (these can generally be combined with any
-case convention):
-
-- ``_single_leading_underscore``: weak "internal use" indicator.
-  E.g. ``from M import *`` does not import objects whose name starts
-  with an underscore.
-
-- ``single_trailing_underscore_``: used by convention to avoid
-  conflicts with Python keyword, e.g. ::
-
-      Tkinter.Toplevel(master, class_='ClassName')
-
-- ``__double_leading_underscore``: when naming a class attribute,
-  invokes name mangling (inside class FooBar, ``__boo`` becomes
-  ``_FooBar__boo``; see below).
-
-- ``__double_leading_and_trailing_underscore__``: "magic" objects or
-  attributes that live in user-controlled namespaces.
-  E.g. ``__init__``, ``__import__`` or ``__file__``.  Never invent
-  such names; only use them as documented.
-
-Prescriptive: Naming Conventions
---------------------------------
-
-Names to Avoid
-~~~~~~~~~~~~~~
-
-Never use the characters 'l' (lowercase letter el), 'O' (uppercase
-letter oh), or 'I' (uppercase letter eye) as single character variable
-names.
-
-In some fonts, these characters are indistinguishable from the
-numerals one and zero.  When tempted to use 'l', use 'L' instead.
-
-Package and Module Names
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Modules should have short, all-lowercase names.  Underscores can be
-used in the module name if it improves readability.  Python packages
-should also have short, all-lowercase names, although the use of
-underscores is discouraged.
-
-Since module names are mapped to file names, and some file systems are
-case insensitive and truncate long names, it is important that module
-names be chosen to be fairly short -- this won't be a problem on Unix,
-but it may be a problem when the code is transported to older Mac or
-Windows versions, or DOS.
-
-When an extension module written in C or C++ has an accompanying
-Python module that provides a higher level (e.g. more object oriented)
-interface, the C/C++ module has a leading underscore
-(e.g. ``_socket``).
-
-Class Names
-~~~~~~~~~~~
-
-Almost without exception, class names use the CapWords convention.
-Classes for internal use have a leading underscore in addition.
-
-Exception Names
-~~~~~~~~~~~~~~~
-
-Because exceptions should be classes, the class naming convention
-applies here.  However, you should use the suffix "Error" on your
-exception names (if the exception actually is an error).
-
-Global Variable Names
-~~~~~~~~~~~~~~~~~~~~~
-
-(Let's hope that these variables are meant for use inside one module
-only.)  The conventions are about the same as those for functions.
-
-Modules that are designed for use via ``from M import *`` should use
-the ``__all__`` mechanism to prevent exporting globals, or use the
-older convention of prefixing such globals with an underscore (which
-you might want to do to indicate these globals are "module
-non-public").
-
-Function Names
-~~~~~~~~~~~~~~
-
-Function names should be lowercase, with words separated by
-underscores as necessary to improve readability.
-
-mixedCase is allowed only in contexts where that's already the
-prevailing style (e.g. threading.py), to retain backwards
-compatibility.
-
-Function and method arguments
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Always use ``self`` for the first argument to instance methods.
-
-Always use ``cls`` for the first argument to class methods.
-
-If a function argument's name clashes with a reserved keyword, it is
-generally better to append a single trailing underscore rather than
-use an abbreviation or spelling corruption.  Thus ``class_`` is better
-than ``clss``.  (Perhaps better is to avoid such clashes by using a
-synonym.)
-
-Method Names and Instance Variables
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Use the function naming rules: lowercase with words separated by
-underscores as necessary to improve readability.
-
-Use one leading underscore only for non-public methods and instance
-variables.
-
-To avoid name clashes with subclasses, use two leading underscores to
-invoke Python's name mangling rules.
-
-Python mangles these names with the class name: if class Foo has an
-attribute named ``__a``, it cannot be accessed by ``Foo.__a``.  (An
-insistent user could still gain access by calling ``Foo._Foo__a``.)
-Generally, double leading underscores should be used only to avoid
-name conflicts with attributes in classes designed to be subclassed.
-
-Note: there is some controversy about the use of __names (see below).
-
-Constants
-~~~~~~~~~
-
-Constants are usually defined on a module level and written in all
-capital letters with underscores separating words.  Examples include
-``MAX_OVERFLOW`` and ``TOTAL``.
-
-Designing for inheritance
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Always decide whether a class's methods and instance variables
-(collectively: "attributes") should be public or non-public.  If in
-doubt, choose non-public; it's easier to make it public later than to
-make a public attribute non-public.
-
-Public attributes are those that you expect unrelated clients of your
-class to use, with your commitment to avoid backward incompatible
-changes.  Non-public attributes are those that are not intended to be
-used by third parties; you make no guarantees that non-public
-attributes won't change or even be removed.
-
-We don't use the term "private" here, since no attribute is really
-private in Python (without a generally unnecessary amount of work).
-
-Another category of attributes are those that are part of the
-"subclass API" (often called "protected" in other languages).  Some
-classes are designed to be inherited from, either to extend or modify
-aspects of the class's behavior.  When designing such a class, take
-care to make explicit decisions about which attributes are public,
-which are part of the subclass API, and which are truly only to be
-used by your base class.
-
-With this in mind, here are the Pythonic guidelines:
-
-- Public attributes should have no leading underscores.
-
-- If your public attribute name collides with a reserved keyword,
-  append a single trailing underscore to your attribute name.  This is
-  preferable to an abbreviation or corrupted spelling.  (However,
-  notwithstanding this rule, 'cls' is the preferred spelling for any
-  variable or argument which is known to be a class, especially the
-  first argument to a class method.)
-
-  Note 1: See the argument name recommendation above for class methods.
-
-- For simple public data attributes, it is best to expose just the
-  attribute name, without complicated accessor/mutator methods.  Keep
-  in mind that Python provides an easy path to future enhancement,
-  should you find that a simple data attribute needs to grow
-  functional behavior.  In that case, use properties to hide
-  functional implementation behind simple data attribute access
-  syntax.
-
-  Note 1: Properties only work on new-style classes.
-
-  Note 2: Try to keep the functional behavior side-effect free,
-  although side-effects such as caching are generally fine.
-
-  Note 3: Avoid using properties for computationally expensive
-  operations; the attribute notation makes the caller believe that
-  access is (relatively) cheap.
-
-- If your class is intended to be subclassed, and you have attributes
-  that you do not want subclasses to use, consider naming them with
-  double leading underscores and no trailing underscores.  This
-  invokes Python's name mangling algorithm, where the name of the
-  class is mangled into the attribute name.  This helps avoid
-  attribute name collisions should subclasses inadvertently contain
-  attributes with the same name.
-
-  Note 1: Note that only the simple class name is used in the mangled
-  name, so if a subclass chooses both the same class name and attribute
-  name, you can still get name collisions.
-
-  Note 2: Name mangling can make certain uses, such as debugging and
-  ``__getattr__()``, less convenient.  However the name mangling
-  algorithm is well documented and easy to perform manually.
-
-  Note 3: Not everyone likes name mangling.  Try to balance the
-  need to avoid accidental name clashes with potential use by
-  advanced callers.
-
-
-Programming Recommendations
-===========================
-
-- Code should be written in a way that does not disadvantage other
-  implementations of Python (PyPy, Jython, IronPython, Cython, Psyco,
-  and such).
-
-  For example, do not rely on CPython's efficient implementation of
-  in-place string concatenation for statements in the form ``a += b``
-  or ``a = a + b``.  Those statements run more slowly in Jython.  In
-  performance sensitive parts of the library, the ``''.join()`` form
-  should be used instead.  This will ensure that concatenation occurs
-  in linear time across various implementations.
-
-- Comparisons to singletons like None should always be done with
-  ``is`` or ``is not``, never the equality operators.
-
-  Also, beware of writing ``if x`` when you really mean ``if x is not
-  None`` -- e.g. when testing whether a variable or argument that
-  defaults to None was set to some other value.  The other value might
-  have a type (such as a container) that could be false in a boolean
-  context!
-
-- When implementing ordering operations with rich comparisons, it is
-  best to implement all six operations (``__eq__``, ``__ne__``,
-  ``__lt__``, ``__le__``, ``__gt__``, ``__ge__``) rather than relying
-  on other code to only exercise a particular comparison.
-
-  To minimize the effort involved, the ``functools.total_ordering()``
-  decorator provides a tool to generate missing comparison methods.
-
-  PEP 207 indicates that reflexivity rules *are* assumed by Python.
-  Thus, the interpreter may swap ``y > x`` with ``x < y``, ``y >= x``
-  with ``x <= y``, and may swap the arguments of ``x == y`` and ``x !=
-  y``.  The ``sort()`` and ``min()`` operations are guaranteed to use
-  the ``<`` operator and the ``max()`` function uses the ``>``
-  operator.  However, it is best to implement all six operations so
-  that confusion doesn't arise in other contexts.
-
-- Use class-based exceptions.
-
-  String exceptions in new code are forbidden, and this language
-  feature has been removed in Python 2.6.
-
-  Modules or packages should define their own domain-specific base
-  exception class, which should be subclassed from the built-in
-  Exception class.  Always include a class docstring.  E.g.::
-
-      class MessageError(Exception):
-          """Base class for errors in the email package."""
-
-  Class naming conventions apply here, although you should add the
-  suffix "Error" to your exception classes, if the exception is an
-  error.  Non-error exceptions need no special suffix.
-
-- When raising an exception, use ``raise ValueError('message')``
-  instead of the older form ``raise ValueError, 'message'``.
-
-  The paren-using form is preferred because when the exception
-  arguments are long or include string formatting, you don't need to
-  use line continuation characters thanks to the containing
-  parentheses.  The older form is not legal syntax in Python 3.
-
-- When catching exceptions, mention specific exceptions whenever
-  possible instead of using a bare ``except:`` clause.
-
-  For example, use::
-
-      try:
-          import platform_specific_module
-      except ImportError:
-          platform_specific_module = None
-
-  A bare ``except:`` clause will catch SystemExit and
-  KeyboardInterrupt exceptions, making it harder to interrupt a
-  program with Control-C, and can disguise other problems.  If you
-  want to catch all exceptions that signal program errors, use
-  ``except Exception:`` (bare except is equivalent to ``except
-  BaseException:``).
-
-  A good rule of thumb is to limit use of bare 'except' clauses to two
-  cases:
-
-  1. If the exception handler will be printing out or logging the
-     traceback; at least the user will be aware that an error has
-     occurred.
-
-  2. If the code needs to do some cleanup work, but then lets the
-     exception propagate upwards with ``raise``.  ``try...finally``
-     can be a better way to handle this case.
-
-- Additionally, for all try/except clauses, limit the ``try`` clause
-  to the absolute minimum amount of code necessary.  Again, this
-  avoids masking bugs.
-
-  Yes::
-
-      try:
-          value = collection[key]
-      except KeyError:
-          return key_not_found(key)
-      else:
-          return handle_value(value)
-
-  No::
-
-      try:
-          # Too broad!
-          return handle_value(collection[key])
-      except KeyError:
-          # Will also catch KeyError raised by handle_value()
-          return key_not_found(key)
-
-- Context managers should be invoked through separate functions or methods
-  whenever they do something other than acquire and release resources.
-  For example:
-
-  Yes::
-
-               with conn.begin_transaction():
-                   do_stuff_in_transaction(conn)
-
-  No::
-
-               with conn:
-                   do_stuff_in_transaction(conn)
-
-  The latter example doesn't provide any information to indicate that
-  the __enter__ and __exit__ methods are doing something other than
-  closing the connection after a transaction.  Being explicit is
-  important in this case.
-
-- Use string methods instead of the string module.
-
-  String methods are always much faster and share the same API with
-  unicode strings.  Override this rule if backward compatibility with
-  Pythons older than 2.0 is required.
-
-- Use ``''.startswith()`` and ``''.endswith()`` instead of string
-  slicing to check for prefixes or suffixes.
-
-  startswith() and endswith() are cleaner and less error prone.  For
-  example::
-
-      Yes: if foo.startswith('bar'):
-      No:  if foo[:3] == 'bar':
-
-  The exception is if your code must work with Python 1.5.2 (but let's
-  hope not!).
-
-- Object type comparisons should always use isinstance() instead of
-  comparing types directly. ::
-
-      Yes: if isinstance(obj, int):
-
-      No:  if type(obj) is type(1):
-
-  When checking if an object is a string, keep in mind that it might
-  be a unicode string too!  In Python 2.3, str and unicode have a
-  common base class, basestring, so you can do::
-
-      if isinstance(obj, basestring):
-
-- For sequences, (strings, lists, tuples), use the fact that empty
-  sequences are false. ::
-
-      Yes: if not seq:
-           if seq:
-
-      No: if len(seq)
-          if not len(seq)
-
-- Don't write string literals that rely on significant trailing
-  whitespace.  Such trailing whitespace is visually indistinguishable
-  and some editors (or more recently, reindent.py) will trim them.
-
-- Don't compare boolean values to True or False using ``==``. ::
-
-      Yes:   if greeting:
-      No:    if greeting == True:
-      Worse: if greeting is True:
-
-- The Python standard library will not use function annotations as
-  that would result in a premature commitment to a particular
-  annotation style.  Instead, the annotations are left for users to
-  discover and experiment with useful annotation styles.
-
-  Early core developer attempts to use function annotations revealed
-  inconsistent, ad-hoc annotation styles.  For example:
-
-  * ``[str]`` was ambiguous as to whether it represented a list of
-    strings or a value that could be either *str* or *None*.
-
-  * The notation ``open(file:(str,bytes))`` was used for a value that
-    could be either *bytes* or *str* rather than a 2-tuple containing
-    a *str* value followed by a *bytes* value.
-
-  * The annotation ``seek(whence:int)`` exhibited a mix of
-    over-specification and under-specification: *int* is too
-    restrictive (anything with ``__index__`` would be allowed) and it
-    is not restrictive enough (only the values 0, 1, and 2 are
-    allowed).  Likewise, the annotation ``write(b: bytes)`` was also
-    too restrictive (anything supporting the buffer protocol would be
-    allowed).
-
-  * Annotations such as ``read1(n: int=None)`` were self-contradictory
-    since *None* is not an *int*.  Annotations such as
-    ``source_path(self, fullname:str) -> object`` were confusing about
-    what the return type should be.
-
-  * In addition to the above, annotations were inconsistent in the use
-    of concrete types versus abstract types:  *int* versus *Integral*
-    and set/frozenset versus MutableSet/Set.
-
-  * Some annotations in the abstract base classes were incorrect
-    specifications.  For example, set-to-set operations require
-    *other* to be another instance of *Set* rather than just an
-    *Iterable*.
-
-  * A further issue was that annotations become part of the
-    specification but weren't being tested.
-
-  * In most cases, the docstrings already included the type
-    specifications and did so with greater clarity than the function
-    annotations.  In the remaining cases, the docstrings were improved
-    once the annotations were removed.
-
-  * The observed function annotations were too ad-hoc and inconsistent
-    to work with a coherent system of automatic type checking or
-    argument validation.  Leaving these annotations in the code would
-    have made it more difficult to make changes later so that
-    automated utilities could be supported.
-
-
-References
-==========
-
-.. [1] PEP 7, Style Guide for C Code, van Rossum
-
-.. [2] Barry's GNU Mailman style guide
-       http://barry.warsaw.us/software/STYLEGUIDE.txt
-
-.. [3] http://www.wikipedia.com/wiki/CamelCase
-
-
-Copyright
-=========
-
-This document has been placed in the public domain.
-
-
-

-..
-   Local Variables:
-   mode: indented-text
-   indent-tabs-mode: nil
-   sentence-end-double-space: t
-   fill-column: 70
-   coding: utf-8
-   End:
diff --git a/doc/pep-0257.txt b/doc/pep-0257.txt
deleted file mode 100644
index 58a1ec0..0000000
--- a/doc/pep-0257.txt
+++ /dev/null
@@ -1,328 +0,0 @@
-PEP: 257
-Title: Docstring Conventions
-Version: $Revision: e2b5d1a8a663 $
-Last-Modified: $Date: 2009/01/18 09:50:42 $
-Author: David Goodger <goodger at python.org>,
-        Guido van Rossum <guido at python.org>
-Discussions-To: doc-sig at python.org
-Status: Active
-Type: Informational
-Content-Type: text/x-rst
-Created: 29-May-2001
-Post-History: 13-Jun-2001
-
-
-Abstract
-========
-
-This PEP documents the semantics and conventions associated with
-Python docstrings.
-
-
-Rationale
-=========
-
-The aim of this PEP is to standardize the high-level structure of
-docstrings: what they should contain, and how to say it (without
-touching on any markup syntax within docstrings).  The PEP contains
-conventions, not laws or syntax.
-
-    "A universal convention supplies all of maintainability, clarity,
-    consistency, and a foundation for good programming habits too.
-    What it doesn't do is insist that you follow it against your will.
-    That's Python!"
-
-    -- Tim Peters on comp.lang.python, 2001-06-16
-
-If you violate these conventions, the worst you'll get is some dirty
-looks.  But some software (such as the Docutils_ docstring processing
-system [1]_ [2]_) will be aware of the conventions, so following them
-will get you the best results.
-
-
-Specification
-=============
-
-What is a Docstring?
---------------------
-
-A docstring is a string literal that occurs as the first statement in
-a module, function, class, or method definition.  Such a docstring
-becomes the ``__doc__`` special attribute of that object.
-
-All modules should normally have docstrings, and all functions and
-classes exported by a module should also have docstrings.  Public
-methods (including the ``__init__`` constructor) should also have
-docstrings.  A package may be documented in the module docstring of
-the ``__init__.py`` file in the package directory.
-
-String literals occurring elsewhere in Python code may also act as
-documentation.  They are not recognized by the Python bytecode
-compiler and are not accessible as runtime object attributes (i.e. not
-assigned to ``__doc__``), but two types of extra docstrings may be
-extracted by software tools:
-
-1. String literals occurring immediately after a simple assignment at
-   the top level of a module, class, or ``__init__`` method are called
-   "attribute docstrings".
-
-2. String literals occurring immediately after another docstring are
-   called "additional docstrings".
-
-Please see PEP 258, "Docutils Design Specification" [2]_, for a
-detailed description of attribute and additional docstrings.
-
-XXX Mention docstrings of 2.2 properties.
-
-For consistency, always use ``"""triple double quotes"""`` around
-docstrings.  Use ``r"""raw triple double quotes"""`` if you use any
-backslashes in your docstrings.  For Unicode docstrings, use
-``u"""Unicode triple-quoted strings"""``.
-
-There are two forms of docstrings: one-liners and multi-line
-docstrings.
-
-
-One-line Docstrings
---------------------
-
-One-liners are for really obvious cases.  They should really fit on
-one line.  For example::
-
-    def kos_root():
-        """Return the pathname of the KOS root directory."""
-        global _kos_root
-        if _kos_root: return _kos_root
-        ...
-
-Notes:
-
-- Triple quotes are used even though the string fits on one line.
-  This makes it easy to later expand it.
-
-- The closing quotes are on the same line as the opening quotes.  This
-  looks better for one-liners.
-
-- There's no blank line either before or after the docstring.
-
-- The docstring is a phrase ending in a period.  It prescribes the
-  function or method's effect as a command ("Do this", "Return that"),
-  not as a description; e.g. don't write "Returns the pathname ...".
-
-- The one-line docstring should NOT be a "signature" reiterating the
-  function/method parameters (which can be obtained by introspection).
-  Don't do::
-
-      def function(a, b):
-          """function(a, b) -> list"""
-
-  This type of docstring is only appropriate for C functions (such as
-  built-ins), where introspection is not possible.  However, the
-  nature of the *return value* cannot be determined by introspection,
-  so it should be mentioned.  The preferred form for such a docstring
-  would be something like::
-
-      def function(a, b):
-          """Do X and return a list."""
-
-  (Of course "Do X" should be replaced by a useful description!)
-
-
-Multi-line Docstrings
-----------------------
-
-Multi-line docstrings consist of a summary line just like a one-line
-docstring, followed by a blank line, followed by a more elaborate
-description.  The summary line may be used by automatic indexing
-tools; it is important that it fits on one line and is separated from
-the rest of the docstring by a blank line.  The summary line may be on
-the same line as the opening quotes or on the next line.  The entire
-docstring is indented the same as the quotes at its first line (see
-example below).
-
-Insert a blank line before and after all docstrings (one-line or
-multi-line) that document a class -- generally speaking, the class's
-methods are separated from each other by a single blank line, and the
-docstring needs to be offset from the first method by a blank line;
-for symmetry, put a blank line between the class header and the
-docstring.  Docstrings documenting functions or methods generally
-don't have this requirement, unless the function or method's body is
-written as a number of blank-line separated sections -- in this case,
-treat the docstring as another section, and precede it with a blank
-line.
-
-The docstring of a script (a stand-alone program) should be usable as
-its "usage" message, printed when the script is invoked with incorrect
-or missing arguments (or perhaps with a "-h" option, for "help").
-Such a docstring should document the script's function and command
-line syntax, environment variables, and files.  Usage messages can be
-fairly elaborate (several screens full) and should be sufficient for a
-new user to use the command properly, as well as a complete quick
-reference to all options and arguments for the sophisticated user.
-
-The docstring for a module should generally list the classes,
-exceptions and functions (and any other objects) that are exported by
-the module, with a one-line summary of each.  (These summaries
-generally give less detail than the summary line in the object's
-docstring.)  The docstring for a package (i.e., the docstring of the
-package's ``__init__.py`` module) should also list the modules and
-subpackages exported by the package.
-
-The docstring for a function or method should summarize its behavior
-and document its arguments, return value(s), side effects, exceptions
-raised, and restrictions on when it can be called (all if applicable).
-Optional arguments should be indicated.  It should be documented
-whether keyword arguments are part of the interface.
-
-The docstring for a class should summarize its behavior and list the
-public methods and instance variables.  If the class is intended to be
-subclassed, and has an additional interface for subclasses, this
-interface should be listed separately (in the docstring).  The class
-constructor should be documented in the docstring for its ``__init__``
-method.  Individual methods should be documented by their own
-docstring.
-
-If a class subclasses another class and its behavior is mostly
-inherited from that class, its docstring should mention this and
-summarize the differences.  Use the verb "override" to indicate that a
-subclass method replaces a superclass method and does not call the
-superclass method; use the verb "extend" to indicate that a subclass
-method calls the superclass method (in addition to its own behavior).
-
-*Do not* use the Emacs convention of mentioning the arguments of
-functions or methods in upper case in running text.  Python is case
-sensitive and the argument names can be used for keyword arguments, so
-the docstring should document the correct argument names.  It is best
-to list each argument on a separate line.  For example::
-
-    def complex(real=0.0, imag=0.0):
-        """Form a complex number.
-
-        Keyword arguments:
-        real -- the real part (default 0.0)
-        imag -- the imaginary part (default 0.0)
-
-        """
-        if imag == 0.0 and real == 0.0: return complex_zero
-        ...
-
-The BDFL [3]_ recommends inserting a blank line between the last
-paragraph in a multi-line docstring and its closing quotes, placing
-the closing quotes on a line by themselves.  This way, Emacs'
-``fill-paragraph`` command can be used on it.
-
-
-Handling Docstring Indentation
-------------------------------
-
-Docstring processing tools will strip a uniform amount of indentation
-from the second and further lines of the docstring, equal to the
-minimum indentation of all non-blank lines after the first line.  Any
-indentation in the first line of the docstring (i.e., up to the first
-newline) is insignificant and removed.  Relative indentation of later
-lines in the docstring is retained.  Blank lines should be removed
-from the beginning and end of the docstring.
-
-Since code is much more precise than words, here is an implementation
-of the algorithm::
-
-    def trim(docstring):
-        if not docstring:
-            return ''
-        # Convert tabs to spaces (following the normal Python rules)
-        # and split into a list of lines:
-        lines = docstring.expandtabs().splitlines()
-        # Determine minimum indentation (first line doesn't count):
-        indent = sys.maxint
-        for line in lines[1:]:
-            stripped = line.lstrip()
-            if stripped:
-                indent = min(indent, len(line) - len(stripped))
-        # Remove indentation (first line is special):
-        trimmed = [lines[0].strip()]
-        if indent < sys.maxint:
-            for line in lines[1:]:
-                trimmed.append(line[indent:].rstrip())
-        # Strip off trailing and leading blank lines:
-        while trimmed and not trimmed[-1]:
-            trimmed.pop()
-        while trimmed and not trimmed[0]:
-            trimmed.pop(0)
-        # Return a single string:
-        return '\n'.join(trimmed)
-
-The docstring in this example contains two newline characters and is
-therefore 3 lines long.  The first and last lines are blank::
-
-    def foo():
-        """
-        This is the second line of the docstring.
-        """
-
-To illustrate::
-
-    >>> print repr(foo.__doc__)
-    '\n    This is the second line of the docstring.\n    '
-    >>> foo.__doc__.splitlines()
-    ['', '    This is the second line of the docstring.', '    ']
-    >>> trim(foo.__doc__)
-    'This is the second line of the docstring.'
-
-Once trimmed, these docstrings are equivalent::
-
-    def foo():
-        """A multi-line
-        docstring.
-        """
-
-    def bar():
-        """
-        A multi-line
-        docstring.
-        """
-
-
-References and Footnotes
-========================
-
-.. [1] PEP 256, Docstring Processing System Framework, Goodger
-   (http://www.python.org/dev/peps/pep-0256/)
-
-.. [2] PEP 258, Docutils Design Specification, Goodger
-   (http://www.python.org/dev/peps/pep-0258/)
-
-.. [3] Guido van Rossum, Python's creator and Benevolent Dictator For
-   Life.
-
-.. _Docutils: http://docutils.sourceforge.net/
-
-.. _Python Style Guide:
-   http://www.python.org/doc/essays/styleguide.html
-
-.. _Doc-SIG: http://www.python.org/sigs/doc-sig/
-
-
-Copyright
-=========
-
-This document has been placed in the public domain.
-
-
-Acknowledgements
-================
-
-The "Specification" text comes mostly verbatim from the `Python Style
-Guide`_ essay by Guido van Rossum.
-
-This document borrows ideas from the archives of the Python Doc-SIG_.
-Thanks to all members past and present.
-
-
-

-..
-   Local Variables:
-   mode: indented-text
-   indent-tabs-mode: nil
-   fill-column: 70
-   sentence-end-double-space: t
-   End:
diff --git a/doc/signal_mess.txt b/doc/signal_mess.txt
deleted file mode 100644
index 543cbca..0000000
--- a/doc/signal_mess.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-This is my attempt to tame the current signal mess on VisTrails.
-
---------------------------------------------------------------------------------
-
-vistrailChanged is emitted by QViewManager.vistrailChanged
-		   	      QViewManager.closeVistrail
-		   	      VistrailController.invalidate_version_tree
-                              QVersionTab.vistrailChanged
-
-QVersionTab::vistrailChanged is caught by QViewManager.vistrailChanged
-
-VistrailController::vistrailChanged is caught by QVersionTab.vistrailChanged
-
-VistrailController::vistrailChanged is caught by QQueryTab.vistrailChanged
-
-QViewManager::vistrailChanged is caught by QBuilderWindow.vistrailChanged
-
-invalidate_version_tree 
-
---------------------------------------------------------------------------------
-
-stateChanged is emitted by VistrailController.setChanged
-	     		   VistrailController.setFileName
-
-VistrailController::stateChanged is caught by QVistrailView.stateChanged
-
---------------------------------------------------------------------------------
-
-versionSelectionChange is emitted by QViewManager.versionSelectionChange
-		       	  	     QViewManager.redo
-				     QViewManager.undo
-				     QViewManager.closeVistrail
-				     QViewManager.currentChanged
-				     QVersionTab.versionSelected
-
-QVersionTab::versionSelectionChange is caught by QVistrailView.versionSelectionChange
-
-QVersionTab::versionSelectionChange is caught by QViewManager.versionSelectionChange
-
-QViewManager::versionSelectionChange is caught by QBuilderWindow.versionSelectionChange
-
---------------------------------------------------------------------------------
-
-versionWasChanged is emitted by VistrailController.changeSelectedVersion
-		     	     	VistrailController.resendVersionWasChanged
-				VistrailController.setVersion
-
-VistrailController::versionWasChanged is caught by QPipelineTab.versionChanged
-
diff --git a/doc/source_tree_overview.tex b/doc/source_tree_overview.tex
deleted file mode 100644
index b41723a..0000000
--- a/doc/source_tree_overview.tex
+++ /dev/null
@@ -1,102 +0,0 @@
-% test
-
-\documentclass{article}
-
-\begin{document}
-
-\title{VisTrails Source Tree Overview}
-
-\author{VisTrails development team}
-
-\maketitle
-
-\abstract{This document is intended to provide an overview of the layout of the
-source tree of VisTrails, as presented by a Subversion checkout of
-trunk.}
-
-\section{Basic Directory layout}
-
-\begin{verbatim}
-./
-./dist/
-./examples/
-./examples/data/
-./extensions/
-./packages/
-./scripts/
-./vistrails/
-./vistrails/api/
-./vistrails/core/
-./vistrails/db/
-./vistrails/doc/
-./vistrails/gui/
-./vistrails/packages/
-./vistrails/tests/
-\end{verbatim}
-
-\section{Top-level directories}
-
-The main VisTrails application lives entirely in the vistrails
-subdirectory. All vistrail files with example functionality reside in
-the examples subdirectory, and any necessary data should go in
-examples/data. 
-
-The dist subdirectory includes code and documentation necessary to
-create VisTrails stand-alone distributions in several different
-operating systems (Linux, Windows, OS X, etc).
-
-Although originally developed as a stand-alone application, VisTrails
-has now been extended in many ways. These live, unsurprisingly, in the
-extensions directory. Currently, we have mediawiki and latex plugins,
-and a web interface for VisTrails. 
-
-Most VisTrails packages should be in the top-level packages
-subdirectory. The reason there exists two packages directories is so
-that we can conveniently select the set of packages that will be
-included in a standard VisTrails distribution. All these default
-packages should be in vistrails/packages. Notice that these packages
-will be included in distributions for different operating systems, so
-try to make sure necessary libraries are available, and that your code
-is portable.
-
-The scripts directory includes various scripts that help the
-administration of VisTrails source code, services and examples. 
-
-All documentation for VisTrails developers (including this file)
-reside on doc.
-
-\section{The vistrails directory}
-
-The VisTrails application source tree itself is loosely organized in
-different components that live in different directories. All the basic
-Python classes for modules, connections, workflows, etc live in
-vistrails/core. As a rule of thumb, the classes in the core component
-are agnostic to storage (handled by the db component) and have to user
-interface knowledge (handled by the gui component). This was
-originally intended in part to allow a separation of developers with
-Qt/PyQt4 licenses and developers without Qt/PyQt4 licenses.  The db
-component is fairly involved and uses a particular source layout
-intended to simplify the creation of new schemas and versions, as
-described in Section~\ref{sec:db}.
-
-As a general rule, all code that derives from PyQt4 classes should go
-in the vistrails/gui subdirectory. If that is not possible for some
-reason, such code should be clearly marked and documented.
-
-VisTrails can also be used as a library, and the api subdirectory
-includes several helper python functions and classes to access
-VisTrails functionality programmatically. If you intend to write code
-that will script VisTrails executions, or are using the VisTrails
-shell regularly and have a new function that will be handy in that
-scenario, the vistrails/api subdirectory is the correct place to put
-the code.
-
-The testing suite infrastructure lives in vistrails/tests. All the
-necessary files for the test cases, in particular, should be inside
-vistrails/tests/resources.
-
-\subsection{The vistrails/db directory}\label{sec:db}
-
-TBW.
-
-\end{document}
diff --git a/doc/usersguide/conf.py b/doc/usersguide/conf.py
index 6b951ca..4bb713d 100644
--- a/doc/usersguide/conf.py
+++ b/doc/usersguide/conf.py
@@ -45,9 +45,9 @@ copyright = u'2014, NYU Poly'
 # built documents.
 #
 # The short X.Y version.
-version = 'master'
+version = '2.2'
 # The full version, including alpha/beta/rc tags.
-release = '2.2'
+release = '2.2.4'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/doc/usersguide/developer.rst b/doc/usersguide/developer.rst
index 7589d4a..7d93a47 100644
--- a/doc/usersguide/developer.rst
+++ b/doc/usersguide/developer.rst
@@ -9,6 +9,7 @@ Developer's Guide
 
    packages
    batch
+   job_submission
    log
    controlflowdev
    parallelization
diff --git a/doc/usersguide/example.rst b/doc/usersguide/example.rst
index 9f7e6cd..69d4134 100644
--- a/doc/usersguide/example.rst
+++ b/doc/usersguide/example.rst
@@ -58,6 +58,7 @@ Intermediate Concepts and VisTrails Packages
    example_webservices
    example_itk
    persistent_archive
+   tej
    vistrails_server
    latex
    example_scikit_learn
diff --git a/doc/usersguide/figures/job_submission/job_monitor.png b/doc/usersguide/figures/job_submission/job_monitor.png
new file mode 100644
index 0000000..11c0458
Binary files /dev/null and b/doc/usersguide/figures/job_submission/job_monitor.png differ
diff --git a/doc/usersguide/figures/querying/query_vtkActor.png b/doc/usersguide/figures/querying/query_vtkActor.png
deleted file mode 100644
index 57da348..0000000
Binary files a/doc/usersguide/figures/querying/query_vtkActor.png and /dev/null differ
diff --git a/doc/usersguide/figures/querying/query_vtkActor90.png b/doc/usersguide/figures/querying/query_vtkActor90.png
deleted file mode 100644
index 12595e4..0000000
Binary files a/doc/usersguide/figures/querying/query_vtkActor90.png and /dev/null differ
diff --git a/doc/usersguide/figures/tej/pipeline.png b/doc/usersguide/figures/tej/pipeline.png
new file mode 100644
index 0000000..e779710
Binary files /dev/null and b/doc/usersguide/figures/tej/pipeline.png differ
diff --git a/doc/usersguide/job_submission.rst b/doc/usersguide/job_submission.rst
new file mode 100644
index 0000000..5ea2c9e
--- /dev/null
+++ b/doc/usersguide/job_submission.rst
@@ -0,0 +1,174 @@
+.. _chap-job_submission:
+
+**************
+Job Submission
+**************
+
+|vistrails| provides a mechanism for running external jobs. This is used for
+long-running executions and jobs that are run in parallel. These jobs are
+executed asynchronously in the background while the workflow execution suspends
+on the client side. The state of running jobs are persisted in the vistrail
+file, so that workflows with running jobs can be resumed even after restarting
+|vistrails|.
+
+To use the Job mechanism, it needs to be implemented by Modules. |vistrails|
+will then detect the jobs and handle it accordingly. Jobs are implemented either
+using :ref:`JobMixin <sec-jobmixin>` (recommended) or
+:ref:`raising ModuleSuspended directly <sec-modulesuspended>`.
+
+
+.. note:: To run the examples, first install the example package by copying it from `vistrails/tests/resources/myjob.py` to `~/.vistrails/userpackages` (:vtl:`Or run a workflow that does this automatically <jobsubmission1.vt>`)
+
+.. _sec-monitoring_jobs:
+
+Monitoring Jobs
+===============
+
+Jobs are tracked by the Job Monitor when started from the VisTrails GUI. It
+keeps track of all jobs and enables you to:
+
+* Check jobs - Checks if the job has completed through the handle mechanism, either the selected workflow/module or all.
+* Pause jobs - A paused workflow will not be checked by the timer or `Check All` button.
+* View standard output/error for running jobs - If implemented by the handle.
+* Delete running workflows/modules.
+* Set time interval for automatic job checking.
+* Set flag for waiting for job to finish (Automatic job execution).
+
+.. _fig-list_job-monitor:
+
+.. figure:: figures/job_submission/job_monitor.png
+   :align: center
+   :width: 7in
+
+   The Job Monitor with one running and one finished workflow.
+
+.. _sec-handle:
+
+Job Handles
+===========
+
+A handle is used by the the Job Monitor to poll the job. This is a
+class instance with a `finished()` method that knows how to check the job.
+Below is an example with a simple time condition.
+
+.. code-block:: python
+
+   class TimedJobMonitor(object):
+       """ Example that will complete when the specified time have passed
+
+       """
+       def __init__(self, start_time, how_long=10):
+           self.start_time = start_time
+           self.how_long = how_long
+
+       def finished(self):
+           return (time.time()-self.start_time) > self.how_long
+
+
+.. _sec-modulesuspended:
+
+Using ModuleSuspended
+=====================
+
+`ModuleSuspended` (found in `vistrails.core.modules.vistrails_module`) is a low-level
+method to use the job mechanism. It is mainly used as a simple method to suspend
+`PythonSource`s`. (The preferred way is to use :ref:`JobMixin <sec-jobmixin>`). Raising
+`ModuleSuspended` will detach the job execution and suspend that branch of the workflow.
+
+A Module that implements a job needs to:
+
+* Check if the job is already running and if not, start it.
+* Check if the job has completed, and raise `ModuleSuspended` if it has not.
+
+Raising `ModuleSuspended` will suspend the module execution (unless a flag is set
+to wait for each job to finish). Other workflow branches will continue to be executed
+until all branches are either suspended or completed, until finally the workflow stops
+execution and enter a suspended state.
+
+ModuleSuspended takes a :ref:`handle <sec-handle>` that is used to check the job. Below
+is an example using the TimedJobMonitor above. (:vtl:`Open in vistrails <jobsubmission2.vt>`)
+
+
+.. code-block:: python
+
+    handle = TimedJobMonitor(start_time)
+    if not handle.finished():
+        raise ModuleSuspended(self, 'Time interval not reached yet.', handle)
+
+.. warning::
+
+   The drawback with this method is that the upstream of the suspended modules will be
+   executed each time the workflow is resumed. So make sure the upstream can be executed
+   multiple times without creating a new job each time.
+
+
+.. _sec-jobmixin:
+
+Using JobMixin
+==============
+
+`JobMixin` (in `vistrails.core.vistrails.job`) is the preferred method to create job modules.
+It exposes a set of methods to implement that is needed to handle the job. One advantage of `JobMixin`
+is that it will resume jobs without re-executing the upstream of the module, as opposed to
+`ModuleSuspended`. This means the upstream will only be executed once for each job. Below is an
+example from the package `MyJobs` (vistrails.packages.myjob). (:vtl:`Open in vistrails <jobsubmission3.vt>`)
+
+.. code-block:: python
+
+    class TimedJob(JobMixin, Module):
+        """ A module that suspends until 'how_long' seconds have passed
+
+        """
+        _input_ports = [IPort("how_long", "basic:Integer", default=10)]
+        _output_ports = [OPort("finished", "basic:Boolean")]
+
+        def job_read_inputs(self):
+            """ Implemented by modules to read job parameters from input ports.
+
+            Returns the `params` dictionary used by subsequent methods.
+            """
+            return {'how_long': self.force_get_input('how_long') or 10}
+
+        def job_start(self, params):
+            """ Implemented by modules to submit the job.
+
+            Gets the `params` dictionary and returns a new dictionary, for example
+            with additional info necessary to check the status later.
+            """
+
+            # this example gets the current time and stores it
+            # this time represents the information necessary to check the status of the job
+
+            params['start_time'] = time.time()
+            return params
+
+        def job_finish(self, params):
+            """ Implemented by modules to get info from the finished job.
+
+            This is called once the job is finished to get the results. These can
+            be added to the `params` dictionary that this method returns.
+
+            This is the right place to clean up the job from the server if they are
+            not supposed to persist.
+            """
+            return params
+
+        def job_set_results(self, params):
+            """ Implemented by modules to set the output ports.
+
+            This is called after job_finished() or after getting the cached results
+            to set the output ports on this module, from the `params` dictionary.
+            """
+            self.set_output('finished', True)
+
+        def job_get_handle(self, params):
+            """ Implemented by modules to return the JobHandle object.
+
+            This returns an object following the JobHandle interface. The
+            JobMonitor will use it to check the status of the job and call back
+            this module once the job is done.
+
+            JobHandle needs the following method:
+              * finished(): returns True if the job is finished
+            """
+            return TimedJobMonitor(params['start_time'], params['how_long'])
diff --git a/doc/usersguide/latex.rst b/doc/usersguide/latex.rst
index 5667470..cac8c05 100644
--- a/doc/usersguide/latex.rst
+++ b/doc/usersguide/latex.rst
@@ -17,7 +17,7 @@ To use the Latex extension, copy vistrails.sty and includevistrail.py from the e
 ``\usepackage{vistrails}``
 
 By default, VisTrails will be executed at www.vistrails.org and the images
-downloaded to your hard drive. This allows any user that downlods your paper to execute the workflows on the server. 
+downloaded to your hard drive. This allows any user that downlods your paper to execute the workflows on the server.
 
 Local Setup
 ^^^^^^^^^^^
@@ -26,7 +26,7 @@ If you want to run a local copy of VisTrails instead, add the following path to
 
 ``\renewcommand{\vistrailspath}{/path/to/vistrails/run.py}``
 
-Depending on how you are running VisTrails and on which OS you are running, the \vistrailspath should be configured appropriately. Please check head.tex in VisTrails' extensions/latex directory for detailed instructions on the configuration for the different platforms. 
+Depending on how you are running VisTrails and on which OS you are running, the \vistrailspath should be configured appropriately. Please check head.tex in VisTrails' extensions/latex directory for detailed instructions on the configuration for the different platforms.
 
 By default, images are set up to link to their corresponding vistrail. This means that on a local setup, clicking on an image will open the local .vt file or will try to connect to the database if you loaded the vistrail from a database. This may not work when other users click on the images on different machines. However, if you are using your own web server, additional setup is required (see :ref:`sec-latex-setup-using-a-web-server`).  Otherwise, to setup the images without links (not  [...]
 
@@ -46,7 +46,7 @@ Setup For Use With Files on MediaWiki or a Web Server
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 .. index:
-   pair: latex embedding; mediawiki 
+   pair: latex embedding; mediawiki
    pair: latex embedding; web server
 
 Many VisTrails files and/or data are stored in a database that readers
@@ -61,7 +61,7 @@ To setup your MediaWiki for use with VisTrails:
 
 * In your wiki/extensions folder, create a config.php file based on the config.php.sample file located in VisTrails' extensions/http folder.
 * Copy download.php, functions.php, and vistrailsExtension.php from the extensions/mediawiki folder to your wiki/extentions folder and update these files according to your needs.
-* Configure your .tex files with: 
+* Configure your .tex files with:
 
   ``\renewcommand{\vistrailsdownload}{http://yourwebserver.somethingelse/download.php}``
 
@@ -91,7 +91,7 @@ There are two ways of including VisTrails' objects in a Latex file. Usually you
 * In ``History`` view, select the version node representing the workflow.
 * In ``Pipeline`` view, ensure that the workflow is being displayed.
 
-Now you can select ``Publish`` :math:`\rightarrow` ``To Paper...`` to launch a dialog with embedding options (see Figure :ref:`fig-configure-embedding`).  
+Now you can select ``Publish`` :math:`\rightarrow` ``To Paper...`` to launch a dialog with embedding options (see Figure :ref:`fig-configure-embedding`).
 
 .. _fig-configure-embedding:
 
@@ -107,20 +107,20 @@ Then perform the following steps:
 * Make sure that ``Latex`` is displayed in the ``In:`` combobox.
 * You should then choose from a number of "Embed" and "Download" options which will be explained in the tables below.
 * Press the "Copy to Clipboard" button
-* Paste clipboard contents into you Latex document 
+* Paste clipboard contents into you Latex document
 * Run pdflatex with the -shell-escape option: ``pdflatex -shell-escape example.tex``.
 
 **Note on using local VisTrails files:** Relative or absolute filenames can be used in the .tex file, but absolute filenames are used in the pdf.  Thus, if the absolute location of the file has changed, the pdf will need to be regenerated even if the relative location of the file has not changed.  Also, the VisTrails ``Embed`` function assumes the .vt file is in the same directory as the .tex file.  You will need to change this to an absolute filename if it is not.
 
 .. tabularcolumns:: |p{2.8cm}|p{3.0cm}|p{7.5cm}|
-   
+
 .. _table-options:
 
 .. only:: html
 
    **Configuration Options**
 
-   +-----------------------+-----------------------+--------------------------------------------------------------------------+ 
+   +-----------------------+-----------------------+--------------------------------------------------------------------------+
    | Option                | Latex Flag            | Description                                                              |
    +=======================+=======================+==========================================================================+
    | | Workflow Results    | version=<...>         | Show the results of the specified version.                               |
@@ -133,7 +133,7 @@ Then perform the following steps:
 
    **Embed Options**
 
-   +-----------------------+-----------------------+--------------------------------------------------------------------------+ 
+   +-----------------------+-----------------------+--------------------------------------------------------------------------+
    | Option                | Latex Flag            | Description                                                              |
    +=======================+=======================+==========================================================================+
    | As PDF                | | pdf                 | | Include images as pdf files. If this is not checked, a png image is    |
@@ -153,7 +153,7 @@ Then perform the following steps:
 
    **Download Options**
 
-   +-----------------------+-----------------------+--------------------------------------------------------------------------+ 
+   +-----------------------+-----------------------+--------------------------------------------------------------------------+
    | Option                | Latex Flag            | Description                                                              |
    +=======================+=======================+==========================================================================+
    | | Include Workflow    | embedworkflow         | When clicking on the image in the pdf, download the workflow only.       |
@@ -170,7 +170,7 @@ Then perform the following steps:
 .. only:: latex
 
    .. tabularcolumns:: |p{2.8cm}|p{3.0cm}|p{7.5cm}|
-   
+
    .. csv-table:: Configuration Options
       :header: **Option**, **Latex Flag**, **Description**
 
@@ -212,11 +212,11 @@ Example
 
 The following is an example command for including the execution results the workflow ``aliases`` from examples/head.vt in a pdf and caching the images. When clicking on the images, the user will start |vistrails| showing only the spreadsheet:
 
-| ``\vistrails[filename=head.vt,``
+| ``\vistrail[filename=head.vt,``
 | ``version=15,``
-| ``pdf,`` 
+| ``pdf,``
 | ``execute,``
-| ``showspreadsheetonly,`` 
+| ``showspreadsheetonly,``
 | ``]{width=0.45\linewidth} %Options you would give to the \includegraphics{} command``.
 
 See head.tex in the extensions/latex directory for a complete example of usage.
@@ -224,17 +224,17 @@ See head.tex in the extensions/latex directory for a complete example of usage.
 Additional Notes
 ^^^^^^^^^^^^^^^^
 
-After running at least once, VisTrails will cache the images and latex 
-instructions.  The latex code will be in the "cached" folder and the images in 
+After running at least once, VisTrails will cache the images and latex
+instructions.  The latex code will be in the "cached" folder and the images in
 vistrails_images.
 
-Vistrails will create in the current directory a directory called 
+Vistrails will create in the current directory a directory called
 vistrails_images/filename_version_options with the png/pdf files generated by the spreadsheet.
 
 Including crowdlabs.org workflow results in Latex
 =================================================
 
-It is also possible to embed results of workflows that are in www.crowdlabs.org. 
+It is also possible to embed results of workflows that are in www.crowdlabs.org.
 
 To use the crowdLabs extension, copy crowdlabs.sty and includecrowdlabs.py from the extensions/latex directory to the same directory as your .tex files.  Then, add the following line to the beginning of the latex file:
 
@@ -253,8 +253,3 @@ And click on the ``Embed this Workflow`` tab located below the image. Copy the s
 And paste it in the latex file.
 
 Currently crowdLabs supports only embedding workflow results in the png format. Do not use this extension together with the vistrails extension above.
-
-
- 
-
-
diff --git a/doc/usersguide/querying.rst b/doc/usersguide/querying.rst
index 53021bf..16a949b 100644
--- a/doc/usersguide/querying.rst
+++ b/doc/usersguide/querying.rst
@@ -100,28 +100,9 @@ Note that Query by Example provides the capability to iteratively
 refine searches by adding more criteria.  For example, if you were
 interested in workflows that contain a certain module, you may find that
 such a query returns too many results.  You could then refine the query
-to find only those workflows where the given module has a parameter
-setting that falls within a given range.
-This is done by specifying parameter values in the ``Methods`` panel on the right side of the window.
-One major difference between the ``Pipeline`` view and the ``Search`` view is that you can use comparison operations, such as '<' and '>', in parameter values. The following example illustrates this.
-
-.. topic:: Try it now!
-
-   Open the :vtl:`terminator.vt` example file, and enter ``Search`` mode. Drag the ``vtkActor`` module from the Modules panel onto the Search canvas. ``Execute`` the query, and see which versions of the workflow contain a ``vtkActor`` module. Select ``Back to Search`` to return to the ``Search`` view, select the ``vtkActor`` module, then select ``RotateZ`` method from the ``Module Information`` tab. In the ``RotateZ`` text field, select ``'>'`` and then enter '90'. When you ``Execute`` t [...]
-
-.. _fig-querying-vtkActor_example:
-
-.. figure:: figures/querying/query_vtkActor.png
-   :width: 3in
-   :align: center
-
-   Query result showing all workflows in the "terminator.vt" example that contain the module ``vtkActor``.
-
-.. figure:: figures/querying/query_vtkActor90.png
-   :width: 3in
-   :align: center
-
-   The same query refined to show only those workflows whose ``RotateZ`` value is greater than 90.
+to find only those workflows where the given module has a parameter with
+a specific value. This is done by specifying parameter values in the
+``Inputs`` panel on the right side of the window.
 
 Textual Queries
 ===============
@@ -151,6 +132,8 @@ To execute a query, simply press the 'Enter' key after typing your query.
    User name       ``user:`` *user name*
    Annotation      ``notes:`` *phrase*
    Tag             ``name:`` *version tag*
+   Any             ``any:`` match user/notes/name (the default)
+   Module          ``module:`` *module name*
    Date            ``before:`` *date* ``|`` *relative time*
    \               ``after:`` *date* ``|`` *relative time*
    ==============  ================================================================
diff --git a/doc/usersguide/tej.rst b/doc/usersguide/tej.rst
new file mode 100644
index 0000000..a3f9a9a
--- /dev/null
+++ b/doc/usersguide/tej.rst
@@ -0,0 +1,87 @@
+.. _chap-tej:
+
+***********************************
+Running commands on a remote server
+***********************************
+
+The ``tej`` tool provides a way to start job on any remote server through SSH, associate it with an identifier, and monitor its status. When the job is complete, it can download the resulting files through SCP.
+
+In VisTrails, the subpipeline's signature is used as the job identifier. This means that once you have run your pipeline one and the job has been submitted, running it again will match it to the existing job, and will either wait for the job to complete or download the existing results without running it again.
+
+Referencing a queue
+===================
+
+The first thing you need to do is setup a ``Queue`` module that indicates which server to connect to (and optionally, where on the filesystem should the jobs be stored).
+
+No setup is required on the server (though VisTrails/tej needs to be able to connect to it via SSH, so you might want to setup public key authentication), the directory will be created on the server with the necessary structure and helpers.
+
+Submitting a job
+================
+
+The ``SubmitJob`` module upload a job to a server if it doesn't exist there already (checking for the same subpipeline) and returns a Job object suitable for downloading its results. Regardless of whether the job is created or it already existed, VisTrails will wait for it to complete before carrying on executing your workflow; if you click "cancel" however, it will add the job to the job monitor and keep tabs on the server, alerting you when the job is done so you can resume executing t [...]
+
+The job is simply a directory that will be uploaded to the server, with a start.sh script that will be executed there (or whatever name is set on the ``script`` input port). Remember to use relative paths in there so that different jobs don't overwrite their files.
+
+A different module, ``SubmitShellJob``, makes it easy to submit a job consisting of a single shell script that you can enter directory in the module configuration window. Its output (stdout, stderr) is downloaded and returned as files on the corresponding output ports.
+
+Downloading output files
+========================
+
+You can connect SubmitJob's output to ``DownloadFile`` modules to retrieve generated files from the server and use them in the following steps of your pipeline. The module only needs a ``filename`` parameter, which is relative to the job's directory. The ``DownloadDirectory`` module works in the same way but downloads a whole subdirectory recursively.
+
+Example
+=======
+
+In this example, we'll submit a simple Python script to a server via SSH. That script searches for the largest prime factor of a given number and prints it to the console.
+
+..  topic:: Try it Now!
+
+    First, create the Python script. You can use the ``String`` module, entering the script in the configuration widgets; connect it to a ``WriteFile`` module to get a file suitable for uploading.
+
+    ::
+
+        #!/usr/bin/env python
+        with open('input') as fp:
+            number = int(fp.read().strip())
+
+        largest = None
+        n = 2
+        while n <= number:
+            while number % n == 0:
+                number /= n
+            if number == 1:
+                largest = n
+                break
+            n += 1
+
+        with open('output', 'w') as fp:
+            if largest is not None:
+                fp.write("%d" % largest)
+
+    As you can see, this script reads the target number from a file, ``input``, and writes the result to another file, ``output``. You can create the ``input`` file from an Integer using the ``StringFormat`` module (setting the `format` to ``{target}`` for example).
+
+    Add a ``DownloadFile`` module to download ``output`` and print the file with ``StandardOutput`` for example.
+
+    The end result should look like this :vtl:`(or open it from here) <tej-primes.vt>`:
+
+..  figure:: figures/tej/pipeline.png
+    :align: center
+
+Running it will start the job on the server. The job monitor window will pop up to indicate that it knows about the remote job, and that it is currently running. Clicking the "check" button or re-running the workflow will update the status, and eventually run the rest of the pipeline when the job is done, displaying the result.
+
+Because the job identifier is computed from the signature of the subpipeline consisting of ``SubmitJob`` and its upstream modules, anyone running the same job on the same server will hit the same job, and will reuse your results without triggering a recomputation. But if you change the script, or choose a different target number to factorize, a new job will be submitted, that will not affect the result seen by other users and other workflows.
+
+Setting up ssh keys
+===================
+
+tej requires the servers ssh key to be registered in ``known_hosts`` in a format supported by Paramiko.
+
+If the key is missing, or in the wrong format, you will see something like::
+
+    paramiko.SSHException: Unknown server 127.0.0.1
+
+The easiest way to add the key is to connect with ssh and accept the prompt ("Are you sure you want to continue connecting?"); ssh will add the server to the known hosts automatically and you can disconnect.
+
+If this does not work, the key used by SSH is probably in a format not supported by Paramiko (like ECDSA). To force using the RSA key (from `here <http://askubuntu.com/questions/133172/how-can-i-force-ssh-to-give-an-rsa-key-instead-of-ecdsa>`__)::
+
+    ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user at yourserver.com
diff --git a/doc/usersguide/vtl/jobsubmission1.vtl b/doc/usersguide/vtl/jobsubmission1.vtl
new file mode 100644
index 0000000..205b7ff
--- /dev/null
+++ b/doc/usersguide/vtl/jobsubmission1.vtl
@@ -0,0 +1 @@
+<vtlink filename="@examples/usersguide/job_submission.vt" version="InstallJobPackage"/>
diff --git a/doc/usersguide/vtl/jobsubmission2.vtl b/doc/usersguide/vtl/jobsubmission2.vtl
new file mode 100644
index 0000000..545596f
--- /dev/null
+++ b/doc/usersguide/vtl/jobsubmission2.vtl
@@ -0,0 +1 @@
+<vtlink filename="@examples/usersguide/job_submission.vt" version="TimedModuleSuspended"/>
diff --git a/doc/usersguide/vtl/jobsubmission3.vtl b/doc/usersguide/vtl/jobsubmission3.vtl
new file mode 100644
index 0000000..a0152a2
--- /dev/null
+++ b/doc/usersguide/vtl/jobsubmission3.vtl
@@ -0,0 +1 @@
+<vtlink filename="@examples/usersguide/job_submission.vt" version="TimedJobMixin"/>
diff --git a/doc/usersguide/vtl/mashups1.vtl b/doc/usersguide/vtl/mashups1.vtl
index 6a243f1..dd65f68 100644
--- a/doc/usersguide/vtl/mashups1.vtl
+++ b/doc/usersguide/vtl/mashups1.vtl
@@ -1 +1 @@
-<vtlink filename="@examples/usersguide/mashups.vt" mashuptrail="9e7148ee-2518-11e3-b863-3c07543dba07" mashupVersion="5"/>
+<vtlink filename="@examples/usersguide/mashups.vt" mashuptrail="c4634bf4-305d-11e5-b576-000c2960b7d8" mashupVersion="5"/>
diff --git a/doc/usersguide/vtl/tej-primes.vtl b/doc/usersguide/vtl/tej-primes.vtl
new file mode 100644
index 0000000..85f1cee
--- /dev/null
+++ b/doc/usersguide/vtl/tej-primes.vtl
@@ -0,0 +1 @@
+<vtlink filename="@examples/tej-primes.vt"/>
diff --git a/examples/api/ipython-notebook.ipynb b/examples/api/ipython-notebook.ipynb
index abedcc1..ed02267 100644
--- a/examples/api/ipython-notebook.ipynb
+++ b/examples/api/ipython-notebook.ipynb
@@ -60,6 +60,24 @@
      ]
     },
     {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "vt.ipython_mode(True)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 4
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "This explicitely requests IPythonMode to be enabled on output modules, so that pipeline executions will put results on the notebook (similarly to `%matplotlib inline` for matplotlib plots)."
+     ]
+    },
+    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
@@ -77,7 +95,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 4
+     "prompt_number": 5
     },
     {
      "cell_type": "markdown",
@@ -130,13 +148,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 5,
+       "prompt_number": 6,
        "text": [
         "<Vistrail: simplemath.vt, version -1, not changed>"
        ]
       }
      ],
-     "prompt_number": 5
+     "prompt_number": 6
     },
     {
      "cell_type": "code",
@@ -147,7 +165,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 6
+     "prompt_number": 7
     },
     {
      "cell_type": "code",
@@ -191,13 +209,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 7,
+       "prompt_number": 8,
        "text": [
-        "<Vistrail: simplemath.vt, version 28, not changed>"
+        "<Vistrail: simplemath.vt, version 37, not changed>"
        ]
       }
      ],
-     "prompt_number": 7
+     "prompt_number": 8
     },
     {
      "cell_type": "code",
@@ -233,13 +251,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 8,
+       "prompt_number": 9,
        "text": [
         "<Pipeline: 1 modules, 0 connections>"
        ]
       }
      ],
-     "prompt_number": 8
+     "prompt_number": 9
     },
     {
      "cell_type": "markdown",
@@ -265,13 +283,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 9,
+       "prompt_number": 10,
        "text": [
         "<Package: org.vistrails.vistrails.tabledata, 23 modules>"
        ]
       }
      ],
-     "prompt_number": 9
+     "prompt_number": 10
     },
     {
      "cell_type": "markdown",
@@ -294,13 +312,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 10,
+       "prompt_number": 11,
        "text": [
         "<Namespace convert of package org.vistrails.vistrails.tabledata>"
        ]
       }
      ],
-     "prompt_number": 10
+     "prompt_number": 11
     },
     {
      "cell_type": "code",
@@ -317,7 +335,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 11
+     "prompt_number": 12
     },
     {
      "cell_type": "code",
@@ -331,13 +349,14 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 12,
+       "prompt_number": 13,
        "text": [
-        "(vistrails.core.api.BuildTable, vistrails.core.api.BuildTable)"
+        "(<Module class 'BuildTable' from org.vistrails.vistrails.tabledata>,\n",
+        " <Module class 'BuildTable' from org.vistrails.vistrails.tabledata>)"
        ]
       }
      ],
-     "prompt_number": 12
+     "prompt_number": 13
     },
     {
      "cell_type": "code",
@@ -351,20 +370,14 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 13,
+       "prompt_number": 14,
        "text": [
-        "(vistrails.core.api.CSVFile, vistrails.core.api.CSVFile)"
+        "(<Module class 'CSVFile' from org.vistrails.vistrails.tabledata>,\n",
+        " <Module class 'CSVFile' from org.vistrails.vistrails.tabledata>)"
        ]
       }
      ],
-     "prompt_number": 13
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "(note: [IPython bug 6709](https://github.com/ipython/ipython/issues/6709) causes the '`vistrails.core.api.`' prefixes above)"
-     ]
+     "prompt_number": 14
     },
     {
      "cell_type": "markdown",
@@ -447,13 +460,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 14,
+       "prompt_number": 15,
        "text": [
         "<Vistrail: outputs.vt, version 1, not changed>"
        ]
       }
      ],
-     "prompt_number": 14
+     "prompt_number": 15
     },
     {
      "cell_type": "code",
@@ -475,18 +488,18 @@
        "stream": "stderr",
        "text": [
         "Traceback (most recent call last):\n",
-        "  File \"<ipython-input-15-979bf6416e43>\", line 3, in <module>\n",
+        "  File \"<ipython-input-16-979bf6416e43>\", line 3, in <module>\n",
         "    result = outputs.execute()\n",
-        "  File \"C:\\programmation\\vistrails\\dat\\vistrails\\examples\\api\\../..\\vistrails\\core\\api.py\", line 243, in execute\n",
+        "  File \"/home/remram/Documents/programming/dat/vistrails/examples/api/../../vistrails/core/api.py\", line 259, in execute\n",
         "    return self.current_pipeline.execute(*args, **kwargs)\n",
-        "  File \"C:\\programmation\\vistrails\\dat\\vistrails\\examples\\api\\../..\\vistrails\\core\\api.py\", line 462, in execute\n",
+        "  File \"/home/remram/Documents/programming/dat/vistrails/examples/api/../../vistrails/core/api.py\", line 482, in execute\n",
         "    raise ExecutionErrors(self, result)\n",
         "ExecutionErrors: Pipeline execution failed: 1 error:\n",
         "0: Missing value from port value\n"
        ]
       }
      ],
-     "prompt_number": 15
+     "prompt_number": 16
     },
     {
      "cell_type": "code",
@@ -503,13 +516,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 16,
+       "prompt_number": 17,
        "text": [
         "<ExecutionResult: 2 modules>"
        ]
       }
      ],
-     "prompt_number": 16
+     "prompt_number": 17
     },
     {
      "cell_type": "code",
@@ -553,13 +566,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 17,
+       "prompt_number": 18,
        "text": [
         "<Vistrail: outputs.vt, version 5, changed>"
        ]
       }
      ],
-     "prompt_number": 17
+     "prompt_number": 18
     },
     {
      "cell_type": "code",
@@ -610,13 +623,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 18,
+       "prompt_number": 19,
        "text": [
         "<Pipeline: 2 modules, 1 connections; outputs: msg>"
        ]
       }
      ],
-     "prompt_number": 18
+     "prompt_number": 19
     },
     {
      "cell_type": "markdown",
@@ -637,7 +650,7 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 19,
+       "prompt_number": 20,
        "text": [
         "{'self': <vistrails.core.modules.basic_modules.String at 0x5bd7bb0>,\n",
         " 'value': 'Hello, world',\n",
@@ -645,7 +658,7 @@
        ]
       }
      ],
-     "prompt_number": 19
+     "prompt_number": 20
     },
     {
      "cell_type": "markdown",
@@ -666,13 +679,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 20,
+       "prompt_number": 21,
        "text": [
         "'Hello, world'"
        ]
       }
      ],
-     "prompt_number": 20
+     "prompt_number": 21
     },
     {
      "cell_type": "markdown",
@@ -796,13 +809,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 21,
+       "prompt_number": 22,
        "text": [
         "<Pipeline: 6 modules, 6 connections; inputs: in_a, in_b; outputs: out_times, out_plus>"
        ]
       }
      ],
-     "prompt_number": 21
+     "prompt_number": 22
     },
     {
      "cell_type": "code",
@@ -818,13 +831,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 22,
+       "prompt_number": 23,
        "text": [
-        "<Module 'InputPort' from org.vistrails.vistrails.basic, id 1, label \"First input\">"
+        "<Module 'InputPort' from org.vistrails.vistrails.basic, id 1, name \"First input\">"
        ]
       }
      ],
-     "prompt_number": 22
+     "prompt_number": 23
     },
     {
      "cell_type": "markdown",
@@ -846,7 +859,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 23
+     "prompt_number": 24
     },
     {
      "cell_type": "code",
@@ -860,13 +873,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 24,
+       "prompt_number": 25,
        "text": [
         "(8.0, 6.0)"
        ]
       }
      ],
-     "prompt_number": 24
+     "prompt_number": 25
     },
     {
      "cell_type": "markdown",
@@ -884,7 +897,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 25
+     "prompt_number": 26
     },
     {
      "cell_type": "code",
@@ -949,13 +962,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 26,
+       "prompt_number": 27,
        "text": [
         "<Vistrail: imagemagick.vt, version 6 (tag read), not changed>"
        ]
       }
      ],
-     "prompt_number": 26
+     "prompt_number": 27
     },
     {
      "cell_type": "markdown",
@@ -977,13 +990,13 @@
        "metadata": {},
        "output_type": "pyout",
        "png": "iVBORw0KGgoAAAANSUhEUgAAAIcAAACHCAYAAAA850oKAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK\nTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQ\nWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec\n5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28A\nAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0\nST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaO\nWJAPQGAAg [...]
-       "prompt_number": 27,
+       "prompt_number": 28,
        "text": [
         "PathObject('vistrails_logo.png')"
        ]
       }
      ],
-     "prompt_number": 27
+     "prompt_number": 28
     },
     {
      "cell_type": "code",
@@ -1048,13 +1061,13 @@
        ],
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 28,
+       "prompt_number": 29,
        "text": [
         "<Vistrail: imagemagick.vt, version 14 (tag blur), changed>"
        ]
       }
      ],
-     "prompt_number": 28
+     "prompt_number": 29
     },
     {
      "cell_type": "code",
@@ -1069,13 +1082,13 @@
        "metadata": {},
        "output_type": "pyout",
        "png": "iVBORw0KGgoAAAANSUhEUgAAAIcAAACHCAYAAAA850oKAAAABGdBTUEAALGOfPtRkwAAACBjSFJN\nAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAABmJLR0QA/wD/AP+gvaeTAAAA\nCXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMaDA8Rs4oMKAAAQwdJREFUeNrtvdmS5DiWpvlh\nIambmXlEZGRmVVZVd0uPyMzlvP97zIxMS1eG75u5m+mu3ADMBQASpFLNTd0jq3qqkiJqpsoVJH6e\n858FB/D35e/L35e/L9cuIvmeA/Pkk/97N+7vy7/pUgOn5FPrZON8efeXX/Ni9WedzX9VWXGns8WT\nZ3PfutyP7/A3Wp553efsJqZ/iGcfJ6Y3iYltIv4TF87Vrzg/XJz9c87inKWpDrTNadPUx/umOn48\nbD7cMwZHX [...]
-       "prompt_number": 29,
+       "prompt_number": 30,
        "text": [
-        "PathObject('c:\\\\users\\\\remi\\\\appdata\\\\local\\\\temp\\\\vt_tmpf92izb\\\\vt_tmplppjj8.png')"
+        "PathObject('/tmp/vt_tmpA0IiHV/vt_tmpnA__3c.png')"
        ]
       }
      ],
-     "prompt_number": 29
+     "prompt_number": 30
     },
     {
      "cell_type": "code",
@@ -1091,13 +1104,13 @@
        "metadata": {},
        "output_type": "pyout",
        "png": "iVBORw0KGgoAAAANSUhEUgAAAIcAAACHCAYAAAA850oKAAAABGdBTUEAALGOfPtRkwAAACBjSFJN\nAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAABmJLR0QA/wD/AP+gvaeTAAAA\nCXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMaDA8Rs4oMKAAAJdhJREFUeNrtfVvIbctV5jfm\nXGv9e2ef7BNjjklAu0+ng+RBDSrES7QRDIHuKCgNiiCiD/3QIj4o3SCKrxE0IOKTKIig+KKISKMS\nvGK3Ct4iRuSQeAuN8XASzz47Z//rX2vW8KFqjBqjquZl3f59kvPXZu1/rTnrOuqrcasxaxIAxl26\nSyPpDhx3qZlW8uXz3voubK7eiH51BepWoK4HUYf11YMD4LMw48lwPK6Cw4ZxQBtE+esBeZtlWvfL\na5RLUVUJN [...]
-       "prompt_number": 30,
+       "prompt_number": 31,
        "text": [
-        "PathObject('c:\\\\users\\\\remi\\\\appdata\\\\local\\\\temp\\\\vt_tmpf92izb\\\\vt_tmpv_zekh.png')"
+        "PathObject('/tmp/vt_tmpA0IiHV/vt_tmp7kISgw.png')"
        ]
       }
      ],
-     "prompt_number": 30
+     "prompt_number": 31
     },
     {
      "cell_type": "markdown",
@@ -1116,7 +1129,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 31
+     "prompt_number": 32
     },
     {
      "cell_type": "markdown",
@@ -1138,8 +1151,8 @@
        "output_type": "stream",
        "stream": "stderr",
        "text": [
-        "WARNING:vistrails.logger:C:\\programmation\\vistrails\\dat\\vistrails\\examples\\api\\../..\\vistrails\\core\\modules\\vistrails_module.py, line 1724\n",
-        "UserWarning: A Module instance was used as data: module=MplFigure, port=self, object=<vistrails.packages.matplotlib.bases.MplFigure object at 0x05951770>\n",
+        "WARNING:vistrails.logger:/home/remram/Documents/programming/dat/vistrails/examples/api/../../vistrails/core/modules/vistrails_module.py, line 1724\n",
+        "UserWarning: A Module instance was used as data: module=MplFigure, port=self, object=<vistrails.packages.matplotlib.bases.MplFigure object at 0x7f8b4028ef10>\n",
         "  UserWarning)\n",
         "\n"
        ]
@@ -1155,13 +1168,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 32,
+       "prompt_number": 33,
        "text": [
         "<ExecutionResult: 3 modules>"
        ]
       }
      ],
-     "prompt_number": 32
+     "prompt_number": 33
     },
     {
      "cell_type": "code",
@@ -1173,7 +1186,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 33
+     "prompt_number": 34
     },
     {
      "cell_type": "markdown",
@@ -1204,13 +1217,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 34,
+       "prompt_number": 35,
        "text": [
         "<ExecutionResult: 2 modules>"
        ]
       }
      ],
-     "prompt_number": 34
+     "prompt_number": 35
     },
     {
      "cell_type": "code",
@@ -1222,7 +1235,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 35
+     "prompt_number": 36
     },
     {
      "cell_type": "markdown",
@@ -1283,13 +1296,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 36,
+       "prompt_number": 37,
        "text": [
         "<ExecutionResult: 2 modules>"
        ]
       }
      ],
-     "prompt_number": 36
+     "prompt_number": 37
     },
     {
      "cell_type": "code",
@@ -1301,7 +1314,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 37
+     "prompt_number": 38
     },
     {
      "cell_type": "markdown",
@@ -1341,10 +1354,10 @@
        ]
       }
      ],
-     "prompt_number": 38
+     "prompt_number": 39
     }
    ],
    "metadata": {}
   }
  ]
-}
\ No newline at end of file
+}
diff --git a/examples/api/simplemath.vt b/examples/api/simplemath.vt
index 5ecedaa..c1fbf05 100644
Binary files a/examples/api/simplemath.vt and b/examples/api/simplemath.vt differ
diff --git a/examples/list-handling.vt b/examples/list-handling.vt
index 54d7bd5..6a62bc2 100644
Binary files a/examples/list-handling.vt and b/examples/list-handling.vt differ
diff --git a/examples/mongodb.vt b/examples/mongodb.vt
new file mode 100644
index 0000000..73f99bd
Binary files /dev/null and b/examples/mongodb.vt differ
diff --git a/examples/tej-primes.vt b/examples/tej-primes.vt
new file mode 100644
index 0000000..c3c75c4
Binary files /dev/null and b/examples/tej-primes.vt differ
diff --git a/examples/tensorflow_mandelbrot.vt b/examples/tensorflow_mandelbrot.vt
new file mode 100644
index 0000000..c0e751f
Binary files /dev/null and b/examples/tensorflow_mandelbrot.vt differ
diff --git a/examples/tensorflow_mnist.vt b/examples/tensorflow_mnist.vt
new file mode 100644
index 0000000..14df804
Binary files /dev/null and b/examples/tensorflow_mnist.vt differ
diff --git a/examples/usersguide/cfassistant.vt b/examples/usersguide/cfassistant.vt
index 5b64ab3..da99e76 100644
Binary files a/examples/usersguide/cfassistant.vt and b/examples/usersguide/cfassistant.vt differ
diff --git a/examples/usersguide/job_submission.vt b/examples/usersguide/job_submission.vt
new file mode 100644
index 0000000..b6d385c
Binary files /dev/null and b/examples/usersguide/job_submission.vt differ
diff --git a/examples/usersguide/mashups.vt b/examples/usersguide/mashups.vt
index 706857b..8e71495 100644
Binary files a/examples/usersguide/mashups.vt and b/examples/usersguide/mashups.vt differ
diff --git a/examples/usersguide/parameter_exploration.vt b/examples/usersguide/parameter_exploration.vt
index 66f60ae..095fd60 100644
Binary files a/examples/usersguide/parameter_exploration.vt and b/examples/usersguide/parameter_exploration.vt differ
diff --git a/extensions/http/config.php.sample b/extensions/http/config.php.sample
index 64aa8bb..ef14a4f 100644
--- a/extensions/http/config.php.sample
+++ b/extensions/http/config.php.sample
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/http/get_db_vistrail_list.php b/extensions/http/get_db_vistrail_list.php
index 29fbce5..f0e03bd 100644
--- a/extensions/http/get_db_vistrail_list.php
+++ b/extensions/http/get_db_vistrail_list.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/http/get_vt_xml.php b/extensions/http/get_vt_xml.php
index 12bb5bd..1a4908b 100644
--- a/extensions/http/get_vt_xml.php
+++ b/extensions/http/get_vt_xml.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/http/get_wf_pdf.php b/extensions/http/get_wf_pdf.php
index 7767263..87589ad 100644
--- a/extensions/http/get_wf_pdf.php
+++ b/extensions/http/get_wf_pdf.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/http/get_wf_xml.php b/extensions/http/get_wf_xml.php
index 31cf79c..6d07931 100644
--- a/extensions/http/get_wf_xml.php
+++ b/extensions/http/get_wf_xml.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/http/run_vistrails.php b/extensions/http/run_vistrails.php
index c886a09..9a33590 100644
--- a/extensions/http/run_vistrails.php
+++ b/extensions/http/run_vistrails.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/latex/crowdlabs.sty b/extensions/latex/crowdlabs.sty
index 24aa6eb..3366f35 100644
--- a/extensions/latex/crowdlabs.sty
+++ b/extensions/latex/crowdlabs.sty
@@ -1,6 +1,6 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% Copyright (C) 2014-2015, New York University.
+%% Copyright (C) 2014-2016, New York University.
 %% Copyright (C) 2011-2014, NYU-Poly.
 %% Copyright (C) 2006-2011, University of Utah.
 %% All rights reserved.
diff --git a/extensions/latex/example.tex b/extensions/latex/example.tex
index 6c08467..38be4c8 100644
--- a/extensions/latex/example.tex
+++ b/extensions/latex/example.tex
@@ -1,6 +1,6 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% Copyright (C) 2014-2015, New York University.
+%% Copyright (C) 2014-2016, New York University.
 %% Copyright (C) 2011-2014, NYU-Poly.
 %% Copyright (C) 2006-2011, University of Utah.
 %% All rights reserved.
diff --git a/extensions/latex/example2.tex b/extensions/latex/example2.tex
index c0a4027..19ca473 100644
--- a/extensions/latex/example2.tex
+++ b/extensions/latex/example2.tex
@@ -1,3 +1,39 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Copyright (C) 2014-2016, New York University.
+%% Copyright (C) 2011-2014, NYU-Poly.
+%% Copyright (C) 2006-2011, University of Utah.
+%% All rights reserved.
+%% Contact: contact at vistrails.org
+%%
+%% This file is part of VisTrails.
+%%
+%% "Redistribution and use in source and binary forms, with or without
+%% modification, are permitted provided that the following conditions are met:
+%%
+%%  - Redistributions of source code must retain the above copyright notice,
+%%    this list of conditions and the following disclaimer.
+%%  - Redistributions in binary form must reproduce the above copyright
+%%    notice, this list of conditions and the following disclaimer in the
+%%    documentation and/or other materials provided with the distribution.
+%%  - Neither the name of the New York University nor the names of its
+%%    contributors may be used to endorse or promote products derived from
+%%    this software without specific prior written permission.
+%%
+%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+%% THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+%% PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+%% CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+%% EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+%% PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+%% OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+%% WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+%% OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+%% ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 \documentclass[11pt,twocolumn]{article}
 
 \usepackage{times}
diff --git a/extensions/latex/head.pdf b/extensions/latex/head.pdf
index fbeb6c1..a60fd42 100644
Binary files a/extensions/latex/head.pdf and b/extensions/latex/head.pdf differ
diff --git a/extensions/latex/head.tex b/extensions/latex/head.tex
index bc4bd98..76f845c 100644
--- a/extensions/latex/head.tex
+++ b/extensions/latex/head.tex
@@ -1,6 +1,6 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% Copyright (C) 2014-2015, New York University.
+%% Copyright (C) 2014-2016, New York University.
 %% Copyright (C) 2011-2014, NYU-Poly.
 %% Copyright (C) 2006-2011, University of Utah.
 %% All rights reserved.
@@ -51,7 +51,7 @@
 
 %% If you are running from source uncomment and modify the lines below 
 %% according to your system configuration.
-% \renewcommand{\vistrailspath}{D:/emanuele/vistrails/vistrails/run.py}
+\renewcommand{\vistrailspath}{../../vistrails/run.py}
 
 %% If using MikTex or cygwin on Windows, you need to set the Path to point to your Qt Libraries
 %\renewcommand{\vistrailsenv}{PATH=D:/Qt/4.6.3/bin}
diff --git a/extensions/latex/head.vt b/extensions/latex/head.vt
index 86c6116..cea01ec 100644
Binary files a/extensions/latex/head.vt and b/extensions/latex/head.vt differ
diff --git a/extensions/latex/includecrowdlabs.py b/extensions/latex/includecrowdlabs.py
index 9e406e4..8477f48 100755
--- a/extensions/latex/includecrowdlabs.py
+++ b/extensions/latex/includecrowdlabs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/extensions/latex/includevistrail.py b/extensions/latex/includevistrail.py
index 4bb136f..7bde801 100755
--- a/extensions/latex/includevistrail.py
+++ b/extensions/latex/includevistrail.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -343,7 +343,7 @@ def build_vistrails_cmd_line_db(path_to_vistrails, path_to_python,
     """
     #dump pdf
     if pdf:
-        pdfoption = ["-p"]
+        pdfoption = ["--graphs-as-pdf"]
     else:
         pdfoption = []
     #user
@@ -353,11 +353,11 @@ def build_vistrails_cmd_line_db(path_to_vistrails, path_to_python,
         useroption = []
     #dump tree and workflow graph
     if wgraph:
-        graphoption = ['-G', '%s'%os.path.abspath(path_to_figures)]
+        graphoption = ['-E', '--output-pipeline-graph', '-o', '%s'%os.path.abspath(path_to_figures)] + pdfoption
     elif tree:
-        graphoption = ['-U' ,'%s'%os.path.abspath(path_to_figures)]
+        graphoption = ['-E', '--output-version-tree', '-o', '%s'%os.path.abspath(path_to_figures)] + pdfoption
     else:
-        graphoption = ['-e', '%s'%os.path.abspath(path_to_figures)]
+        graphoption = ['-p', 'file.dir=%s'%os.path.abspath(path_to_figures)]
     #don't select a workflow
     if version is not None:
         voption = ":%s"%version
@@ -369,7 +369,7 @@ def build_vistrails_cmd_line_db(path_to_vistrails, path_to_python,
         prefix = ['%s'%path_to_python,
                   '%s'%path_to_vistrails]
     cmd_line = prefix + ['-b'] + graphoption + ['-t', host, '-f',db_name] + \
-             useroption + ['-r', port] + pdfoption + [ '%s%s'%(vt_id, voption)]
+             useroption + ['-r', port] + [ '%s%s'%(vt_id, voption)]
     return cmd_line
 
 ###############################################################################
@@ -386,16 +386,16 @@ def build_vistrails_cmd_line_file(path_to_vistrails, path_to_python,
     """
     #dump pdf
     if pdf:
-        pdfoption = ["-p"]
+        pdfoption = ["--graphs-as-pdf"]
     else:
         pdfoption = []
     #dump tree and workflow graph
     if wgraph:
-        graphoption = ['-G','%s'%os.path.abspath(path_to_figures)]
+        graphoption = ['-E', '--output-pipeline-graph', '-o', '%s'%os.path.abspath(path_to_figures)] + pdfoption
     elif tree:
-        graphoption = ['-U','%s'%os.path.abspath(path_to_figures)]
+        graphoption = ['-E', '--output-version-tree', '-o', '%s'%os.path.abspath(path_to_figures)] + pdfoption
     else:
-        graphoption = ['-e','%s'%os.path.abspath(path_to_figures)]
+        graphoption = ['-p', 'file.dir=%s'%os.path.abspath(path_to_figures)]
     #don't select a workflow
     if version is not None:
         voption = ":%s"%version
@@ -405,7 +405,7 @@ def build_vistrails_cmd_line_file(path_to_vistrails, path_to_python,
     if path_to_vistrails.endswith(".py"):
         prefix = ['%s'%path_to_python,
                   '%s'%path_to_vistrails]
-    cmd_line = prefix + ['-b'] + graphoption + pdfoption + \
+    cmd_line = prefix + ['-b'] + graphoption + \
                [ "%s%s"%(os.path.abspath(filename),voption)]
                       
     return cmd_line
diff --git a/extensions/latex/test.sh b/extensions/latex/test.sh
new file mode 100755
index 0000000..b2a3af8
--- /dev/null
+++ b/extensions/latex/test.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# Tests embedding vistrails results and graphs in latex
+# This compiles the latex file and tests if the pdf has the expected size
+
+if pdflatex -shell-escape -halt-on-error head.tex; then
+  echo done generating pdf
+else
+  echo error generating pdf
+  exit 1
+ fi
+
+pdfsize=$(wc -c < "head.pdf")
+echo pdf size is $pdfsize
+if [ $pdfsize -le 360000 ]; then
+  echo Error: pdf size too small. One of the figures are probably missing.
+  exit 2;
+else
+  echo pdf looks good!
+fi
+
+exit 0
diff --git a/extensions/latex/vistrails.sty b/extensions/latex/vistrails.sty
index 64333b3..bb13e8d 100644
--- a/extensions/latex/vistrails.sty
+++ b/extensions/latex/vistrails.sty
@@ -1,6 +1,6 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% Copyright (C) 2014-2015, New York University.
+%% Copyright (C) 2014-2016, New York University.
 %% Copyright (C) 2011-2014, NYU-Poly.
 %% Copyright (C) 2006-2011, University of Utah.
 %% All rights reserved.
diff --git a/extensions/mediawiki/download.php b/extensions/mediawiki/download.php
index ee385ce..fc16a04 100644
--- a/extensions/mediawiki/download.php
+++ b/extensions/mediawiki/download.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/mediawiki/functions.php b/extensions/mediawiki/functions.php
index 848384c..65b6d1d 100644
--- a/extensions/mediawiki/functions.php
+++ b/extensions/mediawiki/functions.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/extensions/mediawiki/vistrailsExtension.php b/extensions/mediawiki/vistrailsExtension.php
index df7cd57..a8f916b 100644
--- a/extensions/mediawiki/vistrailsExtension.php
+++ b/extensions/mediawiki/vistrailsExtension.php
@@ -1,7 +1,7 @@
 <?php
 ////////////////////////////////////////////////////////////////////////////
 //
-// Copyright (C) 2014-2015, New York University.
+// Copyright (C) 2014-2016, New York University.
 // Copyright (C) 2011-2014, NYU-Poly.
 // Copyright (C) 2006-2011, University of Utah.
 // All rights reserved.
diff --git a/scripts/build_usersguide.py b/scripts/build_usersguide.py
index b8d95ee..d116808 100755
--- a/scripts/build_usersguide.py
+++ b/scripts/build_usersguide.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/convert_files/convert_files.sh b/scripts/convert_files/convert_files.sh
index 7209246..e720d1d 100755
--- a/scripts/convert_files/convert_files.sh
+++ b/scripts/convert_files/convert_files.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/convert_files/fix_file.py b/scripts/convert_files/fix_file.py
index 5fbd2d8..06fafbd 100644
--- a/scripts/convert_files/fix_file.py
+++ b/scripts/convert_files/fix_file.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/create_release_wiki_table.py b/scripts/create_release_wiki_table.py
old mode 100644
new mode 100755
index 1452174..b5f011d
--- a/scripts/create_release_wiki_table.py
+++ b/scripts/create_release_wiki_table.py
@@ -1,3 +1,40 @@
+#!/usr/bin/env python
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 """ This will output text with release information ready to be pasted on the
 wiki page
 
@@ -6,11 +43,11 @@ wiki page
 """
 from datetime import date
 #Release version
-VT_VERSION = "2.2"
-VT_REVISION = "422e1a9bbc1c"
+VT_VERSION = "2.2.4"
+VT_REVISION = "1519abc0ae2b"
 #Sourceforge information
 SF_ROOT_URL = "http://downloads.sourceforge.net/project/vistrails/vistrails/"
-SF_FOLDER_NAME = "v2.2"
+SF_FOLDER_NAME = "v2.2.4"
 SF_DOWNLOAD_URL = "%s%s"%(SF_ROOT_URL,SF_FOLDER_NAME)
 #binaries names
 MAC_64_BIN = "vistrails-mac-10.6-intel-%s-%s.dmg"%(VT_VERSION, VT_REVISION)
diff --git a/scripts/create_server_media_dir_structure.py b/scripts/create_server_media_dir_structure.py
old mode 100644
new mode 100755
index d69bb1b..0b3d9b8
--- a/scripts/create_server_media_dir_structure.py
+++ b/scripts/create_server_media_dir_structure.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/db_utils.py b/scripts/db_utils.py
index 421dae8..21c36bf 100644
--- a/scripts/db_utils.py
+++ b/scripts/db_utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/delete_from_db.py b/scripts/delete_from_db.py
index 4433b0e..cb4cb80 100755
--- a/scripts/delete_from_db.py
+++ b/scripts/delete_from_db.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/diff_package.py b/scripts/diff_package.py
index 222e3aa..e70bb1f 100755
--- a/scripts/diff_package.py
+++ b/scripts/diff_package.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/extract.py b/scripts/extract.py
index d2a696c..bc18871 100755
--- a/scripts/extract.py
+++ b/scripts/extract.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/force_start_vistrails.py b/scripts/force_start_vistrails.py
index f157787..3a5e04f 100755
--- a/scripts/force_start_vistrails.py
+++ b/scripts/force_start_vistrails.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/force_start_vistrails_nonohup.py b/scripts/force_start_vistrails_nonohup.py
index 9b726bb..e8ec65a 100755
--- a/scripts/force_start_vistrails_nonohup.py
+++ b/scripts/force_start_vistrails_nonohup.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/check_diffs.py b/scripts/gen_vtk_examples/check_diffs.py
old mode 100644
new mode 100755
index 4254ce2..b05c3ea
--- a/scripts/gen_vtk_examples/check_diffs.py
+++ b/scripts/gen_vtk_examples/check_diffs.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/colors.py b/scripts/gen_vtk_examples/colors.py
index 71a5cfa..f1931ef 100644
--- a/scripts/gen_vtk_examples/colors.py
+++ b/scripts/gen_vtk_examples/colors.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/convert_to_vt.py b/scripts/gen_vtk_examples/convert_to_vt.py
old mode 100644
new mode 100755
index 767786c..dff32aa
--- a/scripts/gen_vtk_examples/convert_to_vt.py
+++ b/scripts/gen_vtk_examples/convert_to_vt.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/copy_vtk_examples.py b/scripts/gen_vtk_examples/copy_vtk_examples.py
old mode 100644
new mode 100755
index 3eb9701..bdeade5
--- a/scripts/gen_vtk_examples/copy_vtk_examples.py
+++ b/scripts/gen_vtk_examples/copy_vtk_examples.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/gen_vtk_examples.py b/scripts/gen_vtk_examples/gen_vtk_examples.py
old mode 100644
new mode 100755
index 6358993..9e82f4a
--- a/scripts/gen_vtk_examples/gen_vtk_examples.py
+++ b/scripts/gen_vtk_examples/gen_vtk_examples.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/get_vtk_examples.py b/scripts/gen_vtk_examples/get_vtk_examples.py
old mode 100644
new mode 100755
index 4d5bd9a..2b53a0f
--- a/scripts/gen_vtk_examples/get_vtk_examples.py
+++ b/scripts/gen_vtk_examples/get_vtk_examples.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/vtk_imposter.py b/scripts/gen_vtk_examples/vtk_imposter.py
index 3097989..f31c39f 100644
--- a/scripts/gen_vtk_examples/vtk_imposter.py
+++ b/scripts/gen_vtk_examples/vtk_imposter.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/gen_vtk_examples/vtk_to_vt.py b/scripts/gen_vtk_examples/vtk_to_vt.py
index d13ef59..29b55ba 100644
--- a/scripts/gen_vtk_examples/vtk_to_vt.py
+++ b/scripts/gen_vtk_examples/vtk_to_vt.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/get_usersguide.py b/scripts/get_usersguide.py
index 071bd48..8bc9edd 100755
--- a/scripts/get_usersguide.py
+++ b/scripts/get_usersguide.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -42,7 +42,7 @@ import urllib2
 
 this_dir = os.path.dirname(os.path.abspath(__file__))
 
-DOWNLOAD_URL = "http://www.vistrails.org/usersguide/dev/html/VisTrails.pdf"
+DOWNLOAD_URL = "http://www.vistrails.org/usersguide/v2.2/html/VisTrails.pdf"
 SAVE_TO = os.path.abspath(sys.argv[1]) if len(sys.argv) > 1 else this_dir
 
 # http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python
diff --git a/scripts/mac_update_bin.sh b/scripts/mac_update_bin.sh
index 9c3e7a3..8ad6e5a 100755
--- a/scripts/mac_update_bin.sh
+++ b/scripts/mac_update_bin.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/merge_vistrails.py b/scripts/merge_vistrails.py
index e0c86bc..6182891 100755
--- a/scripts/merge_vistrails.py
+++ b/scripts/merge_vistrails.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/module_appearance/main.py b/scripts/module_appearance/main.py
index 2304aaa..989501e 100755
--- a/scripts/module_appearance/main.py
+++ b/scripts/module_appearance/main.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/module_appearance/module_appearance.py b/scripts/module_appearance/module_appearance.py
index 2e9831b..14c05ac 100644
--- a/scripts/module_appearance/module_appearance.py
+++ b/scripts/module_appearance/module_appearance.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/opm/opm2dot.py b/scripts/opm/opm2dot.py
old mode 100644
new mode 100755
index f7c65b2..bba41db
--- a/scripts/opm/opm2dot.py
+++ b/scripts/opm/opm2dot.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/release_notes.py b/scripts/release_notes.py
index 2c7c157..033173c 100755
--- a/scripts/release_notes.py
+++ b/scripts/release_notes.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/restart-vistrails-server.sh b/scripts/restart-vistrails-server.sh
index 1ca0876..ea429a5 100755
--- a/scripts/restart-vistrails-server.sh
+++ b/scripts/restart-vistrails-server.sh
@@ -1,6 +1,7 @@
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -38,4 +39,4 @@ export DISPLAY=localhost:1.0
 vistrails_dir="/server/wiki/vistrails/main/vistrails/v1.2/vistrails"
 cd $vistrails_dir
 python stop_vistrails_server.py http://vistrails.sci.utah.edu:8080
-nohup python vistrails_server.py -T vistrails.sci.utah.edu -R 8080&
\ No newline at end of file
+nohup python vistrails_server.py -T vistrails.sci.utah.edu -R 8080&
diff --git a/scripts/retarget_mpl_libs.sh b/scripts/retarget_mpl_libs.sh
index e9a7d28..d91f65c 100755
--- a/scripts/retarget_mpl_libs.sh
+++ b/scripts/retarget_mpl_libs.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/run_vistrails_batch_xvfb.sh b/scripts/run_vistrails_batch_xvfb.sh
index de1a6a1..4e39cf0 100755
--- a/scripts/run_vistrails_batch_xvfb.sh
+++ b/scripts/run_vistrails_batch_xvfb.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/sql_delete.py b/scripts/sql_delete.py
index d1e1cad..26414a4 100755
--- a/scripts/sql_delete.py
+++ b/scripts/sql_delete.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/sql_to_xml.py b/scripts/sql_to_xml.py
index 0d510d5..c770fbc 100755
--- a/scripts/sql_to_xml.py
+++ b/scripts/sql_to_xml.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/start_vistrails.sh b/scripts/start_vistrails.sh
index ae1abfb..ac100a7 100755
--- a/scripts/start_vistrails.sh
+++ b/scripts/start_vistrails.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/start_vistrails_xvfb.sh b/scripts/start_vistrails_xvfb.sh
index 40fa9e5..accc950 100755
--- a/scripts/start_vistrails_xvfb.sh
+++ b/scripts/start_vistrails_xvfb.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/system_info.py b/scripts/system_info.py
index 302d61b..1a4bbb5 100755
--- a/scripts/system_info.py
+++ b/scripts/system_info.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/unzip_vistrail.sh b/scripts/unzip_vistrail.sh
index af04c70..0b54a83 100755
--- a/scripts/unzip_vistrail.sh
+++ b/scripts/unzip_vistrail.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/update_copyright_year.py b/scripts/update_copyright_year.py
old mode 100644
new mode 100755
index 9218cad..a293f1d
--- a/scripts/update_copyright_year.py
+++ b/scripts/update_copyright_year.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -44,7 +45,7 @@ import re
 
 
 # The new copyright: the found copyright line will be replaced by this
-NEW_COPYRIGHT = ["## Copyright (C) 2014-2015, New York University.\n"]
+NEW_COPYRIGHT = ["## Copyright (C) 2014-2016, New York University.\n"]
 
 # The old copyright line: the first matching line in a file will be replaced
 # by NEW_COPYRIGHT
diff --git a/scripts/update_db.py b/scripts/update_db.py
index f05e858..21f54f2 100755
--- a/scripts/update_db.py
+++ b/scripts/update_db.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -63,7 +63,7 @@ def update_db(config, new_version=None, tmp_dir=None, restore=False):
     if restore:
         for dirpath, dirname, files in os.walk(restore):
             for fname in files:
-                if fname.endswith('.vt'):
+                if fname.lower().endswith('.vt'):
                     filenames.append(os.path.join(restore, fname))
     else:
         for obj_type in obj_types:
diff --git a/scripts/update_email_contact.py b/scripts/update_email_contact.py
old mode 100644
new mode 100755
index d9d8dc1..e3bbdc8
--- a/scripts/update_email_contact.py
+++ b/scripts/update_email_contact.py
@@ -1,3 +1,40 @@
+#!/usr/bin/env python
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 # Finds all files matching extensions recursively in current directory (.)
 # and updates tthe contact e-mail address
 
@@ -34,4 +71,3 @@ for fname in files:
         fout.close()
         count += 1
 print count, " files updated "
- 
\ No newline at end of file
diff --git a/scripts/update_to_mod_bsd_license.py b/scripts/update_to_mod_bsd_license.py
old mode 100644
new mode 100755
index b292745..90b890b
--- a/scripts/update_to_mod_bsd_license.py
+++ b/scripts/update_to_mod_bsd_license.py
@@ -1,6 +1,7 @@
+#!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/update_vistrails_command.py b/scripts/update_vistrails_command.py
index 52e194f..72bf9ed 100755
--- a/scripts/update_vistrails_command.py
+++ b/scripts/update_vistrails_command.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/watch_vistrail_servers.py b/scripts/watch_vistrail_servers.py
index f54bb26..3023a4a 100755
--- a/scripts/watch_vistrail_servers.py
+++ b/scripts/watch_vistrail_servers.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/scripts/win_update_bin.sh b/scripts/win_update_bin.sh
index ff46879..250ed7b 100755
--- a/scripts/win_update_bin.sh
+++ b/scripts/win_update_bin.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/bin/sh
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/__init__.py b/vistrails/__init__.py
index 4bc1955..5f87493 100644
--- a/vistrails/__init__.py
+++ b/vistrails/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/api/__init__.py b/vistrails/api/__init__.py
index 81c8140..e8f9918 100644
--- a/vistrails/api/__init__.py
+++ b/vistrails/api/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -132,7 +132,7 @@ def get_current_vistrail_view():
     return view    
 
 def close_current_vistrail(quiet=False):
-    get_vistrails_application().builderWindow.close_vistrail(get_current_vistrail_view())
+    get_vistrails_application().builderWindow.close_vistrail(get_current_vistrail_view(), quiet=quiet)
 
 def get_module_registry():
     from vistrails.core.modules.module_registry import get_module_registry
diff --git a/vistrails/core/__init__.py b/vistrails/core/__init__.py
index 9110caa..1164b52 100644
--- a/vistrails/core/__init__.py
+++ b/vistrails/core/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/analogy/__init__.py b/vistrails/core/analogy/__init__.py
index 68b089c..920d743 100644
--- a/vistrails/core/analogy/__init__.py
+++ b/vistrails/core/analogy/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/analogy/eigen.py b/vistrails/core/analogy/eigen.py
index 5bf3724..9dc6964 100644
--- a/vistrails/core/analogy/eigen.py
+++ b/vistrails/core/analogy/eigen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/analogy/pipeline_utils.py b/vistrails/core/analogy/pipeline_utils.py
index d21d97e..163d33c 100644
--- a/vistrails/core/analogy/pipeline_utils.py
+++ b/vistrails/core/analogy/pipeline_utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/api.py b/vistrails/core/api.py
index 6e487f0..51a3e96 100644
--- a/vistrails/core/api.py
+++ b/vistrails/core/api.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -60,7 +60,7 @@ from vistrails.db.domain import IdScope
 
 __all__ = ['Vistrail', 'Pipeline', 'Module', 'Package',
            'ExecutionResults', 'ExecutionErrors', 'Function',
-           'load_vistrail', 'load_pipeline', 'load_package',
+           'ipython_mode', 'load_vistrail', 'load_pipeline', 'load_package',
            'output_mode', 'run_vistrail',
            'NoSuchVersion', 'NoSuchPackage']
 
@@ -104,6 +104,22 @@ def initialize():
     return True
 
 
+def ipython_mode(use_notebook=True):
+    """Selects whether the IPython notebook should be used.
+
+    Call ``vistrails.ipython_mode(True)`` to enable IPythonMode for output
+    modules, directing supported output to the notebook instead of files.
+    """
+    if use_notebook:
+        try:
+            import IPython.core.display
+        except ImportError:
+            raise ValueError("IPython doesn't seem to be installed!?")
+
+    from vistrails.core.modules.output_modules import IPythonMode
+    IPythonMode.notebook_override = use_notebook
+
+
 class Vistrail(object):
     """This class wraps both Vistrail and VistrailController.
 
@@ -121,7 +137,8 @@ class Vistrail(object):
             # Copied from VistrailsApplicationInterface#open_vistrail()
             locator = UntitledLocator()
             loaded_objs = vistrails.core.db.io.load_vistrail(locator)
-            self.controller = VistrailController(*loaded_objs)
+            self.controller = VistrailController(loaded_objs[0], locator,
+                                                 *loaded_objs[1:])
         elif isinstance(arg, (_Pipeline, Pipeline)):
             if isinstance(arg, Pipeline):
                 pipeline = arg.pipeline
@@ -187,14 +204,15 @@ class Vistrail(object):
         else:
             raise TypeError("select_version() argument must be a string "
                             "or integer, not %r" % type(version).__name__)
-        self.controller.change_selected_version(version)
+        self.controller.do_version_switch(version)
         self._current_pipeline = None
         self._html = None
 
     def select_latest_version(self):
         """Sets the most recent version in the vistrail as current.
         """
-        self.controller.select_latest_version()
+        self.controller.do_version_switch(
+                self.controller.get_latest_version_in_graph())
         self._current_pipeline = None
         self._html = None
 
@@ -413,9 +431,13 @@ class Pipeline(object):
         else:
             pipeline = self.pipeline
             if inputs:
-                id_scope = IdScope()
-                id_remap = {}
-                pipeline = pipeline.do_copy(True, id_scope, id_remap)
+                id_scope = IdScope(1)
+                pipeline = pipeline.do_copy(False, id_scope)
+
+                # A hach to get ids from id_scope that we know won't collide:
+                # make them negative
+                id_scope.getNewId = lambda t, g=id_scope.getNewId: -g(t)
+
                 create_module = \
                         VistrailController.create_module_from_descriptor_static
                 create_function = VistrailController.create_function_static
@@ -634,8 +656,6 @@ class ModuleClass(type):
     def __call__(self, *args, **kwargs):
         return Module(self.descriptor, *args, **kwargs)
 
-    # Ignored by IPython because of bug 6709
-    # https://github.com/ipython/ipython/issues/6709
     def __repr__(self):
         return "<Module class %r from %s>" % (self.descriptor.name,
                                               self.descriptor.identifier)
@@ -697,6 +717,16 @@ class Module(object):
     def module_class(self):
         return ModuleClass(self.descriptor)
 
+    @property
+    def name(self):
+        if self.module_id is None:
+            raise ValueError("This module is not part of a pipeline")
+        mod = self.pipeline.pipeline.modules[self.module_id]
+        if '__desc__' in mod.db_annotations_key_index:
+            return mod.get_annotation_by_key('__desc__').value
+        else:
+            return None
+
     def __repr__(self):
         desc = "<Module %r from %s" % (self.descriptor.name,
                                        self.descriptor.identifier)
@@ -705,7 +735,7 @@ class Module(object):
             if self.pipeline is not None:
                 mod = self.pipeline.pipeline.modules[self.module_id]
                 if '__desc__' in mod.db_annotations_key_index:
-                    desc += (", label \"%s\"" %
+                    desc += (", name \"%s\"" %
                              mod.get_annotation_by_key('__desc__').value)
         return desc + ">"
 
@@ -862,7 +892,10 @@ def load_vistrail(filename, version=None):
     controller = VistrailController(loaded_objs[0], locator,
                                     *loaded_objs[1:])
 
-    return Vistrail(controller)
+    vistrail = Vistrail(controller)
+    if version is not None:
+        vistrail.select_version(version)
+    return vistrail
 
 
 def load_pipeline(filename):
diff --git a/vistrails/core/application.py b/vistrails/core/application.py
index 3797600..51df63f 100644
--- a/vistrails/core/application.py
+++ b/vistrails/core/application.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -48,16 +48,18 @@ import vistrails.core.configuration
 from vistrails.core.configuration import ConfigurationObject
 from vistrails.core.db.locator import BaseLocator, FileLocator, DBLocator, \
     UntitledLocator
+import vistrails.core.db.action
 import vistrails.core.db.io
 import vistrails.core.interpreter.cached
 import vistrails.core.interpreter.default
 from vistrails.core.modules.module_registry import ModuleRegistry
 from vistrails.core.packagemanager import PackageManager
+from vistrails.core import reportusage
+import vistrails.core.requirements
 from vistrails.core.startup import VistrailsStartup
 from vistrails.core.thumbnails import ThumbnailCache
-from vistrails.core.utils import InstanceObject, VistrailsWarning
+from vistrails.core.utils import VistrailsWarning
 from vistrails.core.vistrail.pipeline import Pipeline
-from vistrails.core.vistrail.vistrail import Vistrail
 from vistrails.core.vistrail.controller import VistrailController
 from vistrails.db import VistrailsDBException
 
@@ -170,6 +172,9 @@ class VistrailsApplicationInterface(object):
         self.package_manager = PackageManager(self.registry,
                                               self.startup)
 
+        if reportusage.update_config(self.temp_configuration):
+            self.temp_configuration.batch = True
+
     def check_all_requirements(self):
         # check scipy
         vistrails.core.requirements.require_python_module('scipy', {
@@ -405,7 +410,7 @@ class VistrailsApplicationInterface(object):
         if controller is None:
             # vistrail is not already open
             try:
-                loaded_objs = vistrails.core.db.io.load_vistrail(locator, False)
+                loaded_objs = vistrails.core.db.io.load_vistrail(locator, is_abstraction)
                 controller = self.add_vistrail(loaded_objs[0], locator, 
                                                *loaded_objs[1:])
                 if locator.is_untitled():
@@ -557,7 +562,7 @@ class VistrailsCoreApplication(VistrailsApplicationInterface):
             locator = self._cur_controller.locator
         del self._controllers[locator]
         if len(self._controllers) > 0:
-            self._cur_controller = self._controllers.itervalues().next()
+            self._cur_controller = next(self._controllers.itervalues())
 
     def ensure_vistrail(self, locator):
         if locator in self._controllers:
diff --git a/vistrails/core/bundles/__init__.py b/vistrails/core/bundles/__init__.py
index 92885b6..fe3a2da 100644
--- a/vistrails/core/bundles/__init__.py
+++ b/vistrails/core/bundles/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/bundles/installbundle.py b/vistrails/core/bundles/installbundle.py
index 38828f3..d9ef966 100644
--- a/vistrails/core/bundles/installbundle.py
+++ b/vistrails/core/bundles/installbundle.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/bundles/pyimport.py b/vistrails/core/bundles/pyimport.py
index 1cccaea..7e9e91c 100644
--- a/vistrails/core/bundles/pyimport.py
+++ b/vistrails/core/bundles/pyimport.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -99,6 +99,9 @@ def py_import(module_name, dependency_dictionary, store_in_config=False):
             ignored_packages.discard(module_name)
         else:
             ignored_packages.add(module_name)
+        setattr(get_vistrails_configuration(),
+                'bundleDeclinedList',
+                ';'.join(sorted(ignored_packages)))
         setattr(get_vistrails_persistent_configuration(),
                 'bundleDeclinedList',
                 ';'.join(sorted(ignored_packages)))
diff --git a/vistrails/core/cache/__init__.py b/vistrails/core/cache/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/cache/__init__.py
+++ b/vistrails/core/cache/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/cache/hasher.py b/vistrails/core/cache/hasher.py
index 542249c..01bdcaa 100644
--- a/vistrails/core/cache/hasher.py
+++ b/vistrails/core/cache/hasher.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -36,6 +36,7 @@
 """Hasher class for vistrail items."""
 from __future__ import division
 
+import unittest
 from vistrails.core.cache.utils import hash_list
 
 try:
@@ -94,6 +95,16 @@ class Hasher(object):
         return hasher.digest()
 
     @staticmethod
+    def port_spec_signature(ps, constant_hasher_map={}):
+        hasher = sha_hash()
+        u = hasher.update
+        u(ps.type)
+        u(ps.name)
+        u(ps.sigstring)
+        u('%d' % ps.depth)
+        return hasher.digest()
+
+    @staticmethod
     def connection_subpipeline_signature(c, source_sig, dest_sig):
         """Returns the signature for the connection, including source and dest
         subpipelines
@@ -119,6 +130,8 @@ class Hasher(object):
                     constant_hasher_map))
         u(hash_list(obj.control_parameters, Hasher.control_param_signature,
                     constant_hasher_map))
+        u(hash_list(obj.port_spec_list, Hasher.port_spec_signature,
+                    constant_hasher_map))
         return hasher.digest()
 
     @staticmethod
@@ -147,3 +160,34 @@ class Hasher(object):
         for h in sorted(sig_list):
             hasher.update(h)
         return hasher.digest()
+
+
+##############################################################################
+# Unit tests
+
+
+class TestCacheHash(unittest.TestCase):
+    def test_outputportspec_cache(self):
+        """
+        Test that signature hash includes port specs
+
+        If it is not included, a module with different port spec may
+        be used in the cache, leading to an exception.
+        """
+        from vistrails import api
+        from vistrails.core.vistrail.port_spec import PortSpec
+        api.new_vistrail()
+        c = api.get_current_controller()
+        ps = api.add_module(0, 0, 'org.vistrails.vistrails.basic', 'PythonSource', '')
+        api.change_parameter(ps.id, 'source', ['a = b = 1\ncache_this()'])
+        so = api.add_module(0, 0, 'org.vistrails.vistrails.basic', 'Integer', '')
+
+        api.add_port_spec(ps.id, PortSpec(name='a', type='output', sigstring='org.vistrails.vistrails.basic:Integer'))
+        api.add_connection(ps.id, 'a', so.id, 'value')
+        # adds ps to cache
+        self.assertEqual(c.execute_current_workflow()[0][0].errors, {})
+
+        api.add_port_spec(ps.id, PortSpec(name='b', type='output', sigstring='org.vistrails.vistrails.basic:Integer'))
+        api.add_connection(ps.id, 'b', so.id, 'value')
+        # will fail if outputportspec is not hashed and cache is reused
+        self.assertEqual(c.execute_current_workflow()[0][0].errors, {})
diff --git a/vistrails/core/cache/utils.py b/vistrails/core/cache/utils.py
index 0f98dd6..64efef1 100644
--- a/vistrails/core/cache/utils.py
+++ b/vistrails/core/cache/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/__init__.py b/vistrails/core/collection/__init__.py
index 1c83362..a3088c2 100644
--- a/vistrails/core/collection/__init__.py
+++ b/vistrails/core/collection/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/entity.py b/vistrails/core/collection/entity.py
index 83209b7..0bc69f2 100644
--- a/vistrails/core/collection/entity.py
+++ b/vistrails/core/collection/entity.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/mashup.py b/vistrails/core/collection/mashup.py
index f2f6547..0d06b1d 100644
--- a/vistrails/core/collection/mashup.py
+++ b/vistrails/core/collection/mashup.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/parameter_exploration.py b/vistrails/core/collection/parameter_exploration.py
index 9844053..75eb4f1 100644
--- a/vistrails/core/collection/parameter_exploration.py
+++ b/vistrails/core/collection/parameter_exploration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/schema.sql b/vistrails/core/collection/schema.sql
index 81919db..52eca83 100644
--- a/vistrails/core/collection/schema.sql
+++ b/vistrails/core/collection/schema.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/core/collection/search.py b/vistrails/core/collection/search.py
index 595eb0d..3890be4 100644
--- a/vistrails/core/collection/search.py
+++ b/vistrails/core/collection/search.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/thumbnail.py b/vistrails/core/collection/thumbnail.py
index 0f63fdd..f6485f5 100644
--- a/vistrails/core/collection/thumbnail.py
+++ b/vistrails/core/collection/thumbnail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/vistrail.py b/vistrails/core/collection/vistrail.py
index efadd74..4cc0d80 100644
--- a/vistrails/core/collection/vistrail.py
+++ b/vistrails/core/collection/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/workflow.py b/vistrails/core/collection/workflow.py
index 0461b82..3bde2ae 100644
--- a/vistrails/core/collection/workflow.py
+++ b/vistrails/core/collection/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/collection/workflow_exec.py b/vistrails/core/collection/workflow_exec.py
index f03b8f3..637ad16 100644
--- a/vistrails/core/collection/workflow_exec.py
+++ b/vistrails/core/collection/workflow_exec.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/common.py b/vistrails/core/common.py
index 177e3eb..3f50086 100644
--- a/vistrails/core/common.py
+++ b/vistrails/core/common.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py
index ae68683..d7e01e8 100644
--- a/vistrails/core/configuration.py
+++ b/vistrails/core/configuration.py
@@ -1,6 +1,6 @@
 ##############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -64,6 +64,7 @@ autoConnect: Automatically connect dragged in modules
 autoSave: Automatically save backup vistrails every two minutes
 batch: Run in batch mode instead of interactive mode
 cache: Cache previous results so they may be used in future computations
+customVersionColors: Allow setting custom colors for versions
 dataDir: Default data directory
 db: The name for the database to load the vistrail from
 dbDefault: Save vistrails in a database by default
@@ -73,10 +74,12 @@ detachHistoryView: Show the version tree in a separate window
 dotVistrails: User configuration directory
 enablePackagesSilently: Automatically enable packages when needed
 errorLog: Write errors to a log file
-execute: Execute any specified workflows
+NoExecute: Do not execute specified workflows
 executionLog: Track execution provenance when running workflows
 fileDir: Default vistrail directory
+fixedCustomVersionColorSaturation: Don't vary custom color with age
 fixedSpreadsheetCells: Draw spreadsheet cells at a fixed size
+graphsAsPdf: Generate graphs in PDF format instead of images
 handlerDontAsk: Do not ask about extension handling at startup
 hideUpgrades: Don't show upgrade nodes in the version tree
 host: The hostname for the database to load the vistrail from
@@ -94,10 +97,16 @@ maximizeWindows: VisTrails windows should be maximized
 migrateTags: Move tags to upgraded versions
 multiHeads: Use multiple screens for VisTrails windows
 multithread: Server will start a thread for each request
+outputDirectory: Directory in which to place output files
+outputPipelineGraph: Output the workflow graph as an image
+outputVersionTree: Output the version tree as an image
 packageDir: System packages directory
 parameterExploration: Run parameter exploration instead of workflow
 parameters: List of parameters to use when running workflow
 port: The port for the database to load the vistrail from
+reportUsage: Report anonymous usage statistics to the developers
+enableUsage: Enable sending anonymous usage statistics
+disableUsage: Disable sending anonymous usage statistics
 repositoryHTTPURL: Remote package repository URL
 repositoryLocalPath: Local package repository directory
 rootDirectory: Directory that contains the VisTrails source code
@@ -115,6 +124,7 @@ showScrollbars: Show scrollbars on the version tree and workflow canvases
 showSplash: Show VisTrails splash screen during startup
 showSpreadsheetOnly: Hides the VisTrails main window
 showVariantErrors: Show error when variant input value doesn't match type during execution
+showVistrailsNews: Show news from VisTrails (once per message)
 showWindow: Show the main window
 singleInstance: Do not allow more than one instance of VisTrails to run at once
 spreadsheetDumpCells: Defines the location for generated cells
@@ -137,8 +147,6 @@ userPackageDir: Local packages directory
 viewOnLoad: Whether to show pipeline or history view when opening vistrail
 webRepositoryURL: Web repository URL
 webRepositoryUser: Web repository username
-withVersionTree: Output the version tree as an image
-withWorkflow: Output the workflow graph as an image
 """
 
 _documentation = """
@@ -159,6 +167,11 @@ cache: Boolean
 
     Cache previous results so they may be used in future computations.
 
+customVersionColors: Boolean
+
+    Allow setting custom colors for versions, and display these colors in the
+    version tree.
+
 dataDir: Path
 
     The location that VisTrails uses as a default directory for data.
@@ -199,9 +212,9 @@ errorLog: Boolean
 
     Write errors to a log file.
 
-execute: Boolean
+noExecute: Boolean
 
-    Execute any specified workflows.
+    Do not execute specified workflows.
 
 executionLog: Boolean
 
@@ -212,10 +225,19 @@ fileDir: Path
     The location that VisTrails uses as a default directory for
     specifying files.
 
+fixedCustomVersionColorSaturation: Boolean
+
+    Don't change the saturation according to the age of the version if it has a
+    custom color.
+
 fixedSpreadsheetCells: Boolean
 
     Draw spreadsheet cells at a fixed size (for testing).
 
+graphsAsPdf: Boolean
+
+    Generate graphs in PDF format instead of images
+
 handlerDontAsk: Boolean
 
     Do not ask about extension handling at startup (Linux only).
@@ -255,11 +277,11 @@ jobList: Boolean
 
 jobInfo: Boolean
 
-    List jobs in running workflow
+    List jobs in running workflow.
 
 loadPackages: Boolean
 
-    Whether to load the packages enabled in the configuration file
+    Whether to load the packages enabled in the configuration file.
 
 logDir: Path
 
@@ -309,10 +331,22 @@ outputDefaultSettings: ConfigurationObject
 
     One or more comma-separated key=value parameters.
 
+outputDirectory: Path
+
+    Directory in which to place output files
+
+outputPipelineGraph: Boolean
+
+    Output the workflow graph as an image.
+
 outputSettings: ConfigurationObject
 
     One or more comma-separated key=value parameters.
 
+outputVersionTree: Boolean
+
+    Output the version tree as an image.
+
 packageDir: Path
 
     The directory to look for VisTrails core packages (use
@@ -339,6 +373,18 @@ recentVistrailList: String
 
     Storage for recent vistrails. Users should not edit.
 
+reportUsage: Integer
+
+    Report anonymous usage statistics to the developers
+
+enableUsage: Boolean
+
+    Enable sending anonymous usage statistics
+
+disableUsage: Boolean
+
+    Disable sending anonymous usage statistics
+
 repositoryHTTPURL: URL
 
     URL used to locate packages available to be installed.
@@ -400,6 +446,10 @@ showDebugPopups: Boolean
 
     Always show the debug popups or only if there is a modal widget.
 
+showInlineParameterWidgets: Boolean
+
+    Show editable parameters inside modules.
+
 showMovies: Boolean
 
     *Deprecated* Set automatic movie creation on the spreadsheet.
@@ -422,6 +472,11 @@ showVariantErrors: Boolean
     Alert the user if the value along a connection coming from a
     Variant output doesn't match the input port.
 
+showVistrailsNews: Boolean
+
+    Show news from VisTrails on startup. Each message will only be displayed
+    once.
+
 showWindow: Boolean
 
     Show the main VisTrails window.
@@ -512,8 +567,8 @@ userPackageDir: Boolean
 
 viewOnLoad: String
 
-    Whether to show pipeline or history view when opening vistrail
-    Can be either appropriate/pipeline/history
+    Whether to show pipeline or history view when opening vistrail.
+    Can be either appropriate/pipeline/history.
 
 webRepositoryURL: URL
 
@@ -525,18 +580,6 @@ webRepositoryUser: String
     The default username for logging into a VisTrails web repository
     like crowdLabs.
 
-withVersionTree: Boolean
-
-    Output the version tree as an image.
-
-withWorkflow: Boolean
-
-    Output the workflow graph as an image.
-
-showInlineParameterWidgets: Boolean
-
-    Show editable parameters inside modules
-
 """
 
 class ConfigType(object):
@@ -616,8 +659,8 @@ class ConfigFieldParent(object):
 
 base_config = {
     "Command-Line":
-    [ConfigField("execute", False, bool, ConfigType.COMMAND_LINE_FLAG,
-                 flag='-e'),
+    [ConfigField("noExecute", False, bool, ConfigType.COMMAND_LINE_FLAG,
+                 flag='-E'),
      ConfigField("batch", False, bool, ConfigType.COMMAND_LINE_FLAG,
                  flag='-b'),
      ConfigField("outputDirectory", None, ConfigPath, flag='-o'),
@@ -630,9 +673,11 @@ base_config = {
      ConfigField("parameterExploration", False, bool,
                  ConfigType.COMMAND_LINE_FLAG),
      ConfigField('showWindow', True, bool, ConfigType.COMMAND_LINE_FLAG),
-     ConfigField("withVersionTree", False, bool, ConfigType.COMMAND_LINE_FLAG),
-     ConfigField("withWorkflow", False, bool, ConfigType.COMMAND_LINE_FLAG),
-     ConfigField("graphsAsPdf", True, bool, ConfigType.COMMAND_LINE_FLAG)],
+     ConfigField("outputVersionTree", False, bool, ConfigType.COMMAND_LINE_FLAG),
+     ConfigField("outputPipelineGraph", False, bool, ConfigType.COMMAND_LINE_FLAG),
+     ConfigField("graphsAsPdf", True, bool, ConfigType.COMMAND_LINE_FLAG),
+     ConfigField('enableUsage', False, bool, ConfigType.COMMAND_LINE_FLAG),
+     ConfigField('disableUsage', False, bool, ConfigType.COMMAND_LINE_FLAG)],
     "Database":
     [ConfigField("host", None, ConfigURL, ConfigType.COMMAND_LINE),
      ConfigField("port", None, int, ConfigType.COMMAND_LINE),
@@ -665,8 +710,12 @@ base_config = {
                                  "label": "Show alerts for",
                                  "remap": {0: "Critical Errors Only",
                                            1: "Critical Errors and Warnings",
-                                           2: "Errors, Warnings, and " \
-                                           "Debug Messages"}})],
+                                           2: "Errors, Warnings, and "
+                                              "Debug Messages"}}),
+     ConfigField('reportUsage', -1, int, ConfigType.INTERNAL,
+                 widget_type="usagestats",
+                 widget_options={'label': 'Anonymous usage reporting'}),
+     ConfigField('showVistrailsNews', True, bool, ConfigType.SHOW_HIDE)],
     "Startup":
     [ConfigField('maximizeWindows', False, bool, ConfigType.ON_OFF),
      ConfigField('multiHeads', False, bool, ConfigType.ON_OFF),
@@ -701,7 +750,7 @@ base_config = {
                                  "remap": {"appropriate": "Most Appropriate",
                                            "history": "Always History",
                                            "pipeline": "Always Pipeline"}}),
-     ConfigField('enableCustomVersionColors', False, bool, ConfigType.ON_OFF),
+     ConfigField('customVersionColors', False, bool, ConfigType.ON_OFF),
      ConfigField('fixedCustomVersionColorSaturation', False,
                  bool, ConfigType.ON_OFF)],
     "Thumbnails":
@@ -745,7 +794,9 @@ base_config = {
      ConfigField('rootDirectory', None, ConfigPath, ConfigType.INTERNAL),
      ConfigField('developerDebugger', False, bool, ConfigType.INTERNAL),
      ConfigField('dontUnloadModules', False, bool, ConfigType.INTERNAL),
-     ConfigField('bundleDeclinedList', '', str, ConfigType.INTERNAL)],
+     ConfigField('bundleDeclinedList', '', str, ConfigType.INTERNAL),
+     ConfigField('maxPipelineFixAttempts', 50, int, ConfigType.INTERNAL),
+     ConfigField('lastShownNews', '', str, ConfigType.INTERNAL)],
     "Jobs":
     [ConfigField('jobCheckInterval', 600, int),
      ConfigField('jobAutorun', False, bool),
@@ -856,8 +907,8 @@ def find_simpledoc(arg_path):
 def set_field_labels(fields, prefix=""):
     for field in fields:
         if isinstance(field, ConfigFieldParent):
-            prefix = "%s%s." % (prefix, field.name)
-            set_field_labels(field.sub_fields, prefix=prefix)
+            new_prefix = "%s%s." % (prefix, field.name)
+            set_field_labels(field.sub_fields, prefix=new_prefix)
         else:
             full_field_name = "%s%s" % (prefix, field.name)
             label = find_simpledoc(full_field_name)
@@ -986,7 +1037,7 @@ def build_command_line_parser(d, parser=None, prefix="", **parser_args):
             config_type = field.field_type
             if config_type is None:
                 config_type = ConfigType.NORMAL
-            if (config_type == ConfigType.INTERNAL or \
+            if (config_type == ConfigType.INTERNAL or
                 config_type == ConfigType.STORAGE or
                 config_type == ConfigType.INTERNAL_SUBOBJECT):
                 # these are not in the command line
diff --git a/vistrails/core/console_mode.py b/vistrails/core/console_mode.py
index 79fe80a..8001186 100644
--- a/vistrails/core/console_mode.py
+++ b/vistrails/core/console_mode.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -57,9 +57,9 @@ import vistrails.db
 
 
 ################################################################################
-    
-def run_and_get_results(w_list, parameters='', output_dir=None, 
-                        update_vistrail=True, extra_info=None, 
+
+def run_and_get_results(w_list, parameters='',
+                        update_vistrail=True, extra_info=None,
                         reason='Console Mode Execution'):
     """run_and_get_results(w_list: list of (locator, version), parameters: str,
                            output_dir:str, update_vistrail: boolean,
@@ -86,7 +86,7 @@ def run_and_get_results(w_list, parameters='', output_dir=None,
             msg = "Invalid version tag or number: %s" % workflow
             raise VistrailsInternalError(msg)
         controller.change_selected_version(version)
-        
+
         for e in elements:
             pos = e.find("=")
             if pos != -1:
@@ -103,19 +103,6 @@ def run_and_get_results(w_list, parameters='', output_dir=None,
                             c = mashup.getAliasByName(key).component
                             params.append((c.vttype, c.vtid, value))
 
-        if output_dir is not None and controller.current_pipeline is not None:
-            # FIXME DAK: why is this always done?!? there is a flag for it...
-            if is_running_gui():
-                controller.updatePipelineScene()
-                base_fname = "%s_%s_pipeline.pdf" % (locator.short_filename, version)
-                filename = os.path.join(output_dir, base_fname)
-                controller.current_pipeline_scene.saveToPDF(filename)
-            else:
-                debug.critical("Cannot save pipeline figure when not "
-                               "running in gui mode")
-            base_fname = "%s_%s_pipeline.xml" % (locator.short_filename, version)
-            filename = os.path.join(output_dir, base_fname)
-            vistrails.core.db.io.save_workflow(controller.current_pipeline, filename)
         if not update_vistrail:
             conf = get_vistrails_configuration()
             if conf.has('thumbs'):
@@ -128,7 +115,11 @@ def run_and_get_results(w_list, parameters='', output_dir=None,
                 try:
                     job_version = int(job.version)
                 except ValueError:
-                    job_version =  v.get_version_number(job.version)
+                    try:
+                        job_version =  v.get_version_number(job.version)
+                    except KeyError:
+                        # this is a PE or mashup
+                        continue
                 if version == job_version:
                     current_workflow = job
                     jobMonitor.startWorkflow(job)
@@ -169,7 +160,7 @@ def run_and_get_results(w_list, parameters='', output_dir=None,
 
 ################################################################################
 
-def get_wf_graph(w_list, output_dir=None, pdf=False):
+def get_wf_graph(w_list, output_dir, pdf=False):
     """run_and_get_results(w_list: list of (locator, version), 
                            output_dir:str, pdf:bool)
     Load all workflows in wf_list and dump their graph to output_dir.
@@ -185,6 +176,9 @@ def get_wf_graph(w_list, output_dir=None, pdf=False):
                 controller = GUIVistrailController(v, locator, abstractions, 
                                                    thumbnails, mashups,
                                                    auto_save=False)
+                # FIXME TE: why is this needed
+                controller.current_pipeline_view.set_controller(controller)
+
                 version = None
                 if isinstance(workflow, basestring):
                     version = v.get_version_number(workflow)
@@ -195,9 +189,10 @@ def get_wf_graph(w_list, output_dir=None, pdf=False):
                 else:
                     msg = "Invalid version tag or number: %s" % workflow
                     raise VistrailsInternalError(msg)
-            
-                if (output_dir is not None and 
-                    controller.current_pipeline is not None):
+
+                controller.change_selected_version(version)
+
+                if controller.current_pipeline is not None:
                     controller.updatePipelineScene()
                     if pdf:
                         base_fname = "%s_%s_pipeline.pdf" % \
@@ -260,14 +255,14 @@ def get_vt_graph(vt_list, tree_info, pdf=False):
 
 ################################################################################
 
-def run(w_list, parameters='', output_dir=None, update_vistrail=True,
+def run(w_list, parameters='', update_vistrail=True,
         extra_info=None, reason="Console Mode Execution"):
     """run(w_list: list of (locator, version), parameters: str) -> boolean
     Run all workflows in w_list, version can be a tag name or a version id.
     Returns list of errors (empty list if there are no errors)
     """
     all_errors = []
-    results = run_and_get_results(w_list, parameters, output_dir, 
+    results = run_and_get_results(w_list, parameters,
                                   update_vistrail,extra_info, reason)
     for result in results:
         (objs, errors, executed) = (result.objects,
diff --git a/vistrails/core/data_structures/__init__.py b/vistrails/core/data_structures/__init__.py
index 70e79c3..6b3144f 100644
--- a/vistrails/core/data_structures/__init__.py
+++ b/vistrails/core/data_structures/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/data_structures/bijectivedict.py b/vistrails/core/data_structures/bijectivedict.py
index 4c074dc..5a39b9c 100644
--- a/vistrails/core/data_structures/bijectivedict.py
+++ b/vistrails/core/data_structures/bijectivedict.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/data_structures/graph.py b/vistrails/core/data_structures/graph.py
index 5b1cabf..f3efd47 100644
--- a/vistrails/core/data_structures/graph.py
+++ b/vistrails/core/data_structures/graph.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,18 +35,15 @@
 ###############################################################################
 from __future__ import division
 
-import math
-import random
 import copy
+import random
+import unittest
 
 from itertools import imap, chain, izip
 
-from vistrails.core.utils import all
 from vistrails.core.data_structures.queue import Queue
 from vistrails.core.data_structures.stack import Stack
-
-import unittest
-import random
+from vistrails.core.utils import all
 
 ################################################################################
 # Graph
@@ -54,13 +51,19 @@ import random
 class GraphException(Exception):
     pass
 
+class GraphContainsCycles(GraphException):
+    def __init__(self, v1, v2):
+        self.back_edge = (v1, v2)
+    def __str__(self):
+        return ("Graph contains cycles: back edge %s encountered" %
+                (self.back_edge,))
+
 class Graph(object):
     """Graph holds a graph with possible multiple edges. The
     datastructures are all dictionary-based, so datatypes more general than ints
     can be used. For example:
-    
-    >>> import graph
-    >>> g = graph.Graph()
+
+    >>> g = Graph()
     >>> g.add_vertex('foo')
     >>> g.add_vertex('bar')
     >>> g.add_edge('foo', 'bar', 'edge_foo')
@@ -407,12 +410,8 @@ class Graph(object):
                     visited.add(to)
         return parent
 
-    class GraphContainsCycles(GraphException):
-        def __init__(self, v1, v2):
-            self.back_edge = (v1, v2)
-        def __str__(self):
-            return ("Graph contains cycles: back edge %s encountered" %
-                    self.back_edge)
+    # For legacy reasons, moved after 2.2.1
+    GraphContainsCycles = GraphContainsCycles
 
     def dfs(self,
             vertex_set=None,
@@ -424,7 +423,7 @@ class Graph(object):
         Performs a depth-first search on a graph and returns three dictionaries with
         relevant information. If vertex_set is not None, then it is used as
         the list of ids to perform the DFS on.
-        
+
         See CLRS p. 541.
 
         enter_vertex, when present, is called just before visiting a vertex
@@ -437,46 +436,31 @@ class Graph(object):
         if not vertex_set:
             vertex_set = self.vertices
 
-        # Ugly ugly python
-        # http://mail.python.org/pipermail/python-list/2006-April/378964.html
-
-        # We cannot explicitly "del data":
-        # http://www.python.org/dev/peps/pep-0227/
-
-        class Closure(object):
-            
-            def clear(self):
-                del self.discovery
-                del self.parent
-                del self.finish
-                del self.t
-        
         # Straight CLRS p.541
-        data = Closure()
-        data.discovery = {} # d in CLRS
-        data.parent = {} # \pi in CLRS
-        data.finish = {}  # f in CLRS
-        data.t = 0
+        discovery = {} # d in CLRS
+        parents = {} # \pi in CLRS
+        finish = {}  # f in CLRS
+        t = [0]
 
         (enter, leave, back, other) = xrange(4)
 
         # inspired by http://www.ics.uci.edu/~eppstein/PADS/DFS.py
 
         def handle(v, w, edgetype):
-            data.t += 1
+            t[0] += 1
             if edgetype == enter:
-                data.discovery[v] = data.t
+                discovery[v] = t[0]
                 if enter_vertex:
                     enter_vertex(w)
                 if v != w:
-                    data.parent[w] = v
+                    parents[w] = v
             elif edgetype == leave:
-                data.finish[w] = data.t
+                finish[w] = t[0]
                 if leave_vertex:
                     leave_vertex(w)
             elif edgetype == back and raise_if_cyclic:
-                raise self.GraphContainsCycles(v, w)
-        
+                raise GraphContainsCycles(v, w)
+
         visited = set()
         gray = set()
         # helper function to build stack structure
@@ -508,9 +492,7 @@ class Graph(object):
                             handle(stack.top()[0], parent, leave)
                 handle(vertex, vertex, leave)
 
-        result = (data.discovery, data.parent, data.finish)
-        data.clear()
-        return result
+        return discovery, parents, finish
 
     class VertexHasNoParentError(GraphException):
         def __init__(self, v):
@@ -578,7 +560,7 @@ class Graph(object):
         try:
             x.vertices_topological_sort()
             return True
-        except self.GraphContainsCycles:
+        except GraphContainsCycles:
             return False
 
     ##########################################################################
@@ -887,7 +869,7 @@ class TestGraph(unittest.TestCase):
         g.add_edge(0, 1)
         g.add_edge(1, 2)
         g.add_edge(2, 0)
-        with self.assertRaises(Graph.GraphContainsCycles):
+        with self.assertRaises(GraphContainsCycles):
             g.dfs(raise_if_cyclic=True)
 
     def test_call_inverse(self):
diff --git a/vistrails/core/data_structures/point.py b/vistrails/core/data_structures/point.py
index c7ba0b3..7a7ec4c 100644
--- a/vistrails/core/data_structures/point.py
+++ b/vistrails/core/data_structures/point.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/data_structures/queue.py b/vistrails/core/data_structures/queue.py
index 3dabca1..8874887 100644
--- a/vistrails/core/data_structures/queue.py
+++ b/vistrails/core/data_structures/queue.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/data_structures/rect.py b/vistrails/core/data_structures/rect.py
index a74da4c..2e0f17f 100644
--- a/vistrails/core/data_structures/rect.py
+++ b/vistrails/core/data_structures/rect.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/data_structures/stack.py b/vistrails/core/data_structures/stack.py
index 96c3a23..e6a372e 100644
--- a/vistrails/core/data_structures/stack.py
+++ b/vistrails/core/data_structures/stack.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/db/__init__.py b/vistrails/core/db/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/db/__init__.py
+++ b/vistrails/core/db/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/db/action.py b/vistrails/core/db/action.py
index 03fc02a..12f8fd7 100644
--- a/vistrails/core/db/action.py
+++ b/vistrails/core/db/action.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/db/io.py b/vistrails/core/db/io.py
index 7d8cfc4..81e853e 100644
--- a/vistrails/core/db/io.py
+++ b/vistrails/core/db/io.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/db/locator.py b/vistrails/core/db/locator.py
index d702ad9..46955f6 100644
--- a/vistrails/core/db/locator.py
+++ b/vistrails/core/db/locator.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -41,7 +41,8 @@ import os.path
 from vistrails.core import get_vistrails_application
 from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.system import vistrails_default_file_type, get_elementtree_library, \
-                        default_connections_file, vistrails_examples_directory
+                        default_connections_file, vistrails_examples_directory, \
+                        vistrails_root_directory
 from vistrails.core.external_connection import ExtConnectionList, DBConnection
 from vistrails.core.thumbnails import ThumbnailCache
 from vistrails.core import debug
@@ -535,12 +536,13 @@ class ZIPFileLocator(_ZIPFileLocator, CoreLocator):
 class FileLocator(CoreLocator):
     def __new__(self, filename=None, **kwargs):
         if filename:
-            if filename.endswith('.vt'):
-                return ZIPFileLocator(filename, **kwargs)
-            elif filename.endswith('.vtl'):
+            lname = filename.lower()
+            if lname.endswith('.xml'):
+                return XMLFileLocator(filename, **kwargs)
+            elif lname.endswith('.vtl'):
                 return FileLocator.from_link_file(filename)
             else:
-                return XMLFileLocator(filename, **kwargs)
+                return ZIPFileLocator(filename, **kwargs)
         else:
             #return class based on default file type
             if vistrails_default_file_type() == '.vt':
@@ -749,3 +751,40 @@ class FileLocator(CoreLocator):
                                mashuptrail=mashuptrail,
                                mashupVersion=mashupVersion,
                                parameterExploration=parameterExploration)
+
+
+import unittest
+
+# Test vtl files in usersguide
+class TestUsersGuideVTL(unittest.TestCase):
+    vtl_path = os.path.join(vistrails_root_directory(), '..', 'doc',
+                            'usersguide', 'vtl')
+    @unittest.skipIf(not os.path.isdir(vtl_path), 'Could not find vtl dir')
+    def test_vtl_files(self):
+        from vistrails.tests.utils import run_file
+        for root, dirs, file_names in os.walk(self.vtl_path):
+            for file_name in sorted(file_names):
+                if file_name.endswith('.vtl'):
+                    # update available packages
+                    from vistrails.core.packagemanager import get_package_manager
+                    get_package_manager().build_available_package_names_list()
+                    f = os.path.join(root, file_name)
+                    locator = FileLocator(f)
+                    version = locator._vnode
+                    # if there is a version specified try to execute it,
+                    # else just load the pipeline
+                    if version:
+                        errors = run_file(f, lambda x: x == version)
+                        self.assertEqual(errors, [], 'Errors processing %s: %s' % (f, str(errors)))
+                    else:
+                        import vistrails.core.db.io
+                        from vistrails.core.vistrail.controller import \
+                            VistrailController
+                        loaded_objs = vistrails.core.db.io.load_vistrail(locator)
+                        controller = VistrailController(loaded_objs[0],
+                                                        locator,
+                                                        *loaded_objs[1:])
+                        controller.change_selected_version(
+                            controller.vistrail.get_latest_version())
+                        self.assertTrue(controller.current_pipeline.is_valid,
+                                        "Latest pipeline is invalid: %s" % f)
diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py
index dba1fb4..26da3bf 100644
--- a/vistrails/core/debug.py
+++ b/vistrails/core/debug.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -103,6 +103,15 @@ def unexpected_exception(e, tb=None, frame=None):
     p.reset()
     p.interaction(frame, tb)
 
+_old_excepthook = sys.excepthook
+
+def _excepthook(exctype, value, traceback):
+    unexpected_exception(value, traceback)
+    if _old_excepthook is not None:
+        return _old_excepthook(exctype, value, traceback)
+
+sys.excepthook = _excepthook
+
 ###############################################################################
 
 def _format_exception(etype, value, etb, rtb):
@@ -383,9 +392,7 @@ class DebugPrint(object):
         for d in details:
             if isinstance(d, Exception):
                 d = format_exception(d)
-                msg = '%s\n%s' % (msg, d)
-            else:
-                msg = '%s\n%s' % (msg, d)
+            msg = '%s\n%s' % (msg, d)
         source = inspect.getsourcefile(caller)
         line = caller.f_lineno
         if source and line:
diff --git a/vistrails/core/external_connection.py b/vistrails/core/external_connection.py
index 8c18a82..f8e83ad 100644
--- a/vistrails/core/external_connection.py
+++ b/vistrails/core/external_connection.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/inspector.py b/vistrails/core/inspector.py
index d8525f0..d093639 100644
--- a/vistrails/core/inspector.py
+++ b/vistrails/core/inspector.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -150,35 +150,45 @@ class PipelineInspector(object):
         Inspect the pipeline to see how many cells is needed
         
         """
-        registry = get_module_registry()
         self.spreadsheet_cells = []
-        if not pipeline: return
+        if not pipeline:
+            return
+
+        registry = get_module_registry()
+        # Sometimes we run without the spreadsheet!
+        if not registry.has_module('org.vistrails.vistrails.spreadsheet',
+                                   'SpreadsheetCell'):
+            return
+        cell_desc = registry.get_descriptor_by_name(
+                'org.vistrails.vistrails.spreadsheet',
+                'SpreadsheetCell')
+        output_desc = registry.get_descriptor_by_name(
+                'org.vistrails.vistrails.basic',
+                'OutputModule')
 
         def find_spreadsheet_cells(pipeline, root_id=None):
             if root_id is None:
                 root_id = []
-            # Sometimes we run without the spreadsheet!
-            spreadsheet_pkg = 'org.vistrails.vistrails.spreadsheet'
-            if registry.has_module(spreadsheet_pkg, 'SpreadsheetCell'):
-                # First pass to check cells types
-                cellType = \
-                    registry.get_descriptor_by_name(spreadsheet_pkg,
-                                                    'SpreadsheetCell').module
-                for mId, module in pipeline.modules.iteritems():
-                    desc = registry.get_descriptor_by_name(module.package, 
-                                                           module.name, 
-                                                           module.namespace)
-                    if issubclass(desc.module, cellType):
+            for mId, module in pipeline.modules.iteritems():
+                desc = registry.get_descriptor_by_name(module.package,
+                                                       module.name,
+                                                       module.namespace)
+                # SpreadsheetCell subclasses
+                if registry.is_descriptor_subclass(desc, cell_desc):
+                    self.spreadsheet_cells.append(root_id + [mId])
+                # Output modules with a 'spreadsheet' mode
+                elif registry.is_descriptor_subclass(desc, output_desc):
+                    if desc.module.get_mode_class('spreadsheet') is not None:
                         self.spreadsheet_cells.append(root_id + [mId])
 
             for subworkflow_id in self.find_subworkflows(pipeline):
                 subworkflow = pipeline.modules[subworkflow_id]
                 if subworkflow.pipeline is not None:
-                    find_spreadsheet_cells(subworkflow.pipeline, 
+                    find_spreadsheet_cells(subworkflow.pipeline,
                                            root_id + [subworkflow_id])
 
         find_spreadsheet_cells(pipeline)
-    
+
     def find_subworkflows(self, pipeline):
         if not pipeline: 
             return
diff --git a/vistrails/core/interpreter/__init__.py b/vistrails/core/interpreter/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/interpreter/__init__.py
+++ b/vistrails/core/interpreter/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/interpreter/base.py b/vistrails/core/interpreter/base.py
index ef60f54..726f46a 100644
--- a/vistrails/core/interpreter/base.py
+++ b/vistrails/core/interpreter/base.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/interpreter/cached.py b/vistrails/core/interpreter/cached.py
index 65e89d7..54df4b4 100644
--- a/vistrails/core/interpreter/cached.py
+++ b/vistrails/core/interpreter/cached.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -41,6 +41,8 @@ import copy
 import gc
 import cPickle as pickle
 
+import time
+
 from vistrails.core.common import InstanceObject, VistrailsInternalError
 from vistrails.core.data_structures.bijectivedict import Bidict
 from vistrails.core import debug
@@ -54,6 +56,7 @@ from vistrails.core.modules.module_registry import get_module_registry
 from vistrails.core.modules.vistrails_module import ModuleBreakpoint, \
     ModuleConnector, ModuleError, ModuleErrors, ModuleHadError, \
     ModuleSuspended, ModuleWasSuspended
+from vistrails.core.reportusage import record_usage
 from vistrails.core.utils import DummyView
 import vistrails.core.system
 import vistrails.core.vistrail.pipeline
@@ -156,7 +159,7 @@ class ViewUpdatingLogController(object):
         elif error is None:
             self.view.set_module_success(i)
         else:
-            self.view.set_module_error(i, error)
+            self.view.set_module_error(i, error.msg, error.errorTrace)
 
         if i in self.ids:
             self.ids.remove(i)
@@ -302,6 +305,7 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
         module_executed_hook = fetch('module_executed_hook', [])
         stop_on_error = fetch('stop_on_error', True)
         parent_exec = fetch('parent_exec', None)
+        job_monitor = fetch('job_monitor', None)
 
         reg = get_module_registry()
 
@@ -456,6 +460,7 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
         clean_pipeline = fetch('clean_pipeline', False)
         stop_on_error = fetch('stop_on_error', True)
         parent_exec = fetch('parent_exec', None)
+        job_monitor = fetch('job_monitor', None)
 
         if len(kwargs) > 0:
             raise VistrailsInternalError('Wrong parameters passed '
@@ -492,6 +497,12 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
             obj.moduleInfo['moduleId'] = i
             obj.moduleInfo['pipeline'] = pipeline
             obj.moduleInfo['controller'] = controller
+            # extract job monitor from controller if this is the top level
+            if controller:
+                obj.moduleInfo['job_monitor'] = controller.jobMonitor
+            else:
+                obj.moduleInfo['job_monitor'] = job_monitor
+
             if extra_info is not None:
                 obj.moduleInfo['extra_info'] = extra_info
             if reason is not None:
@@ -545,6 +556,8 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
             if stop_on_error or abort:
                 break
 
+        if Generator.generators:
+            record_usage(generators=len(Generator.generators))
         # execute all generators until inputs are exhausted
         # this makes sure branching and multiple sinks are executed correctly
         if not logging_obj.errors and not logging_obj.suspended and \
@@ -630,13 +643,18 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
 
         self.clean_modules(to_delete)
 
-        def dict2set(s):
-            return set(k for k, v in s.iteritems() if v)
         if view is not None:
-            persistent = set(objs) - (dict2set(errs) | dict2set(execs) |
-                                      dict2set(suspended) | dict2set(cached))
-            for i in persistent:
-                view.set_module_persistent(i)
+            for i in objs:
+                if i in errs:
+                    view.set_module_error(i, errs[i].msg, errs[i].errorTrace)
+                elif i in suspended and suspended[i]:
+                    view.set_module_suspended(i, suspended[i])
+                elif i in execs and execs[i]:
+                    view.set_module_success(i)
+                elif i in cached and cached[i]:
+                    view.set_module_not_executed(i)
+                else:
+                    view.set_module_persistent(i)
 
         if reset_computed:
             for module in self._objects.itervalues():
@@ -658,6 +676,7 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
           actions = fetch('actions', None)
           done_summon_hooks = fetch('done_summon_hooks', [])
           module_executed_hook = fetch('module_executed_hook', [])
+          job_monitor = fetch('job_monitor', None)
 
         Executes a pipeline using caching. Caching works by reusing
         pipelines directly.  This means that there exists one global
@@ -701,12 +720,14 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
         module_executed_hook = fetch('module_executed_hook', [])
         stop_on_error = fetch('stop_on_error', True)
         parent_exec = fetch('parent_exec', None)
+        job_monitor = fetch('job_monitor', None)
 
         if len(kwargs) > 0:
             raise VistrailsInternalError('Wrong parameters passed '
                                          'to execute: %s' % kwargs)
         self.clean_non_cacheable_modules()
 
+        record_usage(execute=True)
 
 #         if controller is not None:
 #             vistrail = controller.vistrail
@@ -721,6 +742,7 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
         else:
             vistrail = None
 
+        time_start = time.time()
         logger = logger.start_workflow_execution(
                 parent_exec,
                 vistrail, pipeline, current_version)
@@ -737,19 +759,24 @@ class CachedInterpreter(vistrails.core.interpreter.base.BaseInterpreter):
         else:
             res = (to_delete, res[0], errors, {}, {}, {}, [])
             for (i, error) in errors.iteritems():
-                view.set_module_error(i, error)
+                view.set_module_error(i, error.msg, error.errorTrace)
         self.finalize_pipeline(pipeline, *(res[:-1]), **new_kwargs)
+        time_end = time.time()
 
         result = InstanceObject(objects=res[1],
-                              errors=res[2],
-                              executed=res[3],
-                              suspended=res[4],
-                              parameter_changes=res[6],
-                              modules_added=modules_added,
-                              conns_added=conns_added)
+                                errors=res[2],
+                                executed=res[3],
+                                suspended=res[4],
+                                parameter_changes=res[6],
+                                modules_added=modules_added,
+                                conns_added=conns_added)
 
         logger.finish_workflow_execution(result.errors, suspended=result.suspended)
 
+        record_usage(time=time_end - time_start, modules=len(res[1]),
+                     errors=len(res[2]), executed=len(res[3]),
+                     suspended=len(res[4]))
+
         return result
 
     def annotate_workflow_execution(self, logger, reason, aliases, params):
diff --git a/vistrails/core/interpreter/default.py b/vistrails/core/interpreter/default.py
index 615596f..d02bc8a 100644
--- a/vistrails/core/interpreter/default.py
+++ b/vistrails/core/interpreter/default.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/interpreter/noncached.py b/vistrails/core/interpreter/noncached.py
index e251e5a..6801689 100644
--- a/vistrails/core/interpreter/noncached.py
+++ b/vistrails/core/interpreter/noncached.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/interpreter/utils.py b/vistrails/core/interpreter/utils.py
index 3cc08c9..0a88b85 100644
--- a/vistrails/core/interpreter/utils.py
+++ b/vistrails/core/interpreter/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/keychain.py b/vistrails/core/keychain.py
index 1f24da6..9dac1aa 100644
--- a/vistrails/core/keychain.py
+++ b/vistrails/core/keychain.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/layout/__init__.py b/vistrails/core/layout/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/layout/__init__.py
+++ b/vistrails/core/layout/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/layout/tree_layout.py b/vistrails/core/layout/tree_layout.py
index 484bc6d..c658976 100644
--- a/vistrails/core/layout/tree_layout.py
+++ b/vistrails/core/layout/tree_layout.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/layout/version_tree_layout.py b/vistrails/core/layout/version_tree_layout.py
index cdd1edb..ecce2f5 100644
--- a/vistrails/core/layout/version_tree_layout.py
+++ b/vistrails/core/layout/version_tree_layout.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/layout/workflow_layout.py b/vistrails/core/layout/workflow_layout.py
index 861e0bc..b988757 100644
--- a/vistrails/core/layout/workflow_layout.py
+++ b/vistrails/core/layout/workflow_layout.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/__init__.py b/vistrails/core/log/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/log/__init__.py
+++ b/vistrails/core/log/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/controller.py b/vistrails/core/log/controller.py
index 45205fe..b619b62 100644
--- a/vistrails/core/log/controller.py
+++ b/vistrails/core/log/controller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -164,7 +164,7 @@ class LogLoopController(object):
         """
         self.loop_exec.ts_end = vistrails.core.system.current_time()
         try:
-            execs = self.controller.children_execs[self.loop_module]
+            execs = self.controller.children_execs[id(self.loop_module)]
             execs.discard(self.loop_exec)
         except KeyError:
             pass
@@ -174,12 +174,12 @@ class LogLoopController(object):
         """
         loop_iteration = self._create_loop_iteration(iteration)
         self.loop_exec.add_loop_iteration(loop_iteration)
-        self.controller.parent_execs[looped_module] = loop_iteration
+        self.controller.parent_execs[id(looped_module)] = loop_iteration
 
     def finish_iteration(self, looped_module):
         """Signals that the iteration is done.
         """
-        loop_iteration = self.controller.parent_execs.get(looped_module)
+        loop_iteration = self.controller.parent_execs.get(id(looped_module))
         assert loop_iteration is not None
 
         loop_iteration.ts_end = vistrails.core.system.current_time()
@@ -219,8 +219,8 @@ class LogWorkflowController(LogController):
 
         This returns a new log controller object for that execution context.
         """
-        if parent_exec in self.module_execs:
-            parent_exec = self.module_execs[parent_exec]
+        if id(parent_exec) in self.module_execs:
+            parent_exec = self.module_execs[id(parent_exec)]
         return LogWorkflowController(self.log, self.machine, parent_exec,
                                      self.workflow_exec)
 
@@ -231,7 +231,7 @@ class LogWorkflowController(LogController):
         getting an exception from a module.
         """
         try:
-            return self.parent_execs[module].iteration
+            return self.parent_execs[id(module)].iteration
         except KeyError:
             return None
 
@@ -244,15 +244,15 @@ class LogWorkflowController(LogController):
         else:
             module_exec = self._create_module_exec(module, module_id,
                                                    module_name, cached)
-        if module in self.module_execs is not None:
+        if id(module) in self.module_execs is not None:
             debug.warning(
                     "%s#start_execution(module=%r, module_id=%r, "
                     "module_name=%r, cached=%r): module already has a "
                     "module_exec! Overwriting" % (
                     type(self).__name__,
                     module, module_id, module_name, cached))
-        self.module_execs[module] = module_exec
-        for parent_exec in (self.parent_execs.get(module), self.parent_exec,
+        self.module_execs[id(module)] = module_exec
+        for parent_exec in (self.parent_execs.get(id(module)), self.parent_exec,
                             self.workflow_exec):
             if parent_exec is not None:
                 parent_exec.add_item_exec(module_exec)
@@ -263,7 +263,7 @@ class LogWorkflowController(LogController):
         """Starts a loop.
         """
         loop_exec = self._create_loop_exec()
-        for parent_exec in (self.module_execs.get(loop_module),
+        for parent_exec in (self.module_execs.get(id(loop_module)),
                             self.parent_exec):
             if parent_exec is not None:
                 if isinstance(parent_exec, GroupExec):
@@ -273,7 +273,7 @@ class LogWorkflowController(LogController):
                 break
         else:
             self.workflow_exec.add_item_exec(loop_exec)
-        self.children_execs.setdefault(loop_module, set()).add(loop_exec)
+        self.children_execs.setdefault(id(loop_module), set()).add(loop_exec)
         return LogLoopController(self, loop_exec, loop_module)
 
     def finish_execution(self, module, error, errorTrace=None, suspended=False):
@@ -282,7 +282,7 @@ class LogWorkflowController(LogController):
         Called by a module after succeeded of suspended, or called by the
         interpreter after an exception.
         """
-        module_exec = self.module_execs.pop(module, None)
+        module_exec = self.module_execs.pop(id(module), None)
         if module_exec is None:
             # The module can finish execution without starting (if it was
             # suspended, etc...)
@@ -303,7 +303,7 @@ class LogWorkflowController(LogController):
         else:
             module_exec.completed = 1
 
-        for child in self.children_execs.pop(module, ()):
+        for child in self.children_execs.pop(id(module), ()):
             child.ts_end = vistrails.core.system.current_time()
             if suspended:
                 child.completed = -2
@@ -322,7 +322,7 @@ class LogWorkflowController(LogController):
             annotation = Annotation(id=a_id,
                                     key=k,
                                     value=v)
-            self.module_execs[module].add_annotation(annotation)
+            self.module_execs[id(module)].add_annotation(annotation)
 
     def insert_workflow_exec_annotations(self, a_dict):
         """Adds an annotation on the whole workflow log object.
diff --git a/vistrails/core/log/group_exec.py b/vistrails/core/log/group_exec.py
index 400f995..2ba55a4 100644
--- a/vistrails/core/log/group_exec.py
+++ b/vistrails/core/log/group_exec.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/log.py b/vistrails/core/log/log.py
index 79c0f9d..b44a3c8 100644
--- a/vistrails/core/log/log.py
+++ b/vistrails/core/log/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/loop_exec.py b/vistrails/core/log/loop_exec.py
index 7936a6e..cfd02fe 100644
--- a/vistrails/core/log/loop_exec.py
+++ b/vistrails/core/log/loop_exec.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/machine.py b/vistrails/core/log/machine.py
index 6c650b5..1d7f0b5 100644
--- a/vistrails/core/log/machine.py
+++ b/vistrails/core/log/machine.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/module_exec.py b/vistrails/core/log/module_exec.py
index 7ac058f..920ef88 100644
--- a/vistrails/core/log/module_exec.py
+++ b/vistrails/core/log/module_exec.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/opm_graph.py b/vistrails/core/log/opm_graph.py
index 67318a1..44540e5 100644
--- a/vistrails/core/log/opm_graph.py
+++ b/vistrails/core/log/opm_graph.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/prov_document.py b/vistrails/core/log/prov_document.py
index 7912984..a6d89d8 100644
--- a/vistrails/core/log/prov_document.py
+++ b/vistrails/core/log/prov_document.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/log/workflow_exec.py b/vistrails/core/log/workflow_exec.py
index c2ed60e..208a386 100644
--- a/vistrails/core/log/workflow_exec.py
+++ b/vistrails/core/log/workflow_exec.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/__init__.py b/vistrails/core/mashup/__init__.py
index 530a4e4..9036316 100644
--- a/vistrails/core/mashup/__init__.py
+++ b/vistrails/core/mashup/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/action.py b/vistrails/core/mashup/action.py
index e6fb7d7..5f31825 100644
--- a/vistrails/core/mashup/action.py
+++ b/vistrails/core/mashup/action.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/action_annotation.py b/vistrails/core/mashup/action_annotation.py
index 0be6a36..3aba283 100644
--- a/vistrails/core/mashup/action_annotation.py
+++ b/vistrails/core/mashup/action_annotation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/alias.py b/vistrails/core/mashup/alias.py
index d616f4d..31c24cb 100644
--- a/vistrails/core/mashup/alias.py
+++ b/vistrails/core/mashup/alias.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/component.py b/vistrails/core/mashup/component.py
index 8da0142..bd33e0f 100644
--- a/vistrails/core/mashup/component.py
+++ b/vistrails/core/mashup/component.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/controller.py b/vistrails/core/mashup/controller.py
index 2a9e7df..2b37678 100644
--- a/vistrails/core/mashup/controller.py
+++ b/vistrails/core/mashup/controller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/mashup.py b/vistrails/core/mashup/mashup.py
index 5b32307..a915851 100644
--- a/vistrails/core/mashup/mashup.py
+++ b/vistrails/core/mashup/mashup.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/mashup/mashup_trail.py b/vistrails/core/mashup/mashup_trail.py
index 205e49a..69d1f80 100644
--- a/vistrails/core/mashup/mashup_trail.py
+++ b/vistrails/core/mashup/mashup_trail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/__init__.py b/vistrails/core/modules/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/modules/__init__.py
+++ b/vistrails/core/modules/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/abstraction.py b/vistrails/core/modules/abstraction.py
index 42fb4aa..44892dc 100644
--- a/vistrails/core/modules/abstraction.py
+++ b/vistrails/core/modules/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -43,7 +43,7 @@ from vistrails.core import debug
 from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.modules.vistrails_module import Module, ModuleError
 from vistrails.core.modules.sub_module import read_vistrail, new_abstraction, \
-    get_abstraction_dependencies, save_abstraction
+    get_abstraction_dependencies, save_abstraction, get_all_abs_namespaces
 import vistrails.core.modules.module_registry
 from vistrails.core.system import vistrails_version, get_vistrails_directory
 from vistrails.core.utils import InvalidPipeline
@@ -87,6 +87,7 @@ def initialize(*args, **kwargs):
                             break
             if add_abstraction:
                 abstraction = None
+                module_version = None
                 try:
                     abstraction = \
                         new_abstraction(abs_name, abs_vistrail, abs_fname)
@@ -110,12 +111,29 @@ def initialize(*args, **kwargs):
                 except Exception, e:
                     cannot_load[abs_name] = (abs_vistrail, e)
                 if abstraction is not None:
-                    options = {'namespace': abstraction.uuid,
-                               'hide_namespace': True,
-                               'version': str(abstraction.internal_version)}
-                    reg.auto_add_module((abstraction, options))
-                    reg.auto_add_ports(abstraction)
-                    # print "Added subworkflow", abs_name, abstraction.uuid
+                    # add descriptors for all available version namespaces
+                    all_namespaces = get_all_abs_namespaces(abs_vistrail)
+                    for ns in all_namespaces:
+                        # hide all but latest version
+                        hide_descriptor = (ns != abstraction.uuid)
+                        # print '()()() adding abstraction', namespace
+                        if reg.has_descriptor_with_name(identifier,
+                                                        abs_name,
+                                                        ns,
+                                                        version,
+                                                        str(abstraction.internal_version)):
+                            # don't add something twice
+                            continue
+                        new_desc = reg.auto_add_module((abstraction,
+                                                        {'package': identifier,
+                                                         'package_version': version,
+                                                         'namespace': ns,
+                                                         'version': str(module_version),
+                                                         'hide_namespace': True,
+                                                         'hide_descriptor': hide_descriptor,
+                                                         }))
+                        reg.auto_add_ports(abstraction)
+                        # print "Added subworkflow", abs_name, abstraction.uuid
                 elif abs_name not in cannot_load:
                     cannot_load[abs_name] = (abs_vistrail, '')
         last_count = len(abs_vistrails)
diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py
index 96107ca..38466f2 100644
--- a/vistrails/core/modules/basic_modules.py
+++ b/vistrails/core/modules/basic_modules.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -352,13 +352,11 @@ class PathObject(object):
         if name.startswith('_repr_') and name.endswith('_'):
             if self._ipython_repr is None:
                 filetype, encoding = mimetypes.guess_type(self.name)
-                if not filetype:
-                    self._ipython_repr = False
-                elif filetype.startswith('image/'):
+                if filetype and filetype.startswith('image/'):
                     self._ipython_repr = display.Image(filename=self.name)
                 else:
                     self._ipython_repr = False
-            elif self._ipython_repr is not False:
+            if self._ipython_repr is not False:
                 return getattr(self._ipython_repr, name)
         raise AttributeError
 
@@ -1033,7 +1031,8 @@ class CodeRunnerMixin(object):
                 locals_[k] = self.get_input(k)
         if use_output:
             for output_portname in self.output_ports_order:
-                locals_[output_portname] = None
+                if output_portname not in self.inputPorts:
+                    locals_[output_portname] = None
         _m = vistrails.core.packagemanager.get_package_manager()
         reg = get_module_registry()
         locals_.update({'fail': fail,
diff --git a/vistrails/core/modules/config.py b/vistrails/core/modules/config.py
index 335298b..482532e 100644
--- a/vistrails/core/modules/config.py
+++ b/vistrails/core/modules/config.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/constant_configuration.py b/vistrails/core/modules/constant_configuration.py
index aba6ebc..585efe0 100644
--- a/vistrails/core/modules/constant_configuration.py
+++ b/vistrails/core/modules/constant_configuration.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/module_configure.py b/vistrails/core/modules/module_configure.py
index 50b3df5..b5ef19f 100644
--- a/vistrails/core/modules/module_configure.py
+++ b/vistrails/core/modules/module_configure.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/module_descriptor.py b/vistrails/core/modules/module_descriptor.py
index 40a5809..490969d 100644
--- a/vistrails/core/modules/module_descriptor.py
+++ b/vistrails/core/modules/module_descriptor.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py
index aa27ae2..7eb7581 100644
--- a/vistrails/core/modules/module_registry.py
+++ b/vistrails/core/modules/module_registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -115,7 +115,7 @@ def _parse_abstraction_name(filename):
             name = name[len(prefix):]
             break
     for suffix in suffixes:
-        if name.endswith(suffix):
+        if name.lower().endswith(suffix):
             name = name[:-len(suffix)]
             break
     return name
@@ -765,13 +765,12 @@ class ModuleRegistry(DBRegistry):
                 package = self.package_versions[(identifier, package_version)]
             except KeyError:
                 raise MissingPackageVersion(identifier, package_version)
-        if not module_version:
-            try:
-                descriptor = package.descriptors[(name, namespace)]
-            except KeyError:
-                raise MissingModule(identifier, name, namespace,
-                                    package_version)
-        else:
+        try:
+            descriptor = package.descriptors[(name, namespace)]
+        except KeyError:
+            raise MissingModule(identifier, name, namespace,
+                                package_version)
+        if module_version:
             descriptor_version_key = (name, namespace, module_version)
             try:
                 descriptor = \
@@ -1057,26 +1056,32 @@ class ModuleRegistry(DBRegistry):
         contents."""
         if '_input_ports' in module.__dict__:
             for port_info in module._input_ports:
+                name = None
                 try:
                     name, sig, kwargs = self.decode_input_port(port_info)
                     self.add_input_port(module, name, sig, **kwargs)
                 except Exception, e:
                     debug.unexpected_exception(e)
-                    debug.critical('Failed to add input port "%s" to module '
-                                   '"%s"' % (name, module.__name__),
-                                   e)
+                    debug.critical(
+                            "Failed to add input port %s to module '%s'" % (
+                                '"%s"' % name if name is not None
+                                else "(unknown)", module.__name__),
+                            e)
                     raise
 
         if '_output_ports' in module.__dict__:
             for port_info in module._output_ports:
+                name = None
                 try:
                     name, sig, kwargs = self.decode_output_port(port_info)
                     self.add_output_port(module, name, sig, **kwargs)
                 except Exception, e:
                     debug.unexpected_exception(e)
-                    debug.critical('Failed to add output port "%s" to module '
-                                   '"%s"' % (name, module.__name__),
-                                   e)
+                    debug.critical(
+                             "Failed to add output port %s to module '%s'" % (
+                                 '"%s"' % name if name is not None
+                                 else "(unknown)", module.__name__),
+                             e)
                     raise
 
     def auto_add_module(self, module):
@@ -1169,7 +1174,7 @@ class ModuleRegistry(DBRegistry):
 
         if identifier is None:
             raise VistrailsInternalError("No package is currently being "
-                                         "loaded and arugment 'package' is "
+                                         "loaded and argument 'package' is "
                                          "not specified.")
 
         package = self.package_versions[(identifier, package_version)]
diff --git a/vistrails/core/modules/module_utils.py b/vistrails/core/modules/module_utils.py
index 2cbbbba..e738c13 100644
--- a/vistrails/core/modules/module_utils.py
+++ b/vistrails/core/modules/module_utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/output_modules.py b/vistrails/core/modules/output_modules.py
index 04538d0..be61669 100644
--- a/vistrails/core/modules/output_modules.py
+++ b/vistrails/core/modules/output_modules.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -40,6 +40,7 @@ from copy import copy
 import os
 import sys
 import unittest
+import warnings
 
 from vistrails.core.configuration import ConfigurationObject, ConfigField, ConfigPath, get_vistrails_persistent_configuration, get_vistrails_temp_configuration
 from vistrails.core.modules.vistrails_module import Module, NotCacheable, ModuleError
@@ -58,7 +59,7 @@ class OutputMode(object):
     def get_config(cls):
         return cls.config_cls
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         raise NotImplementedError("Subclass of OutputMode should implement "
                                   "this")
 
@@ -485,10 +486,13 @@ class FileMode(OutputMode):
             if suffix is None:
                 suffix = ''
             if dirname is None:
-                # FIXME should unify with VisTrails output
-                # directory global!  should check for abspath (if
-                # not, use relative to global output directory)
                 dirname = ''
+            if not os.path.isabs(dirname):
+                vt_output_dir = getattr(get_vistrails_temp_configuration(),
+                                        'outputDirectory',
+                                        None)
+                if vt_output_dir:
+                    dirname = os.path.join(vt_output_dir, dirname)
 
             # seriesPadding and series have defaults so no
             # need to default them
@@ -519,7 +523,7 @@ class FileMode(OutputMode):
 class FileToFileMode(FileMode):
     default_file_extension = None
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         old_fname = output_module.get_input('value').name
         full_path = self.get_filename(configuration,
                                       suffix=(os.path.splitext(old_fname)[1] or
@@ -540,19 +544,19 @@ class FileToFileMode(FileMode):
             raise ModuleError(output_module, msg)
 
 class FileToStdoutMode(StdoutMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         fname = output_module.get_input('value').name
         with open(fname, 'r') as f:
             for line in f:
                 sys.stdout.write(line)
 
 class GenericToStdoutMode(StdoutMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         value = output_module.get_input('value')
         print >>sys.stdout, value
 
 class GenericToFileMode(FileMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         value = output_module.get_input('value')
         filename = self.get_filename(configuration)
         with open(filename, 'w') as f:
@@ -592,18 +596,33 @@ class IPythonMode(OutputMode):
     priority = 400
     config_cls = IPythonModeConfig
 
-    @staticmethod
-    def can_compute():
+    # Set this to enable/disable notebook integration
+    notebook_override = None
+
+    @classmethod
+    def can_compute(cls):
+        if cls.notebook_override is not None:
+            return cls.notebook_override
         try:
-            import __main__ as main
-            if hasattr(main, '__file__'):
-                return False
             import IPython.core.display
-            return True
+            from IPython import get_ipython
+            from IPython.kernel.zmq.zmqshell import ZMQInteractiveShell
         except ImportError:
             return False
+        else:
+            ip = get_ipython()
+            if ip is not None and isinstance(ip, ZMQInteractiveShell):
+                warnings.warn(
+                        "Looks like you might be running from IPython; you "
+                        "might want to call\nvistrails.ipython_mode(True) to "
+                        "enable IPythonMode, allowing output modules to\n"
+                        "render to the notebook.\n"
+                        "If this is wrong, please call "
+                        "vistrails.ipython_mode(False) to get rid of this\n"
+                        "warning.")
+            return False
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         from IPython.core.display import display
 
         value = output_module.get_input('value')
@@ -612,7 +631,7 @@ class IPythonMode(OutputMode):
 class IPythonHtmlMode(IPythonMode):
     mode_type = "ipython"
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         from IPython.core.display import display, HTML
 
         value = output_module.get_input('value')
diff --git a/vistrails/core/modules/package.py b/vistrails/core/modules/package.py
index 805044d..63fc7a0 100644
--- a/vistrails/core/modules/package.py
+++ b/vistrails/core/modules/package.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -47,6 +47,7 @@ from vistrails.core import debug
 from vistrails.core import get_vistrails_application
 from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.modules.module_descriptor import ModuleDescriptor
+from vistrails.core.reportusage import record_usage
 from vistrails.core.utils import versions_increasing, VistrailsInternalError
 from vistrails.db.domain import DBPackage
 
@@ -106,6 +107,8 @@ class Package(DBPackage):
                     (self.package.name,
                      '\n  '.join([dep_string(d) for d in self.dependencies])))
 
+    _warned_contextmenu_notboth = False
+
     def __init__(self, *args, **kwargs):
         if 'load_configuration' in kwargs:
             arg = kwargs['load_configuration']
@@ -318,9 +321,9 @@ class Package(DBPackage):
                     if self._imports_are_good: # only warn first time
                         self._imports_are_good = False
                         debug.warning(
-                            "In package '%s', Please use the 'vistrails.' "
-                            "prefix when importing vistrails packages." %
-                            (self.identifier or self.codepath))
+                            "In package '%s', please use the 'vistrails.' "
+                            "prefix when importing vistrails packages (%s)" %
+                            (self.identifier or self.codepath, name))
                     fixed = pkg
                     name = "vistrails." + name
                     break
@@ -411,6 +414,7 @@ class Package(DBPackage):
 
         self.set_properties()
         self.do_load_configuration()
+        record_usage(loaded_package='%s %s' % (self.identifier, self.version))
 
     def initialize(self):
         if not self._loaded:
@@ -500,9 +504,11 @@ class Package(DBPackage):
             return (hasattr(self.init_module, 'can_handle_identifier') and
                     self.init_module.can_handle_identifier(identifier))
         except Exception, e:
+            debug.unexpected_exception(e)
             debug.critical("Got exception calling %s's can_handle_identifier: "
-                           "%s: %s" % (self.name,
-                                       type(e).__name__, ', '.join(e.args)))
+                           "%s\n%s" % (self.name,
+                                       debug.format_exception(e),
+                                       traceback.format_exc()))
             return False
 
     def can_handle_vt_file(self, name):
@@ -512,9 +518,11 @@ class Package(DBPackage):
             return (hasattr(self.init_module, 'can_handle_vt_file') and
                     self.init_module.can_handle_vt_file(name))
         except Exception, e:
+            debug.unexpected_exception(e)
             debug.critical("Got exception calling %s's can_handle_vt_file: "
-                           "%s: %s" % (self.name,
-                                       type(e).__name__, ', '.join(e.args)))
+                           "%s\n%s" % (self.name,
+                                       debug.format_exception(e),
+                                       traceback.format_exc()))
             return False
 
     def can_handle_missing_modules(self):
@@ -560,35 +568,53 @@ class Package(DBPackage):
                 return self._abs_pkg_upgrades[key][latest_version]
         return None
 
-    def has_contextMenuName(self):
-        return hasattr(self._init_module, 'contextMenuName')
-
-    def contextMenuName(self, signature):
-        return self._init_module.contextMenuName(signature)
-    
-    def has_callContextMenu(self):
-        return hasattr(self._init_module, 'callContextMenu')
-
-    def callContextMenu(self, signature):
-        return self._init_module.callContextMenu(signature)
+    def has_context_menu(self):
+        if hasattr(self._init_module, 'context_menu'):
+            return True
+        name = hasattr(self._init_module, 'contextMenuName')
+        callback = hasattr(self._init_module, 'callContextMenu')
+        if name and callback:
+            return True
+        elif name or callback:
+            if not self._warned_contextmenu_notboth:
+                debug.warning(
+                        "In package '%s', only one of contextMenuName and "
+                        "callContextMenu is provided; the context menu will "
+                        "not be shown" % self.identifier)
+                self._warned_contextmenu_notboth = True
+        return False
+
+    def context_menu(self, signature):
+        if hasattr(self._init_module, 'context_menu'):
+            return self._init_module.context_menu(signature)
+        elif hasattr(self._init_module, 'contextMenuName'):
+            if signature is None:
+                signature = self.name
+            def callMenu():
+                self._init_module.callContextMenu(signature)
+            return [(self._init_module.contextMenuName(signature), callMenu)]
 
     def loadVistrailFileHook(self, vistrail, tmp_dir):
         if hasattr(self._init_module, 'loadVistrailFileHook'):
             try:
                 self._init_module.loadVistrailFileHook(vistrail, tmp_dir)
             except Exception, e:
+                debug.unexpected_exception(e)
                 debug.critical("Got exception in %s's loadVistrailFileHook(): "
-                               "%s: %s" % (self.name, type(e).__name__,
-                                           ', '.join(e.args)))
+                               "%s\n%s" % (self.name,
+                                           debug.format_exception(e),
+                                           traceback.format_exc()))
 
     def saveVistrailFileHook(self, vistrail, tmp_dir):
         if hasattr(self._init_module, 'saveVistrailFileHook'):
             try:
                 self._init_module.saveVistrailFileHook(vistrail, tmp_dir)
             except Exception, e:
+                debug.unexpected_exception(e)
                 debug.critical("Got exception in %s's saveVistrailFileHook(): "
-                               "%s: %s" % (self.name, type(e).__name__,
-                                           ', '.join(e.args)))
+                               "%s\n%s" % (self.name,
+                                           debug.format_exception(e),
+                                           traceback.format_exc()))
 
     def check_requirements(self):
         try:
@@ -607,8 +633,10 @@ class Package(DBPackage):
             try:
                 return callable_()
             except Exception, e:
-                debug.critical("Couldn't load menu items for %s: %s: %s" % (
-                               self.name, type(e).__name__, ', '.join(e.args)))
+                debug.unexpected_exception(e)
+                debug.critical("Couldn't load menu items for %s: %s\n%s" % (
+                               self.name, debug.format_exception(e),
+                               traceback.format_exc()))
 
     def finalize(self):
         if not self._initialized:
@@ -622,8 +650,10 @@ class Package(DBPackage):
             try:
                 callable_()
             except Exception, e:
-                debug.critical("Couldn't finalize %s: %s: %s" % (
-                               self.name, type(e).__name__, ', '.join(e.args)))
+                debug.unexpected_exception(e)
+                debug.critical("Couldn't finalize %s: %s\n%s" % (
+                               self.name, debug.format_exception(e),
+                               traceback.format_exc()))
         # Save configuration
         if self.load_configuration and self.configuration is not None:
             self.persist_configuration()
@@ -642,8 +672,11 @@ class Package(DBPackage):
             try:
                 deps = callable_()
             except Exception, e:
-                debug.critical("Couldn't get dependencies of %s: %s: %s" % (
-                               self.name, type(e).__name__, ', '.join(e.args)))
+                debug.critical(
+                        "Couldn't get dependencies of %s: %s\n%s" % (
+                            self.name, debug.format_exception(e),
+                            traceback.format_exc()))
+                deps = []
 
         if self._module is not None and \
                 hasattr(self._module, '_dependencies'):
diff --git a/vistrails/core/modules/paramexplore.py b/vistrails/core/modules/paramexplore.py
index 8af77a6..c282e31 100644
--- a/vistrails/core/modules/paramexplore.py
+++ b/vistrails/core/modules/paramexplore.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/python_source_configure.py b/vistrails/core/modules/python_source_configure.py
index 260c612..d31a9d2 100644
--- a/vistrails/core/modules/python_source_configure.py
+++ b/vistrails/core/modules/python_source_configure.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/query_configuration.py b/vistrails/core/modules/query_configuration.py
index a0a152c..b1796d0 100644
--- a/vistrails/core/modules/query_configuration.py
+++ b/vistrails/core/modules/query_configuration.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/source_configure.py b/vistrails/core/modules/source_configure.py
index 3deaee1..32d4b9d 100644
--- a/vistrails/core/modules/source_configure.py
+++ b/vistrails/core/modules/source_configure.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/sub_module.py b/vistrails/core/modules/sub_module.py
index 4d0b47e..cacf730 100644
--- a/vistrails/core/modules/sub_module.py
+++ b/vistrails/core/modules/sub_module.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -47,7 +47,7 @@ from vistrails.core.modules import module_registry
 from vistrails.core.modules.basic_modules import identifier as basic_pkg
 from vistrails.core.modules.config import ModuleSettings, IPort, OPort
 from vistrails.core.modules.vistrails_module import Module, InvalidOutput, new_module, \
-    ModuleError, ModuleSuspended
+    ModuleError, ModuleSuspended, ModuleConnector
 from vistrails.core.utils import VistrailsInternalError
 import os.path
 
@@ -188,15 +188,21 @@ class Group(Module):
 
         # Connect Group's external input ports to internal InputPort modules
         for iport_name, conn in self.inputPorts.iteritems():
+            from vistrails.core.modules.basic_modules import create_constant
+            # The type information is lost when passing as Variant,
+            # so we need to use the the final normalized value
+            value = self.get_input(iport_name)
+            temp_conn = ModuleConnector(create_constant(value),
+                                        'value', self.input_specs[iport_name])
             iport_module = self.input_remap[iport_name]
             iport_obj = tmp_id_to_module_map[iport_module.id]
-            iport_obj.set_input_port('ExternalPipe', conn[0])
+            iport_obj.set_input_port('ExternalPipe', temp_conn)
 
         # Execute pipeline
         kwargs = {'logger': self.logging.log.recursing(self),
                   'clean_pipeline': True,
                   'current_version': self.moduleInfo['version']}
-        module_info_args = set(['locator', 'reason', 'extra_info', 'actions'])
+        module_info_args = set(['locator', 'reason', 'extra_info', 'actions', 'job_monitor'])
         for arg in module_info_args:
             if arg in self.moduleInfo:
                 kwargs[arg] = self.moduleInfo[arg]
@@ -268,10 +274,14 @@ def coalesce_port_specs(neighbors, type):
                 raise VistrailsInternalError("Cannot have single port "
                                              "connect to incompatible "
                                              "types")
-            if cur_depth != next_depth:
-                raise VistrailsInternalError("Cannot have single port "
-                                             "connect to types with "
-                                             "different list depth")
+            if 'input' == type and cur_depth > next_depth:
+                # use least depth
+                cur_depth = next_depth
+                cur_descs = next_descs
+            if 'output' == type and cur_depth < next_depth:
+                # use least depth
+                cur_depth = next_depth
+                cur_descs = next_descs
             descs = []
             for cur_desc, next_desc in izip(cur_descs, next_descs):
                 if cur_desc is Variant_desc:
@@ -330,11 +340,14 @@ def get_port_spec_info(pipeline, module):
 ###############################################################################
 
 class Abstraction(Group):
-    _settings = ModuleSettings(name="SubWorkflow", 
+    # We need Abstraction to be a subclass of Group so that the hierarchy of
+    # modules is right
+    # But the pipeline comes from somewhere else, so skip the transfer_attrs()
+    _settings = ModuleSettings(name="SubWorkflow",
                                hide_descriptor=True)
 
-    def __init__(self):
-        Group.__init__(self)
+    def transfer_attrs(self, module):
+        Module.transfer_attrs(self, module)
 
     # the compute method is inherited from Group!
 
@@ -478,14 +491,18 @@ def get_abstraction_dependencies(vistrail, internal_version=-1L):
         vistrail = read_vistrail(vistrail)
     if internal_version == -1L:
         internal_version = vistrail.get_latest_version()
-    # action = vistrail.actionMap[internal_version]
     pipeline = vistrail.getPipeline(internal_version)
-    
+
     packages = {}
-    for module in pipeline.module_list:
-        if module.package not in packages:
-            packages[module.package] = set()
-        packages[module.package].add(module.descriptor_info)
+    def pipeline_deps(pipeline):
+        for module in pipeline.module_list:
+            if module.is_group():
+                pipeline_deps(module.pipeline)
+                continue
+            if module.package not in packages:
+                packages[module.package] = set()
+            packages[module.package].add(module.descriptor_info)
+    pipeline_deps(pipeline)
     return packages
 
 def find_internal_abstraction_refs(pkg, vistrail, internal_version=-1L):
@@ -510,7 +527,7 @@ def parse_abstraction_name(filename, get_all_parts=False):
     uuidpat = hexpat + '{8}-' + hexpat + '{4}-' + hexpat + '{4}-' + hexpat + '{4}-' + hexpat + '{12}'
     prepat = '|'.join(prefixes).replace('.','\\.')
     sufpat = '|'.join(suffixes).replace('.','\\.')
-    pattern = re.compile("(" + prepat + ")?(.+?)(\(" + uuidpat + "\))?(" + sufpat + ")", re.DOTALL)
+    pattern = re.compile("(" + prepat + ")?(.+?)(\(" + uuidpat + "\))?(" + sufpat + ")", re.DOTALL | re.IGNORECASE)
     matchobj = pattern.match(fname)
     prefix, absname, uuid, suffix = [matchobj.group(x) or '' for x in xrange(1,5)]
     if get_all_parts:
diff --git a/vistrails/core/modules/tuple_configuration.py b/vistrails/core/modules/tuple_configuration.py
index e717f7a..46c3912 100644
--- a/vistrails/core/modules/tuple_configuration.py
+++ b/vistrails/core/modules/tuple_configuration.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/utils.py b/vistrails/core/modules/utils.py
index d4b5ff6..0b98571 100644
--- a/vistrails/core/modules/utils.py
+++ b/vistrails/core/modules/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/modules/vistrails_module.py b/vistrails/core/modules/vistrails_module.py
index 71b8e8c..81bf3ce 100644
--- a/vistrails/core/modules/vistrails_module.py
+++ b/vistrails/core/modules/vistrails_module.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,11 +35,11 @@
 ###############################################################################
 from __future__ import division
 
+import ast
 from base64 import b16encode, b16decode
 import copy
-from itertools import izip, product
+from itertools import izip, product, chain
 import json
-import sys
 import time
 import traceback
 import warnings
@@ -135,7 +135,7 @@ class ModuleSuspended(ModuleError):
     This is useful when executing external jobs where you do not want to block
     vistrails while waiting for the execution to finish.
 
-    'monitor' is a class instance that should provide a finished() method for
+    'handle' should be a class instance providing a finished() method for
     checking if the job has finished
 
     'children' is a list of ModuleSuspended instances that is used for nested
@@ -145,13 +145,21 @@ class ModuleSuspended(ModuleError):
     def __init__(self, module, errormsg, handle=None, children=None,
                  queue=None):
         ModuleError.__init__(self, module, errormsg)
-        self.handle = handle
-        if handle is None and queue is not None:
-            warnings.warn("Use of deprecated argument 'queue' replaced by "
-                          "'handle'",
-                          category=VistrailsDeprecation,
-                          stacklevel=2)
-            self.handle = queue
+        if handle is not None:
+            self.handle = handle
+        else:
+            if queue is not None:
+                warnings.warn("Use of deprecated argument 'queue' replaced by "
+                              "'handle'",
+                              category=VistrailsDeprecation,
+                              stacklevel=2)
+                self.handle = queue
+            elif children is None:
+                raise TypeError("__init__(): 'handle' argument not set")
+            else:
+                # parent exceptions has no handle
+                self.handle = None
+
         self.children = children
         self.name = None
 
@@ -593,9 +601,9 @@ class Module(object):
         except Exception, e:
             debug.unexpected_exception(e)
             raise ModuleError(
-                    self,
-                    "Uncaught exception: %s" % debug.format_exception(e),
-                    errorTrace=traceback.format_exc())
+                self,
+                "Uncaught exception: %s" % debug.format_exception(e).rstrip(),
+                errorTrace=traceback.format_exc())
         if self.annotate_output:
             self.annotate_output_values()
         self.upToDate = True
@@ -699,6 +707,8 @@ class Module(object):
 
             ## Getting the result from the output port
             for nameOutput in module.outputPorts:
+                if nameOutput == 'self':
+                    continue
                 if nameOutput not in outputs:
                     outputs[nameOutput] = []
                 output = module.get_output(nameOutput)
@@ -948,13 +958,24 @@ class Module(object):
             ModuleControlParam.WHILE_MAX_KEY, 20))
         delay = float(self.control_params.get(
             ModuleControlParam.WHILE_DELAY_KEY, 0.0))
-        # todo only one state port supported right now
         name_state_input = self.control_params.get(
             ModuleControlParam.WHILE_INPUT_KEY, None)
-        name_state_input = [name_state_input] if name_state_input else None
+        if not name_state_input:
+            name_state_input = None
+        else:
+            try:
+                name_state_input = list(ast.literal_eval(name_state_input))
+            except ValueError:
+                name_state_input = [name_state_input]
         name_state_output = self.control_params.get(
             ModuleControlParam.WHILE_OUTPUT_KEY, None)
-        name_state_output = [name_state_output] if name_state_output else None
+        if not name_state_output:
+            name_state_output = None
+        else:
+            try:
+                name_state_output = list(ast.literal_eval(name_state_output))
+            except ValueError:
+                name_state_output = [name_state_output]
 
         from vistrails.core.modules.basic_modules import create_constant
 
@@ -1166,12 +1187,6 @@ class Module(object):
                     return defaultValue
             raise ModuleError(self, "Missing value from port %s" % port_name)
 
-        # Cannot resolve circular reference here, need to be fixed later
-        from vistrails.core.modules.sub_module import InputPort
-        for conn in self.inputPorts[port_name]:
-            if isinstance(conn.obj, InputPort):
-                return conn()
-
         # Check for generator
         from vistrails.core.modules.basic_modules import Generator
         raw = self.inputPorts[port_name][0].get_raw()
@@ -1185,7 +1200,12 @@ class Module(object):
 
             if (self.input_specs[port_name].depth + self.list_depth > 0) or \
                 self.input_specs[port_name].descriptors() == [list_desc]:
-                return [j for i in self.get_input_list(port_name) for j in i]
+                ret = self.get_input_list(port_name)
+                if len(ret) > 1:
+                    ret = list(chain.from_iterable(ret))
+                else:
+                    ret = ret[0]
+                return ret
 
         # else return first connector item
         value = self.inputPorts[port_name][0]()
@@ -1201,19 +1221,21 @@ class Module(object):
         :returns: a list of all the values being passed in on the input port
         :raises: ``ModuleError`` if there is no value on the port
         """
+        from vistrails.core.modules.basic_modules import List, Variant
 
         if port_name not in self.inputPorts:
             raise ModuleError(self, "Missing value from port %s" % port_name)
         # Cannot resolve circular reference here, need to be fixed later
         from vistrails.core.modules.sub_module import InputPort
-        fromInputPortModule = [connector()
-                               for connector in self.inputPorts[port_name]
-                               if isinstance(connector.obj, InputPort)]
-        if len(fromInputPortModule)>0:
-            return fromInputPortModule
-        ports = []
+        connectors = []
         for connector in self.inputPorts[port_name]:
-            from vistrails.core.modules.basic_modules import List, Variant
+            if isinstance(connector.obj, InputPort):
+                # add external connectors
+                connectors.extend(connector.obj.inputPorts['ExternalPipe'])
+            else:
+                connectors.append(connector)
+        ports = []
+        for connector in connectors:
             value = connector()
             src_depth = connector.depth()
             if not self.input_specs:
@@ -1243,16 +1265,15 @@ class Module(object):
             root = value
             for i in xrange(1, src_depth):
                 try:
-                    # flatten
-                    root = [item for sublist in root for item in sublist]
+                    # only check first item
+                    root = root[0]
                 except TypeError:
                     raise ModuleError(self, "List on port %s has wrong"
                                             " depth %s, expected %s." %
                                             (port_name, i-1, src_depth))
 
             if src_depth and root is not None:
-                self.typeChecking(self, [port_name],
-                                  [[r] for r in root] if src_depth else [[root]])
+                self.typeChecking(self, [port_name], [[root]])
             ports.append(value)
         return ports
 
@@ -1547,11 +1568,11 @@ class Module(object):
         """ job_monitor() -> JobMonitor
         Returns the JobMonitor for the associated controller if it exists
         """
-        controller = self.moduleInfo['controller']
-        if controller is None:
+        if 'job_monitor' not in self.moduleInfo or \
+           not self.moduleInfo['job_monitor']:
             raise ModuleError(self,
-                              "Cannot run job, no controller is specified!")
-        return controller.jobMonitor
+                              "Cannot run job, no job_monitor is specified!")
+        return self.moduleInfo['job_monitor']
 
     @classmethod
     def provide_input_port_documentation(cls, port_name):
@@ -1616,7 +1637,7 @@ class Module(object):
 
     @deprecated("update_upstream_port")
     def updateUpstreamPort(self, *args, **kwargs):
-        return self.updateUpstreamPort(*args, **kwargs)
+        return self.update_upstream_port(*args, **kwargs)
 
 ################################################################################
 
@@ -1732,7 +1753,7 @@ class ModuleConnector(object):
             # flatten list
             for i in xrange(1, depth):
                 try:
-                    value = [item for sublist in value for item in sublist]
+                    value = value[0]
                 except TypeError:
                     raise ModuleError(self.obj, "List on port %s has wrong"
                                       " depth %s, expected %s." %
diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py
index 663ad66..b1c6894 100644
--- a/vistrails/core/packagemanager.py
+++ b/vistrails/core/packagemanager.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -40,6 +40,7 @@ to checking dependencies to initializing them."""
 from __future__ import division
 
 import copy
+from distutils.version import LooseVersion
 import inspect
 import itertools
 import os
@@ -65,19 +66,21 @@ global _package_manager
 _package_manager = None
 
 class PackageManager(object):
-    # # add_package_menu_signal is emitted with a tuple containing the package
-    # # identifier, package name and the menu item
-    # add_package_menu_signal = QtCore.SIGNAL("add_package_menu")
-    # # remove_package_menu_signal is emitted with the package identifier
-    # remove_package_menu_signal = QtCore.SIGNAL("remove_package_menu")
-    # # package_error_message_signal is emitted with the package identifier,
-    # # package name and the error message
-    # package_error_message_signal = QtCore.SIGNAL("package_error_message_signal")
-    # # reloading_package_signal is emitted when a package reload has disabled
-    # # the packages, but has not yet enabled them
-    # reloading_package_signal = QtCore.SIGNAL("reloading_package_signal")
+    """Discovers and loads packages of VisTrails modules.
+
+    Signals:
+    * add_package_menu_signal is emitted with a tuple containing the package
+      identifier, package name and the menu item
+    * remove_package_menu_signal is emitted with the package identifier
+    * package_error_message_signal is emitted with the package identifier,
+      package name and the error message
+    * reloading_package_signal is emitted when a package reload has disabled
+      the packages, but has not yet enabled them
+    """
 
     class DependencyCycle(Exception):
+        """There is a cycle in the dependencies between packages.
+        """
         def __init__(self, p1, p2):
             self._package_1 = p1
             self._package_2 = p2
@@ -87,6 +90,8 @@ class PackageManager(object):
                      self._package_2))
 
     class PackageInternalError(Exception):
+        """An error was raised by the package while it was loading.
+        """
         def __init__(self, n, d):
             self._package_name = n
             self._description = d
@@ -95,9 +100,9 @@ class PackageManager(object):
                                                    self._description)
 
     def import_packages_module(self):
-        """Imports the packages module using path trickery to find it
-        in the right place.
+        """Imports the 'vistrails.packages' package.
 
+        This might need to manipulate the Python path to find it.
         """
         if self._packages is not None:
             return self._packages
@@ -117,9 +122,9 @@ class PackageManager(object):
         return vistrails.packages
 
     def import_user_packages_module(self):
-        """Imports the packages module using path trickery to find it
-        in the right place.
+        """Imports the 'userspackages' package.
 
+        This will need to manipulate the Python path to find it.
         """
         if self._userpackages is not None:
             return self._userpackages
@@ -131,7 +136,7 @@ class PackageManager(object):
             try:
                 import userpackages
             except ImportError:
-                debug.critical('ImportError: "userpackages" sys.path: %s' % 
+                debug.critical('ImportError: "userpackages" sys.path: %s' %
                                sys.path)
                 raise
             finally:
@@ -143,10 +148,6 @@ class PackageManager(object):
         return None
 
     def __init__(self, registry, startup):
-        """__init__(configuration: ConfigurationObject) -> PackageManager
-        configuration is the persistent configuration object of the application.
-        
-        """
         global _package_manager
         if _package_manager:
             m = "Package manager can only be constructed once."
@@ -202,6 +203,12 @@ class PackageManager(object):
 
     def _import_override(self,
                          name, globals={}, locals={}, fromlist=[], level=-1):
+        """Overridden __import__ function.
+
+        This replaces the builtin __import__ function globally so that we can
+        track imports done from a package. This is recorded in the Package so
+        that reloading the package actually reloads all dependent code.
+        """
         # Get the caller module, using globals (like the original __import
         # does)
         try:
@@ -262,9 +269,7 @@ class PackageManager(object):
         return self._orig_import(name, globals, locals, fromlist, level)
 
     def finalize_packages(self):
-        """Finalizes all installed packages. Call this only prior to exiting
-        VisTrails.
-
+        """Finalizes all initialized packages.
         """
         for package in self._package_list.itervalues():
             package.finalize()
@@ -285,9 +290,10 @@ class PackageManager(object):
         return pkg
 
     def add_package(self, codepath, add_to_package_list=True, prefix=None):
-        """Adds a new package to the manager. This does not initialize it.  To
-        do so, call initialize_packages()
+        """Adds a new package to the manager. This does not initialize it.
 
+        You will have to call initialize_packages() to initialize loaded but
+        uninitialized packages.
         """
         package = self.get_available_package(codepath)
         if add_to_package_list:
@@ -310,7 +316,11 @@ class PackageManager(object):
             del self._old_identifier_map[old_id]
 
     def remove_package(self, codepath):
-        """remove_package(name): Removes a package from the system."""
+        """Removes a package from the system.
+
+        Use late_disable_package() in application code so that the
+        configuration is updated.
+        """
         pkg = self._package_list[codepath]
 
         from vistrails.core.interpreter.cached import CachedInterpreter
@@ -329,23 +339,20 @@ class PackageManager(object):
         app.send_notification("package_removed", codepath)
 
     def has_package(self, identifier, version=None):
-        """has_package(identifer: string) -> Boolean.  
-        Returns true if given package identifier is present.
-
+        """Returns true if given package identifier is present.
         """
 
         # check if it's an old identifier
         identifier = self._old_identifier_map.get(identifier, identifier)
         if identifier in self._package_versions:
-            return (version is None or 
+            return (version is None or
                     version in self._package_versions[identifier])
         return False
 
     def look_at_available_package(self, codepath):
-        """look_at_available_package(codepath: string) -> Package
+        """Returns a Package object for an uninitialized package.
 
-        Returns a Package object for an uninstalled package. This does
-        NOT install a package.
+        This does NOT initialize it.
         """
         return self.get_available_package(codepath)
 
@@ -362,7 +369,6 @@ class PackageManager(object):
                 return self._registry.get_package_by_name(identifier, version)
             except MissingPackageVersion:
                 return self._registry.get_package_by_name(identifier)
-            
 
         max_version = '0'
         max_pkg = None
@@ -373,9 +379,9 @@ class PackageManager(object):
         return max_pkg
 
     def get_package_by_codepath(self, codepath):
-        """get_package_by_codepath(codepath: string) -> Package.
-        Returns a package with given codepath if it is enabled,
-        otherwise throws exception
+        """Returns a package with given codepath if it is initialized.
+
+        :raises MissingPackage: if the package is not loaded or initialized.
         """
         if codepath not in self._package_list:
             raise MissingPackage(codepath)
@@ -383,8 +389,7 @@ class PackageManager(object):
             return self._package_list[codepath]
 
     def get_package_by_identifier(self, identifier):
-        """get_package_by_identifier(identifier: string) -> Package.
-        Deprecated, use get_package() instead.
+        """Deprecated, use get_package() instead.
         """
         warnings.warn(
                 "You should use get_package instead of "
@@ -394,13 +399,12 @@ class PackageManager(object):
         return self.get_package(identifier)
 
     def get_package_configuration(self, codepath):
-        """get_package_configuration(codepath: string) ->
-        ConfigurationObject or None
+        """Returns the configuration object for the package, or None.
 
-        Returns the configuration object for the package, if existing,
-        or None. Throws MissingPackage if package doesn't exist.
+        This will only return None if the package exists but has no
+        configuration object.
+        :raises MissingPackage: if the package is not loaded or initialized.
         """
-
         pkg = self.get_package_by_codepath(codepath)
 
         if not hasattr(pkg.module, 'configuration'):
@@ -450,12 +454,7 @@ class PackageManager(object):
         return True
 
     def add_dependencies(self, package):
-        """add_dependencies(package) -> None.  Register all
-        dependencies a package contains by calling the appropriate
-        callback.
-
-        Does not add multiple dependencies - if a dependency is already there,
-        add_dependencies ignores it.
+        """Register all the dependencies of a package contains.
         """
         deps = package.dependencies()
         # FIXME don't hardcode this
@@ -478,9 +477,9 @@ class PackageManager(object):
 
     def late_enable_package(self, codepath, prefix_dictionary={},
                             needs_add=True):
-        """late_enable_package enables a package 'late', that is,
-        after VisTrails initialization. All dependencies need to be
-        already enabled.
+        """Enables a package 'late', i.e. after VisTrails initialization.
+
+        Note that all the dependencies need to already be enabled.
         """
         if needs_add:
             if codepath in self._package_list:
@@ -529,9 +528,9 @@ class PackageManager(object):
         self._startup.save_persisted_startup()
 
     def late_disable_package(self, codepath):
-        """late_disable_package disables a package 'late', that is,
-        after VisTrails initialization. All reverse dependencies need to be
-        already disabled.
+        """Disables a package 'late', i.e. after VisTrails initialization.
+
+        Note that all the reverse dependencies need to already be disabled.
         """
         pkg = self.get_package_by_codepath(codepath)
         self.remove_package(codepath)
@@ -568,13 +567,12 @@ class PackageManager(object):
 
     def initialize_packages(self, prefix_dictionary={},
                             report_missing_dependencies=True):
-        """initialize_packages(prefix_dictionary={}): None
-
-        Initializes all installed packages. If prefix_dictionary is
-        not {}, then it should be a dictionary from package names to
-        the prefix such that prefix + package_name is a valid python
-        import."""
+        """Initializes all installed packages.
 
+        :param prefix_dictionary: dictionary from package names to the prefix
+        such that prefix + package_name is a valid python import.
+        :type prefix_dictionary: dict
+        """
         failed = []
         # import the modules
         app = get_vistrails_application()
@@ -619,8 +617,8 @@ class PackageManager(object):
                         self._package_versions[package.identifier]:
                     raise VistrailsInternalError("Duplicate package version: "
                                                  "'%s' (version %s) in %s" % \
-                                                     (package.identifier, 
-                                                      package.version, 
+                                                     (package.identifier,
+                                                      package.version,
                                                       package.codepath))
                 else:
                     debug.warning('Duplicate package identifier: %s' % \
@@ -665,7 +663,7 @@ class PackageManager(object):
         try:
             g = self._dependency_graph.inverse_immutable()
             sorted_packages = g.vertices_topological_sort()
-        except vistrails.core.data_structures.graph.Graph.GraphContainsCycles, e:
+        except vistrails.core.data_structures.graph.GraphContainsCycles, e:
             raise self.DependencyCycle(e.back_edge[0],
                                        e.back_edge[1])
 
@@ -700,10 +698,10 @@ class PackageManager(object):
         self._startup.save_persisted_startup()
 
     def add_menu_items(self, pkg):
-        """add_menu_items(pkg: Package) -> None
-        If the package implemented the function menu_items(),
-        the package manager will emit a signal with the menu items to
-        be added to the builder window """
+        """Emit the appropriate signal if the package has menu items.
+
+        :type pkg: Package
+        """
         items = pkg.menu_items()
         if items:
             app = get_vistrails_application()
@@ -715,9 +713,10 @@ class PackageManager(object):
             #           items)
 
     def remove_menu_items(self, pkg):
-        """remove_menu_items(pkg: Package) -> None
-        Send a signal with the pkg identifier. The builder window should
-        catch this signal and remove the package menu items"""
+        """Emit the appropriate signal if the package has menu items.
+
+        :type pkg: Package
+        """
         if pkg.menu_items():
             app = get_vistrails_application()
             app.send_notification("pm_remove_package_menu",
@@ -726,56 +725,75 @@ class PackageManager(object):
             #           pkg.identifier)
 
     def show_error_message(self, pkg, msg):
-        """show_error_message(pkg: Package, msg: str) -> None
-        Print a message to standard error output and emit a signal to the
-        builder so if it is possible, a message box is also shown """
-
+        """Print and emit a notification for an error message.
+        """
+        # TODO: isn't debug enough for the UI?
         debug.critical("Package %s (%s) says: %s"%(pkg.name,
                                                    pkg.identifier,
                                                    msg))
         app = get_vistrails_application()
         app.send_notification("pm_package_error_message", pkg.identifier,
                               pkg.name, msg)
-        # self.emit(self.package_error_message_signal,
-        #           pkg.identifier,
-        #           pkg.name,
-        #           msg)
 
     def enabled_package_list(self):
-        """package_list() -> returns list of all enabled packages."""
+        """Returns list of all enabled packages."""
         return self._package_list.values()
 
     def identifier_is_available(self, identifier):
-        """identifier_is_available(identifier: str) -> Pkg
+        """Searchs for an available (but disabled) package.
 
-        returns true if there exists a package with the given
-        identifier in the list of available (ie, disabled) packages.
+        If found, returns succesfully loaded, uninitialized package.
 
-        If true, returns succesfully loaded, uninitialized package."""
+        There can be multiple package versions for a single identifier. If so,
+        return the version that passes requirements, or the latest version.
+        """
+        matches = []
         for codepath in self.available_package_names_list():
             pkg = self.get_available_package(codepath)
             try:
                 pkg.load()
                 if pkg.identifier == identifier:
-                    return pkg
+                    matches.append(pkg)
                 elif identifier in pkg.old_identifiers:
-                    return pkg
+                    matches.append(pkg)
                 if (hasattr(pkg._module, "can_handle_identifier") and
                         pkg._module.can_handle_identifier(identifier)):
-                    return pkg
+                    matches.append(pkg)
             except (pkg.LoadFailed, pkg.InitializationFailed,
                     MissingRequirement):
                 pass
             except Exception, e:
+                debug.warning(
+                    "Error loading package <codepath %s>" % pkg.codepath,
+                    e)
+        if len(matches) == 0:
+            return None
+        elif len(matches) == 1:
+            return matches[0]
+        # return package version that passes requirements
+        valids = []
+        for pkg in matches:
+            try:
+                pkg.check_requirements()
+                valids.append(pkg)
+            except (pkg.LoadFailed, pkg.InitializationFailed,
+                    MissingRequirement):
                 pass
-        return None
+            except Exception, e:
+                debug.warning(
+                    "Package <codepath %s> raised an exception while "
+                    "querying requirements" % pkg.codepath,
+                    e)
+        if len(valids) == 1:
+            return valids[0]
+        elif len(valids) == 0:
+            # return latest invalid package
+            valids = matches
+        # return latest version
+        return sorted(valids, key=lambda x: LooseVersion(x.version))[-1]
 
     def available_package_names_list(self):
-        """available_package_names_list() -> returns list with code-paths of all
-        available packages, by looking at the appropriate directories.
-
-        The distinction between package names, identifiers and
-        code-paths is described in doc/package_system.txt
+        """Returns the list of all available packages' codepaths.
         """
         return self._available_packages.keys()
 
@@ -829,14 +847,18 @@ class PackageManager(object):
         return self._available_packages.keys()
 
     def dependency_graph(self):
-        """dependency_graph() -> Graph.  Returns a graph with package
-        dependencies, where u -> v if u depends on v.  Vertices are
-        strings representing package names."""
+        """Returns a graph with package dependencies.
+
+        Vertices are the package identifiers (strings), and an edge u -> v
+        means that u depends on v.
+
+        :rtype: Graph
+        """
         return self._dependency_graph
 
     def can_be_disabled(self, identifier):
-        """Returns whether has no reverse dependencies (other
-        packages that depend on it."""
+        """Returns whether a package has no reverse dependencies.
+        """
         return self._dependency_graph.in_degree(identifier) == 0
 
     def reverse_dependencies(self, identifier):
@@ -863,7 +885,7 @@ class PackageManager(object):
                             not dep_graph.has_edge(identifier, dep_name):
                         dep_graph.add_edge(identifier, dep_name)
                         process_dependencies(dep_name)
-        
+
         for pkg_identifier in pkg_identifiers:
             process_dependencies(pkg_identifier)
 
@@ -872,11 +894,11 @@ class PackageManager(object):
     def get_ordered_dependencies(self, dep_graph, identifiers=None):
         try:
             sorted_packages = dep_graph.vertices_topological_sort(identifiers)
-        except vistrails.core.data_structures.graph.Graph.GraphContainsCycles, e:
+        except vistrails.core.data_structures.graph.GraphContainsCycles, e:
             raise self.DependencyCycle(e.back_edge[0],
                                        e.back_edge[1])
         return list(reversed(sorted_packages))
-        
+
     def get_all_dependencies(self, identifier, reverse=False, dep_graph=None):
         if dep_graph is None:
             dep_graph = self._dependency_graph
@@ -885,21 +907,21 @@ class PackageManager(object):
             adj_list = dep_graph.inverse_adjacency_list
         else:
             adj_list = dep_graph.adjacency_list
-            
+
         all = [identifier]
         last_adds = [identifier]
         while len(last_adds) != 0:
             adds = [x[0] for y in last_adds for x in adj_list[y]]
             all.extend(adds)
             last_adds = adds
-        
+
         seen = set()
         order = []
         for pkg in reversed(all):
             if pkg not in seen:
                 order.append(pkg)
                 seen.add(pkg)
-        return order        
+        return order
 
     def all_dependencies(self, identifier, dep_graph=None):
         return self.get_all_dependencies(identifier, False, dep_graph)
diff --git a/vistrails/core/packagerepository.py b/vistrails/core/packagerepository.py
index d110c37..ca83796 100644
--- a/vistrails/core/packagerepository.py
+++ b/vistrails/core/packagerepository.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/param_explore.py b/vistrails/core/param_explore.py
index 1c58fe3..1fb9f28 100644
--- a/vistrails/core/param_explore.py
+++ b/vistrails/core/param_explore.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/paramexplore/__init__.py b/vistrails/core/paramexplore/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/paramexplore/__init__.py
+++ b/vistrails/core/paramexplore/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/paramexplore/function.py b/vistrails/core/paramexplore/function.py
index bfd4d44..4612687 100644
--- a/vistrails/core/paramexplore/function.py
+++ b/vistrails/core/paramexplore/function.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/paramexplore/param.py b/vistrails/core/paramexplore/param.py
index 15ce7bf..580a64f 100644
--- a/vistrails/core/paramexplore/param.py
+++ b/vistrails/core/paramexplore/param.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/paramexplore/paramexplore.py b/vistrails/core/paramexplore/paramexplore.py
index c541abb..c45c561 100644
--- a/vistrails/core/paramexplore/paramexplore.py
+++ b/vistrails/core/paramexplore/paramexplore.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/publishing/__init__.py b/vistrails/core/publishing/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/publishing/__init__.py
+++ b/vistrails/core/publishing/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/publishing/parse_latex.py b/vistrails/core/publishing/parse_latex.py
index 3af70a7..4606d92 100644
--- a/vistrails/core/publishing/parse_latex.py
+++ b/vistrails/core/publishing/parse_latex.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/query/__init__.py b/vistrails/core/query/__init__.py
index 73a0de4..d89f71d 100644
--- a/vistrails/core/query/__init__.py
+++ b/vistrails/core/query/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/query/combined.py b/vistrails/core/query/combined.py
index f2fef91..04af150 100644
--- a/vistrails/core/query/combined.py
+++ b/vistrails/core/query/combined.py
@@ -1,6 +1,7 @@
+
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,9 +36,13 @@
 ###############################################################################
 from __future__ import division
 
+from vistrails.core import reportusage
+
 from version import SearchCompiler
 from visual import VisualQuery
 
+from vistrails.core.configuration import get_vistrails_configuration
+
 class CombinedSearch(VisualQuery):
     def __init__(self, search_str=None, pipeline=None, versions_to_check=None,
                  use_regex=False):
@@ -45,43 +50,56 @@ class CombinedSearch(VisualQuery):
         self.search_str = search_str
         self.use_regex = use_regex
 
-    def run(self, vistrail, name):
-        VisualQuery.run(self, vistrail, name)
+    def run(self, controller, name):
+        if self.search_str:
+            reportusage.record_feature('query', controller)
+        if self.queryPipeline is not None and \
+            len(self.queryPipeline.modules) > 0:
+            VisualQuery.run(self, controller, name)
         compiler = SearchCompiler(self.search_str, self.use_regex)
         self.search_stmt = compiler.searchStmt
 
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         if self.queryPipeline is not None and \
                 len(self.queryPipeline.modules) > 0:
             if action.timestep in self.versionDict:
-                return self.search_stmt.match(vistrail, action)
+                return self.search_stmt.match(controller, action)
             return False
         else:
-            return self.search_stmt.match(vistrail, action)
+            return self.search_stmt.match(controller, action)
 
     def matchModule(self, version_id, module):
         if self.queryPipeline is not None and \
                 len(self.queryPipeline.modules) > 0:
-            return VisualQuery.matchModule(self, version_id, module)
-        return True
-    
-    def getResultEntity(self, vistrail, versions_to_check):
+            if VisualQuery.matchModule(self, version_id, module):
+                return self.search_stmt.matchModule(version_id, module)
+            return False
+        else:
+            return self.search_stmt.matchModule(version_id, module)
+
+    def getResultEntity(self, controller, versions_to_check):
         from vistrails.core.collection.vistrail import VistrailEntity
 
-        locators = []
         vistrail_entity = None
         for version in versions_to_check:
-            if version in vistrail.actionMap:
-                action = vistrail.actionMap[version]
-                if self.match(vistrail, action):
+            if version in controller.vistrail.actionMap:
+                action = controller.vistrail.actionMap[version]
+                if getattr(get_vistrails_configuration(), 'hideUpgrades',
+                           True):
+                    # Use upgraded version to match
+                    action = controller.vistrail.actionMap[
+                            controller.vistrail.get_upgrade(action.id, False)]
+                if self.match(controller, action):
                     # have a match, get vistrail entity
                     if vistrail_entity is None:
                         vistrail_entity = VistrailEntity()
                         # don't want to add all workflows, executions
-                        vistrail_entity.set_vistrail(vistrail)
-                    vistrail_entity.add_workflow_entity(version)
+                        vistrail_entity.set_vistrail(controller.vistrail)
+                    # only tagged versions should be displayed in the workspace
+                    tagged_version = controller.get_tagged_version(version)
+                    vistrail_entity.add_workflow_entity(tagged_version)
                     # FIXME this is not done at the low level but in
                     # Collection class, probably should be reworked
-                    vistrail_entity.wf_entity_map[version].parent = \
+                    vistrail_entity.wf_entity_map[tagged_version].parent = \
                         vistrail_entity
         return vistrail_entity
diff --git a/vistrails/core/query/multiple.py b/vistrails/core/query/multiple.py
index 027d632..7fc1b05 100644
--- a/vistrails/core/query/multiple.py
+++ b/vistrails/core/query/multiple.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -48,33 +48,33 @@ class MultipleSearch(Query):
         self.use_regex = use_regex
         self.queries = {}
         self.queries_by_vistrail = {}
-        self.cur_vistrail = None
+        self.cur_controller = None
 
-    def setCurrentVistrail(self, vistrail):
-        self.cur_vistrail = vistrail
+    def setCurrentController(self, controller):
+        self.cur_controller = controller
 
     def run(self):
         for entity, versions_to_check in self.entities_to_check.iteritems():
             query = CombinedSearch(self.search_str, self.queryPipeline, 
                                    versions_to_check, self.use_regex)
-            query.run(entity.vistrail, '')
+            query.run(entity._window.controller, '')
             self.queries[entity] = query
             self.queries_by_vistrail[entity.vistrail] = query
 
-    def match(self, vistrail, action):
-        self.setCurrentVistrail(vistrail)
-        query = self.queries_by_vistrail[vistrail]
-        return query.match(vistrail, action)
+    def match(self, controller, action):
+        self.setCurrentController(controller)
+        query = self.queries_by_vistrail[controller.vistrail]
+        return query.match(controller, action)
 
     def matchModule(self, version_id, module):
-        query = self.queries_by_vistrail[self.cur_vistrail]
+        query = self.queries_by_vistrail[self.cur_controller.vistrail]
         return query.matchModule(version_id, module)
     
     def getResultEntities(self):
         result_entities = []
         for entity, query in self.queries.iteritems():
             versions_to_check = self.entities_to_check[entity]
-            result_entity = query.getResultEntity(entity.vistrail, 
+            result_entity = query.getResultEntity(entity._window.controller,
                                                   versions_to_check)
             if result_entity is not None:
                 # needed for workspace results that are temporary...
diff --git a/vistrails/core/query/version.py b/vistrails/core/query/version.py
index 792085d..165a9b8 100644
--- a/vistrails/core/query/version.py
+++ b/vistrails/core/query/version.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -51,14 +51,22 @@ class SearchParseError(Exception):
     def __init__(self, *args, **kwargs):
         Exception.__init__(self, *args, **kwargs)
 
+
+def validModuleStmt(stmt):
+    """ Modules are only queried by name, and shown by default if
+    name is not given
+    """
+    return type(stmt) in [AndSearchStmt, OrSearchStmt, NotSearchStmt,
+                          ModuleSearchStmt, TrueSearch]
+
 class SearchStmt(object):
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         return True
 
     def matchModule(self, v, m):
-        return True
+        return False
 
-    def run(self, v, n):
+    def run(self, controller, n):
         pass
 
     def __call__(self):
@@ -393,14 +401,14 @@ class TimeSearchStmt(SearchStmt):
         return time.mktime(this)
         
 class BeforeSearchStmt(TimeSearchStmt):
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         if not action.date:
             return False
         t = time.mktime(time_strptime(action.date, "%d %b %Y %H:%M:%S"))
         return t <= self.date
 
 class AfterSearchStmt(TimeSearchStmt):
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         if not action.date:
             return False
         t = time.mktime(time_strptime(action.date, "%d %b %Y %H:%M:%S"))
@@ -417,67 +425,91 @@ class RegexEnabledSearchStmt(SearchStmt):
         if self.use_regex:
             return self.regex.match(v)
         else:
-            return v in self.content
+            return self.content in v
 
 class UserSearchStmt(RegexEnabledSearchStmt):
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         if not action.user:
             return False
         return self._content_matches(action.user)
 
 class NotesSearchStmt(RegexEnabledSearchStmt):
-    def match(self, vistrail, action):
-        if vistrail.has_notes(action.id):
-            plainNotes = extract_text(vistrail.get_notes(action.id))
+    def match(self, controller, action):
+        notes = controller.get_notes(action.id)
+        if notes:
+            plainNotes = extract_text(notes)
             return self._content_matches(plainNotes)
         return False
 
 class NameSearchStmt(RegexEnabledSearchStmt):
-    def match(self, vistrail, action):
-        m = 0
-        tm = vistrail.get_tagMap()
-        if action.timestep in tm:
-            m = self._content_matches(tm[action.timestep])
+    def match(self, controller, action):
+        tag = controller.get_tag(action.timestep) or ''
+        m = self._content_matches(tag)
         if bool(m) == False:
-            m = self._content_matches(vistrail.get_description(action.timestep))
+            m = self._content_matches(controller.vistrail.get_description(action.timestep))
         return bool(m)
 
 class ModuleSearchStmt(RegexEnabledSearchStmt):
-    def match(self, vistrail, action):
-        pipeline = vistrail.getPipeline(action.timestep)
-        for module in pipeline.modules.itervalues():
+    def match(self, controller, action):
+        version = action.timestep
+        from vistrails.core.configuration import get_vistrails_configuration
+        hide_upgrades = getattr(get_vistrails_configuration(),
+                                'hideUpgrades', True)
+        if hide_upgrades:
+            version = controller.create_upgrade(version, delay_update=True)
+        p = controller.get_pipeline(version, do_validate=False)
+        for module in p.modules.itervalues():
             if self._content_matches(module.name):
                 return True
         return False
+    def matchModule(self, v, m):
+        return self._content_matches(m.name)
 
 class AndSearchStmt(SearchStmt):
     def __init__(self, lst):
         self.matchList = lst
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         for s in self.matchList:
-            if not s.match(vistrail, action):
+            if not s.match(controller, action):
                 return False
         return True
+    def matchModule(self, v, m):
+        for s in self.matchList:
+            if validModuleStmt(s):
+                return s.matchModule(v, m)
+        return True
 
 class OrSearchStmt(SearchStmt):
     def __init__(self, lst):
         self.matchList = lst
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         for s in self.matchList:
-            if s.match(vistrail, action):
+            if s.match(controller, action):
                 return True
         return False
+    def matchModule(self, v, m):
+        for s in self.matchList:
+            if validModuleStmt(s):
+                return s.matchModule(v, m)
+        return True
 
 class NotSearchStmt(SearchStmt):
     def __init__(self, stmt):
         self.stmt = stmt
-    def match(self, vistrail, action):
+    def match(self, controller, action):
         return not self.stmt.match(action)
+    def matchModule(self, v, m):
+        if validModuleStmt(self.stmt):
+            return not self.stmt.matchModule(v, m)
+        return False
 
 class TrueSearch(SearchStmt):
     def __init__(self):
         pass
-    def match(self, vistrail, action):
+    def match(self, controller, action):
+        return True
+
+    def matchModule(self, v, m):
         return True
 
 ################################################################################
@@ -487,6 +519,8 @@ class SearchCompiler(object):
     def __init__(self, searchStr, use_regex=False):
         self.searchStmt = self.compile(searchStr, use_regex)
     def compile(self, searchStr, use_regex):
+        if not searchStr or not searchStr.strip():
+            return TrueSearch()
         lst = []
         t1 = searchStr.split(' ')
         while t1:
diff --git a/vistrails/core/query/visual.py b/vistrails/core/query/visual.py
index 91947ea..a696241 100644
--- a/vistrails/core/query/visual.py
+++ b/vistrails/core/query/visual.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -37,6 +37,7 @@ from __future__ import division
 
 from vistrails.core import query
 from vistrails.core.modules.module_registry import get_module_registry
+from vistrails.core import reportusage
 from vistrails.core.utils import append_to_dict_of_lists
 import copy
 import re
@@ -87,11 +88,18 @@ class VisualQuery(query.Query):
             target_ids = nextTargetIds
             template_ids = nextTemplateIds
 
-    def run(self, vistrail, name):
+    def run(self, controller, name):
+        reportusage.record_feature('visualquery', controller)
         result = []
         self.tupleLength = 2
         for version in self.versions_to_check:
-            p = vistrail.getPipeline(version)
+            from vistrails.core.configuration import get_vistrails_configuration
+            hide_upgrades = getattr(get_vistrails_configuration(),
+                                    'hideUpgrades', True)
+            if hide_upgrades:
+                version = controller.create_upgrade(version, delay_update=True)
+            p = controller.get_pipeline(version, do_validate=False)
+
             matches = set()
             queryModuleNameIndex = {}
             for moduleId, module in p.modules.iteritems():
@@ -126,6 +134,7 @@ class VisualQuery(query.Query):
                 
             for m in matches:
                 result.append((version, m))
+
         self.queryResult = result
         self.computeIndices()
         return result
diff --git a/vistrails/core/recent_vistrails.py b/vistrails/core/recent_vistrails.py
index 2503a02..62b3729 100644
--- a/vistrails/core/recent_vistrails.py
+++ b/vistrails/core/recent_vistrails.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/reportusage.py b/vistrails/core/reportusage.py
new file mode 100644
index 0000000..4b205d6
--- /dev/null
+++ b/vistrails/core/reportusage.py
@@ -0,0 +1,333 @@
+##############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+"""Configuration variables for controlling specific things in VisTrails.
+"""
+
+from __future__ import division
+
+import atexit
+import json
+import os
+import requests
+import tempfile
+import usagestats
+import weakref
+
+from vistrails.core import debug
+from vistrails.core.system import vistrails_version, \
+    vistrails_examples_directory
+
+
+usage_report = None
+
+
+def setup_usage_report():
+    """Sets up the usagestats module.
+    """
+    global usage_report
+
+    certificate_file = get_ca_certificate()
+
+    usage_report = usagestats.Stats(
+        '~/.vistrails/usage_stats',
+        usagestats.Prompt(
+            "\nUploading usage statistics is currently disabled\n"
+            "Please help us by providing anonymous usage statistics; "
+            "you can enable this\neither from the GUI or by using "
+            "--enable-usage-stats\n"
+            "If you do not want to see this message again, you can disable "
+            "it from the GUI or with --disable-usage-stats\n"
+            "Nothing will be uploaded before you opt in.\n"),
+        'https://reprozip-stats.poly.edu/',
+        version='VisTrails %s' % vistrails_version(),
+        unique_user_id=True,
+        env_var='VISTRAILS_USAGE_STATS',
+        ssl_verify=certificate_file)
+
+    cwd = os.getcwd()
+    record_usage(cwd_spaces=b' ' in cwd)
+    try:
+        cwd.decode('ascii')
+    except UnicodeDecodeError:
+        record_usage(cwd_ascii=False)
+    else:
+        record_usage(cwd_ascii=True)
+
+
+def update_config(configuration):
+    if getattr(configuration, 'enableUsage', False):
+        usage_report.enable_reporting()
+        configuration.reportUsage = 1
+        return True
+    elif getattr(configuration, 'disableUsage', False):
+        usage_report.disable_reporting()
+        configuration.reportUsage = 0
+        return True
+    return False
+
+
+def record_usage(**kwargs):
+    """Records some info in the current usage report.
+    """
+    if usage_report is not None:
+        debug.debug("record_usage %r" % (kwargs,))
+        usage_report.note(kwargs)
+
+
+saved_vistrails = weakref.WeakValueDictionary()
+features = set()
+features_for_vistrails = {}
+
+
+def record_vistrail(what, vistrail):
+    """Record info about a vistrail we used.
+    """
+    if not usage_report.recording:
+        return
+
+    from vistrails.core.vistrail.controller import VistrailController
+    from vistrails.core.vistrail.pipeline import Pipeline
+    from vistrails.core.vistrail.vistrail import Vistrail
+    from vistrails.db.services.locator import XMLFileLocator
+
+    if isinstance(vistrail, VistrailController):
+        vistrail = vistrail.vistrail
+
+    if what == 'save':
+        # Don't report now, but mark it for reporting when it gets closed
+        saved_vistrails[id(vistrail)] = vistrail
+        return
+    elif what == 'close':
+        i = id(vistrail)
+        if i in saved_vistrails:
+            del saved_vistrails[i]
+            what = 'saved_close'
+        else:
+            return
+
+    if isinstance(vistrail, Vistrail):
+        upgrade_from = set()
+        upgrade_to = set()
+        nb_notes = 0
+        nb_paramexplorations = 0
+        for annotation in vistrail.action_annotations:
+            if annotation.key == Vistrail.UPGRADE_ANNOTATION:
+                upgrade_from.add(annotation.action_id)
+                upgrade_to.add(int(annotation.value))
+            elif annotation.key == Vistrail.NOTES_ANNOTATION:
+                nb_notes += 1
+            elif annotation.key == Vistrail.PARAMEXP_ANNOTATION:
+                nb_paramexplorations += 1
+        nb_upgrades = len(upgrade_from - upgrade_to)
+        if isinstance(vistrail.locator, XMLFileLocator):
+            usage_report.note({'in_examples_dir':
+                os.path.realpath(vistrail.locator._name).startswith(
+                    os.path.realpath(vistrails_examples_directory()))})
+        nb_modules = 0
+        nb_groups = 0
+        nb_abstractions = 0
+        for action in vistrail.actions:
+            if action.id in upgrade_to or action.description == "Upgrade":
+                continue
+            for operation in action.operations:
+                if operation.vtType == 'add' or operation.vtType == 'change':
+                    if operation.what == 'module':
+                        nb_modules += 1
+                        if operation.data.is_group():
+                            nb_groups += 1
+                        elif operation.data.is_abstraction():
+                            nb_abstractions += 1
+        usage_report.note(dict(use_vistrail=what,
+                               nb_versions=len(vistrail.actionMap),
+                               nb_tags=len(vistrail.tags),
+                               nb_notes=nb_notes,
+                               nb_paramexplorations=nb_paramexplorations,
+                               nb_upgrades=nb_upgrades,
+                               nb_variables=len(vistrail.vistrail_variables),
+                               nb_modules=nb_modules,
+                               nb_groups=nb_groups,
+                               nb_abstractions=nb_abstractions))
+        for feature in features_for_vistrails.pop(id(vistrail), ()):
+            usage_report.note({'feature_for_vistrail': feature})
+    elif isinstance(vistrail, Pipeline):
+        usage_report.note(dict(use_workflow=what,
+                               nb_modules=len(vistrail.module_list)))
+    else:
+        raise TypeError
+
+
+def record_feature(feature, vistrail=None):
+    """Record that a feature was used.
+    """
+    from vistrails.core.vistrail.controller import VistrailController
+
+    if vistrail is not None:
+        if isinstance(vistrail, VistrailController):
+            vistrail = vistrail.vistrail
+
+        features_for_vistrails.setdefault(id(vistrail), set()).add(feature)
+    else:
+        features.add(feature)
+
+
+def submit_usage_report(**kwargs):
+    """Submits the current usage report to the usagestats server.
+    """
+    debug.debug("submit_usage_report %r" % (kwargs,))
+
+    for pkg in ('numpy', 'scipy', 'matplotlib'):
+        try:
+            pkg_o = __import__(pkg, globals(), locals())
+            usage_report.note({pkg: getattr(pkg_o, '__version__', '')})
+        except ImportError:
+            pass
+    try:
+        import vtk
+        usage_report.note({'vtk': vtk.vtkVersion().GetVTKVersion()})
+    except ImportError:
+        pass
+
+    features.update(*features_for_vistrails.values())
+    for feature in features:
+        usage_report.note({'feature': feature})
+    usage_report.submit(kwargs,
+                        usagestats.OPERATING_SYSTEM,
+                        usagestats.SESSION_TIME,
+                        usagestats.PYTHON_VERSION)
+
+
+_server_news = None
+
+
+def get_server_news():
+    global _server_news
+
+    if _server_news is not None:
+        return _server_news
+
+    dot_vistrails = os.path.expanduser('~/.vistrails')
+    if not os.path.exists(dot_vistrails):
+        os.mkdir(dot_vistrails)
+
+    file_name = os.path.join(dot_vistrails, 'server_news.json')
+    file_exists = os.path.exists(file_name)
+
+    try:
+        resp = requests.get(
+            'https://reprozip-stats.poly.edu/vistrails_news/%s' %
+            vistrails_version(),
+            timeout=2 if file_exists else 10,
+            stream=True, verify=get_ca_certificate())
+        resp.raise_for_status()
+        if resp.status_code == 304:
+            raise requests.HTTPError(
+                '304 File is up to date, no data returned',
+                response=resp)
+    except requests.RequestException, e:
+        if not e.response or e.response.code != 304:
+            debug.warning("Can't download server news", e)
+    else:
+        try:
+            with open(file_name, 'wb') as f:
+                for chunk in resp.iter_content(4096):
+                    f.write(chunk)
+            resp.close()
+        except Exception, e:
+            try:
+                os.remove(file_name)
+            except OSError:
+                pass
+            raise e
+        debug.log("Downloaded server news")
+
+    if os.path.exists(file_name):
+        with open(file_name, 'r') as f:
+            _server_news = json.load(f)
+    else:
+        _server_news = _default_news
+
+    return _server_news
+
+
+def get_ca_certificate():
+    fd, certificate_file = tempfile.mkstemp(prefix='vistrails_stats_ca_',
+                                            suffix='.pem')
+    with open(certificate_file, 'wb') as fp:
+        fp.write(_ca_certificate)
+    os.close(fd)
+    atexit.register(os.remove, certificate_file)
+    return certificate_file
+
+
+_default_news = {
+    'version': '20160304',
+    'news_html': None,
+    'usage_report_prompt_html':
+        u"<p>Please help us by reporting anonymous statistics about how you "
+        u"use VisTrails.</p><p>We would like to collect high-level details "
+        u"like which packages you use, which features, the size of your "
+        u"workflows and version trees, ... This information is reported "
+        u"anonymously and will only be used by the VisTrails team, to help "
+        u"guide our efforts.</p>",
+}
+
+
+_ca_certificate = b'''\
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIJAMmlcDnTidBEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
+BAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwITmV3IFlvcmsxDDAK
+BgNVBAoMA05ZVTERMA8GA1UEAwwIUmVwcm9aaXAxKDAmBgkqhkiG9w0BCQEWGXJl
+cHJvemlwLWRldkB2Z2MucG9seS5lZHUwHhcNMTQxMTA3MDUxOTA5WhcNMjQxMTA0
+MDUxOTA5WjB+MQswCQYDVQQGEwJVUzERMA8GA1UECAwITmV3IFlvcmsxETAPBgNV
+BAcMCE5ldyBZb3JrMQwwCgYDVQQKDANOWVUxETAPBgNVBAMMCFJlcHJvWmlwMSgw
+JgYJKoZIhvcNAQkBFhlyZXByb3ppcC1kZXZAdmdjLnBvbHkuZWR1MIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1fuTW2snrVji51vGVl9hXAAZbNJ+dxG+
+/LOOxZrF2f1RRNy8YWpeCfGbsZqiIEjorBv8lvdd9P+tD3M5sh9L0zQPU9dFvDb+
+OOrV0jx59hbK3QcCQju3YFuAtD1lu8TBIPgGEab0eJhLVIX+XU5cYXrfoBmwCpN/
+1wXWkUhN91ZVMA0ylATAxTpnoNuMKzfTxT8pyOWajiTskYkKmVBAxgYJQe1YDFA8
+fglBNkQuHqP8jgYAniEBCAPZRMMq8WpOtyFx+L9LX9/WcHtAQyDPPb9M81KKgPQq
+urtCqtuDKxuqcX9zg4/O8l4nZ50pwaJjbH4kMW/wnLzTPvzZCPtJYQIDAQABo1Aw
+TjAdBgNVHQ4EFgQUJjhDDOup4P0cdrAVq1F9ap3yTj8wHwYDVR0jBBgwFoAUJjhD
+DOup4P0cdrAVq1F9ap3yTj8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
+AQEAeKpTiy2WYPqevHseTCJDIL44zghDJ9w5JmECOhFgPXR9Hl5Nh9S1j4qHBs4G
+cn8d1p2+8tgcJpNAysjuSl4/MM6hQNecW0QVqvJDQGPn33bruMB4DYRT5du1Zpz1
+YIKRjGU7Of3CycOCbaT50VZHhEd5GS2Lvg41ngxtsE8JKnvPuim92dnCutD0beV+
+4TEvoleIi/K4AZWIaekIyqazd0c7eQjgSclNGgePcdbaxIo0u6tmdTYk3RNzo99t
+DCfXxuMMg3wo5pbqG+MvTdECaLwt14zWU259z8JX0BoeVG32kHlt2eUpm5PCfxqc
+dYuwZmAXksp0T0cWo0DnjJKRGQ==
+-----END CERTIFICATE-----
+'''
diff --git a/vistrails/core/repository/__init__.py b/vistrails/core/repository/__init__.py
index d1486d2..3edd58b 100644
--- a/vistrails/core/repository/__init__.py
+++ b/vistrails/core/repository/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/repository/poster/__init__.py b/vistrails/core/repository/poster/__init__.py
index 459141d..9bf8efb 100644
--- a/vistrails/core/repository/poster/__init__.py
+++ b/vistrails/core/repository/poster/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/repository/poster/encode.py b/vistrails/core/repository/poster/encode.py
index 8495486..78d3c4b 100644
--- a/vistrails/core/repository/poster/encode.py
+++ b/vistrails/core/repository/poster/encode.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/repository/poster/streaminghttp.py b/vistrails/core/repository/poster/streaminghttp.py
index e0a1f5a..4942c53 100644
--- a/vistrails/core/repository/poster/streaminghttp.py
+++ b/vistrails/core/repository/poster/streaminghttp.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/requirements.py b/vistrails/core/requirements.py
index 5858695..480c860 100644
--- a/vistrails/core/requirements.py
+++ b/vistrails/core/requirements.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/startup.py b/vistrails/core/startup.py
index fb69add..ce463bf 100644
--- a/vistrails/core/startup.py
+++ b/vistrails/core/startup.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/system/__init__.py b/vistrails/core/system/__init__.py
index 7283f42..915d44f 100644
--- a/vistrails/core/system/__init__.py
+++ b/vistrails/core/system/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -209,6 +209,7 @@ def set_vistrails_default_file_type(t):
 
     """
     global __defaultFileType
+    t = t.lower()
     if t in ['.vt', '.xml']:
         __defaultFileType = t
     else:
@@ -298,7 +299,7 @@ def default_connections_file():
     """
     return os.path.join(current_dot_vistrails(), 'connections.xml')
 
-VERSION = '2.2'
+VERSION = '2.2.4'
 def vistrails_version():
     """vistrails_version() -> string - Returns the current VisTrails version."""
     # 0.1 was the Vis2005 version
@@ -381,7 +382,7 @@ def about_string():
     """about_string() -> string - Returns the about string for VisTrails."""
     return """VisTrails version %s (%s) -- contact at vistrails.org
 
-Copyright (C) 2014-2015 New York University. Copyright (C) 2011-2014 NYU-Poly.
+Copyright (C) 2014-2016 New York University. Copyright (C) 2011-2014 NYU-Poly.
 Copyright (C) 2006-2011 University of Utah.
 All rights reserved.
 http://www.vistrails.org
diff --git a/vistrails/core/system/common.py b/vistrails/core/system/common.py
index c3e3f02..98bdafc 100644
--- a/vistrails/core/system/common.py
+++ b/vistrails/core/system/common.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/system/linux.py b/vistrails/core/system/linux.py
index cc44110..07cd595 100644
--- a/vistrails/core/system/linux.py
+++ b/vistrails/core/system/linux.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/system/mac_site.py b/vistrails/core/system/mac_site.py
index 91c8277..4930d6a 100644
--- a/vistrails/core/system/mac_site.py
+++ b/vistrails/core/system/mac_site.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/system/osx.py b/vistrails/core/system/osx.py
index 81352c5..223f1fc 100644
--- a/vistrails/core/system/osx.py
+++ b/vistrails/core/system/osx.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/system/unix.py b/vistrails/core/system/unix.py
index 1ef6ab7..d71b7de 100644
--- a/vistrails/core/system/unix.py
+++ b/vistrails/core/system/unix.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/system/windows.py b/vistrails/core/system/windows.py
index 87a8647..af5fd55 100644
--- a/vistrails/core/system/windows.py
+++ b/vistrails/core/system/windows.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/theme.py b/vistrails/core/theme.py
index b314afc..93fd10e 100644
--- a/vistrails/core/theme.py
+++ b/vistrails/core/theme.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/thumbnails.py b/vistrails/core/thumbnails.py
index dbf01d0..8b5078d 100644
--- a/vistrails/core/thumbnails.py
+++ b/vistrails/core/thumbnails.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -49,8 +49,7 @@ import mimetypes
 # Remove line below when it is fixed here: http://bugs.python.org/issue15207
 mimetypes.init(files=[])
 from vistrails.core import debug, system
-from vistrails.core.configuration import get_vistrails_configuration, \
-      get_vistrails_persistent_configuration
+from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.utils import VistrailsInternalError
 
 ############################################################################
diff --git a/vistrails/core/upgradeworkflow.py b/vistrails/core/upgradeworkflow.py
index 5af737e..d9aa1dd 100644
--- a/vistrails/core/upgradeworkflow.py
+++ b/vistrails/core/upgradeworkflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -38,7 +38,11 @@
 upgrade requests."""
 from __future__ import division
 
+import copy
+import os
+
 from vistrails.core import debug
+from vistrails.core.configuration import get_vistrails_configuration
 import vistrails.core.db.action
 from vistrails.core.modules.module_registry import get_module_registry, \
      ModuleDescriptor, MissingModule, MissingPort, MissingPackage
@@ -52,8 +56,8 @@ from vistrails.core.vistrail.connection import Connection
 from vistrails.core.vistrail.port import Port
 from vistrails.core.vistrail.port_spec import PortSpec
 from vistrails.core.vistrail.port_spec_item import PortSpecItem
-from vistrails.core.utils import versions_increasing
-import copy
+from vistrails.core.utils import versions_increasing, InvalidPipeline
+
 
 ##############################################################################
 
@@ -693,7 +697,7 @@ class UpgradeWorkflowHandler(object):
                                                      internal_version,
                                                      not use_registry)
 
-        return UpgradeWorkflowHandler.replace_generic(controller, pipeline, 
+        return UpgradeWorkflowHandler.replace_generic(controller, pipeline,
                                                       old_module, new_module,
                                                       function_remap, 
                                                       src_port_remap, 
@@ -770,12 +774,18 @@ class UpgradeWorkflowHandler(object):
             elif isinstance(new_module_type, basestring):
                 new_module_t = parse_descriptor_string(new_module_type,
                                                        old_module_t[0])
+            elif isinstance(new_module_type, ModuleDescriptor):
+                new_module_t = new_module_type.spec_tuple
             else:
                 new_module_desc = reg.get_descriptor(new_module_type)
                 new_module_t = new_module_desc.spec_tuple
 
             new_pkg_version = module_remap.output_version
-            if (new_pkg_version is None or
+            next_module_remap = None
+            if isinstance(new_module_type, ModuleDescriptor):
+                new_module_desc = new_module_type
+                use_registry = False
+            elif (new_pkg_version is None or
                   reg.get_package_by_name(new_module_t[0]).version == new_pkg_version):
                 # upgrading to the current version
                 try:
@@ -788,7 +798,6 @@ class UpgradeWorkflowHandler(object):
                     else:
                         raise e
                 use_registry = True
-                next_module_remap = None
             else:
                 new_module_desc = ModuleDescriptor(package=new_module_t[0],
                                                    name=new_module_t[1],
@@ -806,9 +815,9 @@ class UpgradeWorkflowHandler(object):
                                                                  old_version)
                 old_module_t = new_module_t
             replace_module = UpgradeWorkflowHandler.replace_module
-            actions = replace_module(controller, 
+            actions = replace_module(controller,
                                      tmp_pipeline,
-                                     module_id, 
+                                     module_id,
                                      new_module_desc,
                                      module_remap.function_remap,
                                      module_remap.src_port_remap,
@@ -820,8 +829,11 @@ class UpgradeWorkflowHandler(object):
             for a in actions:
                 for op in a.operations:
                     # Update the id of the module being updated
+                    # FIXME: This is brittle
+                    # This assumes first added module is the correct one
                     if op.vtType == 'add' and op.what == 'module':
                         module_id = op.objectId
+                        break
                 tmp_pipeline.perform_action(a)
 
             action_list.extend(actions)
@@ -1003,6 +1015,148 @@ class TestUpgradePackageRemap(unittest.TestCase):
             app.temp_configuration.upgrades = default_upgrades
             app.temp_configuration.upgradeDelay = default_upgrade_delay
 
+    def test_looping_pipeline_fix(self):
+        """Chains upgrades and automatic package initialization."""
+        # Expected actions are as follow:
+        #  - loads workflow.xml
+        #  * pipeline is missing looping_fix.a version 0.1
+        #  - enables looping_fix.a (version 0.2)
+        #  * pipeline is still missing looping_fix.a version 0.1
+        #  - runs upgrade for looping_fix.a, 0.1 -> 0.2
+        #  - upgrade changes modules to package looping_fix.b version 0.1
+        #  * pipeline is missing looping_fix.b version 0.1
+        #  - enables looping_fix.b (version 0.2)
+        #  * pipeline is still missing looping_fix.b version 0.1
+        #  - runs upgrade for looping_fix.b, 0.1 -> 0.2
+        #  - upgrade changes modules to package looping_fix.c version 1.0
+        #  * pipeline is missing looping_fix.c version 1.0
+        #  - enables looping_fix.c (version 1.0)
+        #  * pipeline is valid
+        # 5 calls to handle_invalid_pipeline()
+
+        # Pre-adds packages so that the package manager can find them
+        packages = ['pkg_a', 'pkg_b', 'pkg_c']
+        prefix = 'vistrails.tests.resources.looping_upgrades.'
+        pm = get_package_manager()
+        for pkg in packages:
+            pm.get_available_package(pkg, prefix=prefix)
+        self.assertFalse(set(pkg.codepath for pkg in pm.enabled_package_list())
+                         .intersection(packages))
+
+        # Hooks handle_invalid_pipeline()
+        from vistrails.core.vistrail.controller import VistrailController
+        orig_hip = VistrailController.handle_invalid_pipeline
+        count = [0]
+        def new_hip(*args, **kwargs):
+            count[0] += 1
+            return orig_hip(*args, **kwargs)
+        VistrailController.handle_invalid_pipeline = new_hip
+        try:
+
+            # Loads workflow.xml
+            from vistrails.core.db.io import load_vistrail
+            from vistrails.core.db.locator import FileLocator
+            from vistrails.core.system import vistrails_root_directory
+
+            locator = FileLocator(os.path.join(
+                    vistrails_root_directory(),
+                    'tests', 'resources', 'looping_upgrades',
+                    'workflow.xml'))
+            loaded_objs = load_vistrail(locator)
+            controller = VistrailController(
+                    loaded_objs[0], locator, *loaded_objs[1:])
+
+            # Select version (triggers all the validation/upgrade/loading)
+            self.assertEqual(controller.get_latest_version_in_graph(), 1)
+            controller.do_version_switch(1)
+
+            self.assertEqual(count[0], 5)
+        # Restores handle_invalid_pipeline()
+        finally:
+            VistrailController.handle_invalid_pipeline = orig_hip
+            # disable packages
+            for pkg in reversed(packages):
+                try:
+                    pm.late_disable_package(pkg)
+                except MissingPackage:
+                    pass
+
+    def test_infinite_looping_upgrade(self):
+        """Test that circular upgrades fail gracefully"""
+        # Expected actions are as follow:
+        #  - loads workflow2.xml
+        #  * pipeline is missing looping_fix.x version 0.1
+        #  - enables looping_fix.x (version 0.2)
+        #  * pipeline is still missing looping_fix.x version 0.1
+        #  - runs upgrade for looping_fix.x, 0.1 -> 0.2
+        #  - upgrade changes modules to package looping_fix.y version 0.1
+        #  * pipeline is missing looping_fix.y version 0.1
+        #  - enables looping_fix.y (version 0.2)
+        #  * pipeline is still missing looping_fix.y version 0.1
+        # Loop 50 times:
+        #  - runs upgrade for looping_fix.y, 0.1 -> 0.2
+        #  - upgrade changes modules to package looping_fix.x version 0.1
+        #  * pipeline is missing looping_fix.x version 0.1
+        #  - runs upgrade for looping_fix.x, 0.1 -> 0.2
+        #  - upgrade changes modules to package looping_fix.y version 0.1
+        #  * pipeline is missing looping_fix.y version 0.1
+        # 50 calls to handle_invalid_pipeline()
+
+        # Pre-adds packages so that the package manager can find them
+        packages = ['pkg_x', 'pkg_y']
+        prefix = 'vistrails.tests.resources.looping_upgrades.'
+        pm = get_package_manager()
+        for pkg in packages:
+            pm.get_available_package(pkg, prefix=prefix)
+
+        # Hooks handle_invalid_pipeline()
+        from vistrails.core.vistrail.controller import VistrailController
+        orig_hip = VistrailController.handle_invalid_pipeline
+        count = [0]
+        def new_hip(*args, **kwargs):
+            count[0] += 1
+            return orig_hip(*args, **kwargs)
+        VistrailController.handle_invalid_pipeline = new_hip
+        try:
+
+            # Loads workflow.xml
+            from vistrails.core.db.io import load_vistrail
+            from vistrails.core.db.locator import FileLocator
+            from vistrails.core.system import vistrails_root_directory
+
+            locator = FileLocator(os.path.join(
+                    vistrails_root_directory(),
+                    'tests', 'resources', 'looping_upgrades',
+                    'workflow2.xml'))
+            loaded_objs = load_vistrail(locator)
+            controller = VistrailController(
+                    loaded_objs[0], locator, *loaded_objs[1:])
+
+            # Select version (triggers all the validation/upgrade/loading)
+            self.assertEqual(controller.get_latest_version_in_graph(), 1)
+            try:
+                controller.do_version_switch(1)
+            except InvalidPipeline:
+                pass
+            else:
+                self.fail('No InvalidPipeline exception raised!')
+
+        # Restores handle_invalid_pipeline()
+        finally:
+            VistrailController.handle_invalid_pipeline = orig_hip
+            # disable packages
+            for pkg in reversed(packages):
+                try:
+                    pm.late_disable_package(pkg)
+                except MissingPackage:
+                    pass
+        # make sure it looped 50 times before failing
+        max_loops = getattr(get_vistrails_configuration(),
+                            'maxPipelineFixAttempts', 50)
+        self.assertEqual(count[0], max_loops)
+        # Check that original version gets selected
+        self.assertEqual(1, controller.current_version)
+
 if __name__ == '__main__':
     import vistrails.core.application
 
diff --git a/vistrails/core/utils/__init__.py b/vistrails/core/utils/__init__.py
index ff7220e..55e7007 100644
--- a/vistrails/core/utils/__init__.py
+++ b/vistrails/core/utils/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -160,7 +160,7 @@ class VistrailsInternalError(Exception):
 
     """
     def __str__(self):
-        return "Vistrails Internal Error: " + str(self.message)
+        return "Vistrails Internal Error: %s" % Exception.__str__(self)
 
 class VersionTooLow(Exception):
     """VersionTooLow is raised when you're running an outdated version of
@@ -705,7 +705,7 @@ class TestCommon(unittest.TestCase):
                 f(1, 2)
             self.assertEqual(len(w), 1)
             w, = w
-            self.assertEqual(w.message.message, msg)
+            self.assertEqual(w.message.args, (msg,))
             self.assertEqual(w.category, VistrailsDeprecation)
             self.assertTrue(canon_path(w.filename),
                             canon_path(__file__))
diff --git a/vistrails/core/utils/color.py b/vistrails/core/utils/color.py
index d0e2dcd..6231cf0 100644
--- a/vistrails/core/utils/color.py
+++ b/vistrails/core/utils/color.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/utils/enum.py b/vistrails/core/utils/enum.py
index 183e4b4..a1839da 100644
--- a/vistrails/core/utils/enum.py
+++ b/vistrails/core/utils/enum.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/utils/expression.py b/vistrails/core/utils/expression.py
index 47e1e97..5f1cd1a 100644
--- a/vistrails/core/utils/expression.py
+++ b/vistrails/core/utils/expression.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/utils/gcutils.py b/vistrails/core/utils/gcutils.py
index 6d9badd..0571d6b 100644
--- a/vistrails/core/utils/gcutils.py
+++ b/vistrails/core/utils/gcutils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/utils/timemethod.py b/vistrails/core/utils/timemethod.py
index 7bbe5d3..7fd5f0a 100644
--- a/vistrails/core/utils/timemethod.py
+++ b/vistrails/core/utils/timemethod.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/utils/tracemethod.py b/vistrails/core/utils/tracemethod.py
index 85a8702..8dc3965 100644
--- a/vistrails/core/utils/tracemethod.py
+++ b/vistrails/core/utils/tracemethod.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/utils/uxml.py b/vistrails/core/utils/uxml.py
index 1f7902a..5fc2d46 100644
--- a/vistrails/core/utils/uxml.py
+++ b/vistrails/core/utils/uxml.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/__init__.py b/vistrails/core/vistrail/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/core/vistrail/__init__.py
+++ b/vistrails/core/vistrail/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/abstraction.py b/vistrails/core/vistrail/abstraction.py
index 718a5ae..ac95beb 100644
--- a/vistrails/core/vistrail/abstraction.py
+++ b/vistrails/core/vistrail/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/action.py b/vistrails/core/vistrail/action.py
index 44f94c0..e88906f 100644
--- a/vistrails/core/vistrail/action.py
+++ b/vistrails/core/vistrail/action.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/action_annotation.py b/vistrails/core/vistrail/action_annotation.py
index 81b55b7..b05a3cd 100644
--- a/vistrails/core/vistrail/action_annotation.py
+++ b/vistrails/core/vistrail/action_annotation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/annotation.py b/vistrails/core/vistrail/annotation.py
index fb48fad..3269f85 100644
--- a/vistrails/core/vistrail/annotation.py
+++ b/vistrails/core/vistrail/annotation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/connection.py b/vistrails/core/vistrail/connection.py
index a70e4c9..b88bf90 100644
--- a/vistrails/core/vistrail/connection.py
+++ b/vistrails/core/vistrail/connection.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,7 +35,6 @@
 ###############################################################################
 from __future__ import division
 
-from vistrails.core.configuration import get_vistrails_configuration
 """ This python module defines Connection class.
 """
 import copy
diff --git a/vistrails/core/vistrail/controller.py b/vistrails/core/vistrail/controller.py
index e87efca..77dce14 100644
--- a/vistrails/core/vistrail/controller.py
+++ b/vistrails/core/vistrail/controller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -162,6 +162,9 @@ class VistrailController(object):
         self._current_full_graph = None
         self._current_terse_graph = None
         self.show_upgrades = False
+        # if delayed_update is True, version tree and 'changed' status
+        # needs to be updated
+        self.delayed_update = False
         self.num_versions_always_shown = 1
 
         # if self.search is True, vistrail is currently being searched
@@ -242,6 +245,8 @@ class VistrailController(object):
         self.id_scope = id_scope
         self.current_session = -1
         self.log = Log()
+        self.flush_pipeline_cache()
+        self.clear_delayed_actions()
         if self.vistrail is not None:
             self.id_scope = self.vistrail.idScope
             self.current_session = self.vistrail.idScope.getNewId("session")
@@ -535,7 +540,7 @@ class VistrailController(object):
             vistrail.set_notes(from_version, "")
             vistrail.set_notes(to_version, notes)
 
-    def flush_delayed_actions(self):
+    def flush_delayed_actions(self, delay_update=False):
         start_version = self.current_version
         desc_key = Action.ANNOTATION_DESCRIPTION
         added_upgrade = False
@@ -567,12 +572,19 @@ class VistrailController(object):
         # We have to do moves after the delayed actions because the pipeline
         # may have been updated
         added_moves = self.flush_move_actions()
+        self.clear_delayed_actions()
+        if added_upgrade or added_moves:
+            if delay_update:
+                self.delayed_update = True
+            else:
+                self.recompute_terse_graph()
+                self.invalidate_version_tree(False)
+
+    def clear_delayed_actions(self):
         self._delayed_actions = []
         self._delayed_paramexps = []
         self._delayed_mashups = []
-        if added_upgrade or added_moves:
-            self.recompute_terse_graph()
-            self.invalidate_version_tree(False)
+
 
     def perform_action(self, action, do_validate=True, raise_exception=False):
         """ performAction(action: Action) -> timestep
@@ -2999,8 +3011,10 @@ class VistrailController(object):
                     pass
                 # An upgrade: get its children directly
                 # (unless it is tagged, and that tag couldn't be moved)
-                elif (not self.show_upgrades and child in upgrades and
-                        child not in tm):
+                elif (not self.show_upgrades and
+                      (child in upgrades or
+                       am[child].description == 'Upgrade') and
+                      child not in tm):
                     all_children.extend(
                         to for to, _ in fullVersionTree.adjacency_list[child]
                         if to in am)
@@ -3070,7 +3084,7 @@ class VistrailController(object):
         al.sort()
 
         configuration = get_vistrails_configuration()
-        use_custom_colors = configuration.check('enableCustomVersionColors')
+        use_custom_colors = configuration.check('customVersionColors')
 
         if isinstance(filename, basestring):
             fp = open(filename, 'wb')
@@ -3284,10 +3298,35 @@ class VistrailController(object):
                                    "Upgrade")
         return new_action
 
-    def handle_invalid_pipeline(self, e, new_version, vistrail=None,
-                                report_all_errors=False, force_no_delay=False):
+    def check_delayed_update(self):
+        if self.delayed_update:
+            self.delayed_update = False
+            self.set_changed(True)
+            self.recompute_terse_graph()
+            self.invalidate_version_tree(False)
+
+    def handle_invalid_pipeline(self, e, new_version=-1, vistrail=None,
+                                report_all_errors=False, force_no_delay=False,
+                                delay_update=False, level=0, pipeline_only=False):
+        debug.debug('Running handle_invalid_pipeline on %d' % new_version)
+        if delay_update:
+            force_no_delay = True
+        def check_exceptions(exception_set):
+            unhandled_exceptions = []
+            for err in exception_set:
+                if isinstance(err, InvalidPipeline):
+                    sub_exceptions = check_exceptions(err.get_exception_set())
+                    if len(sub_exceptions) > 0:
+                        new_err = InvalidPipeline(sub_exceptions,
+                                                  err._pipeline,
+                                                  err._version)
+                        unhandled_exceptions.append(new_err)
+                else:
+                    if not err._was_handled:
+                        unhandled_exceptions.append(err)
+            return unhandled_exceptions
+
         load_other_versions = False
-        # print 'running handle_invalid_pipeline'
         if vistrail is None:
             vistrail = self.vistrail
         pm = get_package_manager()
@@ -3296,15 +3335,15 @@ class VistrailController(object):
         def process_missing_packages(exception_set):
             for err in exception_set:
                 err._was_handled = False
-                # print '--- trying to fix', str(err)
                 # FIXME need to get module_id from these exceptions
                 # when possible!  need to integrate
                 # report_missing_module and handle_module_upgrade
                 if isinstance(err, InvalidPipeline):
                     process_missing_packages(err.get_exception_set())
                 elif isinstance(err, MissingPackage):
-                    #check if the package was already installed before (because
-                    #it was in the dependency list of a previous package
+                    # check if the package was already installed before
+                    # (because it was in the dependency list of a previous
+                    # package)
                     if err._identifier not in missing_packages:
                         missing_packages[err._identifier] = []
                     missing_packages[err._identifier].append(err)
@@ -3326,22 +3365,14 @@ class VistrailController(object):
                                 for pkg_id in deps
                                 if pkg_id in missing])
 
-        # for identifier, err_list in missing_packages.iteritems():
         for identifier in enable_pkgs:
-            # print 'testing identifier', identifier
             if not pm.has_package(identifier):
                 try:
-                    # print 'trying to enable package'
-                    if not self.try_to_enable_package(identifier):
-                        pass
-                        # print 'failed to enable package'
-                        # if not report_all_errors:
-                        #     raise err
-                    else:
+                    if self.try_to_enable_package(identifier):
                         for err in missing_packages[identifier]:
                             err._was_handled = True
                 except Exception, new_e:
-                    print '&&& hit other exception'
+                    debug.unexpected_exception(new_e)
                     new_exceptions.append(new_e)
                     if not report_all_errors:
                         raise new_e
@@ -3349,11 +3380,11 @@ class VistrailController(object):
                 if identifier in missing_packages.iterkeys():
                     for err in missing_packages[identifier]:
                         err._was_handled = True
-            # else assume the package was already enabled
+                # else assume the package was already enabled
 
         if len(new_exceptions) > 0:
-            # got new exceptions
-            pass
+            raise InvalidPipeline(check_exceptions(root_exceptions) + new_exceptions,
+                                  e._pipeline, new_version)
 
         def process_package_versions(exception_set):
             for err in exception_set:
@@ -3365,7 +3396,7 @@ class VistrailController(object):
                     # try and load other version of package?
                     err._was_handled = True
                     pass
-        
+
         # instead of upgrading, may wish to load the old version of
         # the package if possible
         if load_other_versions:
@@ -3377,12 +3408,12 @@ class VistrailController(object):
             for err in exception_set:
                 if err._was_handled:
                     continue
-                # print '+++ trying to fix', str(err)
                 if isinstance(err, InvalidPipeline):
+                    # handle invalid group/abstraction
                     id_scope = IdScope(1, {Group.vtType: Module.vtType,
                                            Abstraction.vtType: Module.vtType})
                     id_remap = {}
-                    new_pipeline = err._pipeline.do_copy(True, id_scope, 
+                    new_pipeline = err._pipeline.do_copy(True, id_scope,
                                                          id_remap)
                     new_exception_set = []
                     for sub_err in err.get_exception_set():
@@ -3392,16 +3423,27 @@ class VistrailController(object):
                             new_exception_set.append(sub_err)
                         else:
                             new_exception_set.append(sub_err)
-                            
+
                     # set id to None so db saves correctly
                     new_pipeline.id = None
+                    # FIXME: We should not temporarily replace id_scope
                     old_id_scope = self.id_scope
                     self.id_scope = id_scope
-                    inner_actions = \
-                        process_package_exceptions(new_exception_set,
-                                                   new_pipeline)
-                    self.id_scope = old_id_scope
-                    if len(inner_actions) > 0:
+
+                    # run handle_invalid_pipeline to fix multi-step upgrades
+                    try:
+                        _, new_pipeline = \
+                            self.handle_invalid_pipeline(err,
+                                                    report_all_errors=True,
+                                                    pipeline_only=True)
+                    except InvalidPipeline, e:
+                        # Group cannot be fixed
+                        # we just keep the old invalid group
+                        debug.unexpected_exception(e)
+                        raise e
+                    finally:
+                        self.id_scope = old_id_scope
+                    if new_pipeline != err._pipeline:
                         # create action that recreates group/subworkflow
                         old_module = pipeline.modules[err._module_id]
                         if old_module.is_group():
@@ -3411,22 +3453,9 @@ class VistrailController(object):
                             for action in my_actions:
                                 pipeline.perform_action(action)
                             new_actions.extend(my_actions)
-# This code shouldn't ever be reachable because invalid abstraction pipelines are handled when they're initially loaded.
-#                        elif old_module.is_abstraction():
-#                            # add new version to the abstraction
-#                            # then update the current pipeline by replacing
-#                            # abstraction module
-#
-#                            # FIXME finish this code
-#                            my_actions = \
-#                                UpgradeWorkflowHandler.replace_abstraction(
-#                                self, pipeline, old_module.id, inner_actions)
-#                            for action in my_actions:
-#                                pipeline.perform_action(action)
-#                            new_actions.extend(my_actions)
-                        
-                elif (isinstance(err, MissingModule) or 
-                      isinstance(err, MissingPackageVersion) or 
+
+                elif (isinstance(err, MissingModule) or
+                      isinstance(err, MissingPackageVersion) or
                       isinstance(err, MissingModuleVersion)):
                     if err._identifier not in package_errs:
                         package_errs[err._identifier] = []
@@ -3440,11 +3469,11 @@ class VistrailController(object):
                     continue
                 details = '\n'.join(debug.format_exception(e)
                                     for e in err_list)
-                debug.log('Processing upgrades in package "%s"' %
+                debug.debug('Processing upgrades in package "%s"' %
                           identifier, details)
                 if pkg.can_handle_all_errors():
                     try:
-                        actions = pkg.handle_all_errors(self, err_list, 
+                        actions = pkg.handle_all_errors(self, err_list,
                                                         pipeline)
                         if actions is not None:
                             for action in actions:
@@ -3453,28 +3482,11 @@ class VistrailController(object):
                             for err in err_list:
                                 err._was_handled = True
                     except Exception, new_e:
+                        debug.unexpected_exception(new_e)
                         new_exceptions.append(new_e)
                         if not report_all_errors:
                             return new_actions
-#                 elif pkg.can_handle_upgrades():
-#                     print '  handle upgrades'
-#                     for err in err_list:
-#                         try:
-#                             actions = pkg.handle_module_upgrade_request(
-#                                 self, err._module_id, pipeline)
-#                             if actions is not None:
-#                                 print 'handled', pipeline.modules[err._module_id].name
-#                                 for action in actions:
-#                                     pipeline.perform_action(action)
-#                                 new_actions.extend(actions)
-#                                 print 'OK'
-#                                 err._was_handled = True
-#                         except Exception, new_e:
-#                             new_exceptions.append(new_e)
-#                             if not report_all_errors:
-#                                 return
                 else:
-                    # print '  default upgrades'
                     # process default upgrades
                     # handler = UpgradeWorkflowHandler(self, pipeline)
                     for err in err_list:
@@ -3487,8 +3499,7 @@ class VistrailController(object):
                                 new_actions.extend(actions)
                                 err._was_handled = True
                         except Exception, new_e:
-                            import traceback
-                            traceback.print_exc()
+                            debug.unexpected_exception(new_e)
                             new_exceptions.append(new_e)
 
                 if pkg.can_handle_missing_modules():
@@ -3497,7 +3508,7 @@ class VistrailController(object):
                             continue
                         if isinstance(err, MissingModule):
                             try:
-                                res = pkg.handle_missing_module(self, 
+                                res = pkg.handle_missing_module(self,
                                                                 err._module_id,
                                                                 pipeline)
                                 # need backward compatibility
@@ -3513,6 +3524,7 @@ class VistrailController(object):
                                         new_actions.extend(actions)
                                         err._was_handled = True
                             except Exception, new_e:
+                                debug.unexpected_exception(new_e)
                                 new_exceptions.append(new_e)
                                 if not report_all_errors:
                                     return new_actions
@@ -3522,23 +3534,33 @@ class VistrailController(object):
             cur_pipeline = copy.copy(e._pipeline)
             # note that cur_pipeline is modified to be the result of
             # applying the actions in new_actions
-            new_actions = process_package_exceptions(root_exceptions, 
+            new_actions = process_package_exceptions(root_exceptions,
                                                      cur_pipeline)
         else:
             new_actions = []
             cur_pipeline = e._pipeline
 
-        if len(new_actions) > 0:
+        if not pipeline_only and len(new_actions) > 0:
             upgrade_action = self.create_upgrade_action(new_actions)
-            param_exps = self.vistrail.get_paramexps(new_version)
+            # check if we should use pending param_exps
+            if (get_vistrails_configuration().check('upgradeDelay') and not force_no_delay
+                and self._delayed_paramexps):
+                param_exps = self._delayed_paramexps
+                self._delayed_paramexps = []
+            else:
+                param_exps = self.vistrail.get_paramexps(new_version)
             new_param_exps = []
             if len(param_exps) > 0:
                 (module_remap, is_complete) = \
                                     self.get_upgrade_module_remap(new_actions)
                 if is_complete:
                     for pe in param_exps:
-                        new_pe = pe.do_copy(True, self.id_scope, module_remap)
-                        new_param_exps.append(new_pe)
+                        old_pe = None
+                        # loop because we may have multi-step upgrades
+                        while old_pe != pe:
+                            old_pe = pe
+                            pe = pe.do_copy(True, self.id_scope, module_remap)
+                        new_param_exps.append(pe)
                 else:
                     debug.warning("Cannot translate old parameter "
                                   "explorations through upgrade.")
@@ -3549,6 +3571,8 @@ class VistrailController(object):
                         mashup = mashuptrail
             new_mashups = []
             if mashup:
+                # mashups are not delayable
+                force_no_delay = True
                 (mfp_remap, is_complete) = \
                                 self.get_simple_upgrade_remap(new_actions)
                 if is_complete:
@@ -3574,12 +3598,12 @@ class VistrailController(object):
                                 c.vtid = mfp_remap[(ModuleParam.vtType,
                                                      c.vtid)]
                     mashup.currentVersion = mashup.getLatestVersion()
-                    
+
                     new_mashups.append(mashup)
                 else:
                     debug.warning("Cannot translate old mashup "
                                   "through upgrade.")
-            
+
             if get_vistrails_configuration().check('upgradeDelay') and not force_no_delay:
                 self._delayed_actions.append(upgrade_action)
                 self._delayed_paramexps.extend(new_param_exps)
@@ -3600,222 +3624,183 @@ class VistrailController(object):
                         action.mashup.version = new_version
                     self._mashups.append(mashup)
 
-                self.set_changed(True)
-                self.recompute_terse_graph()
-
-        def check_exceptions(exception_set):
-            unhandled_exceptions = []
-            for err in exception_set:
-                if isinstance(err, InvalidPipeline):
-                    sub_exceptions = check_exceptions(err.get_exception_set())
-                    if len(sub_exceptions) > 0:
-                        new_err = InvalidPipeline(sub_exceptions, 
-                                                  err._pipeline,
-                                                  err._version)
-                        unhandled_exceptions.append(new_err)
+                if delay_update:
+                    self.delayed_update = True
                 else:
-                    if not err._was_handled:
-                        unhandled_exceptions.append(err)
-            return unhandled_exceptions
+                    self.set_changed(True)
+                    self.recompute_terse_graph()
 
         left_exceptions = check_exceptions(root_exceptions)
+        # If exceptions unchanged, fail.
+        debug.debug(('handle_invalid_pipeline finished with %d fixed, %d left, '
+                     'and %d new exceptions') % ((len(root_exceptions) -
+                                                  len(left_exceptions)),
+                                                 len(left_exceptions),
+                                                 len(new_exceptions)))
+        if (len(left_exceptions) == len(root_exceptions) and
+            len(new_exceptions) == 0):
+            debug.debug('handle_invalid_pipeline failed to validate version '
+                        '%d: %d errors left.' % (new_version,
+                                               len(root_exceptions)))
+            raise InvalidPipeline(left_exceptions + new_exceptions,
+                                  cur_pipeline, new_version)
+        new_err = None
+        # do we have new exceptions or did we reduce the existing ones?
         if len(left_exceptions) > 0 or len(new_exceptions) > 0:
-            e = InvalidPipeline(left_exceptions + new_exceptions,
-                                cur_pipeline, new_version)
-            debug.format_exception(e)
-            raise e
-        return (new_version, cur_pipeline)
+            new_err = InvalidPipeline(left_exceptions + new_exceptions,
+                                      cur_pipeline, new_version)
+        else:
+            # All handled, check if validating generates further exceptions.
+            try:
+                self.validate(cur_pipeline)
+            except InvalidPipeline, e:
+                e._version = new_version
+                new_err = e
+
+        if new_err is not None:
+            # There are still unresolved exceptions (old or new), try to
+            # run handle_invalid_pipeline again.
+            # each level creates a new upgrade
+            level += 1
+            max_loops = getattr(get_vistrails_configuration(),
+                                'maxPipelineFixAttempts', 50)
+            if level >= max_loops:
+                debug.critical(
+                        "Pipeline-fixing loop doesn't seem to "
+                        "be finishing, giving up after %d "
+                        "iterations. You may have circular "
+                        "upgrade paths!" % level)
+            else:
+                debug.debug('Recursing handle_invalid_pipeline on '
+                            'version %d to level %d' % (new_version, level))
+                return self.handle_invalid_pipeline(new_err,
+                                                    new_version,
+                                                    vistrail,
+                                                    report_all_errors,
+                                                    force_no_delay,
+                                                    delay_update,
+                                                    level,
+                                                    pipeline_only)
+            raise new_err
+        return new_version, cur_pipeline
 
     def validate(self, pipeline, raise_exception=True):
         vistrail_vars = self.get_vistrail_variables()
         pipeline.validate(raise_exception, vistrail_vars)
-    
-    def do_version_switch(self, new_version, report_all_errors=False, 
+
+    def version_switch_cost(self, descendant, ancestor):
+        """ Version switch cost as action distance
+
+        """
+        cost = 0
+        am = self.vistrail.actionMap
+        if descendant == -1:
+            descendant = 0
+        while descendant != ancestor:
+            descendant = am[descendant].parent
+            cost += 1
+        return cost
+
+    def do_version_switch(self, new_version, report_all_errors=False,
                           do_validate=True, from_root=False):
         """ do_version_switch(new_version: int,
-                              resolve_all_errors: boolean) -> None        
+                              resolve_all_errors: boolean) -> None
         Change the current vistrail version into new_version, reporting
         either the first error or all errors.
-        
+
+        """
+        new_error = None
+        try:
+            self.current_pipeline = self.get_pipeline(new_version,
+                                                      do_validate=do_validate,
+                                                      from_root=from_root,
+                                                      use_current=True)
+            self.current_version = new_version
+        except InvalidPipeline, e:
+            try:
+                self.current_version, self.current_pipeline = \
+                    self.validate_version(new_version,
+                                          report_all_errors,
+                                          from_root)
+            except InvalidPipeline, e:
+                # just do the version switch anyway, but alert the
+                # user to the remaining issues
+                self.current_pipeline = e._pipeline
+                self.current_version = e._version
+                new_error = e
+
+        if new_version != self.current_version:
+            self.invalidate_version_tree(False)
+        if new_error is not None:
+            raise new_error
+
+    def validate_version(self, version, report_all_errors=False,
+                         from_root=False, delay_update=False, use_current=True):
+        """ validates a pipeline version and returns the updated version
+
+        version: the version to validate
+        report_all_errors: Do not stop at first error
+        from_root: do not try to use an existing pipeline
+        delay_update: Delay version tree update
+        use_current: Use current pipeline when searching for closest pipeline
+
+        Returns the valid (version, pipeline) or raises an InvalidPipeline exception
         """
 
         # This is tricky code, so watch carefully before you change
         # it.  The biggest problem is that we want to perform state
         # changes only after all exceptions have been handled, but
         # creating a pipeline every time is too slow. The solution
-        # then is to mutate currentPipeline, and in case exceptions
+        # then is to mutate the pipeline, and in case exceptions
         # are thrown, we roll back by rebuilding the pipeline from
         # scratch as the first thing on the exception handler, so to
         # the rest of the exception handling code, things look
         # stateless.
 
-        def get_cost(descendant, ancestor):
-            cost = 0
-            am = self.vistrail.actionMap
-            if descendant == -1:
-                descendant = 0
-            while descendant != ancestor:
-                descendant = am[descendant].parent
-                cost += 1
-            return cost
-        
-        def switch_version(version, allow_fail=False):
-            if self.current_version != -1 and not self.current_pipeline:
-                debug.warning("current_version is not -1 and "
-                              "current_pipeline is None")
-            if version != self.current_version:
-                # clear delayed actions
-                # FIXME: invert the delayed actions and integrate them into
-                # the general_action_chain?
-                if len(self._delayed_actions) > 0:
-                    self._delayed_actions = []
-                    self.current_pipeline = Pipeline()
-                    self.current_version = 0
-            if version == -1:
-                return None
-
-            # now we reuse some existing pipeline, even if it's the
-            # empty one for version zero
-            #
-            # The available pipelines are in self._pipelines, plus
-            # the current pipeline.
-            # Fast check: do we have to change anything?
-            if from_root:
-                result = self.vistrail.getPipeline(version)
-            elif version == self.current_version:
-                # Changing to current pipeline
-                # We only need to run validation if it was previously invalid
-                # (or didn't get validated)
-                result = self.current_pipeline
-                if self.current_pipeline.is_valid:
-                    return result
-            # Fast check: if target is cached, copy it and we're done.
-            elif version in self._pipelines:
-                result = copy.copy(self._pipelines[version])
-            else:
-                # Find the closest upstream pipeline to the current one
-                cv = self._current_full_graph.inverse_immutable().closest_vertex
-                closest = cv(version, self._pipelines)
-                cost_to_closest_version = get_cost(version, closest)
-                # Now we have to decide between the closest pipeline
-                # to version and the current pipeline
-                shared_parent = getSharedRoot(self.vistrail, 
-                                              [self.current_version, 
-                                               version])
-                cost_common_to_old = get_cost(self.current_version, 
-                                              shared_parent)
-                cost_common_to_new = get_cost(version, shared_parent)
-                cost_to_current_version = cost_common_to_old + \
-                    cost_common_to_new
-                # FIXME I'm assuming copying the pipeline has zero cost.
-                # Formulate a better cost model
-                if cost_to_closest_version < cost_to_current_version:
-                    if closest == 0:
-                        result = self.vistrail.getPipeline(version)
-                    else:
-                        result = copy.copy(self._pipelines[closest])
-                        action = self.vistrail.general_action_chain(closest, 
-                                                                    version)
-                        result.perform_action(action)
-                else:
-                    action = \
-                        self.vistrail.general_action_chain(self.current_version,
-                                                           version)
-                    if self.current_version == -1 or self.current_version == 0:
-                        result = Pipeline()
-                    else:
-                        result = copy.copy(self.current_pipeline)
-                    result.perform_action(action)
-                if self._cache_pipelines and \
-                        self.vistrail.has_tag(long(version)):
-                    # stash a copy for future use
-                    if do_validate:
-                        try:
-                            self.validate(result)
-                        except InvalidPipeline:
-                            if not allow_fail:
-                                raise
-                        else:
-                            self._pipelines[version] = copy.copy(result)
-                    else:
-                        self._pipelines[version] = copy.copy(result)
-            if do_validate:
+        def _validate_version(version):
+            """ Validates without looking at upgrades
+                returns (version, pipeline) or throws InvalidPipeline
+            """
+            try:
+                pipeline = self.get_pipeline(version, from_root=from_root,
+                                             use_current=use_current)
+            except InvalidPipeline, e:
                 try:
-                    self.validate(result)
-                except InvalidPipeline:
-                    if not allow_fail:
-                        raise
-            return result
-        # end switch_version
+                    version, pipeline = \
+                        self.handle_invalid_pipeline(e, version,
+                                                     self.vistrail,
+                                                     report_all_errors,
+                                                     delay_update=delay_update)
+                except InvalidPipeline, e:
+                    debug.unexpected_exception(e)
+                    raise e
+            return version, pipeline
+        # end _validate_version
 
         try:
-            self.current_pipeline = switch_version(new_version)
-            self.current_version = new_version
-        except InvalidPipeline, e:
-            # print 'EXCEPTION'
-            # print e
-            new_error = None
-
-            # DAK !!! don't need to rollback anymore!!!!
-            # we don't update self.current_pipeline until we actually
-            # get the result back
-
-            start_version = new_version
-            upgrade_version = self.vistrail.get_upgrade(new_version)
-            was_upgraded = False
-            if upgrade_version is not None:
-                try:
-                    upgrade_version = int(upgrade_version)
-                    if (upgrade_version in self.vistrail.actionMap and \
-                            not self.vistrail.is_pruned(upgrade_version)):
-                        self.current_pipeline = switch_version(upgrade_version)
-                        new_version = upgrade_version
-                        self.current_version = new_version
-                        # print 'self.current_version:', self.current_version
-                        was_upgraded = True
-                except InvalidPipeline:
-                    # try to handle using the handler and create
-                    # new upgrade
-                    pass
-            if not was_upgraded:
-                try:
-                    try:
-                        (new_version, pipeline) = \
-                            self.handle_invalid_pipeline(e, new_version,
-                                                         self.vistrail,
-                                                         report_all_errors)
-                    except InvalidPipeline, e:
-                        pipeline = e._pipeline
-                    # check that we handled the invalid pipeline
-                    # correctly
+            # first try without upgrading
+            pipeline = self.get_pipeline(version, from_root=from_root,
+                                         use_current=use_current)
+        except InvalidPipeline:
+            # Try latest upgrade first, then try previous upgrades.
+            # If all fail, return latest upgrade exception.
+            upgrade_chain = self.vistrail.get_upgrade_chain(version, True)
+            # remove missing and pruned versions
+            upgrade_chain = [v for v in upgrade_chain
+                             if v in self.vistrail.actionMap and
+                             not self.vistrail.is_pruned(v)]
+            try:
+                return _validate_version(upgrade_chain.pop())
+            except InvalidPipeline, e:
+                while upgrade_chain:
                     try:
-                        self.validate(pipeline)
-                    # this means that there was a new exception after handling 
-                    # the invalid pipeline and we should handle it again.    
-                    except InvalidPipeline, e:
-                        (new_version, pipeline) = \
-                                 self.handle_invalid_pipeline(e, new_version,
-                                                              self.vistrail,
-                                                              report_all_errors)
-                        # check that we handled the invalid pipeline
-                        # correctly
-                    self.validate(pipeline)
-                    self.current_pipeline = pipeline
-                    self.current_version = new_version
-                except InvalidPipeline, e:
-                    # display invalid pipeline?
-                    new_error = e
-                    
-                    # just do the version switch, anyway, but alert the
-                    # user to the remaining issues
-                    self.current_pipeline = e._pipeline
-                    new_version = e._version
-                    self.current_version = new_version
-
-            if new_version != start_version:
-                self.invalidate_version_tree(False)
-            if new_error is not None:
-                raise new_error
+                        return _validate_version(upgrade_chain.pop())
+                    except InvalidPipeline:
+                        # Failed, so try previous.
+                        pass
+                # We failed, so raise exception for latest upgrade.
+                raise e
+        return version, pipeline
 
     def change_selected_version(self, new_version, report_all_errors=True,
                                 do_validate=True, from_root=False):
@@ -4284,6 +4269,163 @@ class VistrailController(object):
         #return module move operations
         return self.move_modules_ops(moves)
 
+    def get_pipeline(self, version, allow_fail=False, use_current=False,
+                     do_validate=True, from_root=False):
+        """ Tries to construct the pipeline for a version in the fastest way
+            possible using cached pipelines and version distances, and
+            optionally current_pipeline.
+        """
+        if use_current and self.current_version != -1 and not self.current_pipeline:
+            debug.warning("current_version is not -1 and "
+                          "current_pipeline is None")
+        if use_current and version != self.current_version:
+            # clear delayed actions
+            # FIXME: invert the delayed actions and integrate them into
+            # the general_action_chain?
+            if len(self._delayed_actions) > 0:
+                self.clear_delayed_actions()
+                self.current_pipeline = Pipeline()
+                self.current_version = 0
+        if version == -1:
+            return None
+
+        # now we reuse some existing pipeline, even if it's the
+        # empty one for version zero
+        #
+        # The available pipelines are in self._pipelines, plus
+        # the current pipeline.
+        # Fast check: do we have to change anything?
+        if from_root:
+            result = self.vistrail.getPipeline(version)
+        elif use_current and version == self.current_version:
+            # Changing to current pipeline
+            # We only need to run validation if it was previously invalid
+            # (or didn't get validated)
+            result = self.current_pipeline
+            if self.current_pipeline.is_valid:
+                return result
+        # Fast check: if target is cached, copy it and we're done.
+        elif version in self._pipelines:
+            result = copy.copy(self._pipelines[version])
+        else:
+            # Find the closest upstream pipeline to the current one
+            cv = self._current_full_graph.inverse_immutable().closest_vertex
+            closest = cv(version, self._pipelines)
+            if use_current:
+                cost_to_closest_version = self.version_switch_cost(version,
+                                                                   closest)
+                # Now we have to decide between the closest pipeline
+                # to version and the current pipeline
+                shared_parent = getSharedRoot(self.vistrail,
+                                              [self.current_version,
+                                               version])
+                cost_common_to_old = self.version_switch_cost(
+                    self.current_version, shared_parent)
+                cost_common_to_new = self.version_switch_cost(version,
+                                                              shared_parent)
+                cost_to_current_version = cost_common_to_old + \
+                    cost_common_to_new
+            else:
+                cost_to_closest_version = 0
+                cost_to_current_version = 1
+            # FIXME I'm assuming copying the pipeline has zero cost.
+            # Formulate a better cost model
+            if cost_to_closest_version < cost_to_current_version:
+                if closest == 0:
+                    result = self.vistrail.getPipeline(version)
+                else:
+                    result = copy.copy(self._pipelines[closest])
+                    action = self.vistrail.general_action_chain(closest,
+                                                                version)
+                    result.perform_action(action)
+            else:
+                action = \
+                    self.vistrail.general_action_chain(self.current_version,
+                                                       version)
+                if self.current_version == -1 or self.current_version == 0:
+                    result = Pipeline()
+                else:
+                    result = copy.copy(self.current_pipeline)
+                result.perform_action(action)
+
+            if self._cache_pipelines and self.get_tag(long(version)):
+                # stash a copy for future use for tagged (and upgraded) pipelines
+                if do_validate:
+                    try:
+                        self.validate(result)
+                    except InvalidPipeline:
+                        if not allow_fail:
+                            raise
+                    else:
+                        self._pipelines[version] = copy.copy(result)
+                else:
+                    self._pipelines[version] = copy.copy(result)
+        if do_validate:
+            try:
+                self.validate(result)
+            except InvalidPipeline:
+                if not allow_fail:
+                    raise
+        return result
+
+    def get_tag(self, version_number):
+        # Follow upgrades forward to find tag
+        if not getattr(get_vistrails_configuration(),
+                                        'hideUpgrades', True):
+            return self.vistrail.getVersionName(version_number)
+        tag = self.vistrail.search_upgrade_versions(
+                version_number,
+                lambda vt, v, bv: vt.getVersionName(v) or None) or ''
+        return tag
+
+    def get_tagged_version(self, version_number):
+        # Follow upgrades forward to find tagged version
+        if not getattr(get_vistrails_configuration(),
+                                        'hideUpgrades', True):
+            return version_number
+        def is_tagged(vt, v):
+            return v if vt.getVersionName(v) else None
+        tagged_version = self.vistrail.search_upgrade_versions(
+                version_number,
+                lambda vt, v, bv: is_tagged(vt, v)) or version_number
+        return tagged_version
+
+    def get_notes(self, version_number):
+        if not getattr(get_vistrails_configuration(),
+                                        'hideUpgrades', True):
+            return self.vistrail.get_notes(version_number)
+        notes = self.vistrail.search_upgrade_versions(
+            version_number,
+            lambda vt, v, bv: vt.get_notes(v) or None)
+        return notes
+
+    def create_upgrade(self, version, delay_update=False):
+        """Upgrade a version if needed
+
+         Does not change current version, but will create a new upgrade if it
+         does not exist.
+
+        delay_update - set self.update_delayed and do not call set_changed in
+                       handle_invalid_pipeline
+
+        """
+        try:
+            self.get_pipeline(version)
+        except InvalidPipeline as e:
+            if version == self.current_version:
+                # The upgrade is probably already done
+                self.flush_delayed_actions(delay_update=delay_update)
+
+            try:
+                version, _ = self.validate_version(version,
+                                                   delay_update=delay_update,
+                                                   use_current=False)
+            except InvalidPipeline as e:
+                debug.unexpected_exception(e)
+                # Get the version anyway
+                version = e._version
+        return version
+
 
 import unittest
 
diff --git a/vistrails/core/vistrail/group.py b/vistrails/core/vistrail/group.py
index 8c9f30a..6799260 100644
--- a/vistrails/core/vistrail/group.py
+++ b/vistrails/core/vistrail/group.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/job.py b/vistrails/core/vistrail/job.py
index 8954def..13d0e2b 100644
--- a/vistrails/core/vistrail/job.py
+++ b/vistrails/core/vistrail/job.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -54,7 +54,18 @@ import unittest
 import weakref
 
 
-class JobMixin(NotCacheable):
+def module_name(module):
+    """ Returns the display-name of the module or the module name if not set
+
+    """
+    if 'pipeline' in module.moduleInfo and module.moduleInfo['pipeline']:
+        p_modules = module.moduleInfo['pipeline'].modules
+        p_module = p_modules[module.moduleInfo['moduleId']]
+        if p_module.has_annotation_with_key('__desc__'):
+            return p_module.get_annotation_by_key('__desc__').value
+    return module.__class__.__name__
+
+class JobMixin(object):
     """ Mixin for suspendable modules.
 
     This provides the base behavior for modules that submit jobs by handling
@@ -186,13 +197,7 @@ class JobMixin(NotCacheable):
         Modules needn't override this, in which case a default will be
         provided.
         """
-        # use module description if it exists
-        if 'pipeline' in self.moduleInfo and self.moduleInfo['pipeline']:
-            p_modules = self.moduleInfo['pipeline'].modules
-            p_module = p_modules[self.moduleInfo['moduleId']]
-            if p_module.has_annotation_with_key('__desc__'):
-                return p_module.get_annotation_by_key('__desc__').value
-        return self.__class__.__name__
+        return module_name(self)
 
 
 class Workflow(object):
@@ -285,13 +290,21 @@ class Job(object):
         self.name = name
         self.start = start if start else datetime.datetime.now().isoformat()
         self.finished = finished
+        # A ready job is ready to output its result
+        self.ready = False
         self.updated = True
 
     def reset(self):
         self.updated = False
+        self.ready = False
 
     def mark(self):
+        """ Mark job as updated and not finished
+        """
         self.updated = True
+        # Old-style jobs may need to reset finished status
+        self.finished = False
+        self.ready = False
 
     def finish(self, params=None):
         self.parameters = params if params else {}
@@ -456,7 +469,7 @@ class JobMonitor(object):
         """
         if self._current_workflow:
             raise Exception("A workflow is still running: %s!" %
-                            self._current_workflow)
+                            self._current_workflow.id)
         workflow.reset()
         self._current_workflow = workflow
         if self.callback is not None and self.callback() is not None:
@@ -470,14 +483,11 @@ class JobMonitor(object):
                 self.addJobRec(child, id)
             return
         if id in workflow.jobs:
-            # this is an already existing new-style job
-            # mark that it has been used
-            workflow.jobs[id].mark()
-            return
-        if id in workflow.jobs:
-            # this is an already existing new-style job
-            # mark that it has been used
+            # this is an already existing job
+            # that has been suspended
             workflow.jobs[id].mark()
+            # trigger job update
+            self.addJob(id, workflow.jobs[id].parameters)
             return
         # this is a new old-style job that we need to add
         self.addJob(id, {'__message__': obj.msg}, obj.name)
@@ -489,25 +499,27 @@ class JobMonitor(object):
 
         """
         workflow = self._current_workflow
-        # untangle parents
-        # only keep the top item
-        c = set()
-        for exception in workflow.parents.itervalues():
-            if exception.children:
-                c.update([id(child) for child in exception.children])
-        for child in c:
-            if child in workflow.parents:
-                del workflow.parents[child]
-        for parent in workflow.parents.itervalues():
-            self.addJobRec(parent)
-
-        # Assume all unfinished jobs that were not updated are now finished
-        for job in workflow.jobs.values():
-            if not job.finished and not job.updated:
-                job.finish()
-        if self.callback is not None and self.callback() is not None:
-            self.callback().finishWorkflow(workflow)
-        self._current_workflow = None
+        try:
+            # untangle parents
+            # only keep the top item
+            c = set()
+            for exception in workflow.parents.itervalues():
+                if exception.children:
+                    c.update([id(child) for child in exception.children])
+            for child in c:
+                if child in workflow.parents:
+                    del workflow.parents[child]
+            for parent in workflow.parents.itervalues():
+                self.addJobRec(parent)
+
+            # Assume all unfinished jobs that were not updated are now finished
+            for job in workflow.jobs.values():
+                if not job.finished and not job.updated:
+                    job.finish()
+            if self.callback is not None and self.callback() is not None:
+                self.callback().finishWorkflow(workflow)
+        finally:
+            self._current_workflow = None
 
     def addJob(self, id, params=None, name='', finished=False):
         """ addJob(id: str, params: dict, name: str, finished: bool) -> uuid
@@ -517,7 +529,6 @@ class JobMonitor(object):
         """
 
         params = params if params is not None else {}
-
         if self.hasJob(id):
             # update job attributes
             job = self.getJob(id)
diff --git a/vistrails/core/vistrail/location.py b/vistrails/core/vistrail/location.py
index 8339418..95c2d6e 100644
--- a/vistrails/core/vistrail/location.py
+++ b/vistrails/core/vistrail/location.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/module.py b/vistrails/core/vistrail/module.py
index d437d38..f4d5e6c 100644
--- a/vistrails/core/vistrail/module.py
+++ b/vistrails/core/vistrail/module.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -83,7 +83,6 @@ class Module(DBModule):
 
     def set_defaults(self, other=None):
         if other is None:
-            self.portVisible = set()
             self.visible_input_ports = set()
             self.visible_output_ports = set()
             self.connected_input_ports = {}
@@ -96,7 +95,6 @@ class Module(DBModule):
             self.list_depth = 0
             self.iterated_ports = []
         else:
-            self.portVisible = copy.copy(other.portVisible)
             self.visible_input_ports = copy.copy(other.visible_input_ports)
             self.visible_output_ports = copy.copy(other.visible_output_ports)
             self.connected_input_ports = copy.copy(other.connected_input_ports)
@@ -186,6 +184,8 @@ class Module(DBModule):
         return self.db_has_function_with_id(f_id)
     def get_function_by_real_id(self, f_id):
         return self.db_get_function_by_id(f_id)
+    def delete_function_by_real_id(self, f_id):
+        self.db_delete_function(self.db_get_function_by_id(f_id))
 
     def add_annotation(self, annotation):
         self.db_add_annotation(annotation)
diff --git a/vistrails/core/vistrail/module_control_param.py b/vistrails/core/vistrail/module_control_param.py
index 2eae2aa..66f2a5e 100644
--- a/vistrails/core/vistrail/module_control_param.py
+++ b/vistrails/core/vistrail/module_control_param.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/module_function.py b/vistrails/core/vistrail/module_function.py
index 75118bf..f123493 100644
--- a/vistrails/core/vistrail/module_function.py
+++ b/vistrails/core/vistrail/module_function.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/module_param.py b/vistrails/core/vistrail/module_param.py
index e56277f..d1dc2ab 100644
--- a/vistrails/core/vistrail/module_param.py
+++ b/vistrails/core/vistrail/module_param.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/operation.py b/vistrails/core/vistrail/operation.py
index 58aa008..d98c5e9 100644
--- a/vistrails/core/vistrail/operation.py
+++ b/vistrails/core/vistrail/operation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py
index 900b0c6..5f031a2 100644
--- a/vistrails/core/vistrail/pipeline.py
+++ b/vistrails/core/vistrail/pipeline.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -40,7 +40,7 @@ from __future__ import division
 from vistrails.core.cache.hasher import Hasher
 from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.data_structures.bijectivedict import Bidict
-from vistrails.core.data_structures.graph import Graph
+from vistrails.core.data_structures.graph import Graph, GraphContainsCycles
 from vistrails.core import debug
 from vistrails.core.modules.module_registry import get_module_registry, \
     ModuleRegistryException, MissingModuleVersion, MissingPackage, PortMismatch
@@ -51,7 +51,6 @@ from vistrails.core.vistrail.module_control_param import ModuleControlParam
 from vistrails.core.vistrail.plugin_data import PluginData
 from vistrails.core.vistrail.port_spec import PortSpec
 from vistrails.db.domain import DBWorkflow
-import vistrails.core.vistrail.action
 from vistrails.core.utils import InvalidPipeline
 
 import copy
@@ -442,7 +441,7 @@ class Pipeline(DBWorkflow):
             if self.graph.in_degree(old_conn.destinationId) < 1:
                 connected_input_ports = \
                     self.modules[old_conn.destinationId].connected_input_ports
-                connected_input_ports.discard(conn.destination.name)
+                connected_input_ports.discard(old_conn.destination.name)
 
         if old_id in self._connection_signatures:
             del self._connection_signatures[old_id]
@@ -604,8 +603,8 @@ class Pipeline(DBWorkflow):
                 for _fun in _mod.functions:
                     for _par in _fun.parameters:
                         if (_par.vtType == type and _par.real_id == oId and
-                            _fun.vtType == parentType and 
-                            _fun.real_id == parentId):
+                                _fun.vtType == parentType and
+                                _fun.real_id == parentId):
                             mid = _mod.id
                             break
             if mid is not None:
@@ -630,8 +629,8 @@ class Pipeline(DBWorkflow):
         else:
             oldname = None
             for aname,(t,o,pt,pid,mid) in self.aliases.iteritems():
-                if (t == type and o == oId and pt == parentType and 
-                    pid == parentId):
+                if (t == type and o == oId and pt == parentType and
+                        pid == parentId):
                     oldname = aname
                     break
             if oldname:
@@ -677,7 +676,7 @@ class Pipeline(DBWorkflow):
             pass
         else:
             if what == 'parameter':
-                #FIXME: check if a change parameter action needs to be generated
+                # FIXME: check if a change parameter action needs to be generated
                 parameter = self.db_get_object(what, oId)
                 parameter.strValue = str(value)
             else:
@@ -853,6 +852,12 @@ class Pipeline(DBWorkflow):
         except InvalidPipeline, e:
             exceptions.update(e.get_exception_set())
 
+        # check for cycles
+        try:
+            self.graph.dfs(raise_if_cyclic=True)
+        except GraphContainsCycles, e:
+            exceptions.add(e)
+
         # do this before we check connection specs because it is
         # possible that a subpipeline invalidates the module, meaning
         # we shouldn't check the connection specs
@@ -871,7 +876,9 @@ class Pipeline(DBWorkflow):
                     try:
                         desc = module.module_descriptor
                         if long(module.internal_version) != long(desc.version):
-                            exceptions.add(MissingModuleVersion(desc.package, desc.name, desc.namespace, desc.version, desc.package_version, module.id))
+                            exceptions.add(MissingModuleVersion(
+                                desc.package, desc.name, desc.namespace,
+                                desc.version, desc.package_version, module.id))
                     except Exception:
                         pass
         try:
@@ -1116,14 +1123,12 @@ class Pipeline(DBWorkflow):
         affects downstream. This slightly increases performance.
 
         """
+        from vistrails.core.modules.basic_modules import List, Variant
+
+        # TODO: module_ids is currently ignored, this is potentially suboptimal
         result = []
-        is_upstream = module_ids
+        # Might raise GraphContainsCycles
         for module_id in self.graph.vertices_topological_sort():
-            if is_upstream:
-                if module_id in module_ids:
-                    is_upstream = False
-                else:
-                    continue
             module = self.get_module_by_id(module_id)
             module.list_depth = 0
             ports = []
@@ -1131,7 +1136,6 @@ class Pipeline(DBWorkflow):
                 prev_depth = self.get_module_by_id(module_from_id).list_depth
                 conn = self.get_connection_by_id(conn_id)
                 source_depth = 0
-                from vistrails.core.modules.basic_modules import List, Variant
                 if conn.source.spec:
                     source_depth = conn.source.spec.depth
                     src_descs = conn.source.spec.descriptors()
@@ -1166,7 +1170,6 @@ class Pipeline(DBWorkflow):
             module.iterated_ports = ports
         return result
 
-
     ##########################################################################
     # Debugging
 
@@ -1185,7 +1188,8 @@ class Pipeline(DBWorkflow):
                 print "module %d in self but not in other" % m_id
                 return
             if m <> other.modules[m_id]:
-                print "module %s in self doesn't match module %s in other" % (m,  other.modules[m_id])
+                print "module %s in self doesn't match module %s in other" % (
+                    m, other.modules[m_id])
                 return
         for m_id, m in other.modules.iteritems():
             if not m_id in self.modules:
@@ -1509,7 +1513,7 @@ class TestPipeline(unittest.TestCase):
         import vistrails.core.db.action
         from vistrails.core.db.locator import XMLFileLocator
         import vistrails.core.system
-        v = XMLFileLocator( \
+        v = XMLFileLocator(
             vistrails.core.system.vistrails_root_directory() +
             '/tests/resources/test_alias.xml').load()
 
diff --git a/vistrails/core/vistrail/plugin_data.py b/vistrails/core/vistrail/plugin_data.py
index 2beddcc..7d6b9f2 100644
--- a/vistrails/core/vistrail/plugin_data.py
+++ b/vistrails/core/vistrail/plugin_data.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/port.py b/vistrails/core/vistrail/port.py
index 0aa74ff..59cb6e6 100644
--- a/vistrails/core/vistrail/port.py
+++ b/vistrails/core/vistrail/port.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/port_spec.py b/vistrails/core/vistrail/port_spec.py
index 7c70049..5a4e2ae 100644
--- a/vistrails/core/vistrail/port_spec.py
+++ b/vistrails/core/vistrail/port_spec.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -339,7 +339,6 @@ class PortSpec(DBPortSpec):
         # add_input_port(_, _, [Float, (Integer, 'count')])
 
         registry = get_module_registry()
-        entries = []
         def canonicalize(sig_item):
             if isinstance(sig_item, tuple):
                 # assert len(sig_item) == 2
diff --git a/vistrails/core/vistrail/port_spec_item.py b/vistrails/core/vistrail/port_spec_item.py
index 4d364ae..525fbac 100644
--- a/vistrails/core/vistrail/port_spec_item.py
+++ b/vistrails/core/vistrail/port_spec_item.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/tag.py b/vistrails/core/vistrail/tag.py
index a8a1783..c4ea21e 100644
--- a/vistrails/core/vistrail/tag.py
+++ b/vistrails/core/vistrail/tag.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/core/vistrail/vistrail.py b/vistrails/core/vistrail/vistrail.py
index 9977066..56c58b0 100644
--- a/vistrails/core/vistrail/vistrail.py
+++ b/vistrails/core/vistrail/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -93,8 +93,8 @@ class Vistrail(DBVistrail):
     def __init__(self, locator=None):
         DBVistrail.__init__(self)
 
-        self.locator = locator
         self.set_defaults()
+        self.locator = locator
 
     def __copy__(self):
         """ __copy__() -> Vistrail - Returns a clone of itself """ 
@@ -113,11 +113,13 @@ class Vistrail(DBVistrail):
             self.currentVersion = -1
             self.savedQueries = []
             self.is_abstraction = False
+            self.locator = None
         else:
             self.changed = other.changed
             self.currentVersion = other.currentVersion
             self.savedQueries = copy.copy(other.savedQueries)
             self.is_abstraction = other.is_abstraction
+            self.locator = other.locator
 
         # object to keep explicit expanded 
         # version tree always updated
@@ -1106,6 +1108,34 @@ class Vistrail(DBVistrail):
                     version = upgrade_rev_map[version]
         return None
 
+    def get_upgrade_chain(self, base_version, start_at_base=False):
+        """Returns upgrade chain for version.
+
+        :param base_version: a version in the upgrade chain
+        :param start_at_base: if False (default), return chain starting with
+        given version. If True, start from the original action (the one that's
+        not an upgrade). If False, go down from given version only.
+        :returns: The list version ids in the upgrade chain
+        """
+        # TODO: cache these maps somewhere
+        upgrade_map = {}
+        upgrade_rev_map = {}
+        for ann in self.action_annotations:
+            if ann.key == Vistrail.UPGRADE_ANNOTATION:
+                upgrade_map[ann.action_id] = int(ann.value)
+                upgrade_rev_map[int(ann.value)] = ann.action_id
+        if start_at_base is True:
+            while base_version in upgrade_rev_map:
+                base_version = upgrade_rev_map[base_version]
+
+        chain = []
+        version = base_version
+        walked_versions = set()
+        while version is not None and version not in walked_versions:
+            chain.append(version)
+            walked_versions.add(version)
+            version = upgrade_map.get(version)
+        return chain
 
 ##############################################################################
 
diff --git a/vistrails/core/vistrail/vistrailvariable.py b/vistrails/core/vistrail/vistrailvariable.py
index ca0ecf7..667e693 100644
--- a/vistrails/core/vistrail/vistrailvariable.py
+++ b/vistrails/core/vistrail/vistrailvariable.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/__init__.py b/vistrails/db/__init__.py
index 2bc5453..aa9513a 100644
--- a/vistrails/db/__init__.py
+++ b/vistrails/db/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/__init__.py b/vistrails/db/bin/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/bin/__init__.py
+++ b/vistrails/db/bin/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/auto_gen_objects.py b/vistrails/db/bin/auto_gen_objects.py
index a15ca11..83867be 100644
--- a/vistrails/db/bin/auto_gen_objects.py
+++ b/vistrails/db/bin/auto_gen_objects.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/generate.py b/vistrails/db/bin/generate.py
index 19e1f34..4b1d1d7 100644
--- a/vistrails/db/bin/generate.py
+++ b/vistrails/db/bin/generate.py
@@ -2,7 +2,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -72,7 +72,7 @@ class DAOList(dict):
 COPYRIGHT_NOTICE = \
 """###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -285,7 +285,7 @@ def main(argv=None):
     use_base_specs = True
     if options['n'] and os.path.exists(versionDirs['specs']):
         for file in os.listdir(versionDirs['specs']):
-            if file.endswith('.xml'):
+            if file.lower().endswith('.xml'):
                 # assume we've already copied the specs
                 use_base_specs = False
 
@@ -293,7 +293,7 @@ def main(argv=None):
         # copy specs to version        
         print "copying base specs to version directory..."
         for file in os.listdir(baseDirs['specs']):
-            if file.endswith('.xml'):
+            if file.lower().endswith('.xml'):
                 print 'copying %s' % file
                 filename = os.path.join(baseDirs['specs'], file)
                 toFile = os.path.join(versionDirs['specs'], file)
diff --git a/vistrails/db/bin/parser.py b/vistrails/db/bin/parser.py
index 38d01ca..6319613 100644
--- a/vistrails/db/bin/parser.py
+++ b/vistrails/db/bin/parser.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -47,7 +47,7 @@ class AutoGenParser(object):
     def parse(self, dir):
         objects = {}
         for file in os.listdir(dir):
-            if file.endswith('.xml'):
+            if file.lower().endswith('.xml'):
                 filename = os.path.join(dir, file)
                 # print filename
                 dom = minidom.parse(filename)
diff --git a/vistrails/db/bin/sql_gen_objects.py b/vistrails/db/bin/sql_gen_objects.py
index ed47241..f77f8fc 100644
--- a/vistrails/db/bin/sql_gen_objects.py
+++ b/vistrails/db/bin/sql_gen_objects.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/templates/domain.py.mako b/vistrails/db/bin/templates/domain.py.mako
index df62c02..43dab38 100644
--- a/vistrails/db/bin/templates/domain.py.mako
+++ b/vistrails/db/bin/templates/domain.py.mako
@@ -28,7 +28,7 @@ def shouldIgnoreIndexDelete(index):
 %> \\
 <%text>###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/templates/sql.py.mako b/vistrails/db/bin/templates/sql.py.mako
index 7986160..41cdd64 100644
--- a/vistrails/db/bin/templates/sql.py.mako
+++ b/vistrails/db/bin/templates/sql.py.mako
@@ -1,6 +1,6 @@
 <%text>###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/templates/sql_delete.sql.mako b/vistrails/db/bin/templates/sql_delete.sql.mako
index 0d5a46d..bd016e1 100644
--- a/vistrails/db/bin/templates/sql_delete.sql.mako
+++ b/vistrails/db/bin/templates/sql_delete.sql.mako
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/bin/templates/sql_schema.sql.mako b/vistrails/db/bin/templates/sql_schema.sql.mako
index 5e38086..d426cf7 100644
--- a/vistrails/db/bin/templates/sql_schema.sql.mako
+++ b/vistrails/db/bin/templates/sql_schema.sql.mako
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/bin/templates/xml.py.mako b/vistrails/db/bin/templates/xml.py.mako
index e7c093d..5065801 100644
--- a/vistrails/db/bin/templates/xml.py.mako
+++ b/vistrails/db/bin/templates/xml.py.mako
@@ -1,6 +1,6 @@
 <%text>###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/templates/xml_schema.xsd.mako b/vistrails/db/bin/templates/xml_schema.xsd.mako
index 87d5f22..2878a1e 100644
--- a/vistrails/db/bin/templates/xml_schema.xsd.mako
+++ b/vistrails/db/bin/templates/xml_schema.xsd.mako
@@ -15,7 +15,7 @@ def writeElement(prop):
 %> \\
 <%text><!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/bin/xml_gen_objects.py b/vistrails/db/bin/xml_gen_objects.py
index ec43d1d..6100be0 100644
--- a/vistrails/db/bin/xml_gen_objects.py
+++ b/vistrails/db/bin/xml_gen_objects.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/domain/__init__.py b/vistrails/db/domain/__init__.py
index 20a8e7c..7eb838a 100644
--- a/vistrails/db/domain/__init__.py
+++ b/vistrails/db/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/persistence/__init__.py b/vistrails/db/persistence/__init__.py
index f71700a..b6e3a5c 100644
--- a/vistrails/db/persistence/__init__.py
+++ b/vistrails/db/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/__init__.py b/vistrails/db/services/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/services/__init__.py
+++ b/vistrails/db/services/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/abstraction.py b/vistrails/db/services/abstraction.py
index 0124b5f..9455e0f 100644
--- a/vistrails/db/services/abstraction.py
+++ b/vistrails/db/services/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/action.py b/vistrails/db/services/action.py
index cd0cd09..2299472 100644
--- a/vistrails/db/services/action.py
+++ b/vistrails/db/services/action.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/action_chain.py b/vistrails/db/services/action_chain.py
index fee6d26..ab02c3b 100644
--- a/vistrails/db/services/action_chain.py
+++ b/vistrails/db/services/action_chain.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/io.py b/vistrails/db/services/io.py
index 176b953..aaaa902 100644
--- a/vistrails/db/services/io.py
+++ b/vistrails/db/services/io.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/locator.py b/vistrails/db/services/locator.py
index 3b24cc0..726516c 100644
--- a/vistrails/db/services/locator.py
+++ b/vistrails/db/services/locator.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,7 +35,6 @@
 ###############################################################################
 from __future__ import division
 
-import cgi
 from datetime import datetime, date
 import hashlib
 import locale
@@ -88,7 +87,7 @@ def url2pathname(urlpath):
 
 class BaseLocator(object):
 
-    def load(self):
+    def load(self, type):
         raise NotImplementedError("load is not implemented")
 
     def save(self, obj, do_copy=True, version=None):
@@ -144,7 +143,16 @@ class BaseLocator(object):
         raise NotImplementedError("parse is not implemented")
     
     @staticmethod
-    def convert_filename_to_url(filename):
+    def real_filename(filename):
+        """ Expand relative path and dereference symbolic links
+
+        To avoid dereference symbolic links:
+        Remove realpath and add DontResolveSymlinks to QFileDialog calls
+        """
+        return os.path.realpath(os.path.abspath(filename))
+
+    @classmethod
+    def convert_filename_to_url(cls, filename):
         """ Converts a local filename to a file:// URL.
 
         All file:// URLs are absolute, so abspath() will be used on the
@@ -168,7 +176,7 @@ class BaseLocator(object):
         else:
             args_str = ""
 
-        return 'file://%s%s' % (pathname2url(os.path.abspath(filename)),
+        return 'file://%s%s' % (pathname2url(cls.real_filename(filename)),
                                 urllib.quote(args_str, safe='/?=&'))
 
     @staticmethod
@@ -195,16 +203,16 @@ class BaseLocator(object):
             scheme, host, path, query, fragment = urlparse.urlsplit(str(url))
             urlparse.uses_query = old_uses_query
             path = url2pathname(path)
-            if path.endswith(".vt"):
-                return ZIPFileLocator.from_url(url)
-            elif path.endswith(".xml"):
+            if path.lower().endswith(".xml"):
                 return XMLFileLocator.from_url(url)
+            else:
+                return ZIPFileLocator.from_url(url)
         return None
 
     @staticmethod
     def parse_args(arg_str):
         args = {}
-        parsed_dict = cgi.parse_qs(arg_str)
+        parsed_dict = urlparse.parse_qs(arg_str)
         if 'type' in parsed_dict:
             args['obj_type'] = parsed_dict['type'][0]
         if 'id' in parsed_dict:
@@ -293,7 +301,6 @@ class SaveTemporariesMixin(object):
     self.name to exist for proper functioning.
 
     """
-
     @staticmethod
     def get_autosave_dir():
         dot_vistrails = vistrails.core.system.current_dot_vistrails()
@@ -309,10 +316,22 @@ class SaveTemporariesMixin(object):
     def get_temp_basename(self):
         return self.name
 
+    def get_temporary(self):
+        temp_fname = self.encode_name(self.get_temp_basename())
+        if os.path.isfile(temp_fname):
+            return temp_fname
+        return None
+
     def save_temporary(self, obj):
-        fname = self._find_latest_temporary()
-        new_temp_fname = self._next_temporary(fname)
+        """ Writes a backup file to disk
+        """
+        temp_fname = self.encode_name(self.get_temp_basename())
+        new_temp_fname = temp_fname + '.tmp'
+        # Write a temporary backup before deleting the old one
         io.save_to_xml(obj, new_temp_fname)
+        if os.path.isfile(temp_fname):
+            os.unlink(temp_fname)
+        os.rename(new_temp_fname, temp_fname)
 
     def clean_temporaries(self):
         """_remove_temporaries() -> None
@@ -320,61 +339,20 @@ class SaveTemporariesMixin(object):
         Erases all temporary files.
 
         """
-        def remove_it(fname):
-            os.unlink(fname)
-        self._iter_temporaries(remove_it)
+        temp_fname = self.encode_name(self.get_temp_basename())
+        if os.path.isfile(temp_fname):
+            os.unlink(temp_fname)
+        if os.path.isfile(temp_fname + '.tmp'):
+            os.unlink(temp_fname + '.tmp')
 
     def encode_name(self, filename):
         """encode_name(filename) -> str
         Encodes a file path using urllib.quoteplus
 
         """
-        name = urllib.quote_plus(filename) + '_tmp_'
+        name = urllib.quote_plus(filename) + '_tmp'
         return os.path.join(self.get_autosave_dir(), name)
 
-    def _iter_temporaries(self, f):
-        """_iter_temporaries(f): calls f with each temporary file name, in
-        sequence.
-
-        """
-        latest = None
-        current = 0
-        while True:
-            fname = self.encode_name(self.get_temp_basename()) + str(current)
-            if os.path.isfile(fname):
-                f(fname)
-                current += 1
-            else:
-                break
-
-    def _find_latest_temporary(self):
-        """_find_latest_temporary(): String or None.
-
-        Returns the latest temporary file saved, if it exists. Returns
-        None otherwise.
-        
-        """
-        latest = [None]
-        def set_it(fname):
-            latest[0] = fname
-        self._iter_temporaries(set_it)
-        return latest[0]
-        
-    def _next_temporary(self, temporary):
-        """_find_latest_temporary(string or None): String
-
-        Returns the next suitable temporary file given the current
-        latest one.
-
-        """
-        if temporary is None:
-            return self.encode_name(self.get_temp_basename()) + '0'
-        else:
-            split = temporary.rfind('_')+1
-            base = temporary[:split]
-            number = int(temporary[split:])
-            return base + str(number+1)
-
 class UntitledLocator(SaveTemporariesMixin, BaseLocator):
     UNTITLED_NAME = "Untitled"
     UNTITLED_PREFIX = UNTITLED_NAME + "_"
@@ -409,9 +387,6 @@ class UntitledLocator(SaveTemporariesMixin, BaseLocator):
     def get_temp_basename(self):
         return UntitledLocator.UNTITLED_PREFIX + self._uuid.hex
 
-    def get_temporary(self):
-        return self._find_latest_temporary()
-
     def _get_name(self):
         return UntitledLocator.UNTITLED_NAME
     name = property(_get_name)
@@ -482,7 +457,7 @@ class UntitledLocator(SaveTemporariesMixin, BaseLocator):
 
 class XMLFileLocator(SaveTemporariesMixin, BaseLocator):
     def __init__(self, filename, **kwargs):
-        self._name = filename
+        self._name = self.real_filename(filename)
         self._vnode = kwargs.get('version_node', None)
         self._vtag = kwargs.get('version_tag', '')
         self._mshptrail = kwargs.get('mashuptrail', None)
@@ -519,9 +494,6 @@ class XMLFileLocator(SaveTemporariesMixin, BaseLocator):
     def is_valid(self):
         return os.path.isfile(self._name)
 
-    def get_temporary(self):
-        return self._find_latest_temporary()
-
     def _get_name(self):
         return str(self._name)
     name = property(_get_name)
@@ -1089,9 +1061,9 @@ import unittest
 class TestLocators(unittest.TestCase):
     if not hasattr(unittest.TestCase, 'assertIsInstance'):
         def assertIsInstance(self, obj, cls, msg=None):
-            assert(isinstance(obj, cls))
-        def assertIsNone(self, obj):
-            self.assertEqual(obj, None)
+            self.assertTrue(isinstance(obj, cls), msg)
+        def assertIsNone(self, obj, msg=None):
+            self.assertTrue(obj is None, msg)
 
     @staticmethod
     def path2url(fname):
@@ -1105,10 +1077,12 @@ class TestLocators(unittest.TestCase):
         # Test both systemTypes
         global systemType
         old_systemType = systemType
-        # Don't use abspath, it would cause Linux tests to fail on Windows
-        # we are using abspaths anyway
+        # Don't use abspath/realpath, it would cause Linux tests to fail on Windows
+        # we are using abspaths/realpaths anyway
         old_abspath = os.path.abspath
         os.path.abspath = lambda x: x
+        old_realpath = os.path.realpath
+        os.path.realpath = lambda x: x
         try:
             systemType = 'Linux'
             self.assertEqual(
@@ -1123,6 +1097,7 @@ class TestLocators(unittest.TestCase):
         finally:
             systemType = old_systemType
             os.path.abspath = old_abspath
+            os.path.realpath = old_realpath
 
     def test_parse_untitled(self):
         loc_str = "untitled:e78394a73b87429e952b71b858e03242?workflow=42"
diff --git a/vistrails/db/services/log.py b/vistrails/db/services/log.py
index 9cef252..eb530e1 100644
--- a/vistrails/db/services/log.py
+++ b/vistrails/db/services/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/opm.py b/vistrails/db/services/opm.py
index 0cb21a8..e8bb726 100644
--- a/vistrails/db/services/opm.py
+++ b/vistrails/db/services/opm.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -144,22 +144,26 @@ def create_opm(workflow, version, log, reg):
         print 'adding process', process.db_id,
         if hasattr(item_exec, 'db_module_name'):
             print item_exec.db_module_name
-        elif hasattr(item_exec, 'db_group_nane'):
-            print item_exec.db_module_name
+        elif hasattr(item_exec, 'db_group_name'):
+            print item_exec.db_group_name
         processes.append(process)
         module = workflow.db_modules_id_index[item_exec.db_module_id]
         module_processes[module.db_id] = (module, process)
 
     def get_package(reg, pkg_identifier, pkg_version=''):
-        if not pkg_version:
-            # spin and get current package
-            for pkg in reg.db_packages:
-                if pkg.db_identifier == pkg_identifier:
-                    break
-                pkg = None
-        else:
-            pkg = reg.db_packages_identifier_index[(pkg_identifier,
-                                                    pkg_version)]
+        if pkg_version:
+            try:
+                return reg.db_packages_identifier_index[(pkg_identifier,
+                                                         pkg_version)]
+            except:
+                print (("Warning: Version '%s' package '%s' "
+                        "is not in the registry") %
+                       (pkg_version, pkg_identifier))
+        # spin and get current package
+        for pkg in reg.db_packages:
+            if pkg.db_identifier == pkg_identifier:
+                break
+            pkg = None
         return pkg
 
     def process_exec(item_exec, workflow, account, upstream_lookup,
@@ -267,6 +271,10 @@ def create_opm(workflow, version, log, reg):
             # need to have process that extracts artifacts for each iteration
             input_list_artifact = found_input_ports['InputList']
             result_artifact = found_output_ports.get('Result', None)
+            # if InputPort or OutputPort is a Connection we cannot do anything
+            if (found_input_ports['InputPort'].vtType == DBConnection.vtType or
+                found_input_ports['OutputPort'].vtType == DBConnection.vtType):
+                return
             input_port_list = \
                 literal_eval(found_input_ports['InputPort'].db_parameters[0].db_val)
             output_port = \
@@ -283,50 +291,51 @@ def create_opm(workflow, version, log, reg):
                 j_process = create_process_manual('Join', account, id_scope)
                 processes.append(j_process)
             for loop_exec in item_exec.db_loop_execs:
-                loop_up_artifacts = {}
-                loop_down_artifacts = {}
-                for input_name in input_port_list:
-                    port_spec = DBPortSpec(id=-1,
-                                           name=input_name,
-                                           type='output')
-                    s_artifact = \
-                        create_artifact_from_port_spec(port_spec, account, 
-                                                       id_scope)
-                    artifacts.append(s_artifact)
-                    dependencies.append(create_was_generated_by(s_artifact,
-                                                                s_process,
-                                                                account,
-                                                                id_scope))
-                    if input_name not in loop_up_artifacts:
-                        loop_up_artifacts[input_name] = []
-                    loop_up_artifacts[input_name].append(s_artifact)
-
-                # process output_port
-                if loop_exec.db_completed == 1:
-                    port_spec = DBPortSpec(id=-1,
-                                           name=output_port,
-                                           type='output')
-                    o_artifact = \
-                            create_artifact_from_port_spec(port_spec, account, 
+                for loop_iteration in loop_exec.db_loop_iterations:
+                    loop_up_artifacts = {}
+                    loop_down_artifacts = {}
+                    for input_name in input_port_list:
+                        port_spec = DBPortSpec(id=-1,
+                                               name=input_name,
+                                               type='output')
+                        s_artifact = \
+                            create_artifact_from_port_spec(port_spec, account,
                                                            id_scope)
-                    artifacts.append(o_artifact)
-                    if output_port not in loop_down_artifacts:
-                        loop_down_artifacts[output_port] = []
-                    loop_down_artifacts[output_port].append(o_artifact)
+                        artifacts.append(s_artifact)
+                        dependencies.append(create_was_generated_by(s_artifact,
+                                                                    s_process,
+                                                                    account,
+                                                                    id_scope))
+                        if input_name not in loop_up_artifacts:
+                            loop_up_artifacts[input_name] = []
+                        loop_up_artifacts[input_name].append(s_artifact)
+
+                    # process output_port
+                    if loop_iteration.db_completed == 1:
+                        port_spec = DBPortSpec(id=-1,
+                                               name=output_port,
+                                               type='output')
+                        o_artifact = \
+                                create_artifact_from_port_spec(port_spec, account,
+                                                               id_scope)
+                        artifacts.append(o_artifact)
+                        if output_port not in loop_down_artifacts:
+                            loop_down_artifacts[output_port] = []
+                        loop_down_artifacts[output_port].append(o_artifact)
+
+                    if result_artifact is not None:
+                        dependencies.append(create_used(j_process, o_artifact,
+                                                        account, id_scope))
 
-                if result_artifact is not None:
-                    dependencies.append(create_used(j_process, o_artifact, 
-                                                    account, id_scope))
-                                                
-                # now process a loop_exec
-                for child_exec in loop_exec.db_item_execs:
-                    do_create_process(workflow, child_exec, account, 
-                                      module_processes)
-                for child_exec in loop_exec.db_item_execs:
-                    process_exec(child_exec, workflow, account, upstream_lookup,
-                                 downstream_lookup, depth+1, conn_artifacts,
-                                 function_artifacts, module_processes,
-                                 loop_up_artifacts, loop_down_artifacts, True)
+                    # now process a loop_exec
+                    for child_exec in loop_iteration.db_item_execs:
+                        do_create_process(workflow, child_exec, account,
+                                          module_processes)
+                    for child_exec in loop_iteration.db_item_execs:
+                        process_exec(child_exec, workflow, account, upstream_lookup,
+                                     downstream_lookup, depth+1, conn_artifacts,
+                                     function_artifacts, module_processes,
+                                     loop_up_artifacts, loop_down_artifacts, True)
 
             # need to set Return artifact and connect j_process to it
             if result_artifact is not None:
@@ -335,6 +344,87 @@ def create_opm(workflow, version, log, reg):
                                                             account,
                                                             id_scope))
 
+        def process_module_loop(module, found_input_ports, found_output_ports):
+            print "*** Processing Module with loops"
+            if depth+1 in depth_accounts:
+                account = depth_accounts[depth+1]
+            else:
+                account = create_account(depth+1, id_scope)
+                accounts.append(account)
+                depth_accounts[depth+1] = account
+
+            # need to have process that extracts artifacts for each iteration
+            result_artifacts = [a for r in found_output_ports
+                                if found_output_ports[r] is not None
+                                for a in found_output_ports[r]]
+            s_process = create_process_manual('Split', account, id_scope)
+            processes.append(s_process)
+            for input_port in found_input_ports:
+                for input_name in input_port:
+                    dependencies.append(create_used(s_process,
+                                                    found_input_ports[input_name],
+                                                    account,
+                                                    id_scope))
+            # need to have process that condenses artifacts from each iteration
+            if result_artifacts:
+                j_process = create_process_manual('Join', account, id_scope)
+                processes.append(j_process)
+            for loop_exec in item_exec.db_loop_execs:
+                for loop_iteration in loop_exec.db_loop_iterations:
+                    loop_up_artifacts = {}
+                    loop_down_artifacts = {}
+                    for input_port in found_input_ports:
+                        for input_name in input_port:
+                            port_spec = DBPortSpec(id=-1,
+                                                   name=input_name,
+                                                   type='output')
+                            s_artifact = \
+                                create_artifact_from_port_spec(port_spec, account,
+                                                               id_scope)
+                            artifacts.append(s_artifact)
+                            dependencies.append(create_was_generated_by(s_artifact,
+                                                                        s_process,
+                                                                        account,
+                                                                        id_scope))
+                            if input_name not in loop_up_artifacts:
+                                loop_up_artifacts[input_name] = []
+                            loop_up_artifacts[input_name].append(s_artifact)
+
+                    # process output_port
+                    if loop_iteration.db_completed == 1:
+                        for output_name in found_output_ports:
+                            port_spec = DBPortSpec(id=-1,
+                                                   name=output_name,
+                                                   type='output')
+                            o_artifact = \
+                                    create_artifact_from_port_spec(port_spec, account,
+                                                                   id_scope)
+                            artifacts.append(o_artifact)
+                            if output_name not in loop_down_artifacts:
+                                loop_down_artifacts[output_name] = []
+                            loop_down_artifacts[output_name].append(o_artifact)
+
+                            if result_artifacts:
+                                dependencies.append(create_used(j_process, o_artifact,
+                                                                account, id_scope))
+
+                    # now process a loop_exec
+                    for child_exec in loop_iteration.db_item_execs:
+                        do_create_process(workflow, child_exec, account,
+                                          module_processes)
+                    for child_exec in loop_iteration.db_item_execs:
+                        process_exec(child_exec, workflow, account, upstream_lookup,
+                                     downstream_lookup, depth+1, conn_artifacts,
+                                     function_artifacts, module_processes,
+                                     loop_up_artifacts, loop_down_artifacts, True)
+
+            # need to set Return artifacts and connect j_process to it
+            for result_artifact in result_artifacts:
+                dependencies.append(create_was_generated_by(result_artifact,
+                                                            j_process,
+                                                            account,
+                                                            id_scope))
+
         def process_group(module, found_input_ports, found_output_ports):
             # identify depth and create new account if necessary
             # recurse with new account
@@ -585,6 +675,10 @@ def create_opm(workflow, version, log, reg):
 
         if special_ports[2] is not None:
             special_ports[2](module, found_input_ports, found_output_ports)
+        elif item_exec.db_loop_execs:
+            # A normal module that is looping internally
+            # Probably an automatic list loop
+            process_module_loop(module, in_upstream_artifacts, out_upstream_artifacts)
 
     def process_workflow(workflow, parent_exec, account, upstream_artifacts={},
                          downstream_artifacts={}, depth=0, top_version=False):
diff --git a/vistrails/db/services/prov.py b/vistrails/db/services/prov.py
index 39e702b..ac2e43f 100644
--- a/vistrails/db/services/prov.py
+++ b/vistrails/db/services/prov.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -42,8 +42,8 @@ import vistrails.db.services.io
 from vistrails.db.domain import DBProvDocument, DBProvEntity, DBProvActivity, \
     DBProvAgent, DBProvGeneration, DBProvUsage, DBProvAssociation, \
     DBVtConnection, DBRefProvEntity, DBRefProvPlan, DBRefProvActivity, \
-    DBRefProvAgent, DBIsPartOf, IdScope, DBGroupExec, DBLoopExec, DBModuleExec, \
-    DBWorkflowExec, DBFunction, DBParameter, DBGroup, DBAbstraction
+    DBRefProvAgent, DBIsPartOf, IdScope, DBGroupExec, DBLoopExec, DBLoopIteration, \
+    DBModuleExec, DBWorkflowExec, DBFunction, DBParameter, DBGroup, DBAbstraction
 from vistrails.db.services.vistrail import materializeWorkflow
 
 def create_prov_document(entities, activities, agents, connections, usages,
@@ -251,17 +251,22 @@ def create_prov_activity_from_exec(id_scope, module_exec, machine_id, is_part_of
     type = ''
     if module_exec.vtType == DBModuleExec.vtType:
         type = 'vt:module_exec'
+        cached = module_exec._db_cached
     elif module_exec.vtType == DBGroupExec.vtType:
         type = 'vt:group_exec'
+        cached = module_exec._db_cached
+    elif module_exec.vtType == DBLoopIteration.vtType:
+        type = 'vt:loop_iteration'
+        cached = 0
     else:
         # something is wrong...
-        pass
+        raise Exception('Unknown exec type: %s' % module_exec.vtType)
     return DBProvActivity(id='a' + str(id_scope.getNewId(DBProvActivity.vtType)),
                           vt_id=module_exec._db_id,
                           startTime=module_exec._db_ts_start,
                           endTime=module_exec._db_ts_end,
                           vt_type=type,
-                          vt_cached=module_exec._db_cached,
+                          vt_cached=cached,
                           vt_completed=module_exec._db_completed,
                           vt_machine_id=machine_id,
                           vt_error=module_exec._db_error,
@@ -356,7 +361,7 @@ def create_prov(workflow, version, log):
                                                              is_part_of=vt_part)
                 entities_map[module._db_id] = prov_module
                 entities.append(prov_module)
-                
+
             module_functions[module._db_id] = module._db_functions
             for function in module._db_functions:
                 prov_data = create_prov_entity_from_function(id_scope, function)
@@ -385,7 +390,7 @@ def create_prov(workflow, version, log):
     ############################################################################
 
     def get_execs(exec_, parent_exec, prov_agent):
-        
+
         # module or group execution
         if exec_.vtType != DBLoopExec.vtType:
             
@@ -407,53 +412,53 @@ def create_prov(workflow, version, log):
                                                            machine_id,
                                                            vt_part)
             
-            try:
-                functions = module_functions[exec_._db_module_id]
-            except Exception:
-                activities.append(prov_activity)
-                return True
-                
-            for function in functions:
-                prov_data = prov_functions[function.db_id]
-                
-                prov_usage = create_prov_usage(prov_activity, prov_data)
-                usages.append(prov_usage)
-                
-            if dest_conn.has_key(exec_._db_module_id):
-                connections = dest_conn[exec_._db_module_id]
-                for connection in connections:
-                    prov_input_data, inserted = prov_data_conn[connection.db_id]
-                    if not inserted:
-                        entities.append(prov_input_data)
-                        prov_data_conn[connection.db_id][1] = True
-                    
-                    prov_usage = create_prov_usage(prov_activity, prov_input_data)
+            activities.append(prov_activity)
+
+            if exec_.vtType != DBLoopIteration.vtType:
+                try:
+                    functions = module_functions[exec_._db_module_id]
+                except Exception:
+                    return True
+
+                for function in functions:
+                    prov_data = prov_functions[function.db_id]
+
+                    prov_usage = create_prov_usage(prov_activity, prov_data)
                     usages.append(prov_usage)
-                
-            if (prov_activity._db_vt_error is None) or (prov_activity._db_vt_error == ''):
-                if source_conn.has_key(exec_._db_module_id):
-                    connections = source_conn[exec_._db_module_id]
+
+                if dest_conn.has_key(exec_._db_module_id):
+                    connections = dest_conn[exec_._db_module_id]
                     for connection in connections:
-                        prov_output_data, inserted = prov_data_conn[connection.db_id]
+                        prov_input_data, inserted = prov_data_conn[connection.db_id]
                         if not inserted:
-                            entities.append(prov_output_data)
+                            entities.append(prov_input_data)
                             prov_data_conn[connection.db_id][1] = True
-                            
-                        prov_generation = create_prov_generation(prov_output_data, prov_activity)
-                        generations.append(prov_generation)
-            
-            activities.append(prov_activity)
-            
-            # PROV entity associated
-            prov_module_entity = entities_map[exec_._db_module_id]
-            prov_association = create_prov_association(prov_activity, prov_agent, prov_module_entity)
-            associations.append(prov_association)
+
+                        prov_usage = create_prov_usage(prov_activity, prov_input_data)
+                        usages.append(prov_usage)
+
+                if (prov_activity._db_vt_error is None) or (prov_activity._db_vt_error == ''):
+                    if source_conn.has_key(exec_._db_module_id):
+                        connections = source_conn[exec_._db_module_id]
+                        for connection in connections:
+                            prov_output_data, inserted = prov_data_conn[connection.db_id]
+                            if not inserted:
+                                entities.append(prov_output_data)
+                                prov_data_conn[connection.db_id][1] = True
+
+                            prov_generation = create_prov_generation(prov_output_data, prov_activity)
+                            generations.append(prov_generation)
+
+                # PROV entity associated
+                prov_module_entity = entities_map[exec_._db_module_id]
+                prov_association = create_prov_association(prov_activity, prov_agent, prov_module_entity)
+                associations.append(prov_association)
             
             if exec_.vtType == DBModuleExec.vtType:
-                for loop_exec in exec_._db_loop_execs:
+                for loop_exec in exec_.loop_execs:
                     get_execs(loop_exec, prov_activity, prov_agent)
-            elif exec_.vtType == DBGroupExec.vtType:
-                for item in exec_._db_item_execs:
+            elif exec_.vtType in [DBGroupExec.vtType, DBLoopIteration.vtType]:
+                for item in exec_.item_execs:
                     get_execs(item, prov_activity, prov_agent)
             else:
                 # something is wrong...
@@ -464,12 +469,9 @@ def create_prov(workflow, version, log):
             # here, the parent execution is related to the ControlFlow:Map module
             # TODO: should get the input values from Map, and create Function +
             # Parameter?
-            
-            # there must be only one item exec per loop exec - otherwise, something
-            # is wrong
-            item_exec = exec_.item_execs[0]
-            get_execs(item_exec, parent_exec, prov_agent)
-        
+            for iter_exec in exec_.loop_iterations:
+                get_execs(iter_exec, parent_exec, prov_agent)
+
         else:
             # something is wrong...
             pass
@@ -488,11 +490,7 @@ def create_prov(workflow, version, log):
     # storing input data
     for id in prov_functions:
         entities.append(prov_functions[id])
-    
-    # machines
-    for machine in log._db_machines:
-        machines[machine.db_id] = (create_prov_agent_from_machine(id_scope, machine), False)
-    
+
     # executions
     for exec_ in log._db_workflow_execs:
         if exec_._db_parent_version != version:
@@ -505,6 +503,11 @@ def create_prov(workflow, version, log):
         else:
             prov_agent = agents_map[exec_._db_user]
         
+        # machines
+        for machine in exec_.machine_list:
+            if machine.db_id not in machines:
+                machines[machine.db_id] = (create_prov_agent_from_machine(id_scope, machine), False)
+
         # creating PROV activity
         prov_activity = create_prov_activity_from_wf_exec(id_scope, exec_)
         activities.append(prov_activity)
diff --git a/vistrails/db/services/query.py b/vistrails/db/services/query.py
index a70d9ff..92b496a 100644
--- a/vistrails/db/services/query.py
+++ b/vistrails/db/services/query.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/registry.py b/vistrails/db/services/registry.py
index 91ec431..1598834 100644
--- a/vistrails/db/services/registry.py
+++ b/vistrails/db/services/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/services/vistrail.py b/vistrails/db/services/vistrail.py
index faa9778..7c5088c 100644
--- a/vistrails/db/services/vistrail.py
+++ b/vistrails/db/services/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -1303,6 +1303,10 @@ def getWorkflowDiffCommon(vistrail, v1, v2, heuristic_match=True):
                     sharedModuleIds.remove(getOldObjId(op))
                 if paramChgModules.has_key(getOldObjId(op)):
                     del paramChgModules[getOldObjId(op)]
+                if cparamChgModules.has_key(getOldObjId(op)):
+                    del cparamChgModules[getOldObjId(op)]
+                if annotChgModules.has_key(getOldObjId(op)):
+                    del annotChgModules[getOldObjId(op)]
             elif op.what == 'function' and \
                     (op.db_parentObjType == 'module' or 
                      op.db_parentObjType == 'abstraction' or 
diff --git a/vistrails/db/services/workflow.py b/vistrails/db/services/workflow.py
index 57a444e..6cac84c 100644
--- a/vistrails/db/services/workflow.py
+++ b/vistrails/db/services/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/specs/all.xml b/vistrails/db/specs/all.xml
index 4f750e5..3a98de2 100644
--- a/vistrails/db/specs/all.xml
+++ b/vistrails/db/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/tests/__init__.py b/vistrails/db/tests/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/db/tests/__init__.py
+++ b/vistrails/db/tests/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/tests/setup_db_tables.py b/vistrails/db/tests/setup_db_tables.py
index 3a642a8..516af3e 100644
--- a/vistrails/db/tests/setup_db_tables.py
+++ b/vistrails/db/tests/setup_db_tables.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/tests/sql_to_xml.py b/vistrails/db/tests/sql_to_xml.py
index e45306d..72c5803 100644
--- a/vistrails/db/tests/sql_to_xml.py
+++ b/vistrails/db/tests/sql_to_xml.py
@@ -1,7 +1,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/tests/xml_to_sql.py b/vistrails/db/tests/xml_to_sql.py
index 38b0786..7561008 100644
--- a/vistrails/db/tests/xml_to_sql.py
+++ b/vistrails/db/tests/xml_to_sql.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/__init__.py b/vistrails/db/versions/__init__.py
index 7a967f3..67fbf9c 100644
--- a/vistrails/db/versions/__init__.py
+++ b/vistrails/db/versions/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/__init__.py b/vistrails/db/versions/v0_3_0/__init__.py
index 03c951e..d42750f 100644
--- a/vistrails/db/versions/v0_3_0/__init__.py
+++ b/vistrails/db/versions/v0_3_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/domain/__init__.py b/vistrails/db/versions/v0_3_0/domain/__init__.py
index 508b6da..f753dab 100644
--- a/vistrails/db/versions/v0_3_0/domain/__init__.py
+++ b/vistrails/db/versions/v0_3_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/domain/auto_gen.py b/vistrails/db/versions/v0_3_0/domain/auto_gen.py
index 7fec936..6571ecf 100644
--- a/vistrails/db/versions/v0_3_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_3_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/persistence/__init__.py b/vistrails/db/versions/v0_3_0/persistence/__init__.py
index b6822dd..ec49762 100644
--- a/vistrails/db/versions/v0_3_0/persistence/__init__.py
+++ b/vistrails/db/versions/v0_3_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/persistence/xml/__init__.py b/vistrails/db/versions/v0_3_0/persistence/xml/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_3_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_3_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_3_0/persistence/xml/auto_gen.py
index cab333e..969ff59 100644
--- a/vistrails/db/versions/v0_3_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_3_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/persistence/xml/io.py b/vistrails/db/versions/v0_3_0/persistence/xml/io.py
index b339404..07634b7 100644
--- a/vistrails/db/versions/v0_3_0/persistence/xml/io.py
+++ b/vistrails/db/versions/v0_3_0/persistence/xml/io.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_3_0/persistence/xml/xml_dao.py
index e2f4f42..31cc8a1 100644
--- a/vistrails/db/versions/v0_3_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_3_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_3_0/schemas/xml/vistrail.xsd
index 5aa12ce..7f2e33a 100644
--- a/vistrails/db/versions/v0_3_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_3_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/action.xml b/vistrails/db/versions/v0_3_0/specs/action.xml
index 49e2150..c378ae6 100644
--- a/vistrails/db/versions/v0_3_0/specs/action.xml
+++ b/vistrails/db/versions/v0_3_0/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/addConnection.xml b/vistrails/db/versions/v0_3_0/specs/addConnection.xml
index ecaf458..d1fb1f3 100644
--- a/vistrails/db/versions/v0_3_0/specs/addConnection.xml
+++ b/vistrails/db/versions/v0_3_0/specs/addConnection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/addModule.xml b/vistrails/db/versions/v0_3_0/specs/addModule.xml
index 84c0536..5fc576b 100644
--- a/vistrails/db/versions/v0_3_0/specs/addModule.xml
+++ b/vistrails/db/versions/v0_3_0/specs/addModule.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/addModulePort.xml b/vistrails/db/versions/v0_3_0/specs/addModulePort.xml
index 7e29827..97e8de8 100644
--- a/vistrails/db/versions/v0_3_0/specs/addModulePort.xml
+++ b/vistrails/db/versions/v0_3_0/specs/addModulePort.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/changeAnnotation.xml b/vistrails/db/versions/v0_3_0/specs/changeAnnotation.xml
index e50980c..8959c1b 100644
--- a/vistrails/db/versions/v0_3_0/specs/changeAnnotation.xml
+++ b/vistrails/db/versions/v0_3_0/specs/changeAnnotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/changeParameter.xml b/vistrails/db/versions/v0_3_0/specs/changeParameter.xml
index 7e0ff4a..fdb7af9 100644
--- a/vistrails/db/versions/v0_3_0/specs/changeParameter.xml
+++ b/vistrails/db/versions/v0_3_0/specs/changeParameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/deleteAnnotation.xml b/vistrails/db/versions/v0_3_0/specs/deleteAnnotation.xml
index 7a8a56c..99d2c49 100644
--- a/vistrails/db/versions/v0_3_0/specs/deleteAnnotation.xml
+++ b/vistrails/db/versions/v0_3_0/specs/deleteAnnotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/deleteConnection.xml b/vistrails/db/versions/v0_3_0/specs/deleteConnection.xml
index 2fee185..ea60bb1 100644
--- a/vistrails/db/versions/v0_3_0/specs/deleteConnection.xml
+++ b/vistrails/db/versions/v0_3_0/specs/deleteConnection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/deleteFunction.xml b/vistrails/db/versions/v0_3_0/specs/deleteFunction.xml
index ddcceff..12570f8 100644
--- a/vistrails/db/versions/v0_3_0/specs/deleteFunction.xml
+++ b/vistrails/db/versions/v0_3_0/specs/deleteFunction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/deleteModule.xml b/vistrails/db/versions/v0_3_0/specs/deleteModule.xml
index b03c7db..3b23f61 100644
--- a/vistrails/db/versions/v0_3_0/specs/deleteModule.xml
+++ b/vistrails/db/versions/v0_3_0/specs/deleteModule.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/deleteModulePort.xml b/vistrails/db/versions/v0_3_0/specs/deleteModulePort.xml
index 295de4b..2c6925d 100644
--- a/vistrails/db/versions/v0_3_0/specs/deleteModulePort.xml
+++ b/vistrails/db/versions/v0_3_0/specs/deleteModulePort.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/moveModule.xml b/vistrails/db/versions/v0_3_0/specs/moveModule.xml
index a953ec2..8ba1dd3 100644
--- a/vistrails/db/versions/v0_3_0/specs/moveModule.xml
+++ b/vistrails/db/versions/v0_3_0/specs/moveModule.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/tag.xml b/vistrails/db/versions/v0_3_0/specs/tag.xml
index 523c701..5be4f11 100644
--- a/vistrails/db/versions/v0_3_0/specs/tag.xml
+++ b/vistrails/db/versions/v0_3_0/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_0/specs/vistrail.xml b/vistrails/db/versions/v0_3_0/specs/vistrail.xml
index e9507f5..1bb6926 100644
--- a/vistrails/db/versions/v0_3_0/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_3_0/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/__init__.py b/vistrails/db/versions/v0_3_1/__init__.py
index 422ad4c..29ca60f 100644
--- a/vistrails/db/versions/v0_3_1/__init__.py
+++ b/vistrails/db/versions/v0_3_1/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/domain/__init__.py b/vistrails/db/versions/v0_3_1/domain/__init__.py
index 9f153cd..5adf12b 100644
--- a/vistrails/db/versions/v0_3_1/domain/__init__.py
+++ b/vistrails/db/versions/v0_3_1/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/persistence/__init__.py b/vistrails/db/versions/v0_3_1/persistence/__init__.py
index ad4c724..04a29dc 100644
--- a/vistrails/db/versions/v0_3_1/persistence/__init__.py
+++ b/vistrails/db/versions/v0_3_1/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_3_1/schemas/xml/vistrail.xsd
index 5aa12ce..7f2e33a 100644
--- a/vistrails/db/versions/v0_3_1/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_3_1/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/action.xml b/vistrails/db/versions/v0_3_1/specs/action.xml
index 49e2150..c378ae6 100644
--- a/vistrails/db/versions/v0_3_1/specs/action.xml
+++ b/vistrails/db/versions/v0_3_1/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/addConnection.xml b/vistrails/db/versions/v0_3_1/specs/addConnection.xml
index ecaf458..d1fb1f3 100644
--- a/vistrails/db/versions/v0_3_1/specs/addConnection.xml
+++ b/vistrails/db/versions/v0_3_1/specs/addConnection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/addModule.xml b/vistrails/db/versions/v0_3_1/specs/addModule.xml
index 84c0536..5fc576b 100644
--- a/vistrails/db/versions/v0_3_1/specs/addModule.xml
+++ b/vistrails/db/versions/v0_3_1/specs/addModule.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/addModulePort.xml b/vistrails/db/versions/v0_3_1/specs/addModulePort.xml
index 7e29827..97e8de8 100644
--- a/vistrails/db/versions/v0_3_1/specs/addModulePort.xml
+++ b/vistrails/db/versions/v0_3_1/specs/addModulePort.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/changeAnnotation.xml b/vistrails/db/versions/v0_3_1/specs/changeAnnotation.xml
index e50980c..8959c1b 100644
--- a/vistrails/db/versions/v0_3_1/specs/changeAnnotation.xml
+++ b/vistrails/db/versions/v0_3_1/specs/changeAnnotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/changeParameter.xml b/vistrails/db/versions/v0_3_1/specs/changeParameter.xml
index 7e0ff4a..fdb7af9 100644
--- a/vistrails/db/versions/v0_3_1/specs/changeParameter.xml
+++ b/vistrails/db/versions/v0_3_1/specs/changeParameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/deleteAnnotation.xml b/vistrails/db/versions/v0_3_1/specs/deleteAnnotation.xml
index 7a8a56c..99d2c49 100644
--- a/vistrails/db/versions/v0_3_1/specs/deleteAnnotation.xml
+++ b/vistrails/db/versions/v0_3_1/specs/deleteAnnotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/deleteConnection.xml b/vistrails/db/versions/v0_3_1/specs/deleteConnection.xml
index 2fee185..ea60bb1 100644
--- a/vistrails/db/versions/v0_3_1/specs/deleteConnection.xml
+++ b/vistrails/db/versions/v0_3_1/specs/deleteConnection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/deleteFunction.xml b/vistrails/db/versions/v0_3_1/specs/deleteFunction.xml
index ddcceff..12570f8 100644
--- a/vistrails/db/versions/v0_3_1/specs/deleteFunction.xml
+++ b/vistrails/db/versions/v0_3_1/specs/deleteFunction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/deleteModule.xml b/vistrails/db/versions/v0_3_1/specs/deleteModule.xml
index b03c7db..3b23f61 100644
--- a/vistrails/db/versions/v0_3_1/specs/deleteModule.xml
+++ b/vistrails/db/versions/v0_3_1/specs/deleteModule.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/deleteModulePort.xml b/vistrails/db/versions/v0_3_1/specs/deleteModulePort.xml
index 295de4b..2c6925d 100644
--- a/vistrails/db/versions/v0_3_1/specs/deleteModulePort.xml
+++ b/vistrails/db/versions/v0_3_1/specs/deleteModulePort.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/moveModule.xml b/vistrails/db/versions/v0_3_1/specs/moveModule.xml
index a953ec2..8ba1dd3 100644
--- a/vistrails/db/versions/v0_3_1/specs/moveModule.xml
+++ b/vistrails/db/versions/v0_3_1/specs/moveModule.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/tag.xml b/vistrails/db/versions/v0_3_1/specs/tag.xml
index 523c701..5be4f11 100644
--- a/vistrails/db/versions/v0_3_1/specs/tag.xml
+++ b/vistrails/db/versions/v0_3_1/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/specs/vistrail.xml b/vistrails/db/versions/v0_3_1/specs/vistrail.xml
index e9507f5..1bb6926 100644
--- a/vistrails/db/versions/v0_3_1/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_3_1/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/translate/__init__.py b/vistrails/db/versions/v0_3_1/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_3_1/translate/__init__.py
+++ b/vistrails/db/versions/v0_3_1/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_3_1/translate/v0_3_0.py b/vistrails/db/versions/v0_3_1/translate/v0_3_0.py
index 1da93d5..e53721d 100644
--- a/vistrails/db/versions/v0_3_1/translate/v0_3_0.py
+++ b/vistrails/db/versions/v0_3_1/translate/v0_3_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/__init__.py b/vistrails/db/versions/v0_5_0/__init__.py
index 34bcc15..fc709c2 100644
--- a/vistrails/db/versions/v0_5_0/__init__.py
+++ b/vistrails/db/versions/v0_5_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/domain/__init__.py b/vistrails/db/versions/v0_5_0/domain/__init__.py
index 90311b9..a39b9df 100644
--- a/vistrails/db/versions/v0_5_0/domain/__init__.py
+++ b/vistrails/db/versions/v0_5_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/domain/auto_gen.py b/vistrails/db/versions/v0_5_0/domain/auto_gen.py
index 39695c9..e961df4 100644
--- a/vistrails/db/versions/v0_5_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_5_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/domain/id_scope.py b/vistrails/db/versions/v0_5_0/domain/id_scope.py
index a6efc29..e51564b 100644
--- a/vistrails/db/versions/v0_5_0/domain/id_scope.py
+++ b/vistrails/db/versions/v0_5_0/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/domain/vistrail.py b/vistrails/db/versions/v0_5_0/domain/vistrail.py
index f1acef7..4ef0a71 100644
--- a/vistrails/db/versions/v0_5_0/domain/vistrail.py
+++ b/vistrails/db/versions/v0_5_0/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/domain/workflow.py b/vistrails/db/versions/v0_5_0/domain/workflow.py
index b24ac46..e9940b0 100644
--- a/vistrails/db/versions/v0_5_0/domain/workflow.py
+++ b/vistrails/db/versions/v0_5_0/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/__init__.py b/vistrails/db/versions/v0_5_0/persistence/__init__.py
index 8d402fc..7311e29 100644
--- a/vistrails/db/versions/v0_5_0/persistence/__init__.py
+++ b/vistrails/db/versions/v0_5_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/sql/__init__.py b/vistrails/db/versions/v0_5_0/persistence/sql/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_5_0/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_5_0/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_5_0/persistence/sql/auto_gen.py
index 8cb8f19..22a068f 100644
--- a/vistrails/db/versions/v0_5_0/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_5_0/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_5_0/persistence/sql/sql_dao.py
index 860f0bd..9215dbc 100644
--- a/vistrails/db/versions/v0_5_0/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_5_0/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/xml/__init__.py b/vistrails/db/versions/v0_5_0/persistence/xml/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_5_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_5_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_5_0/persistence/xml/auto_gen.py
index 9013dfa..f72f671 100644
--- a/vistrails/db/versions/v0_5_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_5_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/xml/io.py b/vistrails/db/versions/v0_5_0/persistence/xml/io.py
index 6925d74..86c1a42 100644
--- a/vistrails/db/versions/v0_5_0/persistence/xml/io.py
+++ b/vistrails/db/versions/v0_5_0/persistence/xml/io.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_5_0/persistence/xml/xml_dao.py
index e2f4f42..31cc8a1 100644
--- a/vistrails/db/versions/v0_5_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_5_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_5_0/schemas/sql/vistrails.sql
index b5c9562..4caa68f 100644
--- a/vistrails/db/versions/v0_5_0/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_5_0/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_5_0/schemas/sql/vistrails_drop.sql
index f8c551a..65065cd 100644
--- a/vistrails/db/versions/v0_5_0/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_5_0/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/schemas/xml/log.xsd b/vistrails/db/versions/v0_5_0/schemas/xml/log.xsd
index 234c75b..10a7c25 100644
--- a/vistrails/db/versions/v0_5_0/schemas/xml/log.xsd
+++ b/vistrails/db/versions/v0_5_0/schemas/xml/log.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_5_0/schemas/xml/vistrail.xsd
index efb2e0f..ededddd 100644
--- a/vistrails/db/versions/v0_5_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_5_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/schemas/xml/workflow.xsd b/vistrails/db/versions/v0_5_0/schemas/xml/workflow.xsd
index 8beb03e..1863192 100644
--- a/vistrails/db/versions/v0_5_0/schemas/xml/workflow.xsd
+++ b/vistrails/db/versions/v0_5_0/schemas/xml/workflow.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/action.xml b/vistrails/db/versions/v0_5_0/specs/action.xml
index 84c238e..64a0365 100644
--- a/vistrails/db/versions/v0_5_0/specs/action.xml
+++ b/vistrails/db/versions/v0_5_0/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/add.xml b/vistrails/db/versions/v0_5_0/specs/add.xml
index a686e41..e823799 100644
--- a/vistrails/db/versions/v0_5_0/specs/add.xml
+++ b/vistrails/db/versions/v0_5_0/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/annotation.xml b/vistrails/db/versions/v0_5_0/specs/annotation.xml
index f41444b..3e57531 100644
--- a/vistrails/db/versions/v0_5_0/specs/annotation.xml
+++ b/vistrails/db/versions/v0_5_0/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/change.xml b/vistrails/db/versions/v0_5_0/specs/change.xml
index 9aeba60..4fe3393 100644
--- a/vistrails/db/versions/v0_5_0/specs/change.xml
+++ b/vistrails/db/versions/v0_5_0/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/connection.xml b/vistrails/db/versions/v0_5_0/specs/connection.xml
index d074b10..9eb9eb7 100644
--- a/vistrails/db/versions/v0_5_0/specs/connection.xml
+++ b/vistrails/db/versions/v0_5_0/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/delete.xml b/vistrails/db/versions/v0_5_0/specs/delete.xml
index 906e2d9..a3fdb24 100644
--- a/vistrails/db/versions/v0_5_0/specs/delete.xml
+++ b/vistrails/db/versions/v0_5_0/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/execRec.xml b/vistrails/db/versions/v0_5_0/specs/execRec.xml
index f4efc35..d78c6fc 100644
--- a/vistrails/db/versions/v0_5_0/specs/execRec.xml
+++ b/vistrails/db/versions/v0_5_0/specs/execRec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/function.xml b/vistrails/db/versions/v0_5_0/specs/function.xml
index 4f6b03b..f308629 100644
--- a/vistrails/db/versions/v0_5_0/specs/function.xml
+++ b/vistrails/db/versions/v0_5_0/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/location.xml b/vistrails/db/versions/v0_5_0/specs/location.xml
index 75133fb..fc1260d 100644
--- a/vistrails/db/versions/v0_5_0/specs/location.xml
+++ b/vistrails/db/versions/v0_5_0/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/log.xml b/vistrails/db/versions/v0_5_0/specs/log.xml
index 44557b2..a27c677 100644
--- a/vistrails/db/versions/v0_5_0/specs/log.xml
+++ b/vistrails/db/versions/v0_5_0/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/machine.xml b/vistrails/db/versions/v0_5_0/specs/machine.xml
index 8b9e838..325b092 100644
--- a/vistrails/db/versions/v0_5_0/specs/machine.xml
+++ b/vistrails/db/versions/v0_5_0/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/macro.xml b/vistrails/db/versions/v0_5_0/specs/macro.xml
index e371aad..584cc2d 100644
--- a/vistrails/db/versions/v0_5_0/specs/macro.xml
+++ b/vistrails/db/versions/v0_5_0/specs/macro.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/module.xml b/vistrails/db/versions/v0_5_0/specs/module.xml
index 53f283b..be2c2ba 100644
--- a/vistrails/db/versions/v0_5_0/specs/module.xml
+++ b/vistrails/db/versions/v0_5_0/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/other.xml b/vistrails/db/versions/v0_5_0/specs/other.xml
index 21a2846..f776e64 100644
--- a/vistrails/db/versions/v0_5_0/specs/other.xml
+++ b/vistrails/db/versions/v0_5_0/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/parameter.xml b/vistrails/db/versions/v0_5_0/specs/parameter.xml
index 6672280..2a1c33d 100644
--- a/vistrails/db/versions/v0_5_0/specs/parameter.xml
+++ b/vistrails/db/versions/v0_5_0/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/port.xml b/vistrails/db/versions/v0_5_0/specs/port.xml
index 06f12a5..593b993 100644
--- a/vistrails/db/versions/v0_5_0/specs/port.xml
+++ b/vistrails/db/versions/v0_5_0/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/portSpec.xml b/vistrails/db/versions/v0_5_0/specs/portSpec.xml
index 9d21cce..d4283f7 100644
--- a/vistrails/db/versions/v0_5_0/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_5_0/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/session.xml b/vistrails/db/versions/v0_5_0/specs/session.xml
index 3fdbdba..56a541c 100644
--- a/vistrails/db/versions/v0_5_0/specs/session.xml
+++ b/vistrails/db/versions/v0_5_0/specs/session.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/tag.xml b/vistrails/db/versions/v0_5_0/specs/tag.xml
index 8dd3d5a..c154f39 100644
--- a/vistrails/db/versions/v0_5_0/specs/tag.xml
+++ b/vistrails/db/versions/v0_5_0/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/vistrail.xml b/vistrails/db/versions/v0_5_0/specs/vistrail.xml
index 12990f0..f4a6c3b 100644
--- a/vistrails/db/versions/v0_5_0/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_5_0/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/wfExec.xml b/vistrails/db/versions/v0_5_0/specs/wfExec.xml
index 0c55a34..ab53e3a 100644
--- a/vistrails/db/versions/v0_5_0/specs/wfExec.xml
+++ b/vistrails/db/versions/v0_5_0/specs/wfExec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/specs/workflow.xml b/vistrails/db/versions/v0_5_0/specs/workflow.xml
index 42bfafa..9ede518 100644
--- a/vistrails/db/versions/v0_5_0/specs/workflow.xml
+++ b/vistrails/db/versions/v0_5_0/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/translate/__init__.py b/vistrails/db/versions/v0_5_0/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_5_0/translate/__init__.py
+++ b/vistrails/db/versions/v0_5_0/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_5_0/translate/v0_3_1.py b/vistrails/db/versions/v0_5_0/translate/v0_3_1.py
index dd5c082..a2ce0b7 100644
--- a/vistrails/db/versions/v0_5_0/translate/v0_3_1.py
+++ b/vistrails/db/versions/v0_5_0/translate/v0_3_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/__init__.py b/vistrails/db/versions/v0_6_0/__init__.py
index 12cdf9b..9af9059 100644
--- a/vistrails/db/versions/v0_6_0/__init__.py
+++ b/vistrails/db/versions/v0_6_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/domain/__init__.py b/vistrails/db/versions/v0_6_0/domain/__init__.py
index 90311b9..a39b9df 100644
--- a/vistrails/db/versions/v0_6_0/domain/__init__.py
+++ b/vistrails/db/versions/v0_6_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/domain/auto_gen.py b/vistrails/db/versions/v0_6_0/domain/auto_gen.py
index 544ed93..b5315cd 100644
--- a/vistrails/db/versions/v0_6_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_6_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/domain/id_scope.py b/vistrails/db/versions/v0_6_0/domain/id_scope.py
index a6efc29..e51564b 100644
--- a/vistrails/db/versions/v0_6_0/domain/id_scope.py
+++ b/vistrails/db/versions/v0_6_0/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/domain/vistrail.py b/vistrails/db/versions/v0_6_0/domain/vistrail.py
index f1acef7..4ef0a71 100644
--- a/vistrails/db/versions/v0_6_0/domain/vistrail.py
+++ b/vistrails/db/versions/v0_6_0/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/domain/workflow.py b/vistrails/db/versions/v0_6_0/domain/workflow.py
index b24ac46..e9940b0 100644
--- a/vistrails/db/versions/v0_6_0/domain/workflow.py
+++ b/vistrails/db/versions/v0_6_0/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/__init__.py b/vistrails/db/versions/v0_6_0/persistence/__init__.py
index 8d402fc..7311e29 100644
--- a/vistrails/db/versions/v0_6_0/persistence/__init__.py
+++ b/vistrails/db/versions/v0_6_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/sql/__init__.py b/vistrails/db/versions/v0_6_0/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_6_0/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_6_0/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_6_0/persistence/sql/auto_gen.py
index 29d165b..2010647 100644
--- a/vistrails/db/versions/v0_6_0/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_6_0/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_6_0/persistence/sql/sql_dao.py
index 5dd992c..eb1c905 100644
--- a/vistrails/db/versions/v0_6_0/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_6_0/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/xml/__init__.py b/vistrails/db/versions/v0_6_0/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_6_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_6_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_6_0/persistence/xml/auto_gen.py
index a3a314d..ef52ecb 100644
--- a/vistrails/db/versions/v0_6_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_6_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/xml/io.py b/vistrails/db/versions/v0_6_0/persistence/xml/io.py
index cd4cd9d..7de96c4 100644
--- a/vistrails/db/versions/v0_6_0/persistence/xml/io.py
+++ b/vistrails/db/versions/v0_6_0/persistence/xml/io.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_6_0/persistence/xml/xml_dao.py
index ee24db4..3540629 100644
--- a/vistrails/db/versions/v0_6_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_6_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_6_0/schemas/sql/vistrails.sql
index 54225c4..7d82d2b 100644
--- a/vistrails/db/versions/v0_6_0/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_6_0/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_6_0/schemas/sql/vistrails_drop.sql
index 0738359..7fa1bdf 100644
--- a/vistrails/db/versions/v0_6_0/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_6_0/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_6_0/schemas/xml/vistrail.xsd
index 00f0e33..ea0e24e 100644
--- a/vistrails/db/versions/v0_6_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_6_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/abstraction.xml b/vistrails/db/versions/v0_6_0/specs/abstraction.xml
index aaef828..6ee6194 100644
--- a/vistrails/db/versions/v0_6_0/specs/abstraction.xml
+++ b/vistrails/db/versions/v0_6_0/specs/abstraction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/abstractionRef.xml b/vistrails/db/versions/v0_6_0/specs/abstractionRef.xml
index 04a6754..508f48f 100644
--- a/vistrails/db/versions/v0_6_0/specs/abstractionRef.xml
+++ b/vistrails/db/versions/v0_6_0/specs/abstractionRef.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/action.xml b/vistrails/db/versions/v0_6_0/specs/action.xml
index 28a9b6f..e833a3b 100644
--- a/vistrails/db/versions/v0_6_0/specs/action.xml
+++ b/vistrails/db/versions/v0_6_0/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/add.xml b/vistrails/db/versions/v0_6_0/specs/add.xml
index 4ae7d38..4ef4a32 100644
--- a/vistrails/db/versions/v0_6_0/specs/add.xml
+++ b/vistrails/db/versions/v0_6_0/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/annotation.xml b/vistrails/db/versions/v0_6_0/specs/annotation.xml
index f3f9e29..f6ec3c4 100644
--- a/vistrails/db/versions/v0_6_0/specs/annotation.xml
+++ b/vistrails/db/versions/v0_6_0/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/change.xml b/vistrails/db/versions/v0_6_0/specs/change.xml
index bda170d..276d546 100644
--- a/vistrails/db/versions/v0_6_0/specs/change.xml
+++ b/vistrails/db/versions/v0_6_0/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/connection.xml b/vistrails/db/versions/v0_6_0/specs/connection.xml
index eefd6a4..da6de76 100644
--- a/vistrails/db/versions/v0_6_0/specs/connection.xml
+++ b/vistrails/db/versions/v0_6_0/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/delete.xml b/vistrails/db/versions/v0_6_0/specs/delete.xml
index 906e2d9..a3fdb24 100644
--- a/vistrails/db/versions/v0_6_0/specs/delete.xml
+++ b/vistrails/db/versions/v0_6_0/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/function.xml b/vistrails/db/versions/v0_6_0/specs/function.xml
index 4f6b03b..f308629 100644
--- a/vistrails/db/versions/v0_6_0/specs/function.xml
+++ b/vistrails/db/versions/v0_6_0/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/location.xml b/vistrails/db/versions/v0_6_0/specs/location.xml
index 75133fb..fc1260d 100644
--- a/vistrails/db/versions/v0_6_0/specs/location.xml
+++ b/vistrails/db/versions/v0_6_0/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/log.xml b/vistrails/db/versions/v0_6_0/specs/log.xml
index 16e317e..d0d9f4d 100644
--- a/vistrails/db/versions/v0_6_0/specs/log.xml
+++ b/vistrails/db/versions/v0_6_0/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/machine.xml b/vistrails/db/versions/v0_6_0/specs/machine.xml
index 57e7ee3..3652e94 100644
--- a/vistrails/db/versions/v0_6_0/specs/machine.xml
+++ b/vistrails/db/versions/v0_6_0/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/module.xml b/vistrails/db/versions/v0_6_0/specs/module.xml
index 5768f1b..f4371f2 100644
--- a/vistrails/db/versions/v0_6_0/specs/module.xml
+++ b/vistrails/db/versions/v0_6_0/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/module_exec.xml b/vistrails/db/versions/v0_6_0/specs/module_exec.xml
index e109829..7180584 100644
--- a/vistrails/db/versions/v0_6_0/specs/module_exec.xml
+++ b/vistrails/db/versions/v0_6_0/specs/module_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/other.xml b/vistrails/db/versions/v0_6_0/specs/other.xml
index 21a2846..f776e64 100644
--- a/vistrails/db/versions/v0_6_0/specs/other.xml
+++ b/vistrails/db/versions/v0_6_0/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/parameter.xml b/vistrails/db/versions/v0_6_0/specs/parameter.xml
index f34fb2c..ce82ab9 100644
--- a/vistrails/db/versions/v0_6_0/specs/parameter.xml
+++ b/vistrails/db/versions/v0_6_0/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/port.xml b/vistrails/db/versions/v0_6_0/specs/port.xml
index 06f12a5..593b993 100644
--- a/vistrails/db/versions/v0_6_0/specs/port.xml
+++ b/vistrails/db/versions/v0_6_0/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/portSpec.xml b/vistrails/db/versions/v0_6_0/specs/portSpec.xml
index 9d21cce..d4283f7 100644
--- a/vistrails/db/versions/v0_6_0/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_6_0/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/tag.xml b/vistrails/db/versions/v0_6_0/specs/tag.xml
index 5169bff..c926acb 100644
--- a/vistrails/db/versions/v0_6_0/specs/tag.xml
+++ b/vistrails/db/versions/v0_6_0/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/vistrail.xml b/vistrails/db/versions/v0_6_0/specs/vistrail.xml
index c706ac9..d20708b 100644
--- a/vistrails/db/versions/v0_6_0/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_6_0/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/workflow.xml b/vistrails/db/versions/v0_6_0/specs/workflow.xml
index 622287c..3594827 100644
--- a/vistrails/db/versions/v0_6_0/specs/workflow.xml
+++ b/vistrails/db/versions/v0_6_0/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/specs/workflow_exec.xml b/vistrails/db/versions/v0_6_0/specs/workflow_exec.xml
index 83e1b09..5b5a3b6 100644
--- a/vistrails/db/versions/v0_6_0/specs/workflow_exec.xml
+++ b/vistrails/db/versions/v0_6_0/specs/workflow_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/translate/__init__.py b/vistrails/db/versions/v0_6_0/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_6_0/translate/__init__.py
+++ b/vistrails/db/versions/v0_6_0/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/translate/v0_3_1.py b/vistrails/db/versions/v0_6_0/translate/v0_3_1.py
index 379b25a..7cbed9e 100644
--- a/vistrails/db/versions/v0_6_0/translate/v0_3_1.py
+++ b/vistrails/db/versions/v0_6_0/translate/v0_3_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_6_0/translate/v0_5_0.py b/vistrails/db/versions/v0_6_0/translate/v0_5_0.py
index 0838329..c2bcf19 100644
--- a/vistrails/db/versions/v0_6_0/translate/v0_5_0.py
+++ b/vistrails/db/versions/v0_6_0/translate/v0_5_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/__init__.py b/vistrails/db/versions/v0_7_0/__init__.py
index 43fc4f4..d67e316 100644
--- a/vistrails/db/versions/v0_7_0/__init__.py
+++ b/vistrails/db/versions/v0_7_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/domain/__init__.py b/vistrails/db/versions/v0_7_0/domain/__init__.py
index 702e5bf..cb4c3c3 100644
--- a/vistrails/db/versions/v0_7_0/domain/__init__.py
+++ b/vistrails/db/versions/v0_7_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/domain/abstraction.py b/vistrails/db/versions/v0_7_0/domain/abstraction.py
index 4835c37..7ab5c13 100644
--- a/vistrails/db/versions/v0_7_0/domain/abstraction.py
+++ b/vistrails/db/versions/v0_7_0/domain/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/domain/auto_gen.py b/vistrails/db/versions/v0_7_0/domain/auto_gen.py
index d7c4262..5f030d2 100644
--- a/vistrails/db/versions/v0_7_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_7_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/domain/id_scope.py b/vistrails/db/versions/v0_7_0/domain/id_scope.py
index 49b9d49..6bddfcf 100644
--- a/vistrails/db/versions/v0_7_0/domain/id_scope.py
+++ b/vistrails/db/versions/v0_7_0/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/domain/vistrail.py b/vistrails/db/versions/v0_7_0/domain/vistrail.py
index 86ba69c..b55116c 100644
--- a/vistrails/db/versions/v0_7_0/domain/vistrail.py
+++ b/vistrails/db/versions/v0_7_0/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/domain/workflow.py b/vistrails/db/versions/v0_7_0/domain/workflow.py
index bac228b..3e9c9e8 100644
--- a/vistrails/db/versions/v0_7_0/domain/workflow.py
+++ b/vistrails/db/versions/v0_7_0/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/__init__.py b/vistrails/db/versions/v0_7_0/persistence/__init__.py
index 8d402fc..7311e29 100644
--- a/vistrails/db/versions/v0_7_0/persistence/__init__.py
+++ b/vistrails/db/versions/v0_7_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/sql/__init__.py b/vistrails/db/versions/v0_7_0/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_7_0/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_7_0/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_7_0/persistence/sql/auto_gen.py
index f49fdfb..566a690 100644
--- a/vistrails/db/versions/v0_7_0/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_7_0/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_7_0/persistence/sql/sql_dao.py
index 5dd992c..eb1c905 100644
--- a/vistrails/db/versions/v0_7_0/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_7_0/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/xml/__init__.py b/vistrails/db/versions/v0_7_0/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_7_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_7_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_7_0/persistence/xml/auto_gen.py
index 039fc35..c4de790 100644
--- a/vistrails/db/versions/v0_7_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_7_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/xml/io.py b/vistrails/db/versions/v0_7_0/persistence/xml/io.py
index a9cbeb9..18b0016 100644
--- a/vistrails/db/versions/v0_7_0/persistence/xml/io.py
+++ b/vistrails/db/versions/v0_7_0/persistence/xml/io.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_7_0/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v0_7_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_7_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_7_0/schemas/sql/vistrails.sql
index 006de55..134be5b 100644
--- a/vistrails/db/versions/v0_7_0/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_7_0/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_7_0/schemas/sql/vistrails_drop.sql
index 258296f..c7a2138 100644
--- a/vistrails/db/versions/v0_7_0/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_7_0/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_7_0/schemas/xml/vistrail.xsd
index e382542..9549fff 100644
--- a/vistrails/db/versions/v0_7_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_7_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/abstraction.xml b/vistrails/db/versions/v0_7_0/specs/abstraction.xml
index 0209e32..e4ba20c 100644
--- a/vistrails/db/versions/v0_7_0/specs/abstraction.xml
+++ b/vistrails/db/versions/v0_7_0/specs/abstraction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/abstractionRef.xml b/vistrails/db/versions/v0_7_0/specs/abstractionRef.xml
index 80a23e6..00d6a5a 100644
--- a/vistrails/db/versions/v0_7_0/specs/abstractionRef.xml
+++ b/vistrails/db/versions/v0_7_0/specs/abstractionRef.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/action.xml b/vistrails/db/versions/v0_7_0/specs/action.xml
index 2129005..d611cb8 100644
--- a/vistrails/db/versions/v0_7_0/specs/action.xml
+++ b/vistrails/db/versions/v0_7_0/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/add.xml b/vistrails/db/versions/v0_7_0/specs/add.xml
index 4354010..b77224a 100644
--- a/vistrails/db/versions/v0_7_0/specs/add.xml
+++ b/vistrails/db/versions/v0_7_0/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/annotation.xml b/vistrails/db/versions/v0_7_0/specs/annotation.xml
index f3f9e29..f6ec3c4 100644
--- a/vistrails/db/versions/v0_7_0/specs/annotation.xml
+++ b/vistrails/db/versions/v0_7_0/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/change.xml b/vistrails/db/versions/v0_7_0/specs/change.xml
index 1078b59..7c12a53 100644
--- a/vistrails/db/versions/v0_7_0/specs/change.xml
+++ b/vistrails/db/versions/v0_7_0/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/connection.xml b/vistrails/db/versions/v0_7_0/specs/connection.xml
index eefd6a4..da6de76 100644
--- a/vistrails/db/versions/v0_7_0/specs/connection.xml
+++ b/vistrails/db/versions/v0_7_0/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/delete.xml b/vistrails/db/versions/v0_7_0/specs/delete.xml
index 544bfcf..df925b1 100644
--- a/vistrails/db/versions/v0_7_0/specs/delete.xml
+++ b/vistrails/db/versions/v0_7_0/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/function.xml b/vistrails/db/versions/v0_7_0/specs/function.xml
index 4f6b03b..f308629 100644
--- a/vistrails/db/versions/v0_7_0/specs/function.xml
+++ b/vistrails/db/versions/v0_7_0/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/location.xml b/vistrails/db/versions/v0_7_0/specs/location.xml
index 48714a6..ee2efcd 100644
--- a/vistrails/db/versions/v0_7_0/specs/location.xml
+++ b/vistrails/db/versions/v0_7_0/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/log.xml b/vistrails/db/versions/v0_7_0/specs/log.xml
index d5b08ce..074ca38 100644
--- a/vistrails/db/versions/v0_7_0/specs/log.xml
+++ b/vistrails/db/versions/v0_7_0/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/machine.xml b/vistrails/db/versions/v0_7_0/specs/machine.xml
index 57e7ee3..3652e94 100644
--- a/vistrails/db/versions/v0_7_0/specs/machine.xml
+++ b/vistrails/db/versions/v0_7_0/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/module.xml b/vistrails/db/versions/v0_7_0/specs/module.xml
index 0f3c29f..cde166b 100644
--- a/vistrails/db/versions/v0_7_0/specs/module.xml
+++ b/vistrails/db/versions/v0_7_0/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/module_exec.xml b/vistrails/db/versions/v0_7_0/specs/module_exec.xml
index e109829..7180584 100644
--- a/vistrails/db/versions/v0_7_0/specs/module_exec.xml
+++ b/vistrails/db/versions/v0_7_0/specs/module_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/other.xml b/vistrails/db/versions/v0_7_0/specs/other.xml
index 21a2846..f776e64 100644
--- a/vistrails/db/versions/v0_7_0/specs/other.xml
+++ b/vistrails/db/versions/v0_7_0/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/parameter.xml b/vistrails/db/versions/v0_7_0/specs/parameter.xml
index f34fb2c..ce82ab9 100644
--- a/vistrails/db/versions/v0_7_0/specs/parameter.xml
+++ b/vistrails/db/versions/v0_7_0/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/port.xml b/vistrails/db/versions/v0_7_0/specs/port.xml
index a9611d4..dddba55 100644
--- a/vistrails/db/versions/v0_7_0/specs/port.xml
+++ b/vistrails/db/versions/v0_7_0/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/portSpec.xml b/vistrails/db/versions/v0_7_0/specs/portSpec.xml
index 9d21cce..d4283f7 100644
--- a/vistrails/db/versions/v0_7_0/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_7_0/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/tag.xml b/vistrails/db/versions/v0_7_0/specs/tag.xml
index 5169bff..c926acb 100644
--- a/vistrails/db/versions/v0_7_0/specs/tag.xml
+++ b/vistrails/db/versions/v0_7_0/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/vistrail.xml b/vistrails/db/versions/v0_7_0/specs/vistrail.xml
index f46520b..365e2cd 100644
--- a/vistrails/db/versions/v0_7_0/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_7_0/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/workflow.xml b/vistrails/db/versions/v0_7_0/specs/workflow.xml
index c0e9bd9..50b756a 100644
--- a/vistrails/db/versions/v0_7_0/specs/workflow.xml
+++ b/vistrails/db/versions/v0_7_0/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/specs/workflow_exec.xml b/vistrails/db/versions/v0_7_0/specs/workflow_exec.xml
index 6da61b8..2c7bfb8 100644
--- a/vistrails/db/versions/v0_7_0/specs/workflow_exec.xml
+++ b/vistrails/db/versions/v0_7_0/specs/workflow_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/translate/__init__.py b/vistrails/db/versions/v0_7_0/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_7_0/translate/__init__.py
+++ b/vistrails/db/versions/v0_7_0/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_7_0/translate/v0_6_0.py b/vistrails/db/versions/v0_7_0/translate/v0_6_0.py
index 718740b..e9ead4a 100644
--- a/vistrails/db/versions/v0_7_0/translate/v0_6_0.py
+++ b/vistrails/db/versions/v0_7_0/translate/v0_6_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/__init__.py b/vistrails/db/versions/v0_8_0/__init__.py
index 742fda7..3955c48 100644
--- a/vistrails/db/versions/v0_8_0/__init__.py
+++ b/vistrails/db/versions/v0_8_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/domain/__init__.py b/vistrails/db/versions/v0_8_0/domain/__init__.py
index 702e5bf..cb4c3c3 100644
--- a/vistrails/db/versions/v0_8_0/domain/__init__.py
+++ b/vistrails/db/versions/v0_8_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/domain/abstraction.py b/vistrails/db/versions/v0_8_0/domain/abstraction.py
index 4835c37..7ab5c13 100644
--- a/vistrails/db/versions/v0_8_0/domain/abstraction.py
+++ b/vistrails/db/versions/v0_8_0/domain/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/domain/auto_gen.py b/vistrails/db/versions/v0_8_0/domain/auto_gen.py
index bdf7326..09939c7 100644
--- a/vistrails/db/versions/v0_8_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_8_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/domain/id_scope.py b/vistrails/db/versions/v0_8_0/domain/id_scope.py
index 49b9d49..6bddfcf 100644
--- a/vistrails/db/versions/v0_8_0/domain/id_scope.py
+++ b/vistrails/db/versions/v0_8_0/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/domain/vistrail.py b/vistrails/db/versions/v0_8_0/domain/vistrail.py
index 44ad7fd..ee43c37 100644
--- a/vistrails/db/versions/v0_8_0/domain/vistrail.py
+++ b/vistrails/db/versions/v0_8_0/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/domain/workflow.py b/vistrails/db/versions/v0_8_0/domain/workflow.py
index 0856048..9c13330 100644
--- a/vistrails/db/versions/v0_8_0/domain/workflow.py
+++ b/vistrails/db/versions/v0_8_0/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/__init__.py b/vistrails/db/versions/v0_8_0/persistence/__init__.py
index 97fb6d0..8544382 100644
--- a/vistrails/db/versions/v0_8_0/persistence/__init__.py
+++ b/vistrails/db/versions/v0_8_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/sql/__init__.py b/vistrails/db/versions/v0_8_0/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_8_0/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_8_0/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_8_0/persistence/sql/auto_gen.py
index 929e0a9..03a8b40 100644
--- a/vistrails/db/versions/v0_8_0/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_8_0/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_8_0/persistence/sql/sql_dao.py
index 5d9d4e6..c03e40a 100644
--- a/vistrails/db/versions/v0_8_0/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_8_0/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/xml/__init__.py b/vistrails/db/versions/v0_8_0/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_8_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_8_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_8_0/persistence/xml/auto_gen.py
index fa9bb2b..920ebef 100644
--- a/vistrails/db/versions/v0_8_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_8_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_8_0/persistence/xml/xml_dao.py
index ef4ddec..214e319 100644
--- a/vistrails/db/versions/v0_8_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_8_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_8_0/schemas/sql/vistrails.sql
index 43f50b9..717cb3b 100644
--- a/vistrails/db/versions/v0_8_0/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_8_0/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_8_0/schemas/sql/vistrails_drop.sql
index 258296f..c7a2138 100644
--- a/vistrails/db/versions/v0_8_0/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_8_0/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_8_0/schemas/xml/vistrail.xsd
index ef24d85..1e50455 100644
--- a/vistrails/db/versions/v0_8_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_8_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/abstraction.xml b/vistrails/db/versions/v0_8_0/specs/abstraction.xml
index 0209e32..e4ba20c 100644
--- a/vistrails/db/versions/v0_8_0/specs/abstraction.xml
+++ b/vistrails/db/versions/v0_8_0/specs/abstraction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/abstractionRef.xml b/vistrails/db/versions/v0_8_0/specs/abstractionRef.xml
index dd24047..34ba35e 100644
--- a/vistrails/db/versions/v0_8_0/specs/abstractionRef.xml
+++ b/vistrails/db/versions/v0_8_0/specs/abstractionRef.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/action.xml b/vistrails/db/versions/v0_8_0/specs/action.xml
index 2129005..d611cb8 100644
--- a/vistrails/db/versions/v0_8_0/specs/action.xml
+++ b/vistrails/db/versions/v0_8_0/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/add.xml b/vistrails/db/versions/v0_8_0/specs/add.xml
index 4354010..b77224a 100644
--- a/vistrails/db/versions/v0_8_0/specs/add.xml
+++ b/vistrails/db/versions/v0_8_0/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/annotation.xml b/vistrails/db/versions/v0_8_0/specs/annotation.xml
index 3cef2ab..a01fbd0 100644
--- a/vistrails/db/versions/v0_8_0/specs/annotation.xml
+++ b/vistrails/db/versions/v0_8_0/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/change.xml b/vistrails/db/versions/v0_8_0/specs/change.xml
index 1078b59..7c12a53 100644
--- a/vistrails/db/versions/v0_8_0/specs/change.xml
+++ b/vistrails/db/versions/v0_8_0/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/connection.xml b/vistrails/db/versions/v0_8_0/specs/connection.xml
index eefd6a4..da6de76 100644
--- a/vistrails/db/versions/v0_8_0/specs/connection.xml
+++ b/vistrails/db/versions/v0_8_0/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/delete.xml b/vistrails/db/versions/v0_8_0/specs/delete.xml
index 544bfcf..df925b1 100644
--- a/vistrails/db/versions/v0_8_0/specs/delete.xml
+++ b/vistrails/db/versions/v0_8_0/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/function.xml b/vistrails/db/versions/v0_8_0/specs/function.xml
index 48244b6..f2959b1 100644
--- a/vistrails/db/versions/v0_8_0/specs/function.xml
+++ b/vistrails/db/versions/v0_8_0/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/location.xml b/vistrails/db/versions/v0_8_0/specs/location.xml
index 48714a6..ee2efcd 100644
--- a/vistrails/db/versions/v0_8_0/specs/location.xml
+++ b/vistrails/db/versions/v0_8_0/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/log.xml b/vistrails/db/versions/v0_8_0/specs/log.xml
index d5b08ce..074ca38 100644
--- a/vistrails/db/versions/v0_8_0/specs/log.xml
+++ b/vistrails/db/versions/v0_8_0/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/machine.xml b/vistrails/db/versions/v0_8_0/specs/machine.xml
index 57e7ee3..3652e94 100644
--- a/vistrails/db/versions/v0_8_0/specs/machine.xml
+++ b/vistrails/db/versions/v0_8_0/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/module.xml b/vistrails/db/versions/v0_8_0/specs/module.xml
index b77188d..92e0cd3 100644
--- a/vistrails/db/versions/v0_8_0/specs/module.xml
+++ b/vistrails/db/versions/v0_8_0/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/module_exec.xml b/vistrails/db/versions/v0_8_0/specs/module_exec.xml
index e109829..7180584 100644
--- a/vistrails/db/versions/v0_8_0/specs/module_exec.xml
+++ b/vistrails/db/versions/v0_8_0/specs/module_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/other.xml b/vistrails/db/versions/v0_8_0/specs/other.xml
index 21a2846..f776e64 100644
--- a/vistrails/db/versions/v0_8_0/specs/other.xml
+++ b/vistrails/db/versions/v0_8_0/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/parameter.xml b/vistrails/db/versions/v0_8_0/specs/parameter.xml
index f34fb2c..ce82ab9 100644
--- a/vistrails/db/versions/v0_8_0/specs/parameter.xml
+++ b/vistrails/db/versions/v0_8_0/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/port.xml b/vistrails/db/versions/v0_8_0/specs/port.xml
index a9611d4..dddba55 100644
--- a/vistrails/db/versions/v0_8_0/specs/port.xml
+++ b/vistrails/db/versions/v0_8_0/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/portSpec.xml b/vistrails/db/versions/v0_8_0/specs/portSpec.xml
index 9d21cce..d4283f7 100644
--- a/vistrails/db/versions/v0_8_0/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_8_0/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/tag.xml b/vistrails/db/versions/v0_8_0/specs/tag.xml
index 5169bff..c926acb 100644
--- a/vistrails/db/versions/v0_8_0/specs/tag.xml
+++ b/vistrails/db/versions/v0_8_0/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/vistrail.xml b/vistrails/db/versions/v0_8_0/specs/vistrail.xml
index 48c7435..940cd95 100644
--- a/vistrails/db/versions/v0_8_0/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_8_0/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/workflow.xml b/vistrails/db/versions/v0_8_0/specs/workflow.xml
index 72b388a..7c834ce 100644
--- a/vistrails/db/versions/v0_8_0/specs/workflow.xml
+++ b/vistrails/db/versions/v0_8_0/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/specs/workflow_exec.xml b/vistrails/db/versions/v0_8_0/specs/workflow_exec.xml
index 6da61b8..2c7bfb8 100644
--- a/vistrails/db/versions/v0_8_0/specs/workflow_exec.xml
+++ b/vistrails/db/versions/v0_8_0/specs/workflow_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/translate/__init__.py b/vistrails/db/versions/v0_8_0/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_8_0/translate/__init__.py
+++ b/vistrails/db/versions/v0_8_0/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_0/translate/v0_7_0.py b/vistrails/db/versions/v0_8_0/translate/v0_7_0.py
index 7310dac..4989927 100644
--- a/vistrails/db/versions/v0_8_0/translate/v0_7_0.py
+++ b/vistrails/db/versions/v0_8_0/translate/v0_7_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/__init__.py b/vistrails/db/versions/v0_8_1/__init__.py
index f582bfd..e93c2e1 100644
--- a/vistrails/db/versions/v0_8_1/__init__.py
+++ b/vistrails/db/versions/v0_8_1/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/domain/__init__.py b/vistrails/db/versions/v0_8_1/domain/__init__.py
index 890b3b5..7357e9f 100644
--- a/vistrails/db/versions/v0_8_1/domain/__init__.py
+++ b/vistrails/db/versions/v0_8_1/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/persistence/__init__.py b/vistrails/db/versions/v0_8_1/persistence/__init__.py
index 0663274..1465614 100644
--- a/vistrails/db/versions/v0_8_1/persistence/__init__.py
+++ b/vistrails/db/versions/v0_8_1/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_8_1/schemas/sql/vistrails.sql
index 43f50b9..717cb3b 100644
--- a/vistrails/db/versions/v0_8_1/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_8_1/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_8_1/schemas/sql/vistrails_drop.sql
index 258296f..c7a2138 100644
--- a/vistrails/db/versions/v0_8_1/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_8_1/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_8_1/schemas/xml/vistrail.xsd
index ef24d85..1e50455 100644
--- a/vistrails/db/versions/v0_8_1/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_8_1/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/abstraction.xml b/vistrails/db/versions/v0_8_1/specs/abstraction.xml
index 0209e32..e4ba20c 100644
--- a/vistrails/db/versions/v0_8_1/specs/abstraction.xml
+++ b/vistrails/db/versions/v0_8_1/specs/abstraction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/abstractionRef.xml b/vistrails/db/versions/v0_8_1/specs/abstractionRef.xml
index dd24047..34ba35e 100644
--- a/vistrails/db/versions/v0_8_1/specs/abstractionRef.xml
+++ b/vistrails/db/versions/v0_8_1/specs/abstractionRef.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/action.xml b/vistrails/db/versions/v0_8_1/specs/action.xml
index 2129005..d611cb8 100644
--- a/vistrails/db/versions/v0_8_1/specs/action.xml
+++ b/vistrails/db/versions/v0_8_1/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/add.xml b/vistrails/db/versions/v0_8_1/specs/add.xml
index 4354010..b77224a 100644
--- a/vistrails/db/versions/v0_8_1/specs/add.xml
+++ b/vistrails/db/versions/v0_8_1/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/annotation.xml b/vistrails/db/versions/v0_8_1/specs/annotation.xml
index 3cef2ab..a01fbd0 100644
--- a/vistrails/db/versions/v0_8_1/specs/annotation.xml
+++ b/vistrails/db/versions/v0_8_1/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/change.xml b/vistrails/db/versions/v0_8_1/specs/change.xml
index 1078b59..7c12a53 100644
--- a/vistrails/db/versions/v0_8_1/specs/change.xml
+++ b/vistrails/db/versions/v0_8_1/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/connection.xml b/vistrails/db/versions/v0_8_1/specs/connection.xml
index eefd6a4..da6de76 100644
--- a/vistrails/db/versions/v0_8_1/specs/connection.xml
+++ b/vistrails/db/versions/v0_8_1/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/delete.xml b/vistrails/db/versions/v0_8_1/specs/delete.xml
index 544bfcf..df925b1 100644
--- a/vistrails/db/versions/v0_8_1/specs/delete.xml
+++ b/vistrails/db/versions/v0_8_1/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/function.xml b/vistrails/db/versions/v0_8_1/specs/function.xml
index 48244b6..f2959b1 100644
--- a/vistrails/db/versions/v0_8_1/specs/function.xml
+++ b/vistrails/db/versions/v0_8_1/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/location.xml b/vistrails/db/versions/v0_8_1/specs/location.xml
index 48714a6..ee2efcd 100644
--- a/vistrails/db/versions/v0_8_1/specs/location.xml
+++ b/vistrails/db/versions/v0_8_1/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/log.xml b/vistrails/db/versions/v0_8_1/specs/log.xml
index d5b08ce..074ca38 100644
--- a/vistrails/db/versions/v0_8_1/specs/log.xml
+++ b/vistrails/db/versions/v0_8_1/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/machine.xml b/vistrails/db/versions/v0_8_1/specs/machine.xml
index 57e7ee3..3652e94 100644
--- a/vistrails/db/versions/v0_8_1/specs/machine.xml
+++ b/vistrails/db/versions/v0_8_1/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/module.xml b/vistrails/db/versions/v0_8_1/specs/module.xml
index b77188d..92e0cd3 100644
--- a/vistrails/db/versions/v0_8_1/specs/module.xml
+++ b/vistrails/db/versions/v0_8_1/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/module_exec.xml b/vistrails/db/versions/v0_8_1/specs/module_exec.xml
index e109829..7180584 100644
--- a/vistrails/db/versions/v0_8_1/specs/module_exec.xml
+++ b/vistrails/db/versions/v0_8_1/specs/module_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/other.xml b/vistrails/db/versions/v0_8_1/specs/other.xml
index 21a2846..f776e64 100644
--- a/vistrails/db/versions/v0_8_1/specs/other.xml
+++ b/vistrails/db/versions/v0_8_1/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/parameter.xml b/vistrails/db/versions/v0_8_1/specs/parameter.xml
index f34fb2c..ce82ab9 100644
--- a/vistrails/db/versions/v0_8_1/specs/parameter.xml
+++ b/vistrails/db/versions/v0_8_1/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/port.xml b/vistrails/db/versions/v0_8_1/specs/port.xml
index a9611d4..dddba55 100644
--- a/vistrails/db/versions/v0_8_1/specs/port.xml
+++ b/vistrails/db/versions/v0_8_1/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/portSpec.xml b/vistrails/db/versions/v0_8_1/specs/portSpec.xml
index 9d21cce..d4283f7 100644
--- a/vistrails/db/versions/v0_8_1/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_8_1/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/tag.xml b/vistrails/db/versions/v0_8_1/specs/tag.xml
index 5169bff..c926acb 100644
--- a/vistrails/db/versions/v0_8_1/specs/tag.xml
+++ b/vistrails/db/versions/v0_8_1/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/vistrail.xml b/vistrails/db/versions/v0_8_1/specs/vistrail.xml
index 48c7435..940cd95 100644
--- a/vistrails/db/versions/v0_8_1/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_8_1/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/workflow.xml b/vistrails/db/versions/v0_8_1/specs/workflow.xml
index 72b388a..7c834ce 100644
--- a/vistrails/db/versions/v0_8_1/specs/workflow.xml
+++ b/vistrails/db/versions/v0_8_1/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/specs/workflow_exec.xml b/vistrails/db/versions/v0_8_1/specs/workflow_exec.xml
index 6da61b8..2c7bfb8 100644
--- a/vistrails/db/versions/v0_8_1/specs/workflow_exec.xml
+++ b/vistrails/db/versions/v0_8_1/specs/workflow_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/translate/__init__.py b/vistrails/db/versions/v0_8_1/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_8_1/translate/__init__.py
+++ b/vistrails/db/versions/v0_8_1/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_8_1/translate/v0_8_0.py b/vistrails/db/versions/v0_8_1/translate/v0_8_0.py
index b4eded7..6c3c07b 100644
--- a/vistrails/db/versions/v0_8_1/translate/v0_8_0.py
+++ b/vistrails/db/versions/v0_8_1/translate/v0_8_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/__init__.py b/vistrails/db/versions/v0_9_0/__init__.py
index 1bb21ae..8ebd182 100644
--- a/vistrails/db/versions/v0_9_0/__init__.py
+++ b/vistrails/db/versions/v0_9_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/__init__.py b/vistrails/db/versions/v0_9_0/domain/__init__.py
index 570ee28..e5ffac9 100644
--- a/vistrails/db/versions/v0_9_0/domain/__init__.py
+++ b/vistrails/db/versions/v0_9_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/abstraction.py b/vistrails/db/versions/v0_9_0/domain/abstraction.py
index c420e64..fd941f9 100644
--- a/vistrails/db/versions/v0_9_0/domain/abstraction.py
+++ b/vistrails/db/versions/v0_9_0/domain/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/auto_gen.py b/vistrails/db/versions/v0_9_0/domain/auto_gen.py
index e65fa06..dc2e71a 100644
--- a/vistrails/db/versions/v0_9_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_9_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/id_scope.py b/vistrails/db/versions/v0_9_0/domain/id_scope.py
index 49b9d49..6bddfcf 100644
--- a/vistrails/db/versions/v0_9_0/domain/id_scope.py
+++ b/vistrails/db/versions/v0_9_0/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/log.py b/vistrails/db/versions/v0_9_0/domain/log.py
index b243e11..6251630 100644
--- a/vistrails/db/versions/v0_9_0/domain/log.py
+++ b/vistrails/db/versions/v0_9_0/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/vistrail.py b/vistrails/db/versions/v0_9_0/domain/vistrail.py
index 2ffde3a..3863158 100644
--- a/vistrails/db/versions/v0_9_0/domain/vistrail.py
+++ b/vistrails/db/versions/v0_9_0/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/domain/workflow.py b/vistrails/db/versions/v0_9_0/domain/workflow.py
index 2570e3c..c3acfbd 100644
--- a/vistrails/db/versions/v0_9_0/domain/workflow.py
+++ b/vistrails/db/versions/v0_9_0/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/__init__.py b/vistrails/db/versions/v0_9_0/persistence/__init__.py
index d1d55b8..a46fb76 100644
--- a/vistrails/db/versions/v0_9_0/persistence/__init__.py
+++ b/vistrails/db/versions/v0_9_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/sql/__init__.py b/vistrails/db/versions/v0_9_0/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_0/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_9_0/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_9_0/persistence/sql/auto_gen.py
index 2ab94d2..48e8e0b 100644
--- a/vistrails/db/versions/v0_9_0/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_9_0/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_9_0/persistence/sql/sql_dao.py
index 5d9d4e6..c03e40a 100644
--- a/vistrails/db/versions/v0_9_0/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_9_0/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/xml/__init__.py b/vistrails/db/versions/v0_9_0/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_9_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_9_0/persistence/xml/auto_gen.py
index 24444ca..be951e2 100644
--- a/vistrails/db/versions/v0_9_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_9_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_9_0/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v0_9_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_9_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_9_0/schemas/sql/vistrails.sql
index 2cc6ab6..7e84a98 100644
--- a/vistrails/db/versions/v0_9_0/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_9_0/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_9_0/schemas/sql/vistrails_drop.sql
index 258296f..c7a2138 100644
--- a/vistrails/db/versions/v0_9_0/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_9_0/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_9_0/schemas/xml/vistrail.xsd
index f80c635..e1cc97d 100644
--- a/vistrails/db/versions/v0_9_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_9_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/abstraction.xml b/vistrails/db/versions/v0_9_0/specs/abstraction.xml
index a0051c8..813e228 100644
--- a/vistrails/db/versions/v0_9_0/specs/abstraction.xml
+++ b/vistrails/db/versions/v0_9_0/specs/abstraction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/abstractionRef.xml b/vistrails/db/versions/v0_9_0/specs/abstractionRef.xml
index 170eba8..f844b2e 100644
--- a/vistrails/db/versions/v0_9_0/specs/abstractionRef.xml
+++ b/vistrails/db/versions/v0_9_0/specs/abstractionRef.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/action.xml b/vistrails/db/versions/v0_9_0/specs/action.xml
index d7bf056..efce8ff 100644
--- a/vistrails/db/versions/v0_9_0/specs/action.xml
+++ b/vistrails/db/versions/v0_9_0/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/add.xml b/vistrails/db/versions/v0_9_0/specs/add.xml
index 74e7ce7..265cdaf 100644
--- a/vistrails/db/versions/v0_9_0/specs/add.xml
+++ b/vistrails/db/versions/v0_9_0/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/annotation.xml b/vistrails/db/versions/v0_9_0/specs/annotation.xml
index 9e56341..d0b1514 100644
--- a/vistrails/db/versions/v0_9_0/specs/annotation.xml
+++ b/vistrails/db/versions/v0_9_0/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/change.xml b/vistrails/db/versions/v0_9_0/specs/change.xml
index b536c58..459b32f 100644
--- a/vistrails/db/versions/v0_9_0/specs/change.xml
+++ b/vistrails/db/versions/v0_9_0/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/connection.xml b/vistrails/db/versions/v0_9_0/specs/connection.xml
index dfdb697..4f58b86 100644
--- a/vistrails/db/versions/v0_9_0/specs/connection.xml
+++ b/vistrails/db/versions/v0_9_0/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/delete.xml b/vistrails/db/versions/v0_9_0/specs/delete.xml
index ba23cd6..03fe063 100644
--- a/vistrails/db/versions/v0_9_0/specs/delete.xml
+++ b/vistrails/db/versions/v0_9_0/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/function.xml b/vistrails/db/versions/v0_9_0/specs/function.xml
index 91af1f2..67dc512 100644
--- a/vistrails/db/versions/v0_9_0/specs/function.xml
+++ b/vistrails/db/versions/v0_9_0/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/location.xml b/vistrails/db/versions/v0_9_0/specs/location.xml
index 211527e..7dd1530 100644
--- a/vistrails/db/versions/v0_9_0/specs/location.xml
+++ b/vistrails/db/versions/v0_9_0/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/log.xml b/vistrails/db/versions/v0_9_0/specs/log.xml
index 669a9a4..3af122b 100644
--- a/vistrails/db/versions/v0_9_0/specs/log.xml
+++ b/vistrails/db/versions/v0_9_0/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/machine.xml b/vistrails/db/versions/v0_9_0/specs/machine.xml
index 873c2e9..39143ce 100644
--- a/vistrails/db/versions/v0_9_0/specs/machine.xml
+++ b/vistrails/db/versions/v0_9_0/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/module.xml b/vistrails/db/versions/v0_9_0/specs/module.xml
index 2247728..3f40173 100644
--- a/vistrails/db/versions/v0_9_0/specs/module.xml
+++ b/vistrails/db/versions/v0_9_0/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/module_exec.xml b/vistrails/db/versions/v0_9_0/specs/module_exec.xml
index c5ebbc3..458c236 100644
--- a/vistrails/db/versions/v0_9_0/specs/module_exec.xml
+++ b/vistrails/db/versions/v0_9_0/specs/module_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/other.xml b/vistrails/db/versions/v0_9_0/specs/other.xml
index e99eb17..4aa34d4 100644
--- a/vistrails/db/versions/v0_9_0/specs/other.xml
+++ b/vistrails/db/versions/v0_9_0/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/parameter.xml b/vistrails/db/versions/v0_9_0/specs/parameter.xml
index b2e8f33..74158c5 100644
--- a/vistrails/db/versions/v0_9_0/specs/parameter.xml
+++ b/vistrails/db/versions/v0_9_0/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/port.xml b/vistrails/db/versions/v0_9_0/specs/port.xml
index 0f101d6..fc8c7bd 100644
--- a/vistrails/db/versions/v0_9_0/specs/port.xml
+++ b/vistrails/db/versions/v0_9_0/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/portSpec.xml b/vistrails/db/versions/v0_9_0/specs/portSpec.xml
index 104fc9a..a0fbcdb 100644
--- a/vistrails/db/versions/v0_9_0/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_9_0/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/tag.xml b/vistrails/db/versions/v0_9_0/specs/tag.xml
index 4b670ff..f53cb50 100644
--- a/vistrails/db/versions/v0_9_0/specs/tag.xml
+++ b/vistrails/db/versions/v0_9_0/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/vistrail.xml b/vistrails/db/versions/v0_9_0/specs/vistrail.xml
index 2a32976..6a0ef07 100644
--- a/vistrails/db/versions/v0_9_0/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_9_0/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/workflow.xml b/vistrails/db/versions/v0_9_0/specs/workflow.xml
index 1205607..6f00fdf 100644
--- a/vistrails/db/versions/v0_9_0/specs/workflow.xml
+++ b/vistrails/db/versions/v0_9_0/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/specs/workflow_exec.xml b/vistrails/db/versions/v0_9_0/specs/workflow_exec.xml
index fe638fd..bd3a90e 100644
--- a/vistrails/db/versions/v0_9_0/specs/workflow_exec.xml
+++ b/vistrails/db/versions/v0_9_0/specs/workflow_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/translate/__init__.py b/vistrails/db/versions/v0_9_0/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_9_0/translate/__init__.py
+++ b/vistrails/db/versions/v0_9_0/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_0/translate/v0_8_1.py b/vistrails/db/versions/v0_9_0/translate/v0_8_1.py
index 94c0b95..76c7c33 100644
--- a/vistrails/db/versions/v0_9_0/translate/v0_8_1.py
+++ b/vistrails/db/versions/v0_9_0/translate/v0_8_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/__init__.py b/vistrails/db/versions/v0_9_1/__init__.py
index 2dc0c98..72565fb 100644
--- a/vistrails/db/versions/v0_9_1/__init__.py
+++ b/vistrails/db/versions/v0_9_1/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/__init__.py b/vistrails/db/versions/v0_9_1/domain/__init__.py
index 570ee28..e5ffac9 100644
--- a/vistrails/db/versions/v0_9_1/domain/__init__.py
+++ b/vistrails/db/versions/v0_9_1/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/abstraction.py b/vistrails/db/versions/v0_9_1/domain/abstraction.py
index c420e64..fd941f9 100644
--- a/vistrails/db/versions/v0_9_1/domain/abstraction.py
+++ b/vistrails/db/versions/v0_9_1/domain/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/auto_gen.py b/vistrails/db/versions/v0_9_1/domain/auto_gen.py
index aacdf22..8cb624a 100644
--- a/vistrails/db/versions/v0_9_1/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_9_1/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/id_scope.py b/vistrails/db/versions/v0_9_1/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v0_9_1/domain/id_scope.py
+++ b/vistrails/db/versions/v0_9_1/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/log.py b/vistrails/db/versions/v0_9_1/domain/log.py
index b243e11..6251630 100644
--- a/vistrails/db/versions/v0_9_1/domain/log.py
+++ b/vistrails/db/versions/v0_9_1/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/vistrail.py b/vistrails/db/versions/v0_9_1/domain/vistrail.py
index dff2822..64b8215 100644
--- a/vistrails/db/versions/v0_9_1/domain/vistrail.py
+++ b/vistrails/db/versions/v0_9_1/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/domain/workflow.py b/vistrails/db/versions/v0_9_1/domain/workflow.py
index 562c22e..11eda66 100644
--- a/vistrails/db/versions/v0_9_1/domain/workflow.py
+++ b/vistrails/db/versions/v0_9_1/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/__init__.py b/vistrails/db/versions/v0_9_1/persistence/__init__.py
index 7bd3676..238b2a9 100644
--- a/vistrails/db/versions/v0_9_1/persistence/__init__.py
+++ b/vistrails/db/versions/v0_9_1/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/sql/__init__.py b/vistrails/db/versions/v0_9_1/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_1/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_9_1/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_9_1/persistence/sql/auto_gen.py
index 445773d..df4dfdf 100644
--- a/vistrails/db/versions/v0_9_1/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_9_1/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_9_1/persistence/sql/sql_dao.py
index 5d9d4e6..c03e40a 100644
--- a/vistrails/db/versions/v0_9_1/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_9_1/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/xml/__init__.py b/vistrails/db/versions/v0_9_1/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_1/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_9_1/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_9_1/persistence/xml/auto_gen.py
index 2c74cc6..a5b0560 100644
--- a/vistrails/db/versions/v0_9_1/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_9_1/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_9_1/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v0_9_1/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_9_1/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_9_1/schemas/sql/vistrails.sql
index bafdcb5..bd592a3 100644
--- a/vistrails/db/versions/v0_9_1/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_9_1/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_9_1/schemas/sql/vistrails_drop.sql
index e901e85..7ecd1ec 100644
--- a/vistrails/db/versions/v0_9_1/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_9_1/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_9_1/schemas/xml/vistrail.xsd
index 998ac8b..d55de5f 100644
--- a/vistrails/db/versions/v0_9_1/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_9_1/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/schemas/xml/vtlink.xsd b/vistrails/db/versions/v0_9_1/schemas/xml/vtlink.xsd
index f397341..6ba4e90 100644
--- a/vistrails/db/versions/v0_9_1/schemas/xml/vtlink.xsd
+++ b/vistrails/db/versions/v0_9_1/schemas/xml/vtlink.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/abstraction.xml b/vistrails/db/versions/v0_9_1/specs/abstraction.xml
index a0051c8..813e228 100644
--- a/vistrails/db/versions/v0_9_1/specs/abstraction.xml
+++ b/vistrails/db/versions/v0_9_1/specs/abstraction.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/abstractionRef.xml b/vistrails/db/versions/v0_9_1/specs/abstractionRef.xml
index 170eba8..f844b2e 100644
--- a/vistrails/db/versions/v0_9_1/specs/abstractionRef.xml
+++ b/vistrails/db/versions/v0_9_1/specs/abstractionRef.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/action.xml b/vistrails/db/versions/v0_9_1/specs/action.xml
index d7bf056..efce8ff 100644
--- a/vistrails/db/versions/v0_9_1/specs/action.xml
+++ b/vistrails/db/versions/v0_9_1/specs/action.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/add.xml b/vistrails/db/versions/v0_9_1/specs/add.xml
index 071dd93..224d623 100644
--- a/vistrails/db/versions/v0_9_1/specs/add.xml
+++ b/vistrails/db/versions/v0_9_1/specs/add.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/annotation.xml b/vistrails/db/versions/v0_9_1/specs/annotation.xml
index 2f8aa64..899e9c1 100644
--- a/vistrails/db/versions/v0_9_1/specs/annotation.xml
+++ b/vistrails/db/versions/v0_9_1/specs/annotation.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/change.xml b/vistrails/db/versions/v0_9_1/specs/change.xml
index aa60fa0..601dc5d 100644
--- a/vistrails/db/versions/v0_9_1/specs/change.xml
+++ b/vistrails/db/versions/v0_9_1/specs/change.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/connection.xml b/vistrails/db/versions/v0_9_1/specs/connection.xml
index dfdb697..4f58b86 100644
--- a/vistrails/db/versions/v0_9_1/specs/connection.xml
+++ b/vistrails/db/versions/v0_9_1/specs/connection.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/delete.xml b/vistrails/db/versions/v0_9_1/specs/delete.xml
index ba23cd6..03fe063 100644
--- a/vistrails/db/versions/v0_9_1/specs/delete.xml
+++ b/vistrails/db/versions/v0_9_1/specs/delete.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/function.xml b/vistrails/db/versions/v0_9_1/specs/function.xml
index 0dd2bf5..33c16af 100644
--- a/vistrails/db/versions/v0_9_1/specs/function.xml
+++ b/vistrails/db/versions/v0_9_1/specs/function.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/group.xml b/vistrails/db/versions/v0_9_1/specs/group.xml
index 3fb06d9..bc75591 100644
--- a/vistrails/db/versions/v0_9_1/specs/group.xml
+++ b/vistrails/db/versions/v0_9_1/specs/group.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/location.xml b/vistrails/db/versions/v0_9_1/specs/location.xml
index 431f55a..cee13f6 100644
--- a/vistrails/db/versions/v0_9_1/specs/location.xml
+++ b/vistrails/db/versions/v0_9_1/specs/location.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/log.xml b/vistrails/db/versions/v0_9_1/specs/log.xml
index 669a9a4..3af122b 100644
--- a/vistrails/db/versions/v0_9_1/specs/log.xml
+++ b/vistrails/db/versions/v0_9_1/specs/log.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/machine.xml b/vistrails/db/versions/v0_9_1/specs/machine.xml
index 873c2e9..39143ce 100644
--- a/vistrails/db/versions/v0_9_1/specs/machine.xml
+++ b/vistrails/db/versions/v0_9_1/specs/machine.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/module.xml b/vistrails/db/versions/v0_9_1/specs/module.xml
index d309161..47526cd 100644
--- a/vistrails/db/versions/v0_9_1/specs/module.xml
+++ b/vistrails/db/versions/v0_9_1/specs/module.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/module_exec.xml b/vistrails/db/versions/v0_9_1/specs/module_exec.xml
index c5ebbc3..458c236 100644
--- a/vistrails/db/versions/v0_9_1/specs/module_exec.xml
+++ b/vistrails/db/versions/v0_9_1/specs/module_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/other.xml b/vistrails/db/versions/v0_9_1/specs/other.xml
index e99eb17..4aa34d4 100644
--- a/vistrails/db/versions/v0_9_1/specs/other.xml
+++ b/vistrails/db/versions/v0_9_1/specs/other.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/parameter.xml b/vistrails/db/versions/v0_9_1/specs/parameter.xml
index b2e8f33..74158c5 100644
--- a/vistrails/db/versions/v0_9_1/specs/parameter.xml
+++ b/vistrails/db/versions/v0_9_1/specs/parameter.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/port.xml b/vistrails/db/versions/v0_9_1/specs/port.xml
index 0f101d6..fc8c7bd 100644
--- a/vistrails/db/versions/v0_9_1/specs/port.xml
+++ b/vistrails/db/versions/v0_9_1/specs/port.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/portSpec.xml b/vistrails/db/versions/v0_9_1/specs/portSpec.xml
index 104fc9a..a0fbcdb 100644
--- a/vistrails/db/versions/v0_9_1/specs/portSpec.xml
+++ b/vistrails/db/versions/v0_9_1/specs/portSpec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/tag.xml b/vistrails/db/versions/v0_9_1/specs/tag.xml
index 4b670ff..f53cb50 100644
--- a/vistrails/db/versions/v0_9_1/specs/tag.xml
+++ b/vistrails/db/versions/v0_9_1/specs/tag.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/vistrail.xml b/vistrails/db/versions/v0_9_1/specs/vistrail.xml
index 2a32976..6a0ef07 100644
--- a/vistrails/db/versions/v0_9_1/specs/vistrail.xml
+++ b/vistrails/db/versions/v0_9_1/specs/vistrail.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/workflow.xml b/vistrails/db/versions/v0_9_1/specs/workflow.xml
index 9c8d712..849d2b9 100644
--- a/vistrails/db/versions/v0_9_1/specs/workflow.xml
+++ b/vistrails/db/versions/v0_9_1/specs/workflow.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/specs/workflow_exec.xml b/vistrails/db/versions/v0_9_1/specs/workflow_exec.xml
index fe638fd..bd3a90e 100644
--- a/vistrails/db/versions/v0_9_1/specs/workflow_exec.xml
+++ b/vistrails/db/versions/v0_9_1/specs/workflow_exec.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/translate/__init__.py b/vistrails/db/versions/v0_9_1/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_9_1/translate/__init__.py
+++ b/vistrails/db/versions/v0_9_1/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_1/translate/v0_9_0.py b/vistrails/db/versions/v0_9_1/translate/v0_9_0.py
index d36d118..8b506d0 100644
--- a/vistrails/db/versions/v0_9_1/translate/v0_9_0.py
+++ b/vistrails/db/versions/v0_9_1/translate/v0_9_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_2/__init__.py b/vistrails/db/versions/v0_9_2/__init__.py
index 9fb4229..06b9244 100644
--- a/vistrails/db/versions/v0_9_2/__init__.py
+++ b/vistrails/db/versions/v0_9_2/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_2/domain/__init__.py b/vistrails/db/versions/v0_9_2/domain/__init__.py
index 45cd24d..4c91744 100644
--- a/vistrails/db/versions/v0_9_2/domain/__init__.py
+++ b/vistrails/db/versions/v0_9_2/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_2/persistence/__init__.py b/vistrails/db/versions/v0_9_2/persistence/__init__.py
index 9750a8f..3507462 100644
--- a/vistrails/db/versions/v0_9_2/persistence/__init__.py
+++ b/vistrails/db/versions/v0_9_2/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_2/translate/__init__.py b/vistrails/db/versions/v0_9_2/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_9_2/translate/__init__.py
+++ b/vistrails/db/versions/v0_9_2/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_2/translate/v0_9_1.py b/vistrails/db/versions/v0_9_2/translate/v0_9_1.py
index e749a69..3bb30af 100644
--- a/vistrails/db/versions/v0_9_2/translate/v0_9_1.py
+++ b/vistrails/db/versions/v0_9_2/translate/v0_9_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/__init__.py b/vistrails/db/versions/v0_9_3/__init__.py
index 3c46539..85b9315 100644
--- a/vistrails/db/versions/v0_9_3/__init__.py
+++ b/vistrails/db/versions/v0_9_3/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/__init__.py b/vistrails/db/versions/v0_9_3/domain/__init__.py
index 570ee28..e5ffac9 100644
--- a/vistrails/db/versions/v0_9_3/domain/__init__.py
+++ b/vistrails/db/versions/v0_9_3/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/abstraction.py b/vistrails/db/versions/v0_9_3/domain/abstraction.py
index c420e64..fd941f9 100644
--- a/vistrails/db/versions/v0_9_3/domain/abstraction.py
+++ b/vistrails/db/versions/v0_9_3/domain/abstraction.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/auto_gen.py b/vistrails/db/versions/v0_9_3/domain/auto_gen.py
index c32f723..7f51c9e 100644
--- a/vistrails/db/versions/v0_9_3/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_9_3/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/id_scope.py b/vistrails/db/versions/v0_9_3/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v0_9_3/domain/id_scope.py
+++ b/vistrails/db/versions/v0_9_3/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/log.py b/vistrails/db/versions/v0_9_3/domain/log.py
index c39ca80..138439e 100644
--- a/vistrails/db/versions/v0_9_3/domain/log.py
+++ b/vistrails/db/versions/v0_9_3/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/vistrail.py b/vistrails/db/versions/v0_9_3/domain/vistrail.py
index 51b0e8e..aaf6d5f 100644
--- a/vistrails/db/versions/v0_9_3/domain/vistrail.py
+++ b/vistrails/db/versions/v0_9_3/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/domain/workflow.py b/vistrails/db/versions/v0_9_3/domain/workflow.py
index 7de4e79..67f4a22 100644
--- a/vistrails/db/versions/v0_9_3/domain/workflow.py
+++ b/vistrails/db/versions/v0_9_3/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/__init__.py b/vistrails/db/versions/v0_9_3/persistence/__init__.py
index 80adbd4..37e29e0 100644
--- a/vistrails/db/versions/v0_9_3/persistence/__init__.py
+++ b/vistrails/db/versions/v0_9_3/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/sql/__init__.py b/vistrails/db/versions/v0_9_3/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_3/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_9_3/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_9_3/persistence/sql/auto_gen.py
index ac0844d..ee894fe 100644
--- a/vistrails/db/versions/v0_9_3/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_9_3/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_9_3/persistence/sql/sql_dao.py
index 5c5afe6..6773999 100644
--- a/vistrails/db/versions/v0_9_3/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_9_3/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/xml/__init__.py b/vistrails/db/versions/v0_9_3/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_3/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_9_3/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_9_3/persistence/xml/auto_gen.py
index c5b9388..36c95c0 100644
--- a/vistrails/db/versions/v0_9_3/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_9_3/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_9_3/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v0_9_3/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_9_3/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_9_3/schemas/sql/vistrails.sql
index f6d5bf3..642ea2a 100644
--- a/vistrails/db/versions/v0_9_3/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_9_3/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_9_3/schemas/sql/vistrails_drop.sql
index 67662eb..2227476 100644
--- a/vistrails/db/versions/v0_9_3/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_9_3/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_9_3/schemas/xml/vistrail.xsd
index 613e6da..b323af6 100644
--- a/vistrails/db/versions/v0_9_3/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_9_3/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/specs/all.xml b/vistrails/db/versions/v0_9_3/specs/all.xml
index 36f0828..e7d81a0 100644
--- a/vistrails/db/versions/v0_9_3/specs/all.xml
+++ b/vistrails/db/versions/v0_9_3/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/translate/__init__.py b/vistrails/db/versions/v0_9_3/translate/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/db/versions/v0_9_3/translate/__init__.py
+++ b/vistrails/db/versions/v0_9_3/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/translate/v0_9_1.py b/vistrails/db/versions/v0_9_3/translate/v0_9_1.py
index 2cf46dd..3107b09 100644
--- a/vistrails/db/versions/v0_9_3/translate/v0_9_1.py
+++ b/vistrails/db/versions/v0_9_3/translate/v0_9_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/translate/v0_9_2.py b/vistrails/db/versions/v0_9_3/translate/v0_9_2.py
index 39ef6a6..d4fa806 100644
--- a/vistrails/db/versions/v0_9_3/translate/v0_9_2.py
+++ b/vistrails/db/versions/v0_9_3/translate/v0_9_2.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_3/translate/v0_9_4.py b/vistrails/db/versions/v0_9_3/translate/v0_9_4.py
index a7a6b79..576a9fc 100644
--- a/vistrails/db/versions/v0_9_3/translate/v0_9_4.py
+++ b/vistrails/db/versions/v0_9_3/translate/v0_9_4.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/__init__.py b/vistrails/db/versions/v0_9_4/__init__.py
index eb00579..a692812 100644
--- a/vistrails/db/versions/v0_9_4/__init__.py
+++ b/vistrails/db/versions/v0_9_4/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/domain/__init__.py b/vistrails/db/versions/v0_9_4/domain/__init__.py
index 542de19..5d5a492 100644
--- a/vistrails/db/versions/v0_9_4/domain/__init__.py
+++ b/vistrails/db/versions/v0_9_4/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/domain/auto_gen.py b/vistrails/db/versions/v0_9_4/domain/auto_gen.py
index 6744eab..bb73d2b 100644
--- a/vistrails/db/versions/v0_9_4/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_9_4/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/domain/id_scope.py b/vistrails/db/versions/v0_9_4/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v0_9_4/domain/id_scope.py
+++ b/vistrails/db/versions/v0_9_4/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/domain/log.py b/vistrails/db/versions/v0_9_4/domain/log.py
index 110177a..dd18ac1 100644
--- a/vistrails/db/versions/v0_9_4/domain/log.py
+++ b/vistrails/db/versions/v0_9_4/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/domain/vistrail.py b/vistrails/db/versions/v0_9_4/domain/vistrail.py
index 5c3e53e..79116f3 100644
--- a/vistrails/db/versions/v0_9_4/domain/vistrail.py
+++ b/vistrails/db/versions/v0_9_4/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/domain/workflow.py b/vistrails/db/versions/v0_9_4/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v0_9_4/domain/workflow.py
+++ b/vistrails/db/versions/v0_9_4/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/__init__.py b/vistrails/db/versions/v0_9_4/persistence/__init__.py
index 28f2fbe..1640385 100644
--- a/vistrails/db/versions/v0_9_4/persistence/__init__.py
+++ b/vistrails/db/versions/v0_9_4/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/sql/__init__.py b/vistrails/db/versions/v0_9_4/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_4/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_9_4/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_9_4/persistence/sql/auto_gen.py
index 4d07c2a..05541ba 100644
--- a/vistrails/db/versions/v0_9_4/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_9_4/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_9_4/persistence/sql/sql_dao.py
index 5c5afe6..6773999 100644
--- a/vistrails/db/versions/v0_9_4/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_9_4/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/xml/__init__.py b/vistrails/db/versions/v0_9_4/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_4/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_9_4/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_9_4/persistence/xml/auto_gen.py
index f2fc3db..886145c 100644
--- a/vistrails/db/versions/v0_9_4/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_9_4/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_9_4/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v0_9_4/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_9_4/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_9_4/schemas/sql/vistrails.sql
index dae35fe..07d167f 100644
--- a/vistrails/db/versions/v0_9_4/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_9_4/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_9_4/schemas/sql/vistrails_drop.sql
index 335a2dd..99324a5 100644
--- a/vistrails/db/versions/v0_9_4/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_9_4/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_9_4/schemas/xml/vistrail.xsd
index 666ddb9..a2f52b0 100644
--- a/vistrails/db/versions/v0_9_4/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_9_4/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/specs/all.xml b/vistrails/db/versions/v0_9_4/specs/all.xml
index cf4fb33..0273c7b 100644
--- a/vistrails/db/versions/v0_9_4/specs/all.xml
+++ b/vistrails/db/versions/v0_9_4/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/translate/__init__.py b/vistrails/db/versions/v0_9_4/translate/__init__.py
index eb00579..a692812 100644
--- a/vistrails/db/versions/v0_9_4/translate/__init__.py
+++ b/vistrails/db/versions/v0_9_4/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/translate/v0_9_3.py b/vistrails/db/versions/v0_9_4/translate/v0_9_3.py
index 3972e30..5706944 100644
--- a/vistrails/db/versions/v0_9_4/translate/v0_9_3.py
+++ b/vistrails/db/versions/v0_9_4/translate/v0_9_3.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_4/translate/v0_9_5.py b/vistrails/db/versions/v0_9_4/translate/v0_9_5.py
index 219996c..54a88a1 100644
--- a/vistrails/db/versions/v0_9_4/translate/v0_9_5.py
+++ b/vistrails/db/versions/v0_9_4/translate/v0_9_5.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/__init__.py b/vistrails/db/versions/v0_9_5/__init__.py
index 5a3be75..e8ca340 100644
--- a/vistrails/db/versions/v0_9_5/__init__.py
+++ b/vistrails/db/versions/v0_9_5/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/__init__.py b/vistrails/db/versions/v0_9_5/domain/__init__.py
index 40b3fbf..8aba7f5 100644
--- a/vistrails/db/versions/v0_9_5/domain/__init__.py
+++ b/vistrails/db/versions/v0_9_5/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/auto_gen.py b/vistrails/db/versions/v0_9_5/domain/auto_gen.py
index 19e0f73..1ce9691 100644
--- a/vistrails/db/versions/v0_9_5/domain/auto_gen.py
+++ b/vistrails/db/versions/v0_9_5/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/id_scope.py b/vistrails/db/versions/v0_9_5/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v0_9_5/domain/id_scope.py
+++ b/vistrails/db/versions/v0_9_5/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/log.py b/vistrails/db/versions/v0_9_5/domain/log.py
index 110177a..dd18ac1 100644
--- a/vistrails/db/versions/v0_9_5/domain/log.py
+++ b/vistrails/db/versions/v0_9_5/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/registry.py b/vistrails/db/versions/v0_9_5/domain/registry.py
index cfcb751..63dcf2a 100644
--- a/vistrails/db/versions/v0_9_5/domain/registry.py
+++ b/vistrails/db/versions/v0_9_5/domain/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/vistrail.py b/vistrails/db/versions/v0_9_5/domain/vistrail.py
index b9a55b8..cb6af36 100644
--- a/vistrails/db/versions/v0_9_5/domain/vistrail.py
+++ b/vistrails/db/versions/v0_9_5/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/domain/workflow.py b/vistrails/db/versions/v0_9_5/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v0_9_5/domain/workflow.py
+++ b/vistrails/db/versions/v0_9_5/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/__init__.py b/vistrails/db/versions/v0_9_5/persistence/__init__.py
index 616afb7..86b3546 100644
--- a/vistrails/db/versions/v0_9_5/persistence/__init__.py
+++ b/vistrails/db/versions/v0_9_5/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/sql/__init__.py b/vistrails/db/versions/v0_9_5/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_5/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v0_9_5/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/sql/auto_gen.py b/vistrails/db/versions/v0_9_5/persistence/sql/auto_gen.py
index b2608c0..2c55df4 100644
--- a/vistrails/db/versions/v0_9_5/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v0_9_5/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/sql/sql_dao.py b/vistrails/db/versions/v0_9_5/persistence/sql/sql_dao.py
index 5c5afe6..6773999 100644
--- a/vistrails/db/versions/v0_9_5/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v0_9_5/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/xml/__init__.py b/vistrails/db/versions/v0_9_5/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v0_9_5/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v0_9_5/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/xml/auto_gen.py b/vistrails/db/versions/v0_9_5/persistence/xml/auto_gen.py
index ae4b115..cbaa089 100644
--- a/vistrails/db/versions/v0_9_5/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v0_9_5/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/persistence/xml/xml_dao.py b/vistrails/db/versions/v0_9_5/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v0_9_5/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v0_9_5/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/schemas/sql/vistrails.sql b/vistrails/db/versions/v0_9_5/schemas/sql/vistrails.sql
index ec35aab..57614c6 100644
--- a/vistrails/db/versions/v0_9_5/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v0_9_5/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v0_9_5/schemas/sql/vistrails_drop.sql
index b8f8924..7b99796 100644
--- a/vistrails/db/versions/v0_9_5/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v0_9_5/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/schemas/xml/vistrail.xsd b/vistrails/db/versions/v0_9_5/schemas/xml/vistrail.xsd
index 90559d7..3d7f39a 100644
--- a/vistrails/db/versions/v0_9_5/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v0_9_5/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/specs/all.xml b/vistrails/db/versions/v0_9_5/specs/all.xml
index 7a658c0..4d83bbf 100644
--- a/vistrails/db/versions/v0_9_5/specs/all.xml
+++ b/vistrails/db/versions/v0_9_5/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/translate/__init__.py b/vistrails/db/versions/v0_9_5/translate/__init__.py
index 5a3be75..e8ca340 100644
--- a/vistrails/db/versions/v0_9_5/translate/__init__.py
+++ b/vistrails/db/versions/v0_9_5/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/translate/v0_9_4.py b/vistrails/db/versions/v0_9_5/translate/v0_9_4.py
index fda1b43..01aa357 100644
--- a/vistrails/db/versions/v0_9_5/translate/v0_9_4.py
+++ b/vistrails/db/versions/v0_9_5/translate/v0_9_4.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v0_9_5/translate/v1_0_0.py b/vistrails/db/versions/v0_9_5/translate/v1_0_0.py
index 4976f21..c345be4 100644
--- a/vistrails/db/versions/v0_9_5/translate/v1_0_0.py
+++ b/vistrails/db/versions/v0_9_5/translate/v1_0_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/__init__.py b/vistrails/db/versions/v1_0_0/__init__.py
index 65a07bd..50aa215 100644
--- a/vistrails/db/versions/v1_0_0/__init__.py
+++ b/vistrails/db/versions/v1_0_0/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/__init__.py b/vistrails/db/versions/v1_0_0/domain/__init__.py
index 40b3fbf..8aba7f5 100644
--- a/vistrails/db/versions/v1_0_0/domain/__init__.py
+++ b/vistrails/db/versions/v1_0_0/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/auto_gen.py b/vistrails/db/versions/v1_0_0/domain/auto_gen.py
index b72e0fe..a0941bd 100644
--- a/vistrails/db/versions/v1_0_0/domain/auto_gen.py
+++ b/vistrails/db/versions/v1_0_0/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/id_scope.py b/vistrails/db/versions/v1_0_0/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v1_0_0/domain/id_scope.py
+++ b/vistrails/db/versions/v1_0_0/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/log.py b/vistrails/db/versions/v1_0_0/domain/log.py
index cb6af60..5d2617d 100644
--- a/vistrails/db/versions/v1_0_0/domain/log.py
+++ b/vistrails/db/versions/v1_0_0/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/registry.py b/vistrails/db/versions/v1_0_0/domain/registry.py
index 677b3d1..05c3141 100644
--- a/vistrails/db/versions/v1_0_0/domain/registry.py
+++ b/vistrails/db/versions/v1_0_0/domain/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/vistrail.py b/vistrails/db/versions/v1_0_0/domain/vistrail.py
index aa3f83f..e76ee8f 100644
--- a/vistrails/db/versions/v1_0_0/domain/vistrail.py
+++ b/vistrails/db/versions/v1_0_0/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/domain/workflow.py b/vistrails/db/versions/v1_0_0/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v1_0_0/domain/workflow.py
+++ b/vistrails/db/versions/v1_0_0/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/__init__.py b/vistrails/db/versions/v1_0_0/persistence/__init__.py
index c13e1fc..6937472 100644
--- a/vistrails/db/versions/v1_0_0/persistence/__init__.py
+++ b/vistrails/db/versions/v1_0_0/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/sql/__init__.py b/vistrails/db/versions/v1_0_0/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_0/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v1_0_0/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/sql/auto_gen.py b/vistrails/db/versions/v1_0_0/persistence/sql/auto_gen.py
index 49c45e3..7faa090 100644
--- a/vistrails/db/versions/v1_0_0/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v1_0_0/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/sql/sql_dao.py b/vistrails/db/versions/v1_0_0/persistence/sql/sql_dao.py
index 5c5afe6..6773999 100644
--- a/vistrails/db/versions/v1_0_0/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v1_0_0/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/xml/__init__.py b/vistrails/db/versions/v1_0_0/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_0/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v1_0_0/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/xml/auto_gen.py b/vistrails/db/versions/v1_0_0/persistence/xml/auto_gen.py
index 193e024..2e47aba 100644
--- a/vistrails/db/versions/v1_0_0/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v1_0_0/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/persistence/xml/xml_dao.py b/vistrails/db/versions/v1_0_0/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v1_0_0/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v1_0_0/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/schemas/sql/vistrails.sql b/vistrails/db/versions/v1_0_0/schemas/sql/vistrails.sql
index 91f23c2..6e484f5 100644
--- a/vistrails/db/versions/v1_0_0/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v1_0_0/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v1_0_0/schemas/sql/vistrails_drop.sql
index 53415d1..e969f08 100644
--- a/vistrails/db/versions/v1_0_0/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v1_0_0/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/schemas/xml/vistrail.xsd b/vistrails/db/versions/v1_0_0/schemas/xml/vistrail.xsd
index 90559d7..3d7f39a 100644
--- a/vistrails/db/versions/v1_0_0/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v1_0_0/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/specs/all.xml b/vistrails/db/versions/v1_0_0/specs/all.xml
index 887fcd5..37b8903 100644
--- a/vistrails/db/versions/v1_0_0/specs/all.xml
+++ b/vistrails/db/versions/v1_0_0/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/translate/__init__.py b/vistrails/db/versions/v1_0_0/translate/__init__.py
index 65a07bd..50aa215 100644
--- a/vistrails/db/versions/v1_0_0/translate/__init__.py
+++ b/vistrails/db/versions/v1_0_0/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/translate/v0_9_5.py b/vistrails/db/versions/v1_0_0/translate/v0_9_5.py
index 9ab21b0..07b98f9 100644
--- a/vistrails/db/versions/v1_0_0/translate/v0_9_5.py
+++ b/vistrails/db/versions/v1_0_0/translate/v0_9_5.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_0/translate/v1_0_1.py b/vistrails/db/versions/v1_0_0/translate/v1_0_1.py
index 1023bf5..5fe6fd5 100644
--- a/vistrails/db/versions/v1_0_0/translate/v1_0_1.py
+++ b/vistrails/db/versions/v1_0_0/translate/v1_0_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/__init__.py b/vistrails/db/versions/v1_0_1/__init__.py
index c651811..10f9045 100644
--- a/vistrails/db/versions/v1_0_1/__init__.py
+++ b/vistrails/db/versions/v1_0_1/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/__init__.py b/vistrails/db/versions/v1_0_1/domain/__init__.py
index 40b3fbf..8aba7f5 100644
--- a/vistrails/db/versions/v1_0_1/domain/__init__.py
+++ b/vistrails/db/versions/v1_0_1/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/auto_gen.py b/vistrails/db/versions/v1_0_1/domain/auto_gen.py
index aff557d..99d30a4 100644
--- a/vistrails/db/versions/v1_0_1/domain/auto_gen.py
+++ b/vistrails/db/versions/v1_0_1/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/id_scope.py b/vistrails/db/versions/v1_0_1/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v1_0_1/domain/id_scope.py
+++ b/vistrails/db/versions/v1_0_1/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/log.py b/vistrails/db/versions/v1_0_1/domain/log.py
index 49b1497..46fae4a 100644
--- a/vistrails/db/versions/v1_0_1/domain/log.py
+++ b/vistrails/db/versions/v1_0_1/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/registry.py b/vistrails/db/versions/v1_0_1/domain/registry.py
index 677b3d1..05c3141 100644
--- a/vistrails/db/versions/v1_0_1/domain/registry.py
+++ b/vistrails/db/versions/v1_0_1/domain/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/vistrail.py b/vistrails/db/versions/v1_0_1/domain/vistrail.py
index 37639fd..65f3e44 100644
--- a/vistrails/db/versions/v1_0_1/domain/vistrail.py
+++ b/vistrails/db/versions/v1_0_1/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/domain/workflow.py b/vistrails/db/versions/v1_0_1/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v1_0_1/domain/workflow.py
+++ b/vistrails/db/versions/v1_0_1/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/__init__.py b/vistrails/db/versions/v1_0_1/persistence/__init__.py
index f10eee9..f6bdfa1 100644
--- a/vistrails/db/versions/v1_0_1/persistence/__init__.py
+++ b/vistrails/db/versions/v1_0_1/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/sql/__init__.py b/vistrails/db/versions/v1_0_1/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_1/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v1_0_1/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/sql/auto_gen.py b/vistrails/db/versions/v1_0_1/persistence/sql/auto_gen.py
index e0ab456..e3c0578 100644
--- a/vistrails/db/versions/v1_0_1/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v1_0_1/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/sql/sql_dao.py b/vistrails/db/versions/v1_0_1/persistence/sql/sql_dao.py
index 5c5afe6..6773999 100644
--- a/vistrails/db/versions/v1_0_1/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v1_0_1/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/xml/__init__.py b/vistrails/db/versions/v1_0_1/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_1/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v1_0_1/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/xml/auto_gen.py b/vistrails/db/versions/v1_0_1/persistence/xml/auto_gen.py
index a765921..0b5f234 100644
--- a/vistrails/db/versions/v1_0_1/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v1_0_1/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/persistence/xml/xml_dao.py b/vistrails/db/versions/v1_0_1/persistence/xml/xml_dao.py
index 9ad9160..ff66d23 100644
--- a/vistrails/db/versions/v1_0_1/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v1_0_1/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/schemas/sql/vistrails.sql b/vistrails/db/versions/v1_0_1/schemas/sql/vistrails.sql
index 0ff5047..81b3452 100644
--- a/vistrails/db/versions/v1_0_1/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v1_0_1/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v1_0_1/schemas/sql/vistrails_drop.sql
index 74167a6..4400313 100644
--- a/vistrails/db/versions/v1_0_1/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v1_0_1/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/schemas/xml/vistrail.xsd b/vistrails/db/versions/v1_0_1/schemas/xml/vistrail.xsd
index d397aba..b4b0cfe 100644
--- a/vistrails/db/versions/v1_0_1/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v1_0_1/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/schemas/xml/vtlink.xsd b/vistrails/db/versions/v1_0_1/schemas/xml/vtlink.xsd
index 6291d8e..22aed3f 100644
--- a/vistrails/db/versions/v1_0_1/schemas/xml/vtlink.xsd
+++ b/vistrails/db/versions/v1_0_1/schemas/xml/vtlink.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/specs/all.xml b/vistrails/db/versions/v1_0_1/specs/all.xml
index d31e57a..f317b1a 100644
--- a/vistrails/db/versions/v1_0_1/specs/all.xml
+++ b/vistrails/db/versions/v1_0_1/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/translate/__init__.py b/vistrails/db/versions/v1_0_1/translate/__init__.py
index c651811..10f9045 100644
--- a/vistrails/db/versions/v1_0_1/translate/__init__.py
+++ b/vistrails/db/versions/v1_0_1/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/translate/v1_0_0.py b/vistrails/db/versions/v1_0_1/translate/v1_0_0.py
index c9e463f..56cad19 100644
--- a/vistrails/db/versions/v1_0_1/translate/v1_0_0.py
+++ b/vistrails/db/versions/v1_0_1/translate/v1_0_0.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_1/translate/v1_0_2.py b/vistrails/db/versions/v1_0_1/translate/v1_0_2.py
index a58a7aa..90484ea 100644
--- a/vistrails/db/versions/v1_0_1/translate/v1_0_2.py
+++ b/vistrails/db/versions/v1_0_1/translate/v1_0_2.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/__init__.py b/vistrails/db/versions/v1_0_2/__init__.py
index c494e0b..21a42fd 100644
--- a/vistrails/db/versions/v1_0_2/__init__.py
+++ b/vistrails/db/versions/v1_0_2/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/__init__.py b/vistrails/db/versions/v1_0_2/domain/__init__.py
index 40b3fbf..8aba7f5 100644
--- a/vistrails/db/versions/v1_0_2/domain/__init__.py
+++ b/vistrails/db/versions/v1_0_2/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/auto_gen.py b/vistrails/db/versions/v1_0_2/domain/auto_gen.py
index 90c414b..a289425 100644
--- a/vistrails/db/versions/v1_0_2/domain/auto_gen.py
+++ b/vistrails/db/versions/v1_0_2/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/id_scope.py b/vistrails/db/versions/v1_0_2/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v1_0_2/domain/id_scope.py
+++ b/vistrails/db/versions/v1_0_2/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/log.py b/vistrails/db/versions/v1_0_2/domain/log.py
index 49b1497..46fae4a 100644
--- a/vistrails/db/versions/v1_0_2/domain/log.py
+++ b/vistrails/db/versions/v1_0_2/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/registry.py b/vistrails/db/versions/v1_0_2/domain/registry.py
index 677b3d1..05c3141 100644
--- a/vistrails/db/versions/v1_0_2/domain/registry.py
+++ b/vistrails/db/versions/v1_0_2/domain/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/vistrail.py b/vistrails/db/versions/v1_0_2/domain/vistrail.py
index e8f146c..db33618 100644
--- a/vistrails/db/versions/v1_0_2/domain/vistrail.py
+++ b/vistrails/db/versions/v1_0_2/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/domain/workflow.py b/vistrails/db/versions/v1_0_2/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v1_0_2/domain/workflow.py
+++ b/vistrails/db/versions/v1_0_2/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/persistence/__init__.py b/vistrails/db/versions/v1_0_2/persistence/__init__.py
index 3216552..3b917a9 100644
--- a/vistrails/db/versions/v1_0_2/persistence/__init__.py
+++ b/vistrails/db/versions/v1_0_2/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/persistence/sql/__init__.py b/vistrails/db/versions/v1_0_2/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_2/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v1_0_2/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/persistence/sql/auto_gen.py b/vistrails/db/versions/v1_0_2/persistence/sql/auto_gen.py
index 8bc1684..576657a 100644
--- a/vistrails/db/versions/v1_0_2/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v1_0_2/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/persistence/sql/sql_dao.py b/vistrails/db/versions/v1_0_2/persistence/sql/sql_dao.py
index 9eb069d..5bfc8d8 100644
--- a/vistrails/db/versions/v1_0_2/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v1_0_2/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -232,7 +232,8 @@ class SQLDAO:
             commandString = ''
             for prepared, values in dbCommands:
                 command = prepared % \
-                              db.escape(values, get_db_lib().converters.conversions)
+                          tuple(db.escape(v, get_db_lib().converters.conversions)
+                           for v in values)
                 commandString += command
             cur = db.cursor()
             try:
diff --git a/vistrails/db/versions/v1_0_2/persistence/xml/__init__.py b/vistrails/db/versions/v1_0_2/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_2/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v1_0_2/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/persistence/xml/auto_gen.py b/vistrails/db/versions/v1_0_2/persistence/xml/auto_gen.py
index 5026a6d..2dc5cdb 100644
--- a/vistrails/db/versions/v1_0_2/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v1_0_2/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/persistence/xml/xml_dao.py b/vistrails/db/versions/v1_0_2/persistence/xml/xml_dao.py
index 4194b76..4db7783 100644
--- a/vistrails/db/versions/v1_0_2/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v1_0_2/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/schemas/sql/vistrails.sql b/vistrails/db/versions/v1_0_2/schemas/sql/vistrails.sql
index 6da537c..9219085 100644
--- a/vistrails/db/versions/v1_0_2/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v1_0_2/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v1_0_2/schemas/sql/vistrails_drop.sql
index fa4ef90..841b518 100644
--- a/vistrails/db/versions/v1_0_2/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v1_0_2/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/schemas/xml/log.xsd b/vistrails/db/versions/v1_0_2/schemas/xml/log.xsd
index e7e4a7a..23ca1a8 100644
--- a/vistrails/db/versions/v1_0_2/schemas/xml/log.xsd
+++ b/vistrails/db/versions/v1_0_2/schemas/xml/log.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/schemas/xml/vistrail.xsd b/vistrails/db/versions/v1_0_2/schemas/xml/vistrail.xsd
index 5a8974c..d4cf516 100644
--- a/vistrails/db/versions/v1_0_2/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v1_0_2/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/schemas/xml/vtlink.xsd b/vistrails/db/versions/v1_0_2/schemas/xml/vtlink.xsd
index 3453317..45913a8 100644
--- a/vistrails/db/versions/v1_0_2/schemas/xml/vtlink.xsd
+++ b/vistrails/db/versions/v1_0_2/schemas/xml/vtlink.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/schemas/xml/workflow.xsd b/vistrails/db/versions/v1_0_2/schemas/xml/workflow.xsd
index 6566e5e..9a6bafe 100644
--- a/vistrails/db/versions/v1_0_2/schemas/xml/workflow.xsd
+++ b/vistrails/db/versions/v1_0_2/schemas/xml/workflow.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/specs/all.xml b/vistrails/db/versions/v1_0_2/specs/all.xml
index d275765..f5a0e98 100644
--- a/vistrails/db/versions/v1_0_2/specs/all.xml
+++ b/vistrails/db/versions/v1_0_2/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/translate/__init__.py b/vistrails/db/versions/v1_0_2/translate/__init__.py
index c494e0b..21a42fd 100644
--- a/vistrails/db/versions/v1_0_2/translate/__init__.py
+++ b/vistrails/db/versions/v1_0_2/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/translate/v1_0_1.py b/vistrails/db/versions/v1_0_2/translate/v1_0_1.py
index e8ba462..96bce32 100644
--- a/vistrails/db/versions/v1_0_2/translate/v1_0_1.py
+++ b/vistrails/db/versions/v1_0_2/translate/v1_0_1.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_2/translate/v1_0_3.py b/vistrails/db/versions/v1_0_2/translate/v1_0_3.py
index 11eacac..ef47da8 100644
--- a/vistrails/db/versions/v1_0_2/translate/v1_0_3.py
+++ b/vistrails/db/versions/v1_0_2/translate/v1_0_3.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/__init__.py b/vistrails/db/versions/v1_0_3/__init__.py
index fe71b86..055b07e 100644
--- a/vistrails/db/versions/v1_0_3/__init__.py
+++ b/vistrails/db/versions/v1_0_3/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/__init__.py b/vistrails/db/versions/v1_0_3/domain/__init__.py
index 40b3fbf..8aba7f5 100644
--- a/vistrails/db/versions/v1_0_3/domain/__init__.py
+++ b/vistrails/db/versions/v1_0_3/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/auto_gen.py b/vistrails/db/versions/v1_0_3/domain/auto_gen.py
index 06bce0b..142d57e 100644
--- a/vistrails/db/versions/v1_0_3/domain/auto_gen.py
+++ b/vistrails/db/versions/v1_0_3/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/id_scope.py b/vistrails/db/versions/v1_0_3/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v1_0_3/domain/id_scope.py
+++ b/vistrails/db/versions/v1_0_3/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/log.py b/vistrails/db/versions/v1_0_3/domain/log.py
index 49b1497..46fae4a 100644
--- a/vistrails/db/versions/v1_0_3/domain/log.py
+++ b/vistrails/db/versions/v1_0_3/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/registry.py b/vistrails/db/versions/v1_0_3/domain/registry.py
index 677b3d1..05c3141 100644
--- a/vistrails/db/versions/v1_0_3/domain/registry.py
+++ b/vistrails/db/versions/v1_0_3/domain/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/vistrail.py b/vistrails/db/versions/v1_0_3/domain/vistrail.py
index 7205ec7..db5377a 100644
--- a/vistrails/db/versions/v1_0_3/domain/vistrail.py
+++ b/vistrails/db/versions/v1_0_3/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/domain/workflow.py b/vistrails/db/versions/v1_0_3/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v1_0_3/domain/workflow.py
+++ b/vistrails/db/versions/v1_0_3/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/persistence/__init__.py b/vistrails/db/versions/v1_0_3/persistence/__init__.py
index 3839ad6..177d581 100644
--- a/vistrails/db/versions/v1_0_3/persistence/__init__.py
+++ b/vistrails/db/versions/v1_0_3/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/persistence/sql/__init__.py b/vistrails/db/versions/v1_0_3/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_3/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v1_0_3/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/persistence/sql/auto_gen.py b/vistrails/db/versions/v1_0_3/persistence/sql/auto_gen.py
index 4b523f1..7948693 100644
--- a/vistrails/db/versions/v1_0_3/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v1_0_3/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/persistence/sql/sql_dao.py b/vistrails/db/versions/v1_0_3/persistence/sql/sql_dao.py
index 9eb069d..5bfc8d8 100644
--- a/vistrails/db/versions/v1_0_3/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v1_0_3/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -232,7 +232,8 @@ class SQLDAO:
             commandString = ''
             for prepared, values in dbCommands:
                 command = prepared % \
-                              db.escape(values, get_db_lib().converters.conversions)
+                          tuple(db.escape(v, get_db_lib().converters.conversions)
+                           for v in values)
                 commandString += command
             cur = db.cursor()
             try:
diff --git a/vistrails/db/versions/v1_0_3/persistence/xml/__init__.py b/vistrails/db/versions/v1_0_3/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_3/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v1_0_3/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/persistence/xml/auto_gen.py b/vistrails/db/versions/v1_0_3/persistence/xml/auto_gen.py
index 297a51e..47ed715 100644
--- a/vistrails/db/versions/v1_0_3/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v1_0_3/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/persistence/xml/xml_dao.py b/vistrails/db/versions/v1_0_3/persistence/xml/xml_dao.py
index dc29f8f..f66024c 100644
--- a/vistrails/db/versions/v1_0_3/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v1_0_3/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/schemas/sql/vistrails.sql b/vistrails/db/versions/v1_0_3/schemas/sql/vistrails.sql
index fc92198..cecead9 100644
--- a/vistrails/db/versions/v1_0_3/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v1_0_3/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v1_0_3/schemas/sql/vistrails_drop.sql
index a5333d4..eeb7ee9 100644
--- a/vistrails/db/versions/v1_0_3/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v1_0_3/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/schemas/xml/log.xsd b/vistrails/db/versions/v1_0_3/schemas/xml/log.xsd
index d3739f7..059ede4 100644
--- a/vistrails/db/versions/v1_0_3/schemas/xml/log.xsd
+++ b/vistrails/db/versions/v1_0_3/schemas/xml/log.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/schemas/xml/vistrail.xsd b/vistrails/db/versions/v1_0_3/schemas/xml/vistrail.xsd
index b44f35e..a29ef3a 100644
--- a/vistrails/db/versions/v1_0_3/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v1_0_3/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/schemas/xml/vtlink.xsd b/vistrails/db/versions/v1_0_3/schemas/xml/vtlink.xsd
index 3453317..45913a8 100644
--- a/vistrails/db/versions/v1_0_3/schemas/xml/vtlink.xsd
+++ b/vistrails/db/versions/v1_0_3/schemas/xml/vtlink.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/schemas/xml/workflow.xsd b/vistrails/db/versions/v1_0_3/schemas/xml/workflow.xsd
index fe74e24..e467302 100644
--- a/vistrails/db/versions/v1_0_3/schemas/xml/workflow.xsd
+++ b/vistrails/db/versions/v1_0_3/schemas/xml/workflow.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/specs/all.xml b/vistrails/db/versions/v1_0_3/specs/all.xml
index 56deaba..7a5fac0 100644
--- a/vistrails/db/versions/v1_0_3/specs/all.xml
+++ b/vistrails/db/versions/v1_0_3/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/translate/__init__.py b/vistrails/db/versions/v1_0_3/translate/__init__.py
index fe71b86..055b07e 100644
--- a/vistrails/db/versions/v1_0_3/translate/__init__.py
+++ b/vistrails/db/versions/v1_0_3/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/translate/v1_0_2.py b/vistrails/db/versions/v1_0_3/translate/v1_0_2.py
index 948e8de..4bc2ba6 100644
--- a/vistrails/db/versions/v1_0_3/translate/v1_0_2.py
+++ b/vistrails/db/versions/v1_0_3/translate/v1_0_2.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_3/translate/v1_0_4.py b/vistrails/db/versions/v1_0_3/translate/v1_0_4.py
index dfaeab2..de657f8 100644
--- a/vistrails/db/versions/v1_0_3/translate/v1_0_4.py
+++ b/vistrails/db/versions/v1_0_3/translate/v1_0_4.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/__init__.py b/vistrails/db/versions/v1_0_4/__init__.py
index c59e2e5..2892f7f 100644
--- a/vistrails/db/versions/v1_0_4/__init__.py
+++ b/vistrails/db/versions/v1_0_4/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/__init__.py b/vistrails/db/versions/v1_0_4/domain/__init__.py
index 40b3fbf..8aba7f5 100644
--- a/vistrails/db/versions/v1_0_4/domain/__init__.py
+++ b/vistrails/db/versions/v1_0_4/domain/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/auto_gen.py b/vistrails/db/versions/v1_0_4/domain/auto_gen.py
index 21eceac..62dd4cd 100644
--- a/vistrails/db/versions/v1_0_4/domain/auto_gen.py
+++ b/vistrails/db/versions/v1_0_4/domain/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/id_scope.py b/vistrails/db/versions/v1_0_4/domain/id_scope.py
index 49f3707..59345cf 100644
--- a/vistrails/db/versions/v1_0_4/domain/id_scope.py
+++ b/vistrails/db/versions/v1_0_4/domain/id_scope.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/log.py b/vistrails/db/versions/v1_0_4/domain/log.py
index 49b1497..46fae4a 100644
--- a/vistrails/db/versions/v1_0_4/domain/log.py
+++ b/vistrails/db/versions/v1_0_4/domain/log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/registry.py b/vistrails/db/versions/v1_0_4/domain/registry.py
index 677b3d1..05c3141 100644
--- a/vistrails/db/versions/v1_0_4/domain/registry.py
+++ b/vistrails/db/versions/v1_0_4/domain/registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/vistrail.py b/vistrails/db/versions/v1_0_4/domain/vistrail.py
index 7205ec7..db5377a 100644
--- a/vistrails/db/versions/v1_0_4/domain/vistrail.py
+++ b/vistrails/db/versions/v1_0_4/domain/vistrail.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/domain/workflow.py b/vistrails/db/versions/v1_0_4/domain/workflow.py
index 71aaef7..c3118c5 100644
--- a/vistrails/db/versions/v1_0_4/domain/workflow.py
+++ b/vistrails/db/versions/v1_0_4/domain/workflow.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/persistence/__init__.py b/vistrails/db/versions/v1_0_4/persistence/__init__.py
index 3b574b6..308383b 100644
--- a/vistrails/db/versions/v1_0_4/persistence/__init__.py
+++ b/vistrails/db/versions/v1_0_4/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/persistence/sql/__init__.py b/vistrails/db/versions/v1_0_4/persistence/sql/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_4/persistence/sql/__init__.py
+++ b/vistrails/db/versions/v1_0_4/persistence/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/persistence/sql/auto_gen.py b/vistrails/db/versions/v1_0_4/persistence/sql/auto_gen.py
index e362d7e..fc34298 100644
--- a/vistrails/db/versions/v1_0_4/persistence/sql/auto_gen.py
+++ b/vistrails/db/versions/v1_0_4/persistence/sql/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/persistence/sql/sql_dao.py b/vistrails/db/versions/v1_0_4/persistence/sql/sql_dao.py
index 9eb069d..5bfc8d8 100644
--- a/vistrails/db/versions/v1_0_4/persistence/sql/sql_dao.py
+++ b/vistrails/db/versions/v1_0_4/persistence/sql/sql_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -232,7 +232,8 @@ class SQLDAO:
             commandString = ''
             for prepared, values in dbCommands:
                 command = prepared % \
-                              db.escape(values, get_db_lib().converters.conversions)
+                          tuple(db.escape(v, get_db_lib().converters.conversions)
+                           for v in values)
                 commandString += command
             cur = db.cursor()
             try:
diff --git a/vistrails/db/versions/v1_0_4/persistence/xml/__init__.py b/vistrails/db/versions/v1_0_4/persistence/xml/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/db/versions/v1_0_4/persistence/xml/__init__.py
+++ b/vistrails/db/versions/v1_0_4/persistence/xml/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/persistence/xml/auto_gen.py b/vistrails/db/versions/v1_0_4/persistence/xml/auto_gen.py
index 8afefa0..5c0cfa6 100644
--- a/vistrails/db/versions/v1_0_4/persistence/xml/auto_gen.py
+++ b/vistrails/db/versions/v1_0_4/persistence/xml/auto_gen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/persistence/xml/xml_dao.py b/vistrails/db/versions/v1_0_4/persistence/xml/xml_dao.py
index dc29f8f..f66024c 100644
--- a/vistrails/db/versions/v1_0_4/persistence/xml/xml_dao.py
+++ b/vistrails/db/versions/v1_0_4/persistence/xml/xml_dao.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/schemas/sql/vistrails.sql b/vistrails/db/versions/v1_0_4/schemas/sql/vistrails.sql
index 3582c18..bccf1af 100644
--- a/vistrails/db/versions/v1_0_4/schemas/sql/vistrails.sql
+++ b/vistrails/db/versions/v1_0_4/schemas/sql/vistrails.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/schemas/sql/vistrails_drop.sql b/vistrails/db/versions/v1_0_4/schemas/sql/vistrails_drop.sql
index c77d787..afcfd5f 100644
--- a/vistrails/db/versions/v1_0_4/schemas/sql/vistrails_drop.sql
+++ b/vistrails/db/versions/v1_0_4/schemas/sql/vistrails_drop.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/schemas/xml/log.xsd b/vistrails/db/versions/v1_0_4/schemas/xml/log.xsd
index e0e518e..96fe47a 100644
--- a/vistrails/db/versions/v1_0_4/schemas/xml/log.xsd
+++ b/vistrails/db/versions/v1_0_4/schemas/xml/log.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/schemas/xml/vistrail.xsd b/vistrails/db/versions/v1_0_4/schemas/xml/vistrail.xsd
index 7ab802f..3d746bb 100644
--- a/vistrails/db/versions/v1_0_4/schemas/xml/vistrail.xsd
+++ b/vistrails/db/versions/v1_0_4/schemas/xml/vistrail.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/schemas/xml/vtlink.xsd b/vistrails/db/versions/v1_0_4/schemas/xml/vtlink.xsd
index 3453317..45913a8 100644
--- a/vistrails/db/versions/v1_0_4/schemas/xml/vtlink.xsd
+++ b/vistrails/db/versions/v1_0_4/schemas/xml/vtlink.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/schemas/xml/workflow.xsd b/vistrails/db/versions/v1_0_4/schemas/xml/workflow.xsd
index 02af424..1911d9e 100644
--- a/vistrails/db/versions/v1_0_4/schemas/xml/workflow.xsd
+++ b/vistrails/db/versions/v1_0_4/schemas/xml/workflow.xsd
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/specs/all.xml b/vistrails/db/versions/v1_0_4/specs/all.xml
index 4f750e5..3a98de2 100644
--- a/vistrails/db/versions/v1_0_4/specs/all.xml
+++ b/vistrails/db/versions/v1_0_4/specs/all.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/translate/__init__.py b/vistrails/db/versions/v1_0_4/translate/__init__.py
index c59e2e5..2892f7f 100644
--- a/vistrails/db/versions/v1_0_4/translate/__init__.py
+++ b/vistrails/db/versions/v1_0_4/translate/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/db/versions/v1_0_4/translate/v1_0_3.py b/vistrails/db/versions/v1_0_4/translate/v1_0_3.py
index 2bbef12..97a50c3 100644
--- a/vistrails/db/versions/v1_0_4/translate/v1_0_3.py
+++ b/vistrails/db/versions/v1_0_4/translate/v1_0_3.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -264,8 +264,8 @@ def translateStartup(_startup):
          'useCache': 'cache',
          'verbosenessLevel': 'debugLevel',
          'webRepositoryLogin': 'webRespositoryUser',
-         'evolutionGraph': 'withVersionTree',
-         'workflowGraph': 'withWorkflow',
+         'evolutionGraph': 'outputVersionTree',
+         'workflowGraph': 'outputPipelineGraph',
          # 'workflowInfo': 'outputWorkflowInfo',
          'workflowInfo': 'outputDirectory',
          'executeWorkflows': 'execute',
diff --git a/vistrails/gui/__init__.py b/vistrails/gui/__init__.py
index 5e49c53..5ed352b 100644
--- a/vistrails/gui/__init__.py
+++ b/vistrails/gui/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py
index 1d596ba..e19648f 100644
--- a/vistrails/gui/application.py
+++ b/vistrails/gui/application.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -40,11 +40,13 @@ initializations to the theme, packages and the builder...
 from __future__ import division
 
 from ast import literal_eval
+import copy
 import os.path
 import getpass
 import re
 import sys
 import StringIO
+import usagestats
 
 from PyQt4 import QtGui, QtCore, QtNetwork
 
@@ -55,6 +57,7 @@ from vistrails.core import system
 from vistrails.core.application import APP_SUCCESS, APP_FAIL, APP_DONE
 from vistrails.core.db.io import load_vistrail
 from vistrails.core.db.locator import FileLocator, DBLocator
+from vistrails.core import reportusage
 import vistrails.core.requirements
 from vistrails.core.vistrail.controller import VistrailController
 from vistrails.db import VistrailsDBException
@@ -197,6 +200,8 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
         Create the application with a dict of settings
         
         """
+        reportusage.record_usage(gui=True)
+
         vistrails.gui.theme.initializeCurrentTheme()
         VistrailsApplicationInterface.init(self, optionsDict, args)
         
@@ -226,6 +231,7 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
         # The window does not get maximized. If we do it too early,
         # there are no created windows during spreadsheet initialization.
         if interactive:
+            reportusage.record_usage(gui_interactive=True)
             if  self.temp_configuration.check('maximizeWindows'):
                 self.builderWindow.showMaximized()
             if self.temp_configuration.check('dbDefault'):
@@ -233,6 +239,13 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
 
         self._initialized = True
 
+        # usage statistics
+        if reportusage.usage_report.status is usagestats.Stats.UNSET:
+            self.ask_enable_usage_report()
+        # news
+        elif self.temp_configuration.check('showVistrailsNews'):
+            self.show_news()
+
         # default handler installation
         if system.systemType == 'Linux':
             if not (self.temp_configuration.check('handlerDontAsk') or
@@ -247,6 +260,67 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
             return APP_SUCCESS if r is True else APP_FAIL
         return APP_SUCCESS
 
+    def ask_enable_usage_report(self):
+        news = reportusage.get_server_news()
+        if hasattr(self, 'splashScreen') and self.splashScreen:
+            self.splashScreen.hide()
+        dialog = QtGui.QDialog()
+        dialog.setWindowTitle(u"Anonymous usage statistics")
+        layout = QtGui.QVBoxLayout()
+        dialog.setLayout(layout)
+        descr = QtGui.QTextBrowser()
+        descr.setOpenExternalLinks(True)
+        descr.setHtml(news['usage_report_prompt_html'])
+        layout.addWidget(descr)
+        layout.addWidget(QtGui.QLabel(
+            u"Send anonymous reports to the developers?"))
+        dont_ask = QtGui.QCheckBox(u"Don't ask again")
+        layout.addWidget(dont_ask)
+        buttons = QtGui.QDialogButtonBox(
+                QtGui.QDialogButtonBox.Yes | QtGui.QDialogButtonBox.No)
+        layout.addWidget(buttons)
+        QtCore.QObject.connect(buttons, QtCore.SIGNAL('accepted()'),
+                     dialog, QtCore.SLOT('accept()'))
+        QtCore.QObject.connect(buttons, QtCore.SIGNAL('rejected()'),
+                     dialog, QtCore.SLOT('reject()'))
+
+        res = dialog.exec_()
+        if res == QtGui.QDialog.Accepted:
+            reportusage.usage_report.enable_reporting()
+        else:
+            if dont_ask.isChecked():
+                reportusage.usage_report.disable_reporting()
+        self.configuration.lastShownNews = news['version']
+
+    def show_news(self):
+        news = reportusage.get_server_news()
+        if (getattr(self.temp_configuration, 'lastShownNews', None) ==
+                news['version']):
+            return
+
+        if news['news_html']:
+            if hasattr(self, 'splashScreen') and self.splashScreen:
+                self.splashScreen.hide()
+            dialog = QtGui.QDialog()
+            dialog.setWindowTitle(u"VisTrails News")
+            layout = QtGui.QVBoxLayout()
+            dialog.setLayout(layout)
+            descr = QtGui.QTextBrowser()
+            descr.setOpenExternalLinks(True)
+            descr.setHtml(news['news_html'])
+            layout.addWidget(descr)
+
+            hlayout = QtGui.QHBoxLayout()
+            button = QtGui.QPushButton('&Close')
+            hlayout.addStretch(1)
+            hlayout.addWidget(button)
+            hlayout.addStretch(1)
+            layout.addLayout(hlayout)
+            button.clicked.connect(dialog.close)
+
+            dialog.exec_()
+        self.configuration.lastShownNews = news['version']
+
     def ask_update_default_application(self, dont_ask_checkbox=True):
         if hasattr(self, 'splashScreen') and self.splashScreen:
             self.splashScreen.hide()
@@ -524,10 +598,14 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
                 vt_list.append(locator)
             import vistrails.core.console_mode
 
+            if self.temp_configuration.check('outputDirectory'):
+                output_dir = self.temp_configuration.outputDirectory
+            else:
+                output_dir = None
+
             errs = []
-            if self.temp_configuration.check('workflowGraph'):
-                workflow_graph = self.temp_configuration.workflowGraph
-                results = vistrails.core.console_mode.get_wf_graph(w_list, workflow_graph,
+            if self.temp_configuration.check('outputPipelineGraph'):
+                results = vistrails.core.console_mode.get_wf_graph(w_list, output_dir or '',
                                                                    self.temp_configuration.graphsAsPdf)
                 for r in results:
                     if r[0] is False:
@@ -535,40 +613,30 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
                                     r[1])
                         debug.critical("*** Error in get_wf_graph: %s" % r[1])
             
-            if self.temp_configuration.check('evolutionGraph'):
-                evolution_graph = self.temp_configuration.evolutionGraph
-                results = vistrails.core.console_mode.get_vt_graph(vt_list, evolution_graph,
+            if self.temp_configuration.check('outputVersionTree'):
+                results = vistrails.core.console_mode.get_vt_graph(vt_list, output_dir or '',
                                                                    self.temp_configuration.graphsAsPdf)
                 for r in results:
                     if r[0] is False:
                         errs.append("Error generating vistrail graph: %s" % \
                                     r[1])
                         debug.critical("*** Error in get_vt_graph: %s" % r[1])
-                
-            if self.temp_configuration.check('outputDirectory'):
-                output_dir = self.temp_configuration.outputDirectory
-            else:
-                output_dir = None
 
-            extra_info = None
-            if self.temp_configuration.check('outputDirectory'):
-                extra_info = \
-                {'pathDumpCells': self.temp_configuration.outputDirectory}
-            if self.temp_configuration.check('parameterExploration'):
-                errs.extend(
-                    vistrails.core.console_mode.run_parameter_explorations(
-                        w_list, extra_info=extra_info))
-            else:
-                errs.extend(vistrails.core.console_mode.run(
-                        w_list,
-                        self.temp_configuration.check('parameters')
-                            or '',
-                        output_dir, update_vistrail=True,
-                        extra_info=extra_info))
-            if len(errs) > 0:
-                for err in errs:
-                    debug.critical("*** Error in %s:%s:%s -- %s" % err)
-                return [False, ["*** Error in %s:%s:%s -- %s" % err for err in errs]]
+            if not self.temp_configuration.check('noExecute'):
+                if self.temp_configuration.check('parameterExploration'):
+                    errs.extend(
+                        vistrails.core.console_mode.run_parameter_explorations(
+                            w_list))
+                else:
+                    errs.extend(vistrails.core.console_mode.run(
+                            w_list,
+                            self.temp_configuration.check('parameters') or '',
+                            update_vistrail=True))
+                if len(errs) > 0:
+                    for err in errs:
+                        print err
+                        debug.critical("*** Error in %s:%s:%s -- %s" % err)
+                    return [False, ["*** Error in %s:%s:%s -- %s" % err for err in errs]]
             return True
         else:
             debug.warning("no input vistrails provided")
@@ -700,12 +768,6 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
                                local_socket.errorString())
                 return
             byte_array = local_socket.readAll()
-            self.temp_configuration.workflowGraph = None
-            self.temp_configuration.evolutionGraph = None
-            self.temp_configuration.outputDirectory = None
-            self.temp_configuration.spreadsheetDumpPDF = False
-            self.temp_configuration.execute = False
-            self.temp_configuration.batch = False
 
             output = None
             try:
@@ -717,9 +779,12 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
                 sys.stdout.close()
                 sys.stdout = old_stdout
             except Exception, e:
+                import traceback
+                traceback.print_exc()
                 debug.unexpected_exception(e)
                 debug.critical("Unknown error", e)
                 result = debug.format_exc()
+
             if None == result:
                 result = True
             if True == result:
@@ -763,27 +828,36 @@ class VistrailsApplicationSingleton(VistrailsApplicationInterface,
         return False
 
     def parse_input_args_from_other_instance(self, msg):
+        reportusage.record_feature('args_from_other_instance')
         options_re = re.compile(r"^(\[('([^'])*', ?)*'([^']*)'\])|(\[\s?\])$")
         if options_re.match(msg):
             #it's safe to eval as a list
             args = literal_eval(msg)
             if isinstance(args, list):
                 try:
-                    self.read_options(args)
+                    conf_options = self.read_options(args)
                 except SystemExit:
                     debug.critical("Invalid options: %s" % ' '.join(args))
                     return False
-                interactive = not self.temp_configuration.check('batch')
-                if interactive:
-                    result = self.process_interactive_input()
-                    if self.temp_configuration.showWindow:
-                        # in some systems (Linux and Tiger) we need to make both calls
-                        # so builderWindow is activated
-                        self.builderWindow.raise_()
-                        self.builderWindow.activateWindow()
-                    return result
-                else:
-                    return self.noninteractiveMode()
+                try:
+                    # Execute using persistent configuration + new temp configuration
+                    old_temp_conf = self.temp_configuration
+                    self.startup.temp_configuration = copy.copy(self.configuration)
+                    self.temp_configuration.update(conf_options)
+
+                    interactive = not self.temp_configuration.check('batch')
+                    if interactive:
+                        result = self.process_interactive_input()
+                        if self.temp_configuration.showWindow:
+                            # in some systems (Linux and Tiger) we need to make both calls
+                            # so builderWindow is activated
+                            self.builderWindow.raise_()
+                            self.builderWindow.activateWindow()
+                        return result
+                    else:
+                        return self.noninteractiveMode()
+                finally:
+                    self.startup.temp_configuration = old_temp_conf
             else:
                 debug.critical("Invalid string: %s" % msg)
         else:
diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py
index 85687a5..ad8b13d 100644
--- a/vistrails/gui/application_server.py
+++ b/vistrails/gui/application_server.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/base_view.py b/vistrails/gui/base_view.py
index 4d8cf81..9b586a2 100644
--- a/vistrails/gui/base_view.py
+++ b/vistrails/gui/base_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/bundles/__init__.py b/vistrails/gui/bundles/__init__.py
index 5e49c53..5ed352b 100644
--- a/vistrails/gui/bundles/__init__.py
+++ b/vistrails/gui/bundles/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/bundles/installbundle.py b/vistrails/gui/bundles/installbundle.py
index faac3df..c0c729e 100644
--- a/vistrails/gui/bundles/installbundle.py
+++ b/vistrails/gui/bundles/installbundle.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -264,6 +264,7 @@ def install(dependency_dictionary):
     files = (dependency_dictionary.get(distro) or
              dependency_dictionary.get('pip'))
     if not files:
+        debug.warning("No source for bundle on this platform")
         return None
     can_install = (('pip' in dependency_dictionary and pip_installed) or
                    distro in dependency_dictionary)
diff --git a/vistrails/gui/bundles/linux_debian_install.py b/vistrails/gui/bundles/linux_debian_install.py
index e7bc507..cf80937 100755
--- a/vistrails/gui/bundles/linux_debian_install.py
+++ b/vistrails/gui/bundles/linux_debian_install.py
@@ -2,7 +2,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/bundles/linux_fedora_install.py b/vistrails/gui/bundles/linux_fedora_install.py
index 87739dc..620f7cf 100755
--- a/vistrails/gui/bundles/linux_fedora_install.py
+++ b/vistrails/gui/bundles/linux_fedora_install.py
@@ -2,7 +2,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/bundles/utils.py b/vistrails/gui/bundles/utils.py
index b7ac00a..39550f2 100644
--- a/vistrails/gui/bundles/utils.py
+++ b/vistrails/gui/bundles/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/collection/__init__.py b/vistrails/gui/collection/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/gui/collection/__init__.py
+++ b/vistrails/gui/collection/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/collection/explorer.py b/vistrails/gui/collection/explorer.py
index 970f1ae..d60fcdb 100644
--- a/vistrails/gui/collection/explorer.py
+++ b/vistrails/gui/collection/explorer.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/collection/vis_log.py b/vistrails/gui/collection/vis_log.py
index 33503bb..8b7f39f 100644
--- a/vistrails/gui/collection/vis_log.py
+++ b/vistrails/gui/collection/vis_log.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/collection/workspace.py b/vistrails/gui/collection/workspace.py
index 0f64fb3..dc21fa8 100644
--- a/vistrails/gui/collection/workspace.py
+++ b/vistrails/gui/collection/workspace.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -77,9 +77,9 @@ class QCollectionWidget(QtGui.QTreeWidget):
         self.setup_widget()
             
     def run_search(self, search, items=None):
-        # FIXME only uses top level items
-        if items is None:
-            items = [self.topLevelItem(i) 
+        top_level = items is None
+        if top_level:
+            items = [self.topLevelItem(i)
                      for i in xrange(self.topLevelItemCount())]
         for item in items:
             if search.match(item.entity):
@@ -88,15 +88,17 @@ class QCollectionWidget(QtGui.QTreeWidget):
                 while parent is not None:
                     if parent.isHidden():
                         parent.setHidden(False)
+                    if not parent.isExpanded():
+                        parent.setExpanded(True)
                     parent = parent.parent()
             else:
                 item.setHidden(True)
             self.run_search(search, [item.child(i) 
                                      for i in xrange(item.childCount())])
-            
+
     def reset_search(self, items=None):
         if items is None:
-            items = [self.topLevelItem(i) 
+            items = [self.topLevelItem(i)
                      for i in xrange(self.topLevelItemCount())]
         for item in items:
             item.setHidden(False)
@@ -793,6 +795,9 @@ class QVistrailList(QtGui.QTreeWidget):
                 item = QVistrailEntityItem(entity)
                 self.searchResultsItem.addChild(item)
                 item.setExpanded(True)
+                item.workflowsItem.setExpanded(True)
+                item.mashupsItem.setHidden(True)
+                item.paramExplorationsItem.setHidden(True)
             self.searchResultsItem.setExpanded(True)
 
     def onItemPressed(self, item, column):
@@ -1033,22 +1038,22 @@ class QVistrailList(QtGui.QTreeWidget):
         destination_parent = destination.parent()
         while not hasattr(destination_parent, 'window'):
             destination_parent = destination_parent.parent()
-        vistrail_1 = source_parent.window.controller.vistrail
-        vistrail_2 = destination_parent.window.controller.vistrail
+        controller_1 = source_parent.window.controller
+        controller_2 = destination_parent.window.controller
         if hasattr(source, 'entity'):
             v1 = source.entity.locator().kwargs.get('version_node', None)
         else:
-            v1 = vistrail_1.get_latest_version()
+            v1 = controller_1.vistrail.get_latest_version()
         if hasattr(destination, 'entity'):
             v2 = destination.entity.locator().kwargs.get('version_node', None)
         else:
-            v2 = vistrail_2.get_latest_version()
+            v2 = controller_2.vistrail.get_latest_version()
         
         # if we don't have the same vistrail, pass the second vistrail
-        if id(vistrail_1) == id(vistrail_2):
+        if id(controller_1) == id(controller_2):
             source_parent.window.diff_requested(v1, v2)
         else:
-            source_parent.window.diff_requested(v1, v2, vistrail_2)
+            source_parent.window.diff_requested(v1, v2, controller_2)
             
     def hideExecutions(self, hidden):
         self.executionsHidden = hidden
@@ -1135,6 +1140,7 @@ class QVistrailList(QtGui.QTreeWidget):
             item.setText(0, entity.name)
         (added_wfs, deleted_wfs) = entity.update_workflows()
         (more_added_wfs, added_wf_execs) = entity.update_log()
+        view.controller.vistrail.mashups = view.controller._mashups
         (added_mshps, deleted_mshps) = entity.update_mashups()
         (added_pes, deleted_pes) = entity.update_parameter_explorations()
 
@@ -1167,12 +1173,11 @@ class QVistrailList(QtGui.QTreeWidget):
             child_idx = child.parent().indexOfChild(child)
             child.parent().takeChild(child_idx)
             del item.mshp_to_item[mshp_entity.name]
-            item.mashupsItem.setHidden(not len(item.mshp_to_item))
         for mshp_entity in added_mshps:
             childItem = QMashupEntityItem(mshp_entity)
             item.mashupsItem.addChild(childItem)
             item.mshp_to_item[mshp_entity.name] = childItem
-            item.mashupsItem.setHidden(not len(item.mshp_to_item))
+        item.mashupsItem.setHidden(not len(item.mshp_to_item))
 
         for pe_entity in deleted_pes:
             assert(pe_entity.url in item.pe_to_item)
@@ -1180,13 +1185,12 @@ class QVistrailList(QtGui.QTreeWidget):
             child_idx = child.parent().indexOfChild(child)
             child.parent().takeChild(child_idx)
             del item.pe_to_item[pe_entity.url]
-            item.paramExplorationsItem.setHidden(not len(item.pe_to_item))
         for pe_entity in added_pes:
             childItem = QParamExplorationEntityItem(pe_entity)
             item.paramExplorationsItem.addChild(childItem)
             # keep list of tagged workflows
             item.pe_to_item[pe_entity.url] = childItem
-            item.paramExplorationsItem.setHidden(not len(item.pe_to_item))
+        item.paramExplorationsItem.setHidden(not len(item.pe_to_item))
 
         if self.isTreeView:
             self.make_tree(item)
@@ -1406,6 +1410,11 @@ class QVistrailList(QtGui.QTreeWidget):
         else:
             QtGui.QTreeWidget.keyPressEvent(self, event)
 
+    def close_vistrail(self, item):
+        if item.parent() == self.openFilesItem and hasattr(item, 'window'):
+            from vistrails.gui.vistrails_window import _app
+            _app.close_vistrail(item.window)
+
     def contextMenuEvent(self, event):
         item = self.itemAt(event.pos())
         if isinstance(item, QVistrailEntityItem):
@@ -1414,10 +1423,15 @@ class QVistrailList(QtGui.QTreeWidget):
                 return
             # item is vistrail
             menu = QtGui.QMenu(self)
-            act = QtGui.QAction("Open in New Window", self,
-                                triggered=item.open_in_new_window)
-            act.setStatusTip("Open specified vistrail file in another window")
-            menu.addAction(act)
+            new_window = QtGui.QAction("Open in New Window", self,
+                                       triggered=item.open_in_new_window)
+            new_window.setStatusTip("Open specified vistrail file in another "
+                                    "window")
+            menu.addAction(new_window)
+            close = QtGui.QAction("Close", self,
+                                  triggered=lambda: self.close_vistrail(item))
+            close.setStatusTip("Close the specified vistrail file")
+            menu.addAction(close)
             menu.exec_(event.globalPos())
         elif (isinstance(item, QWorkflowEntityItem) or 
                 isinstance(item, QVistrailListLatestItem)):
diff --git a/vistrails/gui/common_widgets.py b/vistrails/gui/common_widgets.py
index 789c505..66a99c2 100644
--- a/vistrails/gui/common_widgets.py
+++ b/vistrails/gui/common_widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/configuration.py b/vistrails/gui/configuration.py
index f89c298..621738d 100644
--- a/vistrails/gui/configuration.py
+++ b/vistrails/gui/configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -45,6 +45,7 @@ from vistrails.core.configuration import ConfigurationObject, \
     ConfigFieldParent, ConfigPath, \
     get_vistrails_configuration, find_simpledoc
 
+from vistrails.core import reportusage
 from vistrails.core.thumbnails import ThumbnailCache
 from vistrails.gui.common_widgets import QSearchTreeWindow, QSearchTreeWidget, \
     QDirectoryChooserToolButton
@@ -427,6 +428,38 @@ class QConfigurationLinuxHandler(QConfigurationLabelButton):
         if app.ask_update_default_application(False):
             self.label.setText(".vt, .vtl handlers installed")
 
+class QConfigurationUsageStats(QtGui.QWidget, QConfigurationWidgetItem):
+    def __init__(self, key, field, callback_f, parent=None):
+        QtGui.QWidget.__init__(self, parent)
+        QConfigurationWidgetItem.__init__(self, key, field, callback_f)
+        layout = QtGui.QHBoxLayout()
+        self.turn_on = QtGui.QPushButton("Send anonymous statistics to developers")
+        layout.addWidget(self.turn_on)
+        self.turn_on.clicked.connect(self.do_turn_on)
+        self.turn_on.setEnabled(reportusage.usage_report.enableable)
+        self.turn_off = QtGui.QPushButton("Don't send")
+        layout.addWidget(self.turn_off)
+        self.turn_off.clicked.connect(self.do_turn_off)
+        self.turn_off.setEnabled(reportusage.usage_report.disableable)
+        self.setLayout(layout)
+
+    def do_turn_on(self):
+        reportusage.usage_report.enable_reporting()
+        self.value_changed(1)
+        self.set_value(1)
+
+    def do_turn_off(self):
+        reportusage.usage_report.disable_reporting()
+        self.value_changed(0)
+        self.set_value(0)
+
+    def set_value(self, value, signal=True):
+        report = reportusage.usage_report
+        self.turn_on.setEnabled(report.enableable)
+        self.turn_off.setEnabled(report.disableable)
+        if signal:
+            self.value_changed(value)
+
 class QConfigurationComboBox(QtGui.QComboBox, QConfigurationWidgetItem):
     def __init__(self, key, field, callback_f, parent=None):
         QtGui.QComboBox.__init__(self, parent)
@@ -572,6 +605,9 @@ class QConfigurationPane(QtGui.QWidget):
         elif widget_type == "linuxext":
             widget = QConfigurationLinuxHandler(config_key, field,
                                                 self.field_changed)
+        elif widget_type == "usagestats":
+            widget = QConfigurationUsageStats(config_key, field,
+                                              self.field_changed)
         else:
             config_val = bool(config_val)
             widget = QConfigurationCheckBox(config_key, field,
diff --git a/vistrails/gui/controlflow_assist.py b/vistrails/gui/controlflow_assist.py
index 0d3e27d..5257b0a 100644
--- a/vistrails/gui/controlflow_assist.py
+++ b/vistrails/gui/controlflow_assist.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/debug.py b/vistrails/gui/debug.py
index c731172..0ce2d3d 100644
--- a/vistrails/gui/debug.py
+++ b/vistrails/gui/debug.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/debugger.py b/vistrails/gui/debugger.py
index ae542c5..36d0467 100644
--- a/vistrails/gui/debugger.py
+++ b/vistrails/gui/debugger.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/extras/__init__.py b/vistrails/gui/extras/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/gui/extras/__init__.py
+++ b/vistrails/gui/extras/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/extras/core/__init__.py b/vistrails/gui/extras/core/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/gui/extras/core/__init__.py
+++ b/vistrails/gui/extras/core/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/extras/core/db/__init__.py b/vistrails/gui/extras/core/db/__init__.py
index 5474457..aa8ef81 100644
--- a/vistrails/gui/extras/core/db/__init__.py
+++ b/vistrails/gui/extras/core/db/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/extras/core/db/locator.py b/vistrails/gui/extras/core/db/locator.py
index d3d0cc1..361fbdf 100644
--- a/vistrails/gui/extras/core/db/locator.py
+++ b/vistrails/gui/extras/core/db/locator.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/graphics_view.py b/vistrails/gui/graphics_view.py
index 77251d7..d4cda1e 100644
--- a/vistrails/gui/graphics_view.py
+++ b/vistrails/gui/graphics_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/job_monitor.py b/vistrails/gui/job_monitor.py
index 3dc450c..dd83665 100644
--- a/vistrails/gui/job_monitor.py
+++ b/vistrails/gui/job_monitor.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -36,16 +36,19 @@
 
 from __future__ import division
 
-import time
-
 from PyQt4 import QtCore, QtGui
 
-from vistrails.core import debug, configuration
+from vistrails.core import debug
+from vistrails.core.configuration import get_vistrails_configuration, \
+    get_vistrails_persistent_configuration
 from vistrails.core.modules.vistrails_module import ModuleSuspended
+from vistrails.core.vistrail.job import module_name
 from vistrails.gui import theme
 from vistrails.gui.common_widgets import QDockPushButton
 from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface
 
+import vistrails.core.system
+import vistrails.gui.utils
 
 refresh_states = [('Off', 0), ('10 sec', 10),
                   ('1 min', 60), ('10 min', 600),
@@ -80,17 +83,54 @@ class QJobTree(QtGui.QTreeWidget):
         item = self.itemAt(event.pos())
         menu = QtGui.QMenu(self)
         if item and isinstance(item, QJobItem):
+            act = QtGui.QAction("&Check", self)
+            QtCore.QObject.connect(act,
+                                   QtCore.SIGNAL("triggered()"),
+                                   lambda :self.parent().check_jobs(item))
+            menu.addAction(act)
+
+            act = QtGui.QAction("&Delete", self)
+            QtCore.QObject.connect(act,
+                                   QtCore.SIGNAL("triggered()"),
+                                   lambda :self.parent().delete_item(item))
+            menu.addAction(act)
+
             act = QtGui.QAction("View Standard &Output", self)
             act.setStatusTip("View Standard Output in new window")
             QtCore.QObject.connect(act,
                                    QtCore.SIGNAL("triggered()"),
                                    item.stdout)
             menu.addAction(act)
+
             act = QtGui.QAction("View Standard &Error", self)
             QtCore.QObject.connect(act,
                                    QtCore.SIGNAL("triggered()"),
                                    item.stderr)
             menu.addAction(act)
+
+            menu.exec_(event.globalPos())
+
+        if item and isinstance(item, QWorkflowItem):
+
+            act = QtGui.QAction("&Check", self)
+            QtCore.QObject.connect(act,
+                                   QtCore.SIGNAL("triggered()"),
+                                   lambda :self.parent().check_jobs(item))
+            menu.addAction(act)
+
+            if not item.paused and not item.workflowFinished:
+                act = QtGui.QAction("&Pause", self)
+                QtCore.QObject.connect(act,
+                                       QtCore.SIGNAL("triggered()"),
+                                       item.pause)
+                menu.addAction(act)
+
+            act = QtGui.QAction("Delete", self)
+            QtCore.QObject.connect(act,
+                                   QtCore.SIGNAL("triggered()"),
+                                   lambda :self.parent().delete_item(item))
+
+            menu.addAction(act)
             menu.exec_(event.globalPos())
 
 class QJobView(QtGui.QWidget, QVistrailsPaletteInterface):
@@ -104,10 +144,14 @@ class QJobView(QtGui.QWidget, QVistrailsPaletteInterface):
         self.layout = QtGui.QVBoxLayout()
 
         buttonsLayout = QtGui.QHBoxLayout()
-        run_now = QDockPushButton("Check now")
-        run_now.setToolTip("Check all jobs now")
-        run_now.clicked.connect(self.timerEvent)
+        run_now = QDockPushButton("Check selected")
+        run_now.setToolTip("Check selected job now")
+        run_now.clicked.connect(self.check_selected_job)
         buttonsLayout.addWidget(run_now)
+        run_all = QDockPushButton("Check all")
+        run_all.setToolTip("Check all jobs now")
+        run_all.clicked.connect(self.timerEvent)
+        buttonsLayout.addWidget(run_all)
         label = QtGui.QLabel('Refresh interval (seconds):')
         buttonsLayout.addWidget(label)
 
@@ -118,7 +162,7 @@ class QJobView(QtGui.QWidget, QVistrailsPaletteInterface):
         self.interval.setEditable(True)
         self.interval.editTextChanged.connect(self.set_refresh)
         self.interval.setValidator(QNumberValidator())
-        conf = configuration.get_vistrails_configuration()
+        conf = get_vistrails_configuration()
         self.interval.setEditText(str(conf.jobCheckInterval))
         buttonsLayout.addWidget(self.interval)
 
@@ -164,8 +208,8 @@ class QJobView(QtGui.QWidget, QVistrailsPaletteInterface):
                 self.set_visible(True)
 
     def autorunToggled(self, value):
-        conf = configuration.get_vistrails_configuration()
-        conf.jobAutorun = value
+        get_vistrails_configuration().jobAutorun = value
+        get_vistrails_persistent_configuration().jobAutorun = value
 
     def set_refresh(self, refresh=0):
         """Changes the timer time.
@@ -188,81 +232,140 @@ class QJobView(QtGui.QWidget, QVistrailsPaletteInterface):
             if self.timer_id:
                 self.killTimer(self.timer_id)
                 self.timer_id = None
-        conf = configuration.get_vistrails_persistent_configuration()
-        conf.jobCheckInterval = refresh
+        get_vistrails_configuration().jobCheckInterval = refresh
+        get_vistrails_persistent_configuration().jobCheckInterval = refresh
         self.updating_now = False
 
-    def update_jobs(self):
-        """Called via a timer.
+    def update_job(self, job, force=True):
+        """ Checks specified job
 
-        Checks jobs for all workflows both with and without monitors.
+            force: bool - True means we should ask user to resume jobs
+            that has been paused
         """
-        for i in xrange(self.jobView.topLevelItemCount()):
-            vistrail = self.jobView.topLevelItem(i)
-            jm = vistrail.jobMonitor
-            for workflow_item in vistrail.workflowItems.values():
-                workflow = workflow_item.workflow
-                # jobs without a handle can also be checked
-                if not workflow_item.has_handle:
-                    # restart job and execute
-                    jm.startWorkflow(workflow)
-                    self.updating_now = False
-                    workflow_item.execute()
-                    self.updating_now = True
-                    continue
-                if workflow_item.workflowFinished:
-                    continue
-                for job in workflow_item.jobs.itervalues():
-                    if job.jobFinished:
-                        continue
-                    try:
-                        # call monitor
-                        job.jobFinished = jm.isDone(job.handle)
-                        if job.jobFinished:
-                            job.setText(1, "Finished")
-                    except Exception, e:
-                        debug.critical("Error checking job %s: %s" %
-                                       (workflow_item.text(0), e))
-                workflow_item.updateJobs()
-                if workflow_item.workflowFinished:
-                    if self.autorun.isChecked():
-                        jm.startWorkflow(workflow)
-                        self.updating_now = False
-                        workflow_item.execute()
-                        self.updating_now = True
-                        continue
-                    ret = QtGui.QMessageBox.information(self, "Job Ready",
-                            'Pending Jobs in workflow "%s" have finished, '
-                            'continue execution now?' % workflow_item.text(0),
-                            QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel)
-                    if ret == QtGui.QMessageBox.Ok:
-                        jm.startWorkflow(workflow)
-                        self.updating_now = False
-                        workflow_item.execute()
-                        self.updating_now = True
+        if isinstance(job, QJobItem):
+            vistrail_item = job.vistrail()
+            workflow_item = job.workflow()
+        elif isinstance(job, QWorkflowItem):
+            vistrail_item = job.parent()
+            workflow_item = job
+            job = None
+        else:
+            for workflow_item in job.workflowItems.values():
+                self.update_job(workflow_item, force)
+            return
+        jm = vistrail_item.jobMonitor
+        workflow = workflow_item.workflow
+        if workflow_item.workflowFinished:
+            return
+        # re-execute if no handle is set
+        if not workflow_item.has_handle:
+            if workflow_item.paused:
+                if force:
+                    workflow_item.resume()
+                else:
+                    return
+            try:
+                int(workflow.version)
+            except ValueError:
+                if (workflow.version.startswith("Parameter Exploration") or
+                    workflow.version.startswith("Mashup")):
+                    QtGui.QMessageBox.question(self, "Running job(s) found",
+                        'Running jobs in "%s" are not yet monitored. Rerun it to start monitoring.' %
+                                             workflow_item.text(0),
+                        QtGui.QMessageBox.Ok)
+                    # do not notify again
+                    workflow_item.pause()
+                return
+            # Ask user to re-execute workflow
+            ret = QtGui.QMessageBox.question(self, "Running job(s) found",
+                    'Running jobs in workflow "%s" are not yet monitored. Load and check now?' %
+                                             workflow_item.text(0),
+                    QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
+            if ret == QtGui.QMessageBox.No:
+                workflow_item.pause()
+                return
+            # restart job and execute
+            jm.startWorkflow(workflow)
+            self.updating_now = False
+            workflow_item.execute()
+            self.updating_now = True
+            return
 
-    def timerEvent(self, id=None):
+        job_items = workflow_item.jobs.values() if job is None else [job]
+        for job_item in job_items:
+            if job_item.job.finished or job_item.job.ready:
+                continue
+            try:
+                # call monitor
+                if jm.isDone(job_item.handle):
+                    job_item.job.ready = True
+            except Exception, e:
+                debug.critical("Error checking job %s: %s" %
+                               (workflow_item.text(0), e))
+        if workflow_item.updateJobs():
+            QJobView.instance().set_visible(True)
+
+        if workflow_item.workflowFinished:
+            try:
+                int(workflow.version)
+            except ValueError:
+                if workflow.version.startswith("Parameter Exploration"):
+                    # this is too annoying
+                    #QtGui.QMessageBox.information(self, "Job Ready",
+                    #    'Pending Jobs in "%s" have finished, '
+                    #    'execute it again to get results' % workflow_item.text(0),
+                    #    QtGui.QMessageBox.Ok)
+                    # TODO: Only notify user when all cells have finished
+                    pass
+                elif workflow.version.startswith("Mashup"):
+                    QtGui.QMessageBox.information(self, "Job Ready",
+                        'Pending Jobs in "%s" have finished, '
+                        'execute it again to get results' % workflow_item.text(0),
+                        QtGui.QMessageBox.Ok)
+                return
+            if self.autorun.isChecked():
+                jm.startWorkflow(workflow)
+                self.updating_now = False
+                workflow_item.execute()
+                self.updating_now = True
+                return
+            ret = QtGui.QMessageBox.information(self, "Job Ready",
+                    'Pending Jobs in workflow "%s" have finished, '
+                    'continue execution now?' % workflow_item.text(0),
+                    QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel)
+            if ret == QtGui.QMessageBox.Ok:
+                jm.startWorkflow(workflow)
+                self.updating_now = False
+                workflow_item.execute()
+                self.updating_now = True
+
+    def check_jobs(self, job=None):
         if self.updating_now:
             return
         self.updating_now = True
         try:
-            self.update_jobs()
+            if job is None:
+                for i in xrange(self.jobView.topLevelItemCount()):
+                    vistrail_item = self.jobView.topLevelItem(i)
+                    self.update_job(vistrail_item, force=False)
+            else:
+                self.update_job(job)
         finally:
             self.updating_now = False
 
+    def check_selected_job(self):
+        items = self.jobView.selectedItems()
+        if len(items) != 1:
+            return
+        self.check_jobs(items[0])
+
+    def timerEvent(self, id=None):
+        self.check_jobs()
+
     def keyPressEvent(self, event):
         if event.key() in [QtCore.Qt.Key_Delete, QtCore.Qt.Key_Backspace]:
             for item in self.jobView.selectedItems():
-                if isinstance(item, QWorkflowItem):
-                    item.parent().controller.set_changed(True)
-                    item.parent().jobMonitor.deleteWorkflow(item.workflow.id)
-                elif isinstance(item, QJobItem):
-                    # find parent
-                    parent = item.parent()
-                    while not isinstance(parent, QWorkflowItem):
-                        parent = parent.parent()
-                    parent.parent().controller.set_changed(True)
-                    parent.parent().jobMonitor.deleteJob(item.job.id)
+                self.delete_item(item)
         else:
             QtGui.QWidget.keyPressEvent(self, event)
 
@@ -272,6 +375,59 @@ class QJobView(QtGui.QWidget, QVistrailsPaletteInterface):
         if isinstance(item, QWorkflowItem):
             item.goto()
 
+    def delete_item(self, item):
+        if isinstance(item, QWorkflowItem):
+            item.parent().controller.set_changed(True)
+            item.parent().jobMonitor.deleteWorkflow(item.workflow.id)
+        elif isinstance(item, QJobItem):
+            # find parent workflow
+            item.vistrail().controller.set_changed(True)
+            item.vistrail().jobMonitor.deleteJob(item.job.id)
+
+class QJobProgressDialog(QtGui.QDialog):
+    def __init__(self, job_name, job_start, parent=None, value=0, max_value=100):
+        super(QJobProgressDialog, self).__init__(parent)
+        f = self.windowFlags()
+        f |= QtCore.Qt.CustomizeWindowHint
+        f &= ~QtCore.Qt.WindowCloseButtonHint
+        self.job_name = job_name
+        self.job_start = job_start
+        self.was_cancelled = False
+        self.was_checked = False
+        self.progressbar = QtGui.QProgressBar()
+        self.progressbar.setMinimum(0)
+        self.progressbar.setMaximum(max_value)
+        self.progressbar.setValue(value)
+        self.cancel_button = QtGui.QPushButton('&Cancel')
+        self.check_now_button = QtGui.QPushButton('Check &Now')
+        self.cancel_button.clicked.connect(lambda :setattr(self,
+                                                           'was_cancelled',
+                                                           True))
+        self.check_now_button.clicked.connect(lambda :setattr(self,
+                                                              'was_checked',
+                                                              True))
+        self.label = QtGui.QLabel()
+        self.updateLabel()
+        main_layout = QtGui.QGridLayout()
+        main_layout.addWidget(self.label, 0, 0, 2, 2)
+        main_layout.addWidget(self.progressbar, 2, 0, 1, 2)
+        main_layout.addWidget(self.check_now_button, 3, 0)
+        main_layout.addWidget(self.cancel_button, 3, 1)
+        self.setLayout(main_layout)
+        self.setWindowTitle('Running Job')
+        self.setWindowModality(QtCore.Qt.WindowModal)
+
+    def updateLabel(self):
+        labelText = (("Running external job %s\n"
+                               "Started %s\n"
+                               "Last checked %s\n"
+                               "Press Check Now to check or Cancel to suspend")
+                               % (self.job_name,
+                                  self.job_start,
+                                  QtCore.QDateTime.currentDateTime().toString(
+                                      QtCore.Qt.ISODate)))
+        self.label.setText(labelText)
+
 
 class QVistrailItem(QtGui.QTreeWidgetItem):
     """A vistrail with running workflows.
@@ -320,9 +476,12 @@ class QVistrailItem(QtGui.QTreeWidgetItem):
             self.workflowItems[workflow.id] = workflow_item
 
         workflow_item = self.workflowItems[workflow.id]
+        changed = False
         if job.id not in workflow_item.jobs:
             workflow_item.jobs[job.id] = QJobItem(job, workflow_item)
-        workflow_item.updateJobs()
+            changed = True
+        if workflow_item.updateJobs() or changed:
+            QJobView.instance().set_visible(True)
 
     def deleteWorkflow(self, id):
         """ deleteWorkflow(id: str) -> None
@@ -341,8 +500,9 @@ class QVistrailItem(QtGui.QTreeWidgetItem):
             if id in workflow_item.jobs:
                 job_item = workflow_item.jobs[id]
                 job_item.parent().takeChild(job_item.parent().indexOfChild(job_item))
-            del workflow_item.jobs[id]
-            workflow_item.updateJobs()
+                del workflow_item.jobs[id]
+                if workflow_item.updateJobs():
+                    QJobView.instance().set_visible(True)
 
     def addJobRec(self, obj, parent_id=None):
         """addJobRec(obj: ModuleSuspended, parent_id: signature)  -> None
@@ -359,7 +519,7 @@ class QVistrailItem(QtGui.QTreeWidgetItem):
         if obj.children:
             # add parent items and their children
             if id not in workflow_item.intermediates:
-                parent_item = QParentItem(id, obj.name, base)
+                parent_item = QParentItem(id, module_name(obj.module), base)
                 parent_item.setExpanded(True)
                 workflow_item.intermediates[id] = parent_item
 
@@ -386,10 +546,10 @@ class QVistrailItem(QtGui.QTreeWidgetItem):
         for parent in workflow.parents.itervalues():
             self.addJobRec(parent)
 
-        workflowItem = self.workflowItems.get(workflow.id, None)
-        if workflowItem:
-            workflowItem.updateJobs()
-            QJobView.instance().set_visible(True)
+        workflow_item = self.workflowItems.get(workflow.id, None)
+        if workflow_item:
+            if workflow_item.updateJobs():
+                QJobView.instance().set_visible(True)
 
     def checkJob(self, module, id, handle):
         """ checkJob(module: VistrailsModule, id: str, handle: object)
@@ -397,7 +557,7 @@ class QVistrailItem(QtGui.QTreeWidgetItem):
         """
         workflow = self.jobMonitor.currentWorkflow()
         if not workflow:
-            if not handle or not self.jobMonitor.isDone(handle):
+            if not self.jobMonitor.isDone(handle):
                 raise ModuleSuspended(module, 'Job is running',
                                       handle=handle)
         workflow_item = self.workflowItems[workflow.id]
@@ -405,63 +565,87 @@ class QVistrailItem(QtGui.QTreeWidgetItem):
         item.setText(0, item.job.name)
         # we should check the status using the JobHandle and show dialog
         # get current view progress bar and hijack it
-        if handle:
-            item.handle = handle
+        item.handle = handle
         workflow = self.jobMonitor.currentWorkflow()
         workflow_item = self.workflowItems.get(workflow.id, None)
         workflow_item.updateJobs()
-        progress = self.controller.progress
-
-        conf = configuration.get_vistrails_configuration()
+        conf = get_vistrails_configuration()
         interval = conf.jobCheckInterval
-        if interval and not conf.jobAutorun and not progress.suspended:
-            # we should keep checking the job
-            if handle:
-                # wait for module to complete
-                labelText = (("Running external job %s\n"
-                                       "Started %s\n"
-                                       "Press Cancel to suspend")
-                                       % (item.job.name,
-                                          item.job.start))
-                progress.setLabelText(labelText)
-                while not self.jobMonitor.isDone(handle):
-                    i = 0
-                    while i < interval:
-                        i += 1
-                        time.sleep(1)
+        is_done = self.jobMonitor.isDone(handle)
+        old_progress = self.controller.progress
+        if (interval and not conf.jobAutorun and
+               not old_progress.suspended and not is_done):
+            # wait for module to complete
+            old_progress.hide()
+            progress = QJobProgressDialog(item.job.name,
+                                          item.job.start,
+                                          old_progress.parent(),
+                                          old_progress.value(),
+                                          old_progress.maximum())
+            progress.show()
+            while not is_done:
+                dieTime = QtCore.QDateTime.currentDateTime().addSecs(interval)
+                while QtCore.QDateTime.currentDateTime() < dieTime and not is_done:
+                    QtCore.QCoreApplication.processEvents(QtCore.QEventLoop.AllEvents, 100)
+                    if progress.was_checked:
+                        progress.check_now_button.setText('Checking')
+                        progress.check_now_button.setEnabled(False)
+                        progress.cancel_button.setEnabled(False)
+                        is_done = self.jobMonitor.isDone(handle)
+                        progress.check_now_button.setText('Check &Now')
+                        progress.check_now_button.setEnabled(True)
+                        progress.cancel_button.setEnabled(True)
+                        progress.was_checked = False
+                        progress.updateLabel()
+                    elif progress.was_cancelled:
+                        # this does not work, need to create a new progress dialog
+                        #old_progress.goOn()
+                        new_progress = old_progress.__class__(old_progress.parent())
+                        new_progress.setMaximum(old_progress.maximum())
+                        new_progress.setValue(old_progress.value())
+                        new_progress.setLabelText(old_progress.labelText())
+                        new_progress.setMinimumDuration(0)
+                        new_progress.suspended = True
+                        self.controller.progress = new_progress
+                        old_progress.deleteLater()
+                        progress.hide()
+                        new_progress.show()
                         QtCore.QCoreApplication.processEvents()
-                        if progress.wasCanceled():
-                            # this does not work, need to create a new progress dialog
-                            #progress.goOn()
-                            new_progress = progress.__class__(progress.parent())
-                            new_progress.setMaximum(progress.maximum())
-                            new_progress.setValue(progress.value())
-                            new_progress.setLabelText(labelText)
-                            new_progress.setMinimumDuration(0)
-                            new_progress.suspended = True
-                            self.controller.progress = new_progress
-                            progress.hide()
-                            progress.deleteLater()
-                            progress = new_progress
-                            progress.show()
-                            QtCore.QCoreApplication.processEvents()
-                            raise ModuleSuspended(module,
-                                       'Interrupted by user, job'
-                                       ' is still running', handle=handle)
-                return
-        if not handle or not self.jobMonitor.isDone(handle):
+                        raise ModuleSuspended(module,
+                                   'Interrupted by user, job'
+                                   ' is still running', handle=handle)
+                is_done = is_done or self.jobMonitor.isDone(handle)
+            # is_done!
+            new_progress = old_progress.__class__(old_progress.parent())
+            new_progress.setMaximum(old_progress.maximum())
+            new_progress.setValue(old_progress.value())
+            new_progress.setLabelText(old_progress.labelText())
+            new_progress.setMinimumDuration(0)
+            new_progress.suspended = True
+            self.controller.progress = new_progress
+            old_progress.deleteLater()
+            progress.hide()
+            new_progress.show()
+            QtCore.QCoreApplication.processEvents()
+            return
+        if not is_done:
             raise ModuleSuspended(module, 'Job is running', handle=handle)
 
 
 class QWorkflowItem(QtGui.QTreeWidgetItem):
     """A workflow with jobs.
 
-    This item can have child items.
+       It can reference a workflow version, a parameter exploration workflow,
+       or a mashup
+
+    This item can have child module items.
     """
     def __init__(self, workflow, parent):
         QtGui.QTreeWidgetItem.__init__(self, parent, ['', ''])
         self.workflow = workflow
         self.has_handle = True
+        # Paused workflows will not be checked by the timer/"Check all" button
+        self.paused = False
         self.setIcon(0, theme.get_current_theme().PIPELINE_ICON)
         self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
         self.workflowFinished = False
@@ -472,19 +656,25 @@ class QWorkflowItem(QtGui.QTreeWidgetItem):
     def updateJobs(self):
         """ Updates name and job states
         """
-        name = self.parent().controller.get_pipeline_name(
-                                                        self.workflow.version)
+        self.paused = False
+        try:
+            name = self.parent().controller.get_pipeline_name(
+                                                           self.workflow.version)
+            self.setToolTip(0, 'Double-Click to View Pipeline "%s" with id %s' %
+                               (name, self.workflow.version))
+        except KeyError:
+            name = self.workflow.version
         self.setText(0, name)
-        self.setToolTip(0, 'Double-Click to View Pipeline "%s" with id %s' %
-                           (name, self.workflow.version))
         self.setToolTip(1, "Log id: %s" % self.workflow.id)
+        changed = False
         self.has_handle = True
         for job in self.jobs.itervalues():
-            job.updateJob()
+            if job.updateJob():
+                changed = True
             if not job.job.finished and not job.handle:
                 self.has_handle = False
         count = len(self.jobs)
-        finished = sum([job.jobFinished for job in self.jobs.values()])
+        finished = sum([job.job.finished or job.job.ready for job in self.jobs.values()])
         self.setText(1, "(%s/%s)" % (finished, count))
         self.workflowFinished = (finished == count)
         if self.workflowFinished:
@@ -493,11 +683,17 @@ class QWorkflowItem(QtGui.QTreeWidgetItem):
             self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
         else:
             self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
+        return changed
 
     def goto(self):
         """ Shows this pipeline
 
         """
+        try:
+            int(self.workflow.version)
+        except ValueError:
+            # this is not a pipeline id
+            return
         from vistrails.gui.vistrails_window import _app
         view = _app.getViewFromLocator(self.parent().controller.locator)
         _app.change_view(view)
@@ -507,8 +703,20 @@ class QWorkflowItem(QtGui.QTreeWidgetItem):
     def execute(self):
         """ Shows and executes this pipeline
         """
+        try:
+            int(self.workflow.version)
+        except ValueError:
+            # this is not a pipeline id
+            return
         self.goto().execute()
 
+    def pause(self):
+        self.paused = True
+        self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
+
+    def resume(self):
+        self.paused = False
+        self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
 
 class QJobItem(QtGui.QTreeWidgetItem):
     """A pending job, i.e. a single module that was suspended.
@@ -520,17 +728,16 @@ class QJobItem(QtGui.QTreeWidgetItem):
                                                       job.description()])
         self.setToolTip(1, job.description())
         self.job = job
-        # This is different from job.jobFinished after job finishes
-        self.jobFinished = self.job.finished
         self.handle = None
+        self.finished = None
         self.updateJob()
 
     def updateJob(self):
-        if self.job.finished:
-            self.jobFinished = self.job.finished
+        changed = self.job.finished != self.finished
+        self.finished = self.job.finished
         self.setText(1, self.job.parameters.get('__message__',
-                        "Finished" if self.jobFinished else "Running"))
-        if self.jobFinished:
+                        "Finished" if self.job.finished or self.job.ready else "Running"))
+        if self.job.finished or self.job.ready:
             self.setIcon(1, theme.get_current_theme().JOB_FINISHED)
             self.setToolTip(0, "This Job Has Finished")
         elif self.handle:
@@ -540,6 +747,7 @@ class QJobItem(QtGui.QTreeWidgetItem):
             self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
             self.setToolTip(0, "This Job is Running")
         self.setToolTip(1, self.job.id)
+        return changed
 
     def stdout(self):
         if self.handle:
@@ -553,6 +761,16 @@ class QJobItem(QtGui.QTreeWidgetItem):
                               self.handle)
             sp.exec_()
 
+    def workflow(self):
+        # find parent workflow
+        parent = self.parent()
+        while not isinstance(parent, QWorkflowItem):
+            parent = parent.parent()
+        return parent
+
+    def vistrail(self):
+        # find parent vistrail
+        return self.workflow().parent()
 
 class QParentItem(QtGui.QTreeWidgetItem):
     """A composite job, i.e. a module whose child suspended.
@@ -604,3 +822,164 @@ class ErrorMonitor(LogMonitor):
     """
     def update_text(self):
         self.text.setPlainText(self.handle.standard_error())
+
+
+################################################################################
+# Testing
+
+
+class TestJobMonitor(vistrails.gui.utils.TestVisTrailsGUI):
+
+    @classmethod
+    def setUpClass(cls):
+        get_vistrails_configuration().jobAutorun = True
+        get_vistrails_persistent_configuration().jobAutorun = True
+        QJobView.instance().set_refresh()
+        cls.filename = (vistrails.core.system.vistrails_root_directory() +
+                        '/tests/resources/jobs.vt')
+
+        pm = vistrails.core.packagemanager.get_package_manager()
+        if pm.has_package('org.vistrails.vistrails.myjobs'):
+            return
+        d = {'myjob': 'vistrails.tests.resources.'}
+        pm.late_enable_package('myjob', d)
+
+    @classmethod
+    def tearDownClass(cls):
+        manager = vistrails.core.packagemanager.get_package_manager()
+        if manager.has_package('org.vistrails.vistrails.myjobs'):
+            manager.late_disable_package('myjob')
+
+    def tearDown(self):
+        vistrails.gui.utils.TestVisTrailsGUI.tearDown(self)
+        from vistrails.core.interpreter.cached import CachedInterpreter
+        CachedInterpreter.flush()
+
+    def testSuspended(self):
+        from vistrails import api
+        view = api.open_vistrail_from_file(self.filename)
+        c = view.controller
+        api.select_version('SuspendOnce', c)
+
+        result = c.execute_user_workflow()[0][0]
+        # assert suspended
+        self.assertEqual(result.errors, {})
+        self.assertNotEqual(result.suspended, {})
+
+        result = c.execute_user_workflow()[0][0]
+        # assert finished
+        self.assertEqual(result.errors, {})
+        self.assertEqual(result.suspended, {})
+
+        for i in c.jobMonitor.workflows.keys():
+            c.jobMonitor.deleteWorkflow(i)
+
+    def testGroup(self):
+        from vistrails import api
+        view = api.open_vistrail_from_file(self.filename)
+        c = view.controller
+        api.select_version('SuspendGroup', c)
+        result = c.execute_user_workflow()[0][0]
+
+        # assert suspended
+        self.assertEqual(result.errors, {})
+        self.assertNotEqual(result.suspended, {})
+
+        for i in c.jobMonitor.workflows.keys():
+            c.jobMonitor.deleteWorkflow(i)
+
+    def testMap(self):
+        from vistrails import api
+        view = api.open_vistrail_from_file(self.filename)
+        c = view.controller
+        api.select_version('SuspendMap', c)
+
+        result = c.execute_user_workflow()[0][0]
+        # assert suspended
+        self.assertEqual(result.errors, {})
+        self.assertNotEqual(result.suspended, {})
+
+        result = c.execute_user_workflow()[0][0]
+        # assert finished
+        self.assertEqual(result.errors, {})
+        self.assertEqual(result.suspended, {})
+
+        for i in c.jobMonitor.workflows.keys():
+            c.jobMonitor.deleteWorkflow(i)
+
+    def testLoop(self):
+        from vistrails import api
+        view = api.open_vistrail_from_file(self.filename)
+        c = view.controller
+        api.select_version('SuspendLoop', c)
+
+        result = c.execute_user_workflow()[0][0]
+        # assert suspended
+        self.assertEqual(result.errors, {})
+        self.assertNotEqual(result.suspended, {})
+
+        result = c.execute_user_workflow()[0][0]
+        # assert finished
+        self.assertEqual(result.errors, {})
+        self.assertEqual(result.suspended, {})
+
+        for i in c.jobMonitor.workflows.keys():
+            c.jobMonitor.deleteWorkflow(i)
+
+    def testParameterExploration(self):
+        from vistrails import api
+        view = api.open_vistrail_from_file(self.filename)
+        c = view.controller
+        api.select_version('SuspendOnce', c)
+
+        pe = c.vistrail.get_named_paramexp('SuspendOnce')
+        try:
+            c.executeParameterExploration(pe)
+        except:
+            self.fail("Parameter Exploration with Job failed")
+
+        # Check that we have 2 jobs
+        self.assertEqual(len(c.jobMonitor.workflows.keys()), 2)
+        for i in c.jobMonitor.workflows.keys():
+            wf = c.jobMonitor.workflows[i]
+            self.assertFalse(wf.completed())
+
+        try:
+            c.executeParameterExploration(pe)
+        except:
+            self.fail("Parameter Exploration with Job failed")
+
+        # Check that the 2 jobs has completed
+        for i in c.jobMonitor.workflows.keys():
+            wf = c.jobMonitor.workflows[i]
+            self.assertTrue(wf.completed())
+
+        for i in c.jobMonitor.workflows.keys():
+            c.jobMonitor.deleteWorkflow(i)
+
+    def testMashup(self):
+        from vistrails import api
+        view = api.open_vistrail_from_file(self.filename)
+        c = view.controller
+
+        c.flush_delayed_actions()
+        id = "80f58f50-57b1-11e5-a1da-000c2960b7d8"
+        mashup = view.get_mashup_from_mashuptrail_id(id, "SuspendOnce")
+        self.assert_(mashup)
+
+        view.open_mashup(mashup)
+        self.assertEqual(len(c.jobMonitor.workflows.keys()), 1)
+        self.assertFalse(c.jobMonitor.workflows.values()[0].completed())
+
+        # close associated mashup apps
+        from vistrails.gui.version_prop import QVersionProp
+        version_prop = QVersionProp.instance()
+        for app in version_prop.versionMashups.apps.values():
+            app.close()
+
+        view.open_mashup(mashup)
+        self.assertEqual(len(c.jobMonitor.workflows.keys()), 1)
+        self.assertTrue(c.jobMonitor.workflows.values()[0].completed())
+
+        for i in c.jobMonitor.workflows.keys():
+            c.jobMonitor.deleteWorkflow(i)
diff --git a/vistrails/gui/mashups/__init__.py b/vistrails/gui/mashups/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/gui/mashups/__init__.py
+++ b/vistrails/gui/mashups/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/alias_inspector.py b/vistrails/gui/mashups/alias_inspector.py
index 39fb988..1079143 100644
--- a/vistrails/gui/mashups/alias_inspector.py
+++ b/vistrails/gui/mashups/alias_inspector.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/alias_list.py b/vistrails/gui/mashups/alias_list.py
index 31ecf03..c60c898 100644
--- a/vistrails/gui/mashups/alias_list.py
+++ b/vistrails/gui/mashups/alias_list.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/alias_parameter_view.py b/vistrails/gui/mashups/alias_parameter_view.py
index 3e42933..8eeb32a 100644
--- a/vistrails/gui/mashups/alias_parameter_view.py
+++ b/vistrails/gui/mashups/alias_parameter_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/controller.py b/vistrails/gui/mashups/controller.py
index 099eb4f..1d59482 100644
--- a/vistrails/gui/mashups/controller.py
+++ b/vistrails/gui/mashups/controller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/mashup_app.py b/vistrails/gui/mashups/mashup_app.py
index 5d1b171..a467821 100644
--- a/vistrails/gui/mashups/mashup_app.py
+++ b/vistrails/gui/mashups/mashup_app.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,13 +35,16 @@
 ###############################################################################
 from __future__ import division
 
+import os
 from PyQt4 import QtCore, QtGui
 from PyQt4.QtCore import pyqtSignal
 
 from vistrails.core import debug
+from vistrails.core.vistrail.job import Workflow as JobWorkflow
 from vistrails.gui.mashups.mashups_widgets import QAliasNumericStepperWidget, \
     QAliasSliderWidget, QDropDownWidget
-from vistrails.gui.utils import show_warning, TestVisTrailsGUI
+from vistrails.gui.utils import TestVisTrailsGUI
+from vistrails.gui.vistrail_controller import ExecutionProgressDialog
 
 from vistrails.packages.spreadsheet.spreadsheet_controller import \
     spreadsheetController
@@ -69,7 +72,7 @@ class QMashupAppMainWindow(QtGui.QMainWindow):
         self.mainLayout.setSpacing(5)
         centralWidget.setLayout(self.mainLayout)
         self.setCentralWidget(centralWidget)
-        self.numberOfCells = 0
+        self.numberOfCells = None
         self.is_executing = False
         self.sequenceOption = False
         self.steps = []
@@ -105,13 +108,16 @@ class QMashupAppMainWindow(QtGui.QMainWindow):
         spreadsheetController.setEchoMode(True)
         #will run to get Spreadsheet Cell events
         (cellEvents, errors) = self.runAndGetCellEvents(useDefaultValues=True)
-        if cellEvents:
+        if not errors:
             self.numberOfCells = len(cellEvents)
-            self.initCells(cellEvents)
-        if len(errors) > 0:
-            show_warning("VisTrails::Mashup Preview",
-                         "There was a problem executing the pipeline: %s." %
-                         errors)
+            if cellEvents:
+                self.initCells(cellEvents)
+        if errors is True:
+            debug.critical("Mashup job is still running. Run again to check "
+                          "if it has completed.")
+        elif len(errors) > 0:
+            debug.critical("There was a problem executing the mashup: %s." %
+                           errors)
         # Construct the controllers for aliases
         self.controlDocks = {}
         self.cellControls = {}
@@ -236,6 +242,8 @@ class QMashupAppMainWindow(QtGui.QMainWindow):
             (res, errors) = self.run(useDefaultValues)
             if res:
                 cellEvents = spreadsheetController.getEchoCellEvents()
+            else:
+                return [], errors or True
         except Exception, e:
             debug.unexpected_exception(e)
             print "Executing pipeline failed:", debug.format_exc()
@@ -250,14 +258,21 @@ class QMashupAppMainWindow(QtGui.QMainWindow):
             return self.updateCellsLoop(info)
         self.is_executing = True
         (cellEvents, errors) = self.runAndGetCellEvents()
+        if errors is True:
+            debug.critical("Mashup job is still running. Run again to check "
+                          "if it has completed.")
         self.is_executing = False
-        if len(cellEvents) != self.numberOfCells:
+        if self.numberOfCells is not None and len(cellEvents) != self.numberOfCells:
             raise RuntimeError(
                     "The number of cells has changed (unexpectedly) "
                     "(%d vs. %d)!\n"
                     "Pipeline results: %s" % (len(cellEvents),
                                               self.numberOfCells,
                                               errors))
+        elif self.numberOfCells is None and not errors:
+            self.numberOfCells = len(cellEvents)
+            if cellEvents:
+                self.initCells(cellEvents)
         #self.SaveCamera()
         for i in xrange(self.numberOfCells):
             camera = []
@@ -297,13 +312,20 @@ class QMashupAppMainWindow(QtGui.QMainWindow):
 
         while True:
             (cellEvents, errors) = self.runAndGetCellEvents()
-            if len(cellEvents) != self.numberOfCells:
+            if errors is True:
+                debug.critical("Mashup job is still running. Run again to check "
+                              "if it has completed.")
+            if self.numberOfCells is not None and len(cellEvents) != self.numberOfCells:
                 raise RuntimeError(
                         "The number of cells has changed (unexpectedly) "
                         "(%d vs. %d)!\n"
                         "Pipeline results: %s" % (len(cellEvents),
                                                   self.numberOfCells,
                                                   errors))
+            elif  self.numberOfCells is None and not errors:
+                self.numberOfCells = len(cellEvents)
+                if cellEvents:
+                    self.initCells(cellEvents)
             if interactive:
                 self.steps.append([])
             else:
@@ -565,15 +587,48 @@ class QMashupAppMainWindow(QtGui.QMainWindow):
                     val =str(edit.text())
                 params.append((alias.component.vttype, alias.component.vtid,
                               val))
-        results = self.controller.execute(params)[0]
+
+        # reset job view
+        from vistrails.gui.job_monitor import QJobView
+        jobView = QJobView.instance()
+        if jobView.updating_now:
+            debug.critical("Execution Aborted: Job Monitor is updating. "
+                           "Please wait a few seconds and try again.")
+            return [False, []]
+        jobView.updating_now = True
+
+        job_id = 'Mashup %s %s' % (self.currentMashup.version, self.currentMashup.id)
+        current_workflow = None
+        for wf in self.view.controller.jobMonitor.workflows.itervalues():
+            if job_id == wf.version:
+                current_workflow = wf
+                self.view.controller.jobMonitor.startWorkflow(wf)
+        if not current_workflow:
+            current_workflow = JobWorkflow(job_id)
+            self.view.controller.jobMonitor.startWorkflow(current_workflow)
+
+        self.view.controller.progress = ExecutionProgressDialog(self.view)
+        self.view.controller.progress.show()
+
+        try:
+            results = self.controller.execute(params)[0]
+        finally:
+            self.view.controller.jobMonitor.finishWorkflow()
+            jobView.updating_now = False
+            self.view.controller.progress.setValue(100)
+            self.view.controller.progress.hide()
+            self.view.controller.progress.deleteLater()
+            self.view.controller.progress = None
+
         result = results[0]
-        (objs, errors, executed) = (result.objects, result.errors,
-                                                   result.executed)
+        objs, errors, executed, suspended = \
+          result.objects, result.errors, result.executed, result.suspended
+
         if len(errors) > 0:
             print '=== ERROR EXECUTING PIPELINE ==='
             print errors
             return (False, errors)
-        return (True, [])
+        return (not suspended, [])
 
     def showBuilderWindow(self):
         from vistrails.gui.vistrails_window import _app
@@ -624,8 +679,9 @@ class TestMashupApp(TestVisTrailsGUI):
     def test_load_mashup(self):
         import vistrails.api
         import vistrails.core.system
-        filename = (vistrails.core.system.vistrails_root_directory() +
-                    '/tests/resources/spx_loop.vt')
+        filename = os.path.join(
+                vistrails.core.system.vistrails_root_directory(),
+                'tests/resources/spx_loop.vt')
         view = vistrails.api.open_vistrail_from_file(filename)
         # Execute workflow to trigger upgrades
         view.controller.execute_current_workflow()
diff --git a/vistrails/gui/mashups/mashup_view.py b/vistrails/gui/mashups/mashup_view.py
index bebca17..27fd3d7 100644
--- a/vistrails/gui/mashups/mashup_view.py
+++ b/vistrails/gui/mashups/mashup_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/mashups_inspector.py b/vistrails/gui/mashups/mashups_inspector.py
index d8c8c14..4163bb1 100644
--- a/vistrails/gui/mashups/mashups_inspector.py
+++ b/vistrails/gui/mashups/mashups_inspector.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/mashups/mashups_manager.py b/vistrails/gui/mashups/mashups_manager.py
index 59ce2c0..b44273f 100644
--- a/vistrails/gui/mashups/mashups_manager.py
+++ b/vistrails/gui/mashups/mashups_manager.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -186,6 +186,7 @@ class MashupsManager(object):
                                               pipeline_view=view)
         current_log = vt_controller.log
         newvt_controller.log = current_log
+        newvt_controller.jobMonitor = vt_controller.jobMonitor
         newvt_controller.disable_autosave()
         return newvt_controller
     
@@ -195,6 +196,7 @@ class MashupsManager(object):
         newvt_controller = BaseVistrailController(vistrail, None)
         current_log = vt_controller.log
         newvt_controller.log = current_log
+        newvt_controller.jobMonitor = vt_controller.jobMonitor
         # DAK: why does the base version copy the _mashups but the non-base
         # version doesn't??
         for m in vt_controller._mashups:
diff --git a/vistrails/gui/mashups/mashups_widgets.py b/vistrails/gui/mashups/mashups_widgets.py
index 22e001c..b367b24 100644
--- a/vistrails/gui/mashups/mashups_widgets.py
+++ b/vistrails/gui/mashups/mashups_widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -184,7 +184,7 @@ class QAliasNumericStepperWidget(QtGui.QWidget):
         
 ###############################################################################
 class QNumericStepperIntegerWidget(ConstantWidgetMixin, QtGui.QSpinBox):
-    contentsChanged = QtCore.pyqtSignal(object, object)
+    contentsChanged = QtCore.pyqtSignal(tuple)
     def __init__(self, param, parent=None):
         QtGui.QSpinBox.__init__(self, parent)
         ConstantWidgetMixin.__init__(self, param.strValue)
diff --git a/vistrails/gui/merge_gui.py b/vistrails/gui/merge_gui.py
index bdc0f72..d26c546 100644
--- a/vistrails/gui/merge_gui.py
+++ b/vistrails/gui/merge_gui.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/module_annotation.py b/vistrails/gui/module_annotation.py
index bab88a0..04fef06 100644
--- a/vistrails/gui/module_annotation.py
+++ b/vistrails/gui/module_annotation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/module_configuration.py b/vistrails/gui/module_configuration.py
index 90445c5..60945b0 100644
--- a/vistrails/gui/module_configuration.py
+++ b/vistrails/gui/module_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/module_documentation.py b/vistrails/gui/module_documentation.py
index 2278636..52df10e 100644
--- a/vistrails/gui/module_documentation.py
+++ b/vistrails/gui/module_documentation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py
index 3c2df74..18e54b8 100644
--- a/vistrails/gui/module_info.py
+++ b/vistrails/gui/module_info.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -188,15 +188,15 @@ class QModuleInfo(QtGui.QWidget, QVistrailsPaletteInterface):
                 widget.setReadOnly(read_only)
 
     def set_controller(self, controller):
-        if self.controller == controller:
-            return
-        self.controller = controller
-        for ports_list in self.ports_lists:
-            ports_list.set_controller(controller)
-        self.annotations.set_controller(controller)
+        if self.controller != controller:
+            self.controller = controller
+            for ports_list in self.ports_lists:
+                ports_list.set_controller(controller)
+            self.annotations.set_controller(controller)
 
         if self.controller is not None:
             scene = self.controller.current_pipeline_scene
+            self.setReadOnly(scene.read_only_mode)
             selected_ids = scene.get_selected_module_ids() 
             modules = [self.controller.current_pipeline.modules[i] 
                        for i in selected_ids]
@@ -228,12 +228,6 @@ class QModuleInfo(QtGui.QWidget, QVistrailsPaletteInterface):
         self.annotations.updateModule(module)
 
         if module is None:
-            # We show the version properties tab if both are tabified and
-            # self is visible
-            if not self.toolWindow().isFloating() and \
-               not QVersionProp.instance().toolWindow().isFloating() and \
-               not self.toolWindow().visibleRegion().isEmpty():
-                QVersionProp.instance().set_visible(True)
             self.name_edit.setText("")
             if not versions_increasing(QtCore.QT_VERSION_STR, '4.7.0'):
                 self.name_edit.setPlaceholderText("")
@@ -244,12 +238,6 @@ class QModuleInfo(QtGui.QWidget, QVistrailsPaletteInterface):
             self.namespace_edit.setText("")
             self.module_id.setText("")
         else:
-            # We show self  if both are tabified and
-            # the version properties tab is visible
-            if not self.toolWindow().isFloating() and \
-               not QVersionProp.instance().toolWindow().isFloating() and \
-               not QVersionProp.instance().toolWindow().visibleRegion().isEmpty():
-                self.set_visible(True)
             if module.has_annotation_with_key('__desc__'):
                 label = module.get_annotation_by_key('__desc__').value.strip()
             else:
diff --git a/vistrails/gui/module_options.py b/vistrails/gui/module_options.py
index 408967b..abe469f 100644
--- a/vistrails/gui/module_options.py
+++ b/vistrails/gui/module_options.py
@@ -1,7 +1,7 @@
 ###############################################################################
 
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/module_palette.py b/vistrails/gui/module_palette.py
index 1018e4b..a596d4a 100644
--- a/vistrails/gui/module_palette.py
+++ b/vistrails/gui/module_palette.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -42,6 +42,8 @@ QModuleTreeWidgetItem
 """
 from __future__ import division
 
+import os
+import traceback
 from PyQt4 import QtCore, QtGui
 from vistrails.core import get_vistrails_application
 from vistrails.core import debug
@@ -281,27 +283,36 @@ class QModuleTreeWidget(QSearchTreeWidget):
             registry = get_module_registry()
             package = registry.packages[identifier]
             try:
-                if package.has_contextMenuName():
-                    name = package.contextMenuName(item.text(0))
-                    if name:
-                        act = QtGui.QAction(name, self)
-                        act.setStatusTip(name)
-                        def callMenu():
-                            if package.has_callContextMenu():
-                                name = package.callContextMenu(item.text(0))
-
-                        QtCore.QObject.connect(act,
-                                               QtCore.SIGNAL("triggered()"),
-                                               callMenu)
+                if package.has_context_menu():
+                    if isinstance(item, QPackageTreeWidgetItem):
+                        text = None
+                    elif isinstance(item, QNamespaceTreeWidgetItem):
+                        return  # no context menu for namespaces
+                    elif isinstance(item, QModuleTreeWidgetItem):
+                        text = item.descriptor.name
+                        if item.descriptor.namespace:
+                            text = '%s|%s' % (item.descriptor.namespace, text)
+                    else:
+                        assert False, "fell through"
+                    menu_items = package.context_menu(text)
+                    if menu_items:
                         menu = QtGui.QMenu(self)
-                        menu.addAction(act)
+                        for text, callback in menu_items:
+                            act = QtGui.QAction(text, self)
+                            act.setStatusTip(text)
+                            QtCore.QObject.connect(act,
+                                                   QtCore.SIGNAL("triggered()"),
+                                                   callback)
+                            menu.addAction(act)
                         menu.exec_(event.globalPos())
                     return
             except Exception, e:
+                debug.unexpected_exception(e)
                 debug.warning("Got exception trying to display %s's "
-                              "context menu in the palette: %s: %s" % (
-                              package.name,
-                              type(e).__name__, ', '.join(e.args)))
+                              "context menu in the palette: %s\n%s" % (
+                                  package.name,
+                                  debug.format_exception(e),
+                                  traceback.format_exc()))
 
             item.contextMenuEvent(event, self)
 
@@ -483,6 +494,12 @@ class QModuleTreeWidgetItem(QtGui.QTreeWidgetItem):
                                QtCore.SIGNAL("triggered()"),
                                self.edit_subworkflow)
             menu.addAction(act)
+            act = QtGui.QAction("Remove Subworkflow", widget)
+            act.setStatusTip("Delete this Subworkflow")
+            QtCore.QObject.connect(act,
+                               QtCore.SIGNAL("triggered()"),
+                               self.remove_subworkflow)
+            menu.addAction(act)
         menu.exec_(event.globalPos())
 
     def view_documentation(self):
@@ -496,6 +513,17 @@ class QModuleTreeWidgetItem(QtGui.QTreeWidgetItem):
         filename = self.descriptor.module.vt_fname
         _app.openAbstraction(filename)
 
+    def remove_subworkflow(self):
+        registry = get_module_registry()
+        res = QtGui.QMessageBox.question(None,
+                  'Delete subworkflow?',
+                  'Remove local subworkflow "%s" and delete from disk?' % self.descriptor.name,
+                  buttons=QtGui.QMessageBox.Yes,
+                  defaultButton=QtGui.QMessageBox.No)
+        if res == QtGui.QMessageBox.Yes:
+            os.unlink(self.descriptor.module.vt_fname)
+            registry.delete_module(*self.descriptor.spec_tuple)
+
     def set_descriptor(self, descriptor):
         self.descriptor = descriptor
         if descriptor:
diff --git a/vistrails/gui/modules/__init__.py b/vistrails/gui/modules/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/gui/modules/__init__.py
+++ b/vistrails/gui/modules/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py
index 3a47c10..045ab6d 100644
--- a/vistrails/gui/modules/constant_configuration.py
+++ b/vistrails/gui/modules/constant_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/list_configuration.py b/vistrails/gui/modules/list_configuration.py
index 41343d8..c220bdc 100644
--- a/vistrails/gui/modules/list_configuration.py
+++ b/vistrails/gui/modules/list_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/module_configure.py b/vistrails/gui/modules/module_configure.py
index 77606e7..ad4a3d1 100644
--- a/vistrails/gui/modules/module_configure.py
+++ b/vistrails/gui/modules/module_configure.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -242,9 +242,8 @@ class _DefaultModuleConfigurationWidget(StandardModuleConfigurationWidget):
         self.setUpdatesEnabled(False)
         for i in xrange(len(self.inputPorts)):
             port = self.inputPorts[i]
-            entry = (PortEndPoint.Destination, port.name)
             checkBox = self.inputDict[port.name]
-            if not port.optional or entry in self.module.portVisible:
+            if not port.optional or port.name in self.module.visible_input_ports:
                 checkBox.setCheckState(QtCore.Qt.Checked)
             else:
                 checkBox.setCheckState(QtCore.Qt.Unchecked)
@@ -252,9 +251,8 @@ class _DefaultModuleConfigurationWidget(StandardModuleConfigurationWidget):
                 checkBox.setEnabled(False)
         for i in xrange(len(self.outputPorts)):
             port = self.outputPorts[i]
-            entry = (PortEndPoint.Source, port.name)
             checkBox = self.outputDict[port.name]
-            if not port.optional or entry in self.module.portVisible:
+            if not port.optional or port.name in self.module.visible_output_ports:
                 checkBox.setCheckState(QtCore.Qt.Checked)
             else:
                 checkBox.setCheckState(QtCore.Qt.Unchecked)
diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py
index 67d0cb7..fed5160 100644
--- a/vistrails/gui/modules/output_configuration.py
+++ b/vistrails/gui/modules/output_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/paramexplore.py b/vistrails/gui/modules/paramexplore.py
index cfbb7a1..a4f6628 100644
--- a/vistrails/gui/modules/paramexplore.py
+++ b/vistrails/gui/modules/paramexplore.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/python_source_configure.py b/vistrails/gui/modules/python_source_configure.py
index bfcea2e..9f8f91a 100644
--- a/vistrails/gui/modules/python_source_configure.py
+++ b/vistrails/gui/modules/python_source_configure.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -122,7 +122,8 @@ class PythonHighlighter(QtGui.QSyntaxHighlighter):
 
 def PythonEditor(parent=None):
     try:
-        py_import('PyQt4.Qsci', {'linux-ubuntu': 'python-qscintilla2'})
+        py_import('PyQt4.Qsci', {'linux-debian': 'python-qscintilla2',
+                                 'linux-ubuntu': 'python-qscintilla2'}, True)
     except ImportError:
         return OldPythonEditor(parent)
     else:
@@ -214,6 +215,7 @@ class OldPythonEditor(QtGui.QTextEdit):
 
     def __init__(self, parent=None):
         QtGui.QTextEdit.__init__(self, parent)
+        self.setAcceptRichText(False)
         self.setLineWrapMode(QtGui.QTextEdit.NoWrap)
         self.formatChanged(None)
         self.setCursorWidth(8)
diff --git a/vistrails/gui/modules/query_configuration.py b/vistrails/gui/modules/query_configuration.py
index d141c75..e28d698 100644
--- a/vistrails/gui/modules/query_configuration.py
+++ b/vistrails/gui/modules/query_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/resources/__init__.py b/vistrails/gui/modules/resources/__init__.py
deleted file mode 100644
index cce6ceb..0000000
--- a/vistrails/gui/modules/resources/__init__.py
+++ /dev/null
@@ -1,38 +0,0 @@
-###############################################################################
-##
-## Copyright (C) 2014-2015, New York University.
-## Copyright (C) 2011-2014, NYU-Poly.
-## Copyright (C) 2006-2011, University of Utah.
-## All rights reserved.
-## Contact: contact at vistrails.org
-##
-## This file is part of VisTrails.
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are met:
-##
-##  - Redistributions of source code must retain the above copyright notice,
-##    this list of conditions and the following disclaimer.
-##  - Redistributions in binary form must reproduce the above copyright
-##    notice, this list of conditions and the following disclaimer in the
-##    documentation and/or other materials provided with the distribution.
-##  - Neither the name of the New York University nor the names of its
-##    contributors may be used to endorse or promote products derived from
-##    this software without specific prior written permission.
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-###############################################################################
-from __future__ import division
-
-pass
diff --git a/vistrails/gui/modules/resources/colorconfig.qrc b/vistrails/gui/modules/resources/colorconfig.qrc
deleted file mode 100644
index c738c1b..0000000
--- a/vistrails/gui/modules/resources/colorconfig.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
-    <file>colorwheel.png</file>
-</qresource>
-</RCC>
diff --git a/vistrails/gui/modules/resources/colorconfig_rc.py b/vistrails/gui/modules/resources/colorconfig_rc.py
deleted file mode 100644
index cef595f..0000000
--- a/vistrails/gui/modules/resources/colorconfig_rc.py
+++ /dev/null
@@ -1,1855 +0,0 @@
-# -*- coding: utf-8 -*-
-###############################################################################
-##
-## Copyright (C) 2014-2015, New York University.
-## Copyright (C) 2011-2014, NYU-Poly.
-## Copyright (C) 2006-2011, University of Utah.
-## All rights reserved.
-## Contact: contact at vistrails.org
-##
-## This file is part of VisTrails.
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are met:
-##
-##  - Redistributions of source code must retain the above copyright notice,
-##    this list of conditions and the following disclaimer.
-##  - Redistributions in binary form must reproduce the above copyright
-##    notice, this list of conditions and the following disclaimer in the
-##    documentation and/or other materials provided with the distribution.
-##  - Neither the name of the New York University nor the names of its
-##    contributors may be used to endorse or promote products derived from
-##    this software without specific prior written permission.
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-###############################################################################
-
-# Resource object code
-#
-# Created: Thu Mar 20 11:52:37 2014
-#      by: The Resource Compiler for PyQt (Qt v4.8.5)
-#
-# WARNING! All changes made in this file will be lost!
-
-from __future__ import division
-
-from PyQt4 import QtCore
-
-qt_resource_data = b"\
-\x00\x00\x6f\x6e\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x01\x00\x00\x00\x01\x00\x08\x06\x00\x00\x00\x5c\x72\xa8\x66\
-\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
-\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
-\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
-\xd4\x0c\x18\x14\x26\x34\xec\x63\x1a\xd5\x00\x00\x20\x00\x49\x44\
-\x41\x54\x78\xda\xec\xbd\xdd\x76\xe4\x38\xec\x3c\x06\x80\x6a\xcf\
-\xe4\xe4\x2a\x27\xb7\x79\x9c\x3c\xf2\xff\x85\xf2\x0a\x39\xf9\xed\
-\xae\xdd\x22\x90\x0b\x11\x64\x11\xa2\xd4\x52\x7f\xd8\xf3\xe1\xd9\
-\xd3\xa7\xd5\x72\x7b\xc6\x6b\xbb\x0a\x55\x05\x90\x64\x33\xa3\xef\
-\x3f\xdf\x7f\xbe\xff\xfc\x9d\x7f\xa6\xef\x6f\xc1\x1f\xf8\xc7\x56\
-\xaf\xef\x67\x79\x26\x0e\xaf\xbf\xff\x7c\x13\xc0\xf7\x9f\x5f\x02\
-\xe0\x0e\x6c\x5b\xdd\xdf\x27\x84\x73\x04\x60\x43\x02\x58\x3f\xf3\
-\x37\x41\x7c\x13\xc0\xf7\x9f\x57\x01\x1d\xc1\xbd\x05\xf8\xd7\x10\
-\x00\x1d\x24\x00\xab\xaf\xf1\x63\xdf\xc4\xf0\x4d\x00\xdf\x7f\x4e\
-\x00\xde\xc1\x1e\x81\xfe\xeb\x13\x00\x6d\x10\x40\x4f\x0c\x4e\x0a\
-\xdf\x84\xf0\x4d\x00\xdf\x80\x1f\x00\x7e\x0b\xfc\xbf\x2f\x01\x8c\
-\x5e\xdb\x37\x21\x7c\x13\xc0\x37\xe0\x6f\x3d\xfe\x5c\x02\x88\x8f\
-\x6f\x42\xf8\x26\x80\xbf\x04\xf4\x7a\x27\xf8\x7f\x77\x02\xb8\x4d\
-\x02\xed\x21\x1d\x21\x7c\x93\xc1\x37\x01\xfc\xc6\xa0\xdf\x02\xbc\
-\x3e\x00\xfe\x23\xc0\xb7\x17\x10\x00\x1f\x24\x82\x7b\x49\x40\xca\
-\xb3\x06\x75\x20\xdf\x64\xf0\xaa\x3f\xfc\x3d\x08\xf4\xc4\x3f\xba\
-\x51\xe9\xcf\x92\xc0\xd1\xea\xff\xab\x11\xc0\x23\x2a\x40\x0e\xdc\
-\xef\xaf\xbf\xa9\xe0\x9b\x00\x7e\xa1\x6a\xaf\x37\x80\x7f\x54\xfa\
-\x1f\x51\x05\xbf\x33\x01\x9c\x79\xc8\x8d\x6b\xf9\x56\x05\xdf\x04\
-\xf0\xd5\xd5\x7e\x0f\xf8\x7a\x42\xf6\x7f\x13\xc0\xbe\x22\x90\x9b\
-\x44\xf0\xad\x0a\xbe\x09\xe0\x93\x80\xaf\x1b\x40\xbf\xa5\x02\xee\
-\x25\x01\xa2\x73\x61\xe0\xaf\x42\x00\xf7\x92\x80\x1c\x50\x02\x7b\
-\xcf\xdf\x44\xf0\x4d\x00\x2f\x93\xf9\x23\xb0\x9f\x95\xff\xfa\x4d\
-\x00\x0f\x81\x7f\x0d\xf8\xad\x7b\xdf\xf6\xe0\x9b\x00\x9e\x08\xfc\
-\x3d\xd0\x9f\x51\x01\x67\x49\x60\x8b\x00\xb6\x88\xe0\xb3\x09\xe0\
-\x6c\x27\xe0\x28\xf8\xef\xab\xfe\xfd\xf5\x37\x11\x7c\x13\xc0\x53\
-\x80\x7f\x0f\xf8\x9f\x41\x02\x47\xaa\xff\xaf\x44\x00\xf7\x92\xc0\
-\x33\xc0\xbf\x47\x02\xdf\x44\xf0\x4d\x00\xa7\x3c\xfe\x16\xf0\xcf\
-\x10\xc1\xa3\x24\x40\xf4\x9c\x61\xa0\x67\x13\xc0\xb3\x87\x80\x8e\
-\x82\xff\xbe\xea\xbf\x26\x82\xef\x8c\xe0\x9b\x00\x1e\x06\xfe\x3d\
-\x2a\xe0\x0c\x09\x10\x1d\xef\x06\xfc\x0e\x04\xb0\x75\x5f\xe8\x7c\
-\x07\xe0\x16\x09\x7c\x13\xc1\xe1\x3f\xdf\x93\x80\xb6\x01\x7e\x3d\
-\x09\xfe\x47\x54\xc0\xa3\xed\xc0\xdf\x85\x00\x46\x0f\x3d\x50\xfd\
-\xf5\x06\xe0\x35\x3c\xcb\xc6\xeb\xf5\xf7\xd3\x48\xfe\x6e\x5b\xf0\
-\xf7\x2a\x80\x23\xc0\xb7\x1b\xf7\x9e\x69\x05\x9e\x11\x06\xfe\x2a\
-\x04\xf0\xc8\x0c\xc0\x33\xa4\xff\xd8\xff\x8f\x14\x40\xaf\x06\xfe\
-\x42\x22\xf8\x3b\x15\xc0\x91\x8a\xaf\x0f\x80\xff\x55\x43\x41\x7f\
-\x3a\x01\x48\x50\x04\xb2\xa1\x02\xb6\xaa\xbe\xee\x54\x7f\xb9\xf9\
-\xfd\xb5\xbf\xd1\x16\xfc\x5d\x0a\xc0\xab\x7e\xbe\x13\xf4\xcf\x54\
-\x01\x8f\xce\x03\x1c\xb5\x02\x9f\x45\x00\x8f\x4e\x01\xde\x3b\xfc\
-\xf3\x9c\xea\xdf\x1e\xe9\xef\x52\x03\x7f\x8f\x02\x38\x0b\xfc\x33\
-\x39\xc0\x67\x4c\x06\xd2\x9d\x59\xc0\x57\x11\xc0\xb9\xe5\xbf\xeb\
-\xca\xaf\xe1\x7a\xef\x39\x5e\xdb\x21\xff\xbf\xfd\x10\xb2\x4a\x04\
-\xdf\x04\xf0\x87\xfc\x99\x07\x80\xce\x74\x9f\x02\x38\xab\x02\x9e\
-\x41\x02\x7f\x2a\x01\x1c\x01\xff\x91\x00\x70\x2f\xf4\xd3\x83\x95\
-\x3f\x7e\xcf\xd3\x9f\x1f\x12\xfe\x3d\x04\x70\x21\xa6\x7f\x8a\xf7\
-\x7f\x44\x09\xbc\x42\x05\xbc\x72\x1e\xe0\x2b\x09\xe0\x48\xff\x5f\
-\x0f\x4a\xff\x47\xaa\xff\x51\x05\x30\x22\x82\x3f\x5c\x0d\xfc\x3d\
-\x04\x90\xc9\x68\x22\xa2\x7f\xee\x50\x02\x67\x54\xc0\xbd\xeb\x03\
-\xb6\xee\x13\x3d\xd6\x0e\xfc\x6a\x02\x18\xdd\x1f\x6f\xfc\x71\xac\
-\xfa\x1f\x21\x81\x33\xd5\x3f\x1d\x24\x82\x3f\x54\x0d\xfc\x7d\x16\
-\x20\x9f\x90\xff\xcf\x56\x01\x5f\xd1\x0e\xfc\x4c\x02\x38\x2a\xfb\
-\xf5\x86\x1a\xb8\x95\x01\xf0\x93\xab\xbf\x6c\x82\x3e\x7e\x8f\xff\
-\xb8\x4e\xc1\xdf\x41\x00\x46\x44\x97\x52\xfd\x2f\x44\xf4\x3f\x44\
-\xa6\x44\x7c\x54\x09\x18\xdd\x37\x1c\x74\xef\x64\xe0\x2b\xf7\x06\
-\x78\x36\x01\x3c\x63\x0f\x80\x5b\xed\xbf\x5b\x16\xc0\x06\xaf\x6f\
-\x29\x80\xb4\xf1\xbd\xdd\x23\x81\x54\xbf\x97\xf6\xa7\x90\xc0\xdf\
-\x41\x00\xb9\x78\xff\x62\x01\xf4\x42\xa4\xff\x10\x65\x25\xba\x64\
-\x22\x55\xa2\x49\x7b\x52\x18\x12\xc4\x91\xd6\xe0\x67\x4c\x06\xfe\
-\x89\x04\xf0\x8c\xc9\xbf\xb3\x0a\x40\x36\x7d\xff\x16\xf0\xff\x38\
-\x4b\xf0\x77\x10\xc0\xb4\x04\x80\x96\x89\xb4\x00\x7e\x9e\x97\xe7\
-\x0f\x25\xba\xc0\xb3\x2a\xd1\x54\xde\xe3\xaf\xc5\x76\x48\xe1\x1e\
-\x15\xf0\x08\x09\x1c\xed\x06\x6c\x91\xc1\xbd\x04\x70\x74\x25\xe0\
-\x3d\x4b\x80\x8f\x4a\xff\x91\x05\xb8\xd5\xf2\xd3\x83\x95\x7f\xcf\
-\x02\xd0\xe6\x3d\xa3\xf4\x7b\x93\xc0\x5f\xa3\x00\x74\x22\xd2\x0f\
-\xa2\x3c\x11\x65\x50\x01\xaa\x44\xa2\x44\x39\xaf\xc9\x00\x49\xe1\
-\xa2\x45\x31\x94\xd7\xa9\xfc\x72\xf9\xe7\x1f\x6a\x0b\x3e\xc3\x0a\
-\xfc\x49\x04\x70\x74\xf2\x6f\x54\xfd\xed\xa0\xff\x97\x13\x95\x7f\
-\xec\xfb\xc7\x64\x40\x9d\x1d\xf8\x6d\x73\x81\xbf\x82\x00\x72\xa9\
-\xf6\xf9\x42\x94\xff\x87\x48\x27\x22\xfd\x77\x21\x81\xfc\x3f\x3d\
-\xd0\x39\x3c\x8b\xf6\x4a\xe1\x5a\xec\xc2\x07\x90\xc2\x9b\x2d\xcf\
-\x93\x12\x99\x81\x4a\x78\xc5\x50\xd0\xad\x00\xf0\x99\x7b\x02\xec\
-\xed\x05\xf0\x68\x10\x78\xab\xff\xcf\x74\xdf\xc8\xef\x59\x3b\x75\
-\x2b\xfc\xdb\x53\x01\xf8\xfc\x9b\xe6\x02\x7f\x34\x01\xb8\x72\x9f\
-\x0b\xe0\x33\x58\x00\x27\x05\xcd\x0b\x78\x3f\x8a\xf4\x7f\x0f\xd5\
-\xff\x1d\xc8\x81\xe0\x39\x2b\x11\xdb\xf2\xfa\xff\xf3\xcf\xb1\x35\
-\x29\x5c\x2c\xa8\x84\x47\x66\x02\x68\xe7\xde\xaf\x44\x00\x47\xb6\
-\xff\x3e\x3a\xfc\xf3\x48\xef\xff\x4c\xfb\x4f\x4e\x00\x7f\x3b\x6b\
-\x59\x2c\xc1\x37\x01\x7c\xfd\x9f\x62\xd9\x97\xee\x5f\x5e\xaa\x7e\
-\x7e\x2f\xcf\xff\x0c\x9e\x07\x55\xdf\x5f\xc7\xaa\xef\xcf\xff\x53\
-\xee\x2b\x90\x01\x15\x15\x70\x05\x92\x40\x22\x30\x23\x4a\xfe\xfc\
-\xe8\x3c\xc0\xad\x00\xf0\x15\x04\xf0\xc8\x10\xd0\x68\xf0\xe7\xc8\
-\xf0\xcf\xd9\xc9\xbf\x67\x54\xff\xa3\xc0\xc7\x67\x54\x02\xfc\x4d\
-\x00\x5f\x0a\xfe\x4c\x4b\x57\x2f\x17\x02\xc8\xb9\x49\xff\x3c\x11\
-\x65\xb0\x00\x7e\xff\xea\x55\x3f\xf7\xd5\x3f\x87\xea\x8f\x40\x27\
-\xb0\x08\x53\x51\x01\x93\x7f\xae\x15\x75\x60\x85\x34\x9c\x24\x0a\
-\x29\x90\xf5\x84\x20\xaf\xda\x1b\xe0\xab\x08\xe0\xde\xfe\xff\xd9\
-\xc9\xbf\x33\x0a\xe0\x39\xbe\xff\x98\x12\xe0\x6f\x02\xf8\x12\xc9\
-\x1f\xc1\x5f\xab\x7f\x91\xfe\xd9\xa5\xff\xdc\x2c\x81\x93\xc4\x3b\
-\x78\x7d\xf4\xfc\x5b\x2a\xa0\x5a\x04\x20\x03\x0b\xe4\x40\x36\x78\
-\xb6\x46\x22\x06\xea\x60\x2a\xaf\x2f\xe5\x3d\xf2\x27\x11\xc0\x99\
-\x0e\xc0\xad\xb9\xff\x47\x16\xfc\x3c\xcf\xf7\xef\x7d\xaf\x7f\x0b\
-\x12\x98\xfe\x24\xf0\x67\x00\x7f\x9d\xeb\x49\x44\xf9\xa3\x90\x40\
-\xa9\xfe\xfa\x2f\x51\x96\x46\x0e\xfa\x2f\x51\xf6\xf7\x81\x05\xa0\
-\xbc\xae\xfa\x23\x15\xe0\x56\xe1\x7d\x43\x05\xbc\x07\x15\x10\xef\
-\xbf\x5b\x6f\x11\xf0\xe1\x44\x30\xfd\x69\x04\x70\xcf\xf0\xcf\x99\
-\xde\xff\xd9\xca\x7f\xbf\xef\xdf\xfb\xfe\xfe\xf2\x24\x30\xfd\x49\
-\xe0\x1f\x4e\xfb\x6a\x91\xfc\x1f\x0b\xc8\xf5\xa3\xcf\x03\xf4\x5f\
-\xa2\x19\xee\xeb\xbf\x44\x1f\xc1\x02\x60\xf5\x1f\x3d\xbf\x87\x0e\
-\x40\x0e\x2a\x20\xaa\x01\x94\xff\xe4\xea\xa1\x00\xdd\x06\x24\x60\
-\xf0\x71\x27\x84\x74\xab\x1b\xf0\xd9\x04\xf0\xcc\xe5\xbf\xb7\x02\
-\xc0\x7b\xab\xff\xb1\x71\xdf\xe3\xf2\x7f\x8f\x00\xec\xf7\x20\x81\
-\xdf\x9e\x00\x30\xec\xcb\x23\x02\xc8\x65\xe8\xc7\x73\x80\xb9\xef\
-\x06\xcc\x73\x6f\x01\x74\x5e\x07\x82\x73\xde\x56\x01\x1e\xf2\xa1\
-\xfc\xc7\xfb\x15\xd0\xda\xcb\xfe\x28\xff\xab\x2d\xf0\xcf\xb3\xfd\
-\x07\x51\x6f\x19\xf8\x77\x21\x80\xb3\x6b\xff\x99\x1e\x5b\xf0\x73\
-\x64\xb1\x4f\xba\xd3\xf7\xef\x7d\x5f\xed\xf7\x50\x02\xbf\xf5\x8e\
-\x40\xd1\xef\x23\xf0\xeb\x23\x43\x0b\xb0\xa4\xfd\xb9\x8c\x01\x7b\
-\xfa\x5f\x3f\xfe\x6f\x7b\x3d\x67\x98\x0c\x3c\xf3\x6c\xe3\xd7\x18\
-\xf6\x6d\xde\xb7\xf6\xac\xda\xbf\x46\x3b\xf0\x46\xbd\x1a\xc0\xd7\
-\x44\x25\x37\xf8\x0c\x02\x38\x4b\x02\x7b\x3b\x00\x3f\xb2\xe3\xef\
-\xb9\xdd\x7e\xc6\xaf\xd3\x81\x7b\xe9\xc4\xf5\xe8\xf5\x2f\x48\x02\
-\xd3\xef\x0e\xfe\x39\x80\xde\xaf\xeb\xfd\x41\x0b\x30\x43\x37\xa0\
-\xe6\x01\x98\x13\x14\x4b\xd0\x49\x7f\x08\x08\xf1\x19\x3d\xff\x07\
-\xac\x29\x18\x85\x80\xae\x02\xf0\x39\x86\x80\xdd\x43\xf7\xab\xff\
-\xe8\x35\x51\xc9\x0b\xe0\xf9\x97\x20\x80\xad\xb5\xff\x47\x83\x3f\
-\xbb\x23\xfd\x7f\xb5\xef\xbf\x45\xb2\xf6\xeb\x67\x02\xbf\x25\x01\
-\xe4\x0d\xd9\xef\xd7\xdd\xfd\xa9\x2c\xfc\x71\xbf\x8f\xa0\x7f\x2f\
-\x21\xe1\x7b\x0b\x0b\x2b\x19\xe4\x71\x10\xc8\x1b\xcf\x06\xcf\x1f\
-\xa5\xaa\x63\xd8\x37\xc1\x7d\x7c\x9e\xb4\x85\x80\x23\xc0\x3b\x31\
-\xa8\xdf\x23\xc8\x0b\xdc\x36\x50\xff\xf1\xf8\xfc\x46\x60\x13\x5e\
-\x4d\x00\x47\xfb\xff\x47\xdb\x7f\x8f\x6e\xf6\xf9\x4a\xdf\x7f\x9f\
-\xca\xfa\xa5\x48\x60\xfa\xdd\xc1\x3f\x94\xfd\x78\x7f\x5e\x2a\xfb\
-\xfc\x11\xc0\x8e\x8a\x60\x34\x1d\x58\x54\xc0\x47\x6c\x03\xe6\x3e\
-\xf8\xc3\x84\x3f\xaa\x00\x1d\xa8\x00\x8d\x99\x00\x84\x82\xef\x4e\
-\x1c\x45\xf6\xfb\xf3\x07\x74\x01\x6e\x29\x02\xbf\xc6\x67\xbf\xbe\
-\x94\x6b\x79\x35\x01\xdc\xea\xff\x9f\xdd\xf8\x63\xab\xf7\xbf\xa5\
-\x00\x3e\xd3\xf7\xdb\xc9\xef\xe3\x2f\x46\x02\xd3\xef\x0e\xfe\xa1\
-\xec\x0f\x0a\xc0\x65\x7d\x7e\x87\xb0\xcf\x43\xc0\xdc\x4f\x05\xa2\
-\x25\xc8\x89\x48\xaf\xcb\x60\x10\x82\x7e\xa4\x06\x72\x08\x00\x3f\
-\x06\x04\x81\xd5\x1f\x81\x9f\x6f\x59\x81\xf2\xf8\x08\xc4\x50\x95\
-\x01\xad\xd5\x00\x3e\xa3\x1a\x20\x6a\x44\x90\x3e\x8b\x00\xce\x4e\
-\xfe\x3d\x63\xbb\xaf\x23\x9b\x7c\xdc\xea\xf7\x3f\x8b\x00\x68\xf0\
-\x3d\xfb\x45\x48\x60\xfa\x93\xc0\x3f\xb4\x03\x73\xeb\xf9\xe7\xdc\
-\xab\x80\xb9\x3c\x23\xd8\x3b\xf0\x7f\x34\x55\x80\x60\x47\x35\x80\
-\x52\xfe\xea\x20\xdf\xc8\x02\x10\xe0\x48\x08\x93\x13\xc6\x06\x09\
-\xa0\xdc\xd7\x40\x08\x17\x2a\xcf\x00\xfa\x5b\x04\x80\x44\x30\xdd\
-\x43\x00\x8f\x90\xc0\xa3\x73\xff\x5b\x0a\x20\xed\xd8\x80\x47\x7c\
-\x7f\x7a\x52\xa0\x3a\x26\x83\x2f\x5f\x3b\x30\xfd\xce\xe0\x8f\x9e\
-\x7f\x68\x07\xca\x0c\x80\xce\x00\xea\x38\x14\xe4\x73\x00\x85\x1c\
-\x3a\x4b\x50\x88\xe1\xaa\x44\x29\xaf\x7b\xff\x9d\xe4\x2f\xcf\x5e\
-\xd9\x1d\xe4\xef\xda\x40\x9e\x42\xd5\xef\xc0\x0e\x84\xe0\x9f\x83\
-\xd5\x7e\x95\x0f\xa0\xd7\x37\xa2\x0f\x82\xf7\x62\x16\xb0\x41\x00\
-\x76\xeb\x17\xe1\xd9\x04\x70\x64\xed\xff\xd9\xed\xbe\x64\x50\xf5\
-\x3f\xd3\xf7\x3f\x4e\x08\x5f\x4a\x02\xbf\x3c\x01\xe8\x09\xf0\x0f\
-\xed\xc0\xdc\x72\x00\x1f\x06\xca\xef\x83\x3c\x20\x95\x9c\x20\xf7\
-\xd3\x83\x68\x09\xb6\x2c\x00\x0d\x86\x83\x5c\x0d\x60\x16\x90\xa1\
-\xfa\x4f\x83\x67\x24\x83\xd8\x25\xf8\x08\xb2\x5f\xc1\xf3\xc7\xaa\
-\xff\x5e\x94\x01\x66\x00\x6a\xfb\x8b\x07\xa3\x3d\x78\x3a\x01\x3c\
-\x73\xf2\xef\xde\x91\xdf\xcf\xf4\xfd\xb4\xd1\x21\xd9\x52\x02\x5f\
-\xb4\x94\x78\xfa\xd5\xc1\x9f\xef\x04\x7f\x86\x36\xa0\x77\x02\xe6\
-\x14\x36\x05\xf1\xe7\xb2\x24\xd8\x2b\x7e\xfe\x00\x6b\x20\xe5\x75\
-\x6e\xa0\xf7\x20\xb0\xab\xf0\x41\x05\xa0\xd4\x9f\x40\x05\x20\x11\
-\xac\x6c\x01\xcc\x04\xe8\xa0\x0b\xa0\x51\x11\x0c\xda\x81\xd8\x0d\
-\xb8\x65\x01\x22\x01\x70\x20\x02\x7e\xd6\x26\x20\x47\x27\xff\xee\
-\xa9\xfe\x67\x5b\x7f\xcf\xf0\xfd\x8f\x4b\xff\xf6\xc8\xf0\x2f\x7c\
-\x01\x09\x4c\xbf\x1b\xf8\x75\x03\xfc\x9b\x76\xc0\x65\xfd\x04\x6d\
-\xbe\x77\xb0\x03\x19\xd6\x01\xa0\x25\xb8\x06\xf0\x97\xf7\xc4\x0a\
-\x4f\x41\x05\xa4\x81\x1a\x20\x58\x2a\xdc\x75\x0d\xac\x9f\x14\x74\
-\x20\x57\xcb\x60\x6b\x65\xe0\x64\x80\x72\x1f\x15\xc0\x04\x1d\x80\
-\xfa\x9e\x68\x07\x76\x14\x80\x02\x11\x30\x07\x22\xb8\x67\x0f\x80\
-\x7b\x4f\xfd\xb9\xb5\xd9\xe7\x2b\x97\xf9\x1e\xf1\xfd\x76\x38\xf1\
-\x7f\x8e\x52\xf8\x9b\x08\xc0\x68\x7b\x93\xde\xd3\x8a\x20\x41\xe5\
-\x8f\x3d\xff\x04\x44\x00\x15\xbf\x7b\x6f\x0e\xaa\xa0\xe4\x01\x52\
-\x82\x89\xa8\x02\xde\x07\x01\x60\xcc\x02\x08\x06\x81\x10\xec\xa9\
-\xdc\x5f\x59\x01\x6b\x64\xa1\x20\xef\x47\x8a\x00\x89\xc0\x28\xe4\
-\x04\x07\x2c\x00\x12\x81\x70\x99\x23\x28\xbf\x94\x7c\x8b\x00\xf0\
-\xfe\xde\xde\xff\x67\x02\xc0\x47\x16\xfc\xbc\xd2\xf7\x9f\xad\xf4\
-\xb7\x1e\xf9\x6b\x3a\x03\xd3\xaf\x08\x7e\x5f\xd8\x33\xea\xed\x9f\
-\xb6\x03\x21\xfd\x77\xa0\xcf\x98\xf2\x8f\x88\x61\x03\xfc\xbe\x76\
-\x60\x94\xfa\x8f\xd4\xc0\xbb\x82\xac\xd7\x1e\xf4\xef\x41\x05\x28\
-\xcc\x00\x38\xd8\x31\x00\x7c\x87\x79\x00\x0d\x99\x80\xfb\xfe\x51\
-\x2b\x10\x95\x80\x83\xfb\x16\x01\x38\xf0\xdf\x01\xf0\x6f\x5c\x2e\
-\x8f\xf8\xfe\x23\x6b\xff\xf7\x02\xc0\x67\x2d\xf8\x79\xc5\x9c\xff\
-\x2b\xfe\xf0\xd7\x74\x06\xa6\xdf\x19\xfc\x87\xec\x40\xa8\xf2\x4e\
-\x02\xf9\xbd\x75\x06\x1c\xe0\xb8\x62\x30\x6f\x81\x1f\x54\xc0\xa4\
-\x6d\x46\xc0\x00\xec\xef\x21\x00\x44\xa5\x50\x7d\x3e\x7e\x0c\xbc\
-\x7f\x86\x3c\x40\xa0\x2b\xa0\x03\x22\x30\x5c\x2a\x0c\x79\xc0\x65\
-\x47\x09\x9c\x21\x00\x04\xba\x03\xdf\x2d\x01\x3f\xa3\xfd\x37\x7a\
-\x3e\xb3\xd9\xe7\x67\xfb\xfe\x67\xca\xfe\xed\x2c\xe0\x53\x43\xc1\
-\x5f\x8a\x00\xdc\xf7\x2b\x1d\x3b\xbd\xeb\x90\x22\xf0\x0e\x40\x01\
-\x3d\xda\x01\x1c\xff\xcd\xb1\xf7\xef\x39\x40\x22\xca\xd7\xfe\x1e\
-\xe6\x01\xc9\x83\xc1\x41\x36\x80\x0a\x01\xdb\x7f\x3a\x20\x02\xbf\
-\x27\x20\xff\x13\xd8\x81\xf7\x1d\x22\x40\xb0\x3b\xd0\xd3\x40\x09\
-\x3c\x42\x00\x44\x44\xc6\xcd\x1a\x74\x6a\xe0\x91\x0e\xc0\xb3\xb6\
-\xfb\x7a\xc4\xf7\x6f\x11\xc0\xa3\xa0\xbe\x2d\xf9\xc7\x9f\x9b\x3f\
-\x2f\x14\x9c\x7e\x35\xf0\x1f\x95\xfd\x87\xed\x00\x80\x7a\x8e\x52\
-\x7f\xee\x07\x82\xea\xa4\xa0\x83\x9f\xcb\x7b\x66\x58\x23\x00\xc1\
-\x60\x06\xa0\x7b\x26\xa0\xb0\x39\x48\x94\xfe\x1f\xe1\x5e\x04\xbd\
-\x6f\x37\x5e\xdb\x82\xfe\xbe\x8d\xa1\xa0\xa8\x00\xb0\x03\x30\x05\
-\x02\x48\x37\x08\x40\x41\xb9\x5f\x68\x91\xfe\x06\xc0\xbf\x10\xd1\
-\x07\xb7\x70\x70\xa5\x06\xce\x1e\xfc\xf1\x8c\xed\xbe\x9e\xb9\xbd\
-\x57\x7a\x49\x8f\xff\xbc\x02\xd8\xca\x55\xfe\x64\x02\xd0\xb0\x93\
-\xcf\xad\x0a\x7f\xca\x0e\x38\xc8\x5d\xfe\x0b\xb4\xf7\xa2\xec\x4f\
-\x40\x04\x52\xc6\x84\x13\x80\xdf\x2d\x81\x94\x7b\xd7\xd6\x12\x4c\
-\x50\xf1\xa3\x0a\x90\x40\x08\x1f\xda\xe4\x7d\x0a\xd7\x98\x01\xbc\
-\x87\x2e\x80\x82\x32\x98\x00\xfc\xd7\x02\xf0\x04\x04\xe0\x99\x40\
-\x02\x75\xf0\x51\xc0\xbd\x45\x00\xfe\x6c\x83\xd6\x9f\x03\xdf\x15\
-\x00\xf1\x42\x0c\xec\xd9\xc0\x23\xdb\x7e\x3d\xb2\xe0\xe7\xec\xb8\
-\xef\x59\xdf\xff\x2c\xd9\xbf\x2f\xf9\xb7\x88\xe0\xe5\x79\xc0\x97\
-\x13\x00\x26\xfe\x5b\x0b\x7a\xee\xb6\x03\x56\x16\x02\xfd\x13\xb2\
-\x00\x59\x3c\xfe\x2c\x83\x00\xf0\xda\xe7\x02\x7a\x5d\xe7\x01\xd5\
-\x12\xf0\xa2\x04\xba\xd0\xaf\x8c\x07\x47\x15\x90\x82\x0a\x98\xc0\
-\x0e\x18\xa8\x00\xcf\x00\xde\xb5\x01\x5a\xa1\x43\x50\xdb\x80\x6e\
-\x11\xb0\xc2\xdb\xba\xed\x97\x06\x63\xc1\x4a\xeb\xeb\x11\x29\x8c\
-\x08\xa0\x86\x83\xdc\x5b\x83\x1f\x23\x12\x38\x33\xfc\x73\xa6\xfa\
-\x9f\x59\xec\x73\xd6\xf7\xbf\x4a\xf6\xdf\x96\xfc\x5b\xf7\x5e\x6a\
-\x05\xa6\x5f\xa1\xfa\xcf\x3b\xa0\x7e\xc8\x0e\x70\xe9\x02\x60\xf5\
-\xf7\x2c\x40\x60\x93\x50\x20\x86\x39\xae\x09\xb8\x2e\x15\x5f\x3f\
-\xca\xe7\xc4\x3c\x20\xc3\x9a\x80\x81\xff\xf7\xc1\x1f\x97\xfc\x29\
-\xac\x05\x18\x49\x7f\xec\x0a\x44\xd0\x8b\xf6\xd5\x1f\x17\x02\xd5\
-\x99\x00\xbf\x17\x42\x40\x82\xef\xed\x88\x0c\x56\xf7\x8a\xcc\x7f\
-\x2f\x95\xdf\x15\x80\x71\x53\x01\x6f\xbc\x28\x0b\xe2\x96\x0d\xec\
-\xee\xfd\x7f\x76\xf2\xef\xde\xc5\x3e\x67\x7c\x3f\x7d\x82\xec\xe7\
-\x53\xa0\xef\xef\xbd\xd0\x0a\x7c\x29\x01\xe0\x3e\x7e\x11\xf4\xf3\
-\x41\x42\x88\xe0\xd7\x68\x07\x64\x00\xf2\xa2\x00\x54\xfa\xd9\x80\
-\xd9\xe7\x00\x04\xaa\xbe\x77\x00\xdc\x06\xcc\x4d\xfe\x6b\x2a\x39\
-\x41\xee\xc1\xff\x51\x32\x01\x85\x96\x9f\x5b\x01\x57\x01\x32\xb0\
-\x03\xa8\x02\x26\x6b\xa4\x90\x82\xfc\xf7\x7b\x46\x4d\x09\x54\x05\
-\x40\xfd\x3a\x81\x3a\x16\x0c\xa4\x10\xd7\xd2\xc4\xfe\xbf\x42\xcf\
-\x1f\x2b\x3f\xc3\x2f\x22\x17\x0b\x40\xdc\x3e\xfe\x83\x89\x3e\x84\
-\xe8\xed\x91\x8d\x3f\xf6\x96\xfb\x1e\x39\xd1\xf7\xa8\xef\xbf\xa7\
-\xe5\x77\x14\x88\xb7\x14\xc0\x19\xd0\x2f\x44\xfa\x32\x2b\x30\x7d\
-\x65\xe5\x1f\x81\x3b\xee\xe9\x17\x41\x7e\xcb\x0e\xac\x48\x21\x01\
-\xc8\xa5\xac\x0e\x4c\x1b\x59\x80\xb4\xa5\xc2\xf5\xe3\x19\x26\x02\
-\x65\x1d\x06\x3a\x91\xe8\x75\x09\x32\x9c\x08\xd2\xa0\x0b\x80\xc3\
-\x40\xdd\x7d\x50\x01\xd8\x1e\xc4\x0c\x60\xd4\x05\xb0\xd1\x2a\x41\
-\x20\x05\xb4\x02\x7a\x82\x00\xd0\xef\x63\xe5\x77\xe9\xef\xd7\x1f\
-\x40\x00\xfe\x2c\xda\x94\xc1\xc3\x93\x7f\x23\x42\xb8\x67\x99\xef\
-\x3d\x04\x60\x77\x80\x7c\x4b\xee\xd3\x1d\xd5\x3f\xaf\xae\x5f\x62\
-\x05\xbe\x84\x00\x46\xbe\x5f\x77\xee\x6d\x29\x80\x43\x76\xc0\xe5\
-\xba\x57\x78\x1c\x08\x8a\x59\x40\x50\x00\xb3\x5f\xbf\x37\x1b\x90\
-\xe7\x42\x24\x45\x0d\xd4\xae\xc0\xdc\x24\xbe\x03\x5f\x74\xad\x0c\
-\x52\x98\x19\x40\x15\xa0\xe0\xfd\x51\xfe\x0b\x5c\xbf\x87\x8a\x1f\
-\xaf\x1d\xe8\x29\x58\x81\x5b\x04\x80\x5d\x00\x0f\xfa\x34\x28\x00\
-\x97\xfe\xde\x22\x74\x15\xe0\xc4\x80\xd7\x14\xed\xc0\xd1\xea\xff\
-\xc8\xc8\xef\x19\xdf\x7f\x44\x01\x3c\x02\xb7\x67\x48\xfe\xfc\x7a\
-\x2b\x30\x7d\x55\xf5\xcf\x3b\xd5\x7b\x2b\xdc\x1b\x55\xfe\x9b\x76\
-\x00\xfa\xff\xd5\x0e\x48\xb0\x03\x73\xab\xee\x5e\xd1\x67\x00\x7e\
-\x7d\x3f\x43\x08\x28\x7d\x57\xc0\x55\x00\x86\x80\x4e\x08\x18\x08\
-\xfa\xfd\xc9\x7a\x3b\xd0\x49\x7b\xb0\x04\x23\x12\x50\xdb\xbe\x76\
-\xbf\x7f\x0f\x01\x44\x0b\xb0\x22\x03\x1e\xe7\x00\x48\x06\xa8\x08\
-\x48\x4a\x66\xf1\x48\xf5\x3f\x33\xf2\x7b\xd6\xf7\xdb\x09\x30\x7f\
-\xae\xe4\xdf\xba\x7e\xba\x15\x98\xbe\x02\xfc\x7a\xa0\xea\xdf\xba\
-\x97\x77\x48\xa1\x7b\x7f\x68\x01\x66\x0f\xff\x4a\x9b\xaf\xcb\x07\
-\x66\x18\x0a\xca\xcd\xeb\xd7\xbc\xc0\xdf\x53\xd2\xff\x2e\x0f\xc8\
-\x44\x33\x74\x05\xba\xe5\xc0\x3b\xd7\x11\xfc\x95\x2c\x82\xdf\x8f\
-\x79\xc0\x96\x12\xf8\xa0\xf6\x9e\x2b\xf4\xff\xeb\x7d\x6a\xed\xc0\
-\x48\x00\x53\xe9\xff\x2b\x11\x5d\xb8\xbf\x76\xd0\x7b\xe8\x37\xaa\
-\xfc\x1f\x18\x0c\x16\x80\xff\xe0\xe5\x7b\x94\xce\xcc\xfd\x1f\x79\
-\x7c\x96\xef\x3f\x22\xfb\x5f\x23\xf9\x3f\xc5\x0a\x7c\x2a\x01\x18\
-\x84\x73\xa3\x4a\x7e\x2b\x0b\xd0\x03\x19\xc1\x4a\x11\xcc\x0d\xf8\
-\x75\x2a\x50\xc2\x7d\xa8\xf4\xf3\xfb\x5a\x0d\x54\x52\x10\x90\xfc\
-\xd2\x88\x20\xc3\xb5\xe6\x36\x18\x14\x55\xc0\xea\xda\x9a\x4d\x10\
-\x98\x08\x4c\x61\x32\x50\xc3\xf2\x60\xb5\xfe\x31\xaa\xfe\x53\xb0\
-\x02\x75\x50\x28\x54\xff\x58\xf9\x2b\x96\xb8\xbf\xe6\x28\xfd\x83\
-\x0d\xa8\xf6\xa0\x80\xfc\x4d\x9b\x15\xf8\x51\x24\x7f\x3a\x33\xf7\
-\x7f\x76\xb1\xcf\x67\x2c\xf0\xf9\x2a\xc9\xbf\xa5\x08\x7e\x37\x02\
-\xd8\x1a\xf5\xcd\x37\x02\x3d\xdd\x18\xf4\x39\x12\x04\x6a\x6a\xbb\
-\xff\xfa\xfa\xff\x59\x06\xad\xc1\xd2\xe6\xeb\xc2\x41\x6c\xff\x81\
-\x02\xd0\x51\x40\x98\x81\x14\x66\xa8\xee\x3b\x95\x1f\x89\xa0\x86\
-\x82\x81\x04\x90\x0c\x52\x39\x2b\xf0\x7d\x43\x09\x28\x61\x2b\xd0\
-\xc8\xcc\x28\x99\x16\x60\x1b\x25\x33\x00\xb9\x0d\x08\x80\x5b\x10\
-\x58\x74\xfc\x72\x2d\xc4\xcc\xa4\xc4\xad\xf2\x6f\xa9\x00\x08\xfd\
-\x84\x89\xb8\xbc\xfe\x59\x9e\xd3\x91\xad\xbe\x9f\xe1\xfb\x8f\x0e\
-\xfa\x1c\x01\xf4\x59\x15\xf0\x3c\xc9\xbf\x45\x06\x4f\xb3\x02\xd3\
-\x67\x82\x5f\x77\x80\x3b\x02\xfa\x28\x0b\x38\xd2\x16\xec\x48\x65\
-\x6e\xd5\xbc\x7a\x7e\x19\xd8\x01\x78\x8f\x07\x7f\xa8\x10\x7c\xf0\
-\x07\xf3\x80\x6a\x11\xa4\x1f\x11\x56\x59\x72\x82\x54\x36\x0f\x11\
-\xe8\x06\x08\x10\x83\x5a\x08\x05\x8b\xff\x97\x8d\x0c\x20\x87\x35\
-\x02\x4d\x05\x28\x19\x19\x7d\x98\x52\x2a\xa0\x77\xc0\xe7\x4a\x00\
-\x04\x64\xd0\x7f\x1f\x69\x70\x6d\x2c\xdd\xf5\xa5\x12\x80\x90\x31\
-\x93\xb0\x90\x95\xd7\x9e\x05\xb0\x94\x75\x11\x50\xf9\xdf\xb5\x28\
-\x08\x59\x08\xe1\xa7\x10\xc9\x59\xff\xbf\x37\xf2\xbb\x27\xff\x9f\
-\xb9\x9f\xdf\x9e\xdc\xbf\x07\xf4\xf7\x56\xfe\xd8\x4e\xfd\x1d\x08\
-\xe0\xd6\xfa\xfe\x3d\xf0\xef\x65\x01\x5b\x59\x42\x5c\x0b\x90\x2d\
-\xc8\xfe\x19\x2a\x7f\xb0\x03\x4e\x08\xd5\x0e\xcc\xbd\xc4\xcf\xd2\
-\x57\xfd\x4c\xa5\xe2\x7b\x36\xc0\x6d\x1b\x32\x4c\xfd\xaf\x41\x11\
-\x5c\x07\x2a\xa0\xae\x25\xb0\x75\x36\x20\xba\x54\xff\xa5\xc2\x1b\
-\x89\x69\x01\xbc\x92\x99\x92\x9a\x95\xe7\xe5\xda\xab\xfc\x44\x44\
-\xb9\xfc\xd6\x33\x59\x07\xf2\x4c\xe3\x95\xbd\x4a\x44\xd9\x98\x26\
-\x22\x9a\xeb\xf2\x74\x2e\xc3\x41\x0b\xe8\xdf\x0a\x11\x50\xb9\xfe\
-\xe0\x85\x05\x8d\xb9\x75\x02\xa4\xa9\x02\xd6\x85\x10\x72\x01\xba\
-\x9c\xf5\xff\xf2\x24\xdf\xff\x95\x92\x7f\x8f\x04\x8e\x55\x7e\x7c\
-\x7e\x8a\x0a\x98\x3e\xab\xfa\x1f\x91\xf7\xb7\x54\xc1\xad\x50\x70\
-\x48\x32\x02\x0b\x7c\xd0\x0e\x7c\x04\x45\xf0\xde\x03\xb8\xda\x81\
-\xe0\xff\x31\x23\x50\x86\x9c\x80\x61\x86\x80\xdb\x98\xf0\x55\x89\
-\x38\xf7\x6d\x41\x81\x47\x4d\xf8\x43\x2e\xc0\x41\x05\x88\x19\xa9\
-\xe6\xa5\x8a\x97\x47\xea\x00\x6f\x34\x2d\x35\xb9\xec\xfb\x6f\xa4\
-\x55\xe6\x1b\xa5\xfa\x3d\xb1\x55\xdb\x2f\x2a\x00\x2e\xa0\x97\xf2\
-\x2a\xd7\x7b\x4c\xd9\x88\xc4\x98\xae\xe5\x35\x12\xc2\x3b\x4b\x51\
-\x08\x42\x49\x12\x91\x2e\x96\xe1\xa7\x34\x42\x60\x21\xfa\xa1\x45\
-\x2d\xdc\x53\xfd\x1f\xf5\xfd\x7b\x84\x70\xef\x6a\xbe\x7b\x7d\xfe\
-\x2d\xb0\x8f\x81\xdf\x5b\x81\x07\x03\xc1\xe9\xb3\xaa\xbf\x1e\x04\
-\x7c\xbe\x71\x3f\x66\x01\x37\x2d\x41\x6e\xad\xbe\x1c\xe4\xff\x3c\
-\x37\x29\xbf\xb2\x03\xef\x40\x00\x05\xdc\x19\x2d\x80\x57\xfc\x62\
-\x03\xe6\xdc\x07\x83\xa8\x0e\x04\x2a\xfe\xc8\x0e\x88\xf6\x7e\x5f\
-\x3a\x15\x90\x49\x35\x17\xc0\x2f\xd7\x1f\xd6\xc0\xce\x05\xe8\xa9\
-\x3c\x0b\x11\x7d\x14\x32\x10\x00\xbc\x74\x9e\xdf\x76\x08\x80\xe1\
-\xfb\xc9\xe5\x73\xb9\x74\x09\x16\x1b\x90\xcb\xbd\x89\x98\xb2\x71\
-\x25\x84\x0b\x31\xbd\x33\x13\x49\xa2\x37\x4d\xf4\xce\x42\x24\x89\
-\x58\x53\xb5\x03\x0e\xfc\x37\x25\x9a\xee\xad\xfe\xaf\xf2\xfd\xf7\
-\x2a\x80\x67\x4b\xfe\x7c\x98\x00\x4e\x9c\xf2\xf2\x45\x04\x70\x2b\
-\xf8\x3b\x72\xef\x16\x19\xec\xb5\x05\x3b\xf0\xc3\xf3\xcc\x90\xf4\
-\xa7\x36\xd6\xdb\xd9\x01\x68\x0d\x7a\x8b\x0f\x81\xef\x36\x60\xa6\
-\x52\xf1\xfd\xe4\x61\x06\xcb\x90\x21\xfd\xcf\x6b\x15\x90\xac\xb7\
-\x03\x8b\x2a\x30\x12\xcd\x24\x05\xf0\x66\x99\xa4\x1c\x2f\xc4\x25\
-\xbe\xb3\x0a\x78\x2b\x62\x9f\xea\x3d\x82\xca\xcf\x5d\xc5\xb7\x30\
-\xf8\x83\xaf\xb9\xb6\x02\x35\xbc\xce\xa5\xda\x4b\x47\x02\x8b\x4a\
-\xb8\x94\x6b\x29\xcf\x17\x13\xba\xe6\x85\xa2\xdf\x44\x48\x35\xd1\
-\x87\x2c\xdf\xe0\x9f\x92\x28\x2b\xd3\x7b\x01\xbd\x94\x50\xf3\xf0\
-\x82\x9f\x7b\x7d\xff\xbd\xfd\xfd\x67\x4b\x7e\x3d\x58\xe5\x8f\x00\
-\x1f\xad\xc0\x03\x2a\x60\x7a\x35\xf8\xf5\x0e\xf0\xdf\xba\x3e\xd2\
-\x32\xc4\x05\x41\x9a\x4a\x58\x96\xfa\x0d\x41\x35\x41\xe0\xc7\x03\
-\x3b\x00\x59\x40\x95\xfc\x0e\x7c\x2e\xa4\x10\x6c\x80\x4b\xff\xd9\
-\xd5\x01\xc3\x91\x63\x83\xaa\xdf\xbf\x56\x12\xcb\x0b\xf8\x75\x26\
-\x2b\x32\xdf\xab\xfd\xb5\x00\x3f\x91\xd5\xff\xae\xe5\xb5\x54\xc9\
-\x6f\xe5\x60\xda\x66\x01\xa6\xf2\x2c\x64\xcb\xf6\x60\x1b\x16\xa0\
-\x2f\x4c\x5c\xae\xb9\xbc\x8f\xc3\xbd\x06\x7a\xbf\x5e\x9e\xb5\x90\
-\x82\xd0\xac\x4a\x42\xcb\x37\x67\x51\x03\x53\x55\x04\xef\x22\xc4\
-\xb2\xd8\x03\x96\x4f\xf0\xfd\x76\x47\x7f\xff\xd9\x92\xff\x99\x95\
-\x5f\x9f\xd3\x16\x7c\x35\x01\xd0\x23\xd5\xff\xd6\xbc\xc0\x11\x05\
-\x90\xb5\x6d\xec\xd1\x81\x9c\x7b\x5b\x30\x43\xd8\x57\xed\x00\x83\
-\x52\x78\x07\x3b\x00\x96\xa0\x56\x7b\xa8\xfe\x33\x0e\x0a\x15\x12\
-\xba\x66\x58\x0c\x94\x03\xf0\xcd\x48\x74\xae\xc0\x17\xcd\xc5\xd3\
-\x6b\x81\xb9\xd2\xdc\x01\x5f\x2b\xd8\xa7\x7a\x67\x0d\x7e\x01\x55\
-\xc0\x41\xfe\x8f\x08\x80\xc1\x06\x70\xd7\x1a\xf4\x4c\x60\xa9\xfe\
-\x13\x10\x42\xb5\x02\x95\x10\x84\x84\x98\x2e\xa4\x94\xfd\xb5\x29\
-\x89\x09\x7d\x68\x26\x96\x44\x24\x13\xfd\xb4\x44\x6a\x13\xbd\x2b\
-\x2f\x2d\xc2\x7b\xb7\xf7\xfa\x2c\xd9\xff\x2c\xc9\xff\xbc\xca\xdf\
-\x9e\x97\x86\x0c\xff\x52\x04\xf0\x68\xf5\x3f\x3a\x2f\xb0\x37\x3e\
-\x8c\x21\xa0\x6f\xf0\xd1\x01\x9f\x83\x1d\x78\x07\x55\xc0\x3d\x29\
-\xe0\x5a\x81\xae\xf2\xe3\x20\x90\x13\xc3\xdc\xdb\x00\x7f\xbc\x43\
-\x18\xd8\x14\xc1\x0c\x8f\x06\xfc\x54\xc0\x4f\xa4\x74\xad\x40\xd7\
-\x4a\x01\x0b\x21\x68\xb5\x01\xd7\x52\xe9\xd1\x1a\x7c\x40\xf5\x47\
-\xb9\xcf\x83\x0c\x20\xd7\xd7\xdc\xcd\x05\xe4\x2a\xfb\x9b\x15\xe0\
-\xe2\xf7\x3d\x0b\x58\x5e\x2f\x57\x5a\x80\x2f\x24\xe5\x3d\x4a\x42\
-\x52\x94\x81\x10\xa9\x55\x22\x60\xc9\xf4\x53\x26\xca\x36\x2d\xfb\
-\x16\xdc\xb3\xbd\xd7\x16\x01\x3c\x2a\xfb\x5f\x25\xf9\xf3\x13\x08\
-\x20\x4e\x52\x3e\xa0\x02\x5e\x49\x00\x4f\x7b\xe4\x03\xa1\xe1\x66\
-\xcb\x10\x7c\xbf\x96\xca\x5e\x49\x21\xb5\x73\x03\x55\x82\x1d\xe0\
-\x41\x77\xc0\x49\x01\x7d\xbe\x93\x88\x83\x9e\x5a\x30\x58\x15\x81\
-\x7f\x3d\x19\x07\x81\x96\x6a\xaf\xf9\x4a\xc9\x94\x66\x53\x9a\x48\
-\x6b\xd5\x5f\x80\xef\x92\x5f\x41\xf2\x6b\x0d\xfd\x24\xd8\x00\x85\
-\x7b\x11\xfc\x42\x54\xde\xd7\x87\xc8\x98\xfc\xfb\xf7\x70\x0a\x16\
-\xc0\x03\xc0\x0c\x2a\x20\x43\xe5\x77\xe9\xdf\xd4\x80\xd4\xd7\x52\
-\x3e\x63\xb9\x67\x94\x91\x08\x4c\x89\x74\x26\x4e\x17\xfa\x69\x13\
-\xb1\xa5\x6d\x0b\xb0\x25\xff\xf7\x08\xe0\x11\xd9\xff\x6c\xc9\x7f\
-\x04\xe4\x67\x01\xff\x04\x15\x30\xbd\xaa\xfa\x23\x08\x2d\x00\xfa\
-\x48\x67\xe0\x68\x0b\xf0\x66\x3e\x50\xfc\x7f\x4e\x60\x07\x64\x1d\
-\xf8\x65\x90\xf7\x73\x78\x5d\xed\x80\xf4\x01\xa0\x13\xc0\x1c\x43\
-\x3f\x6e\xd2\x3f\xc3\x3d\x65\xa2\x8f\x59\xbb\xaa\x6f\x01\xf8\x8b\
-\xdc\xd7\xd2\xc3\xd7\xae\xea\x5f\x49\x6b\x95\xf7\xfb\xd7\x40\x06\
-\x2e\xf7\x09\xae\xa5\x02\xdd\x86\xbf\x67\x34\xbc\xc7\x9d\x0a\xe0\
-\x0a\xee\x3e\x03\xc0\x50\x50\x8a\x0a\xb8\x90\x12\x93\x94\x7b\x4a\
-\x33\x09\xbd\x91\xad\x88\x40\x4c\x88\x4c\x28\x9b\xd2\x7b\x51\x03\
-\x24\xd3\x32\x2e\x78\xd4\xf7\xff\xea\x29\xff\x19\x7f\x2f\x27\x00\
-\xcf\xcf\x51\x01\x4f\x27\x00\x7b\x41\xf5\xcf\x27\x15\x42\xf7\x7e\
-\xee\x4f\x08\xee\x82\x40\xf4\xf4\x73\x68\x01\x32\xa8\x02\x86\x96\
-\x21\xa8\x81\x9c\xa1\xf2\xcb\x3a\x0f\xc8\x40\x04\x4b\x07\x61\x26\
-\xcd\x33\x5d\x8b\xdc\x77\xe0\x53\x01\xfa\x5c\xe8\x31\xd5\x7b\xcd\
-\xff\x5b\x05\xbf\xae\x02\xc0\x06\x7c\xb7\x03\x4e\x0a\x6d\xe4\x97\
-\x61\x18\x28\xfe\x5e\x52\xf8\x1d\xcd\xc5\xe7\x47\x15\xa0\x2b\xbf\
-\xcf\x95\x18\xb8\xca\xfd\xa6\x00\xdc\x16\x64\x07\x7c\x01\x3f\x97\
-\xdf\xdc\xe5\xbe\x51\x36\xa3\x94\x8d\xd4\x94\xc4\x94\xc8\x26\xa2\
-\xc4\x00\x7c\x5f\x7c\x20\xfb\x1b\x7a\x6e\x91\xc1\x23\xab\xf9\x5e\
-\x29\xf9\x1f\x79\x1e\x91\xc3\x1d\x2a\xe0\x15\x04\x60\x79\x40\x04\
-\x8f\x84\x81\x7b\xa4\x90\x6f\x8d\x0f\x6b\x9f\x03\x78\x18\x98\xe7\
-\x81\xfc\x87\x6b\x1f\xe8\xc9\x50\xe1\xf3\x1c\xec\x00\xaa\x01\x82\
-\xfb\xab\xb6\xa0\x51\xa6\x2b\x29\xcf\xa4\x3c\x93\xa9\x96\xca\xd8\
-\xc0\x6f\x55\x05\x2c\x8f\x2b\x80\x3d\x01\x19\x38\xf0\x8d\xb4\xeb\
-\x06\x78\x2e\xd0\xba\x04\xad\x0d\xc8\x30\x0c\x84\x8a\x00\x0b\x86\
-\x42\x06\x10\x55\x40\xf3\xfe\xa8\x04\x78\xd5\x0d\xb8\x94\xaa\xcf\
-\xe0\xfb\x97\x2c\xc0\x01\xbf\xbc\x76\x15\x90\x6a\x9b\x72\x21\x82\
-\x59\x8d\xde\x4c\x89\xec\x03\x80\x3f\x51\xdd\x94\xd0\xef\x11\x97\
-\x63\x97\x2e\xb4\x3a\xc1\xb4\x9e\x88\xca\xc7\x65\x7f\x7e\xa0\xfa\
-\x3f\x22\xf9\xef\x01\x3c\x02\x7f\xeb\xde\x57\x12\x80\xee\xc8\xfd\
-\x33\x5e\xff\x56\xf0\xb7\xd7\x31\xe8\xde\x23\xb0\x75\x97\xb4\x6d\
-\xc0\x22\x19\x44\x90\xaf\xee\x47\x3b\x30\x50\x03\x3a\x87\xfb\x44\
-\xa4\xac\xa4\xf9\x4a\x39\x5f\x49\x7d\x24\xd0\x94\xe6\x39\x57\xc0\
-\xfb\x77\xea\xba\x22\x83\x06\xfa\xb9\xf6\xfe\x23\xf0\x7b\x2b\xc0\
-\x55\xe6\x8f\xc0\x6f\x9d\xff\x5f\x13\x00\x6f\xaa\x00\x85\x21\x20\
-\x5e\xf9\x7f\xa9\x39\xc0\x54\x29\x41\x21\x0b\x68\xcf\x08\xf8\x5c\
-\xec\x81\x90\x50\x2a\x86\x7f\xb6\x2b\xa5\xac\x4b\x1e\x40\x1c\xc8\
-\xc0\x91\x78\x29\xd7\x33\x54\x7d\x0e\xbf\xd6\xf8\xfa\xf2\x5a\xc9\
-\xff\xca\xca\x3f\xae\xf4\x7b\xf7\x4e\xcd\x05\x4c\x4f\x06\xff\x66\
-\xf5\xb7\x40\x08\x99\x9e\x1b\x0e\xee\x6e\x16\x32\x43\x55\x97\x30\
-\xc5\x17\x82\x40\x04\x7b\x05\xb3\x80\x4a\x20\xb0\x03\xfe\xef\x70\
-\xb0\x12\x35\x24\x5c\x2a\x7e\xa6\x0f\x32\x81\x73\xc3\xca\x67\xce\
-\xdd\xb0\x6e\x1f\x00\x62\x16\xd0\xaa\xbd\x76\x6d\x40\xee\xda\x7f\
-\x36\xf8\x8f\xa0\x7d\x48\xf5\x5e\xdc\xb2\x8f\x86\x85\xac\x75\x00\
-\x62\xff\x5f\x6b\x3b\xb0\x4d\x09\xe4\x3a\x0b\xd0\xc0\x3e\xc1\x6f\
-\xa6\x57\xfd\x99\xac\x7e\x9c\x0a\x21\xf8\x23\xc3\x57\x28\x7a\x5d\
-\xec\x00\x02\xdf\x1c\xc8\x57\x00\xbd\x57\x7d\x06\xb0\xcf\xe5\x43\
-\x7e\xcc\xe9\xdc\x93\x01\x33\x11\xa7\xe7\x49\xfe\x67\x56\x7e\xb9\
-\x1b\xf8\xfd\xe7\x7e\x11\x01\x74\xe0\xb7\x1d\x80\x3e\xd3\x22\xcc\
-\x3b\xe0\x57\x6b\xe0\x9f\xb9\x27\x83\x4e\x05\x20\xd8\x61\x55\xa0\
-\x57\xfc\x91\x1d\xa8\x84\x41\xd0\x1a\xac\x39\x40\xa9\xfa\x79\x26\
-\x4b\x79\xb0\x03\xa2\x2e\xfe\x04\xfe\x4f\x7a\x42\x70\xe9\xdf\x2b\
-\x01\xaa\x99\xc0\xd8\x06\xf4\x7d\x7f\x57\x05\x14\x94\xc1\xf8\x3c\
-\xcf\xf6\x7b\xcc\x2b\x12\xe0\x10\x00\xc6\xff\x2e\x65\x79\x1a\x56\
-\x7e\xee\x14\x80\x15\xda\x68\xc0\xf7\x0c\x60\x2e\xd9\x45\xa2\xb9\
-\x52\x5a\xa2\x65\x91\x53\xca\x06\x36\xe0\x0a\xa0\x8f\xa5\xdb\x1a\
-\xf8\x3b\x0b\x70\x21\x62\x27\x84\x72\x9d\x51\x15\x5c\xca\xc7\xd2\
-\x73\x24\xff\xbd\x04\xb0\x9f\xf0\xdf\x96\xfd\xfd\xf5\x61\x15\x30\
-\x3d\xb3\xfa\x8f\xc0\x3f\xaa\xfe\x23\x8b\x60\x74\x5f\x20\x78\x93\
-\x24\x38\x00\x5a\x42\xa5\x1f\x90\xc1\x8c\x56\x80\xe0\x3e\xf5\x44\
-\xe1\x9d\x80\xb9\x53\x03\xcd\xef\x67\x2e\x6b\x82\x67\xf8\x8a\xa6\
-\x5c\x2b\x3c\x91\xd2\x3c\xf7\x0a\x00\x33\x81\x26\xfd\x7b\x12\xc0\
-\xb6\xa0\x85\xd1\x60\x97\xfb\x06\xad\xc1\x35\xf0\x6d\xf3\x54\xef\
-\x56\xed\xdb\x75\x1f\xf6\xf5\xf3\x00\x6e\x00\x72\x49\x0f\xb0\xf2\
-\x73\xed\x06\x58\xed\x06\x48\x01\x7b\x86\x31\xe6\x85\x0c\xae\xf0\
-\xff\x26\x95\x04\xc9\x94\x24\x5f\x97\xaf\xb3\xab\xfa\x14\xfe\x0f\
-\x1c\xfc\x51\xfa\xcf\xe3\x6b\xce\x44\x6c\x40\x08\x53\x51\x06\x97\
-\xe5\x7e\x4e\xf7\x8d\xf1\x1e\x95\xfe\x47\x2a\xfd\x3e\xc8\xd7\xf7\
-\xec\x0b\x15\x80\x01\xf0\xf6\x54\xc0\xad\xea\x6f\xf4\xe4\x79\x01\
-\x58\xde\x8b\x16\x00\x4f\x00\x8a\xd5\x5f\x03\x59\x78\x27\x01\x5f\
-\x77\x3b\x0e\x55\xdf\xbf\xfc\x22\x67\xfe\x58\xfc\xfe\x04\x7a\xc4\
-\xca\x68\xd4\x9c\xc1\xf7\xeb\xd0\x0a\x58\x97\x05\xf4\xdf\x4d\xeb\
-\xc0\xdf\xfc\xbf\x57\xfb\xd8\x15\xe0\xd0\x09\x18\x91\x00\x41\xe5\
-\x47\x0b\xc0\x21\x03\x88\xa9\x3f\xd7\x8a\xcf\x60\x00\xfa\xca\xcf\
-\x64\xb5\x2d\xc8\x61\xc4\x0f\xf3\x00\xeb\xec\xcf\xdc\x54\x40\x51\
-\x39\x4b\x2e\x60\x03\x02\x08\xe0\x47\xe9\xcf\xb9\xbd\xe6\xb9\x3c\
-\x53\xaf\x02\x38\x13\xf1\x54\xee\x5d\x16\x7b\xc1\x6f\xed\x35\xd3\
-\x32\xab\xfc\x68\xe5\x97\x93\x95\x9e\x4f\x90\x80\x6d\xdc\xe7\x4f\
-\x22\x80\x23\xb2\xdf\xee\x0c\x08\xef\x99\x21\xe8\x5e\x43\x95\xaf\
-\x93\x79\x02\x6d\xba\x60\x09\xe6\xe8\xe7\x31\xed\xd7\x02\xfc\x91\
-\x1d\x40\xf0\xcb\x5c\x8e\x0c\x76\xe0\x37\x0b\x60\xfe\x15\xa2\x25\
-\x98\x97\xaf\xdc\x06\xff\xc7\xd8\x06\x34\xd2\xd2\xef\xef\x49\x40\
-\x56\xf2\xdf\x17\x0d\xad\x3b\x01\xeb\x10\xdc\xea\xa8\x2f\x6f\xac\
-\x05\xc8\xb0\x27\xc0\xe8\xbf\x69\x73\xef\xef\xd6\xfe\x73\x99\x2f\
-\x45\x0d\x64\x12\x9a\x29\x95\xaf\xfd\xda\x65\x1c\xa9\x12\xa2\x75\
-\x64\x29\xea\xaa\x61\x24\xfb\x23\x9d\x5d\x88\xf2\xbf\x40\x10\xd7\
-\x60\x09\x0a\xf8\xf3\xd4\x83\x9e\xcb\xe7\x55\xbb\x70\x69\xf6\x41\
-\xf9\x73\x7a\xf9\x47\x80\x7f\xeb\xda\x8e\xb5\x04\xa7\x67\xc9\xff\
-\xbc\x43\x04\xb6\x23\xf9\x5f\x11\x10\x8e\x2c\x40\xac\xee\xab\x70\
-\x0f\x80\xae\xb9\x6f\xe9\x45\x2b\xb0\xda\x7d\x98\x8d\x72\xfe\xa0\
-\xcc\xd7\x35\xf8\x4b\xf5\xb7\x01\x19\xe0\x3e\x49\xf3\xdc\x83\xde\
-\xba\x00\xb0\x5d\xd3\x40\x01\x44\xf0\x47\x22\xd0\xae\x03\xb0\x9d\
-\x01\xac\x95\x40\x83\x7d\xae\x39\xc0\x88\x02\x74\xa0\x00\xac\x8d\
-\xff\x42\xef\x1f\xd7\xff\x62\xf0\x87\x41\x27\x85\xff\x57\xfc\xbe\
-\x90\x2a\x28\xdc\x08\x7e\x1e\xc8\xfd\xd2\x2d\xa8\xf2\xbe\xac\xd3\
-\xae\xf7\xa6\xc2\x78\xae\x16\x8a\x35\x50\x57\x06\x99\x48\x91\x0c\
-\x8a\x45\x70\x32\x78\x75\x4b\xef\x18\xd8\xb7\xd5\xc0\xab\x09\x20\
-\x6e\x32\x69\x3b\x76\xe0\x5e\x65\xf0\xd0\x72\x62\x5b\x03\x7e\x9e\
-\x43\xaf\x1f\x67\x02\xb8\x55\xf9\x4a\x1e\xb0\xb2\x4f\x39\xe6\x09\
-\x46\x99\xaf\x8b\xef\xd7\xb9\xc9\x7d\x6a\x80\xb7\x91\x41\x89\x8a\
-\xa0\x6b\x09\xea\x40\xf6\x6b\x90\xc9\xad\x1f\xc0\xc3\x10\xb0\xf7\
-\xff\xda\x4d\x01\xf6\xf2\x3f\x75\x24\xd0\xf7\xd5\xb1\xf6\x13\x4c\
-\x03\x8c\x8e\xfe\xe1\x55\x09\x8c\xe0\xef\x2d\xc0\x4c\x73\x57\xf9\
-\x69\xe7\xb9\xfb\xfe\xa8\x92\x50\x02\xd9\x8f\x0f\x07\x31\x43\xf0\
-\x17\x41\x3f\xaa\xfe\xe5\xb5\x5b\x82\xaa\x02\x2e\x40\x06\x73\xbb\
-\x56\x82\xe7\x97\xb5\xf4\xce\x81\x7d\xfd\xbe\x9b\x61\xe0\x33\x08\
-\xc0\xb6\xbc\xbf\xdd\xb8\xd6\x8d\xd0\xf0\x59\x33\x04\x75\x20\x07\
-\x25\xbe\x83\x1f\x86\x7a\x3a\x5f\x1f\x5b\x86\x4e\x10\x04\x13\x81\
-\xb5\xfa\x17\xd9\x4f\x45\xf6\x7b\xda\xaf\x00\xfe\x58\xf9\xad\x0d\
-\x4a\x47\x62\xc8\xf3\x38\x07\x48\x2b\xff\xdf\xac\x40\x1a\x58\x81\
-\xf6\xdc\x3e\x2b\xc1\xbf\x88\xd7\x97\x0e\xca\xbc\xba\xce\xb0\x1a\
-\x10\x2d\x40\xee\x16\x01\x2b\x4c\x03\x58\xf9\x88\x55\x35\xe0\xfe\
-\x5f\xe0\x91\x81\xb0\xda\xc2\xa7\xa8\x00\x6c\x60\x8b\x3e\x96\xd7\
-\x9a\x8b\x1d\x88\x91\x7d\x0c\x03\xcf\x54\xff\x4b\xa9\xf2\x33\x00\
-\x7f\x1e\xdf\xd3\xcb\x92\x0d\x28\xc1\xf3\x83\x12\x7f\x0b\xe0\xc7\
-\xc0\x3e\x3e\x54\xf5\xd5\x0a\x60\x04\xea\x5b\xdd\x00\x3d\x78\xfd\
-\x34\x8b\x90\x77\x02\xbe\x1c\x16\x0b\x49\x5b\xc0\x93\xa9\x27\x88\
-\xce\x0e\x10\x05\xf0\x17\x70\xa7\x5c\x09\xc0\xac\xec\x06\x12\x48\
-\xa0\xcf\x01\x7a\x4b\x90\x87\x56\x60\x79\xbc\x05\x12\x88\x1d\x00\
-\xde\x7c\xa6\xd5\x73\x5c\x15\xc8\x9d\x61\x64\x50\x00\x63\x0b\x40\
-\x15\xf8\x6d\xf0\x07\x9f\x2f\x83\xaa\x6f\xab\xea\xaf\x40\x02\x8d\
-\xd0\xb6\x09\xe0\xa3\xff\xed\x56\x1d\x90\x40\x91\xfe\x2c\x37\xaa\
-\x7f\xc8\x02\xd4\x03\x41\xb8\x76\xe9\x8f\xd7\x55\x01\x38\x11\xbc\
-\x11\xf1\xb5\x3c\xf3\xb9\x5e\xfe\xe3\x3e\xff\xf6\x6b\xdb\x0f\x03\
-\xa7\x67\xc8\x7f\x1d\xc8\xff\x5b\xa4\x70\xcb\x22\xd8\x13\x2d\x42\
-\x8e\xad\xc0\x1c\x36\xf9\x9c\xd7\x83\x3e\xdd\xac\x00\xc1\x71\xe0\
-\x65\x1a\x50\xb9\x8c\xf6\x4a\x6e\xdb\xfd\x38\xd0\x7f\x44\xcf\x8f\
-\x8a\x20\x74\x05\x3a\x3b\xb0\x04\x82\x36\xb0\x03\x3e\x18\x94\x06\
-\x83\x41\x8b\xd7\xde\x9a\x07\xe8\x17\x02\x51\x47\x00\xed\x77\x93\
-\x06\xc2\xdf\x7b\xff\x04\xe0\xf7\xeb\x74\xe3\xd8\xdf\x0c\x43\x3e\
-\x58\xf9\x97\x60\x70\x86\xc0\xcf\x56\xd5\x7f\x0d\x7c\x0b\xe0\x07\
-\xb2\x51\x2d\x27\x11\x71\xf3\xec\xcc\xdb\xa0\xaf\xf7\x0a\x31\x70\
-\x2e\x95\x3f\x03\x19\x14\x45\x90\xe7\x70\xef\x42\xa4\xff\x15\x02\
-\x40\x42\x28\xca\x40\x68\xd9\x7b\xfe\x9e\x96\xde\x23\xd2\x7f\x0b\
-\xf8\x07\xd6\x07\x4c\x0f\x56\x7f\xbb\x25\xf1\xb7\x6c\x81\x1e\x54\
-\x0d\x47\xee\xdd\xb4\x0a\xa1\xe2\x63\xa5\xc7\xe7\x7a\x14\x78\x68\
-\xf5\x75\x8b\x7d\x96\xc8\x6e\xf1\xfd\x7c\x6d\x15\x5f\x9b\xbc\x37\
-\xcd\xcb\xce\x97\x0e\x7e\x0d\x76\x60\x40\x00\x96\xcb\x57\x9b\x32\
-\xe5\x1c\xc1\xdf\x16\x08\xc9\xc0\x0e\x18\xb4\xd2\x5c\xfe\x5f\xc0\
-\x45\xd3\x40\x05\x8c\x08\x80\x83\xeb\x47\xd1\x9f\x89\x00\xf4\xcb\
-\xb4\x7f\xee\x02\xc0\xd6\xfe\x9b\xca\x57\x31\xda\xf1\x73\x26\x01\
-\xdb\x32\x77\xca\xc0\xe0\x27\x6a\x3b\xe0\x8f\x08\x49\xd9\x77\x31\
-\xb8\x40\x26\xe0\xa0\x2f\xaa\x80\xa5\xb5\x05\xf3\xa5\x01\x5f\x73\
-\xbb\x8f\x60\xe6\x01\xc0\x6b\xc5\x2f\xf7\xe5\x52\xd6\x76\xff\x57\
-\x7e\x07\x2e\x4d\x0d\x48\xba\xbf\xfa\x1f\x01\xfb\x48\xee\xdb\xc6\
-\xfb\xe9\x85\x0a\x40\x77\xc2\xbf\x23\x44\x60\x07\x66\x08\xec\x60\
-\xf5\x1f\x12\x81\x41\xf5\xcf\x7d\x26\xd0\x55\x7f\x68\x0f\x2a\x0f\
-\xb2\x80\x1a\x0c\xea\x52\xf9\xf3\xdc\x1f\xf3\x53\x14\x40\x27\xfb\
-\xdf\x7c\x43\xc0\x90\x05\x10\xd8\x82\x5c\x42\x42\x3f\x41\xb4\x7c\
-\xdc\x49\x40\x3a\x3b\xb0\xb4\xd5\x1c\xe8\x69\xd8\x16\xb4\xda\x49\
-\x97\x4a\x04\x51\x05\x10\x90\x42\x5f\xf9\xe3\x2b\xec\x19\xf4\x36\
-\x60\xf9\xcd\x9e\x42\x89\xb3\x32\xf8\xc3\x75\x21\x50\x6f\x03\x72\
-\x69\x6a\xa6\x6e\x58\x39\x5a\x04\x0c\xff\xae\x1b\xbf\x09\x42\xb8\
-\x7b\x61\x52\x85\xea\x8f\xa0\x47\xc9\x0f\x49\xbf\xc6\xe0\x0f\xc8\
-\x40\x61\x3e\x00\xef\xf9\x71\x4f\x72\x69\xbb\xbc\x54\x52\xf8\x17\
-\x48\xa1\x2c\x0c\x91\xb7\xe5\x97\xe9\x79\xa1\xde\xd1\xaa\xbf\x7e\
-\xcd\x4f\x26\x00\x9f\xfc\x1b\x81\xf9\xd6\xeb\x23\xa1\xa1\x3e\x60\
-\x11\xba\xf7\xf8\x9e\x80\xff\x41\x75\x0f\xa9\x7f\x4c\xfe\x33\x6f\
-\x64\x01\xd9\x48\x79\xf1\xfd\x96\x72\x93\x86\x45\x01\x98\x57\x75\
-\xbf\x97\x94\xe8\x47\x1e\xdb\x81\x54\xec\x80\x5b\x08\x82\x0c\x81\
-\x16\x45\x60\xa4\x94\x43\x02\x6e\x65\xb0\x86\x60\x52\x30\xd5\xaa\
-\xaf\x1d\x09\x50\x25\x02\x2a\xfb\x0a\xc6\xea\xdf\x6f\x08\x12\x2d\
-\x40\x82\xd5\x80\x14\xe4\xbf\x95\xdf\xaa\x1c\x14\xc0\x54\xe9\x46\
-\xea\xbf\xcf\x65\x47\xa3\x96\xfa\xb7\x8d\x4c\xa9\xcc\x01\xc4\x8c\
-\xc0\x36\xc0\x5f\x8e\x27\xf1\x4d\xc9\x89\x29\x2f\xdf\x23\x13\x4a\
-\xf9\xbf\x85\xf5\x59\x97\x00\x00\x20\x00\x49\x44\x41\x54\x02\xfa\
-\x69\xe0\xfd\x5d\xf2\x3b\xf0\x73\x53\x0a\xca\x40\x0a\xff\x2d\x20\
-\xe7\xa9\x00\xfe\x52\xb6\x70\xfa\xaf\x91\x46\xcd\x01\xde\x88\xe4\
-\x7d\x4d\x0a\x72\x29\x56\x20\x2f\xbb\x9e\xea\xd4\x8e\x55\x7e\x34\
-\xd4\x3b\x5a\xf5\x6d\x35\x13\x20\xa3\x05\xd3\xd3\x23\xd5\x3f\xd3\
-\xf8\xac\x39\x1b\x84\x7f\x7b\x56\x40\x4f\x86\x83\x47\x2d\xc2\x2a\
-\x04\x44\x0b\xc0\x83\x7b\xb9\x6f\xf7\x55\x82\xa8\xed\xc1\xa5\xdd\
-\x67\x5e\xf9\xb9\x29\x00\xf3\x1f\xbe\xc1\xf1\xc0\x6e\x07\xde\x36\
-\xb2\x80\xe4\xe0\x77\x52\x28\x03\x41\x79\xb9\x76\x15\xe0\x9d\x00\
-\x57\x03\x19\x6c\x81\x74\x2b\x06\x0d\xfa\xef\xbd\x05\x98\x21\x03\
-\xa0\xb0\x0a\x90\x56\xf3\x00\xcb\x6f\x4b\x0e\xfd\x75\x07\x7e\x86\
-\x85\xc3\x4c\xd2\x8d\xef\xe6\x92\xfa\x4f\x01\xd0\xb9\xab\xf8\xd4\
-\xa9\x80\xd4\x59\x01\xff\x69\x5e\x77\xca\xc2\x5a\x01\x30\x09\xb1\
-\x29\x49\x2e\xbd\x8d\x4a\x04\x5a\x00\xae\x85\xf5\x74\x1d\xfc\x55\
-\x59\x5f\x80\x5f\x7d\xbe\x13\xc2\xc0\xff\x8b\x13\x3f\x90\x42\x05\
-\xbe\x10\xc9\xdc\x6c\x81\x14\x19\xaa\xd3\xe3\xa1\xde\x91\xaa\x3f\
-\xba\x47\xe5\x9c\x97\x36\x41\xf5\x38\x01\xd8\x4e\xf5\xb6\x03\xd9\
-\xc0\x99\xec\x20\x1f\x54\x07\x43\x8b\x10\x80\xde\x55\xff\xdc\xcf\
-\x09\x64\x6a\x1f\x9b\x09\xf3\x80\x65\x65\x9f\x7a\x65\xcf\x3d\x01\
-\xd4\x87\x2b\x80\x54\xc0\x9f\x82\x1d\x90\xdc\x16\x07\x19\x7c\x3c\
-\xc1\x5c\x40\x82\xae\x40\xee\x81\x4f\xd5\x02\x34\x05\x20\x83\x20\
-\x70\x06\xf9\x8f\xd0\x9b\x68\xbd\x3d\x78\x8c\x00\xb1\xab\xcf\x50\
-\xf5\x33\x8c\xfe\x26\xd8\x59\x20\x17\x05\x80\xde\xdf\x67\xfd\x9d\
-\x08\x72\x5d\xc2\x94\x83\x0a\xf0\xd5\x7a\x48\x18\x57\x18\x17\xf6\
-\x8a\x8f\xcf\xa8\x3a\xfc\xfb\x52\x76\x25\x50\x21\xe6\x77\xa8\xf6\
-\xc1\xf3\x67\xf4\xfc\x08\xf8\x0b\x3c\x3b\x31\xe8\x86\x0d\x70\xe0\
-\x17\x65\xd0\x01\x3f\x03\xf0\x95\x48\xff\x05\x3b\x60\xcd\x12\xdc\
-\x5b\xe5\x6f\x01\x7d\xeb\x9e\xd1\x75\x64\x03\xa6\x47\xc0\x7f\x14\
-\xd4\xb7\x82\xc0\x7b\x42\xc3\x53\xc3\x44\xb2\xa1\x02\xf6\xaa\x3d\
-\xa3\x3d\x50\xd2\xbc\x10\x40\x6b\xf7\xe9\xb2\xd5\xaf\x03\x1d\x83\
-\x40\x55\xb2\x7a\x1a\x68\x6e\x07\x02\xbc\x81\x1d\x48\x45\x11\x48\
-\xb1\x03\xd4\xd6\x0a\x90\xc0\xff\x49\xce\x01\xf8\x56\xad\x81\xd5\
-\x21\x20\xad\xa0\xe3\xb0\x71\xe8\x14\xf6\xd5\x6a\x47\x82\x5b\x5d\
-\x06\xbc\x06\x7f\x8b\x04\x7d\x94\xc7\xd5\x80\x03\xdf\xc9\x20\x41\
-\x06\x90\x61\xf3\x52\x2a\xb4\xb4\xdc\xf7\x8a\x4f\x21\xf8\x6b\xaf\
-\x69\x00\xfe\x71\x59\xe9\xcb\x67\x23\x83\x2b\xe5\xb2\x6b\xe1\xa4\
-\xa5\xda\x67\x2d\x32\x7f\x43\x05\xe8\x7b\x01\x76\xb4\x00\xb9\x1f\
-\x00\xaa\x52\xdf\x81\x9d\x02\xf0\xd1\xfb\x5f\x96\x73\xcf\xf4\xbf\
-\x76\xdf\x6c\x21\x02\xb9\x2c\x4b\x9a\xbd\x53\xf0\xa8\xb7\x3f\x47\
-\x08\xc3\x6e\xc0\x74\xaf\xff\xd7\x0d\x22\xb0\x9d\x40\xf0\xc8\x7b\
-\x6e\xad\x01\xb0\x13\x2a\xa0\xce\x10\x64\x22\x4b\xfd\xd6\xdd\xca\
-\xeb\xe0\x0f\x1f\x5d\x38\xe8\x3b\xf9\x24\x38\xe1\x23\xe5\x06\xf4\
-\xba\xc7\x77\x09\x02\x13\x64\x03\xd2\x88\xc0\x2c\xd8\x01\x27\x85\
-\x77\x50\x01\x09\x4c\x8c\x65\xb2\xd4\x07\x82\x19\x02\xc1\x0b\xd8\
-\x01\x81\x6e\x80\x42\xf5\xcf\x30\x1e\x8c\x2a\xc0\x49\x41\xc3\x04\
-\xa0\xc2\x75\x82\x4e\x7f\x54\x01\x52\xed\x80\x16\x1b\x60\x55\x0d\
-\xa4\xa0\x04\xac\x9e\x4e\xe8\xc9\x3f\x1e\x65\x32\x03\x41\x5d\x77\
-\x7e\xab\x14\x14\x81\xc2\xa6\x23\xb8\xf2\xb0\xec\x42\x68\x4a\xa2\
-\xe5\x40\x42\xbd\x2c\xcf\x5d\xd8\xa7\x00\xfc\x51\xc5\xf7\xad\x9b\
-\x2f\x44\xf2\x51\xd4\xdd\xa5\x3f\xf3\x9d\xa7\x81\xec\x87\x41\x30\
-\xb9\x94\xeb\xff\xfa\x8e\x81\xea\x42\x26\x76\x29\xbf\x60\x0f\x79\
-\xfb\x23\x95\xbf\xdf\x5f\xf1\x59\x0a\x40\x6f\xf0\xf4\x11\x0e\xbf\
-\xf5\x9e\x33\x9d\x84\xdd\xdc\x40\x1a\xe0\x4d\xd6\xf3\xfe\x1a\xef\
-\xa1\x32\xe0\xdc\xfa\xfd\xa5\x4d\x47\xc5\xa3\x9b\x0e\x6c\x00\x9e\
-\xff\x0d\x0a\xc0\x90\x24\x2e\xa1\x3b\xf0\x56\x0e\x0b\x30\x5d\x3e\
-\x86\x63\xc2\xb9\xb7\x02\x06\x16\xc0\x5b\x7f\x5c\x16\x0c\x49\xd9\
-\x48\x54\xba\xea\x6f\x00\xfa\x76\x6a\x10\x6d\x58\x80\x1c\xaa\x7f\
-\xbb\x46\x15\xd0\x2b\x00\xef\x4e\x4c\xf5\xba\x49\xff\x99\x32\x25\
-\x98\xfb\x4b\x55\x0f\x50\x95\xfe\x04\x36\x00\x57\x0a\xf2\xc0\x02\
-\x64\x40\x04\x92\x41\x06\x02\xc8\xa4\xc4\xca\xcb\x7c\x80\x6a\x0b\
-\x01\x5d\x05\x68\xcc\x00\x22\xf0\x27\x20\x09\x04\x3e\x04\x82\xb5\
-\x9a\x3b\xa0\xfd\xf3\x12\xa8\x05\x24\x02\x57\x00\xb9\x7c\x5e\x5e\
-\x94\x82\xd9\x72\x7c\xb2\x3e\x20\xf9\x8f\xde\x7f\x06\x01\xec\x55\
-\x73\x3b\x40\x02\xcf\xb0\x09\x47\x42\xc3\xee\x3d\xb2\x1e\x04\xb2\
-\x04\xdb\x74\x73\x08\x05\x61\x5c\xb8\x6b\xf9\x15\xe0\x57\x1b\xe0\
-\x39\x40\x6e\x80\x37\x04\x7f\xb9\xb6\x7a\x2e\x98\x3f\xbc\xf2\xfb\
-\x69\x21\x19\xba\x01\x4b\xd5\xaf\x2d\x41\xbf\xce\x0a\x2d\xc0\xde\
-\x02\xf4\xd7\xcd\x06\x64\x58\x15\x88\x76\x00\x55\x00\x12\x80\x8b\
-\x6a\x02\x78\x51\x73\xd7\x65\xac\x7c\x01\x58\x0b\x04\xdb\x1a\xfe\
-\x39\x0c\xf6\xe4\x1a\xf8\xe5\xba\x47\x01\x0d\x08\xa0\x57\x01\xfb\
-\x09\xd1\x1a\xf4\x4d\x0d\x2c\x6a\xe5\x5a\xf7\x22\x4e\xb5\x5a\x23\
-\xe0\xfd\x5e\x21\x07\x79\x2b\x80\x7e\x3b\x06\x7c\xcd\xe5\xbd\xba\
-\x58\x08\x24\x8c\x0a\xfc\x37\x38\xca\x39\x5a\x01\x24\x10\x2d\x64\
-\xc0\x8f\x78\xfb\x73\xf7\xf9\x71\x02\xd8\x1c\xfe\xb1\x8d\x69\xc0\
-\x23\x80\x7e\x24\x34\xbc\x39\x66\x5c\xa4\xbe\x61\x3b\x10\x8e\xf4\
-\x52\x06\x22\x50\xec\x12\xcc\x2d\xf5\x67\x00\x75\x02\x8f\x7f\x6d\
-\xf7\x4d\x43\x6b\xd0\xad\xc0\x25\x2f\x9f\x5f\x4f\x01\x2d\x95\xff\
-\x02\x76\xe0\x02\xdd\x01\x81\x90\x50\xda\x02\x18\xb7\x02\x48\x04\
-\x0a\x16\x20\xd7\xad\xb7\xad\x74\x7e\x9a\x12\x10\x10\xe2\x44\xfd\
-\x29\xc1\xad\xfa\x73\x25\x82\x0c\x95\x5f\x8b\xfc\x57\x38\xe8\x23\
-\x97\x79\xff\x26\xfb\x31\x6e\xf4\x83\x4b\x72\x25\x80\x06\x7a\xbf\
-\xce\x84\xdb\x75\xf1\x4a\x09\x28\xa8\x00\xae\x2a\x20\x57\x35\xc0\
-\x95\xfc\x18\x76\x22\xaa\x36\x80\x32\xb1\x09\x49\xfe\xaf\xf7\xfe\
-\x22\xd0\xb6\x7b\x1f\xe4\x01\x17\x38\xb9\xe5\x02\xa0\x0e\x9f\x13\
-\xfd\xbf\x2b\x00\x31\x22\xfb\xaf\x28\xbf\x19\x80\xfe\x0e\xaf\x2f\
-\xd0\x2e\xc6\x7b\x7c\xce\xdb\x1f\x91\xfd\x16\xa6\xb1\x43\x0e\x30\
-\x3d\x1a\x00\x1e\x55\x02\x7a\x40\x0d\xe8\x09\xb2\xb8\xb5\xe8\x68\
-\x65\x01\x1c\xfc\xdc\x14\x81\x49\x08\x00\xe1\x61\xd9\x16\xdf\xef\
-\xd5\x9c\xdb\x73\x95\xfe\x5e\xf9\x49\x5b\x65\xb7\xfe\xc0\x3f\x7b\
-\xf3\xa3\x81\x4b\x95\x7f\xcb\x64\xb3\xd6\x8e\x40\xb5\x03\x96\xc9\
-\x2e\xd1\x06\x34\x0b\x60\x45\x29\x64\xc5\xae\x80\xd5\x9d\x84\xbc\
-\x12\xa3\x02\x70\xf0\x67\x30\x81\x02\x13\x05\x91\x00\xb4\x5b\xf9\
-\xd7\x57\xfe\x46\x08\xae\x00\xda\xb3\x85\xe0\xcf\x6a\xf0\x17\x97\
-\xf8\xe6\x4a\x35\xd6\xed\xd5\xd7\xc0\xdf\xef\x11\xe8\x3f\x45\x01\
-\x42\xd0\xd5\xec\x81\xd2\x0c\xd7\x5a\x4f\x28\x62\xe2\x65\x5f\x41\
-\xb5\x02\xd8\x8f\x20\xfb\x0b\xa0\x6b\xaf\x5e\x07\x7e\xdf\xdb\x78\
-\xff\xad\xbd\x7d\xb5\x01\x39\x64\x00\xae\x08\xac\x00\x1f\xc2\x41\
-\x83\x7b\x15\xf8\xa5\xac\x6a\x7a\xbc\xc2\xdf\x7a\x3c\xd3\x02\xdc\
-\x22\x80\x57\xd9\x84\x5b\x6a\x61\x95\x23\x68\x03\xb9\xab\x80\x95\
-\x1d\x88\x01\xa1\xcc\x8b\xb3\x76\x49\xef\xf2\x9f\xad\xec\x0c\x02\
-\x8a\x80\xf3\xf2\x3e\xed\xfd\xbf\x71\xd9\xec\x03\x09\x01\x73\x00\
-\x6e\x80\xaf\xdd\x01\xc9\x7d\xe5\xf7\x0e\x81\x14\x42\x50\xad\xd2\
-\x37\x83\x05\xe0\xba\x51\xa8\x56\xe9\x4f\x75\xa1\x10\x75\x87\x87\
-\x0a\xe1\x99\x80\xd6\xa5\xff\xd2\x4f\xda\x57\x35\xe0\xbb\xfa\xb5\
-\xf3\x87\x34\x1c\x47\x22\xd0\x7d\xc8\xdd\xd1\x66\xfd\x73\x6e\xab\
-\xf4\xea\x6f\xd4\x3c\x6c\x2e\xf7\x39\x80\xd4\xff\xdf\xb6\x0b\x51\
-\xb4\x02\xbc\x22\x00\x35\x21\xa9\x95\x9e\x83\xdf\x2f\xc0\xdf\xac\
-\xfe\x0a\x60\x7d\x5b\x76\x28\xae\x3f\x63\x97\xf4\xef\x7e\xa4\xf3\
-\x3a\x13\xe8\x54\xc1\xe8\x9e\x8f\x8f\xff\x57\xee\x5d\x96\xfd\x0f\
-\x4d\x1e\x03\xf9\xab\x08\xe0\xe8\xbf\xa1\x07\xdf\xa3\x07\x55\xc3\
-\x5e\x56\xa0\x07\xda\x86\xb9\xc8\x7f\x07\xbf\xa5\xb1\x0a\x68\xd7\
-\xba\x84\x7f\xee\xcb\x1d\xf4\x65\x42\xaf\xe6\x01\x05\x98\x15\xa0\
-\x15\xb4\x45\x25\x50\x38\xfe\x77\xf4\x98\x4a\x1b\xd1\x37\x11\x99\
-\x80\x14\xae\xda\x5e\x4f\xa5\x45\x38\x29\xe9\xbc\x48\x7f\xaa\x16\
-\xa0\x6f\x07\xfa\xeb\x54\xaa\x7f\x02\x35\x30\x97\xa9\xc0\x18\x02\
-\xe6\x6a\x11\xb9\xd4\xdc\x66\x01\x08\x8e\xfe\xf2\x0d\x3f\xf1\x39\
-\xd5\x2c\xc0\x28\x57\xa3\x91\x6b\xe4\x98\xba\xaa\xaf\x1d\xe0\x17\
-\x6d\x61\xc3\x47\xee\xac\x00\x77\x64\xd7\xaa\xbd\x74\x47\x92\x68\
-\x3d\xa2\x04\x9e\x35\x13\xab\xad\x13\x7e\xf4\xf0\x0e\xe2\xee\x7a\
-\xd4\x09\x10\xa8\xea\x1b\x69\xbf\x57\xf5\xe8\xf5\xcd\x20\xfc\xfb\
-\x0f\xac\x00\x12\x82\x11\xd9\x5c\x88\x80\x5e\xf3\xe0\xfb\x09\xc0\
-\xf4\x8e\x7f\x4f\x4f\xbe\x67\x8b\x18\xf2\x01\x35\x90\x47\x1f\x4f\
-\xed\xe7\xe3\xd5\x7e\xd5\x11\xe8\xee\x2f\x3b\xd6\x93\x19\xc8\x7f\
-\x6b\xb2\x9f\xe0\x7e\x06\x82\x10\xe8\x0a\x78\xc5\x96\xf6\x30\xc9\
-\x6d\xc9\x69\xbd\x57\xc0\xad\x05\xfc\x5a\x48\xc1\x80\x14\xaa\xb5\
-\x28\x0b\x87\x44\x29\xab\xd6\x0e\x80\x67\x01\x0c\x1b\x84\xe4\xf0\
-\xdd\x49\x00\x7e\x0d\x6b\x01\x0c\x5a\x81\x6d\xa4\xa6\x5f\x06\x6c\
-\x01\xfc\x29\x54\x7d\xab\x6d\x47\x0d\xc1\x9f\xd6\xaa\x6f\x75\x79\
-\x15\x85\x9f\x14\x05\xff\x2f\xab\xe4\x9f\xcb\x34\x2b\xd7\xff\x57\
-\xe9\xfc\xbf\xae\x88\x40\x60\x50\x59\x88\x2b\xd8\xcb\x02\x11\xb1\
-\xb6\x69\x64\x17\xe4\x29\x78\xfb\x37\x20\x05\x03\x05\x70\x69\xaf\
-\x9d\x28\x3a\xaf\x9f\xfb\xe0\xaf\x56\xf9\x79\x4d\x08\x06\x99\x81\
-\x41\x97\xc0\x6c\x1c\x0e\x3e\xfe\xb0\x72\xe4\x03\x13\xd1\xcf\x97\
-\x28\x80\x57\x59\x84\x23\x9d\x83\xa1\x2d\x28\x60\x47\xa9\x5f\x89\
-\x80\xa1\xf2\x33\x91\x89\x8d\xab\xbf\x4b\x7a\x04\x3e\x69\x1b\x0b\
-\x86\x85\x41\x26\xba\x84\x7a\x57\x90\xfe\x17\xd0\x2a\x5c\xb2\x04\
-\x07\x07\x06\x85\x3a\x00\xff\xd4\xec\x81\x95\x8c\x41\xb5\x29\x80\
-\x66\x07\x7a\xc0\x18\xf8\x7f\xa9\xf5\xb8\x5f\x16\x9c\x61\x22\x35\
-\x6e\xfd\xdd\xb6\xf2\x6c\xd1\x9a\xcb\x7f\x0d\xe0\xe7\x5a\xfd\x7d\
-\x0b\x33\x82\x7d\x0e\x09\x36\x50\xc3\xf1\xa3\x3e\x2e\x5e\xfb\x7f\
-\x09\xe1\x1f\x03\xc9\x21\xf0\x75\x68\x00\xa4\x9e\xbf\x04\x2a\x60\
-\x15\xe4\xbd\x8f\x49\xc0\x2e\x83\x2a\x3f\x41\x40\xab\xeb\xfe\xff\
-\xaa\x9a\xbf\x43\xdb\x6f\x6a\x9d\x01\x1b\x05\x85\xa8\x00\xfc\xe3\
-\x53\x21\x83\x07\xe5\xfe\xfa\xfe\xff\x4e\x44\xff\x07\x11\xfd\x5f\
-\xd3\x33\xfc\x3f\x3d\x48\x08\x7a\xc2\x22\xec\xcd\x0a\xd8\x56\x1e\
-\x90\xfa\xb4\xdf\xc1\xef\x3f\x33\x9f\xfa\x5b\x3a\x01\x4b\xdf\x7f\
-\x5c\xfd\x0d\x64\xbe\x75\x44\x50\x81\x4e\x18\x0c\x82\xef\xb7\x3d\
-\x1b\xd0\x42\x41\x9b\xa0\x03\x00\xd7\x36\xc1\x9a\x81\xf2\x39\x3a\
-\xe7\x0a\x76\x1c\x15\x16\x50\x00\x09\x48\x20\xad\xd6\x03\x18\x1c\
-\x0c\xc2\x9d\x0a\x88\x1b\x80\xe0\xe0\x8f\x40\xbf\x5f\x0a\x08\x67\
-\x62\xa8\xf8\x0a\x3a\x03\x4f\x6a\x20\xe8\x2f\xe4\xee\xf4\x22\x86\
-\xaf\x13\xab\xbf\xd6\x34\xc2\x0a\xb8\x1b\x01\xf8\xbf\xdd\xcc\x80\
-\x86\x11\xa1\xfe\x1e\x0f\x81\x0f\xde\x5e\x94\xc8\xde\x7a\x52\x70\
-\x5f\x5f\xbd\xfe\x86\xf7\x37\x68\xf5\x56\x6f\x3f\x81\x42\x78\xef\
-\x77\x84\xaa\x79\x01\x02\xfe\xd2\x7f\xbc\x92\x01\x6f\x03\xfc\x28\
-\x11\xf4\xaf\xff\xdf\xf2\xf8\x7f\xa6\x47\xab\x3f\xdd\x21\xf7\xef\
-\x21\x8b\x23\xa4\x91\xf7\xc8\xc6\xc1\x2e\x45\x0d\x40\xbb\xcf\x52\
-\x7b\x6d\x92\x5b\x8b\x0f\xa4\xbd\x91\x83\x7f\x74\xaf\xfc\x20\x11\
-\xf8\xe8\xff\x83\x1a\x20\xce\x64\xc1\x0a\xd0\x54\x14\x46\xb1\x00\
-\xb5\xf5\x84\x4b\x89\x39\x37\xc2\x98\x17\xc2\x50\xed\x73\x00\xef\
-\x93\x1b\x78\xe8\x04\x0d\xba\x0c\xfb\x03\x8c\x0f\x06\xe1\xba\x8b\
-\x9f\x76\x9b\x79\x31\x40\x2a\xa6\xfe\xed\xdf\x6a\xc0\x8f\x2b\x32\
-\x28\xac\xec\xa0\xee\x37\x28\x7a\xff\xa6\x66\xb6\x09\xa0\xc1\x3e\
-\xd7\xed\x48\x39\x00\x7f\xb9\xb7\xa8\x80\xe5\x34\xe2\x6b\xeb\x0a\
-\xf8\x75\x95\xf4\xf8\x31\x0b\xc4\x70\xd9\x90\xfc\x18\x14\x2a\x80\
-\x58\xb7\xd3\x7e\xef\x04\xd4\x05\x62\x79\xf0\x71\xb4\x06\x3b\x4a\
-\x80\xee\x54\x03\x7c\x32\x03\x18\xf9\xff\x7b\x09\xe8\x6c\x46\x70\
-\xb6\x93\xb0\x22\x0b\x6b\x21\xa0\xc1\x5a\x00\xc3\xd9\x00\x2e\xde\
-\x3f\xfb\x20\x8e\xb5\xea\x4f\x9e\xfa\xb7\x7b\xc6\xe1\x5e\x56\x32\
-\xb1\x15\x01\x18\x87\x6a\xcf\x79\xb1\x03\x0c\x0f\x82\x25\xc4\x35\
-\x07\x80\xf1\xe1\x04\xfb\x0c\x52\x5e\xc8\x84\x97\xfc\xc0\xd4\x77\
-\x0a\xd2\x2e\x25\x47\xe0\xe7\x90\x05\x8c\xce\x06\xe4\x81\x05\xb0\
-\x2a\xff\xb5\xee\xf9\xdb\xb6\x22\xc5\x71\xdf\xdc\xed\x60\xdc\x6f\
-\xe7\x8d\xe0\xcf\x00\x78\x1d\x80\xde\xaa\xd7\xd7\x4e\x05\xf0\x0e\
-\x01\xf8\x60\xf2\x1c\x80\xef\xd4\x21\x6d\x87\x02\x63\x12\xb5\x41\
-\xd2\x6f\xeb\xd7\xd5\xfb\x7f\xf4\xaf\x6b\x88\xf7\xde\xc0\xba\x92\
-\xfd\xd1\x0e\x60\x17\x20\x0f\x32\x80\xa8\x02\x0a\x29\x50\x7c\xcf\
-\x83\x4a\xe0\x91\x2e\xc0\xe8\xf3\x5f\x15\x52\xea\x03\xca\x60\x48\
-\x04\x30\xfb\x6f\x06\x44\x50\xba\x42\xe5\x98\x7a\x52\x2e\x41\x5d\
-\x05\xbd\xb5\x4a\x9f\xe0\x5f\x13\x7c\x06\x6b\xb0\x52\x00\xd6\x57\
-\xff\xa9\xdc\xbf\x06\x02\x60\x2d\x12\x1f\x4e\x0f\x62\x5f\x64\x34\
-\xb0\x03\x06\x0b\x9f\x4d\x49\xb3\x86\x95\x71\xd6\xf5\xcd\x65\x70\
-\x58\x88\xee\x1e\x0c\x12\xb7\xfd\x16\x48\x15\x5a\xf8\xa7\x00\xfe\
-\xb4\xb5\x83\x6f\x05\xbf\x76\xd2\x3f\x77\x95\x9f\x02\x09\x5c\x61\
-\x4b\xb1\xe8\xf3\xad\x03\xfe\x62\x4a\x34\x00\x5f\xea\x80\x34\xae\
-\x19\x14\xf2\xc0\xe7\xa3\x00\x93\x8a\x14\xff\x08\xad\xbc\x60\x01\
-\xcc\x2d\x40\x86\x0a\x3d\x4a\xfa\x51\x01\x84\xd6\x5f\x77\xff\x88\
-\xec\x2f\x0f\x7a\x2f\x5d\x01\xff\xf8\x74\x1b\xd8\x27\x06\x82\x5e\
-\x32\x0a\x6c\x37\x56\x0e\x3e\x42\x60\x46\x77\xce\x15\x58\x4b\xfa\
-\xdd\x02\x78\xd0\xba\xd8\x00\x23\x53\x25\x75\x70\xcf\x0e\x7a\x03\
-\xef\x6f\xad\xea\x13\x3c\x3b\x49\xe4\x9e\x18\x0c\x09\x81\x07\x8a\
-\x80\x17\x52\xf0\xfd\xee\xeb\xb4\xa0\xb7\x11\xa7\xb0\xad\x98\xb8\
-\x75\xf0\xf7\xb6\x0e\x81\x2a\x8e\xc9\xb6\x5c\x60\xfd\x9d\xa0\x6e\
-\x33\x8e\x76\xc4\x06\x87\xf3\x7a\xb8\xeb\x31\x58\xed\x35\x48\x77\
-\x6a\x41\xde\xd8\xc0\xd3\xea\xd2\xf3\x1c\x88\xc0\x02\x11\x18\x24\
-\xfc\x48\x52\x78\x00\xaa\x56\x22\x68\x5f\x45\xfb\xda\xa4\xa3\x89\
-\x06\x7c\x83\x91\x21\xf3\xfb\xca\xc4\x32\x0d\x7a\xfa\xd7\x26\x17\
-\x2b\xa0\x3f\xa0\x75\x87\xe0\xfc\x00\xb9\x3e\xc1\x7d\x04\xfc\xe8\
-\x63\x71\x67\xe8\x28\xfb\x63\x37\x20\xc3\x81\xa8\x04\xef\xe3\x53\
-\x55\x7e\xef\x3d\xd3\x33\x3b\x00\xf7\xa8\x03\x7a\x82\x22\x38\x94\
-\x3b\xa0\xe4\xcf\x4d\x05\xd4\x3c\x20\x43\xf5\x47\x90\x7b\xcb\x0f\
-\x2c\x41\xfd\x45\xcf\xf8\x0c\x95\xff\x62\xad\xea\x3b\x21\x5c\x74\
-\xe9\xeb\x03\xf0\xc9\x74\x99\x0a\xe4\x32\x36\xec\x49\x79\x86\xd7\
-\xfe\x4b\x4a\x83\x2d\xc6\x61\x43\xd1\x35\x01\xe8\x4a\x6a\xe3\x4e\
-\xc1\xb8\x27\xe0\x68\x4b\xd0\xdc\x41\x12\x49\x00\x77\x1b\xba\x6e\
-\x6c\xea\x39\x03\xd0\x75\xb0\xa0\x07\xc9\xc7\x49\x60\xee\x64\xbe\
-\x5f\x4b\xf7\x7c\x05\xf1\xdf\xc8\x20\x86\x7d\x06\xfe\x5f\xca\x56\
-\x28\xed\x63\xf3\x72\xc4\x98\x4e\x44\x72\x85\x5f\x90\x0b\xf8\x78\
-\x07\xed\x04\xdf\x6f\xac\xcc\xa8\x0a\x14\x40\x1c\x49\x22\x6f\x90\
-\x01\x90\x02\xe1\x46\x31\xa3\xf7\x68\x23\x06\xba\x94\x9f\xd8\xa5\
-\xfc\x02\xdf\x27\xfb\x4f\x5b\x80\xa3\x7f\xaf\xde\xf1\xf5\xe8\x93\
-\x48\xe2\xa6\x45\x48\xf0\xfd\x4c\x6d\xc1\x8f\xbf\x36\x59\x86\x7f\
-\x96\xf4\x1f\xb4\x52\x2e\x52\x3e\xca\x7f\xb8\xdf\xbc\x3f\xec\x69\
-\x27\xb6\x80\xfc\xaa\xcd\x1f\x4a\x09\x16\xa7\xf5\x84\x60\xf5\xa5\
-\x68\x07\xb4\x6d\x33\x6e\x54\xd6\x0b\xf8\x1a\x03\x6b\x93\x81\xa6\
-\x6d\x33\xd1\xa8\x00\xbc\x69\xd7\x9f\xc7\xd7\x36\x05\xd1\x60\x01\
-\x70\x12\x30\xd7\x56\x5a\x13\xd9\x54\xd7\xf8\x33\xc4\x8a\xeb\xcd\
-\x3d\xa2\xfc\xa7\xa0\x38\x96\xad\xbc\x38\x58\x12\x83\x06\x9e\xd5\
-\xba\xdf\x88\x61\x1b\xf8\xbd\x02\xd0\x6e\x92\xa0\x29\x82\x62\x05\
-\x7c\xab\x2e\x83\x4a\x5f\x95\x40\xac\xfe\xda\x87\x82\x66\x03\x50\
-\xeb\xe0\x63\xa5\x72\x77\x84\x10\xba\x00\x4e\x18\x1d\xd8\x46\x33\
-\x01\xd3\x3a\x20\x7c\xb4\x47\xff\xac\x4d\x41\xed\xc5\xea\xe0\x88\
-\x8d\x38\x12\x32\xa2\xd7\xaf\x53\x81\x55\x09\xd8\x12\xa8\xd5\xd6\
-\x5f\xf9\xac\xb9\x27\x03\x9a\x8d\x2c\x21\xd8\x37\x32\x01\x57\x0b\
-\xde\x19\x98\xca\x7e\x81\x0c\x09\x3e\x97\x19\x02\xeb\x1f\x66\xb0\
-\x3f\x60\xe9\xf5\xd7\xa9\x42\x9f\x17\xb0\xb0\x70\x28\xc1\x98\xb0\
-\xb5\x6d\xb2\x68\x05\x7e\xad\x06\x80\xc3\x5a\x00\xdc\xff\x7f\x59\
-\x07\x20\x35\x53\x17\x18\xfd\xd5\xea\xfd\xb5\x3b\xd8\x63\x3c\x86\
-\x45\xc1\xfb\x7b\xa7\xc1\x06\xc0\xe7\xa0\x52\x74\xa0\x02\xb4\xfe\
-\xb7\x06\xbb\x74\x40\xef\xe5\x7f\xee\x0e\x27\x37\x23\x62\xfb\xd8\
-\x0e\xfb\x6a\x16\x10\x15\x01\xfa\xf8\x8f\x16\x8d\x0f\x3d\xfe\x3b\
-\x9c\xf7\x60\x50\x81\x6c\xc3\x16\xb8\xdc\x9f\x20\x76\xdf\x7a\x3f\
-\x76\x06\xd2\x7e\x95\xbf\x31\x11\x78\x54\x01\x9c\x9a\x00\xa4\xc1\
-\xee\x83\x67\x2a\xf7\x59\xdb\x71\xe8\x6b\x4b\xf0\xd0\x30\x0f\x20\
-\x5e\x45\xcb\xbb\xb9\x3c\x27\x0b\x64\xa0\xed\x07\xe3\xd5\x1e\x15\
-\x83\x80\x14\x96\x40\x14\x02\x95\x1f\x55\x00\x06\x81\x09\x2a\x3f\
-\x2b\x00\x3b\xb7\xfb\x06\x93\x82\xde\x7b\x76\x72\x48\x8b\xa5\xf0\
-\xff\x7c\xc1\x10\x55\x30\xe1\xd9\x81\xad\x4b\x8f\x1b\x81\xc6\xe8\
-\x8d\xc2\xdc\x3f\xee\xeb\x9f\x3a\xd9\x9f\x07\xdb\x78\x51\xa9\xb9\
-\x7d\xf2\xdf\x48\x40\xc2\x01\x26\x5c\x9e\xe7\x0e\xf8\x0d\xf0\xd6\
-\x49\x7c\x59\x25\x04\xb9\x4b\x10\x1a\x19\xf8\x6e\x85\x2d\x76\x64\
-\x4b\xd0\xf6\x43\xf9\xfe\x11\x2c\xc0\x34\xa8\xfe\x40\x06\x94\x42\
-\x75\xb7\x31\x21\xf8\x66\x27\x5d\x27\x60\x24\xf9\x83\x3d\xe8\x76\
-\xba\x8c\x4a\x40\x6f\x5b\x01\x7a\x91\x05\x78\xe6\xc4\x20\xbd\x30\
-\x3f\xe8\xde\xe7\x3f\x23\x81\x36\xa0\x10\x99\x4f\xef\x39\xe0\xb3\
-\x57\x7b\xa0\x16\x54\x02\xb9\x91\x81\x79\x17\xc0\x20\x37\xb0\x5e\
-\x15\x98\x81\x22\xf0\xe0\xef\xda\xae\xbb\x4a\xc2\xb0\x91\x08\xb5\
-\xc9\xbf\xba\x67\x80\xe4\xa6\x1c\x14\xba\x03\xe5\x28\x72\xd3\x65\
-\x4c\x98\x07\x4b\xa3\x6c\xf5\x1d\x89\xc7\x6a\xf6\x27\x01\x49\x08\
-\xfe\xda\x2e\xc4\x1a\x0e\xee\xd8\x1a\xd2\xa6\xba\xab\xc0\xf8\x90\
-\xd2\xb9\x3c\xe3\x8c\x61\x04\xbe\x6c\xca\xfd\x35\xd0\xd1\xfb\xe3\
-\x26\x69\xd4\x29\x01\x23\x06\x90\x3a\xb0\xa9\x4f\xf7\x6b\x85\xb7\
-\x70\x7f\x40\x06\x5d\xbb\x4e\x03\x21\x04\xbb\xb0\xfa\x65\x7f\x1f\
-\x48\xfe\x8d\x8e\x40\xf7\xf9\xef\x3d\x31\x50\xa2\x3b\x46\x82\xf9\
-\x91\x6d\xc1\x9f\xb1\x18\xe9\xf4\x8c\xc0\x91\xcf\xd3\x2d\x92\x48\
-\xe1\xe1\xdf\xd7\xa4\x0d\xec\xef\xb6\xca\x01\x16\xc0\xc3\xae\xb5\
-\xde\xdb\xc5\x0e\x81\x01\xd8\x0d\x7c\x3f\xbb\x0d\xb0\x75\x1e\x90\
-\xac\x82\xbe\x66\x06\x14\xec\x00\xc3\x99\x01\x1a\x06\x85\x00\xfc\
-\x9d\x1d\xb0\xde\x0a\x58\x89\xf0\x70\xe0\x86\x36\xda\x80\xfd\x1a\
-\xbc\x7e\xe4\x57\xbb\x36\x9f\xad\x26\xfc\xfa\xb6\x9e\x16\xc9\xbf\
-\x47\x00\x5c\x4f\x12\xd0\x5a\xfd\xfb\xe9\xbe\xde\xbf\x6b\xd7\x2b\
-\xd0\x4e\x43\x30\xec\x4c\x88\xff\x1f\x73\xe8\x70\x94\xfd\x91\x8d\
-\xa1\xca\xdb\x36\x11\xd0\x35\x48\xfb\x51\xd8\xe7\xa7\x2c\xba\x2a\
-\x1c\x55\xf6\x98\x01\x40\x27\x60\x08\x0a\xdb\x21\x87\x69\x40\x10\
-\x77\xc1\xf8\xff\x9e\x1e\xf5\xfa\xaf\x5c\x4b\xf0\x08\xf1\x0c\xff\
-\xcd\x68\x01\xa4\xc8\x7f\xd1\xc5\xdb\x47\xcf\xef\xed\x40\x09\xf7\
-\x20\xec\xeb\xe6\xbb\xbb\xeb\xf2\x4b\x73\x51\xa2\x0f\x9f\x13\x58\
-\x94\x43\xcd\x1a\x9c\x20\x30\x0b\x20\x18\x3f\xce\xda\x7f\x4c\x4a\
-\x40\x38\xc3\x4c\x81\x0f\x0b\x09\xb4\x05\x45\xc9\xca\x81\x23\xda\
-\xcd\xf5\xad\x8f\x0c\xeb\x8f\xbb\xef\x77\xdc\x8b\xcb\x7d\x33\x6c\
-\xdd\xbd\xee\xf3\xb7\x99\x7d\x5a\xf9\x7c\x05\xd0\x4b\x67\x2a\x74\
-\x55\xfd\x15\x46\x8d\x18\x36\x3d\xc3\xf1\x20\xb4\x00\x34\xf4\xfb\
-\xfd\x42\xe2\x79\x4d\x7f\x76\x5d\xba\x01\xab\x0a\x3f\xc8\x02\xea\
-\x2f\xd3\x47\x90\xdf\x1b\x03\x3d\xf5\x24\x23\xbb\x41\x0a\xb6\x0d\
-\x74\x1a\x91\xc3\x06\x2a\xba\x75\x03\xa7\xba\x03\x3f\x9f\x76\x3c\
-\xf8\x33\x15\xc1\x33\x08\x63\x6f\x1c\x18\xa7\x02\x29\x19\x99\x62\
-\xd5\xa7\x96\x68\xcf\xd4\x13\x82\xf5\x24\x61\x2b\xd0\x83\x2c\x2c\
-\xf7\xbb\xf7\xa0\x0d\x18\xd9\x01\x69\x64\xd0\x76\x15\xd6\xda\xeb\
-\x37\xb4\x02\x0c\x76\x40\xc3\xd9\x84\xa5\x43\xd0\x1f\x31\x36\xd6\
-\x46\xa3\xd3\x80\xa5\x5b\x63\x28\xc5\x5d\xe7\xba\x97\x7f\x3b\xd6\
-\xdc\xc2\x76\x5d\x04\x59\x7b\x24\x17\x27\x9c\x0c\x04\x24\x5d\xf5\
-\x17\xb0\x1b\x0d\xec\x36\xa8\xfa\xb1\xca\x47\x7d\x33\x87\x8f\xd3\
-\x8a\x18\x8c\x88\xd8\xae\x20\xf3\xa3\x05\xb8\x86\xaa\x6f\x3d\x20\
-\x57\x55\x5d\x37\x02\x41\x05\x52\xd8\xda\x1d\xf3\xb2\x43\x0e\x71\
-\x61\x90\x2b\x00\x78\xbe\x3f\xcb\xff\x5f\xd3\xa3\x55\xfb\xb3\xba\
-\x08\x7b\x79\xc1\xe1\xbf\x2f\xb5\x85\x41\x65\x91\x3a\x99\xf9\x8a\
-\xbe\x41\xe5\x3f\xa5\x06\x8c\x2c\xc3\x0f\x6d\x42\x32\xd0\x7a\xcf\
-\xae\xe5\x63\xd7\xf2\xf7\x57\x35\x50\x5a\x4e\xc9\xfa\x40\xc9\x07\
-\x83\xac\xcd\x0e\x54\x62\x20\xd8\x76\x3c\x1e\x3a\x52\x5e\xe3\x7c\
-\x00\x8e\xf9\x60\x1f\x3e\x9e\x03\xd8\xb6\x17\x91\x6a\x20\xf2\x20\
-\xf0\xeb\xc3\xbe\x7e\x7b\xae\xfe\x84\xec\x26\xfb\x5b\x9b\xd1\x60\
-\xc1\x8e\x01\xd8\x0d\xc0\x6e\x50\xe5\x0d\xbc\xbd\x86\x2a\x8f\x47\
-\x91\x22\xe0\x51\x8b\xd0\xca\x0e\x2c\x12\x10\x36\x24\x19\x12\xc1\
-\x96\xef\x9f\x36\xe4\xfb\x75\x87\x14\x6c\x4d\x2a\x2b\xd5\x30\x3a\
-\xe6\xf6\x72\x03\x48\xc1\x0a\x58\x3e\xa6\x04\xe8\x09\xc7\x83\x3f\
-\x73\x93\x12\x7b\x35\x69\x74\xc0\x77\x0b\x60\x65\x4d\xbe\x95\xd3\
-\xa5\x1d\x94\xfd\xbf\x66\x91\x10\x82\x1a\x58\x59\x00\x7c\x3d\x0d\
-\xac\x41\x82\x67\x85\x75\x07\xa6\x64\x9d\x2d\xb0\x4e\x05\xd4\x67\
-\x6c\x23\xe2\xc1\xa4\xe8\x2f\xb5\x75\x03\xd0\x06\xf4\x5e\x9d\x60\
-\x28\x08\x8f\xdb\x10\x58\xd9\x1f\x77\xf4\x59\xeb\x3e\xdf\xb4\xa3\
-\x79\xfe\xbe\xf2\x4b\x35\x0e\x0c\x16\x00\x25\x7e\x7c\x4d\x95\x18\
-\xd6\x55\x5e\x3b\xb0\x8f\xd6\x12\x1a\xec\x8b\x44\xab\x0c\x80\x42\
-\x0e\x80\xfd\xf8\xeb\x06\xb8\xa6\x7d\x42\xa8\xcf\x5b\x90\xfa\x18\
-\x2b\xb1\xae\x23\xa0\x37\x94\x00\xaa\x01\x57\x00\x73\x21\x88\x0c\
-\x64\x71\x1c\xd6\x0f\x13\xc0\x1e\x50\x3f\x83\x44\x8e\xfc\xbb\x16\
-\x46\x82\xfb\x79\x80\xe2\xff\xa9\x80\x7f\x1a\xf4\x17\x3a\x2b\x40\
-\x20\xff\x69\x0c\xf8\xf2\x30\x7c\xcd\xde\xfe\xeb\xef\x99\xb7\x04\
-\x51\x01\xa8\xb6\xf6\x94\x94\x80\x50\xa0\xfa\x2b\x80\x5f\xc2\xf8\
-\x30\xee\x40\x9c\xda\x98\x70\xee\x08\x40\xbb\x3d\x01\x18\xa6\x04\
-\xb4\x9b\xfb\x6f\xb3\xfe\x23\xd9\x8f\xe7\xf4\x29\x28\x01\xdc\x76\
-\xac\x07\x7e\x4f\x02\xd6\x5d\xb7\x4d\xcc\x64\x35\xbb\xe8\x01\x60\
-\x24\x00\xda\x58\x4e\x34\x00\x3b\x50\x5d\x55\x03\x46\x21\x07\xa0\
-\x00\xf4\x0f\xa8\xbe\x16\x9e\xa7\x01\x49\xbc\x6f\x54\xff\x51\xcb\
-\x4f\x07\x5d\x81\xa8\x02\xf2\xe0\x7a\x7a\x6a\x95\x3e\x62\x01\xec\
-\xd9\x4b\x7c\x9f\x49\x22\xa7\xff\xfd\x62\x03\x96\x93\xd2\xb0\xb5\
-\xd2\x67\x00\x9b\xe0\xc7\x76\x0c\x56\xff\x91\x02\x98\xac\x54\xf7\
-\x22\xff\x0d\xb2\x06\x85\x67\x2e\x8f\x64\xe5\xcc\xc0\x60\x1f\x04\
-\xbb\x07\xd6\x9f\x4e\x84\xa7\x0c\xa5\xbc\x3a\x83\x70\xe9\x26\x64\
-\x52\xc3\x95\x82\x58\x57\x29\xc8\x7f\x85\xf9\x41\xa9\x03\x3f\x7d\
-\xca\x8f\x90\x23\x80\x64\x7f\xdc\x1d\x77\xfb\x11\x62\x3b\xce\x3a\
-\x52\x68\x5b\x8a\x18\x80\xd7\xba\x8a\xdf\x4b\xf9\x35\x01\xb4\x11\
-\xa3\xd1\xba\x86\x20\xfd\xab\xe6\xf1\x3f\x65\xdd\xc2\xaa\xda\xc6\
-\xaa\xfc\x31\xa8\xf8\x98\xb1\x4c\x3b\xbf\xa5\x1f\x74\x7b\x27\xcb\
-\xa3\x2a\x60\x4b\x15\x14\x45\x50\xa7\x07\xa7\xf2\xcb\xfe\x05\x0a\
-\xe0\x21\xaf\xfe\x02\x32\xa9\x7f\x12\xae\xab\x28\x93\x7d\xb1\xba\
-\xfb\x75\x1e\x80\xdf\x49\x02\xc1\x9e\xca\xf2\x1a\x41\x0f\x59\xae\
-\x05\xae\xa7\x98\x11\x60\x1e\x00\x43\x46\xbe\x65\x95\x00\xb1\x48\
-\x53\x05\x86\x24\x20\x78\xf6\x00\x76\x0d\xe0\xa8\x72\xc9\xb0\x62\
-\x10\x17\xda\x50\x1d\x09\xd3\xda\x06\x14\x48\xfd\xe7\x6e\x89\xef\
-\xe8\xe0\x8e\x36\xc1\xd7\x64\xbf\x74\xe7\x03\x63\x95\x27\xf0\xf6\
-\x08\xf4\xf5\x70\x8f\x0d\x00\x4f\x9b\x04\xd0\x2a\x7e\x3c\xe6\x74\
-\x4c\x02\x04\x41\xa0\x85\x1e\xfd\x75\xa7\x04\x6d\xc0\x65\x35\x06\
-\x7c\x42\x01\x6c\xf6\xf9\x3f\x6e\x28\x01\x0d\xb2\xff\xbe\x3f\x9f\
-\x46\x00\xaf\x24\x96\x53\x0b\x85\x70\x6f\x80\x54\x92\xf5\x09\xfe\
-\xb6\x19\x40\x9c\xb0\xbf\x0a\x3f\xa0\xce\xfb\x53\x47\x04\xab\x11\
-\xce\xa8\x0a\xb8\x3d\x6c\xa4\x04\x04\xfe\x6e\xd5\xa5\x43\x21\xda\
-\x93\x40\x1a\x58\x84\x4e\x11\xe0\x36\x65\x4d\x0d\xb4\x01\xa1\x9e\
-\x42\xf1\xac\x5f\xad\x87\x7c\xe4\x92\xf8\xaf\x2b\x3f\xd6\xe4\xd6\
-\x3e\xd4\xee\xbc\x5e\x81\xe5\x41\xd2\x01\x1d\x57\x0e\xf4\x52\x9f\
-\x86\xf2\x5e\x07\xd5\x5b\xef\xac\xf6\x56\x95\xc2\x7a\x85\xdd\x2d\
-\xaf\x6f\x83\x79\x00\x57\x00\xd3\x81\xd2\x77\xa5\x73\x27\x5f\x5e\
-\x9e\x84\x90\x8f\xf2\xf5\xc9\x7d\x04\x60\x2f\x7c\xbc\x32\x57\xd8\
-\xfc\xe3\x41\xa0\x1f\x96\x3c\xd1\x52\x81\xfd\x6f\x4f\x61\xf7\x03\
-\x03\x45\x60\x08\xfe\xf2\x1a\x89\xa0\x56\x6c\x9f\x13\xb2\x65\x65\
-\x60\x5d\x8f\x5c\x4c\x17\x2a\x84\x4a\x02\x45\x45\xd4\x0d\x2b\x81\
-\x18\xac\x91\x80\xa5\x51\x88\x18\xf2\x00\xd3\x76\x3e\xe1\xd4\x1f\
-\x4d\xde\x06\x84\x7a\x77\x1c\xdb\x7f\x71\xbc\x37\xee\x24\xa4\xdd\
-\x8a\xbd\x36\x1e\x24\x84\x67\xf8\xd8\x0a\xfc\x71\x78\xc7\xc2\xf5\
-\xba\x72\x8f\xaa\xbd\x02\xb8\x69\x55\xf5\x69\x35\xfc\x43\xe1\xda\
-\x40\x31\xc8\xe0\xef\x39\x0a\x91\xeb\x89\xd2\x33\x9d\x48\xf2\xb7\
-\xe6\x04\xa6\x10\x00\x6e\xc9\xfe\xf8\xda\x36\xa7\x01\xef\x3e\x1b\
-\xf0\x33\xaa\xf7\x2b\x88\xc6\xba\x0b\x0b\x3f\x1b\x0b\x59\x0f\x7c\
-\xf6\xec\x23\xc1\xb4\xb6\x03\x0e\x64\x01\x50\xe3\x37\x7d\x6a\xc4\
-\x50\x65\x3f\x51\x03\x3b\x66\x05\x09\x48\x00\x27\x12\x15\xda\x86\
-\x4e\x10\xa2\x83\xce\x82\xb6\xf1\x61\x58\x4b\xe0\xdd\x01\x9b\x63\
-\x5b\x90\xea\x1a\x00\x85\x73\xfe\x6c\x95\xf0\x1b\x48\x7c\x82\x94\
-\xfe\xcc\xd6\xf5\x06\x95\xdb\x0e\x57\x7a\x5a\x25\xf9\x79\x03\xd8\
-\x0c\x3f\xf3\x39\x00\x9a\x6f\x00\x1d\xf3\x00\x1a\x2c\xc8\xd1\x63\
-\x43\x40\x9b\x8f\x0f\xc8\x65\x72\xb8\xce\x41\xda\x3f\x21\xf8\x3b\
-\x88\xd2\x2f\xb3\x00\xf6\xc9\xff\xd6\x78\x61\x10\xce\xfb\xc7\x77\
-\xef\x00\xbf\x23\x0a\xb0\x0a\x09\x7a\xc9\x09\x58\x5d\x4a\x77\xc8\
-\xab\xb9\x52\x00\x7e\x21\x09\x2a\x1f\xf3\x41\x23\xa5\x3e\x07\xf0\
-\xe7\xd4\xa4\xa8\x29\x0c\x20\x69\x08\x0d\x25\x84\x85\x65\x75\x9b\
-\x6a\x0e\x11\x5a\xdb\x7c\x2b\x77\x93\x7d\xfd\xee\x41\x02\x33\x80\
-\x52\x87\x8c\x8f\x80\xdf\x02\xb8\x2d\xf8\x74\x1b\x54\xeb\x75\xe5\
-\x6f\x9f\x93\x4f\x81\xbb\xdf\x14\x2d\x10\x85\xf1\x60\xad\xbf\x6d\
-\x2c\xbb\x9d\x07\xbf\x23\x47\x4d\xe8\x2b\xa1\xf6\x1e\x32\x01\x7c\
-\x4c\xd0\x1a\x5c\x5b\x81\xdf\x3e\x03\xb8\xeb\x8f\x5b\x80\x1c\xaa\
-\x3f\xc1\x68\x7b\x67\x09\xa8\xfd\x32\x38\xf6\x3b\xa0\xbb\x02\x58\
-\x03\xbf\xb3\x06\x53\x78\x5d\xc9\xdd\x2b\x7a\x08\x1d\xb5\x0f\x1a\
-\x1b\x11\x50\xcb\x0b\xa4\x57\x0b\x95\x10\xa0\x73\x60\xa2\xab\x63\
-\xca\xd5\x34\x48\x7a\x5f\xb0\xab\xab\x41\xa1\x3e\xe0\xdb\x02\xb6\
-\x75\xa1\x5e\x4f\xa7\xb1\x6a\xf7\x15\xbf\x07\xae\x1e\x00\xb7\x6e\
-\x02\x7a\xf4\xba\xff\x3b\x72\xf8\x65\xe0\x13\xe5\xea\x11\xb8\x7c\
-\xd0\xb1\xe3\x6e\x75\x43\x09\xe4\x8d\x7b\x0f\x4d\x02\xfe\xde\x04\
-\x60\xcf\xfc\x0b\x5c\xf2\xa7\xe0\xcb\x46\x96\x01\x2b\x3c\x16\x81\
-\x34\x20\x05\xa3\x9e\x08\xca\x77\xdc\xb8\x00\x5c\x71\x40\xc9\x00\
-\x03\x5e\xed\xa9\x92\x81\x09\x10\x41\x82\xce\x84\x42\xf7\x20\x41\
-\xbb\x50\xfa\x69\x42\x97\x9b\x66\x99\xf2\x8c\xfb\xf4\x51\x5d\x92\
-\x43\x9b\x72\x7f\xaf\xb2\xdb\x06\x08\x2d\x00\x6d\xbb\x72\x1b\xac\
-\x55\xbc\x0d\x6a\x1d\xfc\x30\xf9\x81\x7b\xb7\xaa\xfc\x96\x96\xa4\
-\xa3\xd1\xf3\x2f\x0b\xb5\xbf\x53\x01\xf8\xff\xf9\x64\x7d\x41\xe0\
-\x3d\x72\xd8\x20\x85\x5a\x9d\xa9\x55\x70\x24\x01\x09\x1f\x77\x65\
-\x80\xd5\x9f\x0d\x82\xe0\x90\x2d\x10\xa8\x09\x04\xbf\x82\x22\x48\
-\x21\x7b\x10\xaa\xca\xa0\xae\x45\x50\x20\x05\x69\x5b\x8a\xb7\x09\
-\xbe\xb6\x8d\x17\x02\x1e\xbd\x7e\xac\xf6\xfd\x39\x53\xb6\x02\xf7\
-\x18\xd4\xfd\xfe\x41\x3d\xcc\x8e\x02\x56\x4f\x02\xfb\xcc\xc7\x5e\
-\x05\x89\x2b\x6d\x9f\x5c\x71\xa4\xe2\xeb\x8e\xcc\x8f\x72\x7f\xeb\
-\x63\xd3\xca\x0a\xfc\xbd\x04\x80\x36\x80\x36\x00\x3e\x04\xfc\x80\
-\xf8\x89\xb6\x2b\x7f\xa2\x00\x60\x07\x27\xe1\xc1\xb7\xdd\x46\x30\
-\x9d\xd7\xf0\xbf\x57\x83\x9a\x48\xb6\x7c\x69\x89\x5a\x6e\x80\xef\
-\x4d\xd0\x7d\x90\x16\x20\xd6\xa9\xc2\x84\x03\x42\xad\x36\x4b\x90\
-\xf6\x11\xdc\xb7\x83\x3e\x0c\xe2\xec\x09\x80\x1c\x7d\x2c\xdf\xf9\
-\xf9\xf7\xbe\xff\xde\xfd\xad\x5e\xd1\xd6\xfb\x56\x00\xbf\xa0\x17\
-\x81\xbc\xc0\x02\x19\x74\x44\x40\xbe\xa5\xde\xfa\xb5\x67\x00\x02\
-\x36\x58\x82\x06\xdf\xfa\x3b\x91\x58\xb6\xd4\xc7\xea\xf5\x42\x04\
-\x4a\x44\x9c\xf3\xe1\x23\xe8\xfe\xbc\x3f\x7c\xef\x0f\xfd\x8e\x87\
-\xde\xf1\xc8\x77\x3c\xa6\xc3\x8f\xbf\x98\x00\x72\xf1\x7b\xf1\x91\
-\xc3\x75\x0e\xd7\x83\xd7\x8c\x3f\xa8\xeb\xe0\xef\xca\x3b\x7f\x7f\
-\xb9\xe6\xd1\xbf\x33\xfa\x37\x77\xbe\x2e\xce\x3b\x5f\x57\x78\x5d\
-\xb6\x20\x17\x35\x92\x04\x3b\x03\x59\xbf\x4b\x50\x7c\xac\xb0\xb3\
-\x57\xe4\xf5\x41\x9c\xf1\x8d\x1f\xdf\xf7\x9f\x6f\x05\x70\xff\x9f\
-\x0d\xf0\x73\x00\x27\x6f\x91\xc0\xce\x83\x43\x1f\x97\x83\x9f\xe3\
-\xc8\xf2\xb8\xbb\xce\x3c\x00\xb3\x02\x78\xb5\xfe\x1b\x5c\x17\xe8\
-\x68\xff\x6f\x32\x80\x1d\xcf\x11\x60\x25\xe6\xb6\xaf\x00\x93\x91\
-\x08\x91\x70\x1b\x63\xe8\x00\x6f\x63\x4c\x1e\x7d\x0c\xc7\xee\xb7\
-\x08\xe2\x51\x77\xf0\x88\x03\x98\x4e\x3e\x2e\x77\x7e\x8e\x7e\x13\
-\xc0\xaf\x05\x7e\x9e\x6f\x54\xe6\x41\xc5\xdd\xad\xb2\x11\xa8\x03\
-\xb0\x77\xaf\xcb\xd7\xc0\xf8\xf9\xb6\xae\xd4\x1c\xfe\x7e\xc6\x8f\
-\x0d\x5e\x13\x02\xde\xda\x61\x24\x0a\xcb\x89\x49\x49\x18\x1c\x89\
-\xc0\xf8\x00\x10\x81\x18\x11\xf3\x58\x19\x0c\x22\x82\xee\xba\x7e\
-\x0e\x0f\x14\x06\x13\xb1\xc0\xdf\xa5\x0f\x06\xf9\x8f\xc4\x0a\x08\
-\xd4\x57\xfe\x79\xfb\x24\xa2\x39\xf2\x3e\xf9\x03\x08\x80\x1f\xfe\
-\x4c\x1e\xdc\xe6\xa0\x06\xb6\xaa\xf2\xa8\x4a\xe7\x55\x95\x5e\xbf\
-\x5e\x80\xcf\x94\x17\x60\xa2\x37\xc4\xbf\x8f\x6d\x05\x7c\xf6\x23\
-\xc5\x59\x37\x2b\x3c\x45\xb0\x6b\x86\x81\xa0\xe5\xef\x63\xca\x0b\
-\xf8\xa5\x11\x00\x33\x51\x9a\x96\x6e\x21\x8e\x17\x78\x14\x51\xc1\
-\xcb\xb7\x6d\x42\xa7\x20\x38\x84\x9b\x1b\x9d\x16\x46\x1b\xa2\x81\
-\x34\x22\x89\xdc\x4b\x0a\x0c\xfc\xbf\x57\x12\x8f\x82\xe9\x72\xf2\
-\x63\xbf\x60\x88\xf2\x77\x2b\x80\x95\xf4\x77\xb0\x33\x90\xc1\x1a\
-\xec\x0b\x78\xf3\xb6\xcc\xe7\xdc\x57\xfa\x0a\x58\x57\x1e\xfe\xda\
-\x9a\xaa\xe0\x32\x77\xcf\xf0\x6f\x31\xbe\xc6\x6a\x6f\x6b\xd0\x97\
-\x8f\x31\xeb\xaa\xe2\x73\xdd\x28\xc4\xbf\xfe\x22\xfd\x1d\xe8\x5c\
-\x6c\x00\x2f\x19\x61\xd2\x66\x09\x04\xbb\x8a\x48\x02\xa3\xcc\x00\
-\x08\xc2\xf3\x81\xfa\xde\x78\x0d\xa0\x5e\x8d\x0b\x24\xea\x0f\x2c\
-\x18\x00\x7a\x93\x1c\x06\xaf\x57\x79\xc1\x74\xc3\x02\x5c\x76\xee\
-\x3d\x02\xe2\xcb\x9d\xc4\x71\xeb\x63\xf9\x37\x24\x00\xfe\xe4\x7f\
-\xab\x7f\x2c\x20\x66\xce\xc4\x92\xc9\x38\x78\xfe\xee\x35\x96\x9c\
-\xe0\xaf\x3b\x89\x0e\x15\x79\x40\x04\x4c\xf3\x02\x4c\x3f\x67\x80\
-\xb5\xc8\x7f\x03\x40\xf7\x36\x80\xa9\x80\x79\x55\xe1\x73\x3d\x3b\
-\xa0\x97\xf8\x30\xfe\x8b\x72\x1f\xf6\x09\x24\x2e\xd2\x5f\xdb\xf0\
-\xa2\xd0\x42\x00\x2c\x8b\x15\x48\x61\x9a\xd8\x09\x80\xe1\xfd\xb5\
-\x49\x81\x60\xb6\x81\x52\xe0\x35\xf8\xa3\x2a\x60\x1e\x54\xfd\x54\
-\xee\x21\x51\x6c\x89\xb7\xad\xeb\x02\x0c\x9e\x76\xc8\x41\x98\x68\
-\x82\x07\x71\x79\x13\x8f\xa5\xc6\xe5\x20\x51\x8c\xee\xbd\x2a\x03\
-\xf8\x71\x82\x38\xe4\x09\x04\xc0\x2f\x03\xe6\x6b\x1e\xfd\xbf\x09\
-\xa5\x85\x83\x2e\x8c\x49\x3c\x07\xef\xcf\xbc\xe3\xcd\xf3\xca\x7f\
-\x37\x22\xb8\x86\x8f\x59\xf0\xf0\xf3\x40\xca\x6f\xc8\x7b\xfc\x38\
-\x4a\xfc\xb2\xee\x9f\x2c\x13\x9b\x2e\xe7\x1c\x1a\xaa\x96\xb9\x82\
-\x3f\xb9\xfc\x87\xf1\x04\x57\x01\x22\x44\x29\xb5\x25\x07\xc9\x06\
-\x44\x40\x83\x9c\x20\x56\x60\x1b\x13\x01\x71\x50\x00\x0e\xfc\xd4\
-\xcb\xff\xda\x56\x0d\x3f\x2e\xe6\xb1\x25\xe8\x9e\xf3\x46\xa5\x1f\
-\x5d\xeb\x0e\xc0\x27\x22\xba\x00\x39\x5c\x6e\x90\xc5\xad\xc7\x8f\
-\x9d\xbf\x2b\xdd\x20\x8f\x17\x75\x3d\xa6\xaf\x04\xe9\xd7\x10\xcf\
-\x20\xf8\xe3\xdc\x97\x18\x54\x01\xbc\x28\x05\xab\xc0\xe7\x01\xf0\
-\xf3\x0a\xf8\xd5\xe3\xb3\xf6\x92\x9d\x1c\xf0\x0a\x92\xbf\x8c\xd0\
-\xb0\x7f\x4e\x6e\x61\xa0\x3f\x17\xb0\xb3\x68\x9b\xf7\x47\x7f\x2f\
-\xfd\x6a\x35\x4e\xbe\x54\xa7\x7d\xad\xcc\xd6\xbc\x3f\xca\x7b\x20\
-\x00\x76\x12\x70\x2b\xa0\x6d\x8e\x28\x39\x09\x28\x7c\x9e\x05\x35\
-\xc0\x8d\x14\x64\x40\x06\x12\xad\x40\x02\x12\x00\xf9\x5f\x71\x93\
-\x82\x3a\xe0\x20\xca\x22\xb0\xf3\xf2\x77\xec\x12\x45\x86\xdf\xc1\
-\xad\x4a\x79\x39\x10\x0c\x5e\x6e\x54\xff\xcb\x89\x2e\xc0\x2d\xf2\
-\xf8\xb9\x43\x1e\xf1\x75\xbc\x97\x51\xd1\xf4\x54\xfd\xdb\x67\x00\
-\xb7\x48\x46\x56\xf7\xb8\x59\x00\x59\x00\xd5\x85\x7c\x3c\xc3\x0f\
-\x24\x04\x7e\x1c\x48\x60\x05\x7c\x50\x06\x5d\x75\x57\x40\x41\x7b\
-\xbd\x00\x1e\x7c\xfe\x0a\xf4\x99\xd8\x4f\x2d\xea\x42\xbd\xb2\xd6\
-\xbf\x2c\xf6\xa9\xef\xc1\xe5\xa5\xd6\x2b\x80\x9a\xfa\x63\xda\x0f\
-\xa0\x75\xb0\x8a\x2c\xcf\x93\xb4\xca\xdf\x59\x82\x51\x36\x60\xc1\
-\x16\x40\x26\x20\x5b\xca\x00\x5f\x17\x90\xaf\x0a\x2a\xad\xaf\xf1\
-\x87\xbe\xaa\xfe\xb9\xfc\x5d\xa3\xf7\xcf\x1b\x65\x2f\x05\xc0\x8c\
-\xaa\xfa\x96\x0a\xb8\x40\xf5\x3e\x92\x0d\xbc\x1d\x24\x8b\xe9\x64\
-\x57\xe4\x88\x45\x90\x2f\xce\x00\xf8\x45\xaa\xe2\xdc\x1f\xab\x21\
-\x1f\x93\x10\x33\x13\x33\x82\x7b\x0e\x15\x9f\x06\x3d\x75\x24\x81\
-\x66\x03\x6a\xf5\xde\x68\xc7\xb5\xca\x1f\x89\x60\x6e\x0b\x7f\x14\
-\xfe\x8d\x5a\xa6\x62\xb2\x6f\x05\xf0\xd6\x40\x5e\x83\x3e\xed\x80\
-\xef\xb2\xdf\x4a\xea\x5f\x5b\x7d\xa0\x00\x12\x58\x80\xc4\x3d\x09\
-\x24\x9f\x0f\xd0\xa6\x06\x7c\x07\xb5\x11\x01\x60\x50\xd8\x91\x40\
-\x08\x02\x57\xad\xc5\x42\x02\xa2\xfb\x55\x9f\x36\x48\x21\xbe\x07\
-\x7f\xe1\x2a\x31\x4c\x63\x55\xd0\x81\x9e\x02\x18\x47\x8a\x60\xab\
-\x7a\xbf\xdd\x20\x89\xa9\xec\x42\x7c\xab\xd2\x23\x68\xcf\x90\xc5\
-\x0b\x2d\x00\x4b\x59\xbc\xf6\xd9\xa0\xe5\x27\x28\x80\x61\xf8\xb7\
-\xf2\xf5\x04\xe6\x31\x80\x90\xa0\x37\xd5\x49\xfe\x5b\x1e\x1d\xab\
-\xff\x72\x5d\x13\xfa\x8e\x08\xac\xf3\xfc\x2c\xb6\xec\xee\x8b\xd5\
-\xbe\xee\xed\xd7\x7b\xfd\x2a\xf9\xd3\xce\xe4\x20\xcf\x0b\xb8\x15\
-\xc0\xaf\x3d\x60\xab\x05\xf0\x79\x00\xb7\x01\xd2\xc0\x9e\x34\x6c\
-\x35\x60\x8d\x1c\x3c\x54\x94\xc2\x89\x68\x0f\x04\x48\x40\x02\x09\
-\x54\x22\x70\x2e\x4d\x40\x0a\xa9\x57\x0a\xa4\xdb\xaa\xa0\x46\x33\
-\xd3\x09\x55\x90\x47\xad\x3f\x00\xec\x65\x43\x0d\xc4\xf7\xa0\x7f\
-\xb7\x3b\x15\x00\x5e\xeb\xc9\x5c\x21\xda\x83\x48\x3a\xc2\x5f\xd3\
-\x05\xe0\x27\xca\xf8\x33\x64\xc2\xbb\x7f\x3f\xc3\xce\xf7\x60\x03\
-\xbc\xe2\xd7\x32\x12\x49\x20\x03\x41\x6c\xf4\xe4\x07\x8f\x06\x78\
-\x48\xe9\x11\xf4\x32\x13\xab\x2d\x81\x5d\xe7\xeb\xad\x4b\xf4\x9b\
-\xc4\x6f\x5e\x9f\x7d\xe7\x1f\x38\x0d\xa8\xde\xeb\x86\x86\xac\x05\
-\x7c\x0e\xbc\x02\xec\x04\x92\xbd\x76\x02\x18\x86\x74\xa4\xa9\x86\
-\x91\x12\xc0\x6d\x07\x24\xf5\xcf\xa8\x02\x30\x0f\xe8\x80\x1f\x49\
-\x80\x1b\x89\x74\x01\x21\xe4\x13\x4c\x1b\x36\x61\x44\x0c\xb9\x75\
-\x00\x50\x19\x34\x45\xc0\xfb\xa0\x9f\x78\x5c\x79\x23\xd8\xd1\x2a\
-\x8c\xaa\xff\x65\x47\x01\x8c\xe4\xfa\x4d\x92\x78\x9e\x51\x9e\x9e\
-\x01\xf4\x67\x29\x02\x7e\xd1\xbf\xb7\x0e\x00\xa9\x10\x81\x10\xb3\
-\x2e\xc1\x1a\x63\x0e\x40\x7d\x7f\xde\x6d\x01\x8f\x24\xfa\x96\x0a\
-\xb0\x70\xdd\x40\x5f\xab\xb8\x5a\x78\xce\x45\xe2\xe7\x96\xe2\xc7\
-\x76\x9e\xe4\x12\xf4\xe5\xbe\xbf\x0f\xb2\xdf\x60\x32\x30\x41\x8f\
-\x5f\x64\xa3\xbf\xcf\x7d\x10\xd8\x59\x81\xd2\x15\xa8\x04\x60\xc1\
-\x0e\x84\x99\x81\x44\x83\x80\xd1\xc6\x44\xd0\xa9\x01\x00\x7c\x0d\
-\x24\xa7\x9e\x04\x86\x04\x50\xaa\xff\x4a\xe2\x07\xf0\x33\x17\xe1\
-\x05\x6d\xc1\xda\x02\xbc\xc0\x6f\xca\xca\x02\x6c\xa8\x81\xcb\x00\
-\xe0\x97\x02\xf2\xbd\xd0\x70\x65\x2f\xca\xe7\xe9\x03\x15\xff\x81\
-\xae\xc1\xc3\x5d\x80\xcf\x26\x8f\xc7\xb2\x05\x3f\xf3\x26\x97\xf5\
-\xef\x33\xb1\x30\xb1\x70\x00\x36\x06\x7d\x08\x6a\xde\x6e\xc9\xe1\
-\x10\x4e\xac\xfa\x0e\xfa\x6a\x03\xac\x0f\x0b\x57\x0a\x20\x43\x2f\
-\x3f\x97\xea\x8e\x47\x85\xcf\x70\xba\xec\x5a\xf6\x33\xf7\xa9\x7f\
-\x0a\xe1\x5f\x0a\x5e\x3d\x95\x2c\xac\x23\x01\x81\x8e\x00\x5a\x01\
-\x1b\xcc\x09\x44\x4b\xb0\x41\x02\xf5\xdf\x84\xe0\xb1\x2a\x00\x5d\
-\xd4\x03\xb6\x0c\x3b\x45\x32\x41\x46\x40\x03\xd5\x80\xf7\x46\xe0\
-\x47\x92\x70\xa1\x97\xe0\xb7\xea\x42\xb7\xd5\x00\x7e\x2c\xed\x81\
-\x7c\x43\x05\xec\x81\xfc\x6d\xa7\xe2\xef\x75\x10\xf0\x7f\x1c\xbf\
-\x61\x6f\xc7\xd0\xf4\x34\x05\x20\x2f\xc8\x03\x1e\xeb\xf7\xc7\xaf\
-\xcd\xea\xe1\x17\xed\x0c\xdc\x36\x3d\xd7\xa5\xfe\x35\x08\x1c\x11\
-\x03\x6d\x03\x1e\xc3\x3a\xbe\x96\xa4\x7f\x60\x03\x64\x06\x89\x9f\
-\xc1\x06\x38\xf8\x97\xfd\xea\xeb\x76\xdf\xe6\x24\x30\x97\x3d\x0c\
-\x9b\xcc\x67\x2a\x2a\x80\xd6\xad\x48\x4c\xfd\x19\xc2\x3f\x0e\xe0\
-\xc4\x94\x7e\x64\x03\x98\xc7\x79\x40\xda\xb2\x04\x0c\x2d\x43\x83\
-\xd6\x21\x07\x72\x88\x0a\x00\xaf\x6d\xf0\xf5\xe0\x6b\x1d\xa5\x32\
-\xce\x53\x00\x00\x20\x00\x49\x44\x41\x54\xab\x01\x04\xff\xee\xbd\
-\xb9\xbc\x88\xde\x7f\xe4\xf7\x2f\x50\x69\x0d\x64\xff\x65\x43\xea\
-\xd3\x00\x90\x9e\x01\x5c\x06\x2a\x43\x77\xda\x80\x02\x33\x04\x5b\
-\xc4\x32\xbf\x78\x12\xf0\x59\x0a\xe0\x19\xe4\x20\x77\xd8\x0a\xac\
-\xfe\xed\xf0\x6b\xe9\x5a\x81\x8b\xc4\xe7\xbe\xc5\x17\x00\x3f\x9e\
-\xc8\xe3\xb1\xfc\xef\x5a\x77\x0a\xbe\xde\x0a\xe0\x67\x38\x04\x24\
-\xf7\xfb\xfd\x19\x92\x41\x7f\xe0\x44\x4b\xfb\x5d\x01\x68\x90\xfd\
-\xcb\xc3\x41\x98\x34\x0c\xfe\x40\x8a\x8f\x19\x80\xab\x00\x7f\xe0\
-\x60\x90\x3f\x5c\xde\x77\x04\x60\xb0\x7e\x20\x97\xcf\xd7\x30\x2b\
-\xa0\xb0\xee\xc0\xed\x00\xf7\xdb\x1a\xc6\xee\x40\xbd\x9e\x20\x60\
-\xe4\x60\x11\xe0\xc7\x25\x1b\x36\x41\xb6\xec\x41\x04\x13\x71\x6f\
-\x09\x3a\x59\x1f\x40\x7f\x19\xc8\x7e\x81\x2f\x2e\x8d\x80\xbe\xa3\
-\x00\x7e\x6c\x28\x0c\x3d\x18\xb0\xfd\x84\xcf\x93\x73\x08\xbb\x5b\
-\x01\x3c\xb3\xe2\x9f\xe9\xe3\x1f\xf9\x3c\x09\xef\x5f\xf5\xff\xeb\
-\xa3\x10\x81\xf8\x48\x70\x94\xff\xb9\x93\xfe\xcc\xc5\x9b\x77\xa0\
-\xcf\xfd\xdc\xfd\xaa\x6f\x3f\x17\xf0\xcf\xfd\x6b\xb3\xd0\xcb\x9f\
-\x9b\xef\x2f\x47\x80\x73\x39\xd6\xab\xdf\x4a\x7a\xb4\x82\xd1\x3b\
-\x1b\xcb\xff\x83\x00\x88\xab\x8c\xd7\x50\xf9\xad\x07\x7f\x0d\x01\
-\x41\x09\xf8\x52\xe1\x2e\x10\x44\x02\xa0\xa5\x01\x51\xa7\x06\xa7\
-\xf5\x08\x71\x52\x08\x08\x69\xd0\x3e\x0c\x5d\x01\xe1\xb1\x32\xd8\
-\x54\x03\xda\x00\x5e\x9d\xdc\x96\xec\xcf\x2d\x03\xa8\x60\xa7\x8d\
-\x6a\xdf\x55\xee\x1b\xb3\x02\x17\xee\xe5\xfa\x65\x23\xf0\xfb\x31\
-\x50\x0b\xba\x01\x6a\xf4\xfa\x97\x41\xba\xaf\x83\x6f\xc6\x67\x2a\
-\x80\x57\x56\xfa\x33\x9f\x77\xfc\x7d\xb9\xab\xfc\x82\x8a\x40\x64\
-\x19\x08\xaa\x6d\xbb\xe5\xb7\x68\x99\xba\x1b\x05\x7e\xb9\xce\xe3\
-\xd7\xf7\xac\xc6\x72\x47\xa4\x60\xd5\xc3\x2f\x2a\xa0\x00\xba\x12\
-\x01\xee\x02\x5c\x42\xbd\x9a\xec\xa3\xec\xf7\x7b\x73\xbf\x10\x89\
-\x61\xda\x0f\x41\xac\x05\xc0\x1b\x0b\x7c\x6a\x30\x17\x27\x02\x0b\
-\xf8\x91\x04\x26\xcc\x12\x94\x48\xa6\x60\x05\x30\x1c\xa4\x41\xcb\
-\x31\xc3\xbf\x13\x06\x8b\xd8\xbf\xd6\x48\x04\xe1\x6b\xe9\x02\x43\
-\xcc\x05\xca\xd7\x33\x24\x8a\x60\x03\x6a\xd2\x99\x42\x55\x47\x25\
-\x80\xa3\xc0\x28\xeb\x57\xa0\xa4\x5e\x05\x8c\x42\x42\x57\x00\xab\
-\xd4\x7f\x03\xe4\xba\x33\x27\xc0\xd0\x2d\x70\x85\x91\x4e\x23\x8f\
-\xcf\x10\xc0\xa9\x59\x80\x47\x86\x7f\x04\x02\xcc\xa3\xff\xd6\x6d\
-\x35\x62\x7d\xeb\x8f\xa4\x2a\x02\x21\x25\x95\x85\x04\xfa\xaa\x0f\
-\xa0\x97\xdc\x4f\xe2\x75\xe1\xdf\xa0\xfd\x27\x70\xa4\x57\x47\x06\
-\x73\x3b\x05\xd8\xaf\xab\xf4\xf7\x54\x7f\x2e\xd5\xde\xda\x81\x9f\
-\x1e\xf2\x41\xf0\x57\x17\x17\xe1\x1e\x05\x9c\x57\xa9\xff\x84\x83\
-\x3f\x0a\x32\xde\xfa\xea\x8f\x16\x00\xe7\x01\x18\x94\x40\xb5\x02\
-\x53\xa9\xfc\xfe\x77\x65\xb0\x02\x39\xac\x1d\x40\xa5\x40\xbd\x95\
-\x58\x75\x22\x0c\xfe\x2d\x6f\x9a\xc0\x60\x92\xe8\x58\x0d\x44\x52\
-\x58\x49\x7f\x5e\x5b\x04\x22\x07\xa6\xf4\x00\x1f\xf9\xf9\x91\x35\
-\x20\xa8\xba\x23\x6b\x60\xe1\x1f\xae\x19\xc0\x80\x14\x36\x93\xfe\
-\xc1\x62\x22\xde\x90\x44\x77\x9a\xf4\xe9\x19\x01\xe0\x23\x01\xdd\
-\x39\x1f\xbf\x6d\x0b\xf6\x49\xc5\x21\xef\x04\xe0\xdd\x80\xb4\x1c\
-\x49\xc9\x9e\x03\x30\x99\x30\x8c\xdb\x6a\x20\x04\x2e\x3b\xea\x14\
-\x1b\x30\xa8\xf6\xdd\x4a\xbc\x7a\x68\xc7\xbc\x0c\xf8\xd4\x56\x9e\
-\xb5\x50\xcf\x66\x20\x83\xd8\xda\x0b\xf7\x62\xda\x5f\x8e\xee\xf2\
-\x09\x44\x81\xa2\x86\x95\xbf\xf6\xf1\xa5\x1c\x3e\x14\x87\x80\x40\
-\x05\xf0\x60\x5d\x80\x83\xd0\xbf\xf9\x93\x34\x59\x9f\x4a\xef\x3f\
-\x81\x2a\x48\xb9\x29\x80\x1a\x06\xa6\xd0\x26\xa4\xc1\x68\xb1\x05\
-\x65\x30\xf5\x44\x10\x15\x80\x44\x52\xd0\x5e\xfa\x0b\x6f\xbd\x0e\
-\x40\x67\xe9\xf3\x80\xaa\x04\x36\xee\x77\xb2\x7f\xa3\x4d\xf8\x06\
-\x5e\xfe\xb2\x93\x01\xfc\x18\x78\x7f\xdb\x58\x1f\x30\xb2\x04\x72\
-\xa3\xf5\xf8\x8c\x0c\xe0\x28\xb7\xc8\x1d\x64\x20\x4f\x94\xfa\x23\
-\x92\xf0\xd3\x6c\x62\xf8\x27\xe5\x14\xbc\x96\x03\x28\x49\x32\xca\
-\xdd\x38\xae\x12\x0b\x17\x89\x9f\xa1\x7f\xdf\x3f\x77\xbe\x9f\x51\
-\xf6\x5f\xc3\xd2\x5c\xc8\x02\x56\x07\x88\xce\x75\xb2\xaf\xf3\xfe\
-\xb8\x07\xc1\x68\x73\x92\xda\x8d\xb0\xb6\x78\xc7\x3d\x3a\x92\x00\
-\x84\x7f\x1c\xc0\x9f\xf0\x11\xf3\x2c\x04\x5e\x51\x00\xe4\x79\x40\
-\xee\xe7\x03\x04\x67\x04\x72\xbf\xa0\xa8\x0e\x1e\xa1\x72\xd8\x52\
-\x01\x06\x5d\x0b\x6d\x44\x80\x61\x60\x55\x06\x4e\x04\x65\xe2\x2f\
-\x06\x84\x92\x97\xcf\xc7\xd7\xf4\x26\x3d\x70\xb7\x94\x80\xdf\xb7\
-\x0d\x69\x8f\xb2\xff\xb2\x31\x0f\x30\x02\x7b\x54\x09\x1d\x20\x0e\
-\x5a\x82\x55\x28\x78\x9f\xf1\x9e\x9e\x59\xed\x5f\xe5\xe3\x71\xa3\
-\xdc\x63\x0b\x7e\x76\x16\x00\xd5\xca\x2f\xbd\x1a\x48\x42\x9a\x94\
-\x68\x2e\x91\x72\xe7\xeb\xb9\x03\x3d\x4b\x2e\xe3\xba\x38\xa8\x03\
-\x2b\xf3\xf4\x3a\x58\x97\x3f\x97\x65\xba\x0e\xf6\xb9\x4d\xef\xd5\
-\xd3\x80\x36\xf6\x1e\xac\xb2\xff\xda\x48\xa0\x12\xc0\x72\x3d\x71\
-\x3f\xc8\x23\x30\xf7\x9f\xb4\x5f\x84\x33\xca\x00\x70\x18\xa8\xb3\
-\x03\x12\xaa\x2f\x74\x05\xa6\x04\x9d\x05\xed\x09\x40\xa0\x33\x50\
-\xed\x40\x2e\x6a\x01\xc9\xc0\x60\x06\x01\x17\x1c\x5d\x80\xbc\xbc\
-\xe2\x5f\xfa\xd1\xe3\xd8\x11\xc0\x16\xa1\x0c\x6c\x82\x2b\x81\x25\
-\xe4\x93\xb5\x74\x27\xd9\xa9\xf6\xa3\x9c\x20\xbc\x1f\x09\x21\xae\
-\x0d\x18\x29\x80\xb7\x41\x1b\xd2\x36\x5a\x81\x6f\xc1\x12\x24\xbe\
-\xc3\x94\x3f\xc1\x02\x1c\x05\xde\x51\xf9\x7e\x6f\x85\x3f\xf2\xf7\
-\x36\xe2\x58\x2a\xfd\xf2\x9f\x92\x56\xe0\x4b\x51\x02\x46\xca\x4b\
-\x0e\x20\xe5\xec\xbc\x7e\x10\x08\x15\x00\x0f\x64\xff\x60\xd5\x9e\
-\x83\x5b\xfa\x03\x25\x59\x74\x39\xac\xc3\xda\x62\x9e\x6a\x05\xe0\
-\xfe\xa2\x02\x3c\xed\xb7\x3e\x00\x64\xdc\x46\x2c\x84\x7e\x90\xfa\
-\xfb\x73\x02\x05\x90\xe0\x04\xb2\x44\x1b\x3b\xe9\xc4\xdf\x41\x0c\
-\x02\x07\x5d\x81\xd1\xa8\x70\xfd\xf7\x12\xa8\x80\x14\xb6\x1c\x4b\
-\x21\x98\x8c\xbb\x14\x49\x58\xbf\xc0\x81\x10\x90\x08\xe0\xb9\x56\
-\xfc\xbc\x90\x46\x77\xed\x5e\xc6\xab\x3b\x56\xf8\xa8\x04\x6e\xa9\
-\x80\x08\xea\xcb\xce\xc7\xa2\x02\xb8\x70\x39\x8c\x21\x00\x7d\x34\
-\x3c\x34\x5a\x32\x4c\x7b\xde\xff\x78\x8c\x7f\x5a\x01\x7c\xc6\x5e\
-\x01\x72\x5a\xe2\x8f\x3f\x2e\xb0\x08\xc8\x81\x8e\x6b\x01\x84\x8c\
-\xa4\xbe\x5e\x2c\x80\x26\x21\xca\x1f\xad\xc7\x2f\x79\x19\xcd\x75\
-\xfd\x38\xaa\xfc\x9e\x07\x58\x18\xdb\x5d\xed\xca\x33\xaf\x77\xe9\
-\xa9\xfd\x7d\x2b\x24\x30\xd7\xc4\x7f\x91\xfd\x46\xfd\xd6\xe1\x3e\
-\xe9\xe7\x6d\x4b\x1d\xa6\xfe\xbe\xd3\x2f\x0b\xf4\xd5\x51\xfe\x0f\
-\x96\xf0\x26\xde\x9e\x07\x60\xac\xfe\x38\x26\x2c\x30\x01\xa8\xfd\
-\xa4\x60\xd2\xed\xc9\xc1\x44\x44\x69\xee\xb3\x80\x04\x36\xa0\xfe\
-\x9d\x17\x20\x01\x0e\x84\xa0\xe0\xed\x47\xca\x40\xd6\x36\xa0\x7a\
-\x9a\xea\xff\x79\x6d\x09\x44\x1a\x11\xf8\xbd\x37\x59\xcf\x0d\x30\
-\x13\xfd\x94\xbe\x93\x60\x1b\xfd\xfd\x51\x6b\x70\xcb\x12\x74\x03\
-\x40\x21\x38\xdc\xac\xfc\xa7\x90\xc9\xf7\x10\xc0\xaa\x13\x40\x4f\
-\x92\xf9\xf7\x4a\xfc\xd1\xe7\xc9\xe0\xfe\x22\xf9\x5b\xff\x5f\x28\
-\x2d\x55\xbf\x5a\x02\x59\x5e\xa7\xbc\x90\x80\xe4\x75\x6b\xcf\x72\
-\xb0\x01\x4a\x66\xdc\x57\x7c\x5c\xb4\x63\xbe\x1f\xdf\x0c\x83\x3b\
-\x4a\x94\x66\xa8\xf8\xf0\xc0\xcd\x43\xa9\x11\x01\xd3\x5c\xce\xb1\
-\xcf\xd0\xf6\x2b\xdd\x86\xac\xab\xa1\x1d\x1f\xfc\x71\xe0\xe3\x12\
-\x5e\x1e\x8c\xe8\x72\x98\x05\x48\x61\x98\xa6\x2e\x23\x0e\xd3\x81\
-\x52\x3e\x71\x35\x20\x44\xeb\x49\xc1\x2e\x1c\x84\xd9\x01\x49\xeb\
-\xe1\xa4\xee\xa1\x61\xff\x82\x01\x01\x08\x54\xfd\x15\x11\x84\x96\
-\xa0\x08\x82\x5f\x7a\x22\xb8\xc8\xc0\x02\xc8\x3a\x0f\x20\x59\x77\
-\x05\xfc\x7d\x18\xfe\x5d\x98\xc8\x64\x3d\x9e\x3b\x1a\x1e\xe2\x8d\
-\x4e\x43\x1e\x2d\x7c\x18\x55\x7e\xa2\x7b\x9b\xee\x0f\x67\x00\x74\
-\x47\xf5\x3e\xab\x06\x74\xf0\xf7\x8e\xfe\x9d\xb4\x41\x08\x0a\x33\
-\x00\xa9\x02\x5f\x2a\x11\x34\x3b\x60\xa4\x69\xb1\x02\x26\x1f\x4d\
-\xf2\x57\x89\x9f\x07\xf7\x76\xf6\xe0\xeb\x5e\xc3\x44\x5f\x52\x38\
-\x5c\xbb\xed\x0c\x5c\xc9\xa2\xa4\xfb\x5e\xf9\xbb\x1d\x84\x79\xae\
-\xf3\x0a\xee\xd9\xa7\x12\x86\x25\x90\xc9\x15\xf8\xd2\x2a\x7f\x1a\
-\xa4\xf0\x8c\xfb\x01\x94\x1f\xa6\x50\xaf\x00\xea\xde\x00\xd2\x2f\
-\x12\x12\x18\x13\xae\x09\xbf\xf6\x83\x42\x92\xc3\x6c\x40\x2e\x56\
-\x80\xa0\x7d\x18\x80\x9f\xc0\x06\x24\x3b\x48\x00\x48\x04\xd2\xa6\
-\x03\xab\x8a\xe0\xb2\xd4\xb6\x02\x39\xd8\x00\x1a\xc8\xfd\xcd\x70\
-\x70\xe7\x9e\x45\xc0\xcb\x18\xf4\x6f\x37\x56\x0a\x4a\xb0\x0b\xbb\
-\x95\xff\x9e\x9e\xda\x1d\x19\xc0\x5e\xdf\xfe\x11\x89\x2f\x3b\x12\
-\x5e\x0f\x92\xc2\xba\xea\x63\x95\x73\xb9\xaf\x25\xfc\xd3\x72\xad\
-\x40\x0a\xb6\x68\x81\x64\x24\x93\x91\x66\x86\x45\x39\xae\x06\x38\
-\x2c\xd4\xd1\xd6\xae\x2b\x63\xbb\x6d\x99\x2e\x66\x01\x57\xf0\xfd\
-\x51\xfe\x43\x28\x48\x56\x2a\x3e\xee\x20\x5c\xc8\x81\x97\xea\x8f\
-\x6b\x0f\x7c\xdc\x97\x14\xc0\x0a\xbe\x19\x81\xbf\xda\xea\x7b\x60\
-\x01\x08\x2c\x00\x03\xf0\x99\xd7\xb2\x9a\x81\x04\x04\x07\x84\x02\
-\xf0\x65\x82\xb6\xa0\xd5\x73\x49\x9b\x02\xc8\x3d\xf0\xd3\xa8\x25\
-\xb8\x41\x00\x8c\x7b\x10\x38\xe8\xfd\x39\x10\x01\x67\x22\xfa\x81\
-\x60\x87\x6b\x09\xa0\x7e\x03\x0b\xe0\x0c\x77\x91\xb6\x78\x88\xa1\
-\x45\xd8\x05\x80\x1b\xa1\xa0\x33\xe7\x5b\xc8\x07\xaa\x47\x09\xd5\
-\x7f\x94\x1f\x3c\x54\xf9\x69\x53\x05\x3c\x4c\x00\xfc\x60\x8a\xbf\
-\x07\xf2\x23\xef\x97\x8d\x7b\xfd\xf1\x7a\xcd\x02\x08\x29\xa5\xd2\
-\xff\x47\x52\x68\x61\x60\x21\x81\xa4\xa4\x16\x2a\xbe\x20\xb8\x73\
-\xbf\x06\x5f\xda\x7c\xfe\xfa\x1e\xf4\xfc\x21\x0f\x60\x73\x79\xef\
-\x4a\xe0\x0a\xb2\xff\xda\xa9\x00\xdf\x56\xdc\x17\x17\x4d\x31\xf8\
-\x83\x1d\x7f\x92\x2b\x02\xeb\x57\xf1\x39\xf0\x13\x8d\x5b\x81\xae\
-\x02\x24\x10\x41\x82\x76\x20\xb6\x05\x93\xc0\x82\x21\x81\x90\x0f\
-\x07\x7e\xca\xd7\x53\x49\xc1\x7a\x2b\x90\xa6\x6d\x15\x90\x20\x37\
-\x48\x23\x2b\x10\x02\xc2\x6e\x60\x09\x82\x3f\x61\x22\x4e\x08\x6a\
-\x69\x9e\x9e\xe1\x3e\x05\xef\xcf\x31\x0b\x88\x00\x07\x19\xf4\x06\
-\x4a\x40\x07\x76\x60\x92\x1e\xd4\x3f\xc3\x7d\xd9\xd9\x40\xf4\x29\
-\x0b\xed\x9f\x43\x00\x77\xed\x0e\x24\x27\xdf\xb3\xe5\xed\xd3\x00\
-\xe8\x7b\xef\x69\x33\x00\x1e\x02\x26\x52\xfa\x2f\x5c\x5b\x25\x02\
-\xbf\xd6\xa4\x03\x15\xa0\x21\x0b\xd8\x0b\xfb\xf2\x52\xd1\x53\x7f\
-\x2a\xd0\x22\xfb\xe7\xe6\xe5\xeb\x58\xef\x35\xc8\xfe\x6b\x49\xfb\
-\xaf\x83\x6d\xc5\xb4\x93\xe7\x09\x8a\x54\xad\x84\xda\xc2\x39\x57\
-\x00\x6c\xcb\x69\xe8\xb8\x8b\xaf\x8c\x1e\x30\x0c\x14\x87\xcd\x22\
-\x09\x74\x2b\x06\x51\x05\xf8\x24\xa1\x83\xde\x27\x07\x27\x00\xbd\
-\x3f\xcf\x8d\x00\x52\x54\x01\xba\x0e\x07\x2b\xd8\xad\x59\x1e\xd9\
-\x7a\x96\x50\xfd\x23\xe0\xfd\xfa\x12\xc0\xef\xe9\xe6\x34\xca\x02\
-\xa4\xbd\x1e\x81\xde\x83\xc1\x68\x09\x84\x97\xaf\x21\x85\x40\x50\
-\x36\xba\x07\xdd\xf4\xd5\x53\x1f\xfc\x72\x05\x70\x14\xf0\xb2\xe9\
-\xd9\xf7\x93\xfe\x78\x68\xee\xfe\xa1\xba\x5c\xea\x3d\xce\x00\xbc\
-\xd7\x30\x10\x09\x81\xe9\x7d\x21\x01\x49\x64\x9d\x0a\xb0\xa6\x02\
-\x8c\xcb\xa2\x1d\x6e\x6d\x3c\xf1\xc1\x1d\x0b\xab\xf6\x6c\x98\xf8\
-\xf7\x7b\xf5\xcf\x90\x07\x5c\x7b\xc2\x28\xa0\xb7\xb0\xe9\xa8\xe0\
-\x24\xaa\xf7\xf9\xb1\xf2\x0b\x0c\xd3\x20\xe8\x47\x1b\x78\x96\x3e\
-\xbc\x67\x01\x71\x4c\x1e\x83\xf3\x6e\x99\x70\x58\x2e\x5c\x55\x40\
-\x49\xed\xd3\xa5\x80\x3f\x3e\x03\xf8\x7d\x2e\x00\x6d\x40\x04\x7e\
-\x55\x01\x02\xf9\xc2\x28\x03\x10\xb0\x17\x97\x36\x1c\x24\x02\xd5\
-\x7f\x04\xfe\x29\x76\x05\x06\xc1\x60\x6c\x19\xe2\x6b\xdd\x03\xfd\
-\xc0\x12\xa4\x41\x88\x68\xb2\x9e\xf8\x4b\x9f\xb3\x1f\xf7\x43\x73\
-\x00\xcf\x96\xf8\xb7\x08\x61\xeb\xf5\xd8\xf7\xa3\x02\xf0\xc0\x4f\
-\x8b\xe0\x4f\x94\xc8\xc8\xc8\x48\x68\x22\x2d\xc0\x5f\xee\x7e\x90\
-\x90\x91\x4d\x46\x92\x8d\x4c\x4b\x20\x68\x1b\xd5\xdf\x43\x3d\xf4\
-\xfe\x9d\xec\x8f\xf7\x10\xec\xa8\x04\xae\x3d\x09\xf0\x5c\x6d\xc1\
-\xb2\x54\xf9\x5a\xd7\xf8\xa7\x28\xf9\x71\xc5\x9f\x34\xd0\x70\xd8\
-\xc8\x43\xa8\xa9\x80\xc9\xc6\xd5\x5f\xa2\x15\x40\x0b\x00\x76\xb6\
-\x7b\x0e\x85\x33\xa5\x60\x03\xf0\xd9\x20\x34\x9c\x82\x0d\x08\x6a\
-\x40\x46\xe0\x37\x5a\xed\x71\x58\xaf\xa7\xd0\x2e\xbc\x10\x89\x32\
-\x78\xff\x22\xfd\x69\x44\x04\xb2\xee\x10\xc8\x20\x18\x7c\x0b\xb3\
-\x03\x3f\x63\xc8\x27\xdb\xe0\x8e\x8a\x01\x03\x41\xff\x7a\x34\x7a\
-\x7d\x79\x19\xf8\x9f\x4a\x00\xb7\xc0\x2f\x07\xdb\x77\xb7\x5e\xcb\
-\x86\x82\xd8\x53\x00\x8b\xb4\xcf\x40\x02\xb9\x54\xfc\x56\xfd\x1d\
-\xf8\xf5\x3d\x2c\x8b\x0d\x98\xfd\x90\x0d\x9f\xf6\xb3\xb0\x03\x2f\
-\xb7\x45\x3b\x30\xdc\xd3\xf2\x00\x0b\xab\xf9\xca\x44\x9f\xe9\xc0\
-\xfb\x5f\x4b\xda\x7f\x1d\x1c\xf2\x09\x27\xfa\x40\x9b\x0d\x53\x7f\
-\x7c\xae\x92\x3f\xf8\x6b\xa6\xc1\x14\x20\x85\x29\x40\xea\xd3\x7f\
-\xde\x20\x81\x69\x60\x03\xba\x65\xc3\x09\xf6\x20\xa4\xde\x02\xd4\
-\x3c\x60\x6a\xdd\x80\x3a\xf2\x7b\x05\x05\x20\x21\x40\xc4\x3c\xc0\
-\x2b\x7f\x0e\xd7\xf0\x4c\x5a\x40\xeb\xc1\x1f\x12\x00\x8d\x54\x40\
-\x20\x02\x07\xfb\x5b\xf9\x5c\x0b\xa1\x21\x66\x01\x68\x19\x52\x20\
-\x90\x8b\xf4\xfb\xf3\x23\x71\x28\x28\x86\xcb\x59\x84\x7d\x3e\x01\
-\x74\x39\xc0\x56\x85\x4f\x07\x7a\xf4\x72\x38\xc4\xdb\xff\x78\x0a\
-\x76\xa0\xbf\x36\x68\xf7\x35\x12\xb0\x12\x06\x3a\xf0\x5b\x10\x98\
-\x6b\x16\x60\x93\x51\xba\x10\x99\x72\x9b\xcd\xaf\x2b\xf7\x6c\x2d\
-\xfb\x93\x41\x6b\xcf\xfb\xfa\x73\xab\xf6\xd0\xf3\x5f\xcb\xfe\x2b\
-\xe4\x04\x3a\xd8\x79\x38\x6c\xd4\x51\xbe\x19\x75\xde\x1f\x07\x7f\
-\xb4\xf7\xfd\xbe\x15\x57\xb2\x1d\xf0\x23\xf0\xa1\x0d\xe8\xe3\xe9\
-\x04\xff\x1e\xe6\x01\x5d\x26\x10\xf3\x00\x9f\xfb\x9f\x61\x56\xc0\
-\x55\xc9\xa5\x55\x7c\x41\x42\x50\xd8\x83\xd0\x06\x03\x44\xda\xe7\
-\x01\x09\x86\x85\x92\xf4\xa3\xca\x4b\xdf\x3f\xf5\x60\xa7\x40\x08\
-\x1d\x11\x6c\xa9\x80\x40\x04\x18\x1a\x46\xe0\x4b\x98\x1b\xc0\x6c\
-\xe0\x7f\x1b\x58\x04\x91\xa6\x0c\x86\xa5\xef\xa9\x24\xc0\x4f\x1f\
-\x05\xd6\x13\x52\xfe\x48\x3b\x70\x04\xfe\x91\x0a\x18\x83\x7d\xf4\
-\x9e\x56\xf1\x17\xd9\xdf\x72\x00\xa9\xf6\x40\x0b\x29\x18\xa8\x00\
-\x23\xa3\x44\x36\x5d\x49\xb2\x51\xf6\x6a\x2f\x73\xa9\xfa\x73\x08\
-\xfd\xbc\x0d\x98\x83\xec\xcf\x20\xfb\xf1\x81\xb3\xfd\x78\x74\xb8\
-\x6f\x51\x86\xbb\x0e\xe7\x75\xe8\xe7\x19\x11\x58\x00\xb6\xb6\xfc\
-\x17\x15\x00\x5b\x39\x16\xae\x80\x6a\x1a\x01\xbf\xfc\x7c\xb1\xfa\
-\x0b\xed\x2b\x00\x02\x0b\x40\xa1\x2b\x90\x70\xc5\x20\x1e\x43\x86\
-\x64\xc0\x60\x51\x46\x81\xa0\x86\xeb\xd0\x05\x48\x5b\x9d\x80\x42\
-\x0a\xab\x4a\xef\xcc\xf4\x16\x08\xe1\x96\x1d\xa0\x01\x11\xa4\x40\
-\x04\x29\xa8\x86\xad\x6c\x20\x4e\x19\xda\x56\xd8\xf7\x0c\x12\x90\
-\xe7\x2b\x00\xba\xe1\xc5\xf7\x7c\xbc\x1c\xa8\xea\x72\x53\xd2\x8f\
-\xed\xc4\xd6\x7b\xb0\xe2\x2f\xb2\x5f\x2b\xc8\x8d\xde\x29\x91\x92\
-\x01\xe0\x97\x2c\xc0\x0a\x1d\x18\x59\xe9\x08\x98\x2a\xa9\x1f\xb1\
-\xdd\x2d\xd3\x1d\x05\x7d\xb9\xdb\xb2\x6b\xb8\x77\x1f\x5d\x9b\x12\
-\xe0\x2b\x75\x07\x8b\xfa\x9e\x83\xa4\x64\x00\x7e\xe6\xbe\xdf\x3f\
-\x81\x05\xa8\x55\x3f\x80\x5f\x76\x36\x01\x19\x2e\x06\x82\x0d\x42\
-\x57\xc0\x87\x6b\x54\x03\x8e\x2b\xbf\x26\x1c\x13\x2e\x0a\xc0\xd7\
-\x1f\xb8\x0d\x70\xd0\x0b\x0c\x03\x39\x09\xc8\x46\xf5\xaf\xd3\x85\
-\x12\xce\x29\x10\xd8\x8b\xe0\xe2\x36\x08\x42\xbf\x48\x00\x35\xfd\
-\x1f\xd8\x01\xec\x08\x74\xd3\x81\x00\xfe\x1f\x00\xe8\x34\xb0\x02\
-\x08\x7c\x9c\x05\x98\x06\x33\x00\x6f\x7b\x95\xff\xd9\x24\xf0\xa4\
-\xfd\x00\x64\xa3\x1d\x18\x41\x9d\xa0\xde\x1d\x7d\xcf\x56\x35\x3f\
-\x42\x0a\xf1\x5e\x2a\x53\x80\x98\xf6\xa7\x02\x7c\x01\xe0\x2f\x80\
-\x77\x05\xb0\xd8\x82\x44\x13\x19\x7d\x90\xd1\x44\x32\x7d\x90\x69\
-\x22\xd3\xeb\x02\xe2\x64\x75\x95\x5e\xb3\x02\xb9\x2e\xda\x69\x4b\
-\x77\x15\x56\xf3\xe1\xf4\xdf\x47\x37\xfa\xbb\xbc\x3f\x1e\x2f\x56\
-\x36\x2c\xcd\x7d\xcb\x8f\xe0\x97\x9f\xf0\xb5\xb4\x9d\xc7\x93\xf5\
-\xe7\x8e\x4c\x3b\xbb\xf4\x4a\x58\x0b\x40\x48\x02\xe5\xf5\x08\xf8\
-\x09\x3a\x02\x09\x7e\x20\x0c\x45\xb1\x2a\x01\xe9\xf7\x02\x48\x48\
-\x08\x21\xfc\x13\x54\x02\xba\x7e\x8e\x93\x80\x49\xc3\x89\x47\x52\
-\x82\xbf\x09\xe4\xc8\x45\x16\x2b\x30\x0d\x88\x60\x0a\xca\xc0\x60\
-\x46\xc0\xc1\xff\x36\x52\x01\x40\x18\xfe\xda\x01\xfe\x06\x21\xdf\
-\x05\x15\x40\x90\xfc\x7c\x04\xf4\x47\x89\xe1\x88\x1d\xa0\xe7\x29\
-\x80\x23\x5f\xa2\x1e\x08\xf5\xf6\x00\x7d\x04\xec\xb7\x48\x00\xab\
-\xbf\x03\xbf\xa9\x02\x83\x8f\x4f\xad\x03\xd0\xa9\x00\xa5\x24\x44\
-\x36\x19\x99\xba\x15\x28\x55\x3f\x71\x1b\xd5\xf5\x3e\xbe\xe1\x36\
-\xde\xb9\x0b\xff\x16\xb0\x7f\xf4\xe4\x50\xaa\xbf\x1f\x51\x66\x78\
-\xfa\x50\xa9\xfe\x5d\xe8\x57\xbe\x29\x31\xf9\x67\xed\x13\x76\x71\
-\xff\x6f\xfd\x11\x5c\xd3\xc6\x7e\x80\x29\x2c\x08\xc2\x61\x20\xe2\
-\xbe\x23\x40\x30\x1a\x8c\x2d\xc2\xa9\x00\x9e\x06\x56\xa0\x7a\xfa\
-\xdc\xaf\x4e\x5c\x59\x01\xb4\x03\x03\x02\x40\x05\xd0\xa9\x80\x4b\
-\xc9\x0e\x98\xda\x6f\xc1\x5b\xda\xae\xfe\x58\xe5\x23\x11\xc4\x5c\
-\x00\x5b\x81\x48\x04\x31\x07\x70\x02\x41\x05\x10\x03\xbe\x0b\x13\
-\x29\xf8\xa6\x43\x11\xf8\x51\x62\xd8\x55\x0d\xfc\xd4\x1d\x81\xce\
-\xf6\xed\xcf\x84\x7a\x23\xab\x80\x4a\x61\xf4\x1e\xdb\xb8\xb7\xae\
-\xf8\x5a\xe6\x02\x1c\xf0\x5e\xf1\xb5\x02\xdf\xca\xbd\xa9\xaa\x00\
-\xa3\x34\x11\x99\x2e\x6d\x41\xb5\x8f\x5e\xe6\x77\x3b\xf8\x84\x2d\
-\xbb\xd1\xe3\xd3\x07\x2c\xe9\xcd\x61\x3f\x3f\x97\xfd\x6d\x73\x52\
-\x04\x1c\xc7\xe1\x1f\xec\xf9\x87\x2d\xbf\xab\x0a\x08\xbb\xee\x4c\
-\x3b\x01\xa0\x6c\x8c\x04\xa7\x30\x0f\xd0\x55\x7f\x57\x20\xe5\x3e\
-\x85\xca\x9f\x30\x10\xb4\xbe\xfa\x77\x04\x20\x61\x09\xb1\xdb\x83\
-\x39\xd8\x80\x81\x02\x88\x2a\x80\x15\x2a\xfe\x25\x10\x81\x5f\x4f\
-\x83\x96\xe0\x2a\x08\x04\x45\xb0\x45\x04\x69\x2b\x10\x04\xa2\xf8\
-\x31\x50\x00\x72\x74\x28\xfe\x5e\x4b\x20\xaf\x55\x00\xb4\x91\xf4\
-\xcb\x4e\x42\xff\x68\xa8\xa7\x1b\x12\xdf\x76\xee\x59\x51\x00\x31\
-\x07\x58\x80\xbf\xf6\xfe\xfd\xc7\x5a\x28\xe8\x84\x90\x2e\xcb\xb6\
-\xdd\xa6\xbe\x6d\x57\x23\x00\x2e\xef\xef\x37\xf1\x40\x12\xf8\x08\
-\xad\x40\x38\x72\x1c\x4f\x15\xa6\x4c\xec\xf6\x32\x80\x9e\xa0\xe5\
-\x87\x23\xbf\x1c\xe4\x3f\xaa\x00\x0e\x7d\x7f\x1e\xd8\x80\x6e\x0c\
-\x98\x9a\xf4\xef\xe6\x02\xe0\xf7\x88\x81\x08\x12\xfc\xbe\x39\x6e\
-\x12\xaa\x5b\xdc\x41\x68\x1e\x54\x7f\x5c\xf4\x13\x86\x7f\x3a\x25\
-\x80\x2a\x40\xfa\x4d\x48\x6b\xeb\x4f\x79\x91\x1b\x53\x6a\x5f\xc0\
-\x65\x50\xf5\x47\xa1\xa0\x45\x0b\x10\x54\x82\x6d\xe4\x02\x23\x22\
-\xc0\x40\xd0\xc2\xc0\xc4\x66\x99\xe3\x3b\x5f\x1f\x25\x81\x27\xef\
-\x09\x58\x7e\xf7\xec\xcc\xc0\x8e\x0e\x7c\xff\x99\x50\x6f\x44\x14\
-\x23\x15\xd0\xbf\x27\x91\xd0\x7f\x9d\x05\xb0\xb2\x1a\xc0\x6a\xfa\
-\xaf\xb5\x43\xb0\x7c\x8c\x8a\x11\xd0\xf2\x0d\x2a\x81\x20\x27\xb2\
-\xcb\x95\x92\x11\xe5\x0f\xee\x01\x4c\x90\x07\xc4\xfb\x55\xf6\xe7\
-\x2e\xec\x5b\xd6\xf5\x73\x7f\xe4\x58\xf9\x38\x8e\x80\x4f\x61\xf0\
-\x87\x41\x01\xd4\x30\xd0\x82\x0a\x80\x10\x70\xba\x15\x00\x0e\xe6\
-\x00\x12\xac\x21\x49\xbc\x1e\x0a\x22\x20\xa4\x89\x1b\xf0\x09\x7e\
-\xcf\xd1\x06\x4c\xb2\x71\x36\x01\x9c\x55\x28\xda\x0f\x01\x55\x3b\
-\x70\xed\xe7\x00\x56\x0a\x20\x11\x25\x29\xbf\x59\x08\x7c\x24\x83\
-\x29\xa8\x82\x4b\xda\x26\x84\x15\xc8\x83\xf7\x47\x82\x98\xf8\x76\
-\x67\x20\xc9\x8d\xd1\xb5\x2d\xa0\x9f\x55\x07\x9b\xef\xe1\x97\x6d\
-\x0a\x2a\x3b\xe0\x3e\xe2\xed\x6f\x91\x82\xdc\x90\xfd\x23\x15\x20\
-\xdd\x7b\x7c\xf2\xef\x1d\x2a\xbe\xdf\x5b\x42\xbe\x45\xe6\x7b\x20\
-\xe8\x84\xd0\xee\xa7\x62\x03\x88\x88\x4c\xac\xe4\x01\x5a\xf2\x00\
-\xdc\xbb\xcf\x5a\xa0\x57\x01\xff\x31\xae\xf8\xb0\xaf\xdf\x52\xf1\
-\xdb\xeb\x14\xc1\x26\x6d\x2e\x68\x1a\xec\xf8\x53\x37\xfd\x80\xad\
-\xbf\x26\xeb\x83\xb6\xcd\xad\xc0\x06\x67\x03\xc8\x20\x03\xe0\x60\
-\x09\x46\x0a\x80\xa0\x1d\x58\x1f\xa0\x06\x62\xf5\x97\x19\x08\x60\
-\x30\xfe\x9b\xf0\xbc\x81\x2b\xa8\x00\xee\x97\x17\x8b\x86\x96\x9f\
-\xa4\x06\x70\x1a\x58\x82\x69\x10\x0e\xd2\xa0\x33\x60\x50\xdd\xd1\
-\xfb\x77\x60\x87\xbf\x73\x44\x04\x26\x27\xc1\xfe\x88\x3a\xd8\x23\
-\x8a\x17\x10\x80\xec\x0c\x05\x9d\x0d\xf5\xee\x91\xf8\x47\x54\x40\
-\xab\xf2\x89\x84\xde\x83\x12\x50\x98\x04\x7c\xaf\xa0\x77\x92\x48\
-\x50\xfd\x97\x2c\xe1\xba\xdc\x9b\xca\x09\x3e\x64\x94\xbb\xbd\xfb\
-\x62\x17\xe0\x3d\x28\x81\xbc\x3a\xc1\xa7\x6d\xec\xd9\xbe\x91\xab\
-\x7d\xf6\x75\xed\xfd\x57\xcf\xd6\x7b\x6d\x89\x1b\x80\x86\x3d\x00\
-\xb6\x06\x81\x52\xdc\x19\x08\x3b\x02\xe1\xd1\x11\x41\x79\x9e\xa0\
-\xfa\x8f\xfe\x91\x49\xda\xa4\x9f\xc4\xe3\xc6\x22\x01\xe0\x56\x63\
-\xae\x04\xa2\x05\x48\x44\x4c\xa9\x00\xb9\x3c\x63\x45\x67\x20\x83\
-\x09\xee\x4d\x1b\xb6\x60\x24\xfb\x57\x55\x1f\xa6\x02\x53\xb0\x03\
-\x48\x04\x55\x0e\x6d\x81\xfa\x1e\x52\xb8\x47\x0d\xbc\x78\x5b\xf0\
-\x2d\x15\x70\x36\xd4\x3b\x2a\xf1\xf7\x54\x80\x85\xec\xc1\x60\x00\
-\x28\x95\xb5\x00\xed\x9e\x2b\x03\xab\x92\x3f\x91\x11\x41\xf5\x5f\
-\x02\xc2\xa5\xfa\x2b\xd8\x04\xbb\x2c\x6b\xfc\x97\xf9\x00\xdf\xad\
-\x87\x0a\x11\xcc\xc4\xf4\x3e\x90\xfd\x78\x14\xb9\x6f\xf1\x35\x77\
-\x27\x10\xa7\xc1\x32\xf0\x7a\x78\x8d\xf4\xa3\xb0\xdd\x73\x90\xfd\
-\xdd\x35\x0d\x54\x00\x85\xb3\x01\x78\xbc\x26\x20\x6e\x0e\x32\xb2\
-\x01\x51\x01\x10\x90\x01\xaa\x81\x09\xdb\x82\xf1\x54\xe1\x0d\x02\
-\xe8\x76\x1a\x2e\x24\xd0\x6d\x09\x66\xa1\xed\x80\x2a\x60\x95\x05\
-\x94\x7b\x34\xa8\xfe\x6f\xa9\xf7\xf9\x06\xf7\x62\x20\x78\x19\x5c\
-\x77\x72\x5f\x42\x8b\xef\x0c\xf8\x1f\x21\x05\x39\x9c\xfe\x3f\x85\
-\x00\x68\xa7\xb5\x37\xee\xc9\xdf\xae\xfe\x23\x70\xeb\xcd\xa0\x6f\
-\x4d\x12\x06\x0a\xc0\x6a\x08\xb8\xa8\x00\xeb\xae\xd7\x56\x60\xe9\
-\x00\x58\xa9\xfe\x05\xf0\x74\x2d\xf7\xe0\xcf\xc5\x2f\x94\x74\x6e\
-\x0a\x80\xe8\xbd\x25\xfa\x75\x2b\xaf\xb6\x9d\x37\x97\xe7\x5e\x0d\
-\xcc\x2b\xe9\x1f\x25\x37\xe9\x86\x02\xb0\x70\x0a\x39\x54\x7e\x3e\
-\x32\x04\x14\x2b\xff\xa0\xfa\xa7\x11\x11\x48\xff\xf5\x4d\x70\x8f\
-\x82\x12\xe0\x10\x08\xa6\xb8\xdc\x77\x03\xf8\x1d\x01\xf8\x06\x23\
-\xf5\x63\xe5\x2b\x67\x78\x44\x15\x80\x64\x80\xf7\xdc\x12\xd8\xc6\
-\x50\xd0\xa8\x2d\xe8\x44\xa0\x03\x45\x30\x8d\x2a\xfd\x48\x6b\xf1\
-\x13\xaf\x8f\x12\xc1\x0b\x09\xa0\x4c\x5b\xdb\xad\x50\x8f\x77\xd6\
-\x01\xdc\x92\xf8\x72\x00\xf0\x09\x36\xd7\xf2\xfb\x53\x11\xe9\x38\
-\x07\xb0\xb4\xf6\xde\xa1\xe5\x67\xd5\x0a\x78\xa5\x6f\xa2\xff\x0a\
-\x90\x37\xf8\x96\x95\x9d\x7a\xd9\x88\x2e\xd6\x48\xa0\x7a\xff\xf6\
-\x8d\x67\xa2\x65\x43\x51\x37\xd2\x10\xae\xb1\x9f\x3b\x19\x2a\x7d\
-\xdc\x91\xb7\x4e\x0a\x73\x7f\x7c\x36\xca\x7f\x09\x9b\x7f\x46\xf9\
-\xcf\x3b\xe0\x37\x7c\x70\x7f\x7d\x78\x53\x47\xde\xfe\xbd\xe7\xc1\
-\x0f\xbc\xcb\x03\xf4\x18\x01\xf4\xfb\x0c\x4a\x0f\x7c\x4e\x8d\x0c\
-\x2e\x70\xed\xc0\xef\x82\xc0\xd4\xfb\xfc\x37\xb4\x08\x45\x15\xa0\
-\xec\xf7\x7b\x0e\xf2\x1f\x21\xfd\xbf\xd9\x58\x3d\x4a\x04\x7c\xe0\
-\xfa\x6c\x68\x48\x2f\x27\x80\xc3\x49\xbf\x1c\x90\xf3\xe7\x25\xfe\
-\xf6\xfb\x70\x0e\x60\xdc\xdf\x5f\xaa\xff\x96\xe4\xc7\xb6\xa1\x55\
-\x35\xa0\x75\x66\x60\xe9\x0c\x14\x12\xb0\x89\x88\xfe\x23\xa5\x20\
-\xed\x3b\xd9\x1f\x2c\x01\xcf\x4b\x27\x20\xcf\x9b\x55\xdf\x37\xf9\
-\xec\x86\x5f\xa4\x6f\x89\xc5\x54\x7d\x75\x4d\xfd\x7e\x80\x78\x10\
-\x08\xd1\x78\x22\x30\xc1\x48\x70\x77\xdc\xd8\x8e\x42\xf1\xeb\x49\
-\x42\x36\x10\xae\x27\xe9\x8f\x1b\xaf\x1b\x7c\xe0\xb3\xc2\x73\x18\
-\x54\x12\x2e\x29\x3e\xa7\x5e\xfe\x53\xb0\x01\x08\x7c\x54\x01\x5b\
-\x96\x80\x12\xcc\x02\x04\x22\x70\x99\x8f\x56\x80\x8f\x80\xff\x0c\
-\x11\x3c\x6a\x05\x56\xef\xe3\x97\x13\x00\x35\x41\x65\x67\x24\xfe\
-\xc8\x1a\xdc\x27\xf1\xd7\xef\x4b\x40\x00\xb2\xea\xfd\x67\x00\xb1\
-\x02\xa8\xa3\xe4\xff\xa8\xf7\x9a\x02\x98\xc0\xeb\xc3\xc7\x38\x11\
-\xbd\xb5\xfd\xfb\x74\xc6\xc3\x3d\x7c\x63\xcf\x65\x33\x4f\xa3\xb9\
-\xf9\x7f\x90\xfe\x53\x5e\x03\xdd\xc1\xef\x5d\x80\xae\xfd\x17\x14\
-\xc0\xc8\xfb\x47\x0b\xc0\x83\xf4\x9f\x2c\x48\x7f\x5a\x77\x01\x64\
-\x30\x18\xb4\x05\xfe\x08\xf6\xbd\xdf\xef\x94\xd6\xd5\x5f\xc2\x4e\
-\xc2\xb8\xbd\xb8\x60\xe5\xa7\xd4\x80\x1a\x15\x00\x0d\x54\x00\x4b\
-\x5f\xe5\x47\x2a\x20\x86\x7e\x16\xe5\x7f\x6a\xc3\x3c\xf4\xc8\x83\
-\x6f\xa8\x80\x67\xe5\x03\x44\x9f\x42\x00\x67\xc7\x75\xcf\x48\x7c\
-\xdd\x78\xbd\xa7\x0c\x7a\x55\xe0\x92\x3f\x75\x2a\xc0\x97\x02\x13\
-\x7c\xdc\xd5\x01\xd5\xfd\xf8\xda\xb5\x51\x6a\xd2\xbf\xcb\x02\x52\
-\x59\xbf\x6f\x25\x13\x28\x24\x90\xfb\xbd\xfc\xd7\x93\x7e\x4e\x04\
-\xf0\x73\x43\xa9\x8f\xb3\xf6\x51\x05\xc0\x31\xdd\x34\x08\x00\x47\
-\x67\x00\xf0\x46\x06\x40\xb4\xbf\x20\x68\x45\x04\x3b\x41\xa0\x0d\
-\x6c\xc0\x4a\x09\x84\x87\x2f\xde\x89\xe0\x8f\x44\x90\x3c\xf0\x63\
-\xa8\xfc\x0e\xf4\x11\x01\x78\xd5\xa7\x40\x08\x0e\x7c\xdb\x50\x01\
-\x91\x0c\x2e\xa9\x55\x7f\x3a\x52\xf5\xf9\x40\x0e\xf0\xa8\x0a\x38\
-\x44\x0a\xfc\x69\x04\x40\x07\x7a\xf9\xa3\x50\xef\x78\x2f\x7f\xec\
-\x59\x65\xe7\xef\x69\x2a\xc0\x87\x7c\x72\x25\x01\x07\x7d\x82\x85\
-\x3f\x54\x76\xe4\xc1\xe1\xa0\xb6\x26\x70\x19\x1c\x9e\xe1\xf5\x48\
-\x11\x30\x90\x00\xcf\x46\xd9\xab\x7d\xad\xfa\xcb\x7b\xb1\xe5\x37\
-\xb9\x6c\x06\x50\x4d\x31\xf8\xe3\x71\xdb\x8f\x65\xbd\x6c\xd6\x06\
-\x23\xc0\xbc\x13\x00\xd2\xc6\x30\x90\x8c\x82\x40\x3f\xbb\x92\xdb\
-\x63\x92\x0d\x35\x80\x23\xc2\x3b\x38\x98\xe0\x34\x60\x3c\xd6\x0c\
-\x4f\x1a\x12\x2d\xad\x3e\x0a\x04\x80\xd5\x9e\x53\x2f\xfb\x29\xf5\
-\x56\x20\x5e\x73\xb0\x04\x53\xb8\x37\x49\xff\x71\xda\xba\x7e\xa4\
-\xea\x3f\x83\x08\x78\xe7\xfe\x27\x12\x80\x4f\x06\xca\x01\x89\x2f\
-\xa7\x7b\xf9\x6b\x69\x3f\xca\x02\xc6\x2a\xa0\x01\x5f\x37\x25\x7f\
-\x1b\xfe\x19\x55\xff\xfe\xda\xa0\xf2\xcf\xdd\x57\xb4\x9c\xd1\x68\
-\x44\x6f\xb4\x90\x01\x19\xe9\xcc\x21\xe8\x9b\x89\xf2\x4c\xec\xd2\
-\x7f\x30\x66\x4b\x20\xfb\x63\xe5\xf7\x6f\x58\x97\xfc\x4b\x3f\x00\
-\x94\xca\x98\x02\x6f\xcc\x01\x08\x8d\x09\x20\xd1\x78\x77\x60\x9f\
-\x01\xf0\x60\x70\xe2\x71\x47\xc0\xa7\x17\x6d\x6b\x30\x28\x2c\x18\
-\xf2\x42\x5c\xf7\x11\xb4\x7e\xbe\x5f\x98\x28\xd5\x4d\x39\x03\x01\
-\x74\x6a\x20\xd8\x01\x0a\x95\xbf\xbe\x07\xef\x0f\x2c\x81\x61\x9a\
-\x9f\xee\x94\xf7\xe9\x09\x84\xc0\x27\xc0\xbf\x65\x05\xe8\xff\x04\
-\xf8\x70\xc0\xfc\x1b\x2d\x67\x0e\xbd\x3d\x8d\x00\x68\xa3\xdf\x3f\
-\x92\xf8\xb7\x54\xc0\xad\xa0\x6f\x9c\xf6\xf7\x7f\x4f\x23\x8b\x54\
-\x25\xfe\x44\xef\x2b\xc9\xef\xc3\x3f\x14\x32\x80\x54\x83\xbf\x22\
-\xf1\x3b\xdf\x9f\x60\x27\x9f\x46\x00\x19\xc9\xa0\xfc\xe2\xb1\x64\
-\xca\x1f\x99\x8c\x51\x05\xcc\x1d\xd8\x19\x2b\x7f\x01\xfb\xa4\x30\
-\x4b\xa2\xfd\xe2\x1f\xaf\xf8\x26\xeb\xd6\x5f\x47\x04\xe5\x4b\xde\
-\x9b\x00\xa4\xad\xfa\x16\xc0\x2f\x3b\x19\x80\xab\x99\x4e\x11\x84\
-\x67\x04\x3c\x85\x40\x70\x2a\x56\x40\x42\xd5\x17\xe5\x1e\xf8\xd3\
-\x86\x02\x88\x76\x00\xad\x80\xed\x55\x7f\x20\x8f\x35\x0d\x1e\xa8\
-\xfe\xe9\xc1\x2c\xe0\x56\xf5\x97\x7b\xb3\x02\xde\x11\xea\x86\xcf\
-\xcf\x26\x80\x55\x18\xf8\x9c\x5e\xfe\x5a\xfa\xdb\x2a\xec\x1b\x91\
-\x80\x95\x11\xde\x38\xd6\xeb\x92\xbf\xdf\x14\x04\xed\x40\xaf\x35\
-\x9a\x4a\x88\x6a\x80\x41\x15\x30\xd8\x02\xa6\x4c\x34\x19\xb1\x18\
-\x31\x13\xe5\xab\x92\x42\x87\x70\xca\x41\xfe\x87\x76\x1f\xf9\xa1\
-\x32\xba\x31\x03\xe0\x20\x2f\x64\x40\xa3\x8d\x3f\x90\x04\x0e\x66\
-\x00\x29\x64\x00\x16\x03\x40\x5a\xfb\xff\xb4\x61\x03\x08\x06\xe2\
-\x62\x0e\xe0\x1f\x33\x08\xd8\xd1\x06\xf0\x9b\x04\x59\x0f\xa0\xbf\
-\x00\xe8\x51\x0d\x50\x18\x01\xa6\x01\xd8\x2f\xe9\xc6\x1c\xe4\xde\
-\xbd\xf4\x60\xd5\x7f\x96\x32\xb8\x45\x0e\x9b\x7f\x2c\x3e\x3f\x95\
-\x00\xe8\xce\xa0\xef\x48\x6b\x2f\x0d\x00\xbe\xa5\x02\xda\x7b\x98\
-\x04\x52\x7f\x2a\x59\x40\x82\x76\xde\x58\xe2\xc7\x4a\x6f\xf0\xbe\
-\xff\x82\xec\x6f\xef\x65\xb0\x05\x5c\x2c\x41\x16\x23\x7e\x2b\x6a\
-\x60\xce\xa4\x73\xae\xa0\xa7\x7e\xbb\xff\xde\x12\xf8\xfc\x7f\xac\
-\xfc\xe5\x7f\x38\xca\x7f\x27\x01\x0e\xeb\xff\x7d\x0f\x00\xdb\xd8\
-\x10\x94\xe2\xaf\x2f\x04\x81\x56\x4e\xa4\x46\xf0\x0b\x54\xfd\x51\
-\x37\x00\x83\xc0\x14\x14\x81\x93\x81\xc5\x76\xa0\x34\xf5\x2d\xca\
-\x01\xbc\x81\x08\x08\x07\x7d\x06\x04\x60\xd2\x2b\x81\xc3\x8f\x33\
-\x2a\xe0\x08\xe8\xd3\x0b\x95\xc1\xee\x3d\x3e\x83\xd7\xa7\x13\x00\
-\xef\xa8\x80\x7b\x7a\xf9\x5b\x16\x62\x44\x06\x23\x12\xe8\x25\xff\
-\x3b\x04\x7e\x89\x08\x7a\xff\xb8\x49\xa8\xdb\x80\x1e\xfc\xed\x35\
-\xc3\xbf\x32\x53\x82\xaa\xdf\xb2\x80\x4c\x89\xb2\xdf\xe7\x4c\xfc\
-\x56\xc8\x40\x12\xc9\xac\x44\x59\xeb\xc1\x2f\xb8\x4f\x24\xc1\x39\
-\x7f\x93\x2c\xdf\xc8\x18\x00\x4e\x20\xff\xe3\x69\x3a\x23\x25\xc0\
-\x34\xc8\x02\x36\x32\x00\xaf\xfe\x46\x85\x8c\xc2\x68\x70\x95\xfa\
-\x03\x1b\x60\xdc\x4f\x03\x26\xac\xf2\x65\x5c\x3e\xc1\x1a\x19\x8b\
-\x61\x60\x02\x0f\x1e\xab\xbf\x13\x81\x49\xdf\x05\x60\x19\x00\xf9\
-\x16\xc0\x37\x57\x41\xdc\x41\x06\xaf\xb2\x04\xf7\xb6\x0e\xcf\xfd\
-\x79\x05\x01\x1c\xae\xf8\x76\xe0\x7d\x5b\x32\x5f\x76\x08\x81\x82\
-\x33\x5f\x5a\x7b\x08\x76\x01\x15\x60\xb0\x3a\xc1\xd7\xec\x4f\xd5\
-\xe3\x2f\xa3\xbc\xa8\x10\x14\x08\x60\x22\xa6\x4c\x73\xa7\x06\x9a\
-\x12\x58\x0e\x1d\x25\xca\x64\xc4\x94\x88\xa7\x89\x58\x32\x89\x30\
-\xc9\xcc\xa4\xb3\xd6\x72\x7d\xf1\x20\xad\x78\x7f\x9f\x00\xbc\x94\
-\x95\x6f\x14\xe5\xbf\x0e\xaa\xbe\xb5\x75\x4a\x71\x04\xd8\xad\x00\
-\x87\x5f\x57\xda\xf8\xd5\xa6\x41\x1b\xd0\x36\x8e\x0f\x5f\x01\x1f\
-\x40\x3f\x85\x10\xd0\x81\x7f\x61\xac\xfe\x4c\x3c\x41\x20\x80\x03\
-\x3e\x11\x60\x2c\x03\xa0\xcb\x0e\x01\xc8\x0e\x29\xa4\x1b\xb2\xfe\
-\x5e\x4b\x20\x9f\x40\x0a\x43\x15\xc0\x5f\x4e\x00\x98\x05\xd8\x83\
-\xbd\x7c\xdb\xb9\xb7\xf5\x3a\xad\x88\x20\xf6\xfd\xdb\x69\xbc\x0d\
-\xf4\xa3\xc4\x1f\xed\xc1\xbf\xab\x4c\x20\x56\xfd\x85\x00\xda\x3d\
-\x04\xfe\x42\x0a\x99\x2e\x94\x48\x84\x49\xdf\x94\x24\x2d\x0f\xbe\
-\x66\x4a\xba\x6c\x37\xc6\xda\x96\x9e\x23\x11\xf8\x46\x1f\x55\x11\
-\x84\xcd\x3f\x2d\xf4\xff\x27\x9f\x4f\x0a\x55\x9f\x62\x08\x68\x10\
-\x02\x72\x20\x86\xb0\x22\x10\xb7\x0b\x1f\x6e\x0f\xc6\x3d\xf8\xa7\
-\x51\x1e\x10\x80\xef\xfb\x9b\xff\xb8\x24\x9a\x62\x7b\x60\x73\xd3\
-\xb2\x3d\x02\x38\xaa\x06\x5e\x6d\x09\xd2\x9d\x44\xf0\xe8\x0c\x01\
-\xd3\x2f\x41\x00\xf4\x40\x2f\x5f\x76\x2a\xbc\xec\xc8\xff\x71\xf5\
-\x37\xa8\xf0\xcb\xb1\xe0\xd8\x15\x68\x5b\x81\x61\xc8\x67\x3b\xb2\
-\xdf\x81\x9f\x96\xc9\xbe\xb2\xbd\x97\xff\x82\x28\xcd\x43\xe0\x2f\
-\x76\x7f\x2a\xe7\x12\x94\x83\xca\x13\x53\x4e\xcb\xb3\xcc\xba\x3c\
-\xb2\x36\xef\xef\x92\x39\xb4\xfd\x26\x69\x55\xdf\xd7\xff\x77\x80\
-\x47\x3b\x10\x48\xa0\x56\x7c\xdb\xb1\x00\xdc\xfe\xcf\x3b\xe9\x3f\
-\xaa\xfc\x14\x16\x2b\x0d\xd4\xc0\x28\x04\x34\x26\xa2\x24\xf4\x36\
-\x09\xfd\x9c\x84\x2e\xd3\x91\xca\xb9\x45\x04\xf7\x10\xc0\xd1\x76\
-\xde\xaf\x62\x09\x0e\xcd\x10\xf0\x3d\x38\x7d\x25\x01\x30\xda\xbc\
-\x5b\x7d\x7b\x1d\x54\xf0\xad\xfe\xfe\x1e\x09\xf4\x44\xc0\x75\x0e\
-\xc0\x17\x02\xf5\x15\x3f\x4a\x7f\xcf\x05\xf2\x40\x09\xf4\x56\x20\
-\x83\x05\xa0\x1d\xe0\xe7\x62\x09\x2e\x0e\x7c\x52\xca\x85\x08\x2e\
-\xc4\x24\x13\x93\x25\x21\x4e\x0b\x01\x44\x22\xf0\x1d\x7f\xcc\x06\
-\xf2\x1f\x72\x80\x6a\x07\x06\x1d\x00\x1c\x01\xa6\x9d\x0c\x60\x55\
-\xfd\x83\xf4\x17\x18\x0b\x8e\x39\x80\x0d\xc6\x82\x6d\x14\x02\x26\
-\xa1\x1f\x93\xd0\x8f\xf2\x2c\xab\x95\x42\xb7\xaa\x67\x3a\xf0\x9c\
-\x6e\x78\xfb\xb3\x0a\xe0\x57\xb3\x04\xfc\x94\xea\xff\x52\x02\xa0\
-\x03\x41\xdf\xad\x7b\xd3\x0d\x89\x1f\x3f\x46\x1b\x21\x60\x03\xfd\
-\x07\xf5\x87\x73\xec\x0d\xfe\xfc\x1b\xec\xc2\x44\x0c\x1d\x00\x2e\
-\xea\x80\xeb\xbe\xff\xa9\x2a\x83\x65\xaf\xe0\x05\xf8\x0b\x11\xa4\
-\x72\x22\xc1\x42\x02\x6f\x95\x08\xca\x86\x24\xac\x24\x17\x26\x4d\
-\x4c\x29\x09\x71\x21\x82\xc5\x16\xd8\x42\x02\xe5\xcb\x90\x20\xff\
-\xc9\xf6\x49\x80\xc2\x10\x10\x0d\xe6\x00\xd2\x68\x36\x80\xfb\xd3\
-\x82\x53\x98\x04\x8c\xe0\x9f\x76\x6d\x40\x91\xfa\x05\xf8\x6f\x89\
-\x49\x44\x48\x48\x68\x3a\x05\x98\xa3\x44\xf0\x6c\x3b\xf0\x0a\x4b\
-\xf0\xd4\x3c\x80\xef\xc5\xe8\xab\x09\x80\x4b\x60\x7d\x73\x98\x67\
-\xa4\x02\xb6\xae\xd3\x40\xf2\xc7\x7b\xd4\x8d\xe7\xe0\xc3\x67\x01\
-\xdc\x0a\xe4\xa1\x0a\xc0\x50\xcf\xc9\xa1\xbd\x76\x0b\xe0\xbb\x06\
-\x4e\xc4\xf4\x5e\x2a\xbe\xab\x82\x6b\x89\x10\x17\xf0\x4b\xd9\x20\
-\x54\xab\x12\x58\x14\x80\xc1\xc9\x44\x22\x4a\x59\x94\xd2\x24\x24\
-\x93\x92\x64\x23\xcd\xcb\x33\xab\x36\xf9\xaf\xcd\xef\x53\x68\xfb\
-\x51\x18\xff\x35\x1b\x7b\xfe\xad\x0c\xc0\xe9\xaf\x82\x1d\x7c\x7f\
-\x9d\x0b\xe0\x7e\x4e\x60\x82\x5c\x00\xc3\xbf\x49\x84\xa4\x90\xda\
-\x5b\x62\xfa\x91\x96\x8a\x9f\x48\xe8\x07\x09\x5d\x76\x03\xad\x74\
-\x47\x1e\x70\x0f\x01\xc8\x17\x59\x82\xf4\x44\x75\x70\x37\xfe\x5f\
-\x4b\x00\xa3\x40\xd0\x76\x97\xee\xee\x2b\x03\x04\xb8\xee\x7a\x7f\
-\xbc\xaf\x03\x15\x30\x55\x90\x53\x6d\x0b\xae\xd3\xfe\xf6\x55\x68\
-\xa1\x12\xaf\xfa\x44\xb9\x90\x05\x97\xd0\x6f\xae\x2a\xe0\x0a\xe9\
-\xff\x22\xfd\x9b\x0e\xe0\x0a\x76\xad\xdb\x91\x29\x49\xfd\xb8\xd0\
-\x5b\x51\x04\x36\x09\xf1\xa4\x94\xb2\x90\x64\x25\x55\xa1\x94\x8d\
-\x24\x2b\x99\xd8\xba\xea\xc3\xd6\xdf\x06\x24\x70\x09\x59\xc0\x14\
-\x6c\x00\x0d\xe4\xbf\xd0\xc0\xfb\x13\x9c\x10\x44\xe3\x13\x83\x96\
-\xd7\x4c\x97\x5a\xe5\xb9\x56\xfc\x1f\x24\x24\xb4\x3c\xff\x20\xa1\
-\xb7\x43\x01\xd7\x51\x1b\x70\x2b\x0f\x78\xd4\x0e\xbc\xd2\x12\x3c\
-\xfc\xe0\x47\xf0\xf9\x72\x02\x88\x6d\xa7\x18\xfe\xdd\xaa\xf6\x5b\
-\x3e\x7f\xda\x90\xfc\xb6\x1a\x7c\xda\xb3\x00\xb1\xf5\xf7\xef\xca\
-\x1e\x30\xbc\xb7\x05\x7f\xa9\x54\xfd\xb9\xd4\xf4\xe5\x07\x9f\x0b\
-\x19\xb8\xef\x7f\x2b\x35\x5f\x28\xd7\x0c\xa0\xb7\x01\x5c\x0f\x25\
-\x7d\x2b\xa4\x90\x40\x11\x28\x09\x49\x52\x4a\x49\x28\x99\x51\xce\
-\x4a\x49\x85\x92\x1a\xa9\x1a\x49\x79\x24\xb3\xae\x1d\x78\x01\x12\
-\x58\xf9\xfe\xa0\x02\x68\x47\xfe\xa7\xd0\x0e\xb4\xb0\x38\x68\xa9\
-\xf4\x4c\x49\x98\x2e\xb2\x00\xfe\xad\x3c\x52\x12\x7a\xe3\xe5\xff\
-\xf3\x36\xf8\xf9\x84\x67\x7e\x46\x1e\xf0\xa8\x1d\x78\xa6\x25\x78\
-\x54\x09\x3c\xf6\xe7\xe5\x04\xb0\xa5\x02\xf6\xc6\x78\x75\xe3\x3d\
-\x69\x30\x91\x6f\x01\xee\x69\x35\xa7\x97\x61\xef\xbf\x0c\xb3\x00\
-\x23\xd9\xef\xa9\x7e\x0b\x00\xb9\xb3\x00\xcb\xc7\x32\xfd\x57\x3e\
-\x36\xd5\x6c\x80\x4b\x2e\xe0\x69\xbf\x4b\x7f\x57\x00\x58\xf1\xfb\
-\xea\xaf\xe5\x5f\x91\xfa\xb1\x46\x02\x56\x5e\xdb\x92\x13\x4c\xcb\
-\xce\x06\xc9\xac\x92\x40\x2a\x0f\x2d\xf7\x44\x8d\xd8\xac\x5b\x01\
-\x68\xb6\x1e\xff\x4d\x3b\x04\xe0\x20\x57\x18\x06\x4a\x55\x0d\x2c\
-\x80\x67\x61\x7a\xe3\x05\xf8\x6f\x08\x7e\x6e\x04\xb7\x00\xde\x95\
-\x4d\x23\x82\x63\xc0\xff\xec\x3c\xe0\x9e\x45\x3f\x8f\x5a\x82\x87\
-\xe5\x3f\xff\x16\x04\xc0\x07\x56\xee\xd9\xc6\x44\x5f\xda\x0c\xf7\
-\xb6\x87\x80\xd6\x94\xf0\x11\xac\x80\xdf\xcb\x03\x65\x90\xba\x0e\
-\x41\x2e\x55\x9f\x56\x12\x1f\x2b\x3e\x76\x03\xb4\x56\xff\x04\x89\
-\xff\x5b\x67\x03\x96\x87\x75\xd5\xbe\xaf\xfe\x56\xf4\x81\x6f\x64\
-\xee\x5b\x96\x29\x19\x25\xb6\xa2\x0c\xca\x6b\xb5\x65\x1e\x40\x8d\
-\xa4\x10\x01\x19\x51\xb2\x85\x10\xfc\x87\x2c\x6a\xab\x05\x40\x44\
-\xe3\x1d\x82\x52\xf9\xdd\x9a\x88\x68\x2a\xc0\x5e\x5a\x93\x05\xe4\
-\xc2\xe5\x34\xac\x1e\xf0\x6f\xd4\xbf\x8e\xd7\xdb\xbe\xff\x8c\x0a\
-\x78\x24\x0f\xd8\x02\xff\x23\x0a\xe0\x5e\x4b\xf0\xd0\x38\x31\x3f\
-\x03\x9b\x9f\x42\x00\x18\x08\xa6\x8d\x1c\x20\xed\x90\xc0\x11\x22\
-\xa0\xa1\x12\xc0\xb3\xf9\xd2\x46\x17\x60\x4b\xf6\x2f\xef\xe7\x2a\
-\xff\x2f\x94\xe9\xdf\x72\x3d\x15\xef\xaf\x90\x0b\x2c\x8a\x20\xd3\
-\xdc\x81\xdd\x6d\x40\x2a\x32\x3f\x95\xf4\x3f\xdd\xa8\xfe\x0a\xa0\
-\x77\x42\x48\x45\xbf\xe4\xf2\x3e\x5f\xec\x94\x64\x39\xc1\x88\x12\
-\xd5\xf7\x4c\x46\x55\x15\xb8\xef\x4f\xd6\xc8\x60\xb2\xf6\xc3\x9f\
-\xfc\xc1\xed\xb5\x03\x7e\xa2\x05\xe4\xcc\xbc\x9c\x8a\x55\x00\xbe\
-\xac\x29\xe5\x0e\xf0\x6f\xe5\xb0\xf5\x1f\x70\x1f\x55\xc0\xe5\xe6\
-\x4a\xb6\xaf\xc8\x03\xe4\x4e\xb9\xff\x99\x96\xe0\xb9\xc1\xdf\x97\
-\x10\x00\x5a\x81\x23\xfd\xfd\x2d\xd0\x4f\xab\x94\x7f\xfb\xf3\x88\
-\x26\x9a\xbb\xc4\x7f\x1e\xa8\x00\x0d\x3d\x7e\xaf\xf4\x1f\xdd\x75\
-\xae\xad\xc0\xde\xf7\x2f\x44\x30\x15\x35\xb0\x5c\x2f\x60\xcf\xd5\
-\xf3\xbf\x0d\xfc\x7f\x26\xa6\x09\x80\x2f\x05\x24\x3d\x09\x48\x21\
-\x81\x76\x40\x99\x90\xd2\x8f\xba\xc7\x71\xdb\xd8\x34\x95\x35\x8e\
-\x7e\x7f\x59\x5f\xb0\x90\xc3\x54\x2b\xbd\xad\x40\xdf\x11\x40\x79\
-\x7d\x21\x2a\x60\x6d\xd7\x08\x7a\x26\xa6\x0b\x5c\x47\x22\xf8\x41\
-\x42\x4c\x5c\x89\xc0\x5f\xef\x0f\xb5\x30\x9d\xef\xa1\x3f\x9a\x07\
-\xc8\xc9\xea\x9e\x5e\x60\x09\xee\xda\x63\x80\x9f\x85\xc9\x4f\x25\
-\x00\xff\x11\xdf\xea\xef\xd3\xce\xbd\xad\x96\xdf\xf8\x8f\x06\x89\
-\x3f\x11\xd1\x3f\xe1\x5e\x86\x1e\xbf\xcb\xfe\x6b\xe8\xfd\x6b\xa9\
-\xe7\x57\x48\xff\xaf\x10\xf8\xcd\x24\x65\x61\xd0\x5b\xf5\xfc\x0c\
-\x55\x5e\xbb\xeb\x05\xc4\xae\x04\x10\xf8\xd6\x29\x01\xaf\xf6\xd3\
-\x56\xe5\x87\x53\x8c\x53\x9d\x7a\xa4\xd5\xf5\x51\x02\xb8\xc0\xeb\
-\x4b\x81\xac\x83\x9e\xca\xb3\xdf\x77\xd0\xed\xc9\x68\x63\x00\x00\
-\x0e\xd7\x49\x44\x41\x54\x8f\x08\xe0\x42\xde\xea\xf3\xf7\xdc\xda\
-\xb9\x46\x9e\xa4\x02\x9e\x41\x00\xf7\x06\x84\xf7\x58\x82\x7b\x95\
-\xc0\xd3\xf0\xff\xb9\x04\xb0\x67\x05\xe8\x84\xe4\xa7\x9d\xc1\x1f\
-\x7c\xbd\x7c\xb3\x72\xf0\xfa\x28\xfb\x31\xe0\x4b\x20\xfb\xa7\x70\
-\xdf\x89\xc0\x87\x7b\xe6\xe2\xfb\xe7\xfa\x9e\x96\xfa\x37\xcf\xaf\
-\xe0\xf9\xd7\xd7\x02\x24\xa0\xab\xea\x6f\x50\xed\x6d\x50\xf9\xa7\
-\x00\x7c\x54\x01\xf1\x7a\xaa\xa4\x6b\x2b\xe0\xd3\x00\xfc\x13\x51\
-\xad\xf8\x17\xa2\x5a\xf1\xa3\x12\x90\x01\xf8\x47\x4a\x60\x7b\xc6\
-\xfd\x1e\x15\x70\x66\x4c\xf8\x9e\x85\x43\x67\x16\x0c\xc9\x41\x15\
-\x71\x36\x1f\xd8\xbd\xe6\x67\xe2\xf1\xd3\x09\x20\x76\x05\xec\xe0\
-\x58\xef\x16\xd8\xd3\x0d\x05\x60\x2b\xf0\x7f\x0c\x32\x81\xa5\xa2\
-\xf7\xd7\xb9\xbb\x6e\xc0\x6f\xb6\xa0\xf9\xfe\xff\xea\xb4\xdf\x5b\
-\x49\xfc\x63\xf5\x5f\x7b\x7f\xad\x1e\x59\xeb\xb9\x04\x91\x04\xa4\
-\x6e\x65\x36\xaa\xfc\x51\x05\x4c\xc1\x06\x5c\xca\xb5\x03\x59\xcb\
-\xbd\x5b\x04\xe0\xa0\x8f\x04\x10\xe5\x3f\x82\x1e\x25\xbf\xc0\xbd\
-\xed\x43\x03\x1e\xcd\x01\xce\xe4\x01\x47\x08\xe0\x16\x90\xef\x5d\
-\x4d\xf8\x54\x4b\xc0\xcf\xc6\xe2\x97\x10\x00\x07\xef\x4f\x07\xc6\
-\x7a\xe5\x90\xe4\x8f\x7f\x32\xcc\xf7\x27\x9a\x42\xf2\x8f\x61\x5f\
-\x5e\x05\x7f\x13\x54\xfa\x25\x00\xec\x7d\xff\x85\x32\xcd\xc5\xfb\
-\x4f\x05\xd8\xb9\x7a\x7e\xad\xba\x20\x06\x82\x8b\xf7\x4f\xc3\xea\
-\x6f\x9d\x15\x40\xdf\xbf\x05\x7c\x3b\xa8\x00\xf6\x08\xe0\x32\xb8\
-\x6e\x55\x7f\xad\x00\xfc\xde\x56\xf5\xff\x51\xc1\x7f\x84\x00\x9e\
-\xad\x02\x9e\x95\x07\x9c\x1d\x14\xfa\x0c\x4b\xf0\x74\xfc\x7f\x0d\
-\x01\x8c\xc6\x84\x6f\x8d\xf5\xd2\xce\xb4\x5f\x2f\xfb\xe3\xff\x9e\
-\x07\x7e\xef\xa5\x55\x37\xad\x02\x3e\xaf\xf0\xfe\xde\x56\xe1\xfd\
-\x39\x0f\x7c\xff\xb5\x76\x03\x52\x07\x78\x2d\xd9\x7e\xae\xf7\xb1\
-\xca\xff\x08\xd5\x3f\xd7\x33\x0a\x64\xa5\x02\xa6\x9a\x01\xf4\xd5\
-\xdf\x73\x01\x04\xbb\x7f\x7c\x22\xea\xae\xa3\x05\x38\x4a\x00\x23\
-\x0b\xc0\xd5\xe3\xd3\x0a\xf4\xae\x0a\x52\x27\xfb\x8f\x92\xc0\x1e\
-\xf0\xf9\x64\x0f\xfd\x59\x79\xc0\xbd\x76\xe0\x65\x96\x80\x5f\x81\
-\xc3\xe9\x0b\x8a\xbf\xff\x44\x2d\x2d\xff\x67\xf9\x88\xe4\x1f\x4f\
-\xfa\x8d\xff\xb4\x8e\x41\xec\xf3\x8f\x64\xbf\x7b\xfc\x7f\x07\x0a\
-\xe0\xbf\xae\xed\x37\x57\xdf\xff\x51\x2d\xc1\x52\xcf\x73\x57\xf5\
-\xdf\x20\x04\x74\xe0\xf7\xaa\x40\xc0\x26\x48\x51\x01\xad\xfa\xa7\
-\x7a\x84\xa9\x96\x05\x33\x0d\xe0\x98\x0b\xf4\x41\x5f\x6f\x03\x22\
-\x01\xf8\x7b\xf7\x08\x80\x83\x1d\xe8\xc3\xbf\xb5\x15\xf8\x01\x96\
-\xc0\xaf\x79\x78\x4c\xd5\xad\xea\xff\xac\xe1\xa0\x67\xe5\x01\x47\
-\x77\x09\xfa\x34\x4b\xc0\xaf\x02\xe4\x67\x13\x00\xee\xa8\x51\x95\
-\xc0\x54\x0f\xdb\xde\xf6\xff\xf7\xfd\x41\xd9\xef\x2a\xa0\x11\xc1\
-\x5c\xb7\x27\xc9\xa5\xde\x2d\x7e\x3f\x83\x02\x58\x92\xff\xa6\x10\
-\xb4\x10\x82\xfb\xfe\xb7\x42\x0f\x0e\x68\x37\x0d\x2e\xfd\xdf\xca\
-\xc0\x4f\xcc\x01\xa6\x41\xf5\xf7\x7b\xf8\x8c\xc0\x9f\xca\xa9\x05\
-\x08\x76\x24\x01\x0b\xde\xff\x02\xc0\xbf\x45\x00\x97\x41\x1e\x10\
-\x09\x40\x06\xed\x3f\xae\x95\xff\xd6\xa1\x81\xf7\x82\xff\xe8\x42\
-\xa1\x47\xf2\x80\x5b\xd5\xff\xd9\xa3\xc3\x67\x2d\xc1\xcb\xf0\xff\
-\x75\x16\x60\x2f\x0f\xd8\x52\x00\x7b\x61\xe1\x76\x06\x30\xd3\x54\
-\xc0\xdf\x16\xf8\x34\x42\xc8\xb5\x0d\xf8\x6f\x1d\xf8\x61\xfa\x97\
-\x84\x26\x9a\x3b\xdf\x7f\x05\xe0\x4f\xc4\x34\xd1\x54\x26\xfd\xb0\
-\xea\x63\x08\xf8\x03\x42\x40\xcf\x01\xd0\x0e\x78\xf5\x6f\x81\x5f\
-\xab\xf8\x3f\x8a\xef\x9f\xc2\x20\x90\x85\x2e\xc0\x04\xfb\x1e\x8f\
-\xa5\xff\x36\x01\x8c\x40\x8f\x6a\x60\x4b\x01\xf4\xe1\x1f\x95\xf1\
-\xde\x33\x27\x87\x9e\x39\x06\xeb\x33\xf2\x80\x57\x59\x81\x47\xf7\
-\x1d\x4c\x2f\xad\xfe\xbf\x04\x01\xb8\x0a\xa0\x8d\xae\xc0\x59\x79\
-\x31\xad\x08\x60\x2a\x52\x7f\x02\x15\xd0\xba\x02\xdc\xb5\xfe\x3e\
-\x3a\xc0\x13\x00\x3e\x77\x43\x3f\xff\xd6\xd4\xff\x47\x9d\xf4\xcb\
-\x45\x47\x70\x97\x09\x68\x01\x36\x92\x81\x82\x22\x30\x68\xfb\xa1\
-\x15\x98\x6a\xcb\xaf\x1f\x04\x32\xa8\xfc\x16\x40\xef\xa4\x70\x79\
-\x90\x00\xfc\x19\x09\x80\x8a\xcc\xc7\x2c\xe0\x36\xf8\xef\x09\x02\
-\x8f\xaa\x80\x33\x9b\x87\x3c\x9b\x00\xee\x09\x08\xef\xb2\x04\xfc\
-\x6a\xec\xfd\x12\x04\x10\x5b\x83\xcf\xfb\x9f\x42\x50\xbf\x03\x21\
-\xfc\x5b\x89\x21\x77\xc3\x3f\xfe\xb1\x5c\xe5\x3f\xc3\x60\x10\x83\
-\x12\x48\xd5\x18\xb4\xea\xff\x23\xb4\xfd\x1a\xe0\xb9\x18\x87\x56\
-\xfd\xd1\x16\x68\xdd\xa4\xb4\x59\x01\xab\xed\x3d\xbd\x01\xfc\xb5\
-\x0d\x40\xe9\x8f\x0a\xe1\x32\x90\xfe\x5b\xa4\xd0\xa4\xfe\xd8\x0a\
-\xc8\xa1\x73\xc3\xcf\x58\x81\x67\x8f\x08\xdf\x9b\x07\x7c\x86\x1d\
-\x38\x6a\x09\x5e\x8e\xff\x5f\x87\x00\xf6\xe6\x03\xce\xc9\x7e\xfc\
-\x1f\x6b\x52\x1f\xdb\x7f\xb9\x12\x03\x66\x03\x89\xb8\x7c\x0c\xab\
-\xbc\x13\x08\x5a\x82\x1f\x00\xf8\x0c\x9e\x5f\xc3\x73\x02\xff\xbf\
-\x55\xfd\x31\xf0\x9b\x20\xe1\x37\x90\xfe\x53\x00\xbc\x06\x32\x40\
-\x90\x6f\x55\xfe\x5b\x04\x70\x54\x01\x48\x07\xfa\xa3\x04\xf0\xa8\
-\x0a\x60\x3a\xbf\x68\xe6\x19\x79\xc0\xab\xec\xc0\x11\x4b\xf0\xfa\
-\xea\xff\xcb\x11\x40\x39\x60\x94\x0f\x86\xfd\x1b\xb2\xbf\xfd\x5d\
-\x08\x7e\x86\x96\xa0\xa7\xff\x4d\xf6\x5f\x28\xd3\x3f\x45\xc0\xff\
-\x5b\x42\x40\xf4\xfd\xff\xd6\x1a\x3e\x17\x33\xd0\x48\xa0\x79\xfe\
-\xa9\x84\x7c\xeb\x67\xee\x42\x3f\x05\x35\x90\xa0\xfa\x63\x06\xa0\
-\x21\x04\xec\x53\x7e\xf4\xff\xb6\x59\xf9\x47\x04\x60\x1b\x60\xdf\
-\x23\x80\x1f\xe5\xb9\xaf\xfa\x67\xc0\xff\xea\x99\x80\x67\xda\x80\
-\xcf\xb0\x03\x37\x2d\x01\x7f\x16\xe6\x7e\x29\x02\xb8\x97\x04\xb6\
-\xff\x47\xbc\xea\x63\x9b\xef\xbd\x5a\x82\xdc\xf9\xfd\xfe\xb9\xf9\
-\xfe\x9e\x04\xd0\xf3\xff\x28\x49\xff\x0f\xa8\xfa\x5c\xc3\xbe\xc5\
-\xff\xff\x84\xe4\x9f\x61\x08\xc8\x3d\x7f\xee\x24\xbf\x76\xbd\xff\
-\x75\xc5\xd7\xe0\xf1\x7b\x52\x30\x00\x7e\x94\xfe\x76\x07\x01\x08\
-\x48\xfe\x35\xf0\xb7\x08\x80\x36\x64\xff\x16\xf0\x8f\xae\x0f\x78\
-\xd6\x62\xa1\x67\x2e\x1c\x7a\x96\x1d\x48\x9f\xd2\xf2\xfb\x2d\x08\
-\x60\xd4\x19\x38\x27\xfb\xf1\xef\x99\x8a\x02\x98\x0b\xd8\xdf\x43\
-\xe2\xdf\x80\xde\x6c\xc0\xb5\x00\xff\xa3\xf8\xff\xde\xf7\x6b\x0d\
-\xfe\x98\xa6\x3a\xc2\xbb\x54\x7b\x5d\x79\x7f\xed\x92\x7f\xbf\xe7\
-\xd5\x7f\xaa\x9e\xdf\xaa\x0a\x98\xa0\xe5\x67\x01\xf8\x48\x0a\x28\
-\xf9\xbd\x2b\xb0\x5f\xf9\x8f\x13\x00\xc3\x00\x10\x6f\x02\x9f\x76\
-\xc0\x7f\xc4\xff\x7f\xa6\x0a\x38\x93\x07\x7c\xc6\xa0\xd0\xa6\x25\
-\xe0\xcf\xf0\xfd\xbf\x3c\x01\x60\x67\xe0\xbc\xec\xc7\xd7\xf3\x4a\
-\x01\x2c\x3e\xbf\x57\x02\x5c\xd7\xfb\xff\xd3\x75\x05\x5a\x08\x98\
-\x4a\xf5\xe6\xda\xfa\xdb\xaa\xfe\x98\x07\x4c\x1d\xf0\xfb\xd7\x7e\
-\xfd\x13\x7a\xfe\x06\xa9\xff\x04\x21\xe0\x34\xe8\x02\xa0\xe4\xb7\
-\x40\x00\x1a\x40\x7f\x84\x00\xde\xc2\x3d\x5e\x7d\x47\x23\xc0\xe9\
-\x00\xf8\xef\x25\x81\x67\x8e\x08\x7f\x66\x1e\xf0\xc8\xf8\xf0\xe7\
-\x84\x7e\xbf\x0d\x01\xdc\x22\x81\x23\x5f\x7c\xf3\xfd\x33\xc8\xfe\
-\xe8\xfb\x11\xf8\xa8\x0a\xfe\xe9\x3a\x01\x13\xcc\xf4\xbb\xef\xff\
-\xb9\x51\xf5\x31\x03\x88\x41\x60\xab\xfe\x56\x9f\x47\x2a\xc0\x6a\
-\xe5\x97\x4e\x0d\x44\xff\x8f\x76\x00\x55\xc1\x05\xd4\xc0\x2d\x02\
-\x78\x83\xeb\x6d\x4a\xdd\x23\x80\x23\x79\xc0\x99\xa1\xa0\x67\x2d\
-\x14\x7a\x55\x1e\x70\xaf\x1d\xd8\x3d\x82\x8c\xbf\x02\x63\xbf\x34\
-\x01\x38\x09\xd8\xce\x31\xc6\xd3\xce\xaf\xec\xb2\x9d\x57\x5a\x29\
-\x80\xa5\xaa\x7f\xd4\xd7\xd1\x0e\xe4\xa2\x00\x72\x97\xfa\x2b\xfd\
-\x28\x16\x00\xc9\x60\x5d\xf5\x97\x8f\xb5\xca\xde\x03\x3f\x05\x0b\
-\xe0\x2a\x60\x01\xb5\x56\x70\x6b\xc8\x01\x22\xf0\x11\xe8\x1a\x14\
-\x40\xb4\x03\xfe\x9e\xb7\x42\x00\xf8\xbc\xff\x4b\xf0\x4c\x02\x38\
-\x3a\x14\xf4\x0c\x15\xf0\xd9\x79\xc0\x3d\x1b\x8b\x7c\x6e\xbf\xff\
-\xb7\x25\x00\x82\x50\xf0\x98\xec\x1f\x29\x80\x04\x72\x7f\x0a\x83\
-\x3f\x53\xe7\xfb\xa9\x8e\xfa\xe6\xfa\x8c\xa9\xbf\x03\xfa\x27\x4c\
-\x01\x2e\x55\xbb\xdf\xf8\x63\x19\xfe\xd9\xaf\xfe\x58\xf1\x33\x29\
-\x5d\x60\xf8\xe7\x52\x49\xa1\x07\xfc\x9e\x02\xc0\x6b\x0c\x02\x51\
-\x01\x10\x10\xc0\xed\x1f\xfe\xb3\x09\xe0\x16\x09\xdc\xa3\x02\x98\
-\x6e\x2f\xa9\xfd\x8a\x3c\xe0\xb0\x15\xe0\xaf\xc4\xd6\x6f\x41\x00\
-\xb7\x48\x60\xfb\x57\x76\x0e\xbe\x3f\x95\x58\xcb\x95\xc0\x44\x73\
-\x95\xff\xeb\x10\x30\x53\xa2\x9f\x65\x93\x8f\xa9\x06\x7f\x6b\x2b\
-\x30\x95\x51\xdf\x1f\xc1\xfb\xbb\x15\xb8\x40\xf5\xb7\xd0\xf6\x73\
-\x32\xf8\x09\x19\x80\xc1\xbc\xff\x65\xa3\xf2\xe3\x73\xb4\x01\x97\
-\xd0\x11\x88\x04\x70\x7c\xc2\x72\x8b\x00\xee\x05\xff\x67\xcc\x04\
-\x3c\x32\x26\x7c\x4f\x1e\x70\x0f\xf8\xe5\xcb\x2b\xff\x6f\x47\x00\
-\x7b\x24\xc0\xa1\xf1\x17\xbb\x00\x0d\xe0\x17\xca\xf4\x3f\xd0\xe2\
-\x5b\xc8\x20\x4a\x7e\x07\x7f\xec\xf5\xff\x84\x00\x10\xe5\x7e\x4b\
-\xf3\x9b\xf7\x9f\xa0\x0d\x18\x2d\x00\x92\x00\x66\x01\x8d\x00\xc6\
-\x40\x8f\x2a\xe0\xb2\x1a\xfd\xed\xa5\x7f\x24\x80\xf3\xbb\xc8\x7f\
-\x26\x01\xdc\x3b\x19\xf8\xe8\x62\xa1\x67\xe7\x01\x87\x97\x03\xf3\
-\x57\x84\x7e\xbf\x35\x01\x6c\x91\x00\xef\x2a\x80\x89\x98\xfe\xa1\
-\xe5\xf4\xde\x0f\xea\x47\x81\xff\x85\x6c\x5f\x41\xfa\x7b\xea\xaf\
-\xf5\xce\xcf\xea\xed\xb9\xf3\xf6\x0d\xe0\xad\x2b\x80\xb2\xff\x02\
-\x59\x80\x85\x19\x80\x75\xc5\x5f\x88\xe2\x02\x00\xcf\xa1\x25\x48\
-\x44\xc3\x1c\x60\x8f\x00\x96\xef\xc5\x3d\x43\xd6\xf7\x12\x00\xdd\
-\x08\x00\x1f\x51\x01\xcf\x1c\x11\x7e\x76\x1e\x70\xb8\x33\xf0\x4b\
-\x80\xff\xb7\x24\x00\x27\x01\x86\xee\xc0\x36\x01\xa0\xef\xef\x07\
-\x80\xbc\xca\x33\x84\x81\x1c\xa4\xbf\x57\x79\x29\x83\x3f\x1c\x82\
-\x3f\xad\xcf\x52\x67\x02\xa6\x4a\x0e\x02\x24\x21\xc1\xf3\xe3\xc7\
-\xa5\x02\xdd\x7d\xff\x05\xd4\x80\x04\x42\xf0\x30\x6f\xeb\xf5\x12\
-\x9c\xe2\x9e\x4a\x34\xb8\x7e\x25\x01\xd0\xc1\x2e\xc0\x3d\x41\xe0\
-\xd9\x01\xa1\x44\x9f\x9b\x07\x1c\x52\x03\xbf\x0c\xf8\x7f\x5b\x02\
-\x88\x2d\xc2\x7c\xa3\x0b\xc0\xb5\xf2\xfb\xb8\xef\x3f\x61\xf8\xe7\
-\xa3\x1b\xfe\x71\xdf\xef\x52\xdf\xab\xff\xa5\x7a\x7a\x0d\x09\xbf\
-\xae\xc8\x40\xc1\x06\xc4\xea\xdf\xd2\xfe\xf6\x9c\x42\xbb\x2f\x76\
-\x01\x6c\xb3\xf5\xd7\x5e\xf3\x0a\xf8\xbf\x12\x01\x3c\xb2\x51\xc8\
-\xab\x87\x83\x5e\xb5\x91\x88\xfc\xd2\xe0\xff\xad\x09\x00\x49\x60\
-\x3b\xab\x5e\xdc\xf9\x4c\x1f\xc4\xc4\x70\x82\x4f\x2a\x9b\x55\x2f\
-\xb3\xfd\x5e\xd7\x3d\x17\x48\x75\xa7\x1b\x4f\xf6\xfb\xea\x8f\x2a\
-\xc0\x2b\x7a\x4f\x08\x6b\x1b\x80\x39\x80\xdb\x82\x0b\xb4\xff\xac\
-\x9b\xed\xef\xe7\x01\x2e\x2b\xcf\x6f\x65\x81\x14\x1e\x82\x36\x02\
-\xfe\xab\x09\xe0\x0c\xf8\x9f\x31\x19\x78\x26\x07\xf8\xea\x3c\xe0\
-\xd7\x07\xff\x6f\x4f\x00\x4e\x02\x0c\xbf\xe1\xfd\xaf\x67\x93\xf8\
-\xb9\x93\xfa\x38\xe8\xf3\x51\x76\xf5\x5b\xee\x5f\x60\x85\x5f\xac\
-\xfe\x1a\xaa\x7e\x53\x03\xcd\xfb\xf7\xaa\x40\x00\xdc\x7d\x47\xe0\
-\x67\xad\xee\xcd\x06\x34\x32\x90\x55\xd5\x4f\xc3\xa1\xe8\xd1\xeb\
-\x5f\x9d\x00\xce\x90\xc0\x57\xa9\x80\x7b\x08\x60\xb7\xfa\xff\x92\
-\xe0\xff\x23\x08\xc0\x7f\xe5\x3c\x1c\xcc\xdd\xaf\xa7\x4f\x00\xfe\
-\xb7\x92\xfa\x23\xdf\x8f\xa0\xf7\xca\xaf\xd0\xde\xeb\x83\x40\x7f\
-\x5f\x4b\xfa\xa3\xec\x8f\xd5\x5f\x48\x0b\xd0\x5b\xfb\x0f\x7d\xff\
-\x48\xf6\xf3\xe6\xbe\x48\x91\x04\xbe\x9a\x00\xce\x76\x03\x9e\x39\
-\x19\x78\xcf\x42\xa1\x67\xe7\x01\x9b\x04\xf0\xcb\x82\xff\x8f\x21\
-\x00\x24\x81\x72\x6a\x75\xc9\x05\x1c\xe4\xde\xfe\x4b\xc4\x35\x04\
-\x7c\xff\xff\xdb\x3b\xb7\xdd\xd6\x41\x20\x8a\xce\xe0\x44\x6a\xff\
-\xff\x5b\x7b\xa4\x4a\x0d\x9c\x07\x83\x8d\x09\x86\xe1\xe6\x18\x18\
-\xa4\x28\x4a\x15\x55\xaa\xea\xbd\x66\xcf\x05\x38\xe4\xfd\xf8\xd6\
-\x03\x58\x0f\x07\x33\x51\xde\x44\x75\xe1\xbc\xdb\x96\xdf\x76\x05\
-\x2e\x04\xec\xe8\xef\x5a\x7f\x3b\xf2\x0b\xe7\x6e\x63\x18\x16\x00\
-\x57\x4f\x06\xb6\xae\x07\x88\xee\xc4\x3f\x14\x00\x7c\x10\xc0\x6d\
-\x56\xef\x77\xcb\xfb\xd1\xba\xbe\xdb\xce\xfb\x4d\xd5\xff\x5b\x1f\
-\xec\xf9\x75\x98\x01\xc0\x43\x57\x40\x3a\xf9\xbf\xb4\xf6\xfd\x0b\
-\x4f\xf4\x7f\xea\x79\x7f\x37\xfa\x0b\x7d\x31\xfa\xa2\xcf\x2a\x8c\
-\x0b\x7e\x34\x00\xa4\xd4\x00\x6a\xb8\x80\x16\xc7\x88\x9d\x02\xe0\
-\xf6\xe2\x1f\x0e\x00\xef\xc5\xc1\x45\x3f\x96\x0f\x2d\xf6\x7f\x87\
-\xd6\xa0\x39\x04\xe4\xa1\xad\xfe\xd7\xc1\xea\x1b\x11\xbf\xe7\xfe\
-\xf2\xd0\x09\x58\xd3\x81\x6f\xa7\xdf\xff\xb0\xee\xf8\x03\x2d\x76\
-\xb1\x89\x7e\x17\xff\x7e\x50\xa9\x2b\x6e\x19\xc9\xf9\x7b\x00\x00\
-\x10\xba\x00\x57\xcf\x04\xd4\x4e\x03\xbc\x00\xe8\x42\xfc\xc3\x02\
-\x60\x2f\x0e\x22\x20\xbc\xd4\xdf\xc1\x05\x98\x22\xe0\x8f\x3e\xb9\
-\x7f\xb7\xfa\x6e\xb5\xff\x79\xc8\xf5\xf7\xe8\xff\x74\x44\x2f\x9c\
-\x33\xfe\x95\xbe\x07\x78\xd9\x44\xbc\x7e\x07\x0e\xa2\x3f\x13\x7a\
-\x08\x0a\x21\x08\xb8\x30\x68\x05\x00\x9f\xe8\x29\xe2\x4f\x9d\x07\
-\x48\xdd\x1f\x50\x3a\x22\x9c\x9b\x06\xf8\x22\x7f\x3f\x6b\x58\x00\
-\xac\x8f\x9f\x54\x8b\x2e\x02\x4a\xc7\xf2\x9b\xe9\x3f\x37\xfa\x3f\
-\x0f\x79\xbc\x84\x6f\xfd\x59\x7a\x6a\x01\xa8\x1d\x00\x6c\xf7\x0b\
-\x18\x2b\x2f\x2d\x11\xdb\xef\xae\xb8\x5d\xa1\x9b\xef\x08\xa2\xed\
-\xbf\x2b\x00\xae\x6c\x07\xb6\x74\x01\xc9\xf5\x00\xec\x4d\x23\x43\
-\x03\xc0\x58\xb1\x05\x9e\x6a\x3d\xd2\xfb\x18\xfd\x8f\xa2\x7f\x9f\
-\xf4\x7b\xe9\xd3\x6f\xd1\xba\xeb\x4e\x6c\xef\xb6\xe8\xe5\x1b\x04\
-\xc0\x0b\x01\x75\x02\x82\x50\xd4\xa7\x02\x20\x64\xfb\x55\x11\x46\
-\xc3\xe9\x40\x8b\x76\x60\xee\xfe\x80\x56\x2e\x80\x62\xff\xfb\x13\
-\xff\x04\x00\x00\x00\xf8\x53\x00\x0b\x88\xad\x15\xf8\xbb\x0d\x00\
-\xd9\x3b\xfc\x50\x27\x04\xe6\xa6\x20\x53\x39\x80\xed\x7e\x7b\xe9\
-\x79\xb9\xd1\x1f\x03\x51\x5f\x9d\x80\x20\x45\xfc\xa3\x01\x20\xb5\
-\x13\x90\x33\x13\x80\x40\x1b\x0c\xca\xae\x07\x74\x93\xef\x4f\x0a\
-\x00\xfb\x2c\xc0\x97\xbe\xce\x63\xcd\xe3\x41\xe7\xfd\xe0\xbd\xda\
-\xca\x27\x76\xf4\x88\xde\x15\xbe\x3a\x89\xfe\x67\xd6\x3f\x45\xfc\
-\x21\xd1\xd7\x2e\x00\x52\x0b\x81\x9f\x6c\x07\x96\x74\x03\xaa\xd4\
-\x03\xba\x16\xff\x24\x00\x10\x08\xb0\xa8\xf5\x1f\xb5\x82\x40\x68\
-\xd1\xbf\x8b\xfd\x15\x78\x40\x63\xd1\x5f\x12\xa2\x7f\x28\xef\x67\
-\x00\xb4\xd9\x1f\x90\x72\xab\x50\x52\x3d\x00\x47\x50\xc7\x04\x00\
-\x78\xa9\xf5\xcf\xfc\x81\xfd\xa2\x45\x0c\x88\x5d\x06\xec\x3e\x46\
-\x6c\xff\x59\xd4\xaf\x61\xfd\xaf\x1e\x03\xa6\x02\xa0\xc4\xfe\x97\
-\xa6\x02\x9f\x18\x0e\x12\xc3\x88\x7f\x96\x14\x00\xd7\x63\x05\x1f\
-\x1e\xd1\xc7\x22\x7f\x8a\x03\x88\xa5\x00\x54\xeb\x4f\xe9\xff\x5f\
-\x31\x03\x90\x03\x80\x33\xf1\x03\xe4\xcf\x03\x50\x53\x80\x9c\x8d\
-\x42\xc9\x4e\xa0\x7b\xcb\x3f\x21\x00\x00\x40\x5f\xf8\xb1\x8b\xfe\
-\x95\x10\xf9\x5d\x07\x40\xa9\xfe\x53\x0a\x80\xe2\x44\xf8\xa9\xfd\
-\xff\xbb\x03\x00\x20\x6f\x7b\x70\xc9\x64\x60\x4d\x17\x30\x96\xe5\
-\x9f\x10\x00\xe6\xf8\x4b\x5f\xf4\x8f\x45\xfe\xd4\xe8\x9f\x62\xfd\
-\x29\x83\x3f\x39\xd5\xff\x3b\x01\x00\xa0\xce\x3c\x40\xe9\x4c\x00\
-\x16\x0a\x1f\x87\x55\x07\xaa\x2a\xf7\xf1\xf6\xb0\xa4\x5a\x05\x2f\
-\x0b\x5e\x2a\xf0\x59\x11\xde\xcf\xc4\x5f\xb3\xfd\xd7\x1b\x00\x4a\
-\x86\x82\x5a\xb9\x80\xb1\xa3\xfe\x84\x29\x00\x58\x24\x37\x20\x48\
-\x29\x4e\x95\x44\xff\xd8\xe4\x5f\x4a\x11\x10\x3a\x02\x40\x6a\x31\
-\xb0\xe5\x64\x20\x66\x08\x1f\xa7\x50\xc5\x44\x0e\xc0\x75\x03\xa5\
-\x0e\x20\x14\xfd\x7d\x11\x3f\x37\xf2\xe7\x56\xff\xaf\x06\x40\x8d\
-\x6e\x00\x75\x32\xb0\xe9\x88\x30\xce\xa4\x84\x07\x4c\xb9\x0c\xe1\
-\x51\xa5\xe7\xff\xd4\xe8\x5f\x6b\xf2\x6f\x26\x00\xd4\x6a\x07\x66\
-\xb9\x80\x69\xa2\x3e\x3b\x80\xb7\x22\x21\xc5\x11\x9c\xe5\xff\xb1\
-\x3a\x00\x65\xf7\x5f\x8b\x33\x00\x3e\x09\x80\x5c\xf1\xd7\x9e\x0c\
-\x24\xb9\x80\x29\x85\xcf\x00\x20\xa5\x05\x2a\x11\x02\xb1\x02\x60\
-\x68\xfb\x2f\xa5\xf5\xd7\x3b\x00\x00\xd2\x5b\x81\xb5\x26\x03\x71\
-\x7a\xbb\xcf\x00\x68\x02\x82\x94\xaa\x3f\x55\xfc\x35\xfa\xff\x77\
-\x03\x00\x40\xf9\x3c\x40\xb5\x6e\x00\xf2\x73\xce\x00\x88\xa4\x05\
-\x4a\xd1\x8a\x80\xb9\xed\x3f\x6a\x3a\x00\x90\xde\x09\x68\x0d\x80\
-\x98\xe8\x73\xea\x01\x35\x86\x82\xa2\x75\x80\xa9\xed\x3e\x03\xa0\
-\x0a\x08\x6a\xf4\xfe\x53\x6b\x01\xb1\xe2\xdf\x9d\x00\x50\x52\x0c\
-\x6c\x36\x19\xc8\xc2\x67\x00\xd4\x04\x41\xac\x00\x58\x6b\xf8\x27\
-\x77\x08\xe8\x6a\x00\x94\x46\xff\xd2\xc9\xc0\x53\x10\xb0\xf0\x19\
-\x00\xad\x6a\x04\xad\x27\xff\x66\x05\x40\x95\xc9\x40\x56\x3d\x03\
-\xe0\x0a\x10\xc4\x44\x5f\x43\xfc\x35\xce\x00\xf8\x14\x00\x72\xc4\
-\x9f\x7b\x5c\x18\xb2\xf0\x19\x00\x9f\x4e\x0f\xae\xee\xff\x8f\x0c\
-\x00\x72\x27\x80\x6d\x3e\x03\xe0\x6e\xae\x80\x2a\x7e\x09\x65\xed\
-\xbf\x1e\x01\x00\x09\x05\xc0\x20\x04\x58\xf5\x0c\x80\xbb\xbb\x82\
-\x1c\xf1\x53\x00\x90\xda\xfb\xbf\x0a\x00\x94\xfc\x1f\x20\xad\x0b\
-\x70\xf8\x39\x47\x7b\x06\x40\xcf\x30\x28\xd9\xfe\x9b\x3b\x04\x54\
-\x13\x00\x31\xe1\x43\x81\xf8\x4f\x41\xc0\xa2\x67\x00\x8c\x0a\x83\
-\x56\x67\x00\xdc\x11\x00\x49\xf5\x00\x16\x3d\x03\x80\x81\x30\x11\
-\x00\x58\xf0\x0c\x00\x5e\x7e\x20\xc0\x00\x00\x00\x16\x3c\x03\x80\
-\x57\x1e\x10\xc0\x82\x42\x97\x00\x40\xff\xef\xe1\xc5\x00\xe0\x55\
-\x01\x0c\xb7\x01\x00\x0b\x9d\x01\xc0\xeb\x5e\x80\x00\x07\x14\x59\
-\x8f\x08\x86\x81\xc0\xab\xe7\xf5\x1f\xc8\x06\x4b\x79\x1a\xb1\xd2\
-\x6b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-"
-
-qt_resource_name = b"\
-\x00\x0e\
-\x07\xd2\x76\x07\
-\x00\x63\
-\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x77\x00\x68\x00\x65\x00\x65\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
-"
-
-qt_resource_struct = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-"
-
-def qInitResources():
-    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
-    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()
diff --git a/vistrails/gui/modules/resources/colorwheel.png b/vistrails/gui/modules/resources/colorwheel.png
deleted file mode 100644
index 71aea38..0000000
Binary files a/vistrails/gui/modules/resources/colorwheel.png and /dev/null differ
diff --git a/vistrails/gui/modules/source_configure.py b/vistrails/gui/modules/source_configure.py
index 634d4de..99ea3b8 100644
--- a/vistrails/gui/modules/source_configure.py
+++ b/vistrails/gui/modules/source_configure.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -50,6 +50,7 @@ class SourceEditor(QtGui.QTextEdit):
 
     def __init__(self, parent=None):
         QtGui.QTextEdit.__init__(self, parent)
+        self.setAcceptRichText(False)
         self.setLineWrapMode(QtGui.QTextEdit.NoWrap)
         self.formatChanged(None)
         self.setCursorWidth(8)
@@ -58,15 +59,10 @@ class SourceEditor(QtGui.QTextEdit):
                      self.formatChanged)
 
         self.setFocusPolicy(QtCore.Qt.WheelFocus)
-        
+
     def formatChanged(self, f):
         self.setFont(CurrentTheme.PYTHON_SOURCE_EDITOR_FONT)
-        
-#    def focusOutEvent(self, event):
-#        if self.parent():
-#            QtCore.QCoreApplication.sendEvent(self.parent(), event)
-#        QtGui.QTextEdit.focusOutEvent(self, event)
-    
+
 class SourceWidget(PortTableConfigurationWidget):
     def __init__(self, module, controller, editor_class=None,
                  has_inputs=True, has_outputs=True, parent=None,
@@ -86,7 +82,7 @@ class SourceWidget(PortTableConfigurationWidget):
         self.createPortTable(has_inputs, has_outputs)
         self.setupEditor()
         self.adjustSize()
-        
+
     def createPortTable(self, has_inputs=True, has_outputs=True):
         if has_inputs:
             self.inputPortTable = PortTable(self)
@@ -94,20 +90,30 @@ class SourceWidget(PortTableConfigurationWidget):
             self.inputPortTable.setHorizontalHeaderLabels(labels)
             self.inputPortTable.initializePorts(self.module.input_port_specs)
             self.layout().addWidget(self.inputPortTable)
+            horiz = self.inputPortTable.horizontalHeader()
+            horiz.setResizeMode(1, QtGui.QHeaderView.Stretch)
         if has_outputs:
             self.outputPortTable = PortTable(self)
             labels = ["Output Port Name", "Type", "List Depth"]
             self.outputPortTable.setHorizontalHeaderLabels(labels)
-            self.outputPortTable.initializePorts(self.module.output_port_specs, 
+            self.outputPortTable.initializePorts(self.module.output_port_specs,
                                                  True)
             self.layout().addWidget(self.outputPortTable)
-        if has_inputs and has_outputs:
-            self.performPortConnection(self.connect)
+            horiz = self.outputPortTable.horizontalHeader()
+            horiz.setResizeMode(1, QtGui.QHeaderView.Stretch)
         if has_inputs:
             self.inputPortTable.fixGeometry()
+            # resize input ports in case there are no output ports
+            self.inputPortTable.resizeColumnToContents(0)
+            self.inputPortTable.resizeColumnToContents(2)
+        if has_inputs and has_outputs:
+            self.performPortConnection(self.connect)
         if has_outputs:
             self.outputPortTable.fixGeometry()
-            
+            # Resize output (because it is largest) and trigger sync
+            self.outputPortTable.resizeColumnToContents(0)
+            self.outputPortTable.resizeColumnToContents(2)
+
     def initializeCode(self):
         self.codeEditor.clear()
         fid = self.findSourceFunction()
@@ -123,14 +129,14 @@ class SourceWidget(PortTableConfigurationWidget):
                 code, = port.defaults
         if code is not None:
             if self.sourceEncode:
-                code = urllib.unquote(code)
+                code = urllib.unquote(code).decode('utf-8')
             self.codeEditor.setPlainText(code)
         if self.codeEditor.__class__.__name__ not in ['_PythonEditor', '_TextEditor']:
             self.codeEditor.document().setModified(False)
         else:
             self.codeEditor.setModified(False)
         self.codeEditor.setFocus()
-        
+
     def findSourceFunction(self):
         fid = -1
         for i in xrange(self.module.getNumFunctions()):
@@ -138,11 +144,11 @@ class SourceWidget(PortTableConfigurationWidget):
                 fid = i
                 break
         return fid
-    
+
     def setupEditor(self):
         self.initializeCode()
         self.layout().addWidget(self.codeEditor, 1)
-        
+
         self.cursorLabel = QtGui.QLabel()
         self.layout().addWidget(self.cursorLabel)
         if self.codeEditor.__class__.__name__ not in ['_PythonEditor', '_TextEditor']:
@@ -154,18 +160,18 @@ class SourceWidget(PortTableConfigurationWidget):
                          QtCore.SIGNAL('cursorPositionChanged(int, int)'),
                          self.updateCursorLabel)
         self.updateCursorLabel()
-            
+
     def updateCursorLabel(self, x=0, y=0):
         if self.codeEditor.__class__.__name__ not in ['_PythonEditor', '_TextEditor']:
             cursor = self.codeEditor.textCursor()
             x = cursor.blockNumber()
             y = cursor.columnNumber()
-            
+
         self.cursorLabel.setText('Line: %d / Col: %d' % (x+1, y+1))
-    
+
     def sizeHint(self):
         return QtCore.QSize(512, 512)
-    
+
     def performPortConnection(self, operation):
         operation(self.inputPortTable.horizontalHeader(),
                   QtCore.SIGNAL('sectionResized(int,int,int)'),
@@ -180,56 +186,63 @@ class SourceWidget(PortTableConfigurationWidget):
             self.inputPortTable.horizontalHeader().resizeSection(logicalIndex,newSize)
         if self.outputPortTable.horizontalHeader().sectionSize(logicalIndex)!=newSize:
             self.outputPortTable.horizontalHeader().resizeSection(logicalIndex,newSize)
+        QtGui.QApplication.processEvents()
         self.performPortConnection(self.connect)
-    
+
     def activate(self):
         self.codeEditor.setFocus(QtCore.Qt.MouseFocusReason)
-            
+
 class SourceViewerWidget(SourceWidget):
     def __init__(self, module, controller, editor_class=None,
                  has_inputs=True, has_outputs=True, parent=None,
                  encode=True, portName='source'):
         SourceWidget.__init__(self, module, controller, editor_class,
-                              has_inputs, has_outputs, parent, encode, 
+                              has_inputs, has_outputs, parent, encode,
                               portName)
         self.codeEditor.setReadOnly(True)
         self.createCloseButton()
         self.setWindowTitle('%s Configuration (Read-Only)' % module.name)
         self.setWindowFlags(QtCore.Qt.Window)
         self.adjustSize()
-        
+
     def createPortTable(self, has_inputs=True, has_outputs=True):
         if has_inputs:
             self.inputPortTable = QtGui.QTableWidget(1, 3, self)
-            labels = ["Input Port Name", "Type", "List Depth"]
-            self.inputPortTable.horizontalHeader().setResizeMode(QtGui.QHeaderView.Interactive)
             self.inputPortTable.horizontalHeader().setMovable(False)
-            #self.inputPortTable.horizontalHeader().setStretchLastSection(True)
-            self.inputPortTable.horizontalHeader().setResizeMode(1, self.inputPortTable.horizontalHeader().Stretch)
+            self.inputPortTable.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
+            self.inputPortTable.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+            labels = ["Input Port Name", "Type", "List Depth"]
             self.inputPortTable.setHorizontalHeaderLabels(labels)
-            self.initializePorts(self.inputPortTable, 
+            self.initializePorts(self.inputPortTable,
                                  self.module.input_port_specs)
             self.layout().addWidget(self.inputPortTable)
+            horiz = self.inputPortTable.horizontalHeader()
+            horiz.setResizeMode(1, QtGui.QHeaderView.Stretch)
         if has_outputs:
             self.outputPortTable = QtGui.QTableWidget(1, 3, self)
-            labels = ["Output Port Name", "Type", "List Depth"]
-            self.outputPortTable.horizontalHeader().setResizeMode(QtGui.QHeaderView.Interactive)
             self.outputPortTable.horizontalHeader().setMovable(False)
-            #self.outputPortTable.horizontalHeader().setStretchLastSection(True)
-            self.outputPortTable.horizontalHeader().setResizeMode(1, self.outputPortTable.horizontalHeader().Stretch)
-            
+            self.outputPortTable.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
+            self.outputPortTable.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+            labels = ["Output Port Name", "Type", "List Depth"]
             self.outputPortTable.setHorizontalHeaderLabels(labels)
-            self.initializePorts(self.outputPortTable, 
+            self.initializePorts(self.outputPortTable,
                                  self.module.output_port_specs, True)
             self.layout().addWidget(self.outputPortTable)
-        if has_inputs and has_outputs:
-            self.performPortConnection(self.connect)
-            
+            horiz = self.outputPortTable.horizontalHeader()
+            horiz.setResizeMode(1, QtGui.QHeaderView.Stretch)
         if has_inputs:
             self.fixTableGeometry(self.inputPortTable)
+            # resize input ports in case there are no output ports
+            self.inputPortTable.resizeColumnToContents(0)
+            self.inputPortTable.resizeColumnToContents(2)
+        if has_inputs and has_outputs:
+            self.performPortConnection(self.connect)
         if has_outputs:
             self.fixTableGeometry(self.outputPortTable)
-            
+            # Resize output (because it is largest) and trigger sync
+            self.outputPortTable.resizeColumnToContents(0)
+            self.outputPortTable.resizeColumnToContents(2)
+
     def initializePorts(self, table, port_specs, reverse_order=False):
         if reverse_order:
             port_specs_iter = reversed(port_specs)
@@ -251,7 +264,7 @@ class SourceViewerWidget(SourceWidget):
             item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
             table.setItem(row, 2, item)
             table.setRowCount(table.rowCount()+1)
-        
+
     def fixTableGeometry(self, table):
         rect = table.visualRect(table.model().index(table.rowCount()-1,
                                                     table.columnCount()-1))
@@ -265,19 +278,19 @@ class SourceViewerWidget(SourceWidget):
         hboxlayout.addStretch()
         hboxlayout.addWidget(self.closeButton)
         hboxlayout.addStretch()
-        self.layout().addLayout(hboxlayout) 
-        
+        self.layout().addLayout(hboxlayout)
+
     def closeWidget(self):
         self.emit(QtCore.SIGNAL("widgetClosed"))
         self.close()
-        
+
 class SourceConfigurationWidget(SourceWidget):
 
     def __init__(self, module, controller, editor_class=None,
                  has_inputs=True, has_outputs=True, parent=None,
                  encode=True, portName='source'):
         SourceWidget.__init__(self, module, controller, editor_class,
-                              has_inputs, has_outputs, parent, encode, 
+                              has_inputs, has_outputs, parent, encode,
                               portName)
         self.detached_windows = []
         self.createButtons()
@@ -293,17 +306,17 @@ class SourceConfigurationWidget(SourceWidget):
         self.adjustSize()
         self.setMouseTracking(True)
         self.mouseOver = False
-    
+
     def enterEvent(self, event):
         self.mouseOver = True
-        
+
     def leaveEvent(self, event):
         self.mouseOver = False
-         
+
     def createButtons(self):
         """ createButtons() -> None
         Create and connect signals to Save & Reset button
-        
+
         """
         self.buttonLayout = QtGui.QHBoxLayout()
         self.buttonLayout.setMargin(5)
@@ -325,14 +338,14 @@ class SourceConfigurationWidget(SourceWidget):
         self.connect(self.saveButton, QtCore.SIGNAL('clicked(bool)'),
                      self.saveTriggered)
         self.connect(self.resetButton, QtCore.SIGNAL('clicked(bool)'),
-                     self.resetTriggered)        
-        
+                     self.resetTriggered)
+
     def detachReadOnlyWindow(self):
         from vistrails.gui.vistrails_window import _app
         widget = SourceViewerWidget(self.module, self.controller,
-                                           type(self.codeEditor), 
+                                           type(self.codeEditor),
                                            self.has_inputs, self.has_outputs,
-                                           None, self.sourceEncode, 
+                                           None, self.sourceEncode,
                                            self.sourcePortName)
         window = QtGui.QMainWindow()
         window.setCentralWidget(widget)
@@ -342,7 +355,7 @@ class SourceConfigurationWidget(SourceWidget):
         widget.setVisible(True)
         _app.palette_window.windows.append(window)
         window.show()
-        
+
     def updateVistrail(self):
         """updateVistrail() -> None
         Update vistrail to contain changes to the python source
@@ -367,13 +380,9 @@ class SourceConfigurationWidget(SourceWidget):
             modified = self.codeEditor.document().isModified()
         else:
             modified = self.codeEditor.isModified()
-        
+
         if (self.codeEditor is not None and modified):
-            try:
-                code = str(self.codeEditor.toPlainText())
-            except UnicodeEncodeError, e:
-                debug.critical('Source Code Editor does not support non-ascii characters', e)
-                return False
+            code = self.codeEditor.toPlainText().encode('utf-8')
             if self.sourceEncode:
                 code = urllib.quote(code)
             functions.append((self.sourcePortName, [code]))
@@ -381,15 +390,15 @@ class SourceConfigurationWidget(SourceWidget):
             # nothing changed
             return True
         try:
-            self.controller.update_ports_and_functions(self.module.id, 
-                                                       deleted_ports, 
+            self.controller.update_ports_and_functions(self.module.id,
+                                                       deleted_ports,
                                                        added_ports,
                                                        functions)
         except PortAlreadyExists, e:
             debug.critical('Port Already Exists %s' % e)
             return False
         return True
-    
+
     def resetTriggered(self, checked = False):
         if self.has_inputs:
             self.inputPortTable.clearContents()
@@ -399,24 +408,19 @@ class SourceConfigurationWidget(SourceWidget):
         if self.has_outputs:
             self.outputPortTable.clearContents()
             self.outputPortTable.setRowCount(1)
-            self.outputPortTable.initializePorts(self.module.output_port_specs, 
+            self.outputPortTable.initializePorts(self.module.output_port_specs,
                                              True)
             self.outputPortTable.fixGeometry()
-            
+
         self.initializeCode()
         self.saveButton.setEnabled(False)
         self.resetButton.setEnabled(False)
         self.state_changed = False
         self.emit(QtCore.SIGNAL("stateChanged"))
-        
+
     def updateState(self):
         self.saveButton.setEnabled(True)
         self.resetButton.setEnabled(True)
         if not self.state_changed:
             self.state_changed = True
             self.emit(QtCore.SIGNAL("stateChanged"))
-    
-#    def focusOutEvent(self, event):
-        #if not self.mouseOver:
-        #    self.askToSaveChanges()
-#        QtGui.QWidget.focusOutEvent(self, event)  
diff --git a/vistrails/gui/modules/string_configure.py b/vistrails/gui/modules/string_configure.py
index e875107..51561e1 100644
--- a/vistrails/gui/modules/string_configure.py
+++ b/vistrails/gui/modules/string_configure.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -43,7 +43,8 @@ from vistrails.gui.theme import CurrentTheme
 
 def TextEditor(parent=None):
     try:
-        py_import('PyQt4.Qsci', {'linux-ubuntu': 'python-qscintilla2'})
+        py_import('PyQt4.Qsci', {'linux-debian': 'python-qscintilla2',
+                                 'linux-ubuntu': 'python-qscintilla2'}, True)
     except ImportError:
         return OldTextEditor(parent)
     else:
@@ -129,6 +130,7 @@ class OldTextEditor(QtGui.QTextEdit):
 
     def __init__(self, parent=None):
         QtGui.QTextEdit.__init__(self, parent)
+        self.setAcceptRichText(False)
         self.setLineWrapMode(QtGui.QTextEdit.NoWrap)
         self.formatChanged(None)
         self.setCursorWidth(8)
diff --git a/vistrails/gui/modules/stringformat_configuration.py b/vistrails/gui/modules/stringformat_configuration.py
index db7c7aa..e346065 100644
--- a/vistrails/gui/modules/stringformat_configuration.py
+++ b/vistrails/gui/modules/stringformat_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/modules/tuple_configuration.py b/vistrails/gui/modules/tuple_configuration.py
index a5098a2..e7e3de8 100644
--- a/vistrails/gui/modules/tuple_configuration.py
+++ b/vistrails/gui/modules/tuple_configuration.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -58,10 +58,7 @@ class PortTable(QtGui.QTableWidget):
     def __init__(self, parent=None):
         QtGui.QTableWidget.__init__(self,1,3,parent)
         horiz = self.horizontalHeader()
-        horiz.setResizeMode(QtGui.QHeaderView.Interactive)
         horiz.setMovable(False)
-        #horiz.setStretchLastSection(True)
-        horiz.setResizeMode(1, horiz.Stretch)
         self.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
         self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
         self.delegate = PortTableItemDelegate(self)
@@ -406,7 +403,7 @@ class TupleConfigurationWidget(PortTableConfigurationWidget):
         self.portTable = PortTable(self)
         self.portTable.setHorizontalHeaderLabels(
             ['Input Port Name', 'Type', 'List Depth'])
-        
+
         # We know that the Tuple module initially doesn't have any
         # input port, we just use the local registry to see what ports
         # it has at the time of configuration.
@@ -414,6 +411,11 @@ class TupleConfigurationWidget(PortTableConfigurationWidget):
         self.portTable.fixGeometry()
         centralLayout.addWidget(self.portTable)
 
+        horiz = self.portTable.horizontalHeader()
+        horiz.setResizeMode(1, QtGui.QHeaderView.Stretch)
+        self.portTable.resizeColumnToContents(0)
+        self.portTable.resizeColumnToContents(2)
+
         # We need a padded widget to take all vertical white space away
         paddedWidget = QtGui.QWidget(self)
         paddedWidget.setSizePolicy(QtGui.QSizePolicy.Ignored,
@@ -514,7 +516,7 @@ class UntupleConfigurationWidget(PortTableConfigurationWidget):
         # Then add a PortTable to our configuration widget
         self.portTable = PortTable(self)
         self.portTable.setHorizontalHeaderLabels(
-            ['Output Port Name', 'Type'])
+            ['Output Port Name', 'Type', 'List Depth'])
         
         # We know that the Tuple module initially doesn't have any
         # input port, we just use the local registry to see what ports
@@ -529,6 +531,11 @@ class UntupleConfigurationWidget(PortTableConfigurationWidget):
                                    QtGui.QSizePolicy.Expanding)
         centralLayout.addWidget(paddedWidget, 1)
 
+        horiz = self.portTable.horizontalHeader()
+        horiz.setResizeMode(1, QtGui.QHeaderView.Stretch)
+        self.portTable.resizeColumnToContents(0)
+        self.portTable.resizeColumnToContents(2)
+
         # Then we definitely need a Save & Reset button
         self.createButtons()
         
diff --git a/vistrails/gui/modules/utils.py b/vistrails/gui/modules/utils.py
index d215080..f09b80e 100644
--- a/vistrails/gui/modules/utils.py
+++ b/vistrails/gui/modules/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/open_db_window.py b/vistrails/gui/open_db_window.py
index 2886a65..aa3b61d 100644
--- a/vistrails/gui/open_db_window.py
+++ b/vistrails/gui/open_db_window.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/__init__.py b/vistrails/gui/paramexplore/__init__.py
index c027816..166c8f0 100644
--- a/vistrails/gui/paramexplore/__init__.py
+++ b/vistrails/gui/paramexplore/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/param_view.py b/vistrails/gui/paramexplore/param_view.py
index 0dd1702..cbb3cd9 100644
--- a/vistrails/gui/paramexplore/param_view.py
+++ b/vistrails/gui/paramexplore/param_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/pe_inspector.py b/vistrails/gui/paramexplore/pe_inspector.py
index 1d5dd90..1932431 100644
--- a/vistrails/gui/paramexplore/pe_inspector.py
+++ b/vistrails/gui/paramexplore/pe_inspector.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/pe_pipeline.py b/vistrails/gui/paramexplore/pe_pipeline.py
index aac921b..b89fc31 100644
--- a/vistrails/gui/paramexplore/pe_pipeline.py
+++ b/vistrails/gui/paramexplore/pe_pipeline.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/pe_tab.py b/vistrails/gui/paramexplore/pe_tab.py
index 51258d2..6c9dbfa 100644
--- a/vistrails/gui/paramexplore/pe_tab.py
+++ b/vistrails/gui/paramexplore/pe_tab.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -47,8 +47,8 @@ from vistrails.core import debug
 from vistrails.core.interpreter.default import get_default_interpreter
 from vistrails.core.modules.module_registry import get_module_registry
 from vistrails.core.param_explore import ActionBasedParameterExploration
-from vistrails.core.system import current_time, strftime, \
-    get_vistrails_default_pkg_prefix
+from vistrails.core import reportusage
+from vistrails.core.system import current_time, strftime
 from vistrails.gui.common_widgets import QDockContainer, QToolWindowInterface
 from vistrails.gui.paramexplore.pe_table import QParameterExplorationWidget, QParameterSetEditor
 from vistrails.gui.paramexplore.virtual_cell import QVirtualCellWindow
@@ -267,6 +267,7 @@ class QParameterExplorationTab(QDockContainer, QToolWindowInterface):
         corresponding to each dimension
         
         """
+        reportusage.record_feature('paramexplore', self.controller)
         registry = get_module_registry()
         actions = self.peWidget.table.collectParameterActions()
         spreadsheet_pkg = 'org.vistrails.vistrails.spreadsheet'
diff --git a/vistrails/gui/paramexplore/pe_table.py b/vistrails/gui/paramexplore/pe_table.py
index 0457304..5e707b5 100644
--- a/vistrails/gui/paramexplore/pe_table.py
+++ b/vistrails/gui/paramexplore/pe_table.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/pe_view.py b/vistrails/gui/paramexplore/pe_view.py
index 2bd582a..1402d10 100644
--- a/vistrails/gui/paramexplore/pe_view.py
+++ b/vistrails/gui/paramexplore/pe_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/paramexplore/virtual_cell.py b/vistrails/gui/paramexplore/virtual_cell.py
index a93eea6..d0742aa 100644
--- a/vistrails/gui/paramexplore/virtual_cell.py
+++ b/vistrails/gui/paramexplore/virtual_cell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -658,13 +658,3 @@ class TestCamelCase(unittest.TestCase):
         self.assertEqual(split_camel_case('parseHTML'), 'parse\nHTML')
         self.assertEqual(split_camel_case('HTMLParser'), 'HTML\nParser')
         self.assertEqual(split_camel_case('vHTMLParser'), 'v\nHTML\nParser')
-
-if __name__=="__main__":
-    import sys
-    import vistrails.gui.theme
-    app = QtGui.QApplication(sys.argv)
-    vistrails.gui.theme.initializeCurrentTheme()
-    vc = QVirtualCellConfiguration()
-    vc.configVirtualCells(['VTKCell', 'ImageViewerCell', 'RichTextCell'])
-    vc.show()
-    sys.exit(app.exec_())
diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py
index a71471f..208a0d8 100644
--- a/vistrails/gui/pipeline_view.py
+++ b/vistrails/gui/pipeline_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -51,6 +51,7 @@ from __future__ import division
 from PyQt4 import QtCore, QtGui
 from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core import debug
+from vistrails.core.data_structures.graph import GraphContainsCycles
 from vistrails.core.db.action import create_action
 from vistrails.core.system import systemType
 from vistrails.core.modules.module_registry import get_module_registry, \
@@ -111,7 +112,7 @@ class QAbstractGraphicsPortItem(QtGui.QAbstractGraphicsShapeItem):
                                       parent: QGraphicsItem)
                                       -> QAbstractGraphicsPortItem
         Create the shape, initialize its pen and brush accordingly
-        
+
         """
         # local lookups are faster than global lookups..
         self._rect = CurrentTheme.PORT_RECT.translated(x,y)
@@ -608,10 +609,10 @@ class QGraphicsConfigureItem(QtGui.QGraphicsPolygonItem):
         """
         self.scene().clearSelection()
         self.parentItem().setSelected(True)
+        self.ungrabMouse()
         self.contextMenuEvent(event)
         event.accept()
-        self.ungrabMouse()
-        
+
     def contextMenuEvent(self, event):
         """contextMenuEvent(event: QGraphicsSceneContextMenuEvent) -> None
         Captures context menu event.
@@ -637,52 +638,52 @@ class QGraphicsConfigureItem(QtGui.QGraphicsPolygonItem):
         Create actions related to context menu 
 
         """
-        self.configureAct = QtGui.QAction("Edit Configuration\tCtrl+E", self.scene())
+        self.configureAct = QtGui.QAction("Edit &Configuration\tCtrl+E", self.scene())
         self.configureAct.setStatusTip("Edit the Configure of the module")
         QtCore.QObject.connect(self.configureAct, 
                                QtCore.SIGNAL("triggered()"),
                                self.configure)
-        self.annotateAct = QtGui.QAction("Annotate", self.scene())
+        self.annotateAct = QtGui.QAction("&Annotate", self.scene())
         self.annotateAct.setStatusTip("Annotate the module")
         QtCore.QObject.connect(self.annotateAct,
                                QtCore.SIGNAL("triggered()"),
                                self.annotate)
-        self.viewDocumentationAct = QtGui.QAction("View Documentation", self.scene())
+        self.viewDocumentationAct = QtGui.QAction("View &Documentation", self.scene())
         self.viewDocumentationAct.setStatusTip("View module documentation")
         QtCore.QObject.connect(self.viewDocumentationAct,
                                QtCore.SIGNAL("triggered()"),
                                self.viewDocumentation)
-        self.editLoopingAct = QtGui.QAction("Execution Options", self.scene())
+        self.editLoopingAct = QtGui.QAction("Execution &Options", self.scene())
         self.editLoopingAct.setStatusTip("Edit module execution options")
         QtCore.QObject.connect(self.editLoopingAct,
                                QtCore.SIGNAL("triggered()"),
                                self.editLooping)
-        self.changeModuleLabelAct = QtGui.QAction("Set Module Label...", self.scene())
+        self.changeModuleLabelAct = QtGui.QAction("Set Module &Label...", self.scene())
         self.changeModuleLabelAct.setStatusTip("Set or remove module label")
         QtCore.QObject.connect(self.changeModuleLabelAct,
                                QtCore.SIGNAL("triggered()"),
                                self.changeModuleLabel)
-        self.setBreakpointAct = QtGui.QAction("Set Breakpoint", self.scene())
+        self.setBreakpointAct = QtGui.QAction("Set &Breakpoint", self.scene())
         self.setBreakpointAct.setStatusTip("Set Breakpoint")
         QtCore.QObject.connect(self.setBreakpointAct,
                                QtCore.SIGNAL("triggered()"),
                                self.set_breakpoint)
-        self.setWatchedAct = QtGui.QAction("Watch Module", self.scene())
+        self.setWatchedAct = QtGui.QAction("&Watch Module", self.scene())
         self.setWatchedAct.setStatusTip("Watch Module")
         QtCore.QObject.connect(self.setWatchedAct,
                                QtCore.SIGNAL("triggered()"),
                                self.set_watched)
-        self.runModuleAct = QtGui.QAction("Run this module", self.scene())
+        self.runModuleAct = QtGui.QAction("&Run this module", self.scene())
         self.runModuleAct.setStatusTip("Run this module")
         QtCore.QObject.connect(self.runModuleAct,
                                QtCore.SIGNAL("triggered()"),
                                self.run_module)
-        self.setErrorAct = QtGui.QAction("Show Error", self.scene())
+        self.setErrorAct = QtGui.QAction("Show &Error", self.scene())
         self.setErrorAct.setStatusTip("Show Error")
         QtCore.QObject.connect(self.setErrorAct,
                                QtCore.SIGNAL("triggered()"),
                                self.set_error)
-        self.upgradeAbstractionAct = QtGui.QAction("Upgrade Module", self.scene())
+        self.upgradeAbstractionAct = QtGui.QAction("&Upgrade Module", self.scene())
         self.upgradeAbstractionAct.setStatusTip("Upgrade the subworkflow module")
         QtCore.QObject.connect(self.upgradeAbstractionAct,
                    QtCore.SIGNAL("triggered()"),
@@ -963,14 +964,14 @@ class QGraphicsConnectionItem(QGraphicsItemInterface,
         # draw multiple connections depending on list depth
         def diff(i, depth):
             return QtCore.QPointF((5.0 + 10.0*i)/depth - 5.0, 0.0)
-        
+
         srcParent = self.srcPortItem.parentItem()
         startDepth = srcParent.module.list_depth + 1 if srcParent else 1
         dstParent = self.dstPortItem.parentItem()
         endDepth = dstParent.module.list_depth + 1 if dstParent else 1
         starts = [diff(i, startDepth) for i in xrange(startDepth)]
         ends = [diff(i, endDepth) for i in xrange(endDepth)]
-    
+
         first = True
         for start in starts:
             for end in ends:
@@ -1072,7 +1073,6 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
         self.invalid = False
         self._module_shape = None
         self._original_module_shape = None
-        self._old_connection_ids = None
         self.errorTrace = None
         self.is_breakpoint = False
         self._needs_state_updated = True
@@ -1105,7 +1105,7 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
         #     f2_names = set(f.name for f in m2.functions)
         #     return (len(f1_names ^ f2_names) > 0)
 
-        if self.show_widgets != get_vistrails_configuration(
+        if not self.invalid and self.show_widgets != get_vistrails_configuration(
                                    ).check('showInlineParameterWidgets') and \
            core_module.editable_input_ports:
             return True
@@ -1118,7 +1118,7 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
         #     return True
         else:
             # check for changed edit widgets
-            if core_module.editable_input_ports != \
+            if not self.invalid and core_module.editable_input_ports != \
                self.module.editable_input_ports:
                 # shape has changed so we need to recreate the module
                 return True
@@ -1132,16 +1132,17 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
             cop = sorted([x.key_no_id() for x in self.outputPorts])
             d = PortEndPoint.Destination
             s = PortEndPoint.Source
-            pv = core_module.portVisible
+            ipv = core_module.visible_input_ports
+            opv = core_module.visible_output_ports
             new_ip = []
             new_op = []
             try:
                 new_ip = sorted([x.key_no_id() 
                                  for x in core_module.destinationPorts()
-                                 if (not x.optional or (d, x._db_name) in pv)])
+                                 if (not x.optional or x._db_name in ipv)])
                 new_op = sorted([x.key_no_id() 
                                  for x in core_module.sourcePorts()
-                                 if (not x.optional or (s, x._db_name) in pv)])
+                                 if (not x.optional or x._db_name in opv)])
             except ModuleRegistryException, e:
                 debug.critical("MODULE REGISTRY EXCEPTION: %s" % e)
             if cip <> new_ip or cop <> new_op:
@@ -1150,9 +1151,14 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
 
     def functions_have_been_deleted(self, core_module):
         # check if a visible function has been deleted
+        if self.invalid:
+            return set()
         before = self._cur_function_names
         after = set(f.name for f in core_module.functions)
-        return (before - after) & core_module.editable_input_ports
+        if self.invalid:
+            return before - after
+        else:
+            return (before - after) & core_module.editable_input_ports
 
     def moduleFunctionsHaveChanged(self, core_module):
         m2 = core_module
@@ -1292,7 +1298,8 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
         elif self.ghosted:
             self.modulePen = CurrentTheme.GHOSTED_MODULE_PEN
             self.labelPen = CurrentTheme.GHOSTED_MODULE_LABEL_PEN
-        elif self.invalid:
+        # do not show as invalid in search mode
+        elif self.invalid and not (self.controller and self.controller.search):
             self.modulePen = CurrentTheme.INVALID_MODULE_PEN
             self.labelPen = CurrentTheme.INVALID_MODULE_LABEL_PEN
         else:
@@ -1312,7 +1319,8 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
             self.moduleBrush = CurrentTheme.BREAKPOINT_MODULE_BRUSH
         elif self.ghosted:
             self.moduleBrush = CurrentTheme.GHOSTED_MODULE_BRUSH
-        elif self.invalid:
+        # do not show as invalid in search mode
+        elif self.invalid and not (self.controller and self.controller.search):
             self.moduleBrush = CurrentTheme.INVALID_MODULE_BRUSH
         else:
             self.moduleBrush = CurrentTheme.MODULE_BRUSH
@@ -1502,22 +1510,18 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
         error = None
         if module.is_valid:
             try:
-                d = PortEndPoint.Destination
                 for p in module.destinationPorts():
                     if not p.optional:
                         inputPorts.append(p)
-                    # elif (d, p.name) in module.portVisible:
                     elif p.name in module.visible_input_ports:
                         visibleOptionalInputPorts.append(p)
                     else:
                         self.optionalInputPorts.append(p)
                 inputPorts += visibleOptionalInputPorts
 
-                s = PortEndPoint.Source
                 for p in module.sourcePorts():
                     if not p.optional:
                         outputPorts.append(p)
-                    # elif (s, p.name) in module.portVisible:
                     elif p.name in module.visible_output_ports:
                         visibleOptionalOutputPorts.append(p)
                     else:
@@ -1691,7 +1695,8 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
 
         portShape.controller = self.controller
         portShape.port = port
-        if not port.is_valid:
+        # do not show as invalid in search mode
+        if not port.is_valid and not (self.controller and self.controller.search):
             portShape.setInvalid(True)
         return portShape
 
@@ -1789,7 +1794,9 @@ class QGraphicsModuleItem(QGraphicsItemInterface, QtGui.QGraphicsItem):
                             optional=True)
 
         item = self.createPortItem(new_spec, *next_pos)
-        item.setInvalid(True)
+        # do not show as invalid in search mode
+        if not (self.controller and self.controller.search):
+            item.setInvalid(True)
         port_dict[new_spec] = item
         next_pos[0] = next_op(next_pos[0], 
                               (CurrentTheme.PORT_WIDTH +
@@ -2033,6 +2040,24 @@ def choose_converter(converters, parent=None):
     else:
         return None
 
+class StacktracePopup(QtGui.QDialog):
+    def __init__(self, errorTrace='', parent=None):
+        QtGui.QDialog.__init__(self, parent)
+        self.resize(700, 400)
+        self.setWindowTitle('Module Error')
+        layout = QtGui.QVBoxLayout()
+        self.setLayout(layout)
+        text = QtGui.QTextEdit('')
+        text.insertPlainText(errorTrace)
+        text.setReadOnly(True)
+        text.setLineWrapMode(QtGui.QTextEdit.NoWrap)
+        layout.addWidget(text)
+        close = QtGui.QPushButton('Close', self)
+        close.setFixedWidth(100)
+        layout.addWidget(close)
+        self.connect(close, QtCore.SIGNAL('clicked()'),
+                     self, QtCore.SLOT('close()'))
+
 ##############################################################################
 # QPipelineScene
 
@@ -2057,6 +2082,8 @@ class QPipelineScene(QInteractiveGraphicsScene):
         self.noUpdate = False
         self.installEventFilter(self)
         self.pipeline_tab = None
+        # These are the IDs currently present in the scene, used to update it
+        # faster when switching pipelines via setupScene()
         self._old_module_ids = set()
         self._old_connection_ids = set()
         self._var_selected_port = None
@@ -2080,13 +2107,12 @@ class QPipelineScene(QInteractiveGraphicsScene):
     def addModule(self, module, moduleBrush=None):
         """ addModule(module: Module, moduleBrush: QBrush) -> QGraphicsModuleItem
         Add a module to the scene
-        
+
         """
         moduleItem = QGraphicsModuleItem(None)
         if self.controller and self.controller.search:
             moduleQuery = (self.controller.current_version, module)
             matched = self.controller.search.matchModule(*moduleQuery)
-            matched = self.controller.search.matchModule(*moduleQuery)
             moduleItem.setGhosted(not matched)
         moduleItem.controller = self.controller
         moduleItem.setupModule(module, self.read_only_mode)
@@ -2198,9 +2224,8 @@ class QPipelineScene(QInteractiveGraphicsScene):
         selected = self.modules[m_id].isSelected()
         depending_connections = \
             [c_id for c_id in self.modules[m_id].dependingConnectionItems()]
-        # old_depending_connections = self.modules[m_id]._old_connection_ids
         
-        #when configuring a python source, maybe connections were deleted
+        # when configuring a python source, maybe connections were deleted
         # but are not in the current pipeline. So we need to check the depending
         # connections of the module just before the configure. 
         for c_id in depending_connections:
@@ -2260,20 +2285,22 @@ class QPipelineScene(QInteractiveGraphicsScene):
             common_connections = new_connections.intersection(self._old_connection_ids)
 
 
-            # Check if connections to be added require 
+            # Check if connections to be added require
             # optional ports in modules to be visible
-            for c_id in connections_to_be_added:
+            # check all connections because the visible flag
+            # may have been cleared
+            for c_id in new_connections:
                 connection = pipeline.connections[c_id]
                 smid = connection.source.moduleId
                 s = connection.source.spec
                 if s and s.optional:
                     smm = pipeline.modules[smid]
-                    smm.portVisible.add((PortEndPoint.Source,s.name))
+                    smm.visible_output_ports.add(s.name)
                 dmid = connection.destination.moduleId   
                 d = connection.destination.spec
                 if d and d.optional:
                     dmm = pipeline.modules[dmid]
-                    dmm.portVisible.add((PortEndPoint.Destination,d.name))
+                    dmm.visible_input_ports.add(d.name)
 
             # remove old connection shapes
             for c_id in connections_to_be_deleted:
@@ -2623,7 +2650,7 @@ class QPipelineScene(QInteractiveGraphicsScene):
         else:
             src_port_item = tmp_connection_item.snapPortItem
             dst_port_item = tmp_connection_item.startPortItem
-        
+
         if src_port_item.parentItem().id < 0 or start_is_src:
             src_module_id = module.id
             dst_module_id = dst_port_item.parentItem().id
@@ -2631,6 +2658,13 @@ class QPipelineScene(QInteractiveGraphicsScene):
             src_module_id = src_port_item.parentItem().id
             dst_module_id = module.id
 
+        graph = copy.copy(self.controller.current_pipeline.graph)
+        graph.add_edge(src_module_id, dst_module_id)
+        try:
+            graph.dfs(raise_if_cyclic=True)
+        except GraphContainsCycles:
+            return False
+
         reg = get_module_registry()
 
         if reg.ports_can_connect(src_port_item.port, dst_port_item.port):
@@ -2676,12 +2710,16 @@ class QPipelineScene(QInteractiveGraphicsScene):
             self.addConnection(conn1)
             self.addConnection(conn2)
 
+        return True
+
     def addConnectionFromTmp(self, tmp_connection_item, module, start_is_src):
-        self.createConnectionFromTmp(tmp_connection_item, module, start_is_src)
+        result = self.createConnectionFromTmp(tmp_connection_item, module,
+                                              start_is_src)
         self.reset_module_colors()
         self._old_connection_ids = \
             set(self.controller.current_pipeline.connections)
         self._old_module_ids = set(self.controller.current_pipeline.modules)
+        return result
 
     def add_module_event(self, event, data):
         """Adds a new module from a drop event"""
@@ -2752,15 +2790,21 @@ class QPipelineScene(QInteractiveGraphicsScene):
         if self.skip_update:
             return
         if (self.controller.current_pipeline and
-            self.controller.current_pipeline.is_valid):
-            for module_id, list_depth in \
-                    self.controller.current_pipeline.mark_list_depth(modules):
-                if module_id in self.modules:
-                    self.modules[module_id].module.list_depth = list_depth
+                self.controller.current_pipeline.is_valid):
+            try:
+                depths = \
+                    self.controller.current_pipeline.mark_list_depth(modules)
+            except GraphContainsCycles:
+                # Pipeline is invalid, we don't really care that the depths are
+                # not right
+                pass
+            else:
+                for module_id, list_depth in depths:
+                    if module_id in self.modules:
+                        self.modules[module_id].module.list_depth = list_depth
         for c in self.connections.itervalues():
             c.setupConnection()
 
-    
     def delete_tmp_module(self):
         if self.tmp_module_item is not None:
             self.removeItem(self.tmp_module_item)
@@ -2847,11 +2891,16 @@ class QPipelineScene(QInteractiveGraphicsScene):
                         m.dependingConnectionItems().iterkeys())
                 # remove_connection updates the dependency list on the
                 # other side of connections, cannot use removeItem
-                for c_id in dep_connection_ids:
-                    self.remove_connection(c_id)
-                for m_id in module_ids:
-                    self.remove_module(m_id)
-                self.controller.delete_module_list(module_ids)
+                try:
+                    skip_update = True
+                    for c_id in dep_connection_ids:
+                        self.remove_connection(c_id)
+                    for m_id in module_ids:
+                        self.remove_module(m_id)
+                    self.controller.delete_module_list(module_ids)
+                finally:
+                    self.skip_update = False
+                    self.update_connections()
                 self.updateSceneBoundingRect()
                 self.reset_module_colors()
                 self.update()
@@ -2864,12 +2913,17 @@ class QPipelineScene(QInteractiveGraphicsScene):
                 # module ids, and the for loop above takes care of
                 # connection ids. So we don't need to call anything.
             else:
-                for c_id in connection_ids:
-                    self.remove_connection(c_id)
-                self.controller.reset_pipeline_view = False
-                self.controller.delete_connection_list(connection_ids)
-                self.reset_module_colors()
-                self.controller.reset_pipeline_view = True
+                try:
+                    self.skip_update = False
+                    for c_id in connection_ids:
+                        self.remove_connection(c_id)
+                    self.controller.reset_pipeline_view = False
+                    self.controller.delete_connection_list(connection_ids)
+                    self.reset_module_colors()
+                    self.controller.reset_pipeline_view = True
+                finally:
+                    self.skip_update = False
+                    self.update_connections()
                 # Current pipeline changed, so we need to change the
                 # _old_connection_ids. However, remove_connection
                 # above takes care of connection ids, so we don't need
@@ -3105,24 +3159,7 @@ class QPipelineScene(QInteractiveGraphicsScene):
         text = toolTip
         if errorTrace and errorTrace.strip() != 'None':
             text += '\n\n' + errorTrace
-        class StackPopup(QtGui.QDialog):
-            def __init__(self, errorTrace='', parent=None):
-                QtGui.QDialog.__init__(self, parent)
-                self.resize(700, 400)
-                self.setWindowTitle('Module Error')
-                layout = QtGui.QVBoxLayout()
-                self.setLayout(layout)
-                text = QtGui.QTextEdit('')
-                text.insertPlainText(errorTrace)
-                text.setReadOnly(True)
-                text.setLineWrapMode(QtGui.QTextEdit.NoWrap)
-                layout.addWidget(text)
-                close = QtGui.QPushButton('Close', self)
-                close.setFixedWidth(100)
-                layout.addWidget(close)
-                self.connect(close, QtCore.SIGNAL('clicked()'),
-                             self, QtCore.SLOT('close()'))
-        sp = StackPopup(text)
+        sp = StacktracePopup(text)
         sp.exec_()
 
     def open_annotations_window(self, id):
@@ -3195,7 +3232,7 @@ class QPipelineScene(QInteractiveGraphicsScene):
         
         """
         QtGui.QApplication.postEvent(self,
-                                     QModuleStatusEvent(moduleId, 1, error.msg,
+                                     QModuleStatusEvent(moduleId, 1, error,
                                                         errorTrace=errorTrace))
         QtCore.QCoreApplication.processEvents()
 
@@ -3226,7 +3263,11 @@ class QPipelineScene(QInteractiveGraphicsScene):
         if p is not None:
             self.check_progress_canceled()
             pipeline = self.controller.current_pipeline
-            module = pipeline.get_module_by_id(moduleId)
+            try:
+                module = pipeline.get_module_by_id(moduleId)
+            except KeyError:
+                # Module does not exist in pipeline
+                return
             p.setLabelText(module.name)
         QtGui.QApplication.postEvent(self,
                                      QModuleStatusEvent(moduleId, 4, ''))
@@ -3593,16 +3634,20 @@ class QPipelineView(QInteractiveGraphicsView, BaseView):
         return False
     
     def execute(self, target=None):
-        # reset job view
-        if target is not None:
-            self.controller.execute_user_workflow(
-                    sinks=[target],
-                    reason="Execute specific module")
+        try:
+            if target is not None:
+                self.controller.execute_user_workflow(
+                        sinks=[target],
+                        reason="Execute specific module")
+            else:
+                self.controller.execute_user_workflow()
+        except Exception, e:
+            debug.unexpected_exception(e)
+            debug.critical("Error executing workflow: %s" % debug.format_exception(e))
         else:
-            self.controller.execute_user_workflow()
-        from vistrails.gui.vistrails_window import _app
-        _app.notify('execution_updated')
-        
+            from vistrails.gui.vistrails_window import _app
+            _app.notify('execution_updated')
+
     def publish_to_web(self):
         from vistrails.gui.publishing import QVersionEmbed
         panel = QVersionEmbed.instance()
diff --git a/vistrails/gui/pipeline_view_select.py b/vistrails/gui/pipeline_view_select.py
index b72cdde..31080b2 100644
--- a/vistrails/gui/pipeline_view_select.py
+++ b/vistrails/gui/pipeline_view_select.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/port_documentation.py b/vistrails/gui/port_documentation.py
index 01a5bcc..0bd8d69 100644
--- a/vistrails/gui/port_documentation.py
+++ b/vistrails/gui/port_documentation.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py
index 3ebf8b5..b86ad69 100644
--- a/vistrails/gui/ports_pane.py
+++ b/vistrails/gui/ports_pane.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -224,6 +224,7 @@ class ParameterEntry(QtGui.QTreeWidgetItem):
         self.my_widgets = []
         self.my_labels = []
         self.group_box = QtGui.QGroupBox()
+        self.group_box.setContentsMargins(0, 0, 0, 0)
         layout = QtGui.QGridLayout()
         layout.setMargin(5)
         layout.setSpacing(5)
@@ -612,7 +613,7 @@ class PortsList(QtGui.QTreeWidget):
                 self.controller.current_pipeline_scene.recreate_module(
                     self.controller.current_pipeline, self.module.id)
         if col == 1:
-            if item.is_optional:
+            if item.is_optional and not item.is_connected:
                 item.set_visible(not item.is_visible)
                 if item.is_visible:
                     visible_ports.add(item.port_spec.name)
diff --git a/vistrails/gui/preferences.py b/vistrails/gui/preferences.py
index b08dfc7..10c88c6 100644
--- a/vistrails/gui/preferences.py
+++ b/vistrails/gui/preferences.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -42,18 +42,13 @@ from vistrails.core.modules.module_registry import get_module_registry
 from vistrails.core.modules.package import Package
 from vistrails.core.requirements import MissingRequirement
 from vistrails.core.system import get_vistrails_basic_pkg_id
-from vistrails.core.utils import InvalidPipeline
-from vistrails.core.utils.uxml import (named_elements,
-                             elements_filter, enter_named_element)
 from vistrails.gui.configuration import QConfigurationWidget, \
     QConfigurationPane
 from vistrails.gui.module_palette import QModulePalette
 from vistrails.gui.modules.output_configuration import OutputModeConfigurationWidget
-from vistrails.gui.pipeline_view import QPipelineView
 from vistrails.core.configuration import get_vistrails_persistent_configuration, \
     get_vistrails_configuration, base_config
 from vistrails.core import debug
-import os.path
 
 ##############################################################################
 
@@ -325,6 +320,7 @@ class QPackagesWidget(QtGui.QWidget):
             try:
                 pm.late_enable_package(codepath)
             except (Package.InitializationFailed, MissingRequirement), e:
+                debug.unexpected_exception(e)
                 debug.critical("Initialization of package '%s' failed" %
                                codepath,
                                e)
@@ -708,7 +704,7 @@ class TestPreferencesDialog(unittest.TestCase):
             selected again in the available packages list.
         """
         
-        pkg = "dialogs"
+        pkg = "URL"
         _app = get_vistrails_application()
         builder = _app.builderWindow
         builder.showPreferences()
@@ -719,11 +715,15 @@ class TestPreferencesDialog(unittest.TestCase):
 
         # check if package is loaded
         av = packages._available_packages_list
-        item, = av.findItems(pkg, QtCore.Qt.MatchExactly)
-        av.setCurrentItem(item)
-        QtGui.QApplication.processEvents()
-        QtGui.QApplication.processEvents()
-        packages.enable_current_package()
+        try:
+            item, = av.findItems(pkg, QtCore.Qt.MatchExactly)
+            av.setCurrentItem(item)
+            QtGui.QApplication.processEvents()
+            QtGui.QApplication.processEvents()
+            packages.enable_current_package()
+        except ValueError:
+            # Already enabled
+            pass
         QtGui.QApplication.processEvents()
         QtGui.QApplication.processEvents()
 
diff --git a/vistrails/gui/publishing.py b/vistrails/gui/publishing.py
index e24794b..7318329 100644
--- a/vistrails/gui/publishing.py
+++ b/vistrails/gui/publishing.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/qt.py b/vistrails/gui/qt.py
index da6b5ff..689b2b9 100644
--- a/vistrails/gui/qt.py
+++ b/vistrails/gui/qt.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/query_view.py b/vistrails/gui/query_view.py
index b2d1c6b..a650bd5 100644
--- a/vistrails/gui/query_view.py
+++ b/vistrails/gui/query_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -37,13 +37,14 @@ from __future__ import division
 
 from PyQt4 import QtCore, QtGui
 
+import re
+
+from vistrails.core import debug
 from vistrails.core.collection import Collection
 from vistrails.core.collection.vistrail import VistrailEntity
+from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.data_structures.bijectivedict import Bidict
-from vistrails.core.query.combined import CombinedSearch
 from vistrails.core.query.multiple import MultipleSearch
-from vistrails.core.query.version import SearchCompiler, SearchParseError, TrueSearch
-from vistrails.core.query.visual import VisualQuery
 from vistrails.core.vistrail.pipeline import Pipeline
 from vistrails.core.vistrail.vistrail import Vistrail
 
@@ -112,6 +113,7 @@ class QueryController(object):
         if self.search is None or \
                 self.search.search_str != search_str or \
                 self.search.queryPipeline != search_pipeline or \
+                self.search.use_regex != self.use_regex or \
                 self.query_view.p_controller.changed or \
                 self.search_level > self.level:
             self.search_str = search_str
@@ -120,12 +122,13 @@ class QueryController(object):
             # reset changed here
             self.query_view.p_controller.set_changed(False)
             vt_controller = self.query_view.vt_controller
+            controllers = []
 
             def do_search(only_current_vistrail=False, 
                           only_current_workflow=False):
                 entities_to_check = {}
                 open_col = Collection.getInstance()
-                
+
                 for entity in open_col.get_current_entities():
                     if entity.type_id == VistrailEntity.type_id and \
                             entity.is_open:
@@ -133,8 +136,9 @@ class QueryController(object):
                         if only_current_vistrail and \
                                 controller.vistrail != vt_controller.vistrail:
                             continue
+                        controllers.append(controller)
                         if only_current_workflow:
-                            versions_to_check = controller.current_version
+                            versions_to_check = set([controller.current_version])
                         else:
                             graph = controller._current_terse_graph
                             versions_to_check = set(graph.vertices.iterkeys())
@@ -149,8 +153,8 @@ class QueryController(object):
                 result_entities = do_search(True)                
                 self.show_vistrail_matches()
             elif self.level == QueryController.LEVEL_WORKFLOW:
-                self.search_level = QueryController.LEVEL_VISTRAIL
-                result_entities = do_search(True)
+                #self.search_level = QueryController.LEVEL_VISTRAIL
+                result_entities = do_search(False, True)
                 self.update_version_tree()
                 self.show_workflow_matches()
             else:  # self.level == QueryController.LEVEL_ALL
@@ -159,9 +163,13 @@ class QueryController(object):
 
             from vistrails.gui.vistrails_window import _app
             _app.notify("search_changed", self.search, result_entities)
+            # May need to update version trees
+            # resultEntities make sure no update is created later
+            for controller in controllers:
+                controller.check_delayed_update()
         else:
             self.query_view.set_to_result_mode()
-            
+
     def set_refine(self, refine):
         """ set_refine(refine: bool) -> None
         Set the refine state to True or False
@@ -187,14 +195,14 @@ class QueryController(object):
 
     def goto_edit(self):
         # get the version info and send it to open_vistrail call
+        from vistrails.gui.vistrails_window import _app
+        version = self.query_view.version_result_view.controller.current_version
+        view = self.query_view.controller.vistrail_view
         if self.level == QueryController.LEVEL_VISTRAIL:
-            from vistrails.gui.vistrails_window import _app
+            view.version_selected(version, True)
             _app.qactions['history'].trigger()
         elif self.level == QueryController.LEVEL_WORKFLOW:
-            from vistrails.gui.vistrails_window import _app
-            version = self.query_view.vt_controller.current_version
-            self.query_view.controller.change_selected_version(version, True)
-            _app.qactions['pipeline'].trigger()
+          view.version_selected(version, True, double_click=True)
 
     def update_results(self):
         if self.workflow_version != \
@@ -282,7 +290,8 @@ class QQueryResultWorkflowView(QPipelineView):
         QPipelineView.__init__(self, parent)
         self.setBackgroundBrush(CurrentTheme.QUERY_RESULT_BACKGROUND_BRUSH)
         self.scene().set_read_only_mode(True)
-    
+
+
 class QQueryBox(QtGui.QWidget):
     def __init__(self, parent=None):
         QtGui.QWidget.__init__(self, parent)
@@ -381,7 +390,10 @@ class QQueryBox(QtGui.QWidget):
         """
         s = str(text)
         if self.controller:
-            self.controller.run_search(s)
+            try:
+                self.controller.run_search(s)
+            except re.error as e:
+                debug.critical('Error in regular expression: %s' % str(e))
             # try:
             #     search = CombinedSearch(s, 
             #     search = SearchCompiler(s).searchStmt
@@ -439,7 +451,10 @@ class QQueryView(QtGui.QWidget, BaseView):
         # FIXME Need to figure out how to deal with this !!!
         self.vt_controller.set_vistrail(controller.vistrail, None,
                                         set_log_on_vt=False)
-        self.vt_controller.change_selected_version(controller.current_version)
+        hide_upgrades = not getattr(get_vistrails_configuration(),
+                                        'hideUpgrades', True)
+        self.vt_controller.change_selected_version(controller.current_version,
+                                                   hide_upgrades, hide_upgrades)
         self.version_result_view.set_controller(self.vt_controller)
         self.workflow_result_view.set_controller(self.vt_controller)
         self.query_controller.set_vistrail_controller(controller)
@@ -448,8 +463,10 @@ class QQueryView(QtGui.QWidget, BaseView):
         # FIXME Need to figure out how to deal with this !!!
         self.vt_controller.set_vistrail(self.controller.vistrail, None,
                                         set_log_on_vt=False)
-        self.vt_controller.change_selected_version(
-            self.controller.current_version)
+        hide_upgrades = getattr(get_vistrails_configuration(),
+                                        'hideUpgrades', True)
+        self.vt_controller.change_selected_version(self.controller.current_version,
+                                                   hide_upgrades, hide_upgrades)
 
     def build_widget(self):
         layout = QtGui.QVBoxLayout()
@@ -593,13 +610,21 @@ class QQueryView(QtGui.QWidget, BaseView):
     def result_version_selected(self, version_id, by_click, do_validate=True,
                                 from_root=False, double_click=False):
         if by_click:
-            self.query_controller.search.setCurrentVistrail(
-                self.vt_controller.vistrail)
-            self.vt_controller.change_selected_version(version_id, by_click, 
-                                                       do_validate, from_root)
+            hide_upgrades = getattr(get_vistrails_configuration(),
+                                        'hideUpgrades', True)
+            self.query_controller.search.setCurrentController(
+                self.vt_controller)
+            self.vt_controller.change_selected_version(version_id, hide_upgrades,
+                                                       hide_upgrades, from_root)
             if double_click:
                 self.query_controller.set_level(QueryController.LEVEL_WORKFLOW)
                 self.query_controller.show_workflow_matches()
+        # set version prop directly
+        from vistrails.gui.version_prop import QVersionProp
+        prop = QVersionProp.instance()
+        prop.set_visible(True)
+        prop.updateController(self.vt_controller)
+        prop.updateVersion(version_id)
 
 class QueryEntry(ParameterEntry):
     def __init__(self, port_spec, function=None, parent=None):
diff --git a/vistrails/gui/repository.py b/vistrails/gui/repository.py
index f05e69c..024d64e 100644
--- a/vistrails/gui/repository.py
+++ b/vistrails/gui/repository.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/requirements.py b/vistrails/gui/requirements.py
index 58777c2..09b75fb 100644
--- a/vistrails/gui/requirements.py
+++ b/vistrails/gui/requirements.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/resources/__init__.py b/vistrails/gui/resources/__init__.py
index cce6ceb..5961c50 100644
--- a/vistrails/gui/resources/__init__.py
+++ b/vistrails/gui/resources/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/resources/images/disclaimer.png b/vistrails/gui/resources/images/disclaimer.png
index 100c954..0ab5a3b 100644
Binary files a/vistrails/gui/resources/images/disclaimer.png and b/vistrails/gui/resources/images/disclaimer.png differ
diff --git a/vistrails/gui/resources/images/vistrails_splash.png b/vistrails/gui/resources/images/vistrails_splash.png
index 54e54ff..38857f8 100644
Binary files a/vistrails/gui/resources/images/vistrails_splash.png and b/vistrails/gui/resources/images/vistrails_splash.png differ
diff --git a/vistrails/gui/resources/macroicons_rc.py b/vistrails/gui/resources/macroicons_rc.py
index 018101f..434b9d6 100644
--- a/vistrails/gui/resources/macroicons_rc.py
+++ b/vistrails/gui/resources/macroicons_rc.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py
index 69c5d97..de8f173 100644
--- a/vistrails/gui/shell.py
+++ b/vistrails/gui/shell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/theme.py b/vistrails/gui/theme.py
index c45b99f..8ea0098 100644
--- a/vistrails/gui/theme.py
+++ b/vistrails/gui/theme.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/utils.py b/vistrails/gui/utils.py
index 51f6a63..36c02ac 100644
--- a/vistrails/gui/utils.py
+++ b/vistrails/gui/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/variable_dropbox.py b/vistrails/gui/variable_dropbox.py
index 5a22423..6650267 100644
--- a/vistrails/gui/variable_dropbox.py
+++ b/vistrails/gui/variable_dropbox.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/version_prop.py b/vistrails/gui/version_prop.py
index 1244911..70c1654 100644
--- a/vistrails/gui/version_prop.py
+++ b/vistrails/gui/version_prop.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -146,7 +146,7 @@ class QVersionProp(QtGui.QWidget, QVistrailsPaletteInterface):
         editLayout.addWidget(self.tagReset)
 
         configuration = get_vistrails_configuration()
-        self.use_custom_colors = configuration.check('enableCustomVersionColors')
+        self.use_custom_colors = configuration.check('customVersionColors')
 
         if self.use_custom_colors:
             self.customColor = ColorChooserButton(self)
@@ -238,10 +238,7 @@ class QVersionProp(QtGui.QWidget, QVistrailsPaletteInterface):
 
             if vistrail.actionMap.has_key(versionNumber):
                 # Follow upgrades forward to find tag
-                tag = vistrail.search_upgrade_versions(
-                        versionNumber,
-                        lambda vt, v, bv: vt.getVersionName(v) or None) or ''
-
+                tag = self.controller.get_tag(versionNumber)
                 if getattr(get_vistrails_configuration(), 'hideUpgrades', True):
                     base_ver = vistrail.get_base_upgrade_version(versionNumber)
                 else:
@@ -251,7 +248,12 @@ class QVersionProp(QtGui.QWidget, QVistrailsPaletteInterface):
                 self.tagEdit.setText(tag)
                 self.userEdit.setText(action.user)
                 self.dateEdit.setText(action.date)
-                self.idEdit.setText(unicode(action.id))
+                if base_ver != versionNumber:
+                    version_text = '%s (%s)' % (versionNumber, base_ver)
+                else:
+                    version_text = '%s' % base_ver
+
+                self.idEdit.setText(version_text)
                 self.tagEdit.setEnabled(True)
                 return
             else:
@@ -314,6 +316,7 @@ class QVersionNotes(QtGui.QTextEdit):
         QtGui.QTextEdit.__init__(self, parent)
         self.controller = None
         self.versionNumber = -1
+        self.last_update = self.controller, self.versionNumber
         self.update_on_focus_out = True
         self.setAcceptRichText(False)
         # Reset text to black, for some reason it is grey by default on the mac
@@ -325,15 +328,15 @@ class QVersionNotes(QtGui.QTextEdit):
         Update the text to be the notes of the vistrail versionNumber
         
         """
-        if self.versionNumber == versionNumber:
+        if self.last_update == (self.controller, versionNumber):
             return
+        self.last_update = self.controller, versionNumber
+
         self.versionNumber = versionNumber
         if self.controller:
             if self.controller.vistrail.actionMap.has_key(versionNumber):
                 # Follow upgrades forward to find notes
-                notes = self.controller.vistrail.search_upgrade_versions(
-                        versionNumber,
-                        lambda vt, v, bv: vt.get_notes(v) or None)
+                notes = self.controller.get_notes(versionNumber)
                 if notes:
                     self.setHtml(notes)
                     # work around a strange bug where an empty new paragraph gets added every time
@@ -519,10 +522,7 @@ class QVersionPropOverlay(QtGui.QFrame):
             if self.controller.vistrail.actionMap.has_key(versionNumber):
                 vistrail = self.controller.vistrail
                 # Follow upgrades forward to find tag
-                tag = vistrail.search_upgrade_versions(
-                        versionNumber,
-                        lambda vt, v, bv: vt.getVersionName(v) or None) or ''
-
+                tag = self.controller.get_tag(versionNumber)
                 if getattr(get_vistrails_configuration(), 'hideUpgrades', True):
                     base_ver = vistrail.get_base_upgrade_version(versionNumber)
                 else:
@@ -534,7 +534,7 @@ class QVersionPropOverlay(QtGui.QFrame):
                 self.description.setText(self.truncate(description))
                 self.user.setText(self.truncate(action.user))
                 self.date.setText(self.truncate(action.date))
-                notes = vistrail.get_notes(action.id)
+                notes = self.controller.get_notes(action.id)
                 if notes:
                     s = self.convertHtmlToText(notes)
                     self.notes.setText(self.truncate(s))
@@ -733,10 +733,7 @@ class QNotesDialog(QtGui.QDialog):
         if self.controller:
             if self.controller.vistrail.actionMap.has_key(versionNumber):
                 # Follow upgrades forward to find tag
-                tag = self.controller.vistrail.search_upgrade_versions(
-                        versionNumber,
-                        lambda vt, v, bv: vt.getVersionName(v) or None) or ''
-
+                tag = self.controller.get_tag(versionNumber)
                 title = "Notes: " + tag
                 self.setWindowTitle(title)
             else:
@@ -808,6 +805,7 @@ class QVersionMashups(QtGui.QWidget):
         QtGui.QWidget.__init__(self, parent)
         self.versionNumber = None
         self.controller = None
+        self.mtrail = None
         #label = QtGui.QLabel("Mashups:")
         self.mashupsButton = QtGui.QToolButton()
         self.mashupsButton.setText("Mashups")
@@ -906,7 +904,7 @@ class QVersionMashups(QtGui.QWidget):
                 
     def mashupSelected(self):
         action = self.sender()
-        version, ok = action.data()
+        version = action.data()
         self.openMashup(version)
 
     def openMashup(self, version):
diff --git a/vistrails/gui/version_view.py b/vistrails/gui/version_view.py
index eb8c279..503da88 100644
--- a/vistrails/gui/version_view.py
+++ b/vistrails/gui/version_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -865,8 +865,12 @@ class QVersionTreeScene(QInteractiveGraphicsScene):
                 continue
             nodeUser = am[nodeId].user
             if controller.search and nodeId!=0:
-                ghosted = not controller.search.match(controller.vistrail, 
-                                                      am[nodeId])
+                action = am[nodeId]
+                if getattr(get_vistrails_configuration(), 'hideUpgrades',
+                           True):
+                    # Use upgraded version to match
+                    action = am[controller.vistrail.get_upgrade(nodeId, False)]
+                ghosted = not controller.search.match(controller, action)
             else:
                 ghosted = False
                 
@@ -878,7 +882,7 @@ class QVersionTreeScene(QInteractiveGraphicsScene):
                 max_rank = otherMaxRank
 #             max_rank = ourMaxRank if nodeUser==currentUser else otherMaxRank
             configuration = get_vistrails_configuration()
-            if configuration.check('enableCustomVersionColors'):
+            if configuration.check('customVersionColors'):
                 custom_color = controller.vistrail.get_action_annotation(
                     nodeId,
                     custom_color_key)
diff --git a/vistrails/gui/vis_diff.py b/vistrails/gui/vis_diff.py
index 637d5f7..2b9d494 100644
--- a/vistrails/gui/vis_diff.py
+++ b/vistrails/gui/vis_diff.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -38,17 +38,16 @@ operation """
 from __future__ import division
 
 from PyQt4 import QtCore, QtGui
+from vistrails.core import system, debug
+from vistrails.core.configuration import get_vistrails_configuration
 from vistrails.core.system import get_vistrails_basic_pkg_id
 from vistrails.core.utils import VistrailsInternalError
-from vistrails.core.utils.color import ColorByName
-from vistrails.core.vistrail.abstraction import Abstraction
 from vistrails.core.vistrail.pipeline import Pipeline
 from vistrails.core.vistrail.port_spec import PortSpec
 from vistrails.gui.pipeline_view import QPipelineView
 from vistrails.gui.theme import CurrentTheme
-from vistrails.gui.vistrail_controller import VistrailController
+from vistrails.gui.utils import TestVisTrailsGUI
 from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface
-from vistrails.core import system, debug
 import vistrails.core.db.io
 
 import copy
@@ -368,11 +367,13 @@ class QDiffProperties(QtGui.QWidget, QVistrailsPaletteInterface):
         ((vistrail_a, version_a), (vistrail_b, version_b)) = \
             self.controller.current_diff_versions
 
+        hideUpgrades = getattr(get_vistrails_configuration(), 'hideUpgrades',
+                               True)
         # Set up the version name correctly
-        v1_name = vistrail_a.getVersionName(version_a)
+        v1_name = self.controller.get_tag(version_a)
         if not v1_name:
             v1_name = 'Version %d' % version_a
-        v2_name = vistrail_b.getVersionName(version_b)
+        v2_name = self.controller.get_tag(version_b)
         if not v2_name:
             v2_name = 'Version %d' % version_b
 
@@ -1311,3 +1312,40 @@ class QVisualDiff(QtGui.QMainWindow):
 
         scene.updateSceneBoundingRect()
         scene.fitToView(self.pipelineView, True)
+
+
+################################################################################
+# Testing
+
+
+class TestDiffView(TestVisTrailsGUI):
+    def setUp(self):
+        try:
+            import vtk
+        except ImportError:
+            self.skipTest("VTK is not available")
+        from vistrails.tests.utils import enable_package
+        enable_package('org.vistrails.vistrails.vtk')
+
+    def test_diff(self):
+        import vistrails.api
+        import vistrails.core.system
+        import os.path
+        from vistrails.core.configuration import get_vistrails_configuration
+        filename = os.path.join(
+            vistrails.core.system.vistrails_root_directory(),
+            'tests', 'resources', 'terminator.vt')
+        view = vistrails.api.open_vistrail_from_file(filename)
+        view.controller.change_selected_version(0)
+        # get tags
+        v1 = view.controller.vistrail.get_version_number('Volume Rendering HW')
+        v2 = view.controller.vistrail.get_version_number('Volume Rendering SW')
+
+        hideUpgrades = getattr(get_vistrails_configuration(), 'hideUpgrades', True)
+        # without upgrades
+        setattr(get_vistrails_configuration(), 'hideUpgrades', False)
+        view.diff_requested(v1, v2)
+        # with upgrades
+        setattr(get_vistrails_configuration(), 'hideUpgrades', True)
+        view.diff_requested(v1, v2)
+        setattr(get_vistrails_configuration(), 'hideUpgrades', hideUpgrades)
diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py
index 0fa629f..50cabdc 100644
--- a/vistrails/gui/vistrail_controller.py
+++ b/vistrails/gui/vistrail_controller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -95,6 +95,29 @@ class ExecutionProgressDialog(QtGui.QProgressDialog):
         self.show()
         super(ExecutionProgressDialog, self).setValue(self._last_set_value)
 
+class PEProgressDialog(QtGui.QProgressDialog):
+    def __init__(self, parent=None, total_progress=100):
+        QtGui.QProgressDialog.__init__(self,
+                                       'Performing Parameter Exploration...',
+                                       '&Cancel',
+                                       0, total_progress,
+                                       parent, QtCore.Qt.Dialog)
+        self.setWindowTitle('Parameter Exploration')
+        self.setWindowModality(QtCore.Qt.WindowModal)
+        self._last_set_value = 0
+        self._progress_canceled = False
+        # if suspended is true we should not wait for a job to complete
+        self.suspended = False
+
+    def setValue(self, value):
+        self._last_set_value = value
+        super(PEProgressDialog, self).setValue(value)
+
+    def goOn(self):
+        self.reset()
+        self.show()
+        super(PEProgressDialog, self).setValue(self._last_set_value)
+
 
 class VistrailController(QtCore.QObject, BaseController):
     """
@@ -152,7 +175,7 @@ class VistrailController(QtCore.QObject, BaseController):
         self.quiet = False
         self.progress = None
         self.create_job = False
-        
+
         self.analogy = {}
         # if self._auto_save is True, an auto_saving timer will save a temporary
         # file every 2 minutes
@@ -382,6 +405,7 @@ class VistrailController(QtCore.QObject, BaseController):
         self.flush_delayed_actions()
 
         if self.create_job:
+            self.create_job = False
             version_id = self.current_version
             # check if a job exist for this workflow
             current_workflow = None
@@ -389,14 +413,17 @@ class VistrailController(QtCore.QObject, BaseController):
                 try:
                     wf_version = int(wf.version)
                 except ValueError:
-                    wf_version = self.vistrail.get_version_number(wf.version)
+                    try:
+                        wf_version = self.vistrail.get_version_number(wf.version)
+                    except KeyError:
+                        # this is a PE or mashup
+                        continue
                 if version_id == wf_version:
                     current_workflow = wf
                     self.jobMonitor.startWorkflow(wf)
             if not current_workflow:
                 current_workflow = JobWorkflow(version_id)
                 self.jobMonitor.startWorkflow(current_workflow)
-            self.create_job = False
 
         if self.current_pipeline:
             locator = self.get_locator()
@@ -445,13 +472,12 @@ class VistrailController(QtCore.QObject, BaseController):
 
             self.progress.setValue(100)
         finally:
+            jobView.updating_now = False
+            self.jobMonitor.finishWorkflow()
             self.progress.hide()
             self.progress.deleteLater()
             self.progress = None
             self.create_job = False
-            self.jobMonitor.finishWorkflow()
-            jobView.updating_now = False
-
         return result
 
     def enable_missing_package(self, identifier, deps):
@@ -935,7 +961,7 @@ class VistrailController(QtCore.QObject, BaseController):
                                                 prompt,
                                                 QtGui.QLineEdit.Normal,
                                                 '')
-        if ok and not text:
+        if ok and text:
             return str(text).strip().rstrip()
         return ''
             
@@ -943,7 +969,7 @@ class VistrailController(QtCore.QObject, BaseController):
         dialog = QtGui.QFileDialog.getExistingDirectory
         dir_name = dialog(None, "Save Subworkflows...",
                           vistrails.core.system.vistrails_file_directory())
-        if dir_name:
+        if not dir_name:
             return None
         dir_name = os.path.abspath(str(dir_name))
         setattr(get_vistrails_configuration(), 'fileDir', dir_name)
@@ -1114,7 +1140,7 @@ class VistrailController(QtCore.QObject, BaseController):
                 log = self.log
             opm_graph = OpmGraph(log=log, 
                                  version=self.current_version,
-                                 workflow=self.current_pipeline,
+                                 workflow=self.vistrail.getPipeline(self.current_version),
                                  registry=get_module_registry())
             locator.save_as(opm_graph)
             
@@ -1127,7 +1153,7 @@ class VistrailController(QtCore.QObject, BaseController):
                 log = self.log
             prov_document = ProvDocument(log=log, 
                                          version=self.current_version,
-                                         workflow=self.current_pipeline,
+                                         workflow=self.vistrail.getPipeline(self.current_version),
                                          registry=get_module_registry())
             locator.save_as(prov_document)
 
@@ -1251,66 +1277,96 @@ class VistrailController(QtCore.QObject, BaseController):
                     mCount.append(0)
                 else:
                     mCount.append(len(p.modules)+mCount[len(mCount)-1])
-                
-            # Now execute the pipelines
-            if showProgress:
-                totalProgress = sum([len(p.modules) for p in modifiedPipelines])
-                progress = QtGui.QProgressDialog('Performing Parameter '
-                                                 'Exploration...',
-                                                 '&Cancel',
-                                                 0, totalProgress)
-                progress.setWindowTitle('Parameter Exploration')
-                progress.setWindowModality(QtCore.Qt.WindowModal)
-                progress.show()
-
-            interpreter = get_default_interpreter()
-            
-            images = {}
-            errors = []
-            for pi in xrange(len(modifiedPipelines)):
-                if showProgress:
-                    progress.setValue(mCount[pi])
-                    QtCore.QCoreApplication.processEvents()
-                    if progress.wasCanceled():
-                        break
-                    def moduleExecuted(objId):
-                        if not progress.wasCanceled():
-                            progress.setValue(progress.value()+1)
-                            QtCore.QCoreApplication.processEvents()
-                if use_spreadsheet:
-                    name = os.path.splitext(self.name)[0] + \
-                                         ("_%s_%s_%s" % pipelinePositions[pi])
-                    extra_info['nameDumpCells'] = name
-                    if 'pathDumpCells' in extra_info:
-                        images[pipelinePositions[pi]] = \
-                                   os.path.join(extra_info['pathDumpCells'], name)
-                pe_cell_id = (pe_log_id,) + pipelinePositions[pi]
-                kwargs = {'locator': self.locator,
-                          'current_version': self.current_version,
-                          'reason': 'Parameter Exploration %s %s_%s_%s' % pe_cell_id,
-                          'logger': self.get_logger(),
-                          'actions': performedActions[pi],
-                          'extra_info': extra_info
-                          }
-                if view:
-                    kwargs['view'] = view
+
+            from vistrails.gui.job_monitor import QJobView
+            jobView = QJobView.instance()
+            if jobView.updating_now:
+                debug.critical("Execution Aborted: Job Monitor is updating. "
+                               "Please wait a few seconds and try again.")
+                return
+            jobView.updating_now = True
+
+            try:
+                # Now execute the pipelines
+
                 if showProgress:
-                    kwargs['module_executed_hook'] = [moduleExecuted]
-                if self.get_vistrail_variables():
-                    # remove vars used in pe
-                    vars = dict([(v.uuid, v) for v in self.get_vistrail_variables()
-                            if v.uuid not in vistrail_vars])
-                    kwargs['vistrail_variables'] = lambda x: vars.get(x, None)
-                result = interpreter.execute(modifiedPipelines[pi], **kwargs)
-                for error in result.errors.itervalues():
+                    totalProgress = sum([len(p.modules) for p in modifiedPipelines])
+                    self.progress = PEProgressDialog(self.vistrail_view, totalProgress)
+                    self.progress.show()
+
+                interpreter = get_default_interpreter()
+
+                images = {}
+                errors = []
+                for pi in xrange(len(modifiedPipelines)):
+                    if showProgress:
+                        self.progress.setValue(mCount[pi])
+                        QtCore.QCoreApplication.processEvents()
+                        if self.progress.wasCanceled():
+                            break
+                        def moduleExecuted(objId):
+                            if not self.progress.wasCanceled():
+                                self.progress.setValue(self.progress.value()+1)
+                                QtCore.QCoreApplication.processEvents()
                     if use_spreadsheet:
-                        pp = pipelinePositions[pi]
-                        errors.append(((pp[1], pp[0], pp[2]), error))
-                    else:
-                        errors.append(((0,0,0), error))
+                        name = os.path.splitext(self.name)[0] + \
+                                             ("_%s_%s_%s" % pipelinePositions[pi])
+                        extra_info['nameDumpCells'] = name
+                        if 'pathDumpCells' in extra_info:
+                            images[pipelinePositions[pi]] = \
+                                       os.path.join(extra_info['pathDumpCells'], name)
+                    pe_cell_id = (pe_log_id,) + pipelinePositions[pi]
+                    kwargs = {'locator': self.locator,
+                              'job_monitor': self.jobMonitor,
+                              'current_version': self.current_version,
+                              'reason': 'Parameter Exploration %s %s_%s_%s' % pe_cell_id,
+                              'logger': self.get_logger(),
+                              'actions': performedActions[pi],
+                              'extra_info': extra_info
+                              }
+                    if view:
+                        kwargs['view'] = view
+                    if showProgress:
+                        kwargs['module_executed_hook'] = [moduleExecuted]
+                    if self.get_vistrail_variables():
+                        # remove vars used in pe
+                        vars = dict([(v.uuid, v) for v in self.get_vistrail_variables()
+                                if v.uuid not in vistrail_vars])
+                        kwargs['vistrail_variables'] = lambda x: vars.get(x, None)
+
+                    # Create job
+                    # check if a job exist for this workflow
+                    job_id = 'Parameter Exploration %s %s %s_%s_%s' % ((self.current_version, pe.id) + pipelinePositions[pi])
+
+                    current_workflow = None
+                    for wf in self.jobMonitor.workflows.itervalues():
+                        if job_id == wf.version:
+                            current_workflow = wf
+                            self.jobMonitor.startWorkflow(wf)
+                            break
+                    if not current_workflow:
+                        current_workflow = JobWorkflow(job_id)
+                        self.jobMonitor.startWorkflow(current_workflow)
+                    try:
+                        result = interpreter.execute(modifiedPipelines[pi], **kwargs)
+                    finally:
+                        self.jobMonitor.finishWorkflow()
+
+                    for error in result.errors.itervalues():
+                        if use_spreadsheet:
+                            pp = pipelinePositions[pi]
+                            errors.append(((pp[1], pp[0], pp[2]), error))
+                        else:
+                            errors.append(((0,0,0), error))
+
+            finally:
+                jobView.updating_now = False
+                if showProgress:
+                    self.progress.setValue(totalProgress)
+                    self.progress.hide()
+                    self.progress.deleteLater()
+                    self.progress = None
 
-            if showProgress:
-                progress.setValue(totalProgress)
             if 'pathDumpCells' in extra_info:
                 filename = os.path.join(extra_info['pathDumpCells'],
                                         os.path.splitext(self.name)[0])
@@ -1389,3 +1445,66 @@ class TestVistrailController(vistrails.gui.utils.TestVisTrailsGUI):
         controller.create_abstraction(module_ids, connection_ids,
                                       '__TestFloatList')
         self.assert_(os.path.exists(filename))
+
+    def test_abstraction_execute(self):
+        from vistrails import api
+        api.new_vistrail()
+        api.add_module(0, 0, 'org.vistrails.vistrails.basic', 'String', '')
+        api.change_parameter(0, 'value', ['Running Abstraction'])
+        api.add_module(0, 0, 'org.vistrails.vistrails.basic', 'StandardOutput', '')
+        api.add_connection(0, 'value', 1, 'value')
+        c = api.get_current_controller()
+        abs = c.create_abstraction([0,1], [0], 'ExecAbs')
+        d = vistrails.core.system.get_vistrails_directory('subworkflowsDir')
+        filename = os.path.join(d, 'ExecAbs.xml')
+        api.close_current_vistrail(True)
+        desc = c.load_abstraction(filename, abs_name='ExecAbs')
+        api.new_vistrail()
+        c = api.get_current_controller()
+        api.add_module_from_descriptor(desc, 0, 0)
+        self.assertEqual(c.execute_current_workflow()[0][0].errors, {})
+        api.close_current_vistrail(True)
+        c.unload_abstractions()
+
+    def test_chained_upgrade(self):
+        # We should try to upgrade from the latest upgrade in
+        # the upgrade chain first
+        from vistrails import api
+        view = api.open_vistrail_from_file(
+                vistrails.core.system.vistrails_root_directory() +
+                '/tests/resources/chained_upgrade.xml')
+        # Trigger upgrade
+        api.select_version('myTuple')
+        view.execute()
+        # Assert new upgrade was created from the latest action
+        # 1 = original
+        # 2 = old upgrade
+        # 3 = new upgrade (should be the upgrade of 2)
+        vistrail = api.get_current_vistrail()
+        for a in vistrail.action_annotations:
+            if a.key == Vistrail.UPGRADE_ANNOTATION:
+                self.assertIn(a.action_id, [1,2])
+                if a.action_id == 1:
+                    self.assertEqual(int(a.value), 2)
+                if a.action_id == 2:
+                    self.assertEqual(int(a.value), 3)
+
+    def test_broken_upgrade(self):
+        # When upgrade is broken the controller should try to upgrade
+        # the previous action in the upgrade chain
+        from vistrails import api
+        view = api.open_vistrail_from_file(
+                vistrails.core.system.vistrails_root_directory() +
+                '/tests/resources/broken_upgrade.xml')
+        # Trigger upgrade
+        api.select_version('myTuple')
+        view.execute()
+        # Assert new upgrade was created from the first action
+        # 1 = original
+        # 2 = broken
+        # 3 = new (should be the upgrade of 1)
+        vistrail = api.get_current_vistrail()
+        for a in vistrail.action_annotations:
+            if a.key == Vistrail.UPGRADE_ANNOTATION:
+                self.assertEqual(a.action_id, 1)
+                self.assertEqual(int(a.value), 3)
diff --git a/vistrails/gui/vistrail_variables.py b/vistrails/gui/vistrail_variables.py
index 3434d9b..9c286ea 100644
--- a/vistrails/gui/vistrail_variables.py
+++ b/vistrails/gui/vistrail_variables.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/vistrail_view.py b/vistrails/gui/vistrail_view.py
index 7f9315c..4ea2d82 100644
--- a/vistrails/gui/vistrail_view.py
+++ b/vistrails/gui/vistrail_view.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -41,6 +41,7 @@ from PyQt4 import QtCore, QtGui
 
 from vistrails.core import debug
 from vistrails.core.collection import Collection
+from vistrails.core.reportusage import record_vistrail
 from vistrails.core.system import vistrails_default_file_type, \
     vistrails_file_directory
 from vistrails.core.thumbnails import ThumbnailCache
@@ -52,18 +53,20 @@ from vistrails.core.log.prov_document import ProvDocument
 from vistrails.core.db.locator import XMLFileLocator
 from vistrails.core.modules.module_registry import ModuleRegistry
 from vistrails.core.configuration import get_vistrails_configuration
+from vistrails.core import reportusage
 
 from vistrails.gui.collection.vis_log import QLogView
 from vistrails.gui.common_widgets import QMouseTabBar
+from vistrails.gui.mashups.mashup_view import QMashupView
+from vistrails.gui.module_info import QModuleInfo
+from vistrails.gui.paramexplore.pe_view import QParamExploreView
 from vistrails.gui.pipeline_view import QPipelineView
+from vistrails.gui.ports_pane import ParameterEntry
+from vistrails.gui.query_view import QQueryView, QueryEntry,\
+    QQueryResultWorkflowView
 from vistrails.gui.version_view import QVersionTreeView
-from vistrails.gui.query_view import QQueryView
-from vistrails.gui.paramexplore.pe_view import QParamExploreView
 from vistrails.gui.vis_diff import QDiffView
 from vistrails.gui.vistrail_controller import VistrailController
-from vistrails.gui.mashups.mashup_view import QMashupView
-from vistrails.gui.ports_pane import ParameterEntry
-from vistrails.gui.query_view import QueryEntry
 
 ################################################################################
 
@@ -132,8 +135,8 @@ class QVistrailView(QtGui.QWidget):
         self.connect(self.tabs, QtCore.SIGNAL("currentChanged(int)"),
                      self.tab_changed)
         self.connect(self.tabs, QtCore.SIGNAL("tabCloseRequested(int)"),
-                     self.remove_view_by_index)
-       
+                     self.tab_close_request)
+
         #self.view_changed()
         #self.tab_changed(0)
 
@@ -529,6 +532,21 @@ class QVistrailView(QtGui.QWidget):
                 if view.tab_idx > rm_tab_idx:
                     view.set_tab_idx(view.tab_idx-1)
     
+    def tab_close_request(self, index):
+        """ Ignore if this is the last pipeline tab
+
+            If there is one pipeline tab and one diff tab, close buttons are
+            visible for both of them, but we should not allow the closing of
+            this last pipeline tab.
+        """
+        def is_pipeline_tab(view):
+            # QDiffView is currently the only non-pipeline tab
+            return not isinstance(view, QDiffView)
+        pipeline_tabs = sum([(1 if is_pipeline_tab(t) else 0)
+                            for t in self.tab_to_view.values()])
+        if pipeline_tabs > 1 or not is_pipeline_tab(self.tab_to_view[index]):
+            self.remove_view_by_index(index)
+
     def remove_view_by_index(self, index):
         self.disconnect(self.tabs, QtCore.SIGNAL("currentChanged(int)"),
                      self.tab_changed)
@@ -623,6 +641,9 @@ class QVistrailView(QtGui.QWidget):
            # print "tabs the same. do nothing"
         if isinstance(view, QQueryView):
             _app.notify("controller_changed", view.p_controller)
+            if view.current_display != QQueryView.VISUAL_SEARCH_VIEW:
+                # Force result version prop
+                view.result_version_selected(view.vt_controller.current_version, False)
             _app.notify("entry_klass_changed", QueryEntry)
         else:
             _app.notify("entry_klass_changed", ParameterEntry)
@@ -752,6 +773,11 @@ class QVistrailView(QtGui.QWidget):
         self.connect(view.pipeline_view.scene(), 
                      QtCore.SIGNAL('moduleSelected'),
                      self.gen_module_selected(view.pipeline_view))
+        # FIXME: How to make module info read-only
+        self.connect(view.workflow_result_view.scene(),
+                     QtCore.SIGNAL('moduleSelected'),
+                     self.gen_module_selected(view.workflow_result_view))
+        # FIXME: How to show version info for a query result view
         # self.connect(view.version_result_view.scene(),
         #              QtCore.SIGNAL('versionSelected(int,bool,bool,bool,bool)'),
         #              self.version_selected)
@@ -795,13 +821,31 @@ class QVistrailView(QtGui.QWidget):
     
     def gen_module_selected(self, view):
         def module_selected(module_id, selection = []):
+            from vistrails.gui.version_prop import QVersionProp
             from vistrails.gui.vistrails_window import _app
             pipeline = view.scene().current_pipeline
             if pipeline is not None and module_id in pipeline.modules:
                 module = pipeline.modules[module_id]
                 _app.notify('module_changed', module)
+                # show module info if both are tabified and
+                # workflow info is visible
+                if not QModuleInfo.instance().toolWindow().isFloating() and \
+                   not QVersionProp.instance().toolWindow().isFloating() and \
+                   not QVersionProp.instance().toolWindow().visibleRegion().isEmpty():
+                    QModuleInfo.instance().set_visible(True)
             else:
-                _app.notify('module_changed', None)
+                if isinstance(view, QQueryResultWorkflowView):
+                    # we need to set version prop directly
+                    QVersionProp.instance().updateController(view.controller)
+                    QVersionProp.instance().updateVersion(view.controller.current_version)
+                else:
+                    _app.notify('module_changed', None)
+                # show workflow info if both are tabified and
+                # module info is visible
+                if not QModuleInfo.instance().toolWindow().isFloating() and \
+                   not QVersionProp.instance().toolWindow().isFloating() and \
+                   not QModuleInfo.instance().toolWindow().visibleRegion().isEmpty():
+                    QVersionProp.instance().set_visible(True)
         return module_selected
 
     def version_selected(self, version_id, by_click, do_validate=True,
@@ -843,6 +887,7 @@ class QVistrailView(QtGui.QWidget):
         _app.notify("pipeline_changed", self.controller.current_pipeline)
 
     def query_version_selected(self, search=None, version_id=None):
+        search.cur_controller = self.controller
         if version_id is None:
             self.query_view.set_result_level(
                 self.query_view.query_controller.LEVEL_VISTRAIL)
@@ -857,21 +902,29 @@ class QVistrailView(QtGui.QWidget):
         window = self.window()
         window.qactions['search'].trigger()
         
-    def diff_requested(self, version_a, version_b, vistrail_b=None):
+    def diff_requested(self, version_a, version_b, controller_b=None):
         """diff_requested(self, id, id, Vistrail) -> None
         
-        Request a diff between two versions.  If vistrail_b is
+        Request a diff between two versions.  If controller_b is
         specified, the second version will be derived from that
         vistrail instead of the common vistrail controlled by this
         view.
         """
+        controller_b = controller_b or self.controller
+        # Upgrade both versions if hiding upgrades
+        if getattr(get_vistrails_configuration(), 'hideUpgrades', True):
+            version_a = self.controller.create_upgrade(version_a, delay_update=True)
+            version_b = controller_b.create_upgrade(version_b, delay_update=True)
 
         view = self.create_diff_view()
         view.set_controller(self.controller)
-        view.set_diff(version_a, version_b, vistrail_b)
+        view.set_diff(version_a, version_b, controller_b.vistrail)
         self.switch_to_tab(view.tab_idx)
         view.scene().fitToView(view, True)
+        self.controller.check_delayed_update()
+        controller_b.check_delayed_update()
         self.view_changed()
+        reportusage.record_feature('diff', self.controller)
 
     def save_vistrail(self, locator_class, force_choose_locator=False, export=False):
         """
@@ -902,6 +955,7 @@ class QVistrailView(QtGui.QWidget):
         if not locator:
             return False
         try:
+            record_vistrail('save', self.controller)
             self.controller.write_vistrail(locator, export=export)
         except Exception:
             debug.critical('Failed to save vistrail', debug.format_exc())
@@ -960,6 +1014,7 @@ class QVistrailView(QtGui.QWidget):
         locator = gui_get(self, Pipeline.vtType)
         if not locator:
             return False
+        record_vistrail('export_stable', self.controller.current_pipeline)
         self.controller.write_workflow(locator, '1.0.3')
         return True
 
@@ -977,6 +1032,7 @@ class QVistrailView(QtGui.QWidget):
             locator = gui_get(self, Pipeline.vtType, self.controller.locator)
         if not locator:
             return False
+        record_vistrail('save_pipeline', self.controller.current_pipeline)
         self.controller.write_workflow(locator)
 
     def save_log(self, locator_class, force_choose_locator=True):
diff --git a/vistrails/gui/vistrails_palette.py b/vistrails/gui/vistrails_palette.py
index 98d5c87..d326d90 100644
--- a/vistrails/gui/vistrails_palette.py
+++ b/vistrails/gui/vistrails_palette.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py
index 57aa25b..888be87 100644
--- a/vistrails/gui/vistrails_window.py
+++ b/vistrails/gui/vistrails_window.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -48,6 +48,7 @@ from vistrails.core.interpreter.cached import CachedInterpreter
 from vistrails.core.recent_vistrails import RecentVistrailList
 import vistrails.core.system
 import vistrails.core.db.action
+from vistrails.core.reportusage import record_vistrail
 from vistrails.core.system import vistrails_default_file_type
 from vistrails.core.vistrail.vistrail import Vistrail
 from vistrails.core.vistrail.pipeline import Pipeline
@@ -1869,6 +1870,7 @@ class QVistrailsWindow(QVistrailViewWindow):
         
         if locator is not None:
             get_vistrails_application().close_vistrail(locator, current_view.controller)
+        record_vistrail('close', current_view.controller)
         return True
 
     def close_all_vistrails(self, quiet=False):
@@ -2454,7 +2456,7 @@ class QVistrailsWindow(QVistrailViewWindow):
                                        "This subworkflow is from a package and "
                                        "cannot be modified.  You can create an "
                                        "editable copy in 'My Subworkflows' "
-                                       "using 'Edit->Import Subworkflow'")
+                                       "using 'Workflow->Import Subworkflow'")
     def merge_vistrail(self):
         action = self.sender()
         if action:
diff --git a/vistrails/packages/CLTools/__init__.py b/vistrails/packages/CLTools/__init__.py
index 7859fad..ce6c0b5 100644
--- a/vistrails/packages/CLTools/__init__.py
+++ b/vistrails/packages/CLTools/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/CLTools/identifiers.py b/vistrails/packages/CLTools/identifiers.py
index d64fe19..043da64 100644
--- a/vistrails/packages/CLTools/identifiers.py
+++ b/vistrails/packages/CLTools/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/CLTools/init.py b/vistrails/packages/CLTools/init.py
index d42bc65..ed3f370 100644
--- a/vistrails/packages/CLTools/init.py
+++ b/vistrails/packages/CLTools/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/CLTools/wizard.py b/vistrails/packages/CLTools/wizard.py
index ad17e14..ea91bc5 100644
--- a/vistrails/packages/CLTools/wizard.py
+++ b/vistrails/packages/CLTools/wizard.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/ImageMagick/__init__.py b/vistrails/packages/ImageMagick/__init__.py
index 38ff0d2..79708f6 100644
--- a/vistrails/packages/ImageMagick/__init__.py
+++ b/vistrails/packages/ImageMagick/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/ImageMagick/init.py b/vistrails/packages/ImageMagick/init.py
index eb174f9..fbee78c 100644
--- a/vistrails/packages/ImageMagick/init.py
+++ b/vistrails/packages/ImageMagick/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/RemoteQ/__init__.py b/vistrails/packages/RemoteQ/__init__.py
index 9aeece6..2715b46 100644
--- a/vistrails/packages/RemoteQ/__init__.py
+++ b/vistrails/packages/RemoteQ/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/RemoteQ/base.py b/vistrails/packages/RemoteQ/base.py
index 5084787..de8bf4d 100644
--- a/vistrails/packages/RemoteQ/base.py
+++ b/vistrails/packages/RemoteQ/base.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/RemoteQ/hdfs.py b/vistrails/packages/RemoteQ/hdfs.py
index bfd7bbf..82b7e4f 100644
--- a/vistrails/packages/RemoteQ/hdfs.py
+++ b/vistrails/packages/RemoteQ/hdfs.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/RemoteQ/init.py b/vistrails/packages/RemoteQ/init.py
index 7d068ea..e7c4d21 100644
--- a/vistrails/packages/RemoteQ/init.py
+++ b/vistrails/packages/RemoteQ/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/RemoteQ/streaming.py b/vistrails/packages/RemoteQ/streaming.py
index 358c66d..c57242a 100644
--- a/vistrails/packages/RemoteQ/streaming.py
+++ b/vistrails/packages/RemoteQ/streaming.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/SUDSWebServices/__init__.py b/vistrails/packages/SUDSWebServices/__init__.py
index d8441a0..9373a08 100644
--- a/vistrails/packages/SUDSWebServices/__init__.py
+++ b/vistrails/packages/SUDSWebServices/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/SUDSWebServices/init.py b/vistrails/packages/SUDSWebServices/init.py
index 3411256..3bed15d 100644
--- a/vistrails/packages/SUDSWebServices/init.py
+++ b/vistrails/packages/SUDSWebServices/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -810,11 +810,14 @@ def contextMenuName(signature):
     return None
 
 def saveVistrailFileHook(vistrail, temp_dir):
-    """ This is called when a vistrail is loaded
-        We should copy all used Web Services in temp_dir to .vistrails
-        """
+    """ This is called when a vistrail is saved
+        We should copy all cached Web Services in vistrail to temp_dir
+        if they do not exist
 
-    
+    """
+    # Skip if this is a DBVistrail
+    if not hasattr(vistrail, 'get_used_packages'):
+        return
     packages = vistrail.get_used_packages()
     # clear old files
     for name in os.listdir(temp_dir):
@@ -831,10 +834,10 @@ def saveVistrailFileHook(vistrail, temp_dir):
                 shutil.copyfile(cached, vt_cached)
 
 def loadVistrailFileHook(vistrail, temp_dir):
-    """ This is called when a vistrail is saved
-        We should copy all cached Web Services in vistrail to temp_dir
-        if they do not exist
-    """
+    """ This is called when a vistrail is loaded
+        We should copy all used Web Services in temp_dir to .vistrails
+
+        """
     for name in os.listdir(temp_dir):
         src = os.path.join(temp_dir, name)
         dest = os.path.join(package_cache.location, name)
diff --git a/vistrails/packages/URL/__init__.py b/vistrails/packages/URL/__init__.py
index 787a697..20b1468 100644
--- a/vistrails/packages/URL/__init__.py
+++ b/vistrails/packages/URL/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/URL/http_directory.py b/vistrails/packages/URL/http_directory.py
index a4e68f2..18b8d50 100644
--- a/vistrails/packages/URL/http_directory.py
+++ b/vistrails/packages/URL/http_directory.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/URL/https.py b/vistrails/packages/URL/https.py
index ce53bcf..5a287e1 100644
--- a/vistrails/packages/URL/https.py
+++ b/vistrails/packages/URL/https.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/URL/https_if_available.py b/vistrails/packages/URL/https_if_available.py
index 81b0e2f..5e75181 100644
--- a/vistrails/packages/URL/https_if_available.py
+++ b/vistrails/packages/URL/https_if_available.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/URL/identifiers.py b/vistrails/packages/URL/identifiers.py
index c11e44e..42d9660 100644
--- a/vistrails/packages/URL/identifiers.py
+++ b/vistrails/packages/URL/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/URL/init.py b/vistrails/packages/URL/init.py
index 3a581e8..9caab8d 100644
--- a/vistrails/packages/URL/init.py
+++ b/vistrails/packages/URL/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -54,6 +54,13 @@ import re
 import urllib
 import urllib2
 
+try:
+    import hashlib
+    sha_hash = hashlib.sha1
+except ImportError:
+    import sha
+    sha_hash = sha.new
+
 from vistrails.core.bundles.pyimport import py_import
 from vistrails.core.configuration import get_vistrails_persistent_configuration
 from vistrails.core import debug
@@ -76,6 +83,20 @@ from .https_if_available import build_opener
 
 package_directory = None
 
+MAX_CACHE_FILENAME = 100
+
+
+###############################################################################
+
+def cache_filename(url):
+    url = urllib.quote_plus(url)
+    if len(url) <= MAX_CACHE_FILENAME:
+        return url
+    else:
+        hasher = sha_hash()
+        hasher.update(url)
+        return url[:MAX_CACHE_FILENAME - 41] + "_" + hasher.hexdigest()
+
 
 ###############################################################################
 
@@ -91,7 +112,7 @@ class Downloader(object):
         Returns the path to the local file.
         """
         self.local_filename = os.path.join(package_directory,
-                                           urllib.quote_plus(self.url))
+                                           cache_filename(self.url))
 
         # Before download
         self.pre_download()
@@ -325,7 +346,7 @@ class SSHDownloader(object):
                 'pip': 'scp'})
 
         local_filename = os.path.join(package_directory,
-                                      urllib.quote_plus(self.url))
+                                      cache_filename(self.url))
 
         ssh = paramiko.SSHClient()
         ssh.load_system_host_keys()
@@ -522,8 +543,8 @@ class RepoSync(Module):
                 # local file not present or out of date, download or use cache
                 self.url = "%s/datasets/download/%s" % (self.base_url,
                                                        self.checksum)
-                local_filename = package_directory + '/' + \
-                        urllib.quote_plus(self.url)
+                local_filename = os.path.join(package_directory,
+                                              cache_filename(self.url))
                 if not self._file_is_in_local_cache(local_filename):
                     # file not in cache, download.
                     try:
@@ -651,6 +672,18 @@ def initialize(*args, **keywords):
             raise RuntimeError("Failed to create cache directory: %s" %
                                package_directory, e)
 
+    # Migrate files to new naming scheme: max 100 characters, with a hash if
+    # it's too long
+    renamed = 0
+    for filename in list(os.listdir(package_directory)):
+        if len(filename) > MAX_CACHE_FILENAME:
+            new_name = cache_filename(filename)
+            os.rename(os.path.join(package_directory, filename),
+                      os.path.join(package_directory, new_name))
+            renamed += 1
+    if renamed:
+        debug.warning("Renamed %d downloaded cache files" % renamed)
+
 
 def handle_module_upgrade_request(controller, module_id, pipeline):
     module_remap = {
@@ -671,6 +704,35 @@ def handle_module_upgrade_request(controller, module_id, pipeline):
 import unittest
 
 
+class TestNaming(unittest.TestCase):
+    def test_short(self):
+        self.assertEqual(cache_filename('http://www.google.com/search'),
+                         'http%3A%2F%2Fwww.google.com%2Fsearch')
+        self.assertEqual(cache_filename('scp://admin@machine:/etc/passwd'),
+                         'scp%3A%2F%2Fadmin%40machine%3A%2Fetc%2Fpasswd')
+
+    def test_long(self):
+        self.assertEqual(cache_filename('https://www.google.com/url?sa=t&rct=j'
+                                        '&q=&esrc=s&source=web&cd=1&cad=rja&ua'
+                                        'ct=8&ved=0ahUKEwjFlbDQ1ovLAhVsv4MKHcr'
+                                        'LAjMQFggcMAA&url=http%3A%2F%2Fwww.vis'
+                                        'trails.org%2Fusersguide%2Fdev%2Fhtml%'
+                                        '2Fjob_submission.html&usg=AFQjCNHc6W3'
+                                        'lWQShmPfYOMsT21kwckBEzw&sig2=3i2AMtOw'
+                                        'njJQsKtnqOSfQg&bvm=bv.114733917,d.dm'
+                                        'o'),
+                         'https%3A%2F%2Fwww.google.com%2Furl%3Fsa%3Dt%26rct%3D'
+                         'j%26q%3'
+                         '_f7d14d30f12413851cc222a61618d5bad6119f77')
+        self.assertEqual(cache_filename('ssh://admin@machine.domain.tld:22022/'
+                                        'var/lib/apt/lists/security.debian.org'
+                                        '_dists_jessie_updates_main_binary-amd'
+                                        '64_Packages'),
+                         'ssh%3A%2F%2Fadmin%40machine.domain.tld%3A22022%2Fvar'
+                         '%2Flib%'
+                         '_e1f69dccfec6f14cdb08f6041a2a43e63d21863d')
+
+
 class TestDownloadFile(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
diff --git a/vistrails/packages/__init__.py b/vistrails/packages/__init__.py
index d1486d2..3edd58b 100644
--- a/vistrails/packages/__init__.py
+++ b/vistrails/packages/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/analytics/__init__.py b/vistrails/packages/analytics/__init__.py
index 45a18fb..bc6918e 100644
--- a/vistrails/packages/analytics/__init__.py
+++ b/vistrails/packages/analytics/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/analytics/init.py b/vistrails/packages/analytics/init.py
index bc23e77..a102f18 100644
--- a/vistrails/packages/analytics/init.py
+++ b/vistrails/packages/analytics/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/controlflow/__init__.py b/vistrails/packages/controlflow/__init__.py
index 95b5362..6e8c48c 100644
--- a/vistrails/packages/controlflow/__init__.py
+++ b/vistrails/packages/controlflow/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -33,10 +33,9 @@
 ## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 ##
 ###############################################################################
-
 from __future__ import division
 
-identifier="org.vistrails.vistrails.control_flow"
-name="Control Flow"
-version="0.2.4"
+identifier = "org.vistrails.vistrails.control_flow"
+name = "Control Flow"
+version = "0.2.4"
 old_identifiers = ["edu.utah.sci.vistrails.control_flow"]
diff --git a/vistrails/packages/controlflow/conditional.py b/vistrails/packages/controlflow/conditional.py
index 37f54f2..1939b0a 100644
--- a/vistrails/packages/controlflow/conditional.py
+++ b/vistrails/packages/controlflow/conditional.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,9 +35,10 @@
 ###############################################################################
 from __future__ import division
 
+import copy
+
 from vistrails.core.modules.vistrails_module import Module, InvalidOutput, \
     ModuleError
-import copy
 
 #################################################################################
 ## If Operator
diff --git a/vistrails/packages/controlflow/fold.py b/vistrails/packages/controlflow/fold.py
index b72f210..c6b307e 100644
--- a/vistrails/packages/controlflow/fold.py
+++ b/vistrails/packages/controlflow/fold.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,17 +35,10 @@
 ###############################################################################
 from __future__ import division
 
-from vistrails.core import debug
-from vistrails.core.modules.basic_modules import create_constant, get_module
-from vistrails.core.modules.vistrails_module import Module, ModuleError, \
-    ModuleConnector, InvalidOutput, ModuleSuspended, ModuleWasSuspended
-from vistrails.core.modules.basic_modules import Boolean, String, Integer, \
-    Float, Constant, List
-from vistrails.core.modules.module_registry import get_module_registry
-from vistrails.core.vistrail.port_spec import PortSpec
-
 import copy
-from itertools import izip
+
+from vistrails.core.modules.vistrails_module import Module, ModuleError, \
+    InvalidOutput, ModuleSuspended, ModuleWasSuspended
 
 ###############################################################################
 ## Fold Operator
diff --git a/vistrails/packages/controlflow/init.py b/vistrails/packages/controlflow/init.py
index 06b318a..bb136ae 100644
--- a/vistrails/packages/controlflow/init.py
+++ b/vistrails/packages/controlflow/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -41,12 +41,12 @@ from vistrails.core.modules.basic_modules import Boolean, String, Variant, \
     List, Not, Integer, Float
 from vistrails.core.upgradeworkflow import UpgradeWorkflowHandler
 
-from fold import Fold, FoldWithModule
-from utils import Map, Filter, Sum, And, Or
-from conditional import If, Default
-from products import ElementwiseProduct, Dot, Cross, CartesianProduct
-from order import ExecuteInOrder
-from looping import For, While
+from .fold import Fold, FoldWithModule
+from .utils import Map, Filter, Sum, And, Or
+from .conditional import If, Default
+from .products import ElementwiseProduct, Dot, Cross, CartesianProduct
+from .order import ExecuteInOrder
+from .looping import For, While
 
 
 #################################################################################
diff --git a/vistrails/packages/controlflow/looping.py b/vistrails/packages/controlflow/looping.py
index 27b7b2e..a9b716d 100644
--- a/vistrails/packages/controlflow/looping.py
+++ b/vistrails/packages/controlflow/looping.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -40,12 +40,11 @@ import copy
 from itertools import izip
 import time
 
+from vistrails.core.modules.basic_modules import create_constant
 from vistrails.core.modules.vistrails_module import Module, InvalidOutput, \
     ModuleError, ModuleConnector, ModuleSuspended, ModuleWasSuspended
 from vistrails.core.utils import xor, long2bytes
 
-from fold import create_constant
-
 try:
     import hashlib
     sha1_hash = hashlib.sha1
diff --git a/vistrails/packages/controlflow/order.py b/vistrails/packages/controlflow/order.py
index fbd15df..cc77c6f 100644
--- a/vistrails/packages/controlflow/order.py
+++ b/vistrails/packages/controlflow/order.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -35,9 +35,10 @@
 ###############################################################################
 from __future__ import division
 
-from vistrails.core.modules.vistrails_module import Module, InvalidOutput
 import copy
 
+from vistrails.core.modules.vistrails_module import Module, InvalidOutput
+
 ##############################################################################
 ## Order Operator
 
diff --git a/vistrails/packages/controlflow/products.py b/vistrails/packages/controlflow/products.py
index d6130b0..5fd17ae 100644
--- a/vistrails/packages/controlflow/products.py
+++ b/vistrails/packages/controlflow/products.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/controlflow/utils.py b/vistrails/packages/controlflow/utils.py
index 09a706f..6d41994 100644
--- a/vistrails/packages/controlflow/utils.py
+++ b/vistrails/packages/controlflow/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -36,7 +36,8 @@
 from __future__ import division
 
 from vistrails.core.modules.vistrails_module import ModuleError
-from fold import Fold, FoldWithModule
+
+from .fold import Fold, FoldWithModule
 
 #################################################################################
 ## Some useful loop structures
diff --git a/vistrails/packages/dialogs/__init__.py b/vistrails/packages/dialogs/__init__.py
index 3f36970..093ba71 100644
--- a/vistrails/packages/dialogs/__init__.py
+++ b/vistrails/packages/dialogs/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/dialogs/continue_prompt.py b/vistrails/packages/dialogs/continue_prompt.py
index 0ab3a98..3eec9a3 100644
--- a/vistrails/packages/dialogs/continue_prompt.py
+++ b/vistrails/packages/dialogs/continue_prompt.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/dialogs/init.py b/vistrails/packages/dialogs/init.py
index 61a94b7..2a20b3b 100644
--- a/vistrails/packages/dialogs/init.py
+++ b/vistrails/packages/dialogs/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/gmaps/__init__.py b/vistrails/packages/gmaps/__init__.py
index 6cf2ff2..2ab5042 100644
--- a/vistrails/packages/gmaps/__init__.py
+++ b/vistrails/packages/gmaps/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/gmaps/gmap_cell.py b/vistrails/packages/gmaps/gmap_cell.py
index 517c8c4..b121aa7 100644
--- a/vistrails/packages/gmaps/gmap_cell.py
+++ b/vistrails/packages/gmaps/gmap_cell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -80,13 +80,13 @@ class GMapCellWidget(WebViewCellWidget):
     <title>Google Maps</title>
     <style>
       html, body {
-      height: 100%%;
       margin: 0;
       padding: 0;
       }
 
       #map-canvas, #map_canvas {
-      height: 100%%;
+      height: 100vh;
+      width: 100vw;
       }
     </style>
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=visualization&sensor=false"></script>
diff --git a/vistrails/packages/gmaps/identifiers.py b/vistrails/packages/gmaps/identifiers.py
index 76413fb..e986628 100644
--- a/vistrails/packages/gmaps/identifiers.py
+++ b/vistrails/packages/gmaps/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/gmaps/init.py b/vistrails/packages/gmaps/init.py
index 496f173..4641514 100644
--- a/vistrails/packages/gmaps/init.py
+++ b/vistrails/packages/gmaps/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/gmaps/utils.py b/vistrails/packages/gmaps/utils.py
index 1dd3322..9d9fb50 100644
--- a/vistrails/packages/gmaps/utils.py
+++ b/vistrails/packages/gmaps/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/gmaps/vis.py b/vistrails/packages/gmaps/vis.py
index 54747e2..7c98973 100644
--- a/vistrails/packages/gmaps/vis.py
+++ b/vistrails/packages/gmaps/vis.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/__init__.py b/vistrails/packages/matplotlib/__init__.py
index f777a0e..664de1c 100644
--- a/vistrails/packages/matplotlib/__init__.py
+++ b/vistrails/packages/matplotlib/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/bases.py b/vistrails/packages/matplotlib/bases.py
index 74a9290..6110ab4 100644
--- a/vistrails/packages/matplotlib/bases.py
+++ b/vistrails/packages/matplotlib/bases.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -94,29 +94,30 @@ class MplFigure(Module):
                     ("figureProperties", "(MplFigureProperties)"),
                     ("setLegend", "(MplLegend)")]
 
-    _output_ports = [("self", "(MplFigure)")]
+    _output_ports = [("figure", "(MplFigure)")]
 
     def compute(self):
         # Create a figure
-        self.figInstance = pylab.figure()
+        figInstance = pylab.figure()
         pylab.hold(True)
 
         # Run the plots
         plots = self.get_input("addPlot")
         for plot in plots:
-            plot(self.figInstance)
+            plot(figInstance)
 
         if self.has_input("figureProperties"):
             figure_props = self.get_input("figureProperties")
-            figure_props.update_props(self.figInstance)
+            figure_props.update_props(figInstance)
         if self.has_input("axesProperties"):
             axes_props = self.get_input("axesProperties")
-            axes_props.update_props(self.figInstance.gca())
+            axes_props.update_props(figInstance.gca())
         if self.has_input("setLegend"):
             legend = self.get_input("setLegend")
-            self.figInstance.gca().legend()
+            figInstance.gca().legend()
+
+        self.set_output("figure", figInstance)
 
-        self.set_output("self", self)
 
 class MplContourSet(Module):
     pass
@@ -128,8 +129,8 @@ class MplFigureToFile(ImageFileMode):
     config_cls = ImageFileModeConfig
     formats = ['pdf', 'png', 'jpg']
 
-    def compute_output(self, output_module, configuration=None):
-        value = output_module.get_input('value')
+    def compute_output(self, output_module, configuration):
+        figure = output_module.get_input('value')
         w = configuration["width"]
         h = configuration["height"]
         img_format = self.get_format(configuration)
@@ -137,8 +138,7 @@ class MplFigureToFile(ImageFileMode):
 
         w_inches = w / 72.0
         h_inches = h / 72.0
-        figure = value.figInstance
-        
+
         previous_size = tuple(figure.get_size_inches())
         figure.set_size_inches(w_inches, h_inches)
         canvas = FigureCanvasBase(figure)
@@ -155,7 +155,7 @@ class MplIPythonMode(IPythonMode):
     mode_type = "ipython"
     config_cls = MplIPythonModeConfig
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         from IPython.display import set_matplotlib_formats
         from IPython.core.display import display
 
@@ -163,7 +163,7 @@ class MplIPythonMode(IPythonMode):
 
         # TODO: use size from configuration
         fig = output_module.get_input('value')
-        display(fig.figInstance)
+        display(fig)
 
 class MplFigureOutput(OutputModule):
     _settings = ModuleSettings(configure_widget="vistrails.gui.modules.output_configuration:OutputModuleConfigurationWidget")
diff --git a/vistrails/packages/matplotlib/diff.py b/vistrails/packages/matplotlib/diff.py
index 97c3000..5c5d4eb 100644
--- a/vistrails/packages/matplotlib/diff.py
+++ b/vistrails/packages/matplotlib/diff.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/figure_cell.py b/vistrails/packages/matplotlib/figure_cell.py
index 18510db..593c076 100644
--- a/vistrails/packages/matplotlib/figure_cell.py
+++ b/vistrails/packages/matplotlib/figure_cell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -56,7 +56,7 @@ FigureCanvasQTAgg.DEBUG = True
 ################################################################################
 
 class MplFigureToSpreadsheet(SpreadsheetMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         fig = output_module.get_input('value')
         self.display_and_wait(output_module, configuration,
                               MplFigureCellWidget, (fig,))
@@ -112,12 +112,12 @@ class MplFigureCellWidget(QCellWidget):
         Update the widget contents based on the input data
         
         """
-        (fig, ) = inputPorts
-        if not self.figure or self.figure.number != fig.figInstance.number:
+        (figInstance, ) = inputPorts
+        if not self.figure or self.figure.number != figInstance.number:
             if self.layout().count() > 0:
                 self.layout().removeWidget(self.canvas)
 
-            self.figure = fig.figInstance
+            self.figure = figInstance
 
             self.canvas = FigureCanvasQTAgg(self.figure)
             self.mplToolbar = MplNavigationToolbar(self.canvas, None)
diff --git a/vistrails/packages/matplotlib/generate.py b/vistrails/packages/matplotlib/generate.py
index 6472cb3..dcf8071 100755
--- a/vistrails/packages/matplotlib/generate.py
+++ b/vistrails/packages/matplotlib/generate.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/identifiers.py b/vistrails/packages/matplotlib/identifiers.py
index a7500f8..b36f42f 100644
--- a/vistrails/packages/matplotlib/identifiers.py
+++ b/vistrails/packages/matplotlib/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -44,6 +44,6 @@ from __future__ import division
 
 identifier = 'org.vistrails.vistrails.matplotlib'
 name = 'matplotlib'
-version = '1.0.5'
+version = '1.0.6'
 old_identifiers = ['edu.utah.sci.vistrails.matplotlib',
                    'org.vistrails.matplotlib.new']
diff --git a/vistrails/packages/matplotlib/init.py b/vistrails/packages/matplotlib/init.py
index ed27af0..a031221 100644
--- a/vistrails/packages/matplotlib/init.py
+++ b/vistrails/packages/matplotlib/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -160,8 +160,10 @@ def handle_module_upgrade_request(controller, module_id, pipeline):
                     'MplFigure':
                     [(None, '1.0.0', None,
                       {'dst_port_remap': {'Script': 'addPlot'},
-                       'src_port_remap': {'FigureManager': 'self',
-                                          'File': 'file'}})],
+                       'src_port_remap': {'FigureManager': 'figure',
+                                          'File': 'file'}}),
+                     ('1.0.0', '1.0.6', None,
+                      {'src_port_remap': {'self': 'figure'}})],
                     'MplFigureCell':
                     [(None, '1.0.0', None,
                       {'dst_port_remap': {'FigureManager': 'figure'}})],
diff --git a/vistrails/packages/matplotlib/mixins.py b/vistrails/packages/matplotlib/mixins.py
index d4b6f79..5fcb1bf 100644
--- a/vistrails/packages/matplotlib/mixins.py
+++ b/vistrails/packages/matplotlib/mixins.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/parse.py b/vistrails/packages/matplotlib/parse.py
index dbf7ef1..e319866 100755
--- a/vistrails/packages/matplotlib/parse.py
+++ b/vistrails/packages/matplotlib/parse.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/specs.py b/vistrails/packages/matplotlib/specs.py
index be24d74..ae8a2ea 100644
--- a/vistrails/packages/matplotlib/specs.py
+++ b/vistrails/packages/matplotlib/specs.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/update.py b/vistrails/packages/matplotlib/update.py
index b9eac3a..6b76d45 100755
--- a/vistrails/packages/matplotlib/update.py
+++ b/vistrails/packages/matplotlib/update.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/matplotlib/widgets.py b/vistrails/packages/matplotlib/widgets.py
index 46aaf95..a032cc9 100644
--- a/vistrails/packages/matplotlib/widgets.py
+++ b/vistrails/packages/matplotlib/widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/mongodb/Vagrantfile b/vistrails/packages/mongodb/Vagrantfile
new file mode 100644
index 0000000..a2eea6a
--- /dev/null
+++ b/vistrails/packages/mongodb/Vagrantfile
@@ -0,0 +1,31 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+  config.vm.box = "remram/debian-8-amd64"
+
+  config.vm.network "forwarded_port", guest: 27017, host: 27017
+
+  config.vm.provision "shell",
+    inline: <<SCRIPT
+sudo aptitude update -y
+sudo aptitude install -y mongodb-server curl
+curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json
+mongoimport --db test --collection restaurants --drop --file dataset.json
+cd /etc
+patch -p0 <<EOF
+--- mongodb.conf    2013-11-13 05:38:26.000000000 -0500
++++ mongodb.conf    2015-07-22 16:32:29.775054996 -0400
+@@ -9,4 +9,4 @@
+ logappend=true
+ 
+-bind_ip = 127.0.0.1
++#bind_ip = 127.0.0.1
+ #port = 27017
+EOF
+sudo service mongodb restart
+SCRIPT
+end
diff --git a/vistrails/packages/persistent_archive/__init__.py b/vistrails/packages/mongodb/__init__.py
similarity index 82%
copy from vistrails/packages/persistent_archive/__init__.py
copy to vistrails/packages/mongodb/__init__.py
index 54f46f8..fdc6f07 100644
--- a/vistrails/packages/persistent_archive/__init__.py
+++ b/vistrails/packages/mongodb/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -33,18 +33,22 @@
 ## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 ##
 ###############################################################################
+"""
+MongoDB package for VisTrails.
 
-from __future__ import division
-
-from vistrails.core.configuration import ConfigurationObject
-
-from .identifiers import *
+Uses the pymongo driver to access MongoDB.
+"""
 
+from __future__ import division
 
-configuration = ConfigurationObject(file_store=(None, str))
-
+identifier = 'org.vistrails.vistrails.mongodb'
+name = 'MongoDB'
+version = '0.1.0'
 
 def package_requirements():
     from vistrails.core.requirements import require_python_module
-    require_python_module('file_archive', {
-            'pip': 'file_archive'})
+    require_python_module('pymongo', {
+            'pip': 'pymongo',
+            'linux-debian': 'python-pymongo',
+            'linux-ubuntu': 'python-pymongo',
+            'linux-fedora': 'pymongo'})
diff --git a/vistrails/packages/mongodb/init.py b/vistrails/packages/mongodb/init.py
new file mode 100644
index 0000000..3cf3657
--- /dev/null
+++ b/vistrails/packages/mongodb/init.py
@@ -0,0 +1,291 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+from __future__ import division
+
+import os
+from pymongo import MongoClient
+
+from vistrails.core.modules.vistrails_module import Module
+
+
+class MongoDatabase(Module):
+    """Connects to MongoDB and selects a database.
+    """
+    _input_ports = [('host', '(basic:String)',
+                     {'optional': True, 'defaults': '["localhost"]'}),
+                    ('port', '(basic:Integer)',
+                     {'optional': True}),
+                    ('database', '(basic:String)')]
+    _output_ports = [('database', '(MongoDatabase)')]
+
+    def compute(self):
+        kwargs = {'host': self.get_input('host')}
+        if self.has_input('port'):
+            kwargs['port'] = self.get_input('port')
+        client = MongoClient(**kwargs)
+
+        database = client.get_database(self.get_input('database'))
+
+        self.set_output('database', database)
+
+
+# Database operations
+
+class MongoCollection(Module):
+    """A single collection in a mongo database.
+    """
+    _input_ports = [('database', MongoDatabase),
+                    ('name', '(basic:String)')]
+    _output_ports = [('collection', '(MongoCollection)')]
+
+    def compute(self):
+        self.set_output('collection',
+                        self.get_input('database')[self.get_input('name')])
+
+
+class DropCollection(Module):
+    """Drops a collection from a MongoDB database.
+    """
+    _input_ports = [('collection', MongoCollection)]
+    _output_ports = [('database', MongoDatabase)]
+
+    def compute(self):
+        collection = self.get_input('collection')
+        database = collection.database
+
+        collection.drop()
+
+        self.set_output('database', database)
+
+
+class RenameCollection(Module):
+    """Renames a collection in a MongoDB database.
+    """
+    _input_ports = [('collection', MongoCollection),
+                    ('new_name', '(basic:String)')]
+    _output_ports = [('collection', MongoCollection),
+                     ('database', MongoDatabase)]
+
+    def compute(self):
+        collection = self.get_input('collection')
+        new_name = self.get_input('new_name')
+
+        collection.rename(new_name)
+
+        self.set_output('collection', collection)
+        self.set_output('database', collection.database)
+
+
+_modules = [MongoDatabase, MongoCollection, DropCollection, RenameCollection]
+
+
+# Data operations
+
+class BaseCollectionOperation(Module):
+    _input_ports = [('collection', MongoCollection)]
+    _output_ports = [('collection', MongoCollection)]
+
+    collection_op_out = None
+
+    def compute(self):
+        collection = self.get_input('collection')
+
+        out = self.collection_operation(collection)
+        if self.collection_op_out is not None:
+            self.set_output(self.collection_op_out, out)
+
+        self.set_output('collection', collection)
+
+    def collection_operation(self, collection):
+        raise NotImplementedError
+
+
+_modules.append(BaseCollectionOperation)
+
+
+def collection_op(input_ports, output=None):
+    def wrapper(func):
+        dct = {'_input_ports': input_ports,
+               'collection_operation': func}
+        if output:
+            dct['_output_ports'] = [output]
+            dct['collection_op_out'] = output[0]
+        _modules.append(type(func.func_name, (BaseCollectionOperation,), dct))
+        return func
+    return wrapper
+
+
+ at collection_op([('document', '(basic:Dictionary)')])
+def InsertOne(self, coll):
+    coll.insert_one(self.get_input('document'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)'),
+                ('document', '(basic:Dictionary)')])
+def ReplaceOne(self, coll):
+    coll.replace_one(self.get_input('filter'), self.get_input('document'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)'), ('document', '(basic:Dictionary)'),
+                ('insert_if_nomatch', '(basic:Boolean)',
+                 {'optional': True, 'defaults': ['True']})])
+def UpdateOne(self, coll):
+    coll.update_one(self.get_input('filter'),
+                    self.get_input('document'),
+                    upsert=self.get_input('insert_if_nomatch'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)')])
+def DeleteOne(self, coll):
+    coll.delete_one(self.get_input('filter'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)')])
+def DeleteMany(self, coll):
+    coll.delete_many(self.get_input('filter'))
+
+
+ at collection_op([('pipeline', '(basic:List)')],
+               output=('results', '(basic:List)'))
+def Aggregate(self, coll):
+    return list(coll.aggregate(self.get_input('pipeline')))
+
+
+ at collection_op([('filter', '(basic:Dictionary)'),
+                ('limit', '(basic:Integer)', {'optional': True})],
+               output=('results', '(basic:List)'))
+def Find(self, coll):
+    return list(coll.find(self.get_input('filter'),
+                          limit=self.force_get_input('limit', 0)))
+
+
+ at collection_op([('filter', '(basic:Dictionary)')],
+               output=('document', '(basic:Dictionary)'))
+def FindOne(self, coll):
+    return coll.find_one(self.get_input('filter'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)')],
+               output=('old_document', '(basic:Dictionary)'))
+def FindOneAndDelete(self, coll):
+    return coll.find_one_and_delete(self.get_input('filter'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)'), ('document', '(basic:Dictionary)')],
+               output=('old_document', '(basic:Dictionary)'))
+def FindOneAndReplace(self, coll):
+    return coll.find_one_and_replace(self.get_input('filter'),
+                                     self.get_input('document'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)'),
+                ('update', '(basic:Dictionary)')],
+               output=('old_document', '(basic:Dictionary)'))
+def FindOneAndUpdate(self, coll):
+    return coll.find_one_and_update(self.get_input('filter'),
+                                    self.get_input('update'))
+
+
+ at collection_op([('filter', '(basic:Dictionary)', {'optional': True})],
+               output=('count', '(basic:Integer)'))
+def Count(self, coll):
+    return coll.count(self.force_get_input('filter'))
+
+
+ at collection_op([('key', '(basic:String)'), ('filter', '(basic:Dictionary)')],
+               output=('results', '(basic:List)'))
+def Distinct(self, coll):
+    return list(coll.distinct(self.get_input('key'), self.get_input('filter')))
+
+
+ at collection_op([('key', '(basic:List)'), ('condition', '(basic:Dictionary)'),
+                ('initial', '(basic:Variant)'), ('reduce', '(basic:String)'),
+                ('finalize', '(basic:String)')],
+               output=('results', '(basic:List)'))
+def Group(self, coll):
+    return list(coll.group(self.get_input('key'), self.get_input('condition'),
+                           self.get_input('initial'), self.get_input('reduce'),
+                           self.force_get_input('finalize', None)))
+
+
+ at collection_op([('map', '(basic:String)'), ('reduce', '(basic:String)'),
+                ('out', '(basic:String)')],
+               output=('results', MongoCollection))
+def MapReduce(self, coll):
+    return coll.map_reduce(self.get_input('map'), self.get_input('reduce'),
+                           self.get_input('out'))
+
+
+###############################################################################
+
+import unittest
+
+
+class TestMongoDB(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        if 'VISTRAILS_TEST_MONGODB' not in os.environ:
+            raise unittest.SkipTest(
+                    "MongoDB tests need $VISTRAILS_TEST_MONGODB to point to a "
+                    "MongoDB server")
+        else:
+            uri = os.environ['VISTRAILS_TEST_MONGODB']
+            host, port = uri.rsplit(':', 1)
+            port = int(port)
+
+            def mock_get_input(self, name):
+                if name == 'host':
+                    return host
+                elif name == 'port':
+                    return port
+                else:
+                    return Module.get_input(self, name)
+
+            MongoDatabase.get_input = mock_get_input
+            MongoDatabase.has_input = lambda s, n: True
+
+    @classmethod
+    def tearDownClass(cls):
+        del MongoDatabase.get_input
+        del MongoDatabase.has_input
+
+    def test_example(self):
+        """Runs the example vt file.
+        """
+        from vistrails.tests.utils import run_file
+
+        self.assertFalse(run_file('examples/mongodb.vt'))
diff --git a/vistrails/packages/parallelflow/__init__.py b/vistrails/packages/parallelflow/__init__.py
index 4c6144a..dc0ca6b 100644
--- a/vistrails/packages/parallelflow/__init__.py
+++ b/vistrails/packages/parallelflow/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/parallelflow/api.py b/vistrails/packages/parallelflow/api.py
index dde81ea..9f62490 100644
--- a/vistrails/packages/parallelflow/api.py
+++ b/vistrails/packages/parallelflow/api.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/parallelflow/engine_manager.py b/vistrails/packages/parallelflow/engine_manager.py
index 7381f3f..bbc350d 100644
--- a/vistrails/packages/parallelflow/engine_manager.py
+++ b/vistrails/packages/parallelflow/engine_manager.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/parallelflow/init.py b/vistrails/packages/parallelflow/init.py
index 9facdde..5b1ffed 100644
--- a/vistrails/packages/parallelflow/init.py
+++ b/vistrails/packages/parallelflow/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/parallelflow/map.py b/vistrails/packages/parallelflow/map.py
index ee2c905..5866af7 100644
--- a/vistrails/packages/parallelflow/map.py
+++ b/vistrails/packages/parallelflow/map.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/__init__.py b/vistrails/packages/persistence/__init__.py
index 52836b0..fca27b9 100644
--- a/vistrails/packages/persistence/__init__.py
+++ b/vistrails/packages/persistence/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/compute_hash.py b/vistrails/packages/persistence/compute_hash.py
index 747a501..b6e6604 100644
--- a/vistrails/packages/persistence/compute_hash.py
+++ b/vistrails/packages/persistence/compute_hash.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/db_utils.py b/vistrails/packages/persistence/db_utils.py
index fe06ad5..088439d 100644
--- a/vistrails/packages/persistence/db_utils.py
+++ b/vistrails/packages/persistence/db_utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/find_files.py b/vistrails/packages/persistence/find_files.py
index a06f537..1496883 100644
--- a/vistrails/packages/persistence/find_files.py
+++ b/vistrails/packages/persistence/find_files.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/find_workflows.py b/vistrails/packages/persistence/find_workflows.py
index 5a1d460..9ee3774 100644
--- a/vistrails/packages/persistence/find_workflows.py
+++ b/vistrails/packages/persistence/find_workflows.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -64,7 +64,7 @@ def find_workflows(path_name, vistrail_dir):
             name = os.path.join(dir, base)
             if os.path.isdir(name):
                 dir_stack.append(name)
-            elif name.endswith('.vt'):
+            elif name.lower().endswith('.vt'):
                 vt_files.append(name)
 
     vt_finds = {}
diff --git a/vistrails/packages/persistence/identifiers.py b/vistrails/packages/persistence/identifiers.py
index 8ccfe86..09ceae2 100644
--- a/vistrails/packages/persistence/identifiers.py
+++ b/vistrails/packages/persistence/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/init.py b/vistrails/packages/persistence/init.py
index cd7f145..a040345 100644
--- a/vistrails/packages/persistence/init.py
+++ b/vistrails/packages/persistence/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/repo.py b/vistrails/packages/persistence/repo.py
index aff29e1..36f409d 100644
--- a/vistrails/packages/persistence/repo.py
+++ b/vistrails/packages/persistence/repo.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistence/schema.sql b/vistrails/packages/persistence/schema.sql
index 727ce2d..5be201d 100644
--- a/vistrails/packages/persistence/schema.sql
+++ b/vistrails/packages/persistence/schema.sql
@@ -1,6 +1,6 @@
 --#############################################################################
 --
--- Copyright (C) 2014-2015, New York University.
+-- Copyright (C) 2014-2016, New York University.
 -- Copyright (C) 2011-2014, NYU-Poly.
 -- Copyright (C) 2006-2011, University of Utah.
 -- All rights reserved.
diff --git a/vistrails/packages/persistence/widgets.py b/vistrails/packages/persistence/widgets.py
index bc04a42..bdd4f8f 100644
--- a/vistrails/packages/persistence/widgets.py
+++ b/vistrails/packages/persistence/widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistent_archive/__init__.py b/vistrails/packages/persistent_archive/__init__.py
index 54f46f8..4677aa3 100644
--- a/vistrails/packages/persistent_archive/__init__.py
+++ b/vistrails/packages/persistent_archive/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/persistent_archive/cache.py b/vistrails/packages/persistent_archive/cache.py
index adfb404..15d8e36 100644
--- a/vistrails/packages/persistent_archive/cache.py
+++ b/vistrails/packages/persistent_archive/cache.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/common.py b/vistrails/packages/persistent_archive/common.py
index 96baeb9..2680156 100644
--- a/vistrails/packages/persistent_archive/common.py
+++ b/vistrails/packages/persistent_archive/common.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/identifiers.py b/vistrails/packages/persistent_archive/identifiers.py
index 50b1641..9dd04ee 100644
--- a/vistrails/packages/persistent_archive/identifiers.py
+++ b/vistrails/packages/persistent_archive/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/init.py b/vistrails/packages/persistent_archive/init.py
index d632e9c..1ae1ca0 100644
--- a/vistrails/packages/persistent_archive/init.py
+++ b/vistrails/packages/persistent_archive/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/persistedinput.py b/vistrails/packages/persistent_archive/persistedinput.py
index 9e12b79..52b3af9 100644
--- a/vistrails/packages/persistent_archive/persistedinput.py
+++ b/vistrails/packages/persistent_archive/persistedinput.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/persistedoutput.py b/vistrails/packages/persistent_archive/persistedoutput.py
index 1bf4e73..e35bfdb 100644
--- a/vistrails/packages/persistent_archive/persistedoutput.py
+++ b/vistrails/packages/persistent_archive/persistedoutput.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/queriedinput.py b/vistrails/packages/persistent_archive/queriedinput.py
index 812de13..ca28c6d 100644
--- a/vistrails/packages/persistent_archive/queriedinput.py
+++ b/vistrails/packages/persistent_archive/queriedinput.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/queries.py b/vistrails/packages/persistent_archive/queries.py
index 34f9efd..344f5d0 100644
--- a/vistrails/packages/persistent_archive/queries.py
+++ b/vistrails/packages/persistent_archive/queries.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/persistent_archive/ui.py b/vistrails/packages/persistent_archive/ui.py
index 8be312f..3e8b835 100644
--- a/vistrails/packages/persistent_archive/ui.py
+++ b/vistrails/packages/persistent_archive/ui.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -135,9 +135,12 @@ class VistrailsViewerWindow(StoreViewerWindow):
                     break
 
 
-store = get_default_store()
-viewer = VistrailsViewerWindow(store)
+_viewer = None
 
 
 def show_viewer():
-    viewer.show()
+    global _viewer
+    if _viewer is None:
+        store = get_default_store()
+        _viewer = VistrailsViewerWindow(store)
+    _viewer.show()
diff --git a/vistrails/packages/persistent_archive/widgets.py b/vistrails/packages/persistent_archive/widgets.py
index 6b508a8..4a18807 100644
--- a/vistrails/packages/persistent_archive/widgets.py
+++ b/vistrails/packages/persistent_archive/widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/pipelineEdit/__init__.py b/vistrails/packages/pipelineEdit/__init__.py
index 519ed96..0d08b13 100644
--- a/vistrails/packages/pipelineEdit/__init__.py
+++ b/vistrails/packages/pipelineEdit/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/pipelineEdit/init.py b/vistrails/packages/pipelineEdit/init.py
index 5bea2cf..f2b2f6e 100644
--- a/vistrails/packages/pipelineEdit/init.py
+++ b/vistrails/packages/pipelineEdit/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/pythonCalc/__init__.py b/vistrails/packages/pythonCalc/__init__.py
index 7f74f45..5514d5b 100644
--- a/vistrails/packages/pythonCalc/__init__.py
+++ b/vistrails/packages/pythonCalc/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/pythonCalc/init.py b/vistrails/packages/pythonCalc/init.py
index 1e076db..05e14be 100644
--- a/vistrails/packages/pythonCalc/init.py
+++ b/vistrails/packages/pythonCalc/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/pythonCalcQt/__init__.py b/vistrails/packages/pythonCalcQt/__init__.py
index 3b8b033..64f31b0 100644
--- a/vistrails/packages/pythonCalcQt/__init__.py
+++ b/vistrails/packages/pythonCalcQt/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/pythonCalcQt/init.py b/vistrails/packages/pythonCalcQt/init.py
index 4dd278d..305e202 100644
--- a/vistrails/packages/pythonCalcQt/init.py
+++ b/vistrails/packages/pythonCalcQt/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/qgis/__init__.py b/vistrails/packages/qgis/__init__.py
index 373b92e..3735b88 100644
--- a/vistrails/packages/qgis/__init__.py
+++ b/vistrails/packages/qgis/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/qgis/init.py b/vistrails/packages/qgis/init.py
index ee9c8fc..30c4736 100644
--- a/vistrails/packages/qgis/init.py
+++ b/vistrails/packages/qgis/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/reprounzip/__init__.py b/vistrails/packages/reprounzip/__init__.py
new file mode 100644
index 0000000..5dedca6
--- /dev/null
+++ b/vistrails/packages/reprounzip/__init__.py
@@ -0,0 +1,22 @@
+# Copyright (C) 2014-2016 New York University
+# This file is part of ReproZip which is released under the Revised BSD License
+# See file LICENSE for full license details.
+
+"""VisTrails package for reprounzip.
+
+This package is the component loaded by VisTrails that provide the
+reprounzip modules. A separate component, reprounzip-vistrails, is a plugin for
+reprounzip that creates VisTrails pipelines that use this package.
+"""
+
+from __future__ import division
+
+from vistrails.core.configuration import ConfigurationObject
+
+
+identifier = 'io.github.vida-nyu.reprozip.reprounzip'
+name = 'reprounzip'
+version = '0.1'
+
+
+configuration = ConfigurationObject(reprounzip_python='python')
diff --git a/vistrails/packages/reprounzip/init.py b/vistrails/packages/reprounzip/init.py
new file mode 100644
index 0000000..4a51ffc
--- /dev/null
+++ b/vistrails/packages/reprounzip/init.py
@@ -0,0 +1,165 @@
+# Copyright (C) 2014-2016 New York University
+# This file is part of ReproZip which is released under the Revised BSD License
+# See file LICENSE for full license details.
+
+from __future__ import division
+
+import os
+import pickle
+import platform
+import subprocess
+import sys
+import warnings
+
+from vistrails.core.modules.vistrails_module import Module, ModuleError
+
+from . import configuration
+
+
+REPROUNZIP_VISTRAILS_INTERFACE_VERSION = '1'
+
+
+class Experiment(object):
+    def __init__(self, path, unpacker):
+        self.path = path
+        self.unpacker = unpacker
+
+
+class Directory(Module):
+    """This represents an experiment that has been unpacked.
+
+    It can be fed through Run modules to run steps of the experiment.
+    """
+    _input_ports = [('directory', '(basic:Path)')]
+    _output_ports = [('experiment', '(Directory)')]
+
+    def compute(self):
+        path = self.get_input('directory').name
+
+        if not os.path.exists(path):
+            self.setup_experiment()
+        if (not os.path.exists(os.path.join(path, 'config.yml')) or
+                not os.path.exists(os.path.join(path, '.reprounzip'))):
+            raise ModuleError(self,
+                              "Directory doesn't contain the necessary file; "
+                              "is an experiment set up there?")
+        with open(os.path.join(path, '.reprounzip'), 'rb') as fp:
+            unpacked_info = pickle.load(fp)
+        unpacker = unpacked_info['unpacker']
+
+        self.set_output('experiment', Experiment(path, unpacker))
+
+    def setup_experiment(self):
+        raise ModuleError(self, "Experiment directory does not exist")
+
+
+class UnpackDirectory(Directory):
+    """This sets up an experiment from a .RPZ file if it isn't already.
+
+    If the directory exists, this behaves like the Directory module; else it
+    will set up the given .RPZ pack with the given unpacker.
+    """
+    _input_ports = [('pack', '(basic:File)'),
+                    ('unpacker', '(basic:String)')]
+
+    def setup_experiment(self):
+        raise NotImplementedError
+
+
+class Run(Module):
+    """Runs one step of an experiment, opt. uploading and downloading files.
+
+    Because each experiment requires different files, this uses additional
+    ports for them. Creating a Run module might be a bit tedious, but the
+    reprounzip-vistrails plugin should generate a template pipeline with all
+    the step modules when unpacking an experiment.
+    """
+    _input_ports = [('experiment', Directory),
+                    ('run_number', '(basic:Integer)'),
+                    ('cmdline', '(basic:String)')]
+    _output_ports = [('experiment', Directory),
+                     ('stdout', '(basic:File)'),
+                     ('stderr', '(basic:File)')]
+
+    def __init__(self):
+        Module.__init__(self)
+        self.input_ports_order = []
+        self.output_ports_order = []
+
+    def transfer_attrs(self, module):
+        Module.transfer_attrs(self, module)
+        self.input_ports_order = [p.name for p in module.input_port_specs]
+        self.output_ports_order = [p.name for p in module.output_port_specs
+                                   if p.name in module.connected_output_ports]
+
+    def compute(self):
+        experiment = self.get_input('experiment')
+
+        # python -m reprounzip.plugins.vistrails <unpacker> <target> <run_id>
+        # --input-file <na>:<a> --output-file <nb>:<b> --cmdline <c>
+        if configuration.check('reprounzip_python'):
+            python = configuration.reprounzip_python
+        else:
+            python = 'python'
+
+        environ = dict(os.environ)
+        removed = []
+        for bad_var in ('PYTHONPATH', 'PYTHONHOME'):
+            if bad_var in os.environ:
+                removed.append(bad_var)
+                del environ[bad_var]
+        if removed:
+            warnings.warn("Removing variables from environment before "
+                          "calling reprounzip: %s" % ' '.join(removed))
+        if (platform.system() == 'Darwin' and
+                '/usr/local/bin' not in environ['PATH'].split(os.pathsep)):
+            environ['PATH'] += os.pathsep + '/usr/local/bin'
+
+        stdout = self.interpreter.filePool.create_file(prefix='vt_rpz_stdout_',
+                                                       suffix='.txt')
+        stderr = self.interpreter.filePool.create_file(prefix='vt_rpz_stderr_',
+                                                       suffix='.txt')
+
+        args = [python, '-m', 'reprounzip.plugins.vistrails',
+                REPROUNZIP_VISTRAILS_INTERFACE_VERSION,
+                experiment.unpacker, experiment.path,
+                '%d' % self.get_input('run_number')]
+        for name in self.input_ports_order:
+            if self.has_input(name):
+                args.append('--input-file')
+                args.append('%s:%s' % (name, self.get_input(name).name))
+        output_ports = []
+        for name in self.output_ports_order:
+            f = self.interpreter.filePool.create_file(prefix='vt_rpz_out_')
+            args.append('--output-file')
+            args.append('%s:%s' % (name, f.name))
+            output_ports.append((name, f))
+
+        with open(stdout.name, 'wb') as stdout_fp:
+            with open(stderr.name, 'wb') as stderr_fp:
+                proc = subprocess.Popen(args,
+                                        stdout=stdout_fp, stderr=stderr_fp,
+                                        env=environ)
+                proc.wait()
+
+        with open(stderr.name, 'rb') as stderr_fp:
+            while True:
+                chunk = stderr_fp.read(4096)
+                if not chunk:
+                    break
+                sys.stderr.write(chunk)
+
+        if proc.returncode != 0:
+            raise ModuleError(self,
+                              "Plugin returned with code %d" % proc.returncode)
+
+        for name, file in output_ports:
+            self.set_output(name, file)
+
+        self.set_output('experiment', experiment)
+        self.set_output('stdout', stdout)
+        self.set_output('stderr', stderr)
+
+
+_modules = [Directory, Run]
+# TODO: UnpackDirectory
diff --git a/vistrails/packages/rpy/__init__.py b/vistrails/packages/rpy/__init__.py
index 3dfa0a1..7ca3423 100644
--- a/vistrails/packages/rpy/__init__.py
+++ b/vistrails/packages/rpy/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/rpy/init.py b/vistrails/packages/rpy/init.py
index 8f103d9..aeb34a7 100644
--- a/vistrails/packages/rpy/init.py
+++ b/vistrails/packages/rpy/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/rpy/widgets.py b/vistrails/packages/rpy/widgets.py
index 7f6940f..05b530c 100644
--- a/vistrails/packages/rpy/widgets.py
+++ b/vistrails/packages/rpy/widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/sklearn/__init__.py b/vistrails/packages/sklearn/__init__.py
index 83aa42a..94395f3 100644
--- a/vistrails/packages/sklearn/__init__.py
+++ b/vistrails/packages/sklearn/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
 ##
diff --git a/vistrails/packages/sklearn/init.py b/vistrails/packages/sklearn/init.py
index fb569c1..5183882 100644
--- a/vistrails/packages/sklearn/init.py
+++ b/vistrails/packages/sklearn/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
 ##
diff --git a/vistrails/packages/sklearn/tests.py b/vistrails/packages/sklearn/tests.py
index 13a16e6..8b5aa19 100644
--- a/vistrails/packages/sklearn/tests.py
+++ b/vistrails/packages/sklearn/tests.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
 ##
diff --git a/vistrails/packages/spreadsheet/__init__.py b/vistrails/packages/spreadsheet/__init__.py
index 26ebb8e..291c72b 100644
--- a/vistrails/packages/spreadsheet/__init__.py
+++ b/vistrails/packages/spreadsheet/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/analogy_api.py b/vistrails/packages/spreadsheet/analogy_api.py
index c394549..eaafdce 100644
--- a/vistrails/packages/spreadsheet/analogy_api.py
+++ b/vistrails/packages/spreadsheet/analogy_api.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/basic_widgets.py b/vistrails/packages/spreadsheet/basic_widgets.py
index b5b4469..176e016 100644
--- a/vistrails/packages/spreadsheet/basic_widgets.py
+++ b/vistrails/packages/spreadsheet/basic_widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/cell_rc.py b/vistrails/packages/spreadsheet/cell_rc.py
index 50a0211..121edce 100644
--- a/vistrails/packages/spreadsheet/cell_rc.py
+++ b/vistrails/packages/spreadsheet/cell_rc.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/celltoolbar.qrc b/vistrails/packages/spreadsheet/celltoolbar.qrc
index eeaa812..4c964a1 100644
--- a/vistrails/packages/spreadsheet/celltoolbar.qrc
+++ b/vistrails/packages/spreadsheet/celltoolbar.qrc
@@ -7,5 +7,7 @@
     <file>images/camera_mount.png</file>
     <file>images/camera.png</file>
     <file>images/view-refresh.png</file>
+    <file>images/new-window.png</file>
+    <file>images/equal-sizes.png</file>
 </qresource>
 </RCC>
diff --git a/vistrails/packages/spreadsheet/celltoolbar_rc.py b/vistrails/packages/spreadsheet/celltoolbar_rc.py
index c153d7c..a36d56d 100644
--- a/vistrails/packages/spreadsheet/celltoolbar_rc.py
+++ b/vistrails/packages/spreadsheet/celltoolbar_rc.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -37,7 +37,7 @@
 
 # Resource object code
 #
-# Created: Mon Dec 29 14:50:55 2014
+# Created: Wed Jul 8 17:20:38 2015
 #      by: The Resource Compiler for PyQt (Qt v4.8.6)
 #
 # WARNING! All changes made in this file will be lost!
@@ -47,6 +47,47 @@ from __future__ import division
 from PyQt4 import QtCore
 
 qt_resource_data = b"\
+\x00\x00\x02\x6b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
+\xdf\x07\x08\x14\x28\x1d\x7d\x5c\x39\x7a\x00\x00\x01\xf8\x49\x44\
+\x41\x54\x58\xc3\xc5\x57\x3b\x4b\x23\x51\x18\x3d\x93\x8c\x26\x83\
+\xb1\x30\x8a\x22\x2a\x3e\x58\xc4\x17\x59\x15\x41\x54\x2c\x14\xed\
+\x6c\xac\x15\x6c\x2c\x2c\x16\xfc\x09\x62\x25\xd8\x09\x16\x16\x62\
+\xa7\x9d\x85\xb0\x0b\x2b\x5b\x2c\xf8\x08\x06\xc1\x20\x28\x88\xe2\
+\x0b\x7c\x46\x14\x05\x63\x92\xc9\xdc\x3b\x16\x16\x9a\x71\xae\x73\
+\x27\xc9\x78\x6f\x37\x33\xe7\xdc\x39\x9c\xef\x7c\xdf\xdc\x01\x04\
+\x2f\x89\x17\xd8\x3d\xb9\xaf\x67\xfb\xe5\xeb\x13\x8d\x92\x4b\xb4\
+\x03\xb2\x5d\xc2\xe2\xaf\xea\x8c\x5f\x3a\x34\x7b\x9a\xbe\x00\x35\
+\x49\xc5\x3a\x90\x20\xa9\xd7\x63\xf3\xe7\xdc\xdc\xb9\xd1\xca\xcc\
+\x05\xc4\x32\x70\xc0\x8c\x6b\x5b\x40\x92\xa4\x36\xc3\xf4\x70\x39\
+\x03\x47\xf1\x67\xed\x10\xc1\x4b\x1f\x93\x9b\x96\x80\x78\xd2\xba\
+\x1b\x35\x42\xb0\xba\x79\x84\xd0\x75\x3e\x5a\x8a\x9f\x11\x8e\xf8\
+\x98\xdc\x34\x4a\x40\xbe\x7c\x4e\xa8\x8e\x7f\xc1\x63\x84\x23\xf9\
+\x68\x2e\x8e\xa2\xaf\xa3\x06\xe1\x95\x08\x93\x2b\xf3\x0c\x99\xf1\
+\x81\x12\xcc\xfc\xbe\x05\x00\xbc\xa8\x6c\x28\xa5\x14\xff\x43\x67\
+\xd8\xbb\xf7\xa1\xa9\x30\x8a\xee\xb6\x2a\xa8\xe4\x7d\xd6\x99\x71\
+\x65\xbb\xe1\x61\x85\x50\x23\x14\xc1\x9d\x0b\x1c\x3c\xe4\xa1\xde\
+\xff\x82\xf6\xd6\xca\xb7\x8e\x21\x94\x3f\x84\x23\xbd\x45\xe6\xad\
+\xf7\xa1\x76\x09\x93\x3a\x26\x09\xc5\xd6\xee\x15\x4e\x1e\x15\xd4\
+\xf9\x63\x68\x0d\x54\x40\x23\x80\x66\x08\x5d\xc2\x2a\x03\xaa\x66\
+\x1d\x30\x23\x46\x23\x14\xdb\x7b\xd7\x38\x7b\xf2\xa2\xd6\x1f\x47\
+\xa0\xa1\x0c\x94\x02\x2a\xd5\x2d\xb9\x9f\x04\x68\x1c\x2d\x6e\xc4\
+\xc4\xe2\x09\xdc\x46\x73\xf1\xa3\x20\x8e\x9f\xf5\xa5\xd0\x21\x31\
+\xf7\x31\xbb\x9f\x22\x80\x67\xc4\x18\x31\x1e\x45\x41\x4f\x00\x50\
+\x14\x0f\xa8\xc5\xb7\x8d\x5a\x8d\x62\xaa\x5b\x97\xc0\x0c\xe3\x51\
+\xbc\x6f\x9b\x33\xf8\x83\x5d\x7e\x26\xd7\x20\x80\xc3\x81\x2c\x9f\
+\x0a\x52\x04\xb8\x38\x8e\x27\x2e\xc9\x51\x01\x12\x87\x00\xc9\x39\
+\x01\x32\xc7\xf9\x68\x79\xe3\xde\x39\x01\x6e\x39\xcb\xfe\xda\x15\
+\x90\xe3\x66\x03\x47\xfa\x8b\x6c\x6d\x3c\xda\x59\x22\xd9\x77\xc0\
+\x9d\xb9\x03\x0b\x7f\xef\x9c\xcd\x80\xa3\x25\x70\x89\xce\x80\xec\
+\x16\xec\x40\xae\x68\x07\x3c\x39\x82\x05\x4c\x2d\xdd\x7c\xbb\x00\
+\xe1\xff\x86\xc2\xd7\x2b\x0e\x01\xcb\xba\xba\xc6\x40\x6e\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x09\x44\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -654,6 +695,62 @@ qt_resource_data = b"\
 \x80\x81\xf1\x3f\x13\x13\x33\xb0\x20\x5a\x0f\x13\x03\x08\x30\x00\
 \x49\xfd\xb6\x3b\x2a\xaa\x2e\x21\x00\x00\x00\x00\x49\x45\x4e\x44\
 \xae\x42\x60\x82\
+\x00\x00\x03\x57\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\xd4\x49\x44\
+\x41\x54\x58\x85\xed\x97\x3b\x4b\x33\x51\x10\x86\x9f\x6c\xe2\x05\
+\x71\x03\x5e\x82\x2b\x51\x0b\x23\xb2\x60\xe7\xa5\x31\x6a\x95\xc6\
+\x4e\xc1\xce\xca\xce\x9f\x20\xd8\xda\xd8\xc7\x3f\x60\x61\x69\x63\
+\xa1\x08\xc2\x2a\x81\x60\x97\x52\x4d\x11\x09\x1a\x77\x75\xb7\x30\
+\x6b\x40\xbc\xe4\x58\xc4\x44\xe3\xb7\x9b\x6c\x3e\x95\x34\xbe\xe5\
+\xe1\x9d\x99\x77\x67\xe6\xcc\x9c\xf5\x09\x21\x04\x4d\x44\x00\x40\
+\x08\x41\x22\x91\xe0\xfe\xfe\xde\xb3\xe1\xe3\xe3\x23\xb7\xb7\xb7\
+\x75\x79\x2d\x2d\x2d\xf4\xf7\xf7\x57\x9d\x49\x92\xc4\xdc\xdc\x1c\
+\x9d\x9d\x9d\xf8\x84\x10\x22\x99\x4c\x72\x78\x78\xd8\xa0\xf6\xef\
+\x61\x68\x68\x88\x95\x95\x95\x52\x06\x0a\x85\x02\x00\xaa\xaa\x12\
+\x89\x44\x3c\x39\xd8\xdf\xdf\xa7\x58\x2c\x32\x36\x36\x86\xcf\xe7\
+\x73\xe4\x98\xa6\x89\xae\xeb\x44\x22\x11\x54\x55\xa5\x1c\x4b\xd3\
+\xb4\x4a\xcc\xc0\x67\x83\x70\x38\xcc\xe4\xe4\xa4\x27\x01\x07\x07\
+\x07\x00\x2c\x2c\x2c\x10\x08\x04\x1c\x39\x89\x44\x02\x5d\xd7\x51\
+\x14\xa5\xe2\xd7\x34\x4d\x34\x4d\xab\x70\x24\x4f\xd1\x7e\x11\x7f\
+\x02\x1c\x8b\xb7\xb8\xb8\x48\x26\x93\xa9\x69\x68\x18\x06\x00\xbb\
+\xbb\xbb\xae\x4d\x58\x28\x14\x78\x78\x78\x60\x7b\x7b\x1b\x59\x96\
+\xd9\xdc\xdc\x64\x62\x62\xc2\x5d\x40\x2a\x95\xe2\xf2\xf2\x92\xd3\
+\xd3\x53\x6e\x6e\x6e\x3c\x7d\x81\xae\xeb\x9e\x78\x00\x7b\x7b\x7b\
+\xe4\x72\x39\xa0\x34\x7b\x2a\x02\xca\x03\xc5\xb2\x2c\x2c\xcb\xe2\
+\xf9\xf9\xd9\xb3\xd3\x46\x60\x18\x06\xd9\x6c\x16\xf8\xb8\xfa\x12\
+\x40\xb1\x58\x04\xa0\xa7\xa7\x87\xe5\xe5\x65\x64\x59\xfe\x15\x01\
+\xd1\x68\x94\xf1\xf1\x71\xe0\x23\x03\x55\x4d\xd8\xde\xde\xce\xc8\
+\xc8\x08\xad\xad\xad\xbf\x22\x40\x51\x14\x7a\x7b\x7b\xab\xce\x1c\
+\x9b\x30\x16\x8b\x55\x26\x97\x1b\x2e\x2e\x2e\x10\x42\x30\x3a\x3a\
+\xea\xda\x84\x96\x65\x61\x9a\x26\xdd\xdd\xdd\x84\x42\x21\x06\x06\
+\x06\xfe\xe1\x38\x0a\x88\xc7\xe3\x35\x83\x03\x6c\x6c\x6c\xf0\xfa\
+\xfa\xca\xfa\xfa\x7a\xcd\x49\x78\x74\x74\x44\x34\x1a\x25\x16\x8b\
+\x01\x90\x4c\x26\xdd\x05\x3c\x3d\x3d\x71\x75\x75\x55\x37\x38\x7c\
+\xd4\xf0\xfa\xfa\x1a\xbf\xdf\xef\xc8\x29\x6f\x57\xdb\xb6\x2b\x7e\
+\xbf\x6e\x5c\x9f\x10\x42\xec\xec\xec\x90\x4e\xa7\x3d\x05\xfe\x29\
+\xb4\xb5\xb5\xb1\xb6\xb6\x56\xca\x40\x28\x14\x22\x9d\x4e\x13\x0c\
+\x06\x3d\xdf\x80\x5c\x2e\x87\x10\x82\x70\x38\xec\xca\xb1\x6d\x9b\
+\x7c\x3e\x8f\x2c\xcb\x04\x83\x41\x00\x5e\x5e\x5e\x30\x0c\x83\x8e\
+\x8e\x0e\xe0\xbd\x04\xe5\x26\x9a\x9a\x9a\x62\x66\x66\x86\x78\x3c\
+\x8e\x69\x9a\x35\x05\x9c\x9c\x9c\x20\x84\x60\x76\x76\x16\x49\x72\
+\x9e\xe8\xd9\x6c\x96\x4c\x26\xc3\xe0\xe0\x20\xc3\xc3\xc3\x2c\x2d\
+\x2d\xa1\x28\x0a\x5b\x5b\x5b\x15\x1b\xd7\x26\x3c\x3f\x3f\xaf\x29\
+\xa0\x8c\xcf\xab\xb5\x1e\x54\x55\x45\x51\x94\xaa\xb3\xa6\x2f\xa3\
+\x3f\x01\x4d\x17\xe0\xd8\x84\x67\x67\x67\x75\x0d\xff\x77\x12\x7e\
+\xbd\x5d\x4d\xcf\xc0\x9f\x80\xaa\xe2\xe5\xf3\x79\xcf\xcb\xa8\x8c\
+\x54\x2a\xe5\x3a\x09\xcb\xcf\xaf\xba\xcb\x48\xd3\x34\x8e\x8f\x8f\
+\x1b\x0a\xfc\x5d\xf4\xf5\xf5\xb1\xba\xba\x5a\xca\xc0\xf4\xf4\x34\
+\x77\x77\x77\x0d\xff\x9c\xda\xb6\x5d\x97\xe7\xf7\xfb\xe9\xea\xea\
+\xaa\x7a\xb4\x48\x92\xc4\xfc\xfc\x3c\xf0\x9e\x81\x46\xd5\xff\x24\
+\xde\x00\x53\x51\x36\xf2\xa9\xbb\x6c\xb4\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x06\x4e\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -893,6 +990,10 @@ qt_resource_name = b"\
 \x07\x03\x7d\xc3\
 \x00\x69\
 \x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0e\
+\x02\x23\xf2\xe7\
+\x00\x6e\
+\x00\x65\x00\x77\x00\x2d\x00\x77\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x12\
 \x05\x0c\xb7\x27\
 \x00\x6e\
@@ -915,6 +1016,10 @@ qt_resource_name = b"\
 \x00\x70\
 \x00\x6c\x00\x61\x00\x79\x00\x65\x00\x72\x00\x5f\x00\x65\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x0f\
+\x06\x3d\x71\x47\
+\x00\x65\
+\x00\x71\x00\x75\x00\x61\x00\x6c\x00\x2d\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
 \x03\x75\x07\x07\
 \x00\x70\
 \x00\x6c\x00\x61\x00\x79\x00\x65\x00\x72\x00\x5f\x00\x70\x00\x6c\x00\x61\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
@@ -926,14 +1031,16 @@ qt_resource_name = b"\
 
 qt_resource_struct = b"\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\
-\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x09\x48\
-\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x33\
-\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x4a\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\
 \x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x15\xb7\
-\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x85\
-\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xfd\
+\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xb7\
+\x00\x00\x01\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xfd\
+\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x21\xb9\
+\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x02\x6f\
+\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x18\x26\
+\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x27\xa2\
+\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x31\x4f\
+\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x10\x6c\
 "
 
 def qInitResources():
diff --git a/vistrails/packages/spreadsheet/identifiers.py b/vistrails/packages/spreadsheet/identifiers.py
index 7c63559..66c7422 100644
--- a/vistrails/packages/spreadsheet/identifiers.py
+++ b/vistrails/packages/spreadsheet/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/images/equal-sizes.png b/vistrails/packages/spreadsheet/images/equal-sizes.png
new file mode 100644
index 0000000..41dbd35
Binary files /dev/null and b/vistrails/packages/spreadsheet/images/equal-sizes.png differ
diff --git a/vistrails/packages/spreadsheet/images/new-window.png b/vistrails/packages/spreadsheet/images/new-window.png
new file mode 100644
index 0000000..13f659d
Binary files /dev/null and b/vistrails/packages/spreadsheet/images/new-window.png differ
diff --git a/vistrails/packages/spreadsheet/init.py b/vistrails/packages/spreadsheet/init.py
index a791de6..dc7d63b 100644
--- a/vistrails/packages/spreadsheet/init.py
+++ b/vistrails/packages/spreadsheet/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -155,12 +155,14 @@ def menu_items():
 
 
 def finalize():
-    spreadsheetWindow = spreadsheetController.findSpreadsheetWindow()
-    ### DO NOT ADD BACK spreadsheetWindow.destroy()
-    ### That will crash VisTrails on Mac.
-    ### It is not supposed to be called directly
-    spreadsheetWindow.cleanup()
-    spreadsheetWindow.deleteLater()
+    spreadsheetWindow = spreadsheetController.findSpreadsheetWindow(
+        show=False, create=False)
+    if spreadsheetWindow is not None:
+        ### DO NOT ADD BACK spreadsheetWindow.destroy()
+        ### That will crash VisTrails on Mac.
+        ### It is not supposed to be called directly
+        spreadsheetWindow.cleanup()
+        spreadsheetWindow.deleteLater()
 
 
 def upgrade_cell_to_output(module_remap, module_id, pipeline,
diff --git a/vistrails/packages/spreadsheet/spreadsheet_base.py b/vistrails/packages/spreadsheet/spreadsheet_base.py
index 448984c..3c8764a 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_base.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_base.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_cell.py b/vistrails/packages/spreadsheet/spreadsheet_cell.py
index 2bfcfe4..7c69690 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_cell.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_cell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_config.py b/vistrails/packages/spreadsheet/spreadsheet_config.py
index 183d9ab..1aad55e 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_config.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_config.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_controller.py b/vistrails/packages/spreadsheet/spreadsheet_controller.py
index b4fc4d5..5e77b57 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_controller.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_controller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -46,6 +46,8 @@ from PyQt4 import QtCore, QtGui
 from .spreadsheet_window import SpreadsheetWindow
 
 
+spreadsheetWindow = None
+
 class SpreadsheetController(object):
     """
     SpreadsheetController will act like an event dispatcher to
@@ -60,16 +62,21 @@ class SpreadsheetController(object):
         """
         pass
 
-    def findSpreadsheetWindow(self, show=True):
+    def findSpreadsheetWindow(self, show=True, create=True):
         """ findSpreadsheetWindow() -> QWidget
         Looking for the spreadsheet window
 
         """
+        global spreadsheetWindow
+        if spreadsheetWindow is not None:
+            return spreadsheetWindow
         wList = QtGui.QApplication.topLevelWidgets()
         for w in wList:
             if isinstance(w, SpreadsheetWindow):
+                spreadsheetWindow = w
                 return w
-        global spreadsheetWindow
+        if not create:
+            return None
         spreadsheetWindow = SpreadsheetWindow()
         if show:
             spreadsheetWindow.configShow()
@@ -80,9 +87,8 @@ class SpreadsheetController(object):
         Post an event to the spreadsheet to make thread-safe connection
         """
         spreadsheetWindow = self.findSpreadsheetWindow()
-        if spreadsheetWindow:
-            QtCore.QCoreApplication.postEvent(spreadsheetWindow, QtGui.QShowEvent())
-            QtCore.QCoreApplication.postEvent(spreadsheetWindow, event)
+        QtCore.QCoreApplication.postEvent(spreadsheetWindow, QtGui.QShowEvent())
+        QtCore.QCoreApplication.postEvent(spreadsheetWindow, event)
 
     def getBuilderWindow(self):
         """ getBuilderWindow() -> QWidget
@@ -103,8 +109,7 @@ class SpreadsheetController(object):
 
         """
         spreadsheetWindow = self.findSpreadsheetWindow(show=False)
-        if spreadsheetWindow:
-            spreadsheetWindow.setEchoMode(echo)
+        spreadsheetWindow.setEchoMode(echo)
 
     def echoMode(self):
         """ echoMode() -> bool
@@ -112,9 +117,7 @@ class SpreadsheetController(object):
 
         """
         spreadsheetWindow = self.findSpreadsheetWindow(show=False)
-        if spreadsheetWindow:
-            return spreadsheetWindow.echoMode
-        return None
+        return spreadsheetWindow.echoMode
 
     def getEchoCellEvents(self):
         """ getEchoCellEvents() -> [DisplayCellEvent]
@@ -123,11 +126,9 @@ class SpreadsheetController(object):
 
         """
         spreadsheetWindow = self.findSpreadsheetWindow(show=False)
-        if spreadsheetWindow:
-            events = spreadsheetWindow.getEchoCellEvents()
-            spreadsheetWindow.clearEchoCellEvents()
-            return events
-        return None
+        events = spreadsheetWindow.getEchoCellEvents()
+        spreadsheetWindow.clearEchoCellEvents()
+        return events
 
 
 spreadsheetController = SpreadsheetController()
diff --git a/vistrails/packages/spreadsheet/spreadsheet_event.py b/vistrails/packages/spreadsheet/spreadsheet_event.py
index 7d1627c..4effc35 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_event.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_event.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_execute.py b/vistrails/packages/spreadsheet/spreadsheet_execute.py
index 7c7b766..21f4ffa 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_execute.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_execute.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -59,8 +59,10 @@ def assignPipelineCellLocations(pipeline, sheetName,
                                 minRowCount=None, minColCount=None):
 
     reg = get_module_registry()
-    spreadsheet_cell_desc = \
-        reg.get_descriptor_by_name(spreadsheet_pkg, 'SpreadsheetCell')
+    spreadsheet_cell_desc = reg.get_descriptor_by_name(spreadsheet_pkg,
+                                                       'SpreadsheetCell')
+    output_module_desc = reg.get_descriptor_by_name(
+            'org.vistrails.vistrails.basic', 'OutputModule')
 
     create_module = VistrailController.create_module_static
     create_function = VistrailController.create_function_static
@@ -74,28 +76,11 @@ def assignPipelineCellLocations(pipeline, sheetName,
         inspector.inspect_ambiguous_modules(pipeline)
         cellIds = inspector.spreadsheet_cells
 
-    for id_list in cellIds:
-        # find at which depth we need to be working
-        try:
-            id_iter = iter(id_list)
-            m = pipeline.modules[id_iter.next()]
-            for mId in id_iter:
-                pipeline = m.pipeline
-                m = pipeline.modules[mId]
-        except TypeError:
-            mId = id_list
-
-        m = pipeline.modules[mId]
-        if not reg.is_descriptor_subclass(m.module_descriptor,
-                                          spreadsheet_cell_desc):
-            continue
-
-        # Walk through all connections and remove all CellLocation
-        # modules connected to this spreadsheet cell
+    def fix_cell_module(pipeline, mId):
+        # Delete connections to 'Location' input port
         conns_to_delete = []
-        for (cId,c) in pipeline.connections.iteritems():
-            if (c.destinationId==mId and
-                pipeline.modules[c.sourceId].name=="CellLocation"):
+        for c in pipeline.connection_list:
+            if c.destinationId == mId and c.destination.name == 'Location':
                 conns_to_delete.append(c.id)
         for c_id in conns_to_delete:
             pipeline.delete_connection(c_id)
@@ -155,9 +140,76 @@ def assignPipelineCellLocations(pipeline, sheetName,
         pipeline.add_module(cellLocation)
         pipeline.add_connection(sheet_conn)
         pipeline.add_connection(cell_conn)
+
+        # replace the getNewId method
+        pipeline.tmp_id.__class__.getNewId = orig_getNewId
+
+    def fix_output_module(pipeline, mId):
+        # Remove all connections to 'configuration' input port
+        conns_to_delete = []
+        for c in pipeline.connection_list:
+            if (c.destinationId == mId and
+                    c.destination.name == 'configuration'):
+                conns_to_delete.append(c.id)
+        for c_id in conns_to_delete:
+            pipeline.delete_connection(c_id)
+
+        m = pipeline.modules[mId]
+
+        # Remove all functions on 'configuration' input port
+        funcs_to_delete = []
+        for f in m.functions:
+            if f.name == 'configuration':
+                funcs_to_delete.append(f.real_id)
+        for f_id in funcs_to_delete:
+            m.delete_function_by_real_id(f_id)
+
+        # a hack to first get the id_scope to the local pipeline scope
+        # then make them negative by hacking the getNewId method
+        # all of this is reset at the end of this block
+        id_scope = pipeline.tmp_id
+        orig_getNewId = pipeline.tmp_id.__class__.getNewId
+        def getNewId(self, objType):
+            return -orig_getNewId(self, objType)
+        pipeline.tmp_id.__class__.getNewId = getNewId
+
+        config = {'row': row - 1, 'col': col - 1}
+        if minRowCount is not None:
+            config['sheetRowCount'] = minRowCount
+        if minColCount is not None:
+            config['sheetColCount'] = minColCount
+        if sheetName is not None:
+            config['sheetName']= sheetName
+        config = {'spreadsheet': config}
+        config_function = create_function(id_scope, m,
+                                          'configuration', [repr(config)])
+        m.add_function(config_function)
+
         # replace the getNewId method
         pipeline.tmp_id.__class__.getNewId = orig_getNewId
 
+    for id_list in cellIds:
+        cell_pipeline = pipeline
+
+        # find at which depth we need to be working
+        if isinstance(id_list, (int, long)):
+            mId = id_list
+            m = cell_pipeline.modules[mId]
+        else:
+            id_iter = iter(id_list)
+            mId = next(id_iter)
+            m = cell_pipeline.modules[mId]
+            for mId in id_iter:
+                cell_pipeline = m.pipeline
+                m = cell_pipeline.modules[mId]
+
+        if reg.is_descriptor_subclass(m.module_descriptor,
+                                      spreadsheet_cell_desc):
+            fix_cell_module(cell_pipeline, mId)
+        elif reg.is_descriptor_subclass(m.module_descriptor,
+                                        output_module_desc):
+            fix_output_module(cell_pipeline, mId)
+
     return root_pipeline
 
 
diff --git a/vistrails/packages/spreadsheet/spreadsheet_helpers.py b/vistrails/packages/spreadsheet/spreadsheet_helpers.py
index 753607c..63c1c91 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_helpers.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_helpers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_rc.py b/vistrails/packages/spreadsheet/spreadsheet_rc.py
index 21aede9..5e40b5e 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_rc.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_rc.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_registry.py b/vistrails/packages/spreadsheet/spreadsheet_registry.py
index ef85578..caf4eff 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_registry.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_registry.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_sheet.py b/vistrails/packages/spreadsheet/spreadsheet_sheet.py
index d2541c7..d53e908 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_sheet.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_sheet.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -544,6 +544,8 @@ class StandardWidgetSheet(QtGui.QTableWidget):
         self.setCellWidget(row, col, cellWidget)
         if cellWidget:
             self.delegate.updateEditorGeometry(cellWidget, None, index)
+        if (row, col) == self.activeCell:
+            self.setActiveCell(row, col)
 
     def selectCell(self, row, col, toggling):
         """ selectCell(row: int, col: int, toggling: bool) -> None
diff --git a/vistrails/packages/spreadsheet/spreadsheet_tab.py b/vistrails/packages/spreadsheet/spreadsheet_tab.py
index a1e3087..7cb0a7d 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_tab.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_tab.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -105,6 +105,10 @@ class StandardWidgetToolBar(QtGui.QToolBar):
         self.addAction(self.sheetTab.tabWidget.saveAction())
         self.addWidget(self.rowCountSpinBox())
         self.addWidget(self.colCountSpinBox())
+        self.connect(self.addAction(QtGui.QIcon(":/images/equal-sizes.png"),
+                                    "Reset sizes",),
+                     QtCore.SIGNAL('triggered()'),
+                     self.resetCellSizes)
         self.addAction(self.sheetTab.tabWidget.exportSheetToImageAction())
         self.addSeparator()
         self.layout().setSpacing(2)
@@ -140,6 +144,9 @@ class StandardWidgetToolBar(QtGui.QToolBar):
                          self.sheetTab.colSpinBoxChanged)
         return self.colSpinBox
 
+    def resetCellSizes(self):
+        self.sheetTab.sheet.stretchCells()
+
     def setCellToolBar(self, cellToolBar):
         """ setCellToolBar(cellToolBar: QToolBar) -> None
         Set the current cell toolbar on this toolbar. Use None to
diff --git a/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py b/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py
index fe10531..2e9cc1b 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/spreadsheet_window.py b/vistrails/packages/spreadsheet/spreadsheet_window.py
index 807434b..8db56d2 100644
--- a/vistrails/packages/spreadsheet/spreadsheet_window.py
+++ b/vistrails/packages/spreadsheet/spreadsheet_window.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/__init__.py b/vistrails/packages/spreadsheet/widgets/__init__.py
index d1486d2..3edd58b 100644
--- a/vistrails/packages/spreadsheet/widgets/__init__.py
+++ b/vistrails/packages/spreadsheet/widgets/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/iebrowser/__init__.py b/vistrails/packages/spreadsheet/widgets/iebrowser/__init__.py
index 20256b8..e83938a 100644
--- a/vistrails/packages/spreadsheet/widgets/iebrowser/__init__.py
+++ b/vistrails/packages/spreadsheet/widgets/iebrowser/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/iebrowser/iecell.py b/vistrails/packages/spreadsheet/widgets/iebrowser/iecell.py
index f8e5b1b..1496306 100644
--- a/vistrails/packages/spreadsheet/widgets/iebrowser/iecell.py
+++ b/vistrails/packages/spreadsheet/widgets/iebrowser/iecell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py b/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py
index 26032b0..96ea556 100644
--- a/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py
+++ b/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer.py b/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer.py
index 402b53b..429125d 100644
--- a/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer.py
+++ b/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -48,7 +48,7 @@ import imageviewer_rc
 ################################################################################
 
 class ImageFileToSpreadsheet(SpreadsheetMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         fname = output_module.get_input('value').name
         window = spreadsheetController.findSpreadsheetWindow()
         local_file = window.file_pool.make_local_copy(fname)
diff --git a/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer_rc.py b/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer_rc.py
index ff1bca1..8f58d25 100644
--- a/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer_rc.py
+++ b/vistrails/packages/spreadsheet/widgets/imageviewer/imageviewer_rc.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/richtext/__init__.py b/vistrails/packages/spreadsheet/widgets/richtext/__init__.py
index 987d097..48fa3bf 100644
--- a/vistrails/packages/spreadsheet/widgets/richtext/__init__.py
+++ b/vistrails/packages/spreadsheet/widgets/richtext/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/richtext/richtext.py b/vistrails/packages/spreadsheet/widgets/richtext/richtext.py
index 3e3fe24..5e68b42 100644
--- a/vistrails/packages/spreadsheet/widgets/richtext/richtext.py
+++ b/vistrails/packages/spreadsheet/widgets/richtext/richtext.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -52,7 +52,7 @@ from vistrails.packages.spreadsheet.spreadsheet_cell import QCellWidget
 
 
 class RichTextToSpreadsheet(SpreadsheetMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         filename = output_module.get_input('value').name
 
         with open(filename, 'rb') as fp:
diff --git a/vistrails/packages/spreadsheet/widgets/svg/__init__.py b/vistrails/packages/spreadsheet/widgets/svg/__init__.py
index f9fb2d3..d867196 100644
--- a/vistrails/packages/spreadsheet/widgets/svg/__init__.py
+++ b/vistrails/packages/spreadsheet/widgets/svg/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/svg/svg.py b/vistrails/packages/spreadsheet/widgets/svg/svg.py
index b6267b4..753c248 100644
--- a/vistrails/packages/spreadsheet/widgets/svg/svg.py
+++ b/vistrails/packages/spreadsheet/widgets/svg/svg.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/webview/__init__.py b/vistrails/packages/spreadsheet/widgets/webview/__init__.py
index 8a3830d..ea79205 100644
--- a/vistrails/packages/spreadsheet/widgets/webview/__init__.py
+++ b/vistrails/packages/spreadsheet/widgets/webview/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/spreadsheet/widgets/webview/webview.py b/vistrails/packages/spreadsheet/widgets/webview/webview.py
index 5ac61e0..8c44275 100644
--- a/vistrails/packages/spreadsheet/widgets/webview/webview.py
+++ b/vistrails/packages/spreadsheet/widgets/webview/webview.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -44,7 +44,7 @@ from vistrails.packages.spreadsheet.basic_widgets import SpreadsheetCell
 from vistrails.packages.spreadsheet.spreadsheet_cell import QCellWidget, \
     QCellToolBar
 import os
-import shutil
+import webbrowser
 ############################################################################
 
 class WebViewCell(SpreadsheetCell):
@@ -81,6 +81,7 @@ class WebViewCellWidget(QCellWidget):
         """
         QCellWidget.__init__(self, parent)
         self.setLayout(QtGui.QVBoxLayout(self))
+        self.toolBarType = WebViewCellToolBar
         QtWebKit.QWebSettings.globalSettings().setAttribute(
             QtWebKit.QWebSettings.DeveloperExtrasEnabled, True)
         self.browser = QtWebKit.QWebView()
@@ -118,3 +119,28 @@ class WebViewCellWidget(QCellWidget):
         printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
         printer.setOutputFileName(filename)
         self.browser.print_(printer)
+
+
+class OpenInBrowserAction(QtGui.QAction):
+    def __init__(self, parent):
+        QtGui.QAction.__init__(self,
+                               QtGui.QIcon(":/images/new-window.png"),
+                               "Open in &Browser",
+                               parent)
+        self._view = None
+        self.setEnabled(False)
+        self.setStatusTip("Open this page in the system web browser")
+
+    def updateStatus(self, info):
+        self._view = info[3]
+        self.setEnabled(self._view is not None)
+
+    def triggeredSlot(self, checked=False):
+        if self._view is not None:
+            webbrowser.open(self._view.browser.url().toString())
+
+
+class WebViewCellToolBar(QCellToolBar):
+    def createToolBar(self):
+        self.appendAction(OpenInBrowserAction(self))
+        self.addAnimationButtons()
diff --git a/vistrails/packages/sql/__init__.py b/vistrails/packages/sql/__init__.py
index e1e8e14..d210d1c 100644
--- a/vistrails/packages/sql/__init__.py
+++ b/vistrails/packages/sql/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/sql/init.py b/vistrails/packages/sql/init.py
index a0c309f..eaa1a78 100644
--- a/vistrails/packages/sql/init.py
+++ b/vistrails/packages/sql/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/sql/widgets.py b/vistrails/packages/sql/widgets.py
index 23f6eac..8fa0d7f 100644
--- a/vistrails/packages/sql/widgets.py
+++ b/vistrails/packages/sql/widgets.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/tabledata/__init__.py b/vistrails/packages/tabledata/__init__.py
index 2e00d63..6d07b08 100644
--- a/vistrails/packages/tabledata/__init__.py
+++ b/vistrails/packages/tabledata/__init__.py
@@ -1,3 +1,38 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 """Table data package for VisTrails.
 
 This package contains data extraction and manipulation facilities. It wraps
diff --git a/vistrails/packages/tabledata/common.py b/vistrails/packages/tabledata/common.py
index 2195796..8bf7371 100644
--- a/vistrails/packages/tabledata/common.py
+++ b/vistrails/packages/tabledata/common.py
@@ -1,10 +1,41 @@
-from __future__ import division
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
 
-try:
-    import numpy
-except ImportError: # pragma: no cover
-    numpy = None
+from __future__ import division
 
+from vistrails.core.bundles.pyimport import py_import
 from vistrails.core.modules.basic_modules import List, ListType
 from vistrails.core.modules.config import ModuleSettings
 from vistrails.core.modules.output_modules import OutputModule, FileMode, \
@@ -13,6 +44,34 @@ from vistrails.core.modules.vistrails_module import Module, ModuleError, \
     Converter
 
 
+_numpy = False
+
+def get_numpy(required=True):
+    """Tries to import numpy.
+
+    If `required` is False, don't ask again if the user already declined;
+    return None if numpy is not available.
+    If `required` is True, do ask to install, and raise ImportError if numpy
+    can't be set up.
+    """
+    global _numpy
+
+    if _numpy is False:
+        try:
+            _numpy = py_import(
+                    'numpy', {
+                        'pip': 'numpy',
+                        'linux-debian': 'python-numpy',
+                        'linux-ubuntu': 'python-numpy',
+                        'linux-fedora': 'numpy'},
+                    store_in_config=not required)
+        except ImportError:
+            _numpy = None
+    if _numpy is None and required:
+        raise ImportError("No module named numpy")
+    return _numpy
+
+
 class InternalModuleError(Exception):
     """Track ModuleError in subclasses."""
 
@@ -42,6 +101,7 @@ class TableObject(object):
         If numeric=True, the data is returned as a numpy array if numpy is
         available, or as a list of floats.
         """
+        numpy = get_numpy(False)
         if numeric and numpy is not None:
             return numpy.array(self._columns[i], dtype=numpy.float32)
         else:
@@ -330,7 +390,7 @@ class TableToFileMode(FileMode, HtmlRendererMixin):
         filename = self.get_filename(configuration, suffix='.csv')
         WriteCSV.write(filename, table)
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         value = output_module.get_input("value")
         format = configuration.get('format', 'html').lower()
         try:
@@ -342,7 +402,7 @@ class TableToFileMode(FileMode, HtmlRendererMixin):
 
 
 class TableToIPythonMode(IPythonMode, HtmlRendererMixin):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         from IPython.core.display import display, HTML
 
         table = output_module.get_input('value')
diff --git a/vistrails/packages/tabledata/convert/__init__.py b/vistrails/packages/tabledata/convert/__init__.py
index 2cfce3d..dcbe9fc 100644
--- a/vistrails/packages/tabledata/convert/__init__.py
+++ b/vistrails/packages/tabledata/convert/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -38,6 +38,8 @@ from __future__ import division
 from vistrails.core.modules.utils import make_modules_dict
 
 from convert_dates import _modules as dates_modules
+from .convert_numpy import _modules as numpy_modules
 
 
-_modules = make_modules_dict(dates_modules, namespace='convert')
+_modules = make_modules_dict(dates_modules, numpy_modules,
+                             namespace='convert')
diff --git a/vistrails/packages/tabledata/convert/convert_dates.py b/vistrails/packages/tabledata/convert/convert_dates.py
index 0e8af62..0d68e81 100644
--- a/vistrails/packages/tabledata/convert/convert_dates.py
+++ b/vistrails/packages/tabledata/convert/convert_dates.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/tabledata/convert/convert_numpy.py b/vistrails/packages/tabledata/convert/convert_numpy.py
new file mode 100644
index 0000000..71916b9
--- /dev/null
+++ b/vistrails/packages/tabledata/convert/convert_numpy.py
@@ -0,0 +1,108 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+from __future__ import division
+
+from vistrails.core.modules.vistrails_module import Module
+
+from ..common import get_numpy
+
+
+class Reshape(Module):
+    """Reshapes an array using Numpy.
+    """
+    _input_ports = [
+            ('array', '(org.vistrails.vistrails.basic:List)'),
+            ('shape', '(org.vistrails.vistrails.basic:List)')]
+    _output_ports = [
+            ('value', '(org.vistrails.vistrails.basic:List)')]
+
+    def compute(self):
+        numpy = get_numpy()
+
+        array = self.get_input('array')
+        shape = self.get_input('shape')
+
+        array = numpy.array(array).reshape(shape)
+        self.set_output('value', array)
+
+
+_modules = [Reshape]
+
+
+###############################################################################
+
+import unittest
+
+
+class ReshapeTestCase(unittest.TestCase):
+    def test_reshape(self):
+        """Uses Reshape to reshape arrays and lists.
+        """
+        from vistrails.tests.utils import execute, intercept_result
+        from ..identifiers import identifier
+        with intercept_result(Reshape, 'value') as results:
+            self.assertFalse(execute([
+                    ('convert|Reshape', identifier, [
+                        ('array', [('List', '[0, 1, 2, 3, 4, 5]')]),
+                        ('shape', [('List', '[2, 3]')]),
+                    ]),
+                ]))
+            self.assertFalse(execute([
+                    ('convert|Reshape', identifier, [
+                        ('array', [('List', '[[1, 2], [3, 4], [5, 6]]')]),
+                        ('shape', [('List', '[6]')]),
+                    ]),
+                ]))
+        self.assertEqual(len(results), 2)
+        self.assertEqual(results[0].shape, (2, 3))
+        self.assertTrue((results[0] == [[0, 1, 2], [3, 4, 5]]).all())
+        self.assertEqual(results[1].shape, (6,))
+        self.assertTrue((results[1] == [1, 2, 3, 4, 5, 6]).all())
+
+    def test_noreshape(self):
+        """Uses Reshape with a wrong shape.
+        """
+        from vistrails.tests.utils import execute
+        from ..identifiers import identifier
+        error = execute([
+                ('convert|Reshape', identifier, [
+                    ('array', [('List', '[0, 1, 2, 3, 4, 5]')]),
+                    ('shape', [('List', '[9]')]),
+                ]),
+            ])
+        self.assertEqual(error.keys(), [0])
+        self.assertIn("total size of new array must be unchanged",
+                      error[0].args[0])
diff --git a/vistrails/packages/tabledata/identifiers.py b/vistrails/packages/tabledata/identifiers.py
index edda4d5..83a542d 100644
--- a/vistrails/packages/tabledata/identifiers.py
+++ b/vistrails/packages/tabledata/identifiers.py
@@ -1,3 +1,38 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 from __future__ import division
 
 identifier = 'org.vistrails.vistrails.tabledata'
diff --git a/vistrails/packages/tabledata/init.py b/vistrails/packages/tabledata/init.py
index 4c8ab1b..6bfb439 100644
--- a/vistrails/packages/tabledata/init.py
+++ b/vistrails/packages/tabledata/init.py
@@ -1,19 +1,44 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 from __future__ import division
 
-from vistrails.core.bundles.pyimport import py_import
 from vistrails.core.modules.utils import make_modules_dict
 from vistrails.core.packagemanager import get_package_manager
 from vistrails.core.upgradeworkflow import UpgradeWorkflowHandler
 
-try:
-    py_import('numpy', {
-            'pip': 'numpy',
-            'linux-debian': 'python-numpy',
-            'linux-ubuntu': 'python-numpy',
-            'linux-fedora': 'numpy'})
-except ImportError: # pragma: no cover
-    pass
-
 from .common import _modules as common_modules, TableOutput
 from .convert import _modules as convert_modules
 from .operations import _modules as operation_modules
diff --git a/vistrails/packages/tabledata/operations.py b/vistrails/packages/tabledata/operations.py
index 77b338c..f19be83 100644
--- a/vistrails/packages/tabledata/operations.py
+++ b/vistrails/packages/tabledata/operations.py
@@ -1,14 +1,46 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 from __future__ import division
 
-try:
-    import numpy
-except ImportError: # pragma: no cover
-    numpy = None
 import re
 
 from vistrails.core.modules.vistrails_module import ModuleError
 
-from .common import TableObject, Table, choose_column, choose_columns
+from .common import get_numpy, TableObject, Table, \
+    choose_column, choose_columns
 
 # FIXME use pandas?
 
@@ -83,6 +115,7 @@ class JoinedTables(TableObject):
                     j = self.row_map[i]
                     result.append(column[j])
 
+        numpy = get_numpy(False)
         if numeric and numpy is not None:
             result = numpy.array(result, dtype=numpy.float32)
         self.column_cache[(index, numeric)] = result
@@ -392,6 +425,8 @@ class TestJoin(unittest.TestCase):
     def test_join(self):
         """Test joining tables that have column names.
         """
+        import numpy
+
         with intercept_result(JoinTables, 'value') as results:
             self.assertFalse(execute([
                     ('BuildTable', identifier, [
@@ -611,6 +646,8 @@ class TestSelect(unittest.TestCase):
     def test_numeric(self):
         """Selects using the 'less-than' condition.
         """
+        import numpy
+
         self.do_select([
                 ('float_expr', [('String', '6'),
                                 ('String', '<='),
diff --git a/vistrails/packages/tabledata/read/__init__.py b/vistrails/packages/tabledata/read/__init__.py
index d35a48e..69c6b73 100644
--- a/vistrails/packages/tabledata/read/__init__.py
+++ b/vistrails/packages/tabledata/read/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -37,23 +37,13 @@ from __future__ import division
 
 from vistrails.core.modules.utils import make_modules_dict
 
-try:
-    # read_numpy requires numpy
-    import numpy
-except ImportError: # pragma: no cover
-    numpy_modules = []
-else:
-    from .read_numpy import _modules as numpy_modules
-
-from .read_excel import get_xlrd
-if get_xlrd():
-    from .read_excel import _modules as excel_modules
-else: # pragma: no cover
-    excel_modules = []
+from .convert import _modules as convert_modules
+from .read_excel import _modules as excel_modules
+from .read_numpy import _modules as numpy_modules
 
 from .read_csv import _modules as csv_modules
 from .read_json import _modules as json_modules
 
-_modules = make_modules_dict(numpy_modules, csv_modules, excel_modules,
-                             json_modules,
+_modules = make_modules_dict(convert_modules, numpy_modules, csv_modules,
+                             excel_modules, json_modules,
                              namespace='read')
diff --git a/vistrails/packages/tabledata/read/convert.py b/vistrails/packages/tabledata/read/convert.py
new file mode 100644
index 0000000..33b0898
--- /dev/null
+++ b/vistrails/packages/tabledata/read/convert.py
@@ -0,0 +1,193 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+from __future__ import division
+
+from vistrails.core.modules.basic_modules import ListType
+from vistrails.core.modules.vistrails_module import ModuleError
+
+from ..common import Table, TableObject, InternalModuleError
+
+
+class BaseConverter(Table):
+    _output_ports = [
+            ('column_count', '(org.vistrails.vistrails.basic:Integer)'),
+            ('column_names', '(org.vistrails.vistrails.basic:List)'),
+            ('value', Table)]
+
+    def convert_to_table(self, obj):
+        try:
+            table = self.make_table(obj)
+        except InternalModuleError, e:
+            e.raise_module_error(self)
+        self.set_output('column_count', table.columns)
+        if table.names is not None:
+            self.set_output('column_names', table.names)
+        self.set_output('value', table)
+
+    @staticmethod
+    def add_list(columns, key, value):
+        if not isinstance(value, ListType):
+            raise InternalModuleError("Entry for key %r is not a list" % key)
+        if key is not None:
+            value = [key] + value
+        for i, v in enumerate(value):
+            columns[i].append(v)
+
+    @staticmethod
+    def add_dict(columns, keys, key_set, key, value):
+        if not isinstance(value, dict):
+            raise InternalModuleError(
+                    "Entry for key %r is not an object" % key)
+        value_keys = set(value.keys())
+        m = key_set - value_keys
+        if m:
+            raise InternalModuleError(
+                    "Entry for key %r is missing field %r" % (
+                    key,
+                    next(iter(m))))
+        m = value_keys - key_set
+        if m:
+            raise InternalModuleError(
+                    "Entry for key %r has unexpected field %r" % (
+                    key,
+                    next(iter(m))))
+        if key is None:
+            for i, k in enumerate(keys):
+                columns[i].append(value[k])
+        else:
+            columns[0].append(key)
+            for i, k in enumerate(keys):
+                columns[i + 1].append(value[k])
+
+
+class BaseDictToTable(BaseConverter):
+    _input_ports = [('key_name', '(org.vistrails.vistrails.basic:String)',
+                     {'optional': True, 'defaults': repr(["key"])})]
+
+    def make_table(self, obj):
+        if not isinstance(obj, dict):
+            raise ModuleError(self, "JSON file is not an object")
+        key_name = self.get_input('key_name', True)
+        iterator = obj.iteritems()
+        try:
+            first_key, first_value = next(iterator)
+        except StopIteration:
+            raise ModuleError(self, "No entry in JSON object")
+        count = 1
+        if isinstance(first_value, ListType):
+            keys = None
+            columns = [[] for i in xrange(1 + len(first_value))]
+            self.add_list(columns, first_key, first_value)
+            for key, value in iterator:
+                self.add_list(columns, key, value)
+                count += 1
+        elif isinstance(first_value, dict):
+            keys = first_value.keys()
+            key_set = set(keys)
+            columns = [[] for i in xrange(1 + len(keys))]
+            self.add_dict(columns, keys, key_set, first_key, first_value)
+            for key, value in iterator:
+                self.add_dict(columns, keys, key_set, key, value)
+                count += 1
+        else:
+            raise ModuleError(self, "Values should be lists or objects")
+
+        if keys is not None:
+            names = [key_name] + keys
+        else:
+            names = None
+        return TableObject(columns, count, names)
+
+
+class BaseListToTable(BaseConverter):
+    def make_table(self, obj):
+        if not isinstance(obj, ListType):
+            raise ModuleError(self, "JSON file is not a list")
+        iterator = iter(obj)
+        try:
+            first = next(iterator)
+        except StopIteration:
+            raise ModuleError(self, "No element in JSON list")
+        count = 1
+        if isinstance(first, ListType):
+            keys = None
+            columns = [[] for i in xrange(len(first))]
+            self.add_list(columns, None, first)
+            for value in iterator:
+                self.add_list(columns, None, value)
+                count += 1
+        elif isinstance(first, dict):
+            keys = first.keys()
+            key_set = set(keys)
+            columns = [[] for i in xrange(len(keys))]
+            self.add_dict(columns, keys, key_set, None, first)
+            for value in iterator:
+                self.add_dict(columns, keys, key_set, None, value)
+                count += 1
+        else:
+            raise ModuleError(self, "Values should be lists or objects")
+
+        return TableObject(columns, count, keys)
+
+
+class DictToTable(BaseDictToTable):
+    """Converts a Python dictionary into a table.
+
+    This is basically the same as read.JSONObject except that it takes a live
+    Python dictionary instead of a JSON file.
+    """
+    _input_ports = [('dict', '(basic:Dictionary)')]
+
+    def compute(self):
+        self.convert_to_table(self.get_input('dict'))
+
+
+class ListToTable(BaseListToTable):
+    """Converts a Python list into a table.
+
+    This is basically the same as read.JSONList exept that it takes a live
+    Python list instead of a JSON file.
+    """
+    _input_ports = [('list', '(basic:List)')]
+
+    def compute(self):
+        self.convert_to_table(self.get_input('list'))
+
+
+_modules = [(BaseConverter, {'abstract': True}),
+            (BaseDictToTable, {'abstract': True}),
+            (BaseListToTable, {'abstract': True}),
+            DictToTable, ListToTable]
diff --git a/vistrails/packages/tabledata/read/read_csv.py b/vistrails/packages/tabledata/read/read_csv.py
index 7509636..012f9ba 100644
--- a/vistrails/packages/tabledata/read/read_csv.py
+++ b/vistrails/packages/tabledata/read/read_csv.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -37,12 +37,8 @@ from __future__ import division
 
 import csv
 import operator
-try:
-    import numpy
-except ImportError: # pragma: no cover
-    numpy = None
 
-from ..common import TableObject, Table, InternalModuleError
+from ..common import get_numpy, TableObject, Table, InternalModuleError
 
 
 def count_lines(fp):
@@ -129,6 +125,8 @@ class CSVTable(TableObject):
         if (index, numeric) in self.column_cache:
             return self.column_cache[(index, numeric)]
 
+        numpy = get_numpy(False)
+
         if numeric and numpy is not None:
             result = numpy.loadtxt(
                     self.filename,
diff --git a/vistrails/packages/tabledata/read/read_excel.py b/vistrails/packages/tabledata/read/read_excel.py
index 03a3a38..3ac2130 100644
--- a/vistrails/packages/tabledata/read/read_excel.py
+++ b/vistrails/packages/tabledata/read/read_excel.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -35,15 +35,10 @@
 
 from __future__ import division
 
-try:
-    import numpy
-except ImportError: # pragma: no cover
-    numpy = None
-
 from vistrails.core.bundles.pyimport import py_import
 from vistrails.core.modules.vistrails_module import ModuleError
 
-from ..common import TableObject, Table
+from ..common import get_numpy, TableObject, Table
 
 
 def get_xlrd():
@@ -80,6 +75,8 @@ class ExcelTable(TableObject):
         if (index, numeric) in self.column_cache:
             return self.column_cache[(index, numeric)]
 
+        numpy = get_numpy(False)
+
         result = [c.value for c in self.sheet.col(index)]
         if self.header_present:
             result = result[1:]
diff --git a/vistrails/packages/tabledata/read/read_json.py b/vistrails/packages/tabledata/read/read_json.py
index c19e110..adef060 100644
--- a/vistrails/packages/tabledata/read/read_json.py
+++ b/vistrails/packages/tabledata/read/read_json.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -40,68 +40,19 @@ try:
 except ImportError:
     import json
 
-from vistrails.core.modules.vistrails_module import ModuleError
+from .convert import DictToTable, ListToTable
 
-from ..common import TableObject, Table, InternalModuleError
-
-
-class JSONTable(Table):
-    _input_ports = [('file', '(org.vistrails.vistrails.basic:File)')]
-    _output_ports = [
-            ('column_count', '(org.vistrails.vistrails.basic:Integer)'),
-            ('column_names', '(org.vistrails.vistrails.basic:List)'),
-            ('value', Table)]
 
+class JSONTable(object):
     def compute(self):
         json_file = self.get_input('file').name
         with open(json_file, 'rb') as fp:
             obj = json.load(fp)
-        try:
-            table = self.make_table(obj)
-        except InternalModuleError, e:
-            e.raise_module_error(self)
-        self.set_output('column_count', table.columns)
-        if table.names is not None:
-            self.set_output('column_names', table.names)
-        self.set_output('value', table)
 
-    @staticmethod
-    def add_list(columns, key, value):
-        if not isinstance(value, list):
-            raise InternalModuleError("Entry for key %r is not a list" % key)
-        if key is not None:
-            value = [key] + value
-        for i, v in enumerate(value):
-            columns[i].append(v)
+        self.convert_to_table(obj)
 
-    @staticmethod
-    def add_dict(columns, keys, key_set, key, value):
-        if not isinstance(value, dict):
-            raise InternalModuleError(
-                    "Entry for key %r is not an object" % key)
-        value_keys = set(value.keys())
-        m = key_set - value_keys
-        if m:
-            raise InternalModuleError(
-                    "Entry for key %r is missing field %r" % (
-                    key,
-                    next(iter(m))))
-        m = value_keys - key_set
-        if m:
-            raise InternalModuleError(
-                    "Entry for key %r has unexpected field %r" % (
-                    key,
-                    next(iter(m))))
-        if key is None:
-            for i, k in enumerate(keys):
-                columns[i].append(value[k])
-        else:
-            columns[0].append(key)
-            for i, k in enumerate(keys):
-                columns[i + 1].append(value[k])
 
-
-class JSONObject(JSONTable):
+class JSONObject(JSONTable, DictToTable):
     """Loads a JSON file and build a table from an object.
 
     In JSON, an object is written with {}. It is essentially an associative
@@ -125,45 +76,10 @@ class JSONObject(JSONTable):
 
     To read a list of rows, use the JSONList module instead.
     """
-    _input_ports = [('key_name', '(org.vistrails.vistrails.basic:String)',
-                     {'optional': True, 'defaults': repr(["key"])})]
-
-    def make_table(self, obj):
-        if not isinstance(obj, dict):
-            raise ModuleError(self, "JSON file is not an object")
-        key_name = self.get_input('key_name', True)
-        iterator = obj.iteritems()
-        try:
-            first_key, first_value = next(iterator)
-        except StopIteration:
-            raise ModuleError(self, "No entry in JSON object")
-        count = 1
-        if isinstance(first_value, list):
-            keys = None
-            columns = [[] for i in xrange(1 + len(first_value))]
-            self.add_list(columns, first_key, first_value)
-            for key, value in iterator:
-                self.add_list(columns, key, value)
-                count += 1
-        elif isinstance(first_value, dict):
-            keys = first_value.keys()
-            key_set = set(keys)
-            columns = [[] for i in xrange(1 + len(keys))]
-            self.add_dict(columns, keys, key_set, first_key, first_value)
-            for key, value in iterator:
-                self.add_dict(columns, keys, key_set, key, value)
-                count += 1
-        else:
-            raise ModuleError(self, "Values should be lists or objects")
-
-        if keys is not None:
-            names = [key_name] + keys
-        else:
-            names = None
-        return TableObject(columns, count, names)
+    _input_ports = [('file', '(org.vistrails.vistrails.basic:File)')]
 
 
-class JSONList(JSONTable):
+class JSONList(JSONTable, ListToTable):
     """Loads a JSON file and build a table from a list.
 
     In JSON, a list is written with [].
@@ -176,37 +92,10 @@ class JSONList(JSONTable):
 
         gives a 4x4 unnamed table.
     """
-    def make_table(self, obj):
-        if not isinstance(obj, list):
-            raise ModuleError(self, "JSON file is not a list")
-        iterator = iter(obj)
-        try:
-            first = next(iterator)
-        except StopIteration:
-            raise ModuleError(self, "No element in JSON list")
-        count = 1
-        if isinstance(first, list):
-            keys = None
-            columns = [[] for i in xrange(len(first))]
-            self.add_list(columns, None, first)
-            for value in iterator:
-                self.add_list(columns, None, value)
-                count += 1
-        elif isinstance(first, dict):
-            keys = first.keys()
-            key_set = set(keys)
-            columns = [[] for i in xrange(len(keys))]
-            self.add_dict(columns, keys, key_set, None, first)
-            for value in iterator:
-                self.add_dict(columns, keys, key_set, None, value)
-                count += 1
-        else:
-            raise ModuleError(self, "Values should be lists or objects")
-
-        return TableObject(columns, count, keys)
+    _input_ports = [('file', '(org.vistrails.vistrails.basic:File)')]
 
 
-_modules = [(JSONTable, {'abstract': True}), JSONObject, JSONList]
+_modules = [JSONObject, JSONList]
 
 
 ###############################################################################
diff --git a/vistrails/packages/tabledata/read/read_numpy.py b/vistrails/packages/tabledata/read/read_numpy.py
index b60c884..e6d0980 100644
--- a/vistrails/packages/tabledata/read/read_numpy.py
+++ b/vistrails/packages/tabledata/read/read_numpy.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -35,10 +35,10 @@
 
 from __future__ import division
 
-import numpy
-
 from vistrails.core.modules.vistrails_module import Module
 
+from ..common import get_numpy
+
 
 class NumPyArray(Module):
     """Reads a Numpy Array that has been written to a file.
@@ -55,37 +55,61 @@ class NumPyArray(Module):
     """
     NPY_FMT = object()
 
-    FORMAT_MAP = dict(
-               npy = NPY_FMT,
-
-              int8 = numpy.int8,
-             uint8 = numpy.uint8,
-             int16 = numpy.int16,
-            uint16 = numpy.uint16,
-             int32 = numpy.int32,
-            uint32 = numpy.uint32,
-             int64 = numpy.int64,
-            uint64 = numpy.uint64,
+    FORMATS = [
+        'int8',
+        'uint8',
+        'int16',
+        'uint16',
+        'int32',
+        'uint32',
+        'int64',
+        'uint64',
+        'float32',
+        'float64',
+        'complex64',
+        'complex128',
+    ]
+
+    _format_map = None
 
-           float32 = numpy.float32,
-           float64 = numpy.float64,
-
-         complex64 = numpy.complex64,
-        complex128 = numpy.complex128,
-    )
+    @classmethod
+    def get_format(cls, format):
+        if cls._format_map is None:
+            numpy = get_numpy()
+            cls._format_map = dict(
+                       npy = cls.NPY_FMT,
+
+                      int8 = numpy.int8,
+                     uint8 = numpy.uint8,
+                     int16 = numpy.int16,
+                    uint16 = numpy.uint16,
+                     int32 = numpy.int32,
+                    uint32 = numpy.uint32,
+                     int64 = numpy.int64,
+                    uint64 = numpy.uint64,
+
+                   float32 = numpy.float32,
+                   float64 = numpy.float64,
+
+                 complex64 = numpy.complex64,
+                complex128 = numpy.complex128,
+            )
+        return cls._format_map[format]
 
     _input_ports = [
             ('file', '(org.vistrails.vistrails.basic:File)'),
             ('datatype', '(org.vistrails.vistrails.basic:String)',
-             {'entry_types': "['enum']", 'values': "[%r]" % FORMAT_MAP.keys()}),
+             {'entry_types': "['enum']", 'values': "[%r]" % FORMATS}),
             ('shape', '(org.vistrails.vistrails.basic:List)')]
     _output_ports = [
             ('value', '(org.vistrails.vistrails.basic:List)')]
 
     def compute(self):
+        numpy = get_numpy()
+
         filename = self.get_input('file').name
         if self.has_input('datatype'):
-            dtype = NumPyArray.FORMAT_MAP[self.get_input('datatype')]
+            dtype = NumPyArray.get_format(self.get_input('datatype'))
         else:
             if filename[-4:].lower() == '.npy':
                 dtype = self.NPY_FMT
diff --git a/vistrails/packages/tabledata/viewer.py b/vistrails/packages/tabledata/viewer.py
index c7a8508..fc60ec0 100644
--- a/vistrails/packages/tabledata/viewer.py
+++ b/vistrails/packages/tabledata/viewer.py
@@ -1,3 +1,38 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 from __future__ import division
 
 import os
@@ -8,7 +43,7 @@ from vistrails.packages.spreadsheet.basic_widgets import SpreadsheetCell, \
 from vistrails.packages.spreadsheet.spreadsheet_cell import QCellWidget
 
 class TableToSpreadsheetMode(SpreadsheetMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         table = output_module.get_input('value')
         self.display_and_wait(output_module, configuration,
                               TableCellWidget, (table,))
diff --git a/vistrails/packages/tabledata/widgets.py b/vistrails/packages/tabledata/widgets.py
index 2853929..c75df6d 100644
--- a/vistrails/packages/tabledata/widgets.py
+++ b/vistrails/packages/tabledata/widgets.py
@@ -1,8 +1,42 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2013-2014, NYU-Poly.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
 from __future__ import division
 
 from PyQt4 import QtCore, QtGui
 
-from vistrails.core.system import get_vistrails_basic_pkg_id
 from vistrails.gui.modules.module_configure import \
     StandardModuleConfigurationWidget
 
@@ -156,7 +190,7 @@ class BuildTableWidget(StandardModuleConfigurationWidget):
 
         """
         table_sig = '(%s:Table)' % identifier
-        list_sig = '(%s:List)' % get_vistrails_basic_pkg_id()
+        list_sig = '(org.vistrails.vistrails.basic:List)'
         seen_new_ports = set()
         current_ports = dict(self.getCurrentPorts())
         add_ports = []
@@ -170,7 +204,7 @@ class BuildTableWidget(StandardModuleConfigurationWidget):
                 QtGui.QMessageBox.critical(
                         self,
                         "Duplicated port name",
-                        "There is several input ports with name %r" % name)
+                        "There are several input ports with name %r" % name)
                 return
             seen_new_ports.add(name)
 
diff --git a/vistrails/packages/tabledata/write/__init__.py b/vistrails/packages/tabledata/write/__init__.py
index 4fb6cf0..be58246 100644
--- a/vistrails/packages/tabledata/write/__init__.py
+++ b/vistrails/packages/tabledata/write/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
@@ -37,21 +37,9 @@ from __future__ import division
 
 from vistrails.core.modules.utils import make_modules_dict
 
-try:
-    # write_numpy requires numpy
-    import numpy
-except ImportError: # pragma: no cover
-    numpy_modules = []
-else:
-    from .write_numpy import _modules as numpy_modules
-
-from .write_excel import get_xlwt
-if get_xlwt():
-    from .write_excel import _modules as excel_modules
-else: # pragma: no cover
-    excel_modules = []
-
 from .write_csv import _modules as csv_modules
+from .write_excel import _modules as excel_modules
+from .write_numpy import _modules as numpy_modules
 
 
 _modules = make_modules_dict(numpy_modules, csv_modules, excel_modules,
@@ -125,11 +113,17 @@ class BaseWriteTestCase(object):
         self.assertEqual(results[0], ['a', '2', 'c'])
 
 
- at unittest.skipIf(get_xlwt() is None, "xlwt not available")
 class ExcelWriteTestCase(unittest.TestCase, BaseWriteTestCase):
     WRITER_MODULE = 'write|WriteExcelSpreadsheet'
     READER_MODULE = 'read|ExcelSpreadsheet'
 
+    @classmethod
+    def setUpClass(cls):
+        from .write_excel import get_xlwt
+
+        if get_xlwt() is None:
+            raise unittest.SkipTest("xlwt not available")
+
 
 class CSVWriteTestCase(unittest.TestCase, BaseWriteTestCase):
     WRITER_MODULE = 'write|WriteCSV'
diff --git a/vistrails/packages/tabledata/write/write_csv.py b/vistrails/packages/tabledata/write/write_csv.py
index 8ab8cf5..36f0f54 100644
--- a/vistrails/packages/tabledata/write/write_csv.py
+++ b/vistrails/packages/tabledata/write/write_csv.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/tabledata/write/write_excel.py b/vistrails/packages/tabledata/write/write_excel.py
index 52b20f8..ccedf6d 100644
--- a/vistrails/packages/tabledata/write/write_excel.py
+++ b/vistrails/packages/tabledata/write/write_excel.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2013-2014, NYU-Poly.
 ## All rights reserved.
 ## Contact: contact at vistrails.org
diff --git a/vistrails/packages/tabledata/write/write_numpy.py b/vistrails/packages/tabledata/write/write_numpy.py
index 186f7be..87a54bb 100644
--- a/vistrails/packages/tabledata/write/write_numpy.py
+++ b/vistrails/packages/tabledata/write/write_numpy.py
@@ -1,9 +1,8 @@
 from __future__ import division
 
-import numpy
-
 from vistrails.core.modules.vistrails_module import Module
 
+from ..common import get_numpy
 from ..read.read_numpy import NumPyArray
 
 
@@ -19,14 +18,16 @@ class WriteNumPy(Module):
             ('array', '(org.vistrails.vistrails.basic:List)'),
             ('datatype', '(org.vistrails.vistrails.basic:String)',
              {'entry_types': "['enum']",
-              'values': "[%r]" % NumPyArray.FORMAT_MAP.keys()})]
+              'values': "[%r]" % NumPyArray.FORMATS})]
     _output_ports = [('file', '(org.vistrails.vistrails.basic:File)')]
 
     def compute(self):
+        numpy = get_numpy()
+
         array = self.get_input('array')
         if not isinstance(array, numpy.ndarray):
             array = numpy.array(array)
-        dtype = NumPyArray.FORMAT_MAP[self.get_input('datatype')]
+        dtype = NumPyArray.get_format(self.get_input('datatype'))
 
         if dtype is NumPyArray.NPY_FMT:
             fileobj = self.interpreter.filePool.create_file(suffix='.npy')
@@ -78,6 +79,7 @@ class WriteNumpyTestCase(unittest.TestCase):
     def test_npy_numpy(self):
         """Uses WriteNumPy to write an array in .NPY format.
         """
+        import numpy
         from vistrails.tests.utils import execute, intercept_result
         from ..identifiers import identifier
         with intercept_result(WriteNumPy, 'file') as results:
diff --git a/vistrails/packages/tej/__init__.py b/vistrails/packages/tej/__init__.py
index 1039245..51f50c2 100644
--- a/vistrails/packages/tej/__init__.py
+++ b/vistrails/packages/tej/__init__.py
@@ -1,3 +1,5 @@
+from __future__ import division
+
 identifier = 'org.vistrails.extra.tej'
 name = 'tej'
 version = '0.2'
diff --git a/vistrails/packages/tej/init.py b/vistrails/packages/tej/init.py
index 40c535c..86025be 100644
--- a/vistrails/packages/tej/init.py
+++ b/vistrails/packages/tej/init.py
@@ -4,7 +4,9 @@ import contextlib
 import io
 import logging
 import os
+import shutil
 import urllib
+import sys
 
 from vistrails.core import debug
 from vistrails.core.bundles import py_import
@@ -23,6 +25,11 @@ this_pkg = __name__[:-5]
 
 
 class ServerLogger(tej.ServerLogger):
+    """Subclass of tej server logger that can be toggled on and off.
+
+    This is used to hide server messages from the VisTrails console when
+    running tej commands.
+    """
     def __init__(self):
         self.hidden = False
         tej.ServerLogger.__init__(self)
@@ -45,6 +52,8 @@ ServerLogger = ServerLogger()
 
 
 class RemoteQueue(tej.RemoteQueue):
+    """Subclass of tej's RemoteQueue that uses our `ServerLogger`.
+    """
     def server_logger(self):
         return ServerLogger
 
@@ -55,12 +64,17 @@ class QueueCache(object):
     def __init__(self):
         self._cache = {}
 
-    def get(self, destination, queue):
-        key = destination, queue
+    def get(self, destination, queue, setup_runtime, need_runtime):
+        key = (destination,
+               queue,
+               setup_runtime or None,
+               tuple(sorted(need_runtime)) if need_runtime else None)
         if key in self._cache:
             return self._cache[key]
         else:
-            queue = RemoteQueue(destination, queue)
+            queue = RemoteQueue(destination, queue,
+                                setup_runtime=setup_runtime,
+                                need_runtime=need_runtime)
             self._cache[key] = queue
             return queue
 
@@ -72,6 +86,16 @@ class Queue(Module):
 
     `hostname` can be a hostname or a full destination in the format:
     ``[ssh://][user@]server[:port]``, e.g. ``vistrails at nyu.edu``.
+
+    If `setup_runtime` is set, it should be the name of the runtime to deploy
+    on the server if the queue doesn't already exist. If None (the default),
+    tej will select what is appropriate automatically. If `need_runtime` is
+    set, this should be one of the accepted values.
+
+    If `need_runtime` is set, it is a comma-separated list of runtime names
+    that are acceptable. If the queue already exists on the server and this
+    argument is not None, the installed runtime will be matched against it, and
+    execution will fail if it is not one of the provided values.
     """
     _input_ports = [('hostname', '(basic:String)'),
                     ('username', '(basic:String)',
@@ -79,7 +103,11 @@ class Queue(Module):
                     ('port', '(basic:Integer)',
                      {'optional': True, 'defaults': "['22']"}),
                     ('queue', '(basic:String)',
-                     {'optional': True, 'defaults': "['~/.tej']"})]
+                     {'optional': True, 'defaults': "['~/.tej']"}),
+                    ('setup_runtime', '(basic:String)',
+                     {'optional': True}),
+                    ('need_runtime', '(basic:String)',
+                     {'optional': True})]
     _output_ports = [('queue', '(org.vistrails.extra.tej:Queue)')]
 
     def compute(self):
@@ -90,11 +118,97 @@ class Queue(Module):
                            'port': self.get_input('port')}
             destination_str = tej.destination_as_string(destination)
 
+        if self.has_input('setup_runtime'):
+            setup_runtime = self.get_input('setup_runtime')
+        else:
+            setup_runtime = None
+
+        if self.has_input('need_runtime'):
+            need_runtime = set(
+                e.strip()
+                for e in self.get_input('need_runtime').split(','))
+        else:
+            need_runtime = None
+
         queue = self.get_input('queue')
-        self.set_output('queue', QueueCache.get(destination_str, queue))
+        self.set_output('queue', QueueCache.get(destination_str, queue,
+                                                setup_runtime, need_runtime))
+
+
+class AssembleDirectoryMixin(object):
+    """A mixin for assembling a directory from paths passed on port specs.
+
+    Modules using this mixin should use the DirectoryConfigurationWidget
+    configuration widget to setup the input port specs.
+    :meth:`assemble_directory` returns a PathObject for the temporary directory
+    with the paths copied into it.
+    """
+    def __init__(self):
+        self.input_ports_order = []
+
+    def transfer_attrs(self, module):
+        super(AssembleDirectoryMixin, self).transfer_attrs(module)
+        self.input_ports_order = [p.name for p in module.input_port_specs]
+
+    def assemble_directory(self, base=None, do_copy=False):
+        """Create the directory using the optional `base` and the port specs.
+
+        :type base: PathObject
+
+        This creates a directory that contains all the contents of `base` (if
+        provided, else start empty), and all the additional files and
+        directories provided as input port specs (configured using the
+        `DirectoryConfigurationWidget`).
+
+        If there are no input port specs and `do_copy` is False, this method
+        will just return the currect location of `base` without copying it to a
+        temporary directory.
+        """
+        if self.input_ports_order or do_copy:
+            directory = self.interpreter.filePool.create_directory(
+                    prefix='vt_tmp_makedirectory_')
+
+            # Copy everything in base
+            if base is not None:
+                for name in os.listdir(base.name):
+                    src = os.path.join(base.name, name)
+                    dst = os.path.join(directory.name, name)
+                    if os.path.isdir(src):
+                        shutil.copytree(src, dst)
+                    else:
+                        shutil.copy2(src, dst)
+            # Copy from port specs
+            for name in self.input_ports_order:
+                shutil.copy(self.get_input(name).name,
+                            os.path.join(directory.name, name))
+            return directory
+        else:
+            return base
+
+
+class MakeDirectory(AssembleDirectoryMixin, Module):
+    """Creates a temporary directory and puts the given files in it.
+    """
+    _settings = ModuleSettings(configure_widget=(
+            '%s.widgets' % this_pkg, 'DirectoryConfigurationWidget'))
+    _output_ports = [('directory', '(basic:Directory)')]
+
+    def __init__(self):
+        AssembleDirectoryMixin.__init__(self)
+        Module.__init__(self)
+
+    def compute(self):
+        directory = self.assemble_directory()
+        self.set_output('directory', directory)
 
 
 class RemoteJob(object):
+    """This implements the JobMonitor's JobHandle interface.
+
+    These objects are returned to the JobMonitor via the ModuleSuspended
+    exceptions; they are used by the JobMonitor to figure out the status of the
+    submitted job.
+    """
     def __init__(self, queue, job_id):
         self.queue = queue
         self.job_id = job_id
@@ -117,7 +231,8 @@ class Job(Module):
     the creating module would have failed/suspended.
 
     You probably won't use this module directly since it references a
-    pre-existing job by name.
+    pre-existing job by name; just use one of the SubmitJob modules that
+    compute the upstream's signature.
     """
     _input_ports = [('id', '(basic:String)'),
                     ('queue', Queue)]
@@ -156,7 +271,9 @@ class BaseSubmitJob(JobMixin, Module):
     is finished, you can obtain files from it.
     """
     _settings = ModuleSettings(abstract=True)
-    _input_ports = [('queue', Queue)]
+    _input_ports = [('queue', Queue),
+                    ('print_error', '(basic:Boolean)',
+                     {'optional': True, 'defaults': "['False']"})]
     _output_ports = [('job', '(org.vistrails.extra.tej:Job)'),
                      ('exitcode', '(basic:Integer)')]
 
@@ -173,8 +290,12 @@ class BaseSubmitJob(JobMixin, Module):
     def job_read_inputs(self):
         """Reads the input ports.
         """
-        return {'destination': self.get_input('queue').destination_string,
-                'queue': str(self.get_input('queue').queue),
+        queue = self.get_input('queue')
+        return {'destination': queue.destination_string,
+                'queue': str(queue.queue),
+                'setup_runtime': queue.setup_runtime or '',
+                'need_runtime': (','.join(queue.need_runtime)
+                                 if queue.need_runtime is not None else ''),
                 'job_id': self.make_id()}
 
     def job_start(self, params):
@@ -187,7 +308,9 @@ class BaseSubmitJob(JobMixin, Module):
     def job_get_handle(self, params):
         """Gets a RemoteJob object to monitor a runnning job.
         """
-        queue = QueueCache.get(params['destination'], params['queue'])
+        queue = QueueCache.get(params['destination'], params['queue'],
+                               params.get('setup_runtime') or None,
+                               params.get('need_runtime') or None)
         return RemoteJob(queue, params['job_id'])
 
     def job_finish(self, params):
@@ -195,8 +318,11 @@ class BaseSubmitJob(JobMixin, Module):
 
         Gets the exit code from the server.
         """
-        queue = QueueCache.get(params['destination'], params['queue'])
-        status, target, arg = queue.status(params['job_id'])
+        queue = QueueCache.get(params['destination'], params['queue'],
+                               params.get('setup_runtime') or None,
+                               params.get('need_runtime') or None)
+        with ServerLogger.hide_output():
+            status, target, arg = queue.status(params['job_id'])
         assert status == tej.RemoteQueue.JOB_DONE
         params['exitcode'] = int(arg)
         return params
@@ -204,22 +330,53 @@ class BaseSubmitJob(JobMixin, Module):
     def job_set_results(self, params):
         """Sets the output ports once the job is finished.
         """
-        queue = QueueCache.get(params['destination'], params['queue'])
+        queue = QueueCache.get(params['destination'], params['queue'],
+                               params.get('setup_runtime') or None,
+                               params.get('need_runtime') or None)
         self.set_output('exitcode', params['exitcode'])
         self.set_output('job', RemoteJob(queue, params['job_id']))
 
+        if self.get_input('print_error') and params['exitcode'] != 0:
+            # If it failed and 'print_error' is set, download and print stderr
+            # then fail
+            destination = self.interpreter.filePool.create_file(
+                    prefix='vt_tmp_job_err_').name
+            with ServerLogger.hide_output():
+                queue.download(params['job_id'],
+                               '_stderr',
+                               destination=destination,
+                               recursive=False)
+            with open(destination, 'r') as fin:
+                chunk = fin.read(4096)
+                sys.stderr.write(chunk)
+                while len(chunk) == 4096:
+                    chunk = fin.read(4096)
+                    if chunk:
+                        sys.stderr.write(chunk)
+            raise ModuleError(self,
+                              "Job failed with status %d" % params['exitcode'])
 
-class SubmitJob(BaseSubmitJob):
+
+class SubmitJob(AssembleDirectoryMixin, BaseSubmitJob):
     """Submits a generic job (a directory).
     """
-    _input_ports = [('job', '(basic:Directory)'),
+    _settings = ModuleSettings(configure_widget=(
+            '%s.widgets' % this_pkg, 'DirectoryConfigurationWidget'))
+    _input_ports = [('job', '(basic:Directory)',
+                     {'optional': True}),
                     ('script', '(basic:String)',
                      {'optional': True, 'defaults': "['start.sh']"})]
 
+    def __init__(self):
+        AssembleDirectoryMixin.__init__(self)
+        Module.__init__(self)
+
     def job_start(self, params):
         """Sends the directory and submits the job.
         """
-        queue = QueueCache.get(params['destination'], params['queue'])
+        queue = QueueCache.get(params['destination'], params['queue'],
+                               params.get('setup_runtime') or None,
+                               params.get('need_runtime') or None)
 
         # First, check if job already exists
         try:
@@ -230,10 +387,25 @@ class SubmitJob(BaseSubmitJob):
         else:
             return params
 
+        if self.has_input('job'):
+            job_dir = self.get_input('job')
+            if not os.path.exists(job_dir.name):
+                raise ModuleError(self, "Directory doesn't exist")
+        else:
+            job_dir = None
+
+        # Use AssembleDirectoryMixin to get additional files from port specs
+        job_dir = self.assemble_directory(job_dir, False)
+
+        # Check that the script exists
+        script = self.get_input('script')
+        if not os.path.exists(os.path.join(job_dir.name, script)):
+            raise ModuleError(self, "Script does not exist")
+
         # Alright, submit a new job
         queue.submit(params['job_id'],
-                     self.get_input('job').name,
-                     self.get_input('script'))
+                     job_dir.name,
+                     script)
         return params
 
 
@@ -246,12 +418,12 @@ class SubmitShellJob(BaseSubmitJob):
     _output_ports = [('stderr', '(basic:File)'),
                      ('stdout', '(basic:File)')]
 
-    _job_interpreter = '/bin/sh'
-
     def job_start(self, params):
         """Creates a temporary job with the given source, upload and submit it.
         """
-        queue = QueueCache.get(params['destination'], params['queue'])
+        queue = QueueCache.get(params['destination'], params['queue'],
+                               params.get('setup_runtime') or None,
+                               params.get('need_runtime') or None)
 
         # First, check if job already exists
         try:
@@ -272,15 +444,9 @@ class SubmitShellJob(BaseSubmitJob):
             kwargs = {'mode': 'wb'}
         else:
             kwargs = {'mode': 'w', 'newline': '\n'}
-        with io.open(os.path.join(directory, 'vistrails_source.sh'),
+        with io.open(os.path.join(directory, 'start.sh'),
                      **kwargs) as fp:
             fp.write(source)
-        with io.open(os.path.join(directory, 'start.sh'), 'w',
-                     newline='\n') as fp:
-            fp.write(u'%s '
-                     u'vistrails_source.sh '
-                     u'>_stdout.txt '
-                     u'2>_stderr.txt\n' % self._job_interpreter)
 
         queue.submit(params['job_id'], directory)
 
@@ -293,13 +459,15 @@ class SubmitShellJob(BaseSubmitJob):
 
         temp_dir = self.interpreter.filePool.create_directory(
                 prefix='vt_tmp_shelljobout_').name
-        queue = QueueCache.get(params['destination'], params['queue'])
-        queue.download(params['job_id'], ['_stderr.txt', '_stdout.txt'],
+        queue = QueueCache.get(params['destination'], params['queue'],
+                               params.get('setup_runtime') or None,
+                               params.get('need_runtime') or None)
+        queue.download(params['job_id'], ['_stderr', '_stdout'],
                        directory=temp_dir)
         self.set_output('stderr',
-                        PathObject(os.path.join(temp_dir, '_stderr.txt')))
+                        PathObject(os.path.join(temp_dir, '_stderr')))
         self.set_output('stdout',
-                        PathObject(os.path.join(temp_dir, '_stdout.txt')))
+                        PathObject(os.path.join(temp_dir, '_stdout')))
 
 
 class DownloadFile(Module):
@@ -315,10 +483,11 @@ class DownloadFile(Module):
 
         destination = self.interpreter.filePool.create_file(
                 prefix='vt_tmp_shelljobout_')
-        job.queue.download(job.job_id,
-                           self.get_input('filename'),
-                           destination=destination.name,
-                           recursive=False)
+        with ServerLogger.hide_output():
+            job.queue.download(job.job_id,
+                               self.get_input('filename'),
+                               destination=destination.name,
+                               recursive=False)
 
         self.set_output('file', destination)
 
@@ -337,10 +506,11 @@ class DownloadDirectory(Module):
         destination = self.interpreter.filePool.create_directory(
                 prefix='vt_tmp_shelljobout_').name
         target = os.path.join(destination, 'dir')
-        job.queue.download(job.job_id,
-                           self.get_input('pathname'),
-                           destination=target,
-                           recursive=True)
+        with ServerLogger.hide_output():
+            job.queue.download(job.job_id,
+                               self.get_input('pathname'),
+                               destination=target,
+                               recursive=True)
 
         self.set_output('directory', PathObject(target))
 
@@ -349,6 +519,8 @@ _tej_log_handler = None
 
 
 class _VisTrailsTejLogHandler(logging.Handler):
+    """Custom handler for the 'tej' logger that re-logs to VisTrails.
+    """
     def emit(self, record):
         msg = "tej: %s" % self.format(record)
         if record.levelno >= logging.CRITICAL:
@@ -383,4 +555,5 @@ def finalize():
 
 _modules = [Queue,
             Job, BaseSubmitJob, SubmitJob, SubmitShellJob,
-            DownloadFile, DownloadDirectory]
+            DownloadFile, DownloadDirectory,
+            MakeDirectory]
diff --git a/vistrails/packages/tej/widgets.py b/vistrails/packages/tej/widgets.py
index 3eaa289..292a9b8 100644
--- a/vistrails/packages/tej/widgets.py
+++ b/vistrails/packages/tej/widgets.py
@@ -1,6 +1,11 @@
-from PyQt4 import QtGui
+from __future__ import division
 
+from PyQt4 import QtCore, QtGui
+
+from vistrails.gui.modules.module_configure import \
+    StandardModuleConfigurationWidget
 from vistrails.gui.modules.source_configure import SourceConfigurationWidget
+from vistrails.gui.modules.string_configure import TextEditor
 
 
 class ShellSourceConfigurationWidget(SourceConfigurationWidget):
@@ -10,6 +15,146 @@ class ShellSourceConfigurationWidget(SourceConfigurationWidget):
     """
     def __init__(self, module, controller, parent=None):
         SourceConfigurationWidget.__init__(self, module, controller,
-                                           QtGui.QTextEdit,
+                                           TextEditor,
                                            has_inputs=False, has_outputs=False,
                                            parent=parent)
+
+
+class DirectoryConfigurationWidget(StandardModuleConfigurationWidget):
+    """Configuration widget for MakeDirectory.
+
+    Allows to edit a list of filenames.
+    """
+    def __init__(self, module, controller, parent=None):
+        StandardModuleConfigurationWidget.__init__(self, module,
+                                                   controller, parent)
+
+        # Window title
+        self.setWindowTitle("Directory configuration")
+
+        central_layout = QtGui.QVBoxLayout()
+        central_layout.setMargin(0)
+        central_layout.setSpacing(0)
+        self.setLayout(central_layout)
+
+        self._list = QtGui.QListWidget()
+        self._list.setSortingEnabled(True)
+        self.connect(self._list,
+                     QtCore.SIGNAL('itemChanged(QListWidgetItem*)'),
+                     lambda i: self.updateState())
+        central_layout.addWidget(self._list)
+
+        add_button = QtGui.QPushButton("Add a file")
+        self.connect(add_button, QtCore.SIGNAL('clicked()'),
+                     self.add_file)
+        central_layout.addWidget(add_button)
+
+        self.createButtons()
+
+        self.createEntries()
+
+    def add_file(self):
+        item = QtGui.QListWidgetItem("file")
+        item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable |
+                      QtCore.Qt.ItemIsEnabled)
+        self._list.addItem(item)
+
+    def createButtons(self):
+        """ createButtons() -> None
+        Create and connect signals to Ok & Cancel button
+
+        """
+        buttonLayout = QtGui.QHBoxLayout()
+        buttonLayout.setMargin(5)
+        self.saveButton = QtGui.QPushButton("&Save", self)
+        self.saveButton.setFixedWidth(100)
+        self.saveButton.setEnabled(False)
+        buttonLayout.addWidget(self.saveButton)
+        self.resetButton = QtGui.QPushButton("&Reset", self)
+        self.resetButton.setFixedWidth(100)
+        self.resetButton.setEnabled(False)
+        buttonLayout.addWidget(self.resetButton)
+        self.layout().addLayout(buttonLayout)
+        self.connect(self.saveButton, QtCore.SIGNAL('clicked(bool)'),
+                     self.saveTriggered)
+        self.connect(self.resetButton, QtCore.SIGNAL('clicked(bool)'),
+                     self.resetTriggered)
+
+    def saveTriggered(self, checked = False):
+        """ saveTriggered(checked: bool) -> None
+        Update vistrail controller and module when the user click Ok
+
+        """
+        if self.updateVistrail():
+            self.saveButton.setEnabled(False)
+            self.resetButton.setEnabled(False)
+            self.state_changed = False
+            self.emit(QtCore.SIGNAL('stateChanged'))
+            self.emit(QtCore.SIGNAL('doneConfigure'), self.module.id)
+
+    def closeEvent(self, event):
+        self.askToSaveChanges()
+        event.accept()
+
+    def getCurrentPorts(self):
+        return (port_spec.name for port_spec in self.module.input_port_specs)
+
+    def updateVistrail(self):
+        """ updateVistrail() -> None
+        Update Vistrail to contain changes in the port table
+
+        """
+        file_sig = '(org.vistrails.vistrails.basic:File)'
+        seen_new_ports = set()
+        current_ports = set(self.getCurrentPorts())
+        add_ports = []
+        delete_ports = []
+        for i in xrange(self._list.count()):
+            name = str(self._list.item(i).text())
+
+            if name in seen_new_ports:
+                QtGui.QMessageBox.critical(
+                        self,
+                        "Duplicated port name",
+                        "There are several input ports with name %r" % name)
+                return
+            seen_new_ports.add(name)
+
+            if name in current_ports:
+                current_ports.discard(name)
+                continue
+
+            add_ports.append(('input', name,
+                              file_sig, -1))
+
+        delete_ports.extend(('input', unseen_port)
+                            for unseen_port in current_ports)
+
+        self.controller.update_ports(self.module.id, delete_ports, add_ports)
+
+        return True
+
+    def createEntries(self):
+        for name in self.getCurrentPorts():
+            item = QtGui.QListWidgetItem(name)
+            item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable |
+                          QtCore.Qt.ItemIsEnabled)
+            self._list.addItem(item)
+
+    def resetTriggered(self, checked = False):
+        for i in xrange(self._list_layout.count()):
+            self._list_layout.itemAt(i).widget().deleteLater()
+
+        self.createEntries()
+
+        self.saveButton.setEnabled(False)
+        self.resetButton.setEnabled(False)
+        self.state_changed = False
+        self.emit(QtCore.SIGNAL('stateChanged'))
+
+    def updateState(self):
+        self.saveButton.setEnabled(True)
+        self.resetButton.setEnabled(True)
+        if not self.state_changed:
+            self.state_changed = True
+            self.emit(QtCore.SIGNAL('stateChanged'))
diff --git a/vistrails/packages/persistent_archive/__init__.py b/vistrails/packages/tensorflow/__init__.py
similarity index 87%
copy from vistrails/packages/persistent_archive/__init__.py
copy to vistrails/packages/tensorflow/__init__.py
index 54f46f8..2b8917c 100644
--- a/vistrails/packages/persistent_archive/__init__.py
+++ b/vistrails/packages/tensorflow/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -33,18 +33,16 @@
 ## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 ##
 ###############################################################################
+"""
+TensorFlow package for VisTrails.
+"""
 
 from __future__ import division
 
-from vistrails.core.configuration import ConfigurationObject
-
-from .identifiers import *
-
-
-configuration = ConfigurationObject(file_store=(None, str))
-
+identifier = 'org.vistrails.vistrails.tensorflow'
+name = 'TensorFlow'
+version = '0.1.0'
 
 def package_requirements():
     from vistrails.core.requirements import require_python_module
-    require_python_module('file_archive', {
-            'pip': 'file_archive'})
+    require_python_module('tensorflow')
diff --git a/vistrails/packages/tensorflow/base.py b/vistrails/packages/tensorflow/base.py
new file mode 100644
index 0000000..5d403e2
--- /dev/null
+++ b/vistrails/packages/tensorflow/base.py
@@ -0,0 +1,268 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+from __future__ import division
+
+import itertools
+import tensorflow
+
+from vistrails.core.modules.config import ModuleSettings
+from vistrails.core.modules.vistrails_module import Module, ModuleError
+
+
+class Op(object):
+    def __init__(self, op, args):
+        """Constructor from a function and its arguments.
+
+        This is the type actually passed on TFOperation ports. It represents a
+        future TensorFlow operation; the actual operation is only created from
+        the Run module, allowing multiple graphs to be used (and the same
+        VisTrails-defined graph to be used from multiple Run modules).
+
+        :type args: dict | collections.Iterable
+        """
+        self.op = op
+        self.args = args
+
+    def build(self, operation_map):
+        """Builds the graph, by instanciating the operations recursively.
+        """
+        if self in operation_map:
+            return operation_map[self]
+        else:
+            def build(op):
+                if isinstance(op, list):
+                    return [build(e) for e in op]
+                else:
+                    return op.build(operation_map)
+            if isinstance(self.args, dict):
+                kwargs = dict((k, build(v))
+                            for k, v in self.args.iteritems())
+                obj = self.op(**kwargs)
+            else:
+                args = [build(a) for a in self.args]
+                obj = self.op(*args)
+            operation_map[self] = obj
+            return obj
+
+
+class TFOperation(Module):
+    """A TensorFlow operation that will be run by Run as part of the graph.
+    """
+    _settings = ModuleSettings(abstract=True)
+    _output_ports = [
+        ('output', '(org.vistrails.vistrails.tensorflow:TFOperation)')]
+
+    def compute(self):
+        raise NotImplementedError
+
+
+class constant(TFOperation):
+    """A TensorFlow operation that simply output a constant into the graph.
+
+    Note that it is only constant from TensorFlow's point of view; it can be
+    the output of another VisTrails module.
+    """
+    _input_ports = [('value', '(basic:Variant)')]
+
+    def compute(self):
+        value = self.get_input('value')
+        self.set_output('output', Op(lambda: tensorflow.constant(value), []))
+
+
+class cast(TFOperation):
+    """Casts tensors to the specific scalar type.
+    """
+    _input_ports = [('value', TFOperation),
+                    ('type', '(basic:String)')]
+
+    def compute(self):
+        value = self.get_input('value')
+        type_ = self.get_input('type')
+        self.set_output('output',
+                        Op(lambda x: tensorflow.cast(x, type_), [value]))
+
+
+class Variable(TFOperation):
+    """A variable, that update its state between TensorFlow iterations.
+    """
+    _input_ports = [('initial_value', TFOperation)]
+    _output_ports = [
+        ('output', '(org.vistrails.vistrails.tensorflow:Variable)')]
+
+    def compute(self):
+        initial_value = self.get_input('initial_value')
+        self.set_output('output', Op(tensorflow.Variable, [initial_value]))
+
+
+class Optimizer(Module):
+    _settings = ModuleSettings(abstract=True,
+                               namespace='train|optimizer')
+
+
+class minimize(TFOperation):
+    __doc__ = tensorflow.train.Optimizer.__doc__
+
+    _settings = ModuleSettings(namespace='train|optimizer')
+    _input_ports = [('optimizer', Optimizer),
+                    ('loss', TFOperation),
+                    ('global_step', Variable, {'optional': True}),
+                    ('var_list', Variable, {'depth': 1, 'optional': True}),
+                    ('gate_gradients', '(basic:String)',
+                     {'optional': True, 'entry_types': '["enum"]',
+                      'values': '[["GATE_NONE", "GATE_OP", "GATE_GRAPH"]]'}),
+                    ('name', '(basic:String)', {'optional': True})]
+
+    _GATE_GRADIENTS = {'GATE_NONE': tensorflow.train.Optimizer.GATE_NONE,
+                       'GATE_OP': tensorflow.train.Optimizer.GATE_OP,
+                       'GATE_GRAPH': tensorflow.train.Optimizer.GATE_GRAPH}
+
+    def compute(self):
+        if self.has_input('gate_gradients'):
+            gate_gradients = self._GATE_GRADIENTS[
+                self.get_input('gate_gradients')]
+        else:
+            gate_gradients = None
+        name = self.force_get_input('name')
+
+        def output(optimizer, loss, **kwargs):
+            kw = {'loss': loss, 'name': name}
+            if gate_gradients is not None:
+                kw['gate_gradients'] = gate_gradients
+            kw.update(kwargs)
+            ret = optimizer.minimize(**kw)
+            return ret
+
+        kwargs = {'optimizer': self.get_input('optimizer'),
+                  'loss': self.get_input('loss')}
+        if self.has_input('global_step'):
+            kwargs['global_step'] = self.get_input('global_step')
+        if self.has_input('var_list'):
+            kwargs['var_list'] = self.get_input('var_list')
+        self.set_output('output', Op(output, kwargs))
+
+
+class RunResult(object):
+    def __init__(self, graph, session, operation_map, fetch_map):
+        self.graph = graph
+        self.session = session
+        self.operation_map = operation_map
+        self.fetch_map = fetch_map
+
+
+class FeedGenerator(Module):
+    _settings = ModuleSettings(abstract=True)
+
+
+class run(Module):
+    """Instanciate and run a TensorFlow graph to make the results available.
+    """
+    _input_ports = [('output', TFOperation, {'depth': 1}),
+                    ('iterations', '(basic:Integer)',
+                     {'optional': True, 'defaults': '["1"]'}),
+                    ('after', '(org.vistrails.vistrails.tensorflow:run)'),
+                    ('feed_generator', FeedGenerator)]
+    _output_ports = [('result', '(org.vistrails.vistrails.tensorflow:run)')]
+
+    def compute(self):
+        outputs = self.get_input('output')
+        iterations = self.get_input('iterations')
+        if self.has_input('feed_generator'):
+            feeds = self.get_input('feed_generator')()
+        else:
+            feeds = None
+
+        if self.has_input('after'):
+            after = self.get_input('after')
+            graph = after.graph
+            session = after.session
+            operation_map = after.operation_map
+        else:
+            graph = tensorflow.Graph()
+            session = tensorflow.Session(graph=graph)
+            operation_map = {}
+
+        fetches = []
+        with graph.as_default():
+            for op in outputs:
+                fetches.append(op.build(operation_map))
+
+            if not self.has_input('after'):
+                session.run(tensorflow.initialize_all_variables())
+
+        for i in xrange(iterations):
+            feed_dict = None
+            if feeds is not None:
+                try:
+                    feed_dict = next(feeds)
+                except StopIteration:
+                    feeds = None
+                else:
+                    feed_dict = dict((operation_map[op], value)
+                                     for op, value in feed_dict.iteritems())
+            out = session.run(fetches, feed_dict=feed_dict)
+
+        fetch_map = dict(itertools.izip(outputs, out))
+
+        self.set_output('result', RunResult(graph, session, operation_map,
+                                            fetch_map))
+
+
+class fetch(Module):
+    """Fetch the output of a TensorFlow operation after the graph has been run.
+    """
+    _input_ports = [('result', run),
+                    ('op', TFOperation)]
+    _output_ports = [('value', '(basic:List)')]
+
+    def compute(self):
+        result = self.get_input('result')
+        op = self.get_input('op')
+
+        try:
+            value = result.fetch_map[op]
+        except KeyError:
+            raise ModuleError(self, "Requested operation was not passed in "
+                                    "the list of outputs of the run module")
+
+        self.set_output('value', value)
+
+
+_modules = [TFOperation, constant, cast, Variable,
+            Optimizer, minimize,
+            FeedGenerator, run, fetch]
+
+wrapped = set(['constant', 'cast', 'Variable'])
diff --git a/vistrails/packages/tensorflow/init.py b/vistrails/packages/tensorflow/init.py
new file mode 100644
index 0000000..6438ec7
--- /dev/null
+++ b/vistrails/packages/tensorflow/init.py
@@ -0,0 +1,293 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+from __future__ import division
+
+import functools
+import re
+import tensorflow
+import types
+
+from vistrails.core import debug
+from vistrails.core.modules.config import ModuleSettings
+from vistrails.core.modules.module_registry import get_module_registry
+
+from .base import Op, TFOperation, Variable, Optimizer, \
+    _modules as base_modules, wrapped
+
+
+def apply_kw(f, kw1):
+    @functools.wraps(f)
+    def wrapped(**kw2):
+        kwargs = dict(kw1)
+        kwargs.update(kw2)
+        return f(**kwargs)
+    return wrapped
+
+
+def get_indent(s):
+    indent = 0
+    for c in s:
+        if c == ' ':
+            indent += 1
+        elif c == '\t':
+            debug.warning("Found a tab in Google docstring!")
+            indent += 4
+        else:
+            break
+    return indent
+
+
+def read_args(docstring):
+    lines = iter(docstring.splitlines(False))
+    rec_line = ''
+    try:
+        # Find the "Args:" line
+        line = next(lines)
+        while line.strip() != 'Args:':
+            line = next(lines)
+        indent_header = get_indent(line)
+        indent_item = None
+
+        # Loop on rest of lines, adding indented lines to the previous one
+        line = next(lines)
+        while line.strip():
+            indent = get_indent(line)
+            line = line.strip()
+            if indent_item is None:
+                indent_item = indent
+                if indent_item <= indent_header:
+                    break
+                rec_line = line
+            elif indent > indent_item:
+                rec_line += ' ' + line
+            elif indent < indent_item:
+                break
+            elif rec_line:
+                yield rec_line
+                rec_line = line
+
+            line = next(lines)
+    except StopIteration:
+        pass
+    if rec_line:
+        yield rec_line
+
+
+_re_arg_bool = re.compile(r'^(?:A(?:n optional)? `bool`)|'
+                          r'(?:If `?(?:true|false)`?)|'
+                          r'Boolean', re.IGNORECASE)
+_re_arg_int = re.compile(r'^(?:An integer)|(?:A Python integer)|'
+                         r'(?:integer)', re.IGNORECASE)
+
+
+def guess_args(obj, doc, op_name=None):
+    args = []
+    for line in read_args(doc):
+        if not ':' in line:
+            debug.log("Malformated argument in doc: %r" % obj)
+            continue
+        arg, descr = line.split(':', 1)
+        descr = descr.strip()
+
+        if arg == 'shape':
+            type_ = '(basic:List)'
+        elif (op_name is not None and
+                (op_name == 'assign' or op_name.startswith('assign_')) and
+                arg == 'ref'):
+            type_ = Variable
+        elif (_re_arg_bool.search(descr) is not None):
+            type_ = '(basic:Boolean)'
+        elif (_re_arg_int.search(descr) is not None):
+            type_ = '(basic:Integer)'
+        elif descr.lower().startswith("A list "):
+            type_ = '(basic:List)'
+        elif arg == 'dtype' or arg == 'name':
+            type_ = '(basic:String)'
+        else:
+            type_ = TFOperation
+        args.append((arg, descr, type_))
+    if not args:
+        debug.log("Didn't find 'Args:' in doc; skipping: %r" %
+                  obj)
+    return args
+
+
+class AutoOperation(TFOperation):
+    _settings = ModuleSettings(abstract=True)
+
+    def compute(self):
+        immediate = {}
+        stored = {}
+        for name, descr, type_ in self.args:
+            if self.has_input(name):
+                value = self.get_input(name)
+                if type_ is TFOperation or type_ is Variable:
+                    stored[name] = value
+                else:
+                    immediate[name] = value
+
+        f = apply_kw(self.op[0], immediate)
+        self.set_output('output', Op(f, stored))
+
+
+def register_operations(reg, pkg, namespace, exclude=set()):
+    modules = set()
+
+    for name in dir(pkg):
+        if name in exclude:
+            continue
+
+        op = getattr(pkg, name)
+        if isinstance(op, types.ModuleType) or name.startswith('_'):
+            continue
+        if not callable(op):
+            continue
+        if op.__doc__ is None:
+            debug.log("Object has no __doc__: %r" % op)
+            continue
+
+        args = guess_args(op, op.__doc__, op_name=name)
+
+        input_ports = [(arg, type_)
+                       for arg, descr, type_ in args]
+        reg.add_module(type(name, (AutoOperation,),
+                            {'args': args, 'op': (op,),
+                             '_input_ports': input_ports,
+                             '__doc__': op.__doc__}),
+                       namespace=namespace)
+        modules.add(name)
+
+    return modules
+
+
+class AutoOptimizer(Optimizer):
+    _settings = ModuleSettings(abstract=True)
+    _output_ports = [('optimizer', Optimizer)]
+
+    def compute(self):
+        immediate = {}
+        stored = {}
+        for name, descr, type_ in self.args:
+            if self.has_input(name):
+                value = self.get_input(name)
+                if type_ is TFOperation or type_ is Variable:
+                    stored[name] = value
+                else:
+                    immediate[name] = value
+
+        f = apply_kw(self.class_[0], immediate)
+        self.set_output('optimizer', Op(f, stored))
+
+
+def register_optimizers(reg):
+    modules = set()
+
+    for name in dir(tensorflow.train):
+        if name == 'Optimizer' or not name.endswith('Optimizer'):
+            continue
+
+        class_ = getattr(tensorflow.train, name)
+        if class_.__doc__ is None:
+            debug.log("Object has no __doc__: %s" % class_)
+            continue
+
+        args = guess_args(class_, class_.__init__.__doc__)
+
+        input_ports = [(arg, type_)
+                       for arg, descr, type_ in args]
+        reg.add_module(type(name, (AutoOptimizer,),
+                            {'args': args, 'class_': (class_,),
+                             '_input_ports': input_ports,
+                             '__doc__': class_.__doc__}),
+                       namespace='train|optimizer')
+        modules.add(name)
+
+    return modules
+
+
+def initialize():
+    from tensorflow.python.ops import standard_ops
+
+    reg = get_module_registry()
+
+    for module in base_modules:
+        reg.add_module(module)
+
+    # Optimizers
+    reg.add_module(AutoOptimizer)
+
+    optimizers = set(['Optimizer'])
+    optimizers.update(register_optimizers(reg))
+
+    # Operations
+    reg.add_module(AutoOperation)
+
+    ops = set(wrapped)
+    ops.update(register_operations(reg, standard_ops, '', ops))
+    ops.update(register_operations(reg, tensorflow.train, 'train',
+                                   ops | optimizers))
+    ops.update(register_operations(reg, tensorflow.nn, 'nn', ops))
+    ops.update(register_operations(reg, tensorflow.image, 'image', ops))
+
+
+###############################################################################
+
+import unittest
+
+
+class TestParser(unittest.TestCase):
+    def test_get_indent(self):
+        self.assertEqual(get_indent('hello world'), 0)
+        self.assertEqual(get_indent('  hello world'), 2)
+        self.assertEqual(get_indent('    hello world'), 4)
+
+    def test_read_args(self):
+        doc = """\
+Does a thing.
+
+  This module does something.
+
+  Args:
+    one: First description
+    two: Second
+         description
+"""
+        doc = doc.strip()
+        expected = ["one: First description", "two: Second description"]
+        self.assertEqual(list(read_args(doc + '\n')), expected)
+        self.assertEqual(list(read_args(doc)), expected)
+        self.assertEqual(list(read_args(doc + '\n  Returns:\n')), expected)
diff --git a/vistrails/packages/vtk/__init__.py b/vistrails/packages/vtk/__init__.py
index fec7c42..cb2cc8e 100644
--- a/vistrails/packages/vtk/__init__.py
+++ b/vistrails/packages/vtk/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/common.py b/vistrails/packages/vtk/common.py
index 7e4e348..bbd2048 100644
--- a/vistrails/packages/vtk/common.py
+++ b/vistrails/packages/vtk/common.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/hasher.py b/vistrails/packages/vtk/hasher.py
index 7a9f3b1..1800ffa 100644
--- a/vistrails/packages/vtk/hasher.py
+++ b/vistrails/packages/vtk/hasher.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/identifiers.py b/vistrails/packages/vtk/identifiers.py
index 0dd2417..0bf1ddc 100644
--- a/vistrails/packages/vtk/identifiers.py
+++ b/vistrails/packages/vtk/identifiers.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/init.py b/vistrails/packages/vtk/init.py
index 9b585a9..8d4a121 100644
--- a/vistrails/packages/vtk/init.py
+++ b/vistrails/packages/vtk/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -41,18 +41,20 @@ import os.path
 
 import vtk
 
+from distutils.version import LooseVersion
 from vistrails.core.configuration import ConfigField
-from vistrails.core.modules.basic_modules import PathObject, \
+from vistrails.core.modules.basic_modules import Path, PathObject, \
                                                        identifier as basic_pkg
 from vistrails.core.modules.config import ModuleSettings
 from vistrails.core.modules.vistrails_module import ModuleError
 from vistrails.core.modules.module_registry import get_module_registry
 from vistrails.core.modules.output_modules import OutputModule, ImageFileMode, \
     ImageFileModeConfig, IPythonMode, IPythonModeConfig
-from vistrails.core.system import get_vistrails_default_pkg_prefix, systemType, current_dot_vistrails
+from vistrails.core.system import systemType, current_dot_vistrails
 from vistrails.core.upgradeworkflow import UpgradeWorkflowHandler,\
                                        UpgradeModuleRemap, UpgradePackageRemap
 from vistrails.core.vistrail.connection import Connection
+from vistrails.core.vistrail.port import Port
 from .pythonclass import BaseClassModule, gen_class_module
 
 from .tf_widget import _modules as tf_modules
@@ -98,7 +100,11 @@ def render_to_image(output_filename, vtk_format, renderer, w, h):
     win2image.SetInput(window)
     win2image.Update()
     writer = vtk_format()
-    writer.SetInput(win2image.GetOutput())
+    if LooseVersion(vtk.vtkVersion().GetVTKVersion()) >= \
+       LooseVersion('6.0.0'):
+        writer.SetInputData(win2image.GetOutput())
+    else:
+        writer.SetInput(win2image.GetOutput())
     writer.SetFileName(output_filename)
     writer.Write()
     window.Finalize()
@@ -136,7 +142,7 @@ class vtkRendererToIPythonModeConfig(IPythonModeConfig):
 class vtkRendererToIPythonMode(IPythonMode):
     config_cls = vtkRendererToIPythonModeConfig
 
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         from IPython.core.display import display, Image
 
         r = output_module.get_input('value')[0].vtkInstance
@@ -422,11 +428,26 @@ def build_remap(module_name=None):
                                           old_conn.source,
                                           path_module,
                                           'name')
+            # Avoid descriptor lookup by explicitly creating Ports
+            input_port_id = controller.id_scope.getNewId(Port.vtType)
+            input_port = Port(id=input_port_id,
+                              name='value',
+                              type='source',
+                              signature=(Path,),
+                              moduleId=path_module.id,
+                              moduleName=path_module.name)
+            output_port_id = controller.id_scope.getNewId(Port.vtType)
+            output_port = Port(id=output_port_id,
+                               name=name,
+                               type='destination',
+                               signature=(Path,),
+                               moduleId=new_module.id,
+                               moduleName=new_module.name)
             conn2 = create_new_connection(controller,
                                           path_module,
-                                          'value',
+                                          input_port,
                                           new_module,
-                                          name)
+                                          output_port)
             return [('add', path_module),
                     ('add', conn1),
                     ('add', conn2)]
@@ -640,7 +661,6 @@ def handle_module_upgrade_request(controller, module_id, pipeline):
         _remap.add_module_remap(remap)
         remap = UpgradeModuleRemap(None, '1.0.0', '1.0.0',
                                    module_name='VTKCell')
-        remap.add_remap('src_port_remap', 'self', 'Instance')
         _remap.add_module_remap(remap)
         remap = UpgradeModuleRemap(None, '1.0.0', '1.0.0',
                                    module_name='VTKViewCell',
diff --git a/vistrails/packages/vtk/inspectors.py b/vistrails/packages/vtk/inspectors.py
index 5dc1708..adb4c22 100644
--- a/vistrails/packages/vtk/inspectors.py
+++ b/vistrails/packages/vtk/inspectors.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/offscreen.py b/vistrails/packages/vtk/offscreen.py
index 852ab5e..e32c2ba 100644
--- a/vistrails/packages/vtk/offscreen.py
+++ b/vistrails/packages/vtk/offscreen.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/pythonclass.py b/vistrails/packages/vtk/pythonclass.py
index 9cc03f8..d5dce67 100644
--- a/vistrails/packages/vtk/pythonclass.py
+++ b/vistrails/packages/vtk/pythonclass.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py
index f2d8688..dbec6d5 100644
--- a/vistrails/packages/vtk/tf_widget.py
+++ b/vistrails/packages/vtk/tf_widget.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/class_tree.py b/vistrails/packages/vtk/vtk_wrapper/class_tree.py
index 2f8ae65..322c526 100644
--- a/vistrails/packages/vtk/vtk_wrapper/class_tree.py
+++ b/vistrails/packages/vtk/vtk_wrapper/class_tree.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/fix_classes.py b/vistrails/packages/vtk/vtk_wrapper/fix_classes.py
index 3533cb3..b4d3519 100644
--- a/vistrails/packages/vtk/vtk_wrapper/fix_classes.py
+++ b/vistrails/packages/vtk/vtk_wrapper/fix_classes.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/parse.py b/vistrails/packages/vtk/vtk_wrapper/parse.py
index 484a995..ebf5653 100644
--- a/vistrails/packages/vtk/vtk_wrapper/parse.py
+++ b/vistrails/packages/vtk/vtk_wrapper/parse.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/specs.py b/vistrails/packages/vtk/vtk_wrapper/specs.py
index b1c65d7..f728b6f 100644
--- a/vistrails/packages/vtk/vtk_wrapper/specs.py
+++ b/vistrails/packages/vtk/vtk_wrapper/specs.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/vtk_classes.py b/vistrails/packages/vtk/vtk_wrapper/vtk_classes.py
index 8a229bd..41020f9 100644
--- a/vistrails/packages/vtk/vtk_wrapper/vtk_classes.py
+++ b/vistrails/packages/vtk/vtk_wrapper/vtk_classes.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/vtk_parser.py b/vistrails/packages/vtk/vtk_wrapper/vtk_parser.py
index 60fd693..39b0d4f 100644
--- a/vistrails/packages/vtk/vtk_wrapper/vtk_parser.py
+++ b/vistrails/packages/vtk/vtk_wrapper/vtk_parser.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtk_wrapper/wrapper.py b/vistrails/packages/vtk/vtk_wrapper/wrapper.py
index 05518dc..b887dc3 100644
--- a/vistrails/packages/vtk/vtk_wrapper/wrapper.py
+++ b/vistrails/packages/vtk/vtk_wrapper/wrapper.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtk/vtkcell.py b/vistrails/packages/vtk/vtkcell.py
index 0c6c423..3981870 100644
--- a/vistrails/packages/vtk/vtkcell.py
+++ b/vistrails/packages/vtk/vtkcell.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -57,7 +57,7 @@ from identifiers import identifier as vtk_pkg_identifier
 ################################################################################
 
 class vtkRendererToSpreadsheet(SpreadsheetMode):
-    def compute_output(self, output_module, configuration=None):
+    def compute_output(self, output_module, configuration):
         d = dict([(c(), c.obj) for c in output_module.inputPorts['value']])
         for ren, m in d.iteritems():
             ren.module_id = m.moduleInfo['moduleId']
diff --git a/vistrails/packages/vtk/vtkhandler.py b/vistrails/packages/vtk/vtkhandler.py
index 61e83a2..c8f6ba8 100644
--- a/vistrails/packages/vtk/vtkhandler.py
+++ b/vistrails/packages/vtk/vtkhandler.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtlcreator/__init__.py b/vistrails/packages/vtlcreator/__init__.py
index a23d16e..0bf87da 100644
--- a/vistrails/packages/vtlcreator/__init__.py
+++ b/vistrails/packages/vtlcreator/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/vtlcreator/init.py b/vistrails/packages/vtlcreator/init.py
index f1ef78a..e528e11 100644
--- a/vistrails/packages/vtlcreator/init.py
+++ b/vistrails/packages/vtlcreator/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/webServices/__init__.py b/vistrails/packages/webServices/__init__.py
index b18b4d2..d071f04 100644
--- a/vistrails/packages/webServices/__init__.py
+++ b/vistrails/packages/webServices/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/webServices/enumeration_widget.py b/vistrails/packages/webServices/enumeration_widget.py
index e8ac8ce..9c95c0f 100644
--- a/vistrails/packages/webServices/enumeration_widget.py
+++ b/vistrails/packages/webServices/enumeration_widget.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/packages/webServices/init.py b/vistrails/packages/webServices/init.py
index 884260a..7dd4dc1 100644
--- a/vistrails/packages/webServices/init.py
+++ b/vistrails/packages/webServices/init.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/run.py b/vistrails/run.py
index 90ca401..4f60a0e 100644
--- a/vistrails/run.py
+++ b/vistrails/run.py
@@ -2,7 +2,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -93,7 +93,8 @@ def fix_site():
 
 def fix_paths():
     import site
-    if not hasattr(site, "USER_BASE"): return # We are running py2app
+    if not hasattr(site, "USER_BASE"): return  # We are running py2app
+    if os.path.basename(__file__) != 'run.py': return  # Not running from source
 
     # Fix import path: add parent directory(so that we can
     # import vistrails.[gui|...] and remove other paths below it (we might have
@@ -125,6 +126,10 @@ def main():
     from vistrails.core import debug
     debug.DebugPrint.getInstance().log_to_console()
 
+    # Setup usage reporting
+    from vistrails.core import reportusage
+    reportusage.setup_usage_report()
+
     from vistrails.gui.requirements import require_pyqt4_api2
     require_pyqt4_api2()
 
@@ -142,6 +147,8 @@ def main():
         app = vistrails.gui.application.get_vistrails_application()
         if app:
             app.finishSession()
+        reportusage.submit_usage_report(result='init exit %s' %
+                                               getattr(e, 'code', '(unknown)'))
         sys.exit(e)
     except Exception, e:
         app = vistrails.gui.application.get_vistrails_application()
@@ -151,12 +158,17 @@ def main():
         print >>sys.stderr, "Uncaught exception on initialization: %s" % (
                 traceback._format_final_exc_line(type(e).__name__, e).strip())
         traceback.print_exc(None, sys.stderr)
+        reportusage.submit_usage_report(result='init %s' % type(e).__name__)
         sys.exit(255)
-    if (not app.temp_configuration.batch and
-        not app.temp_configuration.check('outputDirectory')):
-        v = app.exec_()
 
-    vistrails.gui.application.stop_application()
+    try:
+        if not app.temp_configuration.batch:
+            v = app.exec_()
+        vistrails.gui.application.stop_application()
+    except BaseException, e:
+        reportusage.submit_usage_report(result=type(e).__name__)
+        raise
+    reportusage.submit_usage_report(result='success %s' % v)
     sys.exit(v)
 
 if __name__ == '__main__':
diff --git a/vistrails/stop_vistrails_server.py b/vistrails/stop_vistrails_server.py
index 911dffa..3535227 100644
--- a/vistrails/stop_vistrails_server.py
+++ b/vistrails/stop_vistrails_server.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/__init__.py b/vistrails/tests/__init__.py
index 3cc08c9..0a88b85 100644
--- a/vistrails/tests/__init__.py
+++ b/vistrails/tests/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/__init__.py b/vistrails/tests/resources/__init__.py
index 8a88e1e..e5abc5b 100644
--- a/vistrails/tests/resources/__init__.py
+++ b/vistrails/tests/resources/__init__.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/broken_upgrade.xml b/vistrails/tests/resources/broken_upgrade.xml
new file mode 100644
index 0000000..d929f58
--- /dev/null
+++ b/vistrails/tests/resources/broken_upgrade.xml
@@ -0,0 +1,23 @@
+<vistrail id="" name="" version="1.0.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vistrails.org/vistrail.xsd">
+  <action date="2001-11-22 17:08:50" id="1" prevId="0" session="0" user="god">
+    <add id="0" objectId="0" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="0" name="Tuple" namespace="" package="edu.utah.sci.vistrails.basic" version="1.6" />
+    </add>
+    <add id="1" objectId="0" parentObjId="0" parentObjType="module" what="location">
+      <location id="0" x="0.0" y="0.0" />
+    </add>
+  </action>
+  <action date="2002-11-23 15:11:51" id="2" prevId="1" session="2" user="god">
+    <annotation id="0" key="__description__" value="Upgrade" />
+    <delete id="2" objectId="0" parentObjId="0" parentObjType="module" what="location" />
+    <delete id="3" objectId="0" parentObjId="" parentObjType="" what="module" />
+    <add id="4" objectId="1" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="1" name="BrokenUpgrade" namespace="" package="edu.utah.sci.vistrails.basic" version="10.0" />
+    </add>
+    <add id="5" objectId="1" parentObjId="1" parentObjType="module" what="location">
+      <location id="1" x="0.0" y="0.0" />
+    </add>
+  </action>
+  <actionAnnotation actionId="1" date="2002-09-12 14:41:53" id="0" key="__upgrade__" user="tommy" value="2" />
+  <actionAnnotation actionId="1" date="2002-09-12 14:42:20" id="1" key="__tag__" user="tommy" value="myTuple" />
+</vistrail>
diff --git a/vistrails/tests/resources/chained_upgrade.xml b/vistrails/tests/resources/chained_upgrade.xml
new file mode 100644
index 0000000..a8e28e4
--- /dev/null
+++ b/vistrails/tests/resources/chained_upgrade.xml
@@ -0,0 +1,23 @@
+<vistrail id="" name="" version="1.0.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vistrails.org/vistrail.xsd">
+  <action date="2001-11-22 17:08:50" id="1" prevId="0" session="0" user="god">
+    <add id="0" objectId="0" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="0" name="Tuple" namespace="" package="edu.utah.sci.vistrails.basic" version="1.0" />
+    </add>
+    <add id="1" objectId="0" parentObjId="0" parentObjType="module" what="location">
+      <location id="0" x="0.0" y="0.0" />
+    </add>
+  </action>
+  <action date="2002-11-23 15:11:51" id="2" prevId="1" session="2" user="god">
+    <annotation id="0" key="__description__" value="Upgrade" />
+    <delete id="2" objectId="0" parentObjId="0" parentObjType="module" what="location" />
+    <delete id="3" objectId="0" parentObjId="" parentObjType="" what="module" />
+    <add id="4" objectId="1" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="1" name="Tuple" namespace="" package="edu.utah.sci.vistrails.basic" version="1.6" />
+    </add>
+    <add id="5" objectId="1" parentObjId="1" parentObjType="module" what="location">
+      <location id="1" x="0.0" y="0.0" />
+    </add>
+  </action>
+  <actionAnnotation actionId="1" date="2002-09-12 14:41:53" id="0" key="__upgrade__" user="tommy" value="2" />
+  <actionAnnotation actionId="1" date="2002-09-12 14:42:20" id="1" key="__tag__" user="tommy" value="myTuple" />
+</vistrail>
diff --git a/vistrails/tests/resources/console_mode_test.py b/vistrails/tests/resources/console_mode_test.py
index e49f726..f408c48 100644
--- a/vistrails/tests/resources/console_mode_test.py
+++ b/vistrails/tests/resources/console_mode_test.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/dummy.xml b/vistrails/tests/resources/dummy.xml
index 05f589c..7b6efd3 100644
--- a/vistrails/tests/resources/dummy.xml
+++ b/vistrails/tests/resources/dummy.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/dummy_broken.xml b/vistrails/tests/resources/dummy_broken.xml
index 57316c4..b35a2b2 100644
--- a/vistrails/tests/resources/dummy_broken.xml
+++ b/vistrails/tests/resources/dummy_broken.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/dummy_new.xml b/vistrails/tests/resources/dummy_new.xml
index 7bb6411..fa0b875 100644
--- a/vistrails/tests/resources/dummy_new.xml
+++ b/vistrails/tests/resources/dummy_new.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/dynamic_module_error.xml b/vistrails/tests/resources/dynamic_module_error.xml
index ef12802..587f0fd 100644
--- a/vistrails/tests/resources/dynamic_module_error.xml
+++ b/vistrails/tests/resources/dynamic_module_error.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/empty_bookmarks.xml b/vistrails/tests/resources/empty_bookmarks.xml
index 1b4d366..247feee 100644
--- a/vistrails/tests/resources/empty_bookmarks.xml
+++ b/vistrails/tests/resources/empty_bookmarks.xml
@@ -1,6 +1,6 @@
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/jobs.vt b/vistrails/tests/resources/jobs.vt
new file mode 100644
index 0000000..7da3423
Binary files /dev/null and b/vistrails/tests/resources/jobs.vt differ
diff --git a/vistrails/tests/resources/looping_upgrades/__init__.py b/vistrails/tests/resources/looping_upgrades/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_a/__init__.py b/vistrails/tests/resources/looping_upgrades/pkg_a/__init__.py
new file mode 100644
index 0000000..15565ab
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_a/__init__.py
@@ -0,0 +1,3 @@
+identifier = "org.vistrails.vistrails.tests.looping_fix.a"
+name = "LoopingFixA"
+version = "0.2"
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_a/init.py b/vistrails/tests/resources/looping_upgrades/pkg_a/init.py
new file mode 100644
index 0000000..f13baf6
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_a/init.py
@@ -0,0 +1,23 @@
+from vistrails.core.modules.module_descriptor import ModuleDescriptor
+from vistrails.core.modules.vistrails_module import Module
+from vistrails.core.upgradeworkflow import UpgradeModuleRemap
+
+
+class A(Module):
+    _output_ports = [('result', 'basic:String')]
+
+    def compute(self):
+        self.set_output('result', 'A')
+
+
+_modules = [A]
+
+_upgrades = {'A' : [UpgradeModuleRemap(
+        # Upgrade for looping_fix.a 0.1 -> 0.2
+        # replaces module A with module B from looping_fix.b 0.1
+        '0.1', '0.2', '0.2',
+        new_module=ModuleDescriptor(
+                package='org.vistrails.vistrails.tests.looping_fix.b',
+                name='B',
+                namespace='',
+                package_version='0.1'))]}
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_b/__init__.py b/vistrails/tests/resources/looping_upgrades/pkg_b/__init__.py
new file mode 100644
index 0000000..0c072c1
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_b/__init__.py
@@ -0,0 +1,3 @@
+identifier = "org.vistrails.vistrails.tests.looping_fix.b"
+name = "LoopingFixB"
+version = "0.2"
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_b/init.py b/vistrails/tests/resources/looping_upgrades/pkg_b/init.py
new file mode 100644
index 0000000..50c0ca0
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_b/init.py
@@ -0,0 +1,23 @@
+from vistrails.core.modules.module_descriptor import ModuleDescriptor
+from vistrails.core.modules.vistrails_module import Module
+from vistrails.core.upgradeworkflow import UpgradeModuleRemap
+
+
+class B(Module):
+    _output_ports = [('result', 'basic:String')]
+
+    def compute(self):
+        self.set_output('result', 'B')
+
+
+_modules = [B]
+
+_upgrades = {'B' : [UpgradeModuleRemap(
+        # Upgrade for looping_fix.b 0.1 -> 0.2
+        # replaces module B with module C from looping_fix.c 1.0
+        '0.1', '0.2', '0.2',
+        new_module=ModuleDescriptor(
+                package='org.vistrails.vistrails.tests.looping_fix.c',
+                name='C',
+                namespace='',
+                package_version='1.0'))]}
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_c/__init__.py b/vistrails/tests/resources/looping_upgrades/pkg_c/__init__.py
new file mode 100644
index 0000000..9cd584a
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_c/__init__.py
@@ -0,0 +1,3 @@
+identifier = "org.vistrails.vistrails.tests.looping_fix.c"
+name = "LoopingFixC"
+version = "1.0"
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_c/init.py b/vistrails/tests/resources/looping_upgrades/pkg_c/init.py
new file mode 100644
index 0000000..d8ec626
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_c/init.py
@@ -0,0 +1,11 @@
+from vistrails.core.modules.vistrails_module import Module
+
+
+class C(Module):
+    _output_ports = [('result', 'basic:String')]
+
+    def compute(self):
+        self.set_output('result', 'C')
+
+
+_modules = [C]
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_x/__init__.py b/vistrails/tests/resources/looping_upgrades/pkg_x/__init__.py
new file mode 100644
index 0000000..7a88600
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_x/__init__.py
@@ -0,0 +1,3 @@
+identifier = "org.vistrails.vistrails.tests.looping_fix.x"
+name = "LoopingFixX"
+version = "0.2"
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_x/init.py b/vistrails/tests/resources/looping_upgrades/pkg_x/init.py
new file mode 100644
index 0000000..2c11950
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_x/init.py
@@ -0,0 +1,23 @@
+from vistrails.core.modules.module_descriptor import ModuleDescriptor
+from vistrails.core.modules.vistrails_module import Module
+from vistrails.core.upgradeworkflow import UpgradeModuleRemap
+
+
+class X(Module):
+    _output_ports = [('result', 'basic:String')]
+
+    def compute(self):
+        self.set_output('result', 'X')
+
+
+_modules = [X]
+
+_upgrades = {'X' : [UpgradeModuleRemap(
+        # Upgrade for looping_fix.x 0.1 -> 0.2
+        # replaces module X with module Y from looping_fix.y 0.1
+        '0.1', '0.2', '0.2',
+        new_module=ModuleDescriptor(
+                package='org.vistrails.vistrails.tests.looping_fix.y',
+                name='Y',
+                namespace='',
+                package_version='0.1'))]}
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_y/__init__.py b/vistrails/tests/resources/looping_upgrades/pkg_y/__init__.py
new file mode 100644
index 0000000..e233034
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_y/__init__.py
@@ -0,0 +1,3 @@
+identifier = "org.vistrails.vistrails.tests.looping_fix.y"
+name = "LoopingFixY"
+version = "0.2"
diff --git a/vistrails/tests/resources/looping_upgrades/pkg_y/init.py b/vistrails/tests/resources/looping_upgrades/pkg_y/init.py
new file mode 100644
index 0000000..e4c3256
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/pkg_y/init.py
@@ -0,0 +1,23 @@
+from vistrails.core.modules.module_descriptor import ModuleDescriptor
+from vistrails.core.modules.vistrails_module import Module
+from vistrails.core.upgradeworkflow import UpgradeModuleRemap
+
+
+class Y(Module):
+    _output_ports = [('result', 'basic:String')]
+
+    def compute(self):
+        self.set_output('result', 'Y')
+
+
+_modules = [Y]
+
+_upgrades = {'Y' : [UpgradeModuleRemap(
+        # Upgrade for looping_fix.y 0.1 -> 0.2
+        # replaces module Y with module X from looping_fix.x 0.1
+        '0.1', '0.2', '0.2',
+        new_module=ModuleDescriptor(
+                package='org.vistrails.vistrails.tests.looping_fix.x',
+                name='X',
+                namespace='',
+                package_version='0.1'))]}
diff --git a/vistrails/tests/resources/looping_upgrades/workflow.xml b/vistrails/tests/resources/looping_upgrades/workflow.xml
new file mode 100644
index 0000000..dbbf460
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/workflow.xml
@@ -0,0 +1,26 @@
+<vistrail id="" name="" version="1.0.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vistrails.org/vistrail.xsd">
+  <action date="2014-10-08 16:59:45" id="1" prevId="0" session="0" user="Remi">
+    <annotation id="0" key="__description__" value="Paste" />
+    <add id="0" objectId="0" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="0" name="A" namespace="" package="org.vistrails.vistrails.tests.looping_fix.a" version="0.1" />
+    </add>
+    <add id="1" objectId="0" parentObjId="0" parentObjType="module" what="location">
+      <location id="0" x="-31.0939597316" y="33.3825503356" />
+    </add>
+    <add id="2" objectId="1" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="1" name="StandardOutput" namespace="" package="org.vistrails.vistrails.basic" version="2.1.1" />
+    </add>
+    <add id="3" objectId="1" parentObjId="1" parentObjType="module" what="location">
+      <location id="1" x="53.0939597316" y="-53.3825503356" />
+    </add>
+    <add id="4" objectId="0" parentObjId="" parentObjType="" what="connection">
+      <connection id="0" />
+    </add>
+    <add id="5" objectId="1" parentObjId="0" parentObjType="connection" what="port">
+      <port id="1" moduleId="1" moduleName="StandardOutput" name="value" signature="(org.vistrails.vistrails.basic:Variant)" type="destination" />
+    </add>
+    <add id="6" objectId="0" parentObjId="0" parentObjType="connection" what="port">
+      <port id="0" moduleId="0" moduleName="A" name="result" signature="(org.vistrails.vistrails.basic:String)" type="source" />
+    </add>
+  </action>
+</vistrail>
diff --git a/vistrails/tests/resources/looping_upgrades/workflow2.xml b/vistrails/tests/resources/looping_upgrades/workflow2.xml
new file mode 100644
index 0000000..a38c857
--- /dev/null
+++ b/vistrails/tests/resources/looping_upgrades/workflow2.xml
@@ -0,0 +1,26 @@
+<vistrail id="" name="" version="1.0.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vistrails.org/vistrail.xsd">
+  <action date="2014-10-08 16:59:45" id="1" prevId="0" session="0" user="Remi">
+    <annotation id="0" key="__description__" value="Paste" />
+    <add id="0" objectId="0" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="0" name="X" namespace="" package="org.vistrails.vistrails.tests.looping_fix.x" version="0.1" />
+    </add>
+    <add id="1" objectId="0" parentObjId="0" parentObjType="module" what="location">
+      <location id="0" x="-31.0939597316" y="33.3825503356" />
+    </add>
+    <add id="2" objectId="1" parentObjId="" parentObjType="" what="module">
+      <module cache="1" id="1" name="StandardOutput" namespace="" package="org.vistrails.vistrails.basic" version="2.1.1" />
+    </add>
+    <add id="3" objectId="1" parentObjId="1" parentObjType="module" what="location">
+      <location id="1" x="53.0939597316" y="-53.3825503356" />
+    </add>
+    <add id="4" objectId="0" parentObjId="" parentObjType="" what="connection">
+      <connection id="0" />
+    </add>
+    <add id="5" objectId="1" parentObjId="0" parentObjType="connection" what="port">
+      <port id="1" moduleId="1" moduleName="StandardOutput" name="value" signature="(org.vistrails.vistrails.basic:Variant)" type="destination" />
+    </add>
+    <add id="6" objectId="0" parentObjId="0" parentObjType="connection" what="port">
+      <port id="0" moduleId="0" moduleName="X" name="result" signature="(org.vistrails.vistrails.basic:String)" type="source" />
+    </add>
+  </action>
+</vistrail>
diff --git a/vistrails/tests/resources/myjob.py b/vistrails/tests/resources/myjob.py
new file mode 100644
index 0000000..6702a58
--- /dev/null
+++ b/vistrails/tests/resources/myjob.py
@@ -0,0 +1,195 @@
+###############################################################################
+##
+## Copyright (C) 2014-2016, New York University.
+## Copyright (C) 2011-2014, NYU-Poly.
+## Copyright (C) 2006-2011, University of Utah.
+## All rights reserved.
+## Contact: contact at vistrails.org
+##
+## This file is part of VisTrails.
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+##  - Redistributions of source code must retain the above copyright notice,
+##    this list of conditions and the following disclaimer.
+##  - Redistributions in binary form must reproduce the above copyright
+##    notice, this list of conditions and the following disclaimer in the
+##    documentation and/or other materials provided with the distribution.
+##  - Neither the name of the New York University nor the names of its
+##    contributors may be used to endorse or promote products derived from
+##    this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+## THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+## OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+###############################################################################
+
+"""Testing package for Job Submission"""
+
+##############################################################################
+import time
+from vistrails.core.modules.vistrails_module import Module
+from vistrails.core.vistrail.job import JobMixin
+from vistrails.core.modules.config import IPort, OPort
+
+identifier = 'org.vistrails.vistrails.myjobs'
+version = '0.1.0'
+name = 'My Jobs'
+
+
+class TimedJobMonitor(object):
+    """ Example that will complete when the specified time have passed
+
+    """
+    def __init__(self, start_time, how_long=10):
+        self.start_time = start_time
+        self.how_long = how_long
+
+    def finished(self):
+        print time.time(), self.start_time, self.how_long
+        return (time.time()-self.start_time) > self.how_long
+
+
+class TimedJob(JobMixin, Module):
+    """ A module that suspends until 'how_long' seconds have passed
+
+    """
+    _input_ports = [IPort("how_long", "basic:Integer", default=10)]
+    _output_ports = [OPort("finished", "basic:Boolean")]
+
+    def job_read_inputs(self):
+        """ Implemented by modules to read job parameters from input ports.
+
+        Returns the `params` dictionary used by subsequent methods.
+        """
+        return {'how_long': self.force_get_input('how_long') or 10}
+
+    def job_start(self, params):
+        """ Implemented by modules to submit the job.
+
+        Gets the `params` dictionary and returns a new dictionary, for example
+        with additional info necessary to check the status later.
+        """
+
+        # this example gets the current time and stores it
+        # this time represents the information necessary to check the status of the job
+
+        params['start_time'] = time.time()
+        return params
+
+    def job_finish(self, params):
+        """ Implemented by modules to get info from the finished job.
+
+        This is called once the job is finished to get the results. These can
+        be added to the `params` dictionary that this method returns.
+
+        This is the right place to clean up the job from the server if they are
+        not supposed to persist.
+        """
+        return params
+
+    def job_set_results(self, params):
+        """ Implemented by modules to set the output ports.
+
+        This is called after job_finished() or after getting the cached results
+        to set the output ports on this module, from the `params` dictionary.
+        """
+        self.set_output('finished', True)
+
+    def job_get_handle(self, params):
+        """ Implemented by modules to return the JobHandle object.
+
+        This returns an object following the JobHandle interface. The
+        JobMonitor will use it to check the status of the job and call back
+        this module once the job is done.
+
+        JobHandle needs the following method:
+          * finished(): returns True if the job is finished
+        """
+        return TimedJobMonitor(params['start_time'], params['how_long'])
+
+
+class SuspendNJobMonitor(object):
+    """ Example that will complete the n-th  time it is checked
+
+    """
+    def __init__(self, module, params):
+        """ Store job params so that n can be updated in job info
+        """
+        self.module = module
+        self.params = params
+
+    def finished(self):
+        if self.params['n'] == 0:
+            return True
+        else:
+            self.params['n'] -= 1
+            return False
+
+
+class SuspendNJob(JobMixin, Module):
+    """ A module that suspends until it has been checked 'n' times
+
+    """
+    _input_ports = [IPort("n", "basic:Integer", default=1)]
+    _output_ports = [OPort("finished", "basic:Boolean")]
+
+    def job_read_inputs(self):
+        """ Implemented by modules to read job parameters from input ports.
+
+        Returns the `params` dictionary used by subsequent methods.
+        """
+        return {'n': self.force_get_input('n') or 1}
+
+    def job_start(self, params):
+        """ Implemented by modules to submit the job.
+
+        Gets the `params` dictionary and returns a new dictionary, for example
+        with additional info necessary to check the status later.
+        """
+
+        # this example does not need to be started since it only uses an input as initial job state
+        return params
+
+    def job_finish(self, params):
+        """ Implemented by modules to get info from the finished job.
+
+        This is called once the job is finished to get the results. These can
+        be added to the `params` dictionary that this method returns.
+
+        This is the right place to clean up the job from the server if they are
+        not supposed to persist.
+        """
+        return params
+
+    def job_set_results(self, params):
+        """ Implemented by modules to set the output ports.
+
+        This is called after job_finished() or after getting the cached results
+        to set the output ports on this module, from the `params` dictionary.
+        """
+        self.set_output('finished', True)
+
+    def job_get_handle(self, params):
+        """ Implemented by modules to return the JobHandle object.
+
+        This returns an object following the JobHandle interface. The
+        JobMonitor will use it to check the status of the job and call back
+        this module once the job is done.
+
+        JobHandle needs the following method:
+          * finished(): returns True if the job is finished
+        """
+        return SuspendNJobMonitor(self, params)
+
+_modules = [TimedJob, SuspendNJob]
diff --git a/vistrails/tests/resources/pythonsource.xml b/vistrails/tests/resources/pythonsource.xml
index a7cf52c..a158b0a 100644
--- a/vistrails/tests/resources/pythonsource.xml
+++ b/vistrails/tests/resources/pythonsource.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/test_alias.xml b/vistrails/tests/resources/test_alias.xml
index 3e5a94f..9085e7e 100644
--- a/vistrails/tests/resources/test_alias.xml
+++ b/vistrails/tests/resources/test_alias.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/test_ticket_73.xml b/vistrails/tests/resources/test_ticket_73.xml
index 94182b1..4d49bd7 100644
--- a/vistrails/tests/resources/test_ticket_73.xml
+++ b/vistrails/tests/resources/test_ticket_73.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/resources/vtk.xml b/vistrails/tests/resources/vtk.xml
index 212021a..b808d48 100644
--- a/vistrails/tests/resources/vtk.xml
+++ b/vistrails/tests/resources/vtk.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!--###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
diff --git a/vistrails/tests/runtestsuite.py b/vistrails/tests/runtestsuite.py
index 40d8fb7..15b7a49 100755
--- a/vistrails/tests/runtestsuite.py
+++ b/vistrails/tests/runtestsuite.py
@@ -2,7 +2,7 @@
 # pragma: no testimport
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -58,6 +58,17 @@ import re
 import shutil
 import tempfile
 
+# This makes sure we use unittest2 everywhere
+# If we are running 2.6, since our tests are in the same files as our code,
+# VisTrails might choke up because of missing unittest features
+try:
+    import unittest2
+except ImportError:
+    pass
+else:
+    sys.modules['unittest'] = unittest2
+import unittest
+
 if 'vistrails' not in sys.modules:
     # Makes sure we can import modules as if we were running VisTrails
     # from the root directory
@@ -81,7 +92,7 @@ class clean_tempdir(object):
         nb_dirs = 0
         nb_files = 0
         for f in self.listdir(self.test_temp_dir):
-            if self.isdir(f):
+            if self.isdir(os.path.join(self.test_temp_dir,f)):
                 nb_dirs += 1
             else:
                 nb_files += 1
@@ -160,10 +171,20 @@ def setNewPyQtAPI():
         print "Could not set PyQt API, is PyQt4 installed?"
 setNewPyQtAPI()
 
+# Start debugger on test failure
+if debug_mode:
+    from vistrails.tests.utils import DebugTestCaseMetaBase
+    unittest.TestCase = DebugTestCaseMetaBase
+
 # Log to the console
 import vistrails.core.debug
 vistrails.core.debug.DebugPrint.getInstance().log_to_console()
 
+# Disable usage reporting
+os.environ['VISTRAILS_USAGE_STATS'] = 'off'
+from vistrails.core import reportusage
+reportusage.setup_usage_report()
+
 import vistrails.tests
 import vistrails.core
 import vistrails.core.db.io
@@ -174,10 +195,6 @@ from vistrails.core.system import vistrails_root_directory, \
                                   vistrails_examples_directory
 from vistrails.core.packagemanager import get_package_manager
 
-# VisTrails does funny stuff with unittest/unittest2, be sure to load that
-# after vistrails
-import unittest
-
 # reinitializing arguments and options so VisTrails does not try parsing them
 sys.argv = sys.argv[:1]
 vistrails.gui.application.VistrailsApplicationSingleton.use_event_filter = \
@@ -256,6 +273,7 @@ optionsDict = {
         'developerDebugger': debug_mode,
         'debugLevel': vistrails_verbose,
         'dontUnloadModules': True,
+        'showVistrailsNews': False,
     }
 if dotVistrails:
     optionsDict['dotVistrails'] = dotVistrails
diff --git a/vistrails/tests/utils.py b/vistrails/tests/utils.py
index bc7b79b..a076d4a 100644
--- a/vistrails/tests/utils.py
+++ b/vistrails/tests/utils.py
@@ -1,6 +1,6 @@
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.
@@ -37,8 +37,13 @@
 from __future__ import division
 
 import contextlib
+import functools
 import logging
+import os
+import pdb
 import sys
+import traceback
+import unittest
 
 try:
     import cStringIO as StringIO
@@ -221,6 +226,31 @@ def execute(modules, connections=[], add_port_specs=[],
         return result.errors
 
 
+def run_file(filename, tag_filter=lambda x: True):
+    """Loads a .vt file and runs all the tagged versions in it.
+    """
+    import vistrails.core.db.io
+    from vistrails.core.db.locator import FileLocator
+    from vistrails.core.system import vistrails_root_directory
+    from vistrails.core.vistrail.controller import VistrailController
+
+    filename = os.path.join(vistrails_root_directory(), '..', filename)
+    locator = FileLocator(filename)
+    loaded_objs = vistrails.core.db.io.load_vistrail(locator)
+    controller = VistrailController(loaded_objs[0], locator, *loaded_objs[1:])
+    errors = []
+    for version, name in controller.vistrail.get_tagMap().iteritems():
+        if tag_filter(name):
+            controller.change_selected_version(0)
+            controller.change_selected_version(version)
+            assert controller.current_version != 0
+            (result,), _ = controller.execute_current_workflow()
+            if result.errors:
+                errors.append(("%d: %s" % (version, name), result.errors))
+
+    return errors
+
+
 @contextlib.contextmanager
 def intercept_result(module, output_name):
     """This temporarily hooks a module to intercept its results.
@@ -346,3 +376,44 @@ class MockLogHandler(logging.Handler):
         finally:
             if hasattr(logging, '_acquireLock'):
                 logging._releaseLock()
+
+
+def debug_func(f):
+    """Decorator starting a debugger when a method raises an exception.
+    """
+    @functools.wraps(f)
+    def wrapper(*args, **kwargs):
+        try:
+            return f(*args, **kwargs)
+        except Exception:
+            info = sys.exc_info()
+            traceback.print_exception(*info)
+            tb = info[2]
+            tb_it = tb
+            while tb_it.tb_next is not None:
+                tb_it = tb_it.tb_next
+            frame = tb_it.tb_frame
+            p = pdb.Pdb()
+            p.reset()
+            p.interaction(frame, tb)
+            raise
+    return wrapper
+
+
+class debug_metaclass(type):
+    """Metaclass adding `debug_func` on every ``test_*`` method.
+    """
+    def __new__(cls, name, bases, dct):
+        new_dct = {}
+        for k, v in dct.iteritems():
+            if k.startswith('test_'):
+                new_dct[k] = debug_func(v)
+            else:
+                new_dct[k] = v
+        return type.__new__(cls, name, bases, new_dct)
+
+
+class DebugTestCaseMetaBase(unittest.TestCase):
+    """Base class used to bring in `debug_metaclass`.
+    """
+    __metaclass__ = debug_metaclass
diff --git a/vistrails/vistrails_server.py b/vistrails/vistrails_server.py
index c3264ff..a7508a4 100644
--- a/vistrails/vistrails_server.py
+++ b/vistrails/vistrails_server.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 ###############################################################################
 ##
-## Copyright (C) 2014-2015, New York University.
+## Copyright (C) 2014-2016, New York University.
 ## Copyright (C) 2011-2014, NYU-Poly.
 ## Copyright (C) 2006-2011, University of Utah.
 ## All rights reserved.

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



More information about the debian-science-commits mailing list